Initial commit
This commit is contained in:
		
							
								
								
									
										15
									
								
								.eslintrc.cjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.eslintrc.cjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| /* eslint-env node */ | ||||
| require('@rushstack/eslint-patch/modern-module-resolution') | ||||
|  | ||||
| module.exports = { | ||||
|   root: true, | ||||
|   'extends': [ | ||||
|     'plugin:vue/vue3-essential', | ||||
|     'eslint:recommended', | ||||
|     '@vue/eslint-config-typescript', | ||||
|     '@vue/eslint-config-prettier/skip-formatting' | ||||
|   ], | ||||
|   parserOptions: { | ||||
|     ecmaVersion: 'latest' | ||||
|   } | ||||
| } | ||||
							
								
								
									
										30
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| # Logs | ||||
| logs | ||||
| *.log | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
| pnpm-debug.log* | ||||
| lerna-debug.log* | ||||
|  | ||||
| node_modules | ||||
| .DS_Store | ||||
| dist | ||||
| dist-ssr | ||||
| coverage | ||||
| *.local | ||||
|  | ||||
| /cypress/videos/ | ||||
| /cypress/screenshots/ | ||||
|  | ||||
| # Editor directories and files | ||||
| .vscode/* | ||||
| !.vscode/extensions.json | ||||
| .idea | ||||
| *.suo | ||||
| *.ntvs* | ||||
| *.njsproj | ||||
| *.sln | ||||
| *.sw? | ||||
|  | ||||
| *.tsbuildinfo | ||||
							
								
								
									
										8
									
								
								.prettierrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.prettierrc.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| { | ||||
|   "$schema": "https://json.schemastore.org/prettierrc", | ||||
|   "semi": false, | ||||
|   "tabWidth": 2, | ||||
|   "singleQuote": true, | ||||
|   "printWidth": 100, | ||||
|   "trailingComma": "none" | ||||
| } | ||||
							
								
								
									
										18
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| /* eslint-disable */ | ||||
| // @ts-nocheck | ||||
| // Generated by unplugin-vue-components | ||||
| // Read more: https://github.com/vuejs/core/pull/3399 | ||||
| export {} | ||||
|  | ||||
| /* prettier-ignore */ | ||||
| declare module 'vue' { | ||||
|   export interface GlobalComponents { | ||||
|     Button: typeof import('primevue/button')['default'] | ||||
|     DataView: typeof import('primevue/dataview')['default'] | ||||
|     FullscreenCamera: typeof import('./src/components/FullscreenCamera.vue')['default'] | ||||
|     InputText: typeof import('primevue/inputtext')['default'] | ||||
|     RouterLink: typeof import('vue-router')['RouterLink'] | ||||
|     RouterView: typeof import('vue-router')['RouterView'] | ||||
|     Tag: typeof import('primevue/tag')['default'] | ||||
|   } | ||||
| } | ||||
							
								
								
									
										13
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
|   <head> | ||||
|     <meta charset="UTF-8"> | ||||
|     <link rel="icon" href="/favicon.ico"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||
|     <title>Vite App</title> | ||||
|   </head> | ||||
|   <body> | ||||
|     <div id="app"></div> | ||||
|     <script type="module" src="/src/main.ts"></script> | ||||
|   </body> | ||||
| </html> | ||||
							
								
								
									
										4511
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										4511
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										46
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| { | ||||
|   "name": "camera-app", | ||||
|   "version": "0.0.0", | ||||
|   "private": true, | ||||
|   "type": "module", | ||||
|   "scripts": { | ||||
|     "dev": "vite", | ||||
|     "build": "run-p type-check \"build-only {@}\" --", | ||||
|     "preview": "vite preview", | ||||
|     "build-only": "vite build", | ||||
|     "type-check": "vue-tsc --build --force", | ||||
|     "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", | ||||
|     "format": "prettier --write src/" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@primevue/themes": "^4.1.0", | ||||
|     "axios": "^1.7.7", | ||||
|     "pinia": "^2.1.7", | ||||
|     "primevue": "^4.1.0", | ||||
|     "simple-vue-camera": "^1.1.3", | ||||
|     "tailwindcss-primeui": "^0.3.4", | ||||
|     "vue": "^3.4.29", | ||||
|     "vue-router": "^4.3.3" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@primevue/auto-import-resolver": "^4.1.0", | ||||
|     "@rushstack/eslint-patch": "^1.8.0", | ||||
|     "@tsconfig/node20": "^20.1.4", | ||||
|     "@types/node": "^20.14.5", | ||||
|     "@vitejs/plugin-vue": "^5.0.5", | ||||
|     "@vue/eslint-config-prettier": "^9.0.0", | ||||
|     "@vue/eslint-config-typescript": "^13.0.0", | ||||
|     "@vue/tsconfig": "^0.5.1", | ||||
|     "autoprefixer": "^10.4.20", | ||||
|     "eslint": "^8.57.0", | ||||
|     "eslint-plugin-vue": "^9.23.0", | ||||
|     "npm-run-all2": "^6.2.0", | ||||
|     "postcss": "^8.4.47", | ||||
|     "prettier": "^3.2.5", | ||||
|     "tailwindcss": "^3.4.13", | ||||
|     "typescript": "~5.4.0", | ||||
|     "unplugin-vue-components": "^0.27.4", | ||||
|     "vite": "^5.3.1", | ||||
|     "vue-tsc": "^2.0.21" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										6
									
								
								postcss.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								postcss.config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| export default { | ||||
|   plugins: { | ||||
|     tailwindcss: {}, | ||||
|     autoprefixer: {}, | ||||
|   }, | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 4.2 KiB | 
							
								
								
									
										10
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <script setup lang="ts"> | ||||
| import { RouterLink, RouterView } from 'vue-router' | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <RouterView /> | ||||
| </template> | ||||
|  | ||||
| <style scoped> | ||||
| </style> | ||||
| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF"><path d="M236-477q0 60 21.5 103.5T319-298l25 16v-74q0-13 9.5-23t25.5-10q13 0 23 10t10 23v162q0 21-13 33.5T367-148H206q-15 0-24.5-10t-9.5-25q0-13 9.5-23t25.5-10h70l-6-6q-66-56-96.5-117T144-477q0-102 55.5-184T345-784q15-8 29.5 1.5T394-755q3 18-5.5 34T367-696q-62 32-96.5 91T236-477Zm489-7q0-44-23-90.5T644-657l-24-21v73q0 14-10 24t-24 10q-14 0-24.5-10.5T551-606v-161q0-20 13-32.5t34-12.5h160q14 0 24 9.5t10 23.5q0 14-10 24.5T758-744h-73l7 8q63 57 94 124t31 128q0 102-53.5 183.5T620-177q-16 9-31.5 0T569-205q-5-18 3-34t24-25q60-31 94.5-90.5T725-484Z"/></svg> | ||||
| After Width: | Height: | Size: 662 B | 
							
								
								
									
										106
									
								
								src/components/FullscreenCamera.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								src/components/FullscreenCamera.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| <script setup lang="ts"> | ||||
| import { ref } from 'vue' | ||||
| import type Camera from 'simple-vue-camera' | ||||
| import { useSiteControlStore } from '@/stores/siteControlStore' | ||||
| import { useCheckpointStore } from '@/stores/checkpointStore' | ||||
| import { storeToRefs } from 'pinia' | ||||
| import type { CheckpointPhoto } from '@/main' | ||||
|  | ||||
| const camera = ref<InstanceType<typeof Camera>>(); | ||||
| const photosList = ref<Array<Blob>>([]); | ||||
| const lastestPhoto = ref<string>(); | ||||
| const siteControlStore = useSiteControlStore(); | ||||
| const checkpointStore = useCheckpointStore(); | ||||
| const { currentCheckpoint } = storeToRefs(checkpointStore); | ||||
|  | ||||
| const snapshot = async () => { | ||||
|   const blob = await camera.value?.snapshot({ width: 540, height: 960 },"image/png", | ||||
|     1); | ||||
|   console.log(blob); | ||||
|   // To show the screenshot with an image tag, create a url | ||||
|   if(blob != undefined) { | ||||
|     const url = URL.createObjectURL(blob); | ||||
|     photosList.value.push(blob); | ||||
|     var link = document.createElement('a'); | ||||
|     link.download = `vue-cam-${new Date().toISOString()}.png`; | ||||
|     link.href = url; | ||||
|     if (currentCheckpoint.value == undefined) { | ||||
|       currentCheckpoint.value = {} as CheckpointPhoto; | ||||
|     } | ||||
|     currentCheckpoint.value.photoURL = url; | ||||
|     currentCheckpoint.value.photoBlob = blob; | ||||
|     // link.click(); | ||||
|   } | ||||
| } | ||||
| function switchCamera() { | ||||
|   siteControlStore.switchCameraState(); | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <camera-component ref="camera" autoplay style="display: flex; position: relative; align-items: center" > | ||||
|     <div style="display: flex; justify-content: center; align-items: center; height: 100%"> | ||||
|       <div @click="snapshot" class="photo-button" style="align-content: center;"> | ||||
|         <div class="circle"></div> | ||||
|         <div class="ring"></div> | ||||
|       </div> | ||||
|       <div @click="switchCamera" class="swap-button" style="align-content: center;"> | ||||
|         <img src="/home/patryk/WebstormProjects/camera-app/src/assets/sync_200dp_FFFFFF_FILL0_wght700_GRAD200_opsz48.svg" style="height:80px; margin-left: 10px"/> | ||||
|         <div class="ring"></div> | ||||
|       </div> | ||||
|  | ||||
|     </div> | ||||
|   </camera-component> | ||||
| </template> | ||||
|  | ||||
| <style scoped> | ||||
| .photo-button { | ||||
|   width: 100px; | ||||
|   height: 100px; | ||||
|   top: 75%; | ||||
|   left: 25%; | ||||
|   margin-left: -50px; | ||||
|   position: absolute; | ||||
| } | ||||
| .swap-button { | ||||
|   width: 100px; | ||||
|   height: 100px; | ||||
|   top: 75%; | ||||
|   left: 75%; | ||||
|   margin-left: -50px; | ||||
|   position: absolute; | ||||
| } | ||||
| .circle { | ||||
|   position: absolute; | ||||
|   top: 12%; | ||||
|   left: 12%; | ||||
|   bottom: 12%; | ||||
|   right: 12%; | ||||
|   border-radius: 100%; | ||||
|   background-color: #ffffff; | ||||
|   opacity: 0; | ||||
| } | ||||
| .ring { | ||||
|   position: absolute; | ||||
|   top: 0; | ||||
|   left: 0; | ||||
|   bottom: 0; | ||||
|   right: 0; | ||||
|  | ||||
|   border-radius: 100%; | ||||
|   border: 0.5em solid #ffffff; | ||||
|   opacity: 0.8; | ||||
| } | ||||
| .photo-button .circle, .photo-button .ring { | ||||
|   transition: all 0.25s; | ||||
| } | ||||
| .photo-button:hover .circle { | ||||
|   opacity: 1; | ||||
| } | ||||
| .photo-button:active .ring { | ||||
|   opacity: 1; | ||||
| } | ||||
| .photo-button:active .circle { | ||||
|   opacity: 0.5; | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										42
									
								
								src/main.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/main.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| import '../src/style.css' | ||||
|  | ||||
| import { createApp } from 'vue' | ||||
| import { createPinia } from 'pinia' | ||||
|  | ||||
| import PrimeVue from 'primevue/config'; | ||||
| import Aura from '@primevue/themes/aura'; | ||||
| import App from './App.vue' | ||||
| import router from './router' | ||||
| import Camera from 'simple-vue-camera' | ||||
| import axios from 'axios' | ||||
|  | ||||
| const app = createApp(App) | ||||
|  | ||||
| app.use(createPinia()) | ||||
| app.use(router) | ||||
| app.component("cameraComponent", Camera) | ||||
| app.use(PrimeVue, { | ||||
|   theme: { | ||||
|     preset: Aura, | ||||
|     options: { | ||||
|       cssLayer: { | ||||
|         name: 'primevue', | ||||
|         order: 'tailwind-base, primevue, tailwind-utilities' | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }); | ||||
|  | ||||
| export const axiosInstance = axios.create({ | ||||
|   baseURL: 'http://inspekcja.mleczarnia-kuzma.pl/api', | ||||
|   withCredentials: true | ||||
| }); | ||||
|  | ||||
| export interface CheckpointPhoto { | ||||
|   photoBlob: Blob, | ||||
|   comment: string, | ||||
|   photoURL: string, | ||||
|   checkpointName: string | ||||
| } | ||||
|  | ||||
| app.mount('#app') | ||||
							
								
								
									
										23
									
								
								src/router/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/router/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| import { createRouter, createWebHistory } from 'vue-router' | ||||
| import HomeView from '../views/HomeView.vue' | ||||
|  | ||||
| const router = createRouter({ | ||||
|   history: createWebHistory(import.meta.env.BASE_URL), | ||||
|   routes: [ | ||||
|     { | ||||
|       path: '/', | ||||
|       name: 'home', | ||||
|       component: HomeView | ||||
|     }, | ||||
|     { | ||||
|       path: '/about', | ||||
|       name: 'about', | ||||
|       // route level code-splitting | ||||
|       // this generates a separate chunk (About.[hash].js) for this route | ||||
|       // which is lazy-loaded when the route is visited. | ||||
|       component: () => import('../views/AboutView.vue') | ||||
|     } | ||||
|   ] | ||||
| }) | ||||
|  | ||||
| export default router | ||||
							
								
								
									
										40
									
								
								src/stores/checkpointStore.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/stores/checkpointStore.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| import { ref, computed } from 'vue' | ||||
| import { defineStore } from 'pinia' | ||||
| import type { CheckpointPhoto } from '@/main' | ||||
| import image1 from '@/assets/462543062_571956811847971_6091192186898499954_n.jpg' | ||||
| import image2 from '@/assets/462543273_1547886179452155_4598127063523571403_n.jpg' | ||||
| import image3 from '@/assets/462555442_563827316092754_1417971777838745605_n.jpg' | ||||
| import image4 from '@/assets/462561044_1684289689086565_883327244306079067_n.jpg' | ||||
|  | ||||
| export const useCheckpointStore = defineStore('checkpoint', () => { | ||||
|   const checkpointList = ref<Array<CheckpointPhoto>>([ | ||||
|     { | ||||
|       photoURL: image1, | ||||
|       photoBlob: new Blob(), | ||||
|       comment: "", | ||||
|       checkpointName: "checkpoint 1" | ||||
|     }, | ||||
|     { | ||||
|       photoURL: image2, | ||||
|       photoBlob: new Blob(), | ||||
|       comment: "", | ||||
|       checkpointName: "checkpoint 2" | ||||
|     }, | ||||
|     { | ||||
|       photoURL: image3, | ||||
|       photoBlob: new Blob(), | ||||
|       comment: "", | ||||
|       checkpointName: "checkpoint 3" | ||||
|     }, | ||||
|     { | ||||
|       photoURL: image4, | ||||
|       photoBlob: new Blob(), | ||||
|       comment: "", | ||||
|       checkpointName: "checkpoint 4" | ||||
|     } | ||||
|   ]); | ||||
|  | ||||
|   const currentCheckpoint = ref<CheckpointPhoto>(); | ||||
|  | ||||
|   return {checkpointList, currentCheckpoint} | ||||
| }) | ||||
							
								
								
									
										12
									
								
								src/stores/siteControlStore.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/stores/siteControlStore.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| import { ref, computed } from 'vue' | ||||
| import { defineStore } from 'pinia' | ||||
|  | ||||
| export const useSiteControlStore = defineStore('siteControl', () => { | ||||
|   const isCameraOn = ref<boolean>(false); | ||||
|  | ||||
|   function switchCameraState() { | ||||
|     isCameraOn.value = !isCameraOn.value; | ||||
|   } | ||||
|  | ||||
|   return { isCameraOn, switchCameraState } | ||||
| }) | ||||
							
								
								
									
										14
									
								
								src/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/style.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| @tailwind base; | ||||
| @tailwind components; | ||||
| @tailwind utilities; | ||||
|  | ||||
| @layer tailwind-base, primevue, tailwind-utilities; | ||||
|  | ||||
| @layer tailwind-base { | ||||
|     @tailwind base; | ||||
| } | ||||
|  | ||||
| @layer tailwind-utilities { | ||||
|     @tailwind components; | ||||
|     @tailwind utilities; | ||||
| } | ||||
							
								
								
									
										95
									
								
								src/views/HomeView.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								src/views/HomeView.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | ||||
| <script setup lang="ts"> | ||||
| import type Camera from 'simple-vue-camera' | ||||
| import { ref } from 'vue' | ||||
| import { useSiteControlStore } from '@/stores/siteControlStore' | ||||
| import { storeToRefs } from 'pinia' | ||||
| import { axiosInstance, type CheckpointPhoto } from '@/main' | ||||
| import FullscreenCamera from '@/components/FullscreenCamera.vue' | ||||
| import { useCheckpointStore } from '@/stores/checkpointStore' | ||||
|  | ||||
|  | ||||
| const camera = ref<InstanceType<typeof Camera>>(); | ||||
| const lastestPhoto = ref<string>(); | ||||
|  | ||||
| const siteControlStore = useSiteControlStore(); | ||||
| const checkpointStore = useCheckpointStore(); | ||||
| const { isCameraOn } = storeToRefs(siteControlStore); | ||||
| const { checkpointList, currentCheckpoint } = storeToRefs(checkpointStore); | ||||
|  | ||||
|  | ||||
| function switchCamera(checkpoint : CheckpointPhoto) { | ||||
|   currentCheckpoint.value = checkpoint; | ||||
|   siteControlStore.switchCameraState(); | ||||
| } | ||||
|  | ||||
| function sendPhoto() { | ||||
|   // let reader = new FileReader(); | ||||
|   // let base64String; | ||||
|   // reader.readAsDataURL(photosList.value[0].photoBlob); | ||||
|   // reader.onloadend = function () { | ||||
|   //   base64String = reader.result as string; | ||||
|   //   console.log('Base64 String - ', base64String); | ||||
|   // | ||||
|   //   // Simply Print the Base64 Encoded String, | ||||
|   //   // without additional data: Attributes. | ||||
|   //   console.log('Base64 String without Tags- ', | ||||
|   //     base64String.substring(base64String.indexOf(',') + 1)); | ||||
|   //   const json = { | ||||
|   //     comment: 'test test', | ||||
|   //     filename: 'test.png', | ||||
|   //     base64: base64String | ||||
|   //   } | ||||
|   //   console.log(JSON.stringify(json)); | ||||
|   //   // axiosInstance.post('/upload', JSON.stringify(json)).then( response => { | ||||
|   //   //   console.log(response); | ||||
|   //   // }); | ||||
|   //} | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <FullscreenCamera v-if="isCameraOn == true"/> | ||||
|   <div v-else> | ||||
|     <DataView :value="checkpointList" layout="grid" data-key=""> | ||||
|       <template #grid="slotProps"> | ||||
|         <div class="grid grid-cols-12 gap-4"> | ||||
|           <div v-for="(item, index) in slotProps.items" :key="index" class="col-span-12 sm:col-span-6 md:col-span-4 xl:col-span-6 p-2"> | ||||
|             <div class="p-6 border border-surface-200 dark:border-surface-700 bg-surface-0 dark:bg-surface-900 rounded flex flex-col h-[100%]"> | ||||
|               <div class="bg-surface-50 flex justify-center rounded p-4 h-[inherit]"> | ||||
|                 <div class="relative mx-auto flex align-middle"> | ||||
|                   <img class="rounded w-full" :src="item.photoURL" :alt="item.name" style="max-width: 300px" v-if="item.photoURL != undefined"/> | ||||
|                   <span class="font-medium text-center self-center h-auto" v-else>Zrób zdjęcie</span> | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="pt-6"> | ||||
|                 <div class="flex flex-row justify-between items-start gap-2"> | ||||
|                   <div> | ||||
|                     <div class="text-xl font-bold mt-1">{{ item.checkpointName }}</div> | ||||
|                   </div> | ||||
|                 </div> | ||||
|                 <div class="flex flex-col gap-6 mt-4"> | ||||
|                   <div> | ||||
|                     <label for="fluid" class="font-medium mb-2 block">Komentarz</label> | ||||
|                     <InputText v-model="item.comment" fluid /> | ||||
|                   </div> | ||||
|                   <div class="flex gap-2"> | ||||
|                     <Button icon="pi pi-shopping-cart" label="Otwórz kamerę" class="flex-auto whitespace-nowrap" @click="switchCamera(item)"></Button> | ||||
|                   </div> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|       </template> | ||||
|     </DataView> | ||||
|     <Button label="Send photo" @click="sendPhoto"/> | ||||
|     <h1 class="text-3xl font-bold underline"> | ||||
|       Hello world! | ||||
|     </h1> | ||||
|   </div> | ||||
|  | ||||
| </template> | ||||
|  | ||||
| <style scoped> | ||||
|  | ||||
| </style> | ||||
							
								
								
									
										13
									
								
								tailwind.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								tailwind.config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| /** @type {import('tailwindcss').Config} */ | ||||
| // eslint-disable-next-line no-undef | ||||
| module.exports = { | ||||
|   content: [ | ||||
|     "./index.html", | ||||
|     "./src/**/*.{vue,js,ts,jsx,tsx}", | ||||
|   ], | ||||
|   theme: { | ||||
|     extend: {}, | ||||
|   }, | ||||
|   // eslint-disable-next-line no-undef | ||||
|   plugins: [require('tailwindcss-primeui')], | ||||
| } | ||||
							
								
								
									
										14
									
								
								tsconfig.app.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								tsconfig.app.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| { | ||||
|   "extends": "@vue/tsconfig/tsconfig.dom.json", | ||||
|   "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], | ||||
|   "exclude": ["src/**/__tests__/*"], | ||||
|   "compilerOptions": { | ||||
|     "composite": true, | ||||
|     "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", | ||||
|  | ||||
|     "baseUrl": ".", | ||||
|     "paths": { | ||||
|       "@/*": ["./src/*"] | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										11
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| { | ||||
|   "files": [], | ||||
|   "references": [ | ||||
|     { | ||||
|       "path": "./tsconfig.node.json" | ||||
|     }, | ||||
|     { | ||||
|       "path": "./tsconfig.app.json" | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										19
									
								
								tsconfig.node.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								tsconfig.node.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| { | ||||
|   "extends": "@tsconfig/node20/tsconfig.json", | ||||
|   "include": [ | ||||
|     "vite.config.*", | ||||
|     "vitest.config.*", | ||||
|     "cypress.config.*", | ||||
|     "nightwatch.conf.*", | ||||
|     "playwright.config.*" | ||||
|   ], | ||||
|   "compilerOptions": { | ||||
|     "composite": true, | ||||
|     "noEmit": true, | ||||
|     "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", | ||||
|  | ||||
|     "module": "ESNext", | ||||
|     "moduleResolution": "Bundler", | ||||
|     "types": ["node"] | ||||
|   } | ||||
| } | ||||
							
								
								
									
										23
									
								
								vite.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vite.config.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| import { fileURLToPath, URL } from 'node:url' | ||||
|  | ||||
| import { defineConfig } from 'vite' | ||||
| import vue from '@vitejs/plugin-vue' | ||||
| import Components from 'unplugin-vue-components/vite'; | ||||
| import {PrimeVueResolver} from '@primevue/auto-import-resolver'; | ||||
|  | ||||
| // https://vitejs.dev/config/ | ||||
| export default defineConfig({ | ||||
|   plugins: [ | ||||
|     vue(), | ||||
|     Components({ | ||||
|       resolvers: [ | ||||
|         PrimeVueResolver() | ||||
|       ] | ||||
|     }), | ||||
|   ], | ||||
|   resolve: { | ||||
|     alias: { | ||||
|       '@': fileURLToPath(new URL('./src', import.meta.url)) | ||||
|     } | ||||
|   } | ||||
| }) | ||||
		Reference in New Issue
	
	Block a user