├── .gitignore ├── .vscode └── extensions.json ├── README.md ├── data └── data.js ├── index.html ├── package-lock.json ├── package.json ├── public └── favicon.ico ├── src ├── App.vue ├── assets │ ├── base.css │ ├── logo.svg │ └── main.css ├── components │ └── TopMenu.vue ├── main.js ├── router │ └── index.js ├── store │ └── store.js └── views │ ├── ProductDetails.vue │ ├── ProductList.vue │ └── ShoppingCart.vue └── vite.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-demo 2 | 3 | This template should help get you started developing with Vue 3 in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). 8 | 9 | ## Customize configuration 10 | 11 | See [Vite Configuration Reference](https://vitejs.dev/config/). 12 | 13 | ## Project Setup 14 | 15 | ```sh 16 | npm install 17 | ``` 18 | 19 | ### Compile and Hot-Reload for Development 20 | 21 | ```sh 22 | npm run dev 23 | ``` 24 | 25 | ### Compile and Minify for Production 26 | 27 | ```sh 28 | npm run build 29 | ``` 30 | -------------------------------------------------------------------------------- /data/data.js: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | "id":1, 4 | "userName": "jenlooper-cactus", 5 | "Maker": "@jenlooper", 6 | "img": "https://user-images.githubusercontent.com/41929050/61567048-13938600-aa33-11e9-9cfd-712191013192.jpeg", 7 | "Url": "https://www.hackster.io/agent-hawking-1/the-quantified-cactus-an-easy-plant-soil-moisture-sensor-e65393", 8 | "Title": "The Quantified Cactus: An Easy Plant Soil Moisture Sensor", 9 | "Description": "This project is a good learning project to get comfortable with soldering and programming an Arduino.", 10 | "Ratings": [ 11 | 5, 12 | 5 13 | ], 14 | "price": 145 15 | }, 16 | { 17 | "id":2, 18 | "userName": "jenlooper-light", 19 | "Maker": "jenlooper", 20 | "img": "https://user-images.githubusercontent.com/41929050/61567049-13938600-aa33-11e9-9c69-a4184bf8e524.jpeg", 21 | "Url": "https://www.hackster.io/agent-hawking-1/book-light-dee7e4", 22 | "Title": "A beautiful switch-on book light", 23 | "Description": "Use craft items you have around the house, plus two LEDs and a LilyPad battery holder, to create a useful book light for reading in the dark.", 24 | "Ratings": null, 25 | "price": 250 26 | }, 27 | { 28 | "id":3, 29 | "userName": "jenlooper-lightshow", 30 | "Maker": "@jenlooper", 31 | "img": "https://user-images.githubusercontent.com/41929050/61567053-13938600-aa33-11e9-9780-104fe4019659.png", 32 | "Url": "https://www.hackster.io/agent-hawking-1/bling-your-laptop-with-an-internet-connected-light-show-30e4db", 33 | "Title": "Bling your Laptop with an Internet-Connected Light Show", 34 | "Description": "Create a web-connected light-strip API controllable from your website, using the Particle.io.", 35 | "Ratings": null, 36 | "price": 90 37 | }, 38 | { 39 | "id":4, 40 | "userName": "jenlooper-survival", 41 | "Maker": "jenlooper", 42 | "img": "https://user-images.githubusercontent.com/41929050/61567051-13938600-aa33-11e9-8ae7-0b5c19aafab4.jpeg", 43 | "Url": "https://www.hackster.io/agent-hawking-1/create-a-compact-survival-kit-38bfdb", 44 | "Title": "Create a Compact Survival Kit with LED Track Lighting", 45 | "Description": "Use an Altoids tin with Chibitronics sticker LEDs to create a light-up compact that doubles as a survival kit for the young hipster", 46 | "Ratings": null, 47 | "price": 275 48 | }, 49 | { 50 | "id":5, 51 | "userName": "sailorhg-bubblesortpic", 52 | "Maker": "sailorhg", 53 | "img": "https://user-images.githubusercontent.com/41929050/61567054-13938600-aa33-11e9-9163-eec98e239b7a.png", 54 | "Url": "https://twitter.com/sailorhg/status/1090107740049952770", 55 | "Title": "Bubblesort Visualization", 56 | "Description": "Visualization of sailor scouts sorted by bubblesort algorithm by their planet\u0027s distance from the sun", 57 | "Ratings": null, 58 | "price": 175 59 | }, 60 | { 61 | "id":6, 62 | "userName": "sailorhg-corsage", 63 | "Maker": "sailorhg", 64 | "img": "https://user-images.githubusercontent.com/41929050/61567055-142c1c80-aa33-11e9-96ff-9fbac6413625.png", 65 | "Url": "https://twitter.com/sailorhg/status/1090113666911891456", 66 | "Title": "Light-up Corsage", 67 | "Description": "Light-up corsage I made with my summer intern.", 68 | "Ratings": null, 69 | "price": 300 70 | }, 71 | { 72 | "id":7, 73 | "userName": "sailorhg-kit", 74 | "Maker": "sailorhg", 75 | "img": "https://user-images.githubusercontent.com/41929050/61567056-142c1c80-aa33-11e9-8682-10065d338145.png", 76 | "Url": "https://twitter.com/sailorhg/status/1090122822007963648", 77 | "Title": "Pastel hardware kit", 78 | "Description": "Pastel hardware kits complete with custom manufactured pastel alligator clips.", 79 | "Ratings": null, 80 | "price": 140 81 | }, 82 | { 83 | "id":8, 84 | "userName": "sailorhg-led", 85 | "Maker": "sailorhg", 86 | "img": "https://user-images.githubusercontent.com/41929050/61567052-13938600-aa33-11e9-9a88-cd842073ba44.jpg", 87 | "Url": "https://twitter.com/sailorhg/status/1090117277540745216", 88 | "Title": "Heart-shaped LED", 89 | "Description": "custom molded heart shaped LED with sprinkles.", 90 | "Ratings": null, 91 | "price": 105 92 | }, 93 | { 94 | "id":9, 95 | "userName": "selinazawacki-soi-shirt", 96 | "Maker": "selinazawacki", 97 | "img": "https://user-images.githubusercontent.com/41929050/61567060-142c1c80-aa33-11e9-8188-5a4803844a9e.png", 98 | "Url": "https://www.instagram.com/p/BNvESj-j8PI/", 99 | "Title": "Black Sweatshirt", 100 | "Description": "Black sweatshirt hoody with the Sick of the Internet logo.", 101 | "Ratings": null, 102 | "price": 215 103 | }, 104 | { 105 | "id":10, 106 | "userName": "selinazawacki-soi-pins", 107 | "Maker": "selinazawacki", 108 | "img": "https://user-images.githubusercontent.com/41929050/61567059-142c1c80-aa33-11e9-939b-2ecf4492786d.png", 109 | "Url": "https://www.instagram.com/p/BNm6hZzDoEF/", 110 | "Title": "Sick of the Internet Pins", 111 | "Description": "Still some time to enter the pin/sticker giveaway! ", 112 | "Ratings": null, 113 | "price": 210 114 | }, 115 | { 116 | "id":11, 117 | "userName": "vogueandcode-hipster-dev-bro", 118 | "Maker": "vogueandcode", 119 | "img": "https://user-images.githubusercontent.com/41929050/61567061-14c4b300-aa33-11e9-9fee-63ff2c0c9823.png", 120 | "Url": "https://www.vogueandcode.com/shop/hipster-dev-bro", 121 | "Title": "Hipster Dev", 122 | "Description": "Hipster Dev is busy coding away while styled in a camo jacket and orange beanie.", 123 | "Ratings": null, 124 | "price": 75 125 | }, 126 | { 127 | "id":12, 128 | "userName": "vogueandcode-pretty-girls-code-tee", 129 | "Maker": "vogueandcode", 130 | "img": "https://user-images.githubusercontent.com/41929050/61567062-14c4b300-aa33-11e9-9dcd-8bfed4ece810.png", 131 | "Url": "https://www.vogueandcode.com/shop/pretty-girls-code-tee", 132 | "Title": "Pretty Girls Code Tee", 133 | "Description": "Everyone\u2019s favorite design is finally here on a tee! The Pretty Girls Code crew-neck tee is available in a soft pink with red writing.", 134 | "Ratings": null, 135 | "price": 205 136 | }, 137 | { 138 | "id":13, 139 | "userName": "vogueandcode-ruby-sis-2", 140 | "Maker": "vogueandcode", 141 | "img": "https://user-images.githubusercontent.com/41929050/61567063-14c4b300-aa33-11e9-8515-bcb866da9ea3.png", 142 | "Url": "https://www.vogueandcode.com/shop/ruby-sis-2", 143 | "Title": "Ruby Sis", 144 | "Description": "Styled in a dashiki, Ruby Sis is listening to music while coding in her favorite language, Ruby!", 145 | "Ratings": [ 146 | 3, 147 | 5, 148 | 5, 149 | 4, 150 | 3, 151 | 2, 152 | 1, 153 | 4, 154 | 5, 155 | 5, 156 | 5, 157 | 5, 158 | 5, 159 | 5, 160 | 5, 161 | 5, 162 | 5, 163 | 5 164 | ], 165 | "price": 305 166 | }, 167 | { 168 | "id":14, 169 | "userName": "selinazawacki-moon", 170 | "Maker": "selinazawacki", 171 | "img": "https://user-images.githubusercontent.com/41929050/61567057-142c1c80-aa33-11e9-9781-9e442418eaab.png", 172 | "Url": "https://www.instagram.com/p/BFktVYPinKQ/", 173 | "Title": "Holographic Dark Moon Necklace", 174 | "Description": "Not sure if I\u0027ll be making more, get it while I have it in the store.", 175 | "Ratings": null, 176 | "price": 140 177 | }, 178 | { 179 | "id":15, 180 | "userName": "selinazawacki-shirt", 181 | "Maker": "selinazawacki", 182 | "img": "https://user-images.githubusercontent.com/41929050/61567058-142c1c80-aa33-11e9-89fb-b4f30d84d69d.png", 183 | "Url": "https://www.instagram.com/p/BEXlpiZCnJ3", 184 | "Title": "Floppy Crop", 185 | "Description": "Used up the Diskette fabric today to make 2 of these crops.", 186 | "Ratings": null, 187 | "price": 155 188 | } 189 | ] -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Store 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-demo", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "vue-demo", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "bootstrap": "^5.2.0", 12 | "bootstrap-icons": "^1.9.1", 13 | "vue": "^3.2.37", 14 | "vue-router": "^4.1.2", 15 | "vuex": "^4.0.2" 16 | }, 17 | "devDependencies": { 18 | "@vitejs/plugin-vue": "^3.0.1", 19 | "vite": "^3.0.1" 20 | } 21 | }, 22 | "node_modules/@babel/parser": { 23 | "version": "7.18.11", 24 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", 25 | "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", 26 | "bin": { 27 | "parser": "bin/babel-parser.js" 28 | }, 29 | "engines": { 30 | "node": ">=6.0.0" 31 | } 32 | }, 33 | "node_modules/@esbuild/linux-loong64": { 34 | "version": "0.14.54", 35 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", 36 | "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", 37 | "cpu": [ 38 | "loong64" 39 | ], 40 | "dev": true, 41 | "optional": true, 42 | "os": [ 43 | "linux" 44 | ], 45 | "engines": { 46 | "node": ">=12" 47 | } 48 | }, 49 | "node_modules/@popperjs/core": { 50 | "version": "2.11.5", 51 | "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", 52 | "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", 53 | "peer": true, 54 | "funding": { 55 | "type": "opencollective", 56 | "url": "https://opencollective.com/popperjs" 57 | } 58 | }, 59 | "node_modules/@vitejs/plugin-vue": { 60 | "version": "3.0.1", 61 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.0.1.tgz", 62 | "integrity": "sha512-Ll9JgxG7ONIz/XZv3dssfoMUDu9qAnlJ+km+pBA0teYSXzwPCIzS/e1bmwNYl5dcQGs677D21amgfYAnzMl17A==", 63 | "dev": true, 64 | "engines": { 65 | "node": "^14.18.0 || >=16.0.0" 66 | }, 67 | "peerDependencies": { 68 | "vite": "^3.0.0", 69 | "vue": "^3.2.25" 70 | } 71 | }, 72 | "node_modules/@vue/compiler-core": { 73 | "version": "3.2.37", 74 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", 75 | "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", 76 | "dependencies": { 77 | "@babel/parser": "^7.16.4", 78 | "@vue/shared": "3.2.37", 79 | "estree-walker": "^2.0.2", 80 | "source-map": "^0.6.1" 81 | } 82 | }, 83 | "node_modules/@vue/compiler-dom": { 84 | "version": "3.2.37", 85 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", 86 | "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", 87 | "dependencies": { 88 | "@vue/compiler-core": "3.2.37", 89 | "@vue/shared": "3.2.37" 90 | } 91 | }, 92 | "node_modules/@vue/compiler-sfc": { 93 | "version": "3.2.37", 94 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", 95 | "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", 96 | "dependencies": { 97 | "@babel/parser": "^7.16.4", 98 | "@vue/compiler-core": "3.2.37", 99 | "@vue/compiler-dom": "3.2.37", 100 | "@vue/compiler-ssr": "3.2.37", 101 | "@vue/reactivity-transform": "3.2.37", 102 | "@vue/shared": "3.2.37", 103 | "estree-walker": "^2.0.2", 104 | "magic-string": "^0.25.7", 105 | "postcss": "^8.1.10", 106 | "source-map": "^0.6.1" 107 | } 108 | }, 109 | "node_modules/@vue/compiler-ssr": { 110 | "version": "3.2.37", 111 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", 112 | "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", 113 | "dependencies": { 114 | "@vue/compiler-dom": "3.2.37", 115 | "@vue/shared": "3.2.37" 116 | } 117 | }, 118 | "node_modules/@vue/devtools-api": { 119 | "version": "6.2.1", 120 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz", 121 | "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==" 122 | }, 123 | "node_modules/@vue/reactivity": { 124 | "version": "3.2.37", 125 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", 126 | "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", 127 | "dependencies": { 128 | "@vue/shared": "3.2.37" 129 | } 130 | }, 131 | "node_modules/@vue/reactivity-transform": { 132 | "version": "3.2.37", 133 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", 134 | "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", 135 | "dependencies": { 136 | "@babel/parser": "^7.16.4", 137 | "@vue/compiler-core": "3.2.37", 138 | "@vue/shared": "3.2.37", 139 | "estree-walker": "^2.0.2", 140 | "magic-string": "^0.25.7" 141 | } 142 | }, 143 | "node_modules/@vue/runtime-core": { 144 | "version": "3.2.37", 145 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", 146 | "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", 147 | "dependencies": { 148 | "@vue/reactivity": "3.2.37", 149 | "@vue/shared": "3.2.37" 150 | } 151 | }, 152 | "node_modules/@vue/runtime-dom": { 153 | "version": "3.2.37", 154 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", 155 | "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", 156 | "dependencies": { 157 | "@vue/runtime-core": "3.2.37", 158 | "@vue/shared": "3.2.37", 159 | "csstype": "^2.6.8" 160 | } 161 | }, 162 | "node_modules/@vue/server-renderer": { 163 | "version": "3.2.37", 164 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", 165 | "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", 166 | "dependencies": { 167 | "@vue/compiler-ssr": "3.2.37", 168 | "@vue/shared": "3.2.37" 169 | }, 170 | "peerDependencies": { 171 | "vue": "3.2.37" 172 | } 173 | }, 174 | "node_modules/@vue/shared": { 175 | "version": "3.2.37", 176 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", 177 | "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" 178 | }, 179 | "node_modules/bootstrap": { 180 | "version": "5.2.0", 181 | "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.0.tgz", 182 | "integrity": "sha512-qlnS9GL6YZE6Wnef46GxGv1UpGGzAwO0aPL1yOjzDIJpeApeMvqV24iL+pjr2kU4dduoBA9fINKWKgMToobx9A==", 183 | "funding": [ 184 | { 185 | "type": "github", 186 | "url": "https://github.com/sponsors/twbs" 187 | }, 188 | { 189 | "type": "opencollective", 190 | "url": "https://opencollective.com/bootstrap" 191 | } 192 | ], 193 | "peerDependencies": { 194 | "@popperjs/core": "^2.11.5" 195 | } 196 | }, 197 | "node_modules/bootstrap-icons": { 198 | "version": "1.9.1", 199 | "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.9.1.tgz", 200 | "integrity": "sha512-d4ZkO30MIkAhQ2nNRJqKXJVEQorALGbLWTuRxyCTJF96lRIV6imcgMehWGJUiJMJhglN0o2tqLIeDnMdiQEE9g==" 201 | }, 202 | "node_modules/csstype": { 203 | "version": "2.6.20", 204 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", 205 | "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" 206 | }, 207 | "node_modules/esbuild": { 208 | "version": "0.14.54", 209 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", 210 | "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", 211 | "dev": true, 212 | "hasInstallScript": true, 213 | "bin": { 214 | "esbuild": "bin/esbuild" 215 | }, 216 | "engines": { 217 | "node": ">=12" 218 | }, 219 | "optionalDependencies": { 220 | "@esbuild/linux-loong64": "0.14.54", 221 | "esbuild-android-64": "0.14.54", 222 | "esbuild-android-arm64": "0.14.54", 223 | "esbuild-darwin-64": "0.14.54", 224 | "esbuild-darwin-arm64": "0.14.54", 225 | "esbuild-freebsd-64": "0.14.54", 226 | "esbuild-freebsd-arm64": "0.14.54", 227 | "esbuild-linux-32": "0.14.54", 228 | "esbuild-linux-64": "0.14.54", 229 | "esbuild-linux-arm": "0.14.54", 230 | "esbuild-linux-arm64": "0.14.54", 231 | "esbuild-linux-mips64le": "0.14.54", 232 | "esbuild-linux-ppc64le": "0.14.54", 233 | "esbuild-linux-riscv64": "0.14.54", 234 | "esbuild-linux-s390x": "0.14.54", 235 | "esbuild-netbsd-64": "0.14.54", 236 | "esbuild-openbsd-64": "0.14.54", 237 | "esbuild-sunos-64": "0.14.54", 238 | "esbuild-windows-32": "0.14.54", 239 | "esbuild-windows-64": "0.14.54", 240 | "esbuild-windows-arm64": "0.14.54" 241 | } 242 | }, 243 | "node_modules/esbuild-android-64": { 244 | "version": "0.14.54", 245 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", 246 | "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", 247 | "cpu": [ 248 | "x64" 249 | ], 250 | "dev": true, 251 | "optional": true, 252 | "os": [ 253 | "android" 254 | ], 255 | "engines": { 256 | "node": ">=12" 257 | } 258 | }, 259 | "node_modules/esbuild-android-arm64": { 260 | "version": "0.14.54", 261 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", 262 | "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", 263 | "cpu": [ 264 | "arm64" 265 | ], 266 | "dev": true, 267 | "optional": true, 268 | "os": [ 269 | "android" 270 | ], 271 | "engines": { 272 | "node": ">=12" 273 | } 274 | }, 275 | "node_modules/esbuild-darwin-64": { 276 | "version": "0.14.54", 277 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", 278 | "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", 279 | "cpu": [ 280 | "x64" 281 | ], 282 | "dev": true, 283 | "optional": true, 284 | "os": [ 285 | "darwin" 286 | ], 287 | "engines": { 288 | "node": ">=12" 289 | } 290 | }, 291 | "node_modules/esbuild-darwin-arm64": { 292 | "version": "0.14.54", 293 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", 294 | "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", 295 | "cpu": [ 296 | "arm64" 297 | ], 298 | "dev": true, 299 | "optional": true, 300 | "os": [ 301 | "darwin" 302 | ], 303 | "engines": { 304 | "node": ">=12" 305 | } 306 | }, 307 | "node_modules/esbuild-freebsd-64": { 308 | "version": "0.14.54", 309 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", 310 | "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", 311 | "cpu": [ 312 | "x64" 313 | ], 314 | "dev": true, 315 | "optional": true, 316 | "os": [ 317 | "freebsd" 318 | ], 319 | "engines": { 320 | "node": ">=12" 321 | } 322 | }, 323 | "node_modules/esbuild-freebsd-arm64": { 324 | "version": "0.14.54", 325 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", 326 | "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", 327 | "cpu": [ 328 | "arm64" 329 | ], 330 | "dev": true, 331 | "optional": true, 332 | "os": [ 333 | "freebsd" 334 | ], 335 | "engines": { 336 | "node": ">=12" 337 | } 338 | }, 339 | "node_modules/esbuild-linux-32": { 340 | "version": "0.14.54", 341 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", 342 | "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", 343 | "cpu": [ 344 | "ia32" 345 | ], 346 | "dev": true, 347 | "optional": true, 348 | "os": [ 349 | "linux" 350 | ], 351 | "engines": { 352 | "node": ">=12" 353 | } 354 | }, 355 | "node_modules/esbuild-linux-64": { 356 | "version": "0.14.54", 357 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", 358 | "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", 359 | "cpu": [ 360 | "x64" 361 | ], 362 | "dev": true, 363 | "optional": true, 364 | "os": [ 365 | "linux" 366 | ], 367 | "engines": { 368 | "node": ">=12" 369 | } 370 | }, 371 | "node_modules/esbuild-linux-arm": { 372 | "version": "0.14.54", 373 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", 374 | "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", 375 | "cpu": [ 376 | "arm" 377 | ], 378 | "dev": true, 379 | "optional": true, 380 | "os": [ 381 | "linux" 382 | ], 383 | "engines": { 384 | "node": ">=12" 385 | } 386 | }, 387 | "node_modules/esbuild-linux-arm64": { 388 | "version": "0.14.54", 389 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", 390 | "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", 391 | "cpu": [ 392 | "arm64" 393 | ], 394 | "dev": true, 395 | "optional": true, 396 | "os": [ 397 | "linux" 398 | ], 399 | "engines": { 400 | "node": ">=12" 401 | } 402 | }, 403 | "node_modules/esbuild-linux-mips64le": { 404 | "version": "0.14.54", 405 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", 406 | "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", 407 | "cpu": [ 408 | "mips64el" 409 | ], 410 | "dev": true, 411 | "optional": true, 412 | "os": [ 413 | "linux" 414 | ], 415 | "engines": { 416 | "node": ">=12" 417 | } 418 | }, 419 | "node_modules/esbuild-linux-ppc64le": { 420 | "version": "0.14.54", 421 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", 422 | "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", 423 | "cpu": [ 424 | "ppc64" 425 | ], 426 | "dev": true, 427 | "optional": true, 428 | "os": [ 429 | "linux" 430 | ], 431 | "engines": { 432 | "node": ">=12" 433 | } 434 | }, 435 | "node_modules/esbuild-linux-riscv64": { 436 | "version": "0.14.54", 437 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", 438 | "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", 439 | "cpu": [ 440 | "riscv64" 441 | ], 442 | "dev": true, 443 | "optional": true, 444 | "os": [ 445 | "linux" 446 | ], 447 | "engines": { 448 | "node": ">=12" 449 | } 450 | }, 451 | "node_modules/esbuild-linux-s390x": { 452 | "version": "0.14.54", 453 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", 454 | "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", 455 | "cpu": [ 456 | "s390x" 457 | ], 458 | "dev": true, 459 | "optional": true, 460 | "os": [ 461 | "linux" 462 | ], 463 | "engines": { 464 | "node": ">=12" 465 | } 466 | }, 467 | "node_modules/esbuild-netbsd-64": { 468 | "version": "0.14.54", 469 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", 470 | "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", 471 | "cpu": [ 472 | "x64" 473 | ], 474 | "dev": true, 475 | "optional": true, 476 | "os": [ 477 | "netbsd" 478 | ], 479 | "engines": { 480 | "node": ">=12" 481 | } 482 | }, 483 | "node_modules/esbuild-openbsd-64": { 484 | "version": "0.14.54", 485 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", 486 | "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", 487 | "cpu": [ 488 | "x64" 489 | ], 490 | "dev": true, 491 | "optional": true, 492 | "os": [ 493 | "openbsd" 494 | ], 495 | "engines": { 496 | "node": ">=12" 497 | } 498 | }, 499 | "node_modules/esbuild-sunos-64": { 500 | "version": "0.14.54", 501 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", 502 | "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", 503 | "cpu": [ 504 | "x64" 505 | ], 506 | "dev": true, 507 | "optional": true, 508 | "os": [ 509 | "sunos" 510 | ], 511 | "engines": { 512 | "node": ">=12" 513 | } 514 | }, 515 | "node_modules/esbuild-windows-32": { 516 | "version": "0.14.54", 517 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", 518 | "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", 519 | "cpu": [ 520 | "ia32" 521 | ], 522 | "dev": true, 523 | "optional": true, 524 | "os": [ 525 | "win32" 526 | ], 527 | "engines": { 528 | "node": ">=12" 529 | } 530 | }, 531 | "node_modules/esbuild-windows-64": { 532 | "version": "0.14.54", 533 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", 534 | "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", 535 | "cpu": [ 536 | "x64" 537 | ], 538 | "dev": true, 539 | "optional": true, 540 | "os": [ 541 | "win32" 542 | ], 543 | "engines": { 544 | "node": ">=12" 545 | } 546 | }, 547 | "node_modules/esbuild-windows-arm64": { 548 | "version": "0.14.54", 549 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", 550 | "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", 551 | "cpu": [ 552 | "arm64" 553 | ], 554 | "dev": true, 555 | "optional": true, 556 | "os": [ 557 | "win32" 558 | ], 559 | "engines": { 560 | "node": ">=12" 561 | } 562 | }, 563 | "node_modules/estree-walker": { 564 | "version": "2.0.2", 565 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 566 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 567 | }, 568 | "node_modules/fsevents": { 569 | "version": "2.3.2", 570 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 571 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 572 | "dev": true, 573 | "hasInstallScript": true, 574 | "optional": true, 575 | "os": [ 576 | "darwin" 577 | ], 578 | "engines": { 579 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 580 | } 581 | }, 582 | "node_modules/function-bind": { 583 | "version": "1.1.1", 584 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 585 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 586 | "dev": true 587 | }, 588 | "node_modules/has": { 589 | "version": "1.0.3", 590 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 591 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 592 | "dev": true, 593 | "dependencies": { 594 | "function-bind": "^1.1.1" 595 | }, 596 | "engines": { 597 | "node": ">= 0.4.0" 598 | } 599 | }, 600 | "node_modules/is-core-module": { 601 | "version": "2.10.0", 602 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", 603 | "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", 604 | "dev": true, 605 | "dependencies": { 606 | "has": "^1.0.3" 607 | }, 608 | "funding": { 609 | "url": "https://github.com/sponsors/ljharb" 610 | } 611 | }, 612 | "node_modules/magic-string": { 613 | "version": "0.25.9", 614 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 615 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 616 | "dependencies": { 617 | "sourcemap-codec": "^1.4.8" 618 | } 619 | }, 620 | "node_modules/nanoid": { 621 | "version": "3.3.4", 622 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 623 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 624 | "bin": { 625 | "nanoid": "bin/nanoid.cjs" 626 | }, 627 | "engines": { 628 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 629 | } 630 | }, 631 | "node_modules/path-parse": { 632 | "version": "1.0.7", 633 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 634 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 635 | "dev": true 636 | }, 637 | "node_modules/picocolors": { 638 | "version": "1.0.0", 639 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 640 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 641 | }, 642 | "node_modules/postcss": { 643 | "version": "8.4.16", 644 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", 645 | "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", 646 | "funding": [ 647 | { 648 | "type": "opencollective", 649 | "url": "https://opencollective.com/postcss/" 650 | }, 651 | { 652 | "type": "tidelift", 653 | "url": "https://tidelift.com/funding/github/npm/postcss" 654 | } 655 | ], 656 | "dependencies": { 657 | "nanoid": "^3.3.4", 658 | "picocolors": "^1.0.0", 659 | "source-map-js": "^1.0.2" 660 | }, 661 | "engines": { 662 | "node": "^10 || ^12 || >=14" 663 | } 664 | }, 665 | "node_modules/resolve": { 666 | "version": "1.22.1", 667 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 668 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 669 | "dev": true, 670 | "dependencies": { 671 | "is-core-module": "^2.9.0", 672 | "path-parse": "^1.0.7", 673 | "supports-preserve-symlinks-flag": "^1.0.0" 674 | }, 675 | "bin": { 676 | "resolve": "bin/resolve" 677 | }, 678 | "funding": { 679 | "url": "https://github.com/sponsors/ljharb" 680 | } 681 | }, 682 | "node_modules/rollup": { 683 | "version": "2.77.2", 684 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.2.tgz", 685 | "integrity": "sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==", 686 | "dev": true, 687 | "bin": { 688 | "rollup": "dist/bin/rollup" 689 | }, 690 | "engines": { 691 | "node": ">=10.0.0" 692 | }, 693 | "optionalDependencies": { 694 | "fsevents": "~2.3.2" 695 | } 696 | }, 697 | "node_modules/source-map": { 698 | "version": "0.6.1", 699 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 700 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 701 | "engines": { 702 | "node": ">=0.10.0" 703 | } 704 | }, 705 | "node_modules/source-map-js": { 706 | "version": "1.0.2", 707 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 708 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 709 | "engines": { 710 | "node": ">=0.10.0" 711 | } 712 | }, 713 | "node_modules/sourcemap-codec": { 714 | "version": "1.4.8", 715 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 716 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 717 | }, 718 | "node_modules/supports-preserve-symlinks-flag": { 719 | "version": "1.0.0", 720 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 721 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 722 | "dev": true, 723 | "engines": { 724 | "node": ">= 0.4" 725 | }, 726 | "funding": { 727 | "url": "https://github.com/sponsors/ljharb" 728 | } 729 | }, 730 | "node_modules/vite": { 731 | "version": "3.0.5", 732 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.5.tgz", 733 | "integrity": "sha512-bRvrt9Tw8EGW4jj64aYFTnVg134E8hgDxyl/eEHnxiGqYk7/pTPss6CWlurqPOUzqvEoZkZ58Ws+Iu8MB87iMA==", 734 | "dev": true, 735 | "dependencies": { 736 | "esbuild": "^0.14.47", 737 | "postcss": "^8.4.16", 738 | "resolve": "^1.22.1", 739 | "rollup": "^2.75.6" 740 | }, 741 | "bin": { 742 | "vite": "bin/vite.js" 743 | }, 744 | "engines": { 745 | "node": "^14.18.0 || >=16.0.0" 746 | }, 747 | "optionalDependencies": { 748 | "fsevents": "~2.3.2" 749 | }, 750 | "peerDependencies": { 751 | "less": "*", 752 | "sass": "*", 753 | "stylus": "*", 754 | "terser": "^5.4.0" 755 | }, 756 | "peerDependenciesMeta": { 757 | "less": { 758 | "optional": true 759 | }, 760 | "sass": { 761 | "optional": true 762 | }, 763 | "stylus": { 764 | "optional": true 765 | }, 766 | "terser": { 767 | "optional": true 768 | } 769 | } 770 | }, 771 | "node_modules/vue": { 772 | "version": "3.2.37", 773 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", 774 | "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", 775 | "dependencies": { 776 | "@vue/compiler-dom": "3.2.37", 777 | "@vue/compiler-sfc": "3.2.37", 778 | "@vue/runtime-dom": "3.2.37", 779 | "@vue/server-renderer": "3.2.37", 780 | "@vue/shared": "3.2.37" 781 | } 782 | }, 783 | "node_modules/vue-router": { 784 | "version": "4.1.3", 785 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz", 786 | "integrity": "sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA==", 787 | "dependencies": { 788 | "@vue/devtools-api": "^6.1.4" 789 | }, 790 | "funding": { 791 | "url": "https://github.com/sponsors/posva" 792 | }, 793 | "peerDependencies": { 794 | "vue": "^3.2.0" 795 | } 796 | }, 797 | "node_modules/vuex": { 798 | "version": "4.0.2", 799 | "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", 800 | "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", 801 | "dependencies": { 802 | "@vue/devtools-api": "^6.0.0-beta.11" 803 | }, 804 | "peerDependencies": { 805 | "vue": "^3.0.2" 806 | } 807 | } 808 | }, 809 | "dependencies": { 810 | "@babel/parser": { 811 | "version": "7.18.11", 812 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", 813 | "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==" 814 | }, 815 | "@esbuild/linux-loong64": { 816 | "version": "0.14.54", 817 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", 818 | "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", 819 | "dev": true, 820 | "optional": true 821 | }, 822 | "@popperjs/core": { 823 | "version": "2.11.5", 824 | "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", 825 | "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", 826 | "peer": true 827 | }, 828 | "@vitejs/plugin-vue": { 829 | "version": "3.0.1", 830 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.0.1.tgz", 831 | "integrity": "sha512-Ll9JgxG7ONIz/XZv3dssfoMUDu9qAnlJ+km+pBA0teYSXzwPCIzS/e1bmwNYl5dcQGs677D21amgfYAnzMl17A==", 832 | "dev": true, 833 | "requires": {} 834 | }, 835 | "@vue/compiler-core": { 836 | "version": "3.2.37", 837 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", 838 | "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", 839 | "requires": { 840 | "@babel/parser": "^7.16.4", 841 | "@vue/shared": "3.2.37", 842 | "estree-walker": "^2.0.2", 843 | "source-map": "^0.6.1" 844 | } 845 | }, 846 | "@vue/compiler-dom": { 847 | "version": "3.2.37", 848 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", 849 | "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", 850 | "requires": { 851 | "@vue/compiler-core": "3.2.37", 852 | "@vue/shared": "3.2.37" 853 | } 854 | }, 855 | "@vue/compiler-sfc": { 856 | "version": "3.2.37", 857 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", 858 | "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", 859 | "requires": { 860 | "@babel/parser": "^7.16.4", 861 | "@vue/compiler-core": "3.2.37", 862 | "@vue/compiler-dom": "3.2.37", 863 | "@vue/compiler-ssr": "3.2.37", 864 | "@vue/reactivity-transform": "3.2.37", 865 | "@vue/shared": "3.2.37", 866 | "estree-walker": "^2.0.2", 867 | "magic-string": "^0.25.7", 868 | "postcss": "^8.1.10", 869 | "source-map": "^0.6.1" 870 | } 871 | }, 872 | "@vue/compiler-ssr": { 873 | "version": "3.2.37", 874 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", 875 | "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", 876 | "requires": { 877 | "@vue/compiler-dom": "3.2.37", 878 | "@vue/shared": "3.2.37" 879 | } 880 | }, 881 | "@vue/devtools-api": { 882 | "version": "6.2.1", 883 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz", 884 | "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==" 885 | }, 886 | "@vue/reactivity": { 887 | "version": "3.2.37", 888 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", 889 | "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", 890 | "requires": { 891 | "@vue/shared": "3.2.37" 892 | } 893 | }, 894 | "@vue/reactivity-transform": { 895 | "version": "3.2.37", 896 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", 897 | "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", 898 | "requires": { 899 | "@babel/parser": "^7.16.4", 900 | "@vue/compiler-core": "3.2.37", 901 | "@vue/shared": "3.2.37", 902 | "estree-walker": "^2.0.2", 903 | "magic-string": "^0.25.7" 904 | } 905 | }, 906 | "@vue/runtime-core": { 907 | "version": "3.2.37", 908 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", 909 | "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", 910 | "requires": { 911 | "@vue/reactivity": "3.2.37", 912 | "@vue/shared": "3.2.37" 913 | } 914 | }, 915 | "@vue/runtime-dom": { 916 | "version": "3.2.37", 917 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", 918 | "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", 919 | "requires": { 920 | "@vue/runtime-core": "3.2.37", 921 | "@vue/shared": "3.2.37", 922 | "csstype": "^2.6.8" 923 | } 924 | }, 925 | "@vue/server-renderer": { 926 | "version": "3.2.37", 927 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", 928 | "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", 929 | "requires": { 930 | "@vue/compiler-ssr": "3.2.37", 931 | "@vue/shared": "3.2.37" 932 | } 933 | }, 934 | "@vue/shared": { 935 | "version": "3.2.37", 936 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", 937 | "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" 938 | }, 939 | "bootstrap": { 940 | "version": "5.2.0", 941 | "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.0.tgz", 942 | "integrity": "sha512-qlnS9GL6YZE6Wnef46GxGv1UpGGzAwO0aPL1yOjzDIJpeApeMvqV24iL+pjr2kU4dduoBA9fINKWKgMToobx9A==", 943 | "requires": {} 944 | }, 945 | "bootstrap-icons": { 946 | "version": "1.9.1", 947 | "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.9.1.tgz", 948 | "integrity": "sha512-d4ZkO30MIkAhQ2nNRJqKXJVEQorALGbLWTuRxyCTJF96lRIV6imcgMehWGJUiJMJhglN0o2tqLIeDnMdiQEE9g==" 949 | }, 950 | "csstype": { 951 | "version": "2.6.20", 952 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", 953 | "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" 954 | }, 955 | "esbuild": { 956 | "version": "0.14.54", 957 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", 958 | "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", 959 | "dev": true, 960 | "requires": { 961 | "@esbuild/linux-loong64": "0.14.54", 962 | "esbuild-android-64": "0.14.54", 963 | "esbuild-android-arm64": "0.14.54", 964 | "esbuild-darwin-64": "0.14.54", 965 | "esbuild-darwin-arm64": "0.14.54", 966 | "esbuild-freebsd-64": "0.14.54", 967 | "esbuild-freebsd-arm64": "0.14.54", 968 | "esbuild-linux-32": "0.14.54", 969 | "esbuild-linux-64": "0.14.54", 970 | "esbuild-linux-arm": "0.14.54", 971 | "esbuild-linux-arm64": "0.14.54", 972 | "esbuild-linux-mips64le": "0.14.54", 973 | "esbuild-linux-ppc64le": "0.14.54", 974 | "esbuild-linux-riscv64": "0.14.54", 975 | "esbuild-linux-s390x": "0.14.54", 976 | "esbuild-netbsd-64": "0.14.54", 977 | "esbuild-openbsd-64": "0.14.54", 978 | "esbuild-sunos-64": "0.14.54", 979 | "esbuild-windows-32": "0.14.54", 980 | "esbuild-windows-64": "0.14.54", 981 | "esbuild-windows-arm64": "0.14.54" 982 | } 983 | }, 984 | "esbuild-android-64": { 985 | "version": "0.14.54", 986 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", 987 | "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", 988 | "dev": true, 989 | "optional": true 990 | }, 991 | "esbuild-android-arm64": { 992 | "version": "0.14.54", 993 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", 994 | "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", 995 | "dev": true, 996 | "optional": true 997 | }, 998 | "esbuild-darwin-64": { 999 | "version": "0.14.54", 1000 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", 1001 | "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", 1002 | "dev": true, 1003 | "optional": true 1004 | }, 1005 | "esbuild-darwin-arm64": { 1006 | "version": "0.14.54", 1007 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", 1008 | "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", 1009 | "dev": true, 1010 | "optional": true 1011 | }, 1012 | "esbuild-freebsd-64": { 1013 | "version": "0.14.54", 1014 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", 1015 | "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", 1016 | "dev": true, 1017 | "optional": true 1018 | }, 1019 | "esbuild-freebsd-arm64": { 1020 | "version": "0.14.54", 1021 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", 1022 | "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", 1023 | "dev": true, 1024 | "optional": true 1025 | }, 1026 | "esbuild-linux-32": { 1027 | "version": "0.14.54", 1028 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", 1029 | "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", 1030 | "dev": true, 1031 | "optional": true 1032 | }, 1033 | "esbuild-linux-64": { 1034 | "version": "0.14.54", 1035 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", 1036 | "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", 1037 | "dev": true, 1038 | "optional": true 1039 | }, 1040 | "esbuild-linux-arm": { 1041 | "version": "0.14.54", 1042 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", 1043 | "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", 1044 | "dev": true, 1045 | "optional": true 1046 | }, 1047 | "esbuild-linux-arm64": { 1048 | "version": "0.14.54", 1049 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", 1050 | "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", 1051 | "dev": true, 1052 | "optional": true 1053 | }, 1054 | "esbuild-linux-mips64le": { 1055 | "version": "0.14.54", 1056 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", 1057 | "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", 1058 | "dev": true, 1059 | "optional": true 1060 | }, 1061 | "esbuild-linux-ppc64le": { 1062 | "version": "0.14.54", 1063 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", 1064 | "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", 1065 | "dev": true, 1066 | "optional": true 1067 | }, 1068 | "esbuild-linux-riscv64": { 1069 | "version": "0.14.54", 1070 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", 1071 | "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", 1072 | "dev": true, 1073 | "optional": true 1074 | }, 1075 | "esbuild-linux-s390x": { 1076 | "version": "0.14.54", 1077 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", 1078 | "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", 1079 | "dev": true, 1080 | "optional": true 1081 | }, 1082 | "esbuild-netbsd-64": { 1083 | "version": "0.14.54", 1084 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", 1085 | "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", 1086 | "dev": true, 1087 | "optional": true 1088 | }, 1089 | "esbuild-openbsd-64": { 1090 | "version": "0.14.54", 1091 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", 1092 | "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", 1093 | "dev": true, 1094 | "optional": true 1095 | }, 1096 | "esbuild-sunos-64": { 1097 | "version": "0.14.54", 1098 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", 1099 | "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", 1100 | "dev": true, 1101 | "optional": true 1102 | }, 1103 | "esbuild-windows-32": { 1104 | "version": "0.14.54", 1105 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", 1106 | "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", 1107 | "dev": true, 1108 | "optional": true 1109 | }, 1110 | "esbuild-windows-64": { 1111 | "version": "0.14.54", 1112 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", 1113 | "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", 1114 | "dev": true, 1115 | "optional": true 1116 | }, 1117 | "esbuild-windows-arm64": { 1118 | "version": "0.14.54", 1119 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", 1120 | "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", 1121 | "dev": true, 1122 | "optional": true 1123 | }, 1124 | "estree-walker": { 1125 | "version": "2.0.2", 1126 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1127 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 1128 | }, 1129 | "fsevents": { 1130 | "version": "2.3.2", 1131 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1132 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1133 | "dev": true, 1134 | "optional": true 1135 | }, 1136 | "function-bind": { 1137 | "version": "1.1.1", 1138 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1139 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1140 | "dev": true 1141 | }, 1142 | "has": { 1143 | "version": "1.0.3", 1144 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1145 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1146 | "dev": true, 1147 | "requires": { 1148 | "function-bind": "^1.1.1" 1149 | } 1150 | }, 1151 | "is-core-module": { 1152 | "version": "2.10.0", 1153 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", 1154 | "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", 1155 | "dev": true, 1156 | "requires": { 1157 | "has": "^1.0.3" 1158 | } 1159 | }, 1160 | "magic-string": { 1161 | "version": "0.25.9", 1162 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 1163 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 1164 | "requires": { 1165 | "sourcemap-codec": "^1.4.8" 1166 | } 1167 | }, 1168 | "nanoid": { 1169 | "version": "3.3.4", 1170 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1171 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" 1172 | }, 1173 | "path-parse": { 1174 | "version": "1.0.7", 1175 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1176 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1177 | "dev": true 1178 | }, 1179 | "picocolors": { 1180 | "version": "1.0.0", 1181 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1182 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 1183 | }, 1184 | "postcss": { 1185 | "version": "8.4.16", 1186 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", 1187 | "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", 1188 | "requires": { 1189 | "nanoid": "^3.3.4", 1190 | "picocolors": "^1.0.0", 1191 | "source-map-js": "^1.0.2" 1192 | } 1193 | }, 1194 | "resolve": { 1195 | "version": "1.22.1", 1196 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1197 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1198 | "dev": true, 1199 | "requires": { 1200 | "is-core-module": "^2.9.0", 1201 | "path-parse": "^1.0.7", 1202 | "supports-preserve-symlinks-flag": "^1.0.0" 1203 | } 1204 | }, 1205 | "rollup": { 1206 | "version": "2.77.2", 1207 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.2.tgz", 1208 | "integrity": "sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==", 1209 | "dev": true, 1210 | "requires": { 1211 | "fsevents": "~2.3.2" 1212 | } 1213 | }, 1214 | "source-map": { 1215 | "version": "0.6.1", 1216 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1217 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1218 | }, 1219 | "source-map-js": { 1220 | "version": "1.0.2", 1221 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1222 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" 1223 | }, 1224 | "sourcemap-codec": { 1225 | "version": "1.4.8", 1226 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1227 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 1228 | }, 1229 | "supports-preserve-symlinks-flag": { 1230 | "version": "1.0.0", 1231 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1232 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1233 | "dev": true 1234 | }, 1235 | "vite": { 1236 | "version": "3.0.5", 1237 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.5.tgz", 1238 | "integrity": "sha512-bRvrt9Tw8EGW4jj64aYFTnVg134E8hgDxyl/eEHnxiGqYk7/pTPss6CWlurqPOUzqvEoZkZ58Ws+Iu8MB87iMA==", 1239 | "dev": true, 1240 | "requires": { 1241 | "esbuild": "^0.14.47", 1242 | "fsevents": "~2.3.2", 1243 | "postcss": "^8.4.16", 1244 | "resolve": "^1.22.1", 1245 | "rollup": "^2.75.6" 1246 | } 1247 | }, 1248 | "vue": { 1249 | "version": "3.2.37", 1250 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", 1251 | "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", 1252 | "requires": { 1253 | "@vue/compiler-dom": "3.2.37", 1254 | "@vue/compiler-sfc": "3.2.37", 1255 | "@vue/runtime-dom": "3.2.37", 1256 | "@vue/server-renderer": "3.2.37", 1257 | "@vue/shared": "3.2.37" 1258 | } 1259 | }, 1260 | "vue-router": { 1261 | "version": "4.1.3", 1262 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz", 1263 | "integrity": "sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA==", 1264 | "requires": { 1265 | "@vue/devtools-api": "^6.1.4" 1266 | } 1267 | }, 1268 | "vuex": { 1269 | "version": "4.0.2", 1270 | "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", 1271 | "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", 1272 | "requires": { 1273 | "@vue/devtools-api": "^6.0.0-beta.11" 1274 | } 1275 | } 1276 | } 1277 | } 1278 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-demo", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build", 7 | "preview": "vite preview --port 4173" 8 | }, 9 | "dependencies": { 10 | "bootstrap": "^5.2.0", 11 | "bootstrap-icons": "^1.9.1", 12 | "vue": "^3.2.37", 13 | "vue-router": "^4.1.2", 14 | "vuex": "^4.0.2" 15 | }, 16 | "devDependencies": { 17 | "@vitejs/plugin-vue": "^3.0.1", 18 | "vite": "^3.0.1" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ozmenab/vue-js-demo/6df6943fbe7a72051abb1b315f04074a6c262bc8/public/favicon.ico -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 15 | 16 | 24 | 25 | 27 | -------------------------------------------------------------------------------- /src/assets/base.css: -------------------------------------------------------------------------------- 1 | /* color palette from */ 2 | :root { 3 | --vt-c-white: #ffffff; 4 | --vt-c-white-soft: #f8f8f8; 5 | --vt-c-white-mute: #f2f2f2; 6 | 7 | --vt-c-black: #181818; 8 | --vt-c-black-soft: #222222; 9 | --vt-c-black-mute: #282828; 10 | 11 | --vt-c-indigo: #2c3e50; 12 | 13 | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); 14 | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); 15 | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); 16 | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); 17 | 18 | --vt-c-text-light-1: var(--vt-c-indigo); 19 | --vt-c-text-light-2: rgba(60, 60, 60, 0.66); 20 | --vt-c-text-dark-1: var(--vt-c-white); 21 | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); 22 | } 23 | 24 | /* semantic color variables for this project */ 25 | :root { 26 | --color-background: var(--vt-c-white); 27 | --color-background-soft: var(--vt-c-white-soft); 28 | --color-background-mute: var(--vt-c-white-mute); 29 | 30 | --color-border: var(--vt-c-divider-light-2); 31 | --color-border-hover: var(--vt-c-divider-light-1); 32 | 33 | --color-heading: var(--vt-c-text-light-1); 34 | --color-text: var(--vt-c-text-light-1); 35 | 36 | --section-gap: 160px; 37 | } 38 | 39 | @media (prefers-color-scheme: dark) { 40 | :root { 41 | --color-background: var(--vt-c-black); 42 | --color-background-soft: var(--vt-c-black-soft); 43 | --color-background-mute: var(--vt-c-black-mute); 44 | 45 | --color-border: var(--vt-c-divider-dark-2); 46 | --color-border-hover: var(--vt-c-divider-dark-1); 47 | 48 | --color-heading: var(--vt-c-text-dark-1); 49 | --color-text: var(--vt-c-text-dark-2); 50 | } 51 | } 52 | 53 | *, 54 | *::before, 55 | *::after { 56 | box-sizing: border-box; 57 | margin: 0; 58 | position: relative; 59 | font-weight: normal; 60 | } 61 | 62 | body { 63 | min-height: 100vh; 64 | color: var(--color-text); 65 | background: var(--color-background); 66 | transition: color 0.5s, background-color 0.5s; 67 | line-height: 1.6; 68 | font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, 69 | Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; 70 | font-size: 15px; 71 | text-rendering: optimizeLegibility; 72 | -webkit-font-smoothing: antialiased; 73 | -moz-osx-font-smoothing: grayscale; 74 | } 75 | -------------------------------------------------------------------------------- /src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/main.css: -------------------------------------------------------------------------------- 1 | @import "./base.css"; 2 | 3 | #app { 4 | max-width: 1280px; 5 | margin: 0 auto; 6 | padding: 2rem; 7 | 8 | font-weight: normal; 9 | } 10 | 11 | a, 12 | .green { 13 | text-decoration: none; 14 | color: hsla(160, 100%, 37%, 1); 15 | transition: 0.4s; 16 | } 17 | 18 | @media (hover: hover) { 19 | a:hover { 20 | background-color: hsla(160, 100%, 37%, 0.2); 21 | } 22 | } 23 | 24 | @media (min-width: 1024px) { 25 | body { 26 | display: flex; 27 | place-items: center; 28 | } 29 | 30 | #app { 31 | display: grid; 32 | grid-template-columns: 1fr 1fr; 33 | padding: 0 2rem; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/components/TopMenu.vue: -------------------------------------------------------------------------------- 1 | 31 | 56 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import 'bootstrap' 5 | import 'bootstrap-icons/font/bootstrap-icons.css' 6 | import 'bootstrap/dist/css/bootstrap.min.css' 7 | import 'bootstrap/dist/js/bootstrap.bundle' 8 | 9 | import store from './store/store' 10 | 11 | 12 | 13 | const app = createApp(App) 14 | 15 | app.use(router); 16 | app.use(store); 17 | app.mount('#app'); 18 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from 'vue-router' 2 | import ProductList from '../views/ProductList.vue' 3 | import ProductDetails from '../views/ProductDetails.vue' 4 | import ShoppingCart from '../views/ShoppingCart.vue' 5 | 6 | const router = createRouter({ 7 | history: createWebHistory(import.meta.env.BASE_URL), 8 | routes: [ 9 | { 10 | path: '/', 11 | name: 'ProductList', 12 | component: ProductList 13 | }, 14 | { 15 | path: '/cart', 16 | name: 'ShoppingCart', 17 | component: ShoppingCart 18 | }, 19 | { 20 | path: '/productDetails/:id', 21 | name: 'ProductDetails', 22 | component: ProductDetails 23 | } 24 | ] 25 | }) 26 | 27 | export default router; 28 | -------------------------------------------------------------------------------- /src/store/store.js: -------------------------------------------------------------------------------- 1 | import { createStore } from "vuex"; 2 | import data from '../../data/data'; 3 | 4 | const store = createStore({ 5 | state: { 6 | productList: data, 7 | cartItems: [], 8 | searchList: data, 9 | product: {} 10 | }, 11 | getters: { 12 | _productList: state => state.productList, 13 | _cartItems: state => state.cartItems, 14 | _searchList: state => state.searchList, 15 | _product: state => state.product 16 | }, 17 | // Async 18 | actions: { 19 | addToCart(context, payload) { 20 | context.commit("addToCart", payload); 21 | }, 22 | searchList(context, payload) { 23 | context.commit("searchList", payload); 24 | }, 25 | getOneProduct(context,payload){ 26 | context.commit("getOneProduct",payload) 27 | } 28 | }, 29 | // Not Async 30 | mutations: { 31 | addToCart(state, payload) { 32 | state.cartItems.push(payload); 33 | }, 34 | searchList(state, payload) { 35 | state.searchList = state.productList.filter((product) => product.Title.toLowerCase().includes(payload.toLowerCase())); 36 | }, 37 | getOneProduct(state,payload){ 38 | state.product=state.productList.filter((product)=> product.id==payload) 39 | } 40 | } 41 | }); 42 | 43 | export default store; -------------------------------------------------------------------------------- /src/views/ProductDetails.vue: -------------------------------------------------------------------------------- 1 | 78 | 79 | -------------------------------------------------------------------------------- /src/views/ProductList.vue: -------------------------------------------------------------------------------- 1 | 2 | 51 | 52 | 76 | 77 | -------------------------------------------------------------------------------- /src/views/ShoppingCart.vue: -------------------------------------------------------------------------------- 1 | 95 | 96 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [vue()], 9 | resolve: { 10 | alias: { 11 | '@': fileURLToPath(new URL('./src', import.meta.url)) 12 | } 13 | } 14 | }) 15 | --------------------------------------------------------------------------------