├── .gitignore ├── index.html ├── package-lock.json ├── package.json ├── public ├── favicon.ico └── products.json ├── src ├── App.css ├── App.jsx ├── assets │ └── react.svg ├── components │ ├── Header │ │ ├── Header.css │ │ └── Header.jsx │ ├── Product │ │ ├── Product.css │ │ └── Product.jsx │ └── Shop │ │ ├── Shop.css │ │ └── Shop.jsx ├── fakeData │ └── products.json ├── images │ ├── Logo.svg │ ├── favicon.ico │ └── giphy.gif ├── index.css ├── main.jsx └── utilities │ └── fakedb.js └── 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 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Ema John Shopping App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ema-john-simple", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "ema-john-simple", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "@fortawesome/fontawesome-svg-core": "^6.3.0", 12 | "@fortawesome/free-solid-svg-icons": "^6.3.0", 13 | "@fortawesome/react-fontawesome": "^0.2.0", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0" 16 | }, 17 | "devDependencies": { 18 | "@types/react": "^18.0.28", 19 | "@types/react-dom": "^18.0.11", 20 | "@vitejs/plugin-react": "^3.1.0", 21 | "vite": "^4.2.0" 22 | } 23 | }, 24 | "node_modules/@ampproject/remapping": { 25 | "version": "2.2.0", 26 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", 27 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", 28 | "dev": true, 29 | "dependencies": { 30 | "@jridgewell/gen-mapping": "^0.1.0", 31 | "@jridgewell/trace-mapping": "^0.3.9" 32 | }, 33 | "engines": { 34 | "node": ">=6.0.0" 35 | } 36 | }, 37 | "node_modules/@babel/code-frame": { 38 | "version": "7.18.6", 39 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 40 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 41 | "dev": true, 42 | "dependencies": { 43 | "@babel/highlight": "^7.18.6" 44 | }, 45 | "engines": { 46 | "node": ">=6.9.0" 47 | } 48 | }, 49 | "node_modules/@babel/compat-data": { 50 | "version": "7.21.0", 51 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", 52 | "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", 53 | "dev": true, 54 | "engines": { 55 | "node": ">=6.9.0" 56 | } 57 | }, 58 | "node_modules/@babel/core": { 59 | "version": "7.21.3", 60 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", 61 | "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", 62 | "dev": true, 63 | "dependencies": { 64 | "@ampproject/remapping": "^2.2.0", 65 | "@babel/code-frame": "^7.18.6", 66 | "@babel/generator": "^7.21.3", 67 | "@babel/helper-compilation-targets": "^7.20.7", 68 | "@babel/helper-module-transforms": "^7.21.2", 69 | "@babel/helpers": "^7.21.0", 70 | "@babel/parser": "^7.21.3", 71 | "@babel/template": "^7.20.7", 72 | "@babel/traverse": "^7.21.3", 73 | "@babel/types": "^7.21.3", 74 | "convert-source-map": "^1.7.0", 75 | "debug": "^4.1.0", 76 | "gensync": "^1.0.0-beta.2", 77 | "json5": "^2.2.2", 78 | "semver": "^6.3.0" 79 | }, 80 | "engines": { 81 | "node": ">=6.9.0" 82 | }, 83 | "funding": { 84 | "type": "opencollective", 85 | "url": "https://opencollective.com/babel" 86 | } 87 | }, 88 | "node_modules/@babel/generator": { 89 | "version": "7.21.3", 90 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", 91 | "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", 92 | "dev": true, 93 | "dependencies": { 94 | "@babel/types": "^7.21.3", 95 | "@jridgewell/gen-mapping": "^0.3.2", 96 | "@jridgewell/trace-mapping": "^0.3.17", 97 | "jsesc": "^2.5.1" 98 | }, 99 | "engines": { 100 | "node": ">=6.9.0" 101 | } 102 | }, 103 | "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { 104 | "version": "0.3.2", 105 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 106 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 107 | "dev": true, 108 | "dependencies": { 109 | "@jridgewell/set-array": "^1.0.1", 110 | "@jridgewell/sourcemap-codec": "^1.4.10", 111 | "@jridgewell/trace-mapping": "^0.3.9" 112 | }, 113 | "engines": { 114 | "node": ">=6.0.0" 115 | } 116 | }, 117 | "node_modules/@babel/helper-compilation-targets": { 118 | "version": "7.20.7", 119 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", 120 | "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", 121 | "dev": true, 122 | "dependencies": { 123 | "@babel/compat-data": "^7.20.5", 124 | "@babel/helper-validator-option": "^7.18.6", 125 | "browserslist": "^4.21.3", 126 | "lru-cache": "^5.1.1", 127 | "semver": "^6.3.0" 128 | }, 129 | "engines": { 130 | "node": ">=6.9.0" 131 | }, 132 | "peerDependencies": { 133 | "@babel/core": "^7.0.0" 134 | } 135 | }, 136 | "node_modules/@babel/helper-environment-visitor": { 137 | "version": "7.18.9", 138 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", 139 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", 140 | "dev": true, 141 | "engines": { 142 | "node": ">=6.9.0" 143 | } 144 | }, 145 | "node_modules/@babel/helper-function-name": { 146 | "version": "7.21.0", 147 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", 148 | "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", 149 | "dev": true, 150 | "dependencies": { 151 | "@babel/template": "^7.20.7", 152 | "@babel/types": "^7.21.0" 153 | }, 154 | "engines": { 155 | "node": ">=6.9.0" 156 | } 157 | }, 158 | "node_modules/@babel/helper-hoist-variables": { 159 | "version": "7.18.6", 160 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", 161 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", 162 | "dev": true, 163 | "dependencies": { 164 | "@babel/types": "^7.18.6" 165 | }, 166 | "engines": { 167 | "node": ">=6.9.0" 168 | } 169 | }, 170 | "node_modules/@babel/helper-module-imports": { 171 | "version": "7.18.6", 172 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", 173 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", 174 | "dev": true, 175 | "dependencies": { 176 | "@babel/types": "^7.18.6" 177 | }, 178 | "engines": { 179 | "node": ">=6.9.0" 180 | } 181 | }, 182 | "node_modules/@babel/helper-module-transforms": { 183 | "version": "7.21.2", 184 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", 185 | "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", 186 | "dev": true, 187 | "dependencies": { 188 | "@babel/helper-environment-visitor": "^7.18.9", 189 | "@babel/helper-module-imports": "^7.18.6", 190 | "@babel/helper-simple-access": "^7.20.2", 191 | "@babel/helper-split-export-declaration": "^7.18.6", 192 | "@babel/helper-validator-identifier": "^7.19.1", 193 | "@babel/template": "^7.20.7", 194 | "@babel/traverse": "^7.21.2", 195 | "@babel/types": "^7.21.2" 196 | }, 197 | "engines": { 198 | "node": ">=6.9.0" 199 | } 200 | }, 201 | "node_modules/@babel/helper-plugin-utils": { 202 | "version": "7.20.2", 203 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", 204 | "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", 205 | "dev": true, 206 | "engines": { 207 | "node": ">=6.9.0" 208 | } 209 | }, 210 | "node_modules/@babel/helper-simple-access": { 211 | "version": "7.20.2", 212 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", 213 | "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", 214 | "dev": true, 215 | "dependencies": { 216 | "@babel/types": "^7.20.2" 217 | }, 218 | "engines": { 219 | "node": ">=6.9.0" 220 | } 221 | }, 222 | "node_modules/@babel/helper-split-export-declaration": { 223 | "version": "7.18.6", 224 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", 225 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", 226 | "dev": true, 227 | "dependencies": { 228 | "@babel/types": "^7.18.6" 229 | }, 230 | "engines": { 231 | "node": ">=6.9.0" 232 | } 233 | }, 234 | "node_modules/@babel/helper-string-parser": { 235 | "version": "7.19.4", 236 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", 237 | "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", 238 | "dev": true, 239 | "engines": { 240 | "node": ">=6.9.0" 241 | } 242 | }, 243 | "node_modules/@babel/helper-validator-identifier": { 244 | "version": "7.19.1", 245 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 246 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 247 | "dev": true, 248 | "engines": { 249 | "node": ">=6.9.0" 250 | } 251 | }, 252 | "node_modules/@babel/helper-validator-option": { 253 | "version": "7.21.0", 254 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", 255 | "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", 256 | "dev": true, 257 | "engines": { 258 | "node": ">=6.9.0" 259 | } 260 | }, 261 | "node_modules/@babel/helpers": { 262 | "version": "7.21.0", 263 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", 264 | "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", 265 | "dev": true, 266 | "dependencies": { 267 | "@babel/template": "^7.20.7", 268 | "@babel/traverse": "^7.21.0", 269 | "@babel/types": "^7.21.0" 270 | }, 271 | "engines": { 272 | "node": ">=6.9.0" 273 | } 274 | }, 275 | "node_modules/@babel/highlight": { 276 | "version": "7.18.6", 277 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 278 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 279 | "dev": true, 280 | "dependencies": { 281 | "@babel/helper-validator-identifier": "^7.18.6", 282 | "chalk": "^2.0.0", 283 | "js-tokens": "^4.0.0" 284 | }, 285 | "engines": { 286 | "node": ">=6.9.0" 287 | } 288 | }, 289 | "node_modules/@babel/parser": { 290 | "version": "7.21.3", 291 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", 292 | "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", 293 | "dev": true, 294 | "bin": { 295 | "parser": "bin/babel-parser.js" 296 | }, 297 | "engines": { 298 | "node": ">=6.0.0" 299 | } 300 | }, 301 | "node_modules/@babel/plugin-transform-react-jsx-self": { 302 | "version": "7.21.0", 303 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", 304 | "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", 305 | "dev": true, 306 | "dependencies": { 307 | "@babel/helper-plugin-utils": "^7.20.2" 308 | }, 309 | "engines": { 310 | "node": ">=6.9.0" 311 | }, 312 | "peerDependencies": { 313 | "@babel/core": "^7.0.0-0" 314 | } 315 | }, 316 | "node_modules/@babel/plugin-transform-react-jsx-source": { 317 | "version": "7.19.6", 318 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", 319 | "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", 320 | "dev": true, 321 | "dependencies": { 322 | "@babel/helper-plugin-utils": "^7.19.0" 323 | }, 324 | "engines": { 325 | "node": ">=6.9.0" 326 | }, 327 | "peerDependencies": { 328 | "@babel/core": "^7.0.0-0" 329 | } 330 | }, 331 | "node_modules/@babel/template": { 332 | "version": "7.20.7", 333 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", 334 | "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", 335 | "dev": true, 336 | "dependencies": { 337 | "@babel/code-frame": "^7.18.6", 338 | "@babel/parser": "^7.20.7", 339 | "@babel/types": "^7.20.7" 340 | }, 341 | "engines": { 342 | "node": ">=6.9.0" 343 | } 344 | }, 345 | "node_modules/@babel/traverse": { 346 | "version": "7.21.3", 347 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", 348 | "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", 349 | "dev": true, 350 | "dependencies": { 351 | "@babel/code-frame": "^7.18.6", 352 | "@babel/generator": "^7.21.3", 353 | "@babel/helper-environment-visitor": "^7.18.9", 354 | "@babel/helper-function-name": "^7.21.0", 355 | "@babel/helper-hoist-variables": "^7.18.6", 356 | "@babel/helper-split-export-declaration": "^7.18.6", 357 | "@babel/parser": "^7.21.3", 358 | "@babel/types": "^7.21.3", 359 | "debug": "^4.1.0", 360 | "globals": "^11.1.0" 361 | }, 362 | "engines": { 363 | "node": ">=6.9.0" 364 | } 365 | }, 366 | "node_modules/@babel/types": { 367 | "version": "7.21.3", 368 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", 369 | "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", 370 | "dev": true, 371 | "dependencies": { 372 | "@babel/helper-string-parser": "^7.19.4", 373 | "@babel/helper-validator-identifier": "^7.19.1", 374 | "to-fast-properties": "^2.0.0" 375 | }, 376 | "engines": { 377 | "node": ">=6.9.0" 378 | } 379 | }, 380 | "node_modules/@esbuild/android-arm": { 381 | "version": "0.17.12", 382 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz", 383 | "integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==", 384 | "cpu": [ 385 | "arm" 386 | ], 387 | "dev": true, 388 | "optional": true, 389 | "os": [ 390 | "android" 391 | ], 392 | "engines": { 393 | "node": ">=12" 394 | } 395 | }, 396 | "node_modules/@esbuild/android-arm64": { 397 | "version": "0.17.12", 398 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz", 399 | "integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==", 400 | "cpu": [ 401 | "arm64" 402 | ], 403 | "dev": true, 404 | "optional": true, 405 | "os": [ 406 | "android" 407 | ], 408 | "engines": { 409 | "node": ">=12" 410 | } 411 | }, 412 | "node_modules/@esbuild/android-x64": { 413 | "version": "0.17.12", 414 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz", 415 | "integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==", 416 | "cpu": [ 417 | "x64" 418 | ], 419 | "dev": true, 420 | "optional": true, 421 | "os": [ 422 | "android" 423 | ], 424 | "engines": { 425 | "node": ">=12" 426 | } 427 | }, 428 | "node_modules/@esbuild/darwin-arm64": { 429 | "version": "0.17.12", 430 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz", 431 | "integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==", 432 | "cpu": [ 433 | "arm64" 434 | ], 435 | "dev": true, 436 | "optional": true, 437 | "os": [ 438 | "darwin" 439 | ], 440 | "engines": { 441 | "node": ">=12" 442 | } 443 | }, 444 | "node_modules/@esbuild/darwin-x64": { 445 | "version": "0.17.12", 446 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz", 447 | "integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==", 448 | "cpu": [ 449 | "x64" 450 | ], 451 | "dev": true, 452 | "optional": true, 453 | "os": [ 454 | "darwin" 455 | ], 456 | "engines": { 457 | "node": ">=12" 458 | } 459 | }, 460 | "node_modules/@esbuild/freebsd-arm64": { 461 | "version": "0.17.12", 462 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz", 463 | "integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==", 464 | "cpu": [ 465 | "arm64" 466 | ], 467 | "dev": true, 468 | "optional": true, 469 | "os": [ 470 | "freebsd" 471 | ], 472 | "engines": { 473 | "node": ">=12" 474 | } 475 | }, 476 | "node_modules/@esbuild/freebsd-x64": { 477 | "version": "0.17.12", 478 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz", 479 | "integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==", 480 | "cpu": [ 481 | "x64" 482 | ], 483 | "dev": true, 484 | "optional": true, 485 | "os": [ 486 | "freebsd" 487 | ], 488 | "engines": { 489 | "node": ">=12" 490 | } 491 | }, 492 | "node_modules/@esbuild/linux-arm": { 493 | "version": "0.17.12", 494 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz", 495 | "integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==", 496 | "cpu": [ 497 | "arm" 498 | ], 499 | "dev": true, 500 | "optional": true, 501 | "os": [ 502 | "linux" 503 | ], 504 | "engines": { 505 | "node": ">=12" 506 | } 507 | }, 508 | "node_modules/@esbuild/linux-arm64": { 509 | "version": "0.17.12", 510 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz", 511 | "integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==", 512 | "cpu": [ 513 | "arm64" 514 | ], 515 | "dev": true, 516 | "optional": true, 517 | "os": [ 518 | "linux" 519 | ], 520 | "engines": { 521 | "node": ">=12" 522 | } 523 | }, 524 | "node_modules/@esbuild/linux-ia32": { 525 | "version": "0.17.12", 526 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz", 527 | "integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==", 528 | "cpu": [ 529 | "ia32" 530 | ], 531 | "dev": true, 532 | "optional": true, 533 | "os": [ 534 | "linux" 535 | ], 536 | "engines": { 537 | "node": ">=12" 538 | } 539 | }, 540 | "node_modules/@esbuild/linux-loong64": { 541 | "version": "0.17.12", 542 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz", 543 | "integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==", 544 | "cpu": [ 545 | "loong64" 546 | ], 547 | "dev": true, 548 | "optional": true, 549 | "os": [ 550 | "linux" 551 | ], 552 | "engines": { 553 | "node": ">=12" 554 | } 555 | }, 556 | "node_modules/@esbuild/linux-mips64el": { 557 | "version": "0.17.12", 558 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz", 559 | "integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==", 560 | "cpu": [ 561 | "mips64el" 562 | ], 563 | "dev": true, 564 | "optional": true, 565 | "os": [ 566 | "linux" 567 | ], 568 | "engines": { 569 | "node": ">=12" 570 | } 571 | }, 572 | "node_modules/@esbuild/linux-ppc64": { 573 | "version": "0.17.12", 574 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz", 575 | "integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==", 576 | "cpu": [ 577 | "ppc64" 578 | ], 579 | "dev": true, 580 | "optional": true, 581 | "os": [ 582 | "linux" 583 | ], 584 | "engines": { 585 | "node": ">=12" 586 | } 587 | }, 588 | "node_modules/@esbuild/linux-riscv64": { 589 | "version": "0.17.12", 590 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz", 591 | "integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==", 592 | "cpu": [ 593 | "riscv64" 594 | ], 595 | "dev": true, 596 | "optional": true, 597 | "os": [ 598 | "linux" 599 | ], 600 | "engines": { 601 | "node": ">=12" 602 | } 603 | }, 604 | "node_modules/@esbuild/linux-s390x": { 605 | "version": "0.17.12", 606 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz", 607 | "integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==", 608 | "cpu": [ 609 | "s390x" 610 | ], 611 | "dev": true, 612 | "optional": true, 613 | "os": [ 614 | "linux" 615 | ], 616 | "engines": { 617 | "node": ">=12" 618 | } 619 | }, 620 | "node_modules/@esbuild/linux-x64": { 621 | "version": "0.17.12", 622 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz", 623 | "integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==", 624 | "cpu": [ 625 | "x64" 626 | ], 627 | "dev": true, 628 | "optional": true, 629 | "os": [ 630 | "linux" 631 | ], 632 | "engines": { 633 | "node": ">=12" 634 | } 635 | }, 636 | "node_modules/@esbuild/netbsd-x64": { 637 | "version": "0.17.12", 638 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz", 639 | "integrity": "sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==", 640 | "cpu": [ 641 | "x64" 642 | ], 643 | "dev": true, 644 | "optional": true, 645 | "os": [ 646 | "netbsd" 647 | ], 648 | "engines": { 649 | "node": ">=12" 650 | } 651 | }, 652 | "node_modules/@esbuild/openbsd-x64": { 653 | "version": "0.17.12", 654 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz", 655 | "integrity": "sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==", 656 | "cpu": [ 657 | "x64" 658 | ], 659 | "dev": true, 660 | "optional": true, 661 | "os": [ 662 | "openbsd" 663 | ], 664 | "engines": { 665 | "node": ">=12" 666 | } 667 | }, 668 | "node_modules/@esbuild/sunos-x64": { 669 | "version": "0.17.12", 670 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz", 671 | "integrity": "sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==", 672 | "cpu": [ 673 | "x64" 674 | ], 675 | "dev": true, 676 | "optional": true, 677 | "os": [ 678 | "sunos" 679 | ], 680 | "engines": { 681 | "node": ">=12" 682 | } 683 | }, 684 | "node_modules/@esbuild/win32-arm64": { 685 | "version": "0.17.12", 686 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz", 687 | "integrity": "sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==", 688 | "cpu": [ 689 | "arm64" 690 | ], 691 | "dev": true, 692 | "optional": true, 693 | "os": [ 694 | "win32" 695 | ], 696 | "engines": { 697 | "node": ">=12" 698 | } 699 | }, 700 | "node_modules/@esbuild/win32-ia32": { 701 | "version": "0.17.12", 702 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz", 703 | "integrity": "sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==", 704 | "cpu": [ 705 | "ia32" 706 | ], 707 | "dev": true, 708 | "optional": true, 709 | "os": [ 710 | "win32" 711 | ], 712 | "engines": { 713 | "node": ">=12" 714 | } 715 | }, 716 | "node_modules/@esbuild/win32-x64": { 717 | "version": "0.17.12", 718 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz", 719 | "integrity": "sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==", 720 | "cpu": [ 721 | "x64" 722 | ], 723 | "dev": true, 724 | "optional": true, 725 | "os": [ 726 | "win32" 727 | ], 728 | "engines": { 729 | "node": ">=12" 730 | } 731 | }, 732 | "node_modules/@fortawesome/fontawesome-common-types": { 733 | "version": "6.3.0", 734 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", 735 | "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==", 736 | "hasInstallScript": true, 737 | "engines": { 738 | "node": ">=6" 739 | } 740 | }, 741 | "node_modules/@fortawesome/fontawesome-svg-core": { 742 | "version": "6.3.0", 743 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", 744 | "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", 745 | "hasInstallScript": true, 746 | "dependencies": { 747 | "@fortawesome/fontawesome-common-types": "6.3.0" 748 | }, 749 | "engines": { 750 | "node": ">=6" 751 | } 752 | }, 753 | "node_modules/@fortawesome/free-solid-svg-icons": { 754 | "version": "6.3.0", 755 | "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", 756 | "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", 757 | "hasInstallScript": true, 758 | "dependencies": { 759 | "@fortawesome/fontawesome-common-types": "6.3.0" 760 | }, 761 | "engines": { 762 | "node": ">=6" 763 | } 764 | }, 765 | "node_modules/@fortawesome/react-fontawesome": { 766 | "version": "0.2.0", 767 | "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", 768 | "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", 769 | "dependencies": { 770 | "prop-types": "^15.8.1" 771 | }, 772 | "peerDependencies": { 773 | "@fortawesome/fontawesome-svg-core": "~1 || ~6", 774 | "react": ">=16.3" 775 | } 776 | }, 777 | "node_modules/@jridgewell/gen-mapping": { 778 | "version": "0.1.1", 779 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", 780 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", 781 | "dev": true, 782 | "dependencies": { 783 | "@jridgewell/set-array": "^1.0.0", 784 | "@jridgewell/sourcemap-codec": "^1.4.10" 785 | }, 786 | "engines": { 787 | "node": ">=6.0.0" 788 | } 789 | }, 790 | "node_modules/@jridgewell/resolve-uri": { 791 | "version": "3.1.0", 792 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 793 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 794 | "dev": true, 795 | "engines": { 796 | "node": ">=6.0.0" 797 | } 798 | }, 799 | "node_modules/@jridgewell/set-array": { 800 | "version": "1.1.2", 801 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 802 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 803 | "dev": true, 804 | "engines": { 805 | "node": ">=6.0.0" 806 | } 807 | }, 808 | "node_modules/@jridgewell/sourcemap-codec": { 809 | "version": "1.4.14", 810 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 811 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 812 | "dev": true 813 | }, 814 | "node_modules/@jridgewell/trace-mapping": { 815 | "version": "0.3.17", 816 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 817 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 818 | "dev": true, 819 | "dependencies": { 820 | "@jridgewell/resolve-uri": "3.1.0", 821 | "@jridgewell/sourcemap-codec": "1.4.14" 822 | } 823 | }, 824 | "node_modules/@types/prop-types": { 825 | "version": "15.7.5", 826 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 827 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 828 | "dev": true 829 | }, 830 | "node_modules/@types/react": { 831 | "version": "18.0.28", 832 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", 833 | "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", 834 | "dev": true, 835 | "dependencies": { 836 | "@types/prop-types": "*", 837 | "@types/scheduler": "*", 838 | "csstype": "^3.0.2" 839 | } 840 | }, 841 | "node_modules/@types/react-dom": { 842 | "version": "18.0.11", 843 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", 844 | "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", 845 | "dev": true, 846 | "dependencies": { 847 | "@types/react": "*" 848 | } 849 | }, 850 | "node_modules/@types/scheduler": { 851 | "version": "0.16.3", 852 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", 853 | "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", 854 | "dev": true 855 | }, 856 | "node_modules/@vitejs/plugin-react": { 857 | "version": "3.1.0", 858 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", 859 | "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", 860 | "dev": true, 861 | "dependencies": { 862 | "@babel/core": "^7.20.12", 863 | "@babel/plugin-transform-react-jsx-self": "^7.18.6", 864 | "@babel/plugin-transform-react-jsx-source": "^7.19.6", 865 | "magic-string": "^0.27.0", 866 | "react-refresh": "^0.14.0" 867 | }, 868 | "engines": { 869 | "node": "^14.18.0 || >=16.0.0" 870 | }, 871 | "peerDependencies": { 872 | "vite": "^4.1.0-beta.0" 873 | } 874 | }, 875 | "node_modules/ansi-styles": { 876 | "version": "3.2.1", 877 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 878 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 879 | "dev": true, 880 | "dependencies": { 881 | "color-convert": "^1.9.0" 882 | }, 883 | "engines": { 884 | "node": ">=4" 885 | } 886 | }, 887 | "node_modules/browserslist": { 888 | "version": "4.21.5", 889 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", 890 | "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", 891 | "dev": true, 892 | "funding": [ 893 | { 894 | "type": "opencollective", 895 | "url": "https://opencollective.com/browserslist" 896 | }, 897 | { 898 | "type": "tidelift", 899 | "url": "https://tidelift.com/funding/github/npm/browserslist" 900 | } 901 | ], 902 | "dependencies": { 903 | "caniuse-lite": "^1.0.30001449", 904 | "electron-to-chromium": "^1.4.284", 905 | "node-releases": "^2.0.8", 906 | "update-browserslist-db": "^1.0.10" 907 | }, 908 | "bin": { 909 | "browserslist": "cli.js" 910 | }, 911 | "engines": { 912 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 913 | } 914 | }, 915 | "node_modules/caniuse-lite": { 916 | "version": "1.0.30001469", 917 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", 918 | "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", 919 | "dev": true, 920 | "funding": [ 921 | { 922 | "type": "opencollective", 923 | "url": "https://opencollective.com/browserslist" 924 | }, 925 | { 926 | "type": "tidelift", 927 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 928 | } 929 | ] 930 | }, 931 | "node_modules/chalk": { 932 | "version": "2.4.2", 933 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 934 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 935 | "dev": true, 936 | "dependencies": { 937 | "ansi-styles": "^3.2.1", 938 | "escape-string-regexp": "^1.0.5", 939 | "supports-color": "^5.3.0" 940 | }, 941 | "engines": { 942 | "node": ">=4" 943 | } 944 | }, 945 | "node_modules/color-convert": { 946 | "version": "1.9.3", 947 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 948 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 949 | "dev": true, 950 | "dependencies": { 951 | "color-name": "1.1.3" 952 | } 953 | }, 954 | "node_modules/color-name": { 955 | "version": "1.1.3", 956 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 957 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 958 | "dev": true 959 | }, 960 | "node_modules/convert-source-map": { 961 | "version": "1.9.0", 962 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 963 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 964 | "dev": true 965 | }, 966 | "node_modules/csstype": { 967 | "version": "3.1.1", 968 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", 969 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", 970 | "dev": true 971 | }, 972 | "node_modules/debug": { 973 | "version": "4.3.4", 974 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 975 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 976 | "dev": true, 977 | "dependencies": { 978 | "ms": "2.1.2" 979 | }, 980 | "engines": { 981 | "node": ">=6.0" 982 | }, 983 | "peerDependenciesMeta": { 984 | "supports-color": { 985 | "optional": true 986 | } 987 | } 988 | }, 989 | "node_modules/electron-to-chromium": { 990 | "version": "1.4.337", 991 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.337.tgz", 992 | "integrity": "sha512-W8gdzXG86mVPoc56eM8YA+QiLxaAxJ8cmDjxZgfhLLWVvZQxyA918w5tX2JEWApZta45T1/sYcmFHTsTOUE3nw==", 993 | "dev": true 994 | }, 995 | "node_modules/esbuild": { 996 | "version": "0.17.12", 997 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.12.tgz", 998 | "integrity": "sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==", 999 | "dev": true, 1000 | "hasInstallScript": true, 1001 | "bin": { 1002 | "esbuild": "bin/esbuild" 1003 | }, 1004 | "engines": { 1005 | "node": ">=12" 1006 | }, 1007 | "optionalDependencies": { 1008 | "@esbuild/android-arm": "0.17.12", 1009 | "@esbuild/android-arm64": "0.17.12", 1010 | "@esbuild/android-x64": "0.17.12", 1011 | "@esbuild/darwin-arm64": "0.17.12", 1012 | "@esbuild/darwin-x64": "0.17.12", 1013 | "@esbuild/freebsd-arm64": "0.17.12", 1014 | "@esbuild/freebsd-x64": "0.17.12", 1015 | "@esbuild/linux-arm": "0.17.12", 1016 | "@esbuild/linux-arm64": "0.17.12", 1017 | "@esbuild/linux-ia32": "0.17.12", 1018 | "@esbuild/linux-loong64": "0.17.12", 1019 | "@esbuild/linux-mips64el": "0.17.12", 1020 | "@esbuild/linux-ppc64": "0.17.12", 1021 | "@esbuild/linux-riscv64": "0.17.12", 1022 | "@esbuild/linux-s390x": "0.17.12", 1023 | "@esbuild/linux-x64": "0.17.12", 1024 | "@esbuild/netbsd-x64": "0.17.12", 1025 | "@esbuild/openbsd-x64": "0.17.12", 1026 | "@esbuild/sunos-x64": "0.17.12", 1027 | "@esbuild/win32-arm64": "0.17.12", 1028 | "@esbuild/win32-ia32": "0.17.12", 1029 | "@esbuild/win32-x64": "0.17.12" 1030 | } 1031 | }, 1032 | "node_modules/escalade": { 1033 | "version": "3.1.1", 1034 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1035 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1036 | "dev": true, 1037 | "engines": { 1038 | "node": ">=6" 1039 | } 1040 | }, 1041 | "node_modules/escape-string-regexp": { 1042 | "version": "1.0.5", 1043 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1044 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1045 | "dev": true, 1046 | "engines": { 1047 | "node": ">=0.8.0" 1048 | } 1049 | }, 1050 | "node_modules/fsevents": { 1051 | "version": "2.3.2", 1052 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1053 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1054 | "dev": true, 1055 | "hasInstallScript": true, 1056 | "optional": true, 1057 | "os": [ 1058 | "darwin" 1059 | ], 1060 | "engines": { 1061 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1062 | } 1063 | }, 1064 | "node_modules/function-bind": { 1065 | "version": "1.1.1", 1066 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1067 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1068 | "dev": true 1069 | }, 1070 | "node_modules/gensync": { 1071 | "version": "1.0.0-beta.2", 1072 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1073 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1074 | "dev": true, 1075 | "engines": { 1076 | "node": ">=6.9.0" 1077 | } 1078 | }, 1079 | "node_modules/globals": { 1080 | "version": "11.12.0", 1081 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1082 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1083 | "dev": true, 1084 | "engines": { 1085 | "node": ">=4" 1086 | } 1087 | }, 1088 | "node_modules/has": { 1089 | "version": "1.0.3", 1090 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1091 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1092 | "dev": true, 1093 | "dependencies": { 1094 | "function-bind": "^1.1.1" 1095 | }, 1096 | "engines": { 1097 | "node": ">= 0.4.0" 1098 | } 1099 | }, 1100 | "node_modules/has-flag": { 1101 | "version": "3.0.0", 1102 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1103 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1104 | "dev": true, 1105 | "engines": { 1106 | "node": ">=4" 1107 | } 1108 | }, 1109 | "node_modules/is-core-module": { 1110 | "version": "2.11.0", 1111 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1112 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1113 | "dev": true, 1114 | "dependencies": { 1115 | "has": "^1.0.3" 1116 | }, 1117 | "funding": { 1118 | "url": "https://github.com/sponsors/ljharb" 1119 | } 1120 | }, 1121 | "node_modules/js-tokens": { 1122 | "version": "4.0.0", 1123 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1124 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1125 | }, 1126 | "node_modules/jsesc": { 1127 | "version": "2.5.2", 1128 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1129 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1130 | "dev": true, 1131 | "bin": { 1132 | "jsesc": "bin/jsesc" 1133 | }, 1134 | "engines": { 1135 | "node": ">=4" 1136 | } 1137 | }, 1138 | "node_modules/json5": { 1139 | "version": "2.2.3", 1140 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1141 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1142 | "dev": true, 1143 | "bin": { 1144 | "json5": "lib/cli.js" 1145 | }, 1146 | "engines": { 1147 | "node": ">=6" 1148 | } 1149 | }, 1150 | "node_modules/loose-envify": { 1151 | "version": "1.4.0", 1152 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1153 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1154 | "dependencies": { 1155 | "js-tokens": "^3.0.0 || ^4.0.0" 1156 | }, 1157 | "bin": { 1158 | "loose-envify": "cli.js" 1159 | } 1160 | }, 1161 | "node_modules/lru-cache": { 1162 | "version": "5.1.1", 1163 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1164 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1165 | "dev": true, 1166 | "dependencies": { 1167 | "yallist": "^3.0.2" 1168 | } 1169 | }, 1170 | "node_modules/magic-string": { 1171 | "version": "0.27.0", 1172 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 1173 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 1174 | "dev": true, 1175 | "dependencies": { 1176 | "@jridgewell/sourcemap-codec": "^1.4.13" 1177 | }, 1178 | "engines": { 1179 | "node": ">=12" 1180 | } 1181 | }, 1182 | "node_modules/ms": { 1183 | "version": "2.1.2", 1184 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1185 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1186 | "dev": true 1187 | }, 1188 | "node_modules/nanoid": { 1189 | "version": "3.3.4", 1190 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1191 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 1192 | "dev": true, 1193 | "bin": { 1194 | "nanoid": "bin/nanoid.cjs" 1195 | }, 1196 | "engines": { 1197 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1198 | } 1199 | }, 1200 | "node_modules/node-releases": { 1201 | "version": "2.0.10", 1202 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", 1203 | "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", 1204 | "dev": true 1205 | }, 1206 | "node_modules/object-assign": { 1207 | "version": "4.1.1", 1208 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1209 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1210 | "engines": { 1211 | "node": ">=0.10.0" 1212 | } 1213 | }, 1214 | "node_modules/path-parse": { 1215 | "version": "1.0.7", 1216 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1217 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1218 | "dev": true 1219 | }, 1220 | "node_modules/picocolors": { 1221 | "version": "1.0.0", 1222 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1223 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1224 | "dev": true 1225 | }, 1226 | "node_modules/postcss": { 1227 | "version": "8.4.21", 1228 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 1229 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 1230 | "dev": true, 1231 | "funding": [ 1232 | { 1233 | "type": "opencollective", 1234 | "url": "https://opencollective.com/postcss/" 1235 | }, 1236 | { 1237 | "type": "tidelift", 1238 | "url": "https://tidelift.com/funding/github/npm/postcss" 1239 | } 1240 | ], 1241 | "dependencies": { 1242 | "nanoid": "^3.3.4", 1243 | "picocolors": "^1.0.0", 1244 | "source-map-js": "^1.0.2" 1245 | }, 1246 | "engines": { 1247 | "node": "^10 || ^12 || >=14" 1248 | } 1249 | }, 1250 | "node_modules/prop-types": { 1251 | "version": "15.8.1", 1252 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 1253 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 1254 | "dependencies": { 1255 | "loose-envify": "^1.4.0", 1256 | "object-assign": "^4.1.1", 1257 | "react-is": "^16.13.1" 1258 | } 1259 | }, 1260 | "node_modules/react": { 1261 | "version": "18.2.0", 1262 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 1263 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 1264 | "dependencies": { 1265 | "loose-envify": "^1.1.0" 1266 | }, 1267 | "engines": { 1268 | "node": ">=0.10.0" 1269 | } 1270 | }, 1271 | "node_modules/react-dom": { 1272 | "version": "18.2.0", 1273 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 1274 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 1275 | "dependencies": { 1276 | "loose-envify": "^1.1.0", 1277 | "scheduler": "^0.23.0" 1278 | }, 1279 | "peerDependencies": { 1280 | "react": "^18.2.0" 1281 | } 1282 | }, 1283 | "node_modules/react-is": { 1284 | "version": "16.13.1", 1285 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 1286 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 1287 | }, 1288 | "node_modules/react-refresh": { 1289 | "version": "0.14.0", 1290 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", 1291 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", 1292 | "dev": true, 1293 | "engines": { 1294 | "node": ">=0.10.0" 1295 | } 1296 | }, 1297 | "node_modules/resolve": { 1298 | "version": "1.22.1", 1299 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1300 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1301 | "dev": true, 1302 | "dependencies": { 1303 | "is-core-module": "^2.9.0", 1304 | "path-parse": "^1.0.7", 1305 | "supports-preserve-symlinks-flag": "^1.0.0" 1306 | }, 1307 | "bin": { 1308 | "resolve": "bin/resolve" 1309 | }, 1310 | "funding": { 1311 | "url": "https://github.com/sponsors/ljharb" 1312 | } 1313 | }, 1314 | "node_modules/rollup": { 1315 | "version": "3.20.1", 1316 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.1.tgz", 1317 | "integrity": "sha512-sz2w8cBJlWQ2E17RcpvHuf4sk2BQx4tfKDnjNPikEpLEevrbIAR7CH3PGa2hpPwWbNgPaA9yh9Jzljds5bc9zg==", 1318 | "dev": true, 1319 | "bin": { 1320 | "rollup": "dist/bin/rollup" 1321 | }, 1322 | "engines": { 1323 | "node": ">=14.18.0", 1324 | "npm": ">=8.0.0" 1325 | }, 1326 | "optionalDependencies": { 1327 | "fsevents": "~2.3.2" 1328 | } 1329 | }, 1330 | "node_modules/scheduler": { 1331 | "version": "0.23.0", 1332 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 1333 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 1334 | "dependencies": { 1335 | "loose-envify": "^1.1.0" 1336 | } 1337 | }, 1338 | "node_modules/semver": { 1339 | "version": "6.3.0", 1340 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1341 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1342 | "dev": true, 1343 | "bin": { 1344 | "semver": "bin/semver.js" 1345 | } 1346 | }, 1347 | "node_modules/source-map-js": { 1348 | "version": "1.0.2", 1349 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1350 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1351 | "dev": true, 1352 | "engines": { 1353 | "node": ">=0.10.0" 1354 | } 1355 | }, 1356 | "node_modules/supports-color": { 1357 | "version": "5.5.0", 1358 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1359 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1360 | "dev": true, 1361 | "dependencies": { 1362 | "has-flag": "^3.0.0" 1363 | }, 1364 | "engines": { 1365 | "node": ">=4" 1366 | } 1367 | }, 1368 | "node_modules/supports-preserve-symlinks-flag": { 1369 | "version": "1.0.0", 1370 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1371 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1372 | "dev": true, 1373 | "engines": { 1374 | "node": ">= 0.4" 1375 | }, 1376 | "funding": { 1377 | "url": "https://github.com/sponsors/ljharb" 1378 | } 1379 | }, 1380 | "node_modules/to-fast-properties": { 1381 | "version": "2.0.0", 1382 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1383 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 1384 | "dev": true, 1385 | "engines": { 1386 | "node": ">=4" 1387 | } 1388 | }, 1389 | "node_modules/update-browserslist-db": { 1390 | "version": "1.0.10", 1391 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", 1392 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", 1393 | "dev": true, 1394 | "funding": [ 1395 | { 1396 | "type": "opencollective", 1397 | "url": "https://opencollective.com/browserslist" 1398 | }, 1399 | { 1400 | "type": "tidelift", 1401 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1402 | } 1403 | ], 1404 | "dependencies": { 1405 | "escalade": "^3.1.1", 1406 | "picocolors": "^1.0.0" 1407 | }, 1408 | "bin": { 1409 | "browserslist-lint": "cli.js" 1410 | }, 1411 | "peerDependencies": { 1412 | "browserslist": ">= 4.21.0" 1413 | } 1414 | }, 1415 | "node_modules/vite": { 1416 | "version": "4.2.1", 1417 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz", 1418 | "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", 1419 | "dev": true, 1420 | "dependencies": { 1421 | "esbuild": "^0.17.5", 1422 | "postcss": "^8.4.21", 1423 | "resolve": "^1.22.1", 1424 | "rollup": "^3.18.0" 1425 | }, 1426 | "bin": { 1427 | "vite": "bin/vite.js" 1428 | }, 1429 | "engines": { 1430 | "node": "^14.18.0 || >=16.0.0" 1431 | }, 1432 | "optionalDependencies": { 1433 | "fsevents": "~2.3.2" 1434 | }, 1435 | "peerDependencies": { 1436 | "@types/node": ">= 14", 1437 | "less": "*", 1438 | "sass": "*", 1439 | "stylus": "*", 1440 | "sugarss": "*", 1441 | "terser": "^5.4.0" 1442 | }, 1443 | "peerDependenciesMeta": { 1444 | "@types/node": { 1445 | "optional": true 1446 | }, 1447 | "less": { 1448 | "optional": true 1449 | }, 1450 | "sass": { 1451 | "optional": true 1452 | }, 1453 | "stylus": { 1454 | "optional": true 1455 | }, 1456 | "sugarss": { 1457 | "optional": true 1458 | }, 1459 | "terser": { 1460 | "optional": true 1461 | } 1462 | } 1463 | }, 1464 | "node_modules/yallist": { 1465 | "version": "3.1.1", 1466 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1467 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 1468 | "dev": true 1469 | } 1470 | }, 1471 | "dependencies": { 1472 | "@ampproject/remapping": { 1473 | "version": "2.2.0", 1474 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", 1475 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", 1476 | "dev": true, 1477 | "requires": { 1478 | "@jridgewell/gen-mapping": "^0.1.0", 1479 | "@jridgewell/trace-mapping": "^0.3.9" 1480 | } 1481 | }, 1482 | "@babel/code-frame": { 1483 | "version": "7.18.6", 1484 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 1485 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 1486 | "dev": true, 1487 | "requires": { 1488 | "@babel/highlight": "^7.18.6" 1489 | } 1490 | }, 1491 | "@babel/compat-data": { 1492 | "version": "7.21.0", 1493 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", 1494 | "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", 1495 | "dev": true 1496 | }, 1497 | "@babel/core": { 1498 | "version": "7.21.3", 1499 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", 1500 | "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", 1501 | "dev": true, 1502 | "requires": { 1503 | "@ampproject/remapping": "^2.2.0", 1504 | "@babel/code-frame": "^7.18.6", 1505 | "@babel/generator": "^7.21.3", 1506 | "@babel/helper-compilation-targets": "^7.20.7", 1507 | "@babel/helper-module-transforms": "^7.21.2", 1508 | "@babel/helpers": "^7.21.0", 1509 | "@babel/parser": "^7.21.3", 1510 | "@babel/template": "^7.20.7", 1511 | "@babel/traverse": "^7.21.3", 1512 | "@babel/types": "^7.21.3", 1513 | "convert-source-map": "^1.7.0", 1514 | "debug": "^4.1.0", 1515 | "gensync": "^1.0.0-beta.2", 1516 | "json5": "^2.2.2", 1517 | "semver": "^6.3.0" 1518 | } 1519 | }, 1520 | "@babel/generator": { 1521 | "version": "7.21.3", 1522 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", 1523 | "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", 1524 | "dev": true, 1525 | "requires": { 1526 | "@babel/types": "^7.21.3", 1527 | "@jridgewell/gen-mapping": "^0.3.2", 1528 | "@jridgewell/trace-mapping": "^0.3.17", 1529 | "jsesc": "^2.5.1" 1530 | }, 1531 | "dependencies": { 1532 | "@jridgewell/gen-mapping": { 1533 | "version": "0.3.2", 1534 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 1535 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 1536 | "dev": true, 1537 | "requires": { 1538 | "@jridgewell/set-array": "^1.0.1", 1539 | "@jridgewell/sourcemap-codec": "^1.4.10", 1540 | "@jridgewell/trace-mapping": "^0.3.9" 1541 | } 1542 | } 1543 | } 1544 | }, 1545 | "@babel/helper-compilation-targets": { 1546 | "version": "7.20.7", 1547 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", 1548 | "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", 1549 | "dev": true, 1550 | "requires": { 1551 | "@babel/compat-data": "^7.20.5", 1552 | "@babel/helper-validator-option": "^7.18.6", 1553 | "browserslist": "^4.21.3", 1554 | "lru-cache": "^5.1.1", 1555 | "semver": "^6.3.0" 1556 | } 1557 | }, 1558 | "@babel/helper-environment-visitor": { 1559 | "version": "7.18.9", 1560 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", 1561 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", 1562 | "dev": true 1563 | }, 1564 | "@babel/helper-function-name": { 1565 | "version": "7.21.0", 1566 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", 1567 | "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", 1568 | "dev": true, 1569 | "requires": { 1570 | "@babel/template": "^7.20.7", 1571 | "@babel/types": "^7.21.0" 1572 | } 1573 | }, 1574 | "@babel/helper-hoist-variables": { 1575 | "version": "7.18.6", 1576 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", 1577 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", 1578 | "dev": true, 1579 | "requires": { 1580 | "@babel/types": "^7.18.6" 1581 | } 1582 | }, 1583 | "@babel/helper-module-imports": { 1584 | "version": "7.18.6", 1585 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", 1586 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", 1587 | "dev": true, 1588 | "requires": { 1589 | "@babel/types": "^7.18.6" 1590 | } 1591 | }, 1592 | "@babel/helper-module-transforms": { 1593 | "version": "7.21.2", 1594 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", 1595 | "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", 1596 | "dev": true, 1597 | "requires": { 1598 | "@babel/helper-environment-visitor": "^7.18.9", 1599 | "@babel/helper-module-imports": "^7.18.6", 1600 | "@babel/helper-simple-access": "^7.20.2", 1601 | "@babel/helper-split-export-declaration": "^7.18.6", 1602 | "@babel/helper-validator-identifier": "^7.19.1", 1603 | "@babel/template": "^7.20.7", 1604 | "@babel/traverse": "^7.21.2", 1605 | "@babel/types": "^7.21.2" 1606 | } 1607 | }, 1608 | "@babel/helper-plugin-utils": { 1609 | "version": "7.20.2", 1610 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", 1611 | "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", 1612 | "dev": true 1613 | }, 1614 | "@babel/helper-simple-access": { 1615 | "version": "7.20.2", 1616 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", 1617 | "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", 1618 | "dev": true, 1619 | "requires": { 1620 | "@babel/types": "^7.20.2" 1621 | } 1622 | }, 1623 | "@babel/helper-split-export-declaration": { 1624 | "version": "7.18.6", 1625 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", 1626 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", 1627 | "dev": true, 1628 | "requires": { 1629 | "@babel/types": "^7.18.6" 1630 | } 1631 | }, 1632 | "@babel/helper-string-parser": { 1633 | "version": "7.19.4", 1634 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", 1635 | "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", 1636 | "dev": true 1637 | }, 1638 | "@babel/helper-validator-identifier": { 1639 | "version": "7.19.1", 1640 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 1641 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 1642 | "dev": true 1643 | }, 1644 | "@babel/helper-validator-option": { 1645 | "version": "7.21.0", 1646 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", 1647 | "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", 1648 | "dev": true 1649 | }, 1650 | "@babel/helpers": { 1651 | "version": "7.21.0", 1652 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", 1653 | "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", 1654 | "dev": true, 1655 | "requires": { 1656 | "@babel/template": "^7.20.7", 1657 | "@babel/traverse": "^7.21.0", 1658 | "@babel/types": "^7.21.0" 1659 | } 1660 | }, 1661 | "@babel/highlight": { 1662 | "version": "7.18.6", 1663 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 1664 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 1665 | "dev": true, 1666 | "requires": { 1667 | "@babel/helper-validator-identifier": "^7.18.6", 1668 | "chalk": "^2.0.0", 1669 | "js-tokens": "^4.0.0" 1670 | } 1671 | }, 1672 | "@babel/parser": { 1673 | "version": "7.21.3", 1674 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", 1675 | "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", 1676 | "dev": true 1677 | }, 1678 | "@babel/plugin-transform-react-jsx-self": { 1679 | "version": "7.21.0", 1680 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", 1681 | "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", 1682 | "dev": true, 1683 | "requires": { 1684 | "@babel/helper-plugin-utils": "^7.20.2" 1685 | } 1686 | }, 1687 | "@babel/plugin-transform-react-jsx-source": { 1688 | "version": "7.19.6", 1689 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", 1690 | "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", 1691 | "dev": true, 1692 | "requires": { 1693 | "@babel/helper-plugin-utils": "^7.19.0" 1694 | } 1695 | }, 1696 | "@babel/template": { 1697 | "version": "7.20.7", 1698 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", 1699 | "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", 1700 | "dev": true, 1701 | "requires": { 1702 | "@babel/code-frame": "^7.18.6", 1703 | "@babel/parser": "^7.20.7", 1704 | "@babel/types": "^7.20.7" 1705 | } 1706 | }, 1707 | "@babel/traverse": { 1708 | "version": "7.21.3", 1709 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", 1710 | "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", 1711 | "dev": true, 1712 | "requires": { 1713 | "@babel/code-frame": "^7.18.6", 1714 | "@babel/generator": "^7.21.3", 1715 | "@babel/helper-environment-visitor": "^7.18.9", 1716 | "@babel/helper-function-name": "^7.21.0", 1717 | "@babel/helper-hoist-variables": "^7.18.6", 1718 | "@babel/helper-split-export-declaration": "^7.18.6", 1719 | "@babel/parser": "^7.21.3", 1720 | "@babel/types": "^7.21.3", 1721 | "debug": "^4.1.0", 1722 | "globals": "^11.1.0" 1723 | } 1724 | }, 1725 | "@babel/types": { 1726 | "version": "7.21.3", 1727 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", 1728 | "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", 1729 | "dev": true, 1730 | "requires": { 1731 | "@babel/helper-string-parser": "^7.19.4", 1732 | "@babel/helper-validator-identifier": "^7.19.1", 1733 | "to-fast-properties": "^2.0.0" 1734 | } 1735 | }, 1736 | "@esbuild/android-arm": { 1737 | "version": "0.17.12", 1738 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz", 1739 | "integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==", 1740 | "dev": true, 1741 | "optional": true 1742 | }, 1743 | "@esbuild/android-arm64": { 1744 | "version": "0.17.12", 1745 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz", 1746 | "integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==", 1747 | "dev": true, 1748 | "optional": true 1749 | }, 1750 | "@esbuild/android-x64": { 1751 | "version": "0.17.12", 1752 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz", 1753 | "integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==", 1754 | "dev": true, 1755 | "optional": true 1756 | }, 1757 | "@esbuild/darwin-arm64": { 1758 | "version": "0.17.12", 1759 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz", 1760 | "integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==", 1761 | "dev": true, 1762 | "optional": true 1763 | }, 1764 | "@esbuild/darwin-x64": { 1765 | "version": "0.17.12", 1766 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz", 1767 | "integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==", 1768 | "dev": true, 1769 | "optional": true 1770 | }, 1771 | "@esbuild/freebsd-arm64": { 1772 | "version": "0.17.12", 1773 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz", 1774 | "integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==", 1775 | "dev": true, 1776 | "optional": true 1777 | }, 1778 | "@esbuild/freebsd-x64": { 1779 | "version": "0.17.12", 1780 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz", 1781 | "integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==", 1782 | "dev": true, 1783 | "optional": true 1784 | }, 1785 | "@esbuild/linux-arm": { 1786 | "version": "0.17.12", 1787 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz", 1788 | "integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==", 1789 | "dev": true, 1790 | "optional": true 1791 | }, 1792 | "@esbuild/linux-arm64": { 1793 | "version": "0.17.12", 1794 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz", 1795 | "integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==", 1796 | "dev": true, 1797 | "optional": true 1798 | }, 1799 | "@esbuild/linux-ia32": { 1800 | "version": "0.17.12", 1801 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz", 1802 | "integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==", 1803 | "dev": true, 1804 | "optional": true 1805 | }, 1806 | "@esbuild/linux-loong64": { 1807 | "version": "0.17.12", 1808 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz", 1809 | "integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==", 1810 | "dev": true, 1811 | "optional": true 1812 | }, 1813 | "@esbuild/linux-mips64el": { 1814 | "version": "0.17.12", 1815 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz", 1816 | "integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==", 1817 | "dev": true, 1818 | "optional": true 1819 | }, 1820 | "@esbuild/linux-ppc64": { 1821 | "version": "0.17.12", 1822 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz", 1823 | "integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==", 1824 | "dev": true, 1825 | "optional": true 1826 | }, 1827 | "@esbuild/linux-riscv64": { 1828 | "version": "0.17.12", 1829 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz", 1830 | "integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==", 1831 | "dev": true, 1832 | "optional": true 1833 | }, 1834 | "@esbuild/linux-s390x": { 1835 | "version": "0.17.12", 1836 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz", 1837 | "integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==", 1838 | "dev": true, 1839 | "optional": true 1840 | }, 1841 | "@esbuild/linux-x64": { 1842 | "version": "0.17.12", 1843 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz", 1844 | "integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==", 1845 | "dev": true, 1846 | "optional": true 1847 | }, 1848 | "@esbuild/netbsd-x64": { 1849 | "version": "0.17.12", 1850 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz", 1851 | "integrity": "sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==", 1852 | "dev": true, 1853 | "optional": true 1854 | }, 1855 | "@esbuild/openbsd-x64": { 1856 | "version": "0.17.12", 1857 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz", 1858 | "integrity": "sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==", 1859 | "dev": true, 1860 | "optional": true 1861 | }, 1862 | "@esbuild/sunos-x64": { 1863 | "version": "0.17.12", 1864 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz", 1865 | "integrity": "sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==", 1866 | "dev": true, 1867 | "optional": true 1868 | }, 1869 | "@esbuild/win32-arm64": { 1870 | "version": "0.17.12", 1871 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz", 1872 | "integrity": "sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==", 1873 | "dev": true, 1874 | "optional": true 1875 | }, 1876 | "@esbuild/win32-ia32": { 1877 | "version": "0.17.12", 1878 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz", 1879 | "integrity": "sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==", 1880 | "dev": true, 1881 | "optional": true 1882 | }, 1883 | "@esbuild/win32-x64": { 1884 | "version": "0.17.12", 1885 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz", 1886 | "integrity": "sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==", 1887 | "dev": true, 1888 | "optional": true 1889 | }, 1890 | "@fortawesome/fontawesome-common-types": { 1891 | "version": "6.3.0", 1892 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", 1893 | "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==" 1894 | }, 1895 | "@fortawesome/fontawesome-svg-core": { 1896 | "version": "6.3.0", 1897 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", 1898 | "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", 1899 | "requires": { 1900 | "@fortawesome/fontawesome-common-types": "6.3.0" 1901 | } 1902 | }, 1903 | "@fortawesome/free-solid-svg-icons": { 1904 | "version": "6.3.0", 1905 | "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", 1906 | "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", 1907 | "requires": { 1908 | "@fortawesome/fontawesome-common-types": "6.3.0" 1909 | } 1910 | }, 1911 | "@fortawesome/react-fontawesome": { 1912 | "version": "0.2.0", 1913 | "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", 1914 | "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", 1915 | "requires": { 1916 | "prop-types": "^15.8.1" 1917 | } 1918 | }, 1919 | "@jridgewell/gen-mapping": { 1920 | "version": "0.1.1", 1921 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", 1922 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", 1923 | "dev": true, 1924 | "requires": { 1925 | "@jridgewell/set-array": "^1.0.0", 1926 | "@jridgewell/sourcemap-codec": "^1.4.10" 1927 | } 1928 | }, 1929 | "@jridgewell/resolve-uri": { 1930 | "version": "3.1.0", 1931 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 1932 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 1933 | "dev": true 1934 | }, 1935 | "@jridgewell/set-array": { 1936 | "version": "1.1.2", 1937 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 1938 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 1939 | "dev": true 1940 | }, 1941 | "@jridgewell/sourcemap-codec": { 1942 | "version": "1.4.14", 1943 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 1944 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 1945 | "dev": true 1946 | }, 1947 | "@jridgewell/trace-mapping": { 1948 | "version": "0.3.17", 1949 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 1950 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 1951 | "dev": true, 1952 | "requires": { 1953 | "@jridgewell/resolve-uri": "3.1.0", 1954 | "@jridgewell/sourcemap-codec": "1.4.14" 1955 | } 1956 | }, 1957 | "@types/prop-types": { 1958 | "version": "15.7.5", 1959 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 1960 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 1961 | "dev": true 1962 | }, 1963 | "@types/react": { 1964 | "version": "18.0.28", 1965 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", 1966 | "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", 1967 | "dev": true, 1968 | "requires": { 1969 | "@types/prop-types": "*", 1970 | "@types/scheduler": "*", 1971 | "csstype": "^3.0.2" 1972 | } 1973 | }, 1974 | "@types/react-dom": { 1975 | "version": "18.0.11", 1976 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", 1977 | "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", 1978 | "dev": true, 1979 | "requires": { 1980 | "@types/react": "*" 1981 | } 1982 | }, 1983 | "@types/scheduler": { 1984 | "version": "0.16.3", 1985 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", 1986 | "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", 1987 | "dev": true 1988 | }, 1989 | "@vitejs/plugin-react": { 1990 | "version": "3.1.0", 1991 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", 1992 | "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", 1993 | "dev": true, 1994 | "requires": { 1995 | "@babel/core": "^7.20.12", 1996 | "@babel/plugin-transform-react-jsx-self": "^7.18.6", 1997 | "@babel/plugin-transform-react-jsx-source": "^7.19.6", 1998 | "magic-string": "^0.27.0", 1999 | "react-refresh": "^0.14.0" 2000 | } 2001 | }, 2002 | "ansi-styles": { 2003 | "version": "3.2.1", 2004 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 2005 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 2006 | "dev": true, 2007 | "requires": { 2008 | "color-convert": "^1.9.0" 2009 | } 2010 | }, 2011 | "browserslist": { 2012 | "version": "4.21.5", 2013 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", 2014 | "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", 2015 | "dev": true, 2016 | "requires": { 2017 | "caniuse-lite": "^1.0.30001449", 2018 | "electron-to-chromium": "^1.4.284", 2019 | "node-releases": "^2.0.8", 2020 | "update-browserslist-db": "^1.0.10" 2021 | } 2022 | }, 2023 | "caniuse-lite": { 2024 | "version": "1.0.30001469", 2025 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", 2026 | "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", 2027 | "dev": true 2028 | }, 2029 | "chalk": { 2030 | "version": "2.4.2", 2031 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 2032 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 2033 | "dev": true, 2034 | "requires": { 2035 | "ansi-styles": "^3.2.1", 2036 | "escape-string-regexp": "^1.0.5", 2037 | "supports-color": "^5.3.0" 2038 | } 2039 | }, 2040 | "color-convert": { 2041 | "version": "1.9.3", 2042 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 2043 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 2044 | "dev": true, 2045 | "requires": { 2046 | "color-name": "1.1.3" 2047 | } 2048 | }, 2049 | "color-name": { 2050 | "version": "1.1.3", 2051 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 2052 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 2053 | "dev": true 2054 | }, 2055 | "convert-source-map": { 2056 | "version": "1.9.0", 2057 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 2058 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 2059 | "dev": true 2060 | }, 2061 | "csstype": { 2062 | "version": "3.1.1", 2063 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", 2064 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", 2065 | "dev": true 2066 | }, 2067 | "debug": { 2068 | "version": "4.3.4", 2069 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2070 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2071 | "dev": true, 2072 | "requires": { 2073 | "ms": "2.1.2" 2074 | } 2075 | }, 2076 | "electron-to-chromium": { 2077 | "version": "1.4.337", 2078 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.337.tgz", 2079 | "integrity": "sha512-W8gdzXG86mVPoc56eM8YA+QiLxaAxJ8cmDjxZgfhLLWVvZQxyA918w5tX2JEWApZta45T1/sYcmFHTsTOUE3nw==", 2080 | "dev": true 2081 | }, 2082 | "esbuild": { 2083 | "version": "0.17.12", 2084 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.12.tgz", 2085 | "integrity": "sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==", 2086 | "dev": true, 2087 | "requires": { 2088 | "@esbuild/android-arm": "0.17.12", 2089 | "@esbuild/android-arm64": "0.17.12", 2090 | "@esbuild/android-x64": "0.17.12", 2091 | "@esbuild/darwin-arm64": "0.17.12", 2092 | "@esbuild/darwin-x64": "0.17.12", 2093 | "@esbuild/freebsd-arm64": "0.17.12", 2094 | "@esbuild/freebsd-x64": "0.17.12", 2095 | "@esbuild/linux-arm": "0.17.12", 2096 | "@esbuild/linux-arm64": "0.17.12", 2097 | "@esbuild/linux-ia32": "0.17.12", 2098 | "@esbuild/linux-loong64": "0.17.12", 2099 | "@esbuild/linux-mips64el": "0.17.12", 2100 | "@esbuild/linux-ppc64": "0.17.12", 2101 | "@esbuild/linux-riscv64": "0.17.12", 2102 | "@esbuild/linux-s390x": "0.17.12", 2103 | "@esbuild/linux-x64": "0.17.12", 2104 | "@esbuild/netbsd-x64": "0.17.12", 2105 | "@esbuild/openbsd-x64": "0.17.12", 2106 | "@esbuild/sunos-x64": "0.17.12", 2107 | "@esbuild/win32-arm64": "0.17.12", 2108 | "@esbuild/win32-ia32": "0.17.12", 2109 | "@esbuild/win32-x64": "0.17.12" 2110 | } 2111 | }, 2112 | "escalade": { 2113 | "version": "3.1.1", 2114 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2115 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2116 | "dev": true 2117 | }, 2118 | "escape-string-regexp": { 2119 | "version": "1.0.5", 2120 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2121 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 2122 | "dev": true 2123 | }, 2124 | "fsevents": { 2125 | "version": "2.3.2", 2126 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2127 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2128 | "dev": true, 2129 | "optional": true 2130 | }, 2131 | "function-bind": { 2132 | "version": "1.1.1", 2133 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2134 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2135 | "dev": true 2136 | }, 2137 | "gensync": { 2138 | "version": "1.0.0-beta.2", 2139 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 2140 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 2141 | "dev": true 2142 | }, 2143 | "globals": { 2144 | "version": "11.12.0", 2145 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 2146 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 2147 | "dev": true 2148 | }, 2149 | "has": { 2150 | "version": "1.0.3", 2151 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2152 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2153 | "dev": true, 2154 | "requires": { 2155 | "function-bind": "^1.1.1" 2156 | } 2157 | }, 2158 | "has-flag": { 2159 | "version": "3.0.0", 2160 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2161 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 2162 | "dev": true 2163 | }, 2164 | "is-core-module": { 2165 | "version": "2.11.0", 2166 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 2167 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 2168 | "dev": true, 2169 | "requires": { 2170 | "has": "^1.0.3" 2171 | } 2172 | }, 2173 | "js-tokens": { 2174 | "version": "4.0.0", 2175 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2176 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 2177 | }, 2178 | "jsesc": { 2179 | "version": "2.5.2", 2180 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2181 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2182 | "dev": true 2183 | }, 2184 | "json5": { 2185 | "version": "2.2.3", 2186 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2187 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2188 | "dev": true 2189 | }, 2190 | "loose-envify": { 2191 | "version": "1.4.0", 2192 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2193 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2194 | "requires": { 2195 | "js-tokens": "^3.0.0 || ^4.0.0" 2196 | } 2197 | }, 2198 | "lru-cache": { 2199 | "version": "5.1.1", 2200 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2201 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2202 | "dev": true, 2203 | "requires": { 2204 | "yallist": "^3.0.2" 2205 | } 2206 | }, 2207 | "magic-string": { 2208 | "version": "0.27.0", 2209 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 2210 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 2211 | "dev": true, 2212 | "requires": { 2213 | "@jridgewell/sourcemap-codec": "^1.4.13" 2214 | } 2215 | }, 2216 | "ms": { 2217 | "version": "2.1.2", 2218 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2219 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2220 | "dev": true 2221 | }, 2222 | "nanoid": { 2223 | "version": "3.3.4", 2224 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 2225 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 2226 | "dev": true 2227 | }, 2228 | "node-releases": { 2229 | "version": "2.0.10", 2230 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", 2231 | "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", 2232 | "dev": true 2233 | }, 2234 | "object-assign": { 2235 | "version": "4.1.1", 2236 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2237 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 2238 | }, 2239 | "path-parse": { 2240 | "version": "1.0.7", 2241 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2242 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2243 | "dev": true 2244 | }, 2245 | "picocolors": { 2246 | "version": "1.0.0", 2247 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2248 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2249 | "dev": true 2250 | }, 2251 | "postcss": { 2252 | "version": "8.4.21", 2253 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 2254 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 2255 | "dev": true, 2256 | "requires": { 2257 | "nanoid": "^3.3.4", 2258 | "picocolors": "^1.0.0", 2259 | "source-map-js": "^1.0.2" 2260 | } 2261 | }, 2262 | "prop-types": { 2263 | "version": "15.8.1", 2264 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 2265 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 2266 | "requires": { 2267 | "loose-envify": "^1.4.0", 2268 | "object-assign": "^4.1.1", 2269 | "react-is": "^16.13.1" 2270 | } 2271 | }, 2272 | "react": { 2273 | "version": "18.2.0", 2274 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 2275 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 2276 | "requires": { 2277 | "loose-envify": "^1.1.0" 2278 | } 2279 | }, 2280 | "react-dom": { 2281 | "version": "18.2.0", 2282 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 2283 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 2284 | "requires": { 2285 | "loose-envify": "^1.1.0", 2286 | "scheduler": "^0.23.0" 2287 | } 2288 | }, 2289 | "react-is": { 2290 | "version": "16.13.1", 2291 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 2292 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 2293 | }, 2294 | "react-refresh": { 2295 | "version": "0.14.0", 2296 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", 2297 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", 2298 | "dev": true 2299 | }, 2300 | "resolve": { 2301 | "version": "1.22.1", 2302 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 2303 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 2304 | "dev": true, 2305 | "requires": { 2306 | "is-core-module": "^2.9.0", 2307 | "path-parse": "^1.0.7", 2308 | "supports-preserve-symlinks-flag": "^1.0.0" 2309 | } 2310 | }, 2311 | "rollup": { 2312 | "version": "3.20.1", 2313 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.1.tgz", 2314 | "integrity": "sha512-sz2w8cBJlWQ2E17RcpvHuf4sk2BQx4tfKDnjNPikEpLEevrbIAR7CH3PGa2hpPwWbNgPaA9yh9Jzljds5bc9zg==", 2315 | "dev": true, 2316 | "requires": { 2317 | "fsevents": "~2.3.2" 2318 | } 2319 | }, 2320 | "scheduler": { 2321 | "version": "0.23.0", 2322 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 2323 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 2324 | "requires": { 2325 | "loose-envify": "^1.1.0" 2326 | } 2327 | }, 2328 | "semver": { 2329 | "version": "6.3.0", 2330 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2331 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2332 | "dev": true 2333 | }, 2334 | "source-map-js": { 2335 | "version": "1.0.2", 2336 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2337 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2338 | "dev": true 2339 | }, 2340 | "supports-color": { 2341 | "version": "5.5.0", 2342 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2343 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2344 | "dev": true, 2345 | "requires": { 2346 | "has-flag": "^3.0.0" 2347 | } 2348 | }, 2349 | "supports-preserve-symlinks-flag": { 2350 | "version": "1.0.0", 2351 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2352 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2353 | "dev": true 2354 | }, 2355 | "to-fast-properties": { 2356 | "version": "2.0.0", 2357 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2358 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 2359 | "dev": true 2360 | }, 2361 | "update-browserslist-db": { 2362 | "version": "1.0.10", 2363 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", 2364 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", 2365 | "dev": true, 2366 | "requires": { 2367 | "escalade": "^3.1.1", 2368 | "picocolors": "^1.0.0" 2369 | } 2370 | }, 2371 | "vite": { 2372 | "version": "4.2.1", 2373 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz", 2374 | "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", 2375 | "dev": true, 2376 | "requires": { 2377 | "esbuild": "^0.17.5", 2378 | "fsevents": "~2.3.2", 2379 | "postcss": "^8.4.21", 2380 | "resolve": "^1.22.1", 2381 | "rollup": "^3.18.0" 2382 | } 2383 | }, 2384 | "yallist": { 2385 | "version": "3.1.1", 2386 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 2387 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 2388 | "dev": true 2389 | } 2390 | } 2391 | } 2392 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ema-john-simple", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@fortawesome/fontawesome-svg-core": "^6.3.0", 13 | "@fortawesome/free-solid-svg-icons": "^6.3.0", 14 | "@fortawesome/react-fontawesome": "^0.2.0", 15 | "react": "^18.2.0", 16 | "react-dom": "^18.2.0" 17 | }, 18 | "devDependencies": { 19 | "@types/react": "^18.0.28", 20 | "@types/react-dom": "^18.0.11", 21 | "@vitejs/plugin-react": "^3.1.0", 22 | "vite": "^4.2.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProgrammingHero1/ema-john-simple/e6c7a4940f2895aa38e21a815844997a6a8dcb71/public/favicon.ico -------------------------------------------------------------------------------- /public/products.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "124e13b9-2d54-4b2f-a74d-a77b362d6ead", 4 | "category": "Men's Sneaker", 5 | "name": "ULTRABOOST 22 SHOES", 6 | "seller": "Addidas", 7 | "price": 420, 8 | "stock": 20, 9 | "ratings": 4, 10 | "ratingsCount": 3725, 11 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/fbaf991a78bc4896a3e9ad7800abcec6_9366/Ultraboost_22_Shoes_Black_GZ0127_01_standard.jpg", 12 | "shipping": 1, 13 | "quantity": 0 14 | }, 15 | { 16 | "id": "13cbc7ed-a61b-4883-9d42-82d7d8642b86", 17 | "category": "Men's Sneaker", 18 | "name": "LUNAR NEW YEAR ULTRABOOST DNA SHOES", 19 | "seller": "Addidas", 20 | "price": 196, 21 | "stock": 19, 22 | "ratings": 5, 23 | "ratingsCount": 4355, 24 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/2cee64414e1f4f31baf1ae270099d950_9366/Lunar_New_Year_Ultraboost_DNA_Shoes_Black_GZ6074_01_standard.jpg", 25 | "shipping": 14, 26 | "quantity": 0 27 | }, 28 | { 29 | "id": "307f166f-1d04-4573-bc37-2f461ea9d4f7", 30 | "category": "Men's Sneaker", 31 | "name": "SUPERNOVA SHOES", 32 | "seller": "Addidas", 33 | "price": 245, 34 | "stock": 20, 35 | "ratings": 4, 36 | "ratingsCount": 3972, 37 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/69cbc73d0cb846889f89acbb011e68cb_9366/Supernova_Shoes_Black_S42722_01_standard.jpg", 38 | "shipping": 1, 39 | "quantity": 0 40 | }, 41 | { 42 | "id": "4bf9798f-63bc-4a83-b0c6-6a3b816fe922", 43 | "category": "Men's Sneaker", 44 | "name": "LITE RACER ADAPT 3.0 SHOES", 45 | "seller": "Addidas", 46 | "price": 229, 47 | "stock": 10, 48 | "ratings": 5, 49 | "ratingsCount": 1764, 50 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/96a5f085fedf4e678095abad01056711_9366/Lite_Racer_Adapt_3.0_Shoes_Black_FX8802_01_standard.jpg", 51 | "shipping": 32, 52 | "quantity": 0 53 | }, 54 | { 55 | "id": "9496d72b-04ec-41f8-9bc3-0a7c9697be8e", 56 | "category": "Men's Sneaker", 57 | "name": "4DFWD SHOES", 58 | "seller": "Addidas", 59 | "price": 287, 60 | "stock": 11, 61 | "ratings": 4, 62 | "ratingsCount": 799, 63 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/8c5d1994dfd343e28567ad4400dd351d_9366/4DFWD_Shoes_Black_Q46447_01_standard.jpg", 64 | "shipping": 49, 65 | "quantity": 0 66 | }, 67 | { 68 | "id": "6e5593d3-557b-43cf-8dab-a5140faedfb0", 69 | "category": "Men's Sneaker", 70 | "name": "KAPTIR 2.0 SHOES", 71 | "seller": "Addidas", 72 | "price": 138, 73 | "stock": 19, 74 | "ratings": 3, 75 | "ratingsCount": 4372, 76 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/0846e90b15144861b33dacf500e3cfd1_9366/Kaptir_2.0_Shoes_White_H00276_01_standard.jpg", 77 | "shipping": 19, 78 | "quantity": 0 79 | }, 80 | { 81 | "id": "9c0c13c2-54e4-4001-809b-afbd9d84037d", 82 | "category": "Men's Sneaker", 83 | "name": "4DFWD PULSE SHOES", 84 | "seller": "Addidas", 85 | "price": 226, 86 | "stock": 1, 87 | "ratings": 4, 88 | "ratingsCount": 2870, 89 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9a8256bb7ca34da49ff8ad5600bb2812_9366/4DFWD_Pulse_Shoes_White_Q46221_01_standard.jpg", 90 | "shipping": 15, 91 | "quantity": 0 92 | }, 93 | { 94 | "id": "c9d1f410-d28f-49d9-9b01-d759b5acbeea", 95 | "category": "Men's Sneaker", 96 | "name": "ZX 1K BOOST SHOES", 97 | "seller": "Addidas", 98 | "price": 319, 99 | "stock": 7, 100 | "ratings": 4, 101 | "ratingsCount": 1360, 102 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/0e540bae86d5456aa034ada300ebf46c_9366/ZX_1K_Boost_Shoes_Grey_H00430_01_standard.jpg", 103 | "shipping": 50, 104 | "quantity": 0 105 | }, 106 | { 107 | "id": "1564a06b-692f-4f2e-8413-9c8a1cc2da77", 108 | "category": "Men's Sneaker", 109 | "name": "NMD_R1 V2 SHOES", 110 | "seller": "Addidas", 111 | "price": 260, 112 | "stock": 4, 113 | "ratings": 5, 114 | "ratingsCount": 1976, 115 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c2a18c4e3f104d52a697ad6a01477bb7_9366/NMD_R1_V2_Shoes_Black_GX6367_01_standard.jpg", 116 | "shipping": 46, 117 | "quantity": 0 118 | }, 119 | { 120 | "id": "ac44095f-230e-4502-8816-dea3eaae8320", 121 | "category": "Men's Sneaker", 122 | "name": "NMD_R1 PRIMEBLUE SHOES", 123 | "seller": "Addidas", 124 | "price": 437, 125 | "stock": 1, 126 | "ratings": 4, 127 | "ratingsCount": 565, 128 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/0e03e7a2a9cb44dfac2bad6a00f95888_9366/NMD_R1_Primeblue_Shoes_White_GZ9261_01_standard.jpg", 129 | "shipping": 36, 130 | "quantity": 0 131 | }, 132 | { 133 | "id": "d0803f97-966f-4296-ad31-a7f70fc86fab", 134 | "category": "Men's Pants", 135 | "name": "TIRO TRACK PANTS", 136 | "seller": "Addidas", 137 | "price": 146, 138 | "stock": 15, 139 | "ratings": 5, 140 | "ratingsCount": 3702, 141 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 142 | "shipping": 29, 143 | "quantity": 0 144 | }, 145 | { 146 | "id": "8a5b4a9c-76ea-4fbb-9c70-9548de4eab01", 147 | "category": "Men's Pants", 148 | "name": "TIRO 21 TRACK PANTS", 149 | "seller": "Addidas", 150 | "price": 109, 151 | "stock": 6, 152 | "ratings": 5, 153 | "ratingsCount": 1688, 154 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 155 | "shipping": 48, 156 | "quantity": 0 157 | }, 158 | { 159 | "id": "b357e19b-4dd9-4fc7-b5c0-9ed5255464ba", 160 | "category": "Men's Pants", 161 | "name": "PRIMEBLUE SST TRACK PANTS", 162 | "seller": "Addidas", 163 | "price": 63, 164 | "stock": 46, 165 | "ratings": 4, 166 | "ratingsCount": 50, 167 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/52b5fde5829a4a04820dacf50127b969_9366/Adicolor_Classics_Primeblue_SST_Track_Pants_Blue_H06714_21_model.jpg", 168 | "shipping": 20, 169 | "quantity": 0 170 | }, 171 | { 172 | "id": "e4220958-06d2-4d50-96fa-0163a563f43d", 173 | "category": "Men's Pants", 174 | "name": "TIRO 21 TRACK PANTS", 175 | "seller": "Addidas", 176 | "price": 148, 177 | "stock": 41, 178 | "ratings": 3, 179 | "ratingsCount": 4483, 180 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 181 | "shipping": 8, 182 | "quantity": 0 183 | }, 184 | { 185 | "id": "ae69f0e4-559c-4b24-8032-80b63f9b5073", 186 | "category": "Men's Pants", 187 | "name": "TIRO TRACK PANTS RED", 188 | "seller": "Addidas", 189 | "price": 122, 190 | "stock": 43, 191 | "ratings": 4, 192 | "ratingsCount": 1239, 193 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 194 | "shipping": 27, 195 | "quantity": 0 196 | }, 197 | { 198 | "id": "dbf7ab3f-b383-4d95-8ab7-f55fcf6fa5f2", 199 | "category": "Men's Pants", 200 | "name": "TIRO PANTS BLACK GOLD", 201 | "seller": "Addidas", 202 | "price": 115, 203 | "stock": 26, 204 | "ratings": 5, 205 | "ratingsCount": 4557, 206 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c447324cf06544b78105ade500fd9e2f_9366/Tiro_Pants_Black_HI1073_21_model.jpg", 207 | "shipping": 33, 208 | "quantity": 0 209 | }, 210 | { 211 | "id": "ed6a7ac3-7e67-4e3f-8461-bceb5178be42", 212 | "category": "Men's Pants", 213 | "name": "TAPERED-CUFF 3-STRIPES PANTS", 214 | "seller": "Addidas", 215 | "price": 108, 216 | "stock": 5, 217 | "ratings": 3, 218 | "ratingsCount": 3383, 219 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 220 | "shipping": 26, 221 | "quantity": 0 222 | }, 223 | { 224 | "id": "fd52819a-cb78-4510-ad2f-c5bdd888ae78", 225 | "category": "Men's Pants", 226 | "name": "FRENCH TERRY TAPERED CUFF LOGO PANTS", 227 | "seller": "Addidas", 228 | "price": 189, 229 | "stock": 27, 230 | "ratings": 3, 231 | "ratingsCount": 1974, 232 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/d47f8bc94b2c401b9eafad23007fd8c4_9366/Primegreen_Essentials_Warm-Up_Open_Hem_3-Stripes_Track_Pants_Black_H48430_21_model.jpg", 233 | "shipping": 20, 234 | "quantity": 0 235 | }, 236 | { 237 | "id": "c667d3ff-41eb-4cf7-a433-819d959ea768", 238 | "category": "Men's Pants", 239 | "name": "OPEN HEM 3-STRIPES TRACK PANTS", 240 | "seller": "Addidas", 241 | "price": 58, 242 | "stock": 41, 243 | "ratings": 5, 244 | "ratingsCount": 2140, 245 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/d47f8bc94b2c401b9eafad23007fd8c4_9366/Primegreen_Essentials_Warm-Up_Open_Hem_3-Stripes_Track_Pants_Black_H48430_21_model.jpg", 246 | "shipping": 49, 247 | "quantity": 0 248 | }, 249 | { 250 | "id": "e1dbc7fe-be17-4e0f-9e2d-6ad5dbc102fc", 251 | "category": "Men's Pants", 252 | "name": "ESSENTIALS4GAMEDAY PANTS", 253 | "seller": "Addidas", 254 | "price": 185, 255 | "stock": 43, 256 | "ratings": 5, 257 | "ratingsCount": 2676, 258 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/64f1ba254925439d88eaad920127d77e_9366/Essentials4Gameday_Pants_Black_HE1800_21_model.jpg", 259 | "shipping": 27, 260 | "quantity": 0 261 | }, 262 | { 263 | "id": "0298e695-1f9b-49b1-9961-8a8460f95b1c", 264 | "category": "Men's Boot", 265 | "name": "TERREX FREE HIKER GORE-TEX HIKING SHOES", 266 | "seller": "Addidas", 267 | "price": 132, 268 | "stock": 1, 269 | "ratings": 3, 270 | "ratingsCount": 128, 271 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/12cf12ac1c8e484ea487ad6400ee3444_9366/Terrex_Free_Hiker_Gore-Tex_Hiking_Shoes_Black_GZ0355_01_standard.jpg", 272 | "shipping": 13, 273 | "quantity": 0 274 | }, 275 | { 276 | "id": "3cfe9adc-c27f-4be4-a859-a5c98ce88a27", 277 | "category": "Men's Boot", 278 | "name": "TERREX AX4 MID GORE-TEX HIKING SHOES", 279 | "seller": "Addidas", 280 | "price": 111, 281 | "stock": 19, 282 | "ratings": 4, 283 | "ratingsCount": 894, 284 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/dfa8c9a7d2864065b27fad7400b2e05e_9366/Terrex_AX4_Mid_GORE-TEX_Hiking_shoes_Black_FY9638_01_standard.jpg", 285 | "shipping": 27, 286 | "quantity": 0 287 | }, 288 | { 289 | "id": "6602468a-a3a8-4c2c-9d3a-fd54e2c5daf7", 290 | "category": "Men's Boot", 291 | "name": "RESPONSE 3MC ADV BOOTS", 292 | "seller": "Addidas", 293 | "price": 104, 294 | "stock": 6, 295 | "ratings": 5, 296 | "ratingsCount": 354, 297 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/b513f2cec8b440978d60ab6d014ad452_9366/Response_3MC_ADV_Boots_Black_EG9391_01_standard.jpg", 298 | "shipping": 26, 299 | "quantity": 0 300 | }, 301 | { 302 | "id": "5db3ee2f-2eb7-4764-942d-894f72198e86", 303 | "category": "Men's Boot", 304 | "name": "TACTICAL LEXICON ADV BOOTS", 305 | "seller": "Addidas", 306 | "price": 151, 307 | "stock": 3, 308 | "ratings": 4, 309 | "ratingsCount": 584, 310 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/f5350f3d583c46038534ab6d01445e2a_9366/Tactical_Lexicon_ADV_Boots_Grey_EG9386_01_standard.jpg", 311 | "shipping": 33, 312 | "quantity": 0 313 | }, 314 | { 315 | "id": "9b169efb-0966-40f3-b9c2-79b16cb96388", 316 | "category": "Men's Boot", 317 | "name": "Superstar Boots", 318 | "seller": "Addidas", 319 | "price": 151, 320 | "stock": 13, 321 | "ratings": 3, 322 | "ratingsCount": 1010, 323 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/6853ac5565a9407bae19ac080120d9d7_9366/Superstar_Boots_Red_FZ2642_01_standard.jpg", 324 | "shipping": 4, 325 | "quantity": 0 326 | }, 327 | { 328 | "id": "fb1f9913-d903-498c-9e4a-16d363aa2eba", 329 | "category": "Men's Boot", 330 | "name": "TACTICAL LEXICON ADV BOOTS", 331 | "seller": "Addidas", 332 | "price": 199, 333 | "stock": 14, 334 | "ratings": 4, 335 | "ratingsCount": 2422, 336 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/3a819de9f29c498fae13ab6d01473c4d_9366/Tactical_Lexicon_ADV_Boots_White_EG9385_01_standard.jpg", 337 | "shipping": 39, 338 | "quantity": 0 339 | }, 340 | { 341 | "id": "fe48e340-4dc9-44b3-911b-9308b4f530b3", 342 | "category": "Men's Boot", 343 | "name": "TERREX TRAILMAKER MID COLD.RDY HIKING SHOES", 344 | "seller": "Addidas", 345 | "price": 110, 346 | "stock": 16, 347 | "ratings": 3, 348 | "ratingsCount": 1533, 349 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c2ee4c27eba64258bcbaad5100e5d998_9366/Terrex_Trailmaker_Mid_COLD.RDY_Hiking_Shoes_Brown_FZ3370_01_standard.jpg", 350 | "shipping": 33, 351 | "quantity": 0 352 | }, 353 | { 354 | "id": "2e06fa90-2961-4867-8322-6fdcca2f086a", 355 | "category": "Men's Boot", 356 | "name": "TERREX FREE HIKER GORE-TEX HIKING SHOES", 357 | "seller": "Addidas", 358 | "price": 155, 359 | "stock": 4, 360 | "ratings": 5, 361 | "ratingsCount": 1351, 362 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/efbedb26b92e4affa103ad6b008a789a_9366/Terrex_Free_Hiker_Gore-Tex_Hiking_Shoes_Grey_GZ0356_01_standard.jpg", 363 | "shipping": 38, 364 | "quantity": 0 365 | }, 366 | { 367 | "id": "008c06dd-04e4-4923-b840-927bd6b4c2de", 368 | "category": "Men's Boot", 369 | "name": "TERREX AGRAVIC TECH PRO TRAIL RUNNING SHOES", 370 | "seller": "Addidas", 371 | "price": 118, 372 | "stock": 8, 373 | "ratings": 3, 374 | "ratingsCount": 1798, 375 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/0a340319370844e99645abc90091df96_9366/Terrex_Agravic_Tech_Pro_Trail_Running_Shoes_Black_FU7634_01_standard.jpg", 376 | "shipping": 37, 377 | "quantity": 0 378 | }, 379 | { 380 | "id": "b4d83415-d20a-4bba-8629-22b2780b6e93", 381 | "category": "Men's Boot", 382 | "name": "TERREX FREE HIKER COLD.RDY HIKING BOOTS", 383 | "seller": "Addidas", 384 | "price": 169, 385 | "stock": 17, 386 | "ratings": 5, 387 | "ratingsCount": 2833, 388 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/2ded0bee28b249bbb19cad5000818b77_9366/Terrex_Free_Hiker_COLD.RDY_Hiking_Boots_Black_FZ3364_01_standard.jpg", 389 | "shipping": 10, 390 | "quantity": 0 391 | }, 392 | { 393 | "id": "1d54fd83-83df-42f8-ae2b-f5ef9d4987ea", 394 | "category": "Men's Sneaker", 395 | "name": "MOVE FEELREADY SPORT TEE", 396 | "seller": "Addidas", 397 | "price": 14, 398 | "stock": 19, 399 | "ratings": 3, 400 | "ratingsCount": 4041, 401 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/ec81fbd781fe4aa3a8cead230019c192_9366/AEROREADY_Designed_2_Move_Feelready_Sport_Tee_Burgundy_H30268_21_model.jpg", 402 | "shipping": 5, 403 | "quantity": 0 404 | }, 405 | { 406 | "id": "1ce97e0e-3611-4406-8788-7b413640f59e", 407 | "category": "Men's Sneaker", 408 | "name": "ADIDAS CAMO BOX GRAPHIC TEE", 409 | "seller": "Addidas", 410 | "price": 16, 411 | "stock": 10, 412 | "ratings": 3, 413 | "ratingsCount": 4505, 414 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/809d5f06a7c74e93aef3ad08017c415a_9366/adidas_Camo_Box_Graphic_Tee_Grey_HB4828_21_model.jpg", 415 | "shipping": 11, 416 | "quantity": 0 417 | }, 418 | { 419 | "id": "f088beb8-d664-4166-99f8-6995c2f08465", 420 | "category": "Men's Sneaker", 421 | "name": "ADICOLOR CLASSICS TREFOIL TEE", 422 | "seller": "Addidas", 423 | "price": 20, 424 | "stock": 12, 425 | "ratings": 4, 426 | "ratingsCount": 41, 427 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/de7b5dc9e5a341b9bf5aad570106ba06_9366/Adicolor_Classics_Trefoil_Tee_Burgundy_H06641_21_model.jpg", 428 | "shipping": 38, 429 | "quantity": 0 430 | }, 431 | { 432 | "id": "26dd7da8-c854-4bab-aaf5-32cc964da2ec", 433 | "category": "Men's Sneaker", 434 | "name": "LNY TREFOIL FILL TEE", 435 | "seller": "Addidas", 436 | "price": 16, 437 | "stock": 17, 438 | "ratings": 4, 439 | "ratingsCount": 4985, 440 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c53945c38b614702ba6fae1d0164b2f1_9366/LNY_Trefoil_Fill_Tee_Black_HR9040_21_model.jpg", 441 | "shipping": 35, 442 | "quantity": 0 443 | }, 444 | { 445 | "id": "a2615943-7eeb-4d6a-ab1b-78fb51ce39da", 446 | "category": "Men's Sneaker", 447 | "name": "CREATOR 365 TEE", 448 | "seller": "Addidas", 449 | "price": 34, 450 | "stock": 20, 451 | "ratings": 3, 452 | "ratingsCount": 4727, 453 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c53945c38b614702ba6fae1d0164b2f1_9366/LNY_Trefoil_Fill_Tee_Black_HR9040_21_model.jpg", 454 | "shipping": 2, 455 | "quantity": 0 456 | }, 457 | { 458 | "id": "27cf3efa-7352-4889-85c4-44a4de2aa93a", 459 | "category": "Men's Sneaker", 460 | "name": "OWN THE RUN LONG SLEEVE TEE", 461 | "seller": "Addidas", 462 | "price": 23, 463 | "stock": 17, 464 | "ratings": 3, 465 | "ratingsCount": 4003, 466 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c6a321b7bb7243d28fe9ac71011393c7_9366/Own_the_Run_Long_Sleeve_Tee_Black_GJ9977_21_model.jpg", 467 | "shipping": 2, 468 | "quantity": 0 469 | }, 470 | { 471 | "id": "6add9d60-1339-4115-b2ac-00d4886f4ad7", 472 | "category": "Men's Sneaker", 473 | "name": "NYC BADGE OF SPORT LOGO GRAPHIC TEE", 474 | "seller": "Addidas", 475 | "price": 29, 476 | "stock": 6, 477 | "ratings": 3, 478 | "ratingsCount": 805, 479 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/e0101e13ac1940208478add1000e953a_9366/NYC_Badge_of_Sport_Logo_Graphic_Tee_White_HE2363_21_model.jpg", 480 | "shipping": 6, 481 | "quantity": 0 482 | }, 483 | { 484 | "id": "1b6f1af1-2103-4838-932d-2b98dfdb6c1f", 485 | "category": "Men's Sneaker", 486 | "name": "RUNNER TEE", 487 | "seller": "Addidas", 488 | "price": 20, 489 | "stock": 7, 490 | "ratings": 5, 491 | "ratingsCount": 3343, 492 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/8c3f5445517340e8bc02ad8100ffd3f6_9366/Runner_Tee_Burgundy_H25050_21_model.jpg", 493 | "shipping": 48, 494 | "quantity": 0 495 | }, 496 | { 497 | "id": "c6cb80a7-3542-4270-bd2b-920efd5f3f85", 498 | "category": "Men's Sneaker", 499 | "name": "V-DAY TEE (GENDER NEUTRAL)", 500 | "seller": "Addidas", 501 | "price": 18, 502 | "stock": 2, 503 | "ratings": 4, 504 | "ratingsCount": 1590, 505 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c53945c38b614702ba6fae1d0164b2f1_9366/LNY_Trefoil_Fill_Tee_Black_HR9040_21_model.jpg", 506 | "shipping": 13, 507 | "quantity": 0 508 | }, 509 | { 510 | "id": "f54a4763-b8c2-4922-ba8d-80652a64f5bc", 511 | "category": "Men's Sneaker", 512 | "name": "ESSENTIALS COLORBLOCK TEE", 513 | "seller": "Addidas", 514 | "price": 35, 515 | "stock": 6, 516 | "ratings": 3, 517 | "ratingsCount": 2680, 518 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9889d39ac10243a2bb0fad1a0097ef07_9366/Essentials_Colorblock_Tee_Black_H14627_21_model.jpg", 519 | "shipping": 39, 520 | "quantity": 0 521 | }, 522 | { 523 | "id": "4a0090e7-b65d-4f6e-a42b-5603a3f51883", 524 | "category": "Bag", 525 | "name": "3-Stripes Backpack 2.0", 526 | "seller": "Addidas", 527 | "price": 74, 528 | "stock": 7, 529 | "ratings": 5, 530 | "ratingsCount": 365, 531 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/ba79ccb861fd4fd49e3aac9f006a6407_9366/3-Stripes_Backpack_2.0_Grey_EX6735_01_standard.jpg", 532 | "shipping": 23, 533 | "quantity": 0 534 | }, 535 | { 536 | "id": "0ac76ee7-53f1-45ba-b5ca-81ff6063bc1a", 537 | "category": "Bag", 538 | "name": "Trefoil Backpack", 539 | "seller": "Addidas", 540 | "price": 65, 541 | "stock": 3, 542 | "ratings": 4, 543 | "ratingsCount": 465, 544 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/a520df1b51384c00af9caca100489f04_9366/Trefoil_Backpack_Black_EX6752_01_standard.jpg", 545 | "shipping": 36, 546 | "quantity": 0 547 | }, 548 | { 549 | "id": "1770549a-571b-4baf-bc58-7bae7a228dcb", 550 | "category": "Bag", 551 | "name": "Santiago Lunch Bag", 552 | "seller": "Addidas", 553 | "price": 63, 554 | "stock": 10, 555 | "ratings": 3, 556 | "ratingsCount": 346, 557 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c2aaf5e8a7924f1d9277ac9f005b5f37_9366/Santiago_Lunch_Bag_Black_EX6532_01_standard.jpg", 558 | "shipping": 42, 559 | "quantity": 0 560 | }, 561 | { 562 | "id": "24b20ba6-9024-4b0a-b8a9-cf937521cede", 563 | "category": "Bag", 564 | "name": "Blue Version Backpack", 565 | "seller": "Addidas", 566 | "price": 87, 567 | "stock": 15, 568 | "ratings": 5, 569 | "ratingsCount": 234, 570 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/a9e0c5635057425daab5ad0b0089194b_9366/Blue_Version_Backpack_Black_H22735_01_standard.jpg", 571 | "shipping": 21, 572 | "quantity": 0 573 | }, 574 | { 575 | "id": "a7231186-0316-4cc0-94bf-4f496a382346", 576 | "category": "Bag", 577 | "name": "Defender Backpack", 578 | "seller": "Addidas", 579 | "price": 96, 580 | "stock": 10, 581 | "ratings": 4, 582 | "ratingsCount": 241, 583 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/d6ee0177281f42f0a254acb1016aa051_9366/Defender_Backpack_Red_EX7011_01_standard.jpg", 584 | "shipping": 15, 585 | "quantity": 0 586 | }, 587 | { 588 | "id": "35ac57f9-870a-4299-aac8-e5d8d2716b31", 589 | "category": "Bag", 590 | "name": "Excel Backpack", 591 | "seller": "Addidas", 592 | "price": 62, 593 | "stock": 18, 594 | "ratings": 5, 595 | "ratingsCount": 168, 596 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/ac09bb56249b43158485aca1007cc1ef_9366/Excel_Backpack_Black_EX6933_01_standard.jpg", 597 | "shipping": 14, 598 | "quantity": 0 599 | }, 600 | { 601 | "id": "c50bebaf-2633-4674-aba2-25be34bfdbba", 602 | "category": "Bag", 603 | "name": "Alliance Sackpack", 604 | "seller": "Addidas", 605 | "price": 99, 606 | "stock": 16, 607 | "ratings": 3, 608 | "ratingsCount": 311, 609 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/2e8a6f09838d49c3b00fad4f0017f753_9366/Alliance_Sackpack_White_FZ6823_01_standard.jpg", 610 | "shipping": 40, 611 | "quantity": 0 612 | }, 613 | { 614 | "id": "ff5bf372-7ed1-4904-aac5-7a2ce98e70ef", 615 | "category": "Bag", 616 | "name": "R.Y.V. Toploader Backpack", 617 | "seller": "Addidas", 618 | "price": 56, 619 | "stock": 19, 620 | "ratings": 3, 621 | "ratingsCount": 471, 622 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/1c87c940836e4628852bad130101e5c6_9366/R.Y.V._Toploader_Backpack_Black_H32458_01_standard.jpg", 623 | "shipping": 20, 624 | "quantity": 0 625 | }, 626 | { 627 | "id": "83ef9902-0224-48d3-ba7c-eeff3e678d13", 628 | "category": "Bag", 629 | "name": "Adicolor Archive Backpack", 630 | "seller": "Addidas", 631 | "price": 84, 632 | "stock": 5, 633 | "ratings": 4, 634 | "ratingsCount": 445, 635 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/0bb325f9cc174ea4bed7ad9e0101b682_9366/Adicolor_Archive_Backpack_Green_HE9804_01_standard.jpg", 636 | "shipping": 19, 637 | "quantity": 0 638 | }, 639 | { 640 | "id": "7490b4c8-8242-4de5-b161-b8ac96ea0e0b", 641 | "category": "Bag", 642 | "name": "R.Y.V. Backpack", 643 | "seller": "Addidas", 644 | "price": 67, 645 | "stock": 10, 646 | "ratings": 5, 647 | "ratingsCount": 83, 648 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/dc7dca21df62473ea518ade101251809_9366/R.Y.V._Backpack_Black_HD9650_01_standard.jpg", 649 | "shipping": 24, 650 | "quantity": 0 651 | }, 652 | { 653 | "id": "b1872b25-ba91-48ed-9468-1822df0637b9", 654 | "category": "Cap", 655 | "name": "Relaxed Strap-Back Hat", 656 | "seller": "Addidas", 657 | "price": 30, 658 | "stock": 6, 659 | "ratings": 4, 660 | "ratingsCount": 4, 661 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/4feb20f4d990407cb4f1a88a0040b212_9366/Relaxed_Strap-Back_Hat_Black_BH7137_01_standard.jpg", 662 | "shipping": 1, 663 | "quantity": 0 664 | }, 665 | { 666 | "id": "ea028038-4e9d-42bf-b033-88aa5e6cc477", 667 | "category": "Cap", 668 | "name": "Icon Snapback Hat", 669 | "seller": "Addidas", 670 | "price": 21, 671 | "stock": 13, 672 | "ratings": 4, 673 | "ratingsCount": 1, 674 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/1e27ae8bbfb647489261ac8e015d181f_9366/Icon_Snapback_Hat_Grey_EX6798_01_standard.jpg", 675 | "shipping": 26, 676 | "quantity": 0 677 | }, 678 | { 679 | "id": "d48e0fcb-904c-499e-93a0-312d77e6dbf9", 680 | "category": "Cap", 681 | "name": "Superlite Hat", 682 | "seller": "Addidas", 683 | "price": 11, 684 | "stock": 18, 685 | "ratings": 3, 686 | "ratingsCount": 39, 687 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/0ae141db6fce44999337ac8e015954ea_9366/Superlite_Hat_Grey_EX7054_01_standard.jpg", 688 | "shipping": 32, 689 | "quantity": 0 690 | }, 691 | { 692 | "id": "71dfc7f9-844b-4be7-816f-891a5cbaa0f1", 693 | "category": "Cap", 694 | "name": "Superlite Hat", 695 | "seller": "Addidas", 696 | "price": 10, 697 | "stock": 10, 698 | "ratings": 5, 699 | "ratingsCount": 47, 700 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/272d5d9cb7b74415a6c9ac8e015a4ccc_9366/Superlite_Hat_Black_EX7048_01_standard.jpg", 701 | "shipping": 24, 702 | "quantity": 0 703 | }, 704 | { 705 | "id": "a9d89eac-7418-4bca-a484-c8238c356270", 706 | "category": "Cap", 707 | "name": "Tee Time 5-Panel Hat", 708 | "seller": "Addidas", 709 | "price": 24, 710 | "stock": 1, 711 | "ratings": 4, 712 | "ratingsCount": 14, 713 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/df67ab60b5574c368b76adf9010f2d2d_9366/Tee_Time_5-Panel_Hat_Black_HA9254_01_standard.jpg", 714 | "shipping": 48, 715 | "quantity": 0 716 | }, 717 | { 718 | "id": "f6a5e6c0-5aec-4f10-84d7-bde9b6199045", 719 | "category": "Cap", 720 | "name": "Baseball Cap", 721 | "seller": "Addidas", 722 | "price": 17, 723 | "stock": 7, 724 | "ratings": 5, 725 | "ratingsCount": 37, 726 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/0ce5f49aa0914deabf16adc600d09e60_9366/Baseball_Cap_Black_HD7039_01_standard.jpg", 727 | "shipping": 48, 728 | "quantity": 0 729 | }, 730 | { 731 | "id": "625b4b60-611c-490c-ac0a-f3c2d2afd05c", 732 | "category": "Cap", 733 | "name": "Relaxed Strap-Back Hat", 734 | "seller": "Addidas", 735 | "price": 24, 736 | "stock": 9, 737 | "ratings": 5, 738 | "ratingsCount": 15, 739 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/aaa5ae549c624178bc25a740012dd61f_9366/Relaxed_Strap-Back_Hat_White_BH7135_01_standard.jpg", 740 | "shipping": 6, 741 | "quantity": 0 742 | }, 743 | { 744 | "id": "5960bf40-9603-4a39-9ff6-6cf9f1ce4815", 745 | "category": "Cap", 746 | "name": "UNISEX ORIGINALS WASHED BUCKET", 747 | "seller": "Addidas", 748 | "price": 27, 749 | "stock": 14, 750 | "ratings": 4, 751 | "ratingsCount": 3, 752 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/e1e758585df14bbbb7d8aaf000c95bd7_9366/UNISEX_ORIGINALS_WASHED_BUCKET_White_CM3933_01_standard.jpg", 753 | "shipping": 14, 754 | "quantity": 0 755 | }, 756 | { 757 | "id": "5991add1-f4ba-4fb9-9b6b-ec59aa2dda60", 758 | "category": "Cap", 759 | "name": "SST Plus Strap-Back Hat", 760 | "seller": "Addidas", 761 | "price": 23, 762 | "stock": 14, 763 | "ratings": 4, 764 | "ratingsCount": 32, 765 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/92e77a8d84d845d19171ad50003f2ea1_9366/SST_Plus_Strap-Back_Hat_White_FZ8569_01_standard.jpg", 766 | "shipping": 47, 767 | "quantity": 0 768 | }, 769 | { 770 | "id": "5690e579-a943-4b42-9ffe-dfc65b71c560", 771 | "category": "Cap", 772 | "name": "Dispatch Trucker Hat", 773 | "seller": "Addidas", 774 | "price": 28, 775 | "stock": 16, 776 | "ratings": 4, 777 | "ratingsCount": 30, 778 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c3981523051c4a978674ad3c01015664_9366/Dispatch_Trucker_Hat_Black_EY5534_01_standard.jpg", 779 | "shipping": 14, 780 | "quantity": 0 781 | }, 782 | { 783 | "id": "be7a4d0a-c681-416c-ab8d-f9be28223f4e", 784 | "category": "Earphones", 785 | "name": "adidas Z.N.E. 01 True Wireless Earbuds", 786 | "seller": "Addidas", 787 | "price": 142, 788 | "stock": 11, 789 | "ratings": 5, 790 | "ratingsCount": 22, 791 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/00276c6c380b41bcb29fadcc00f98312_9366/adidas_Z.N.E._01_True_Wireless_Earbuds_Grey_EY5116_42_detail.jpg", 792 | "shipping": 23, 793 | "quantity": 0 794 | }, 795 | { 796 | "id": "b278e667-ca17-465c-b603-af1af4319b7b", 797 | "category": "Earphones", 798 | "name": "adidas Z.N.E. 01 ANC True Wireless Earbuds", 799 | "seller": "Addidas", 800 | "price": 135, 801 | "stock": 16, 802 | "ratings": 5, 803 | "ratingsCount": 51, 804 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/b322cdef8e654551ace9adcc00f963ed_9366/adidas_Z.N.E._01_ANC_True_Wireless_Earbuds_Grey_EY5114_41_detail.jpg", 805 | "shipping": 30, 806 | "quantity": 0 807 | }, 808 | { 809 | "id": "1f56c0e5-4407-44bf-9225-90f592d2924a", 810 | "category": "Earphones", 811 | "name": "FWD-01 Sport In-Ear Headphones", 812 | "seller": "Addidas", 813 | "price": 185, 814 | "stock": 8, 815 | "ratings": 4, 816 | "ratingsCount": 66, 817 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/2cdb8652aa2340369ba2aa79010062d1_9366/FWD-01_Sport_In-Ear_Headphones_Black_CM5016_01_standard.jpg", 818 | "shipping": 15, 819 | "quantity": 0 820 | }, 821 | { 822 | "id": "4ead4708-68e8-4a93-b28e-5e99ccc4d75c", 823 | "category": "Earphones", 824 | "name": "adidas FWD-02 Sport True Wireless Earbuds", 825 | "seller": "Addidas", 826 | "price": 162, 827 | "stock": 14, 828 | "ratings": 4, 829 | "ratingsCount": 6, 830 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/523731a02e914d318cb4adcc00f985ba_9366/adidas_FWD-02_Sport_True_Wireless_Earbuds_Grey_EY5113_03_standard_hover.jpg", 831 | "shipping": 29, 832 | "quantity": 0 833 | }, 834 | { 835 | "id": "d1116075-10f2-49c4-985e-0d41e19ce1b3", 836 | "category": "Earphones", 837 | "name": "adidas Z.N.E. 01 ANC True Wireless Earbuds", 838 | "seller": "Addidas", 839 | "price": 110, 840 | "stock": 15, 841 | "ratings": 5, 842 | "ratingsCount": 9, 843 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/9e6e7967b3b24ef298f5adcc00f983ec_9366/adidas_Z.N.E._01_ANC_True_Wireless_Earbuds_Grey_EY5115_41_detail.jpg", 844 | "shipping": 48, 845 | "quantity": 0 846 | }, 847 | { 848 | "id": "d1116075-10f2-49c4-985e-fg41e19dc1b8", 849 | "category": "Earphones", 850 | "name": "RPT-01 Sport On-Ear Headphones", 851 | "seller": "Addidas", 852 | "price": 170, 853 | "stock": 15, 854 | "ratings": 5, 855 | "ratingsCount": 55, 856 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c697ceddb0c2469aaa2eaa7101121d10_9366/RPT-01_Sport_On-Ear_Headphones_Black_CM5015_01_standard.jpg", 857 | "shipping": 48, 858 | "quantity": 0 859 | }, 860 | { 861 | "id": "9e7cda87-8160-458f-bd32-ecf253a2d86a", 862 | "category": "Bottle", 863 | "name": "Steel Metal Bottle 1L", 864 | "seller": "Addidas", 865 | "price": 33, 866 | "stock": 7, 867 | "ratings": 4, 868 | "ratingsCount": 62, 869 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/a9c04ca9fa51408faf2fac8e0117abb9_9366/Steel_Metal_Bottle_1L_Black_EX7288_01_standard.jpg", 870 | "shipping": 15, 871 | "quantity": 0 872 | }, 873 | { 874 | "id": "eaff8921-f7eb-446f-b072-d96559685de0", 875 | "category": "Bottle", 876 | "name": "Steel Metal Bottle 1L", 877 | "seller": "Addidas", 878 | "price": 40, 879 | "stock": 14, 880 | "ratings": 5, 881 | "ratingsCount": 58, 882 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c45df020e3ae4e9199a4ac7d0001cfb7_9366/Steel_Metal_Bottle_1L_White_EX7301_01_standard.jpg", 883 | "shipping": 17, 884 | "quantity": 0 885 | }, 886 | { 887 | "id": "96fd22a5-f22f-4ad8-b7b5-f1cfd0852553", 888 | "category": "Bottle", 889 | "name": "Steel Metal Bottle 1 L", 890 | "seller": "Addidas", 891 | "price": 46, 892 | "stock": 2, 893 | "ratings": 5, 894 | "ratingsCount": 73, 895 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c670a94f6388451a868fad440014460d_9366/Steel_Metal_Bottle_1_L_Purple_EY5529_01_standard.jpg", 896 | "shipping": 45, 897 | "quantity": 0 898 | }, 899 | { 900 | "id": "e1a7c529-f91b-4ef5-a661-c2317c5c314e", 901 | "category": "Bottle", 902 | "name": "Steel Metal Bottle 1L", 903 | "seller": "Addidas", 904 | "price": 20, 905 | "stock": 14, 906 | "ratings": 5, 907 | "ratingsCount": 63, 908 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/29ef510920b54492a721aa1c01782cb2_9366/Steel_Metal_Bottle_1L_White_CL6092_01_standard.jpg", 909 | "shipping": 21, 910 | "quantity": 0 911 | }, 912 | { 913 | "id": "e912ad01-2551-48dc-a709-4054cbfbcbbc", 914 | "category": "Bottle", 915 | "name": "Steel Metal Bottle 600 ML", 916 | "seller": "Addidas", 917 | "price": 43, 918 | "stock": 19, 919 | "ratings": 4, 920 | "ratingsCount": 64, 921 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/1105dc0c9232477eb80dac7d000edc0c_9366/Steel_Metal_Bottle_600_ML_White_EX7306_01_standard.jpg", 922 | "shipping": 43, 923 | "quantity": 0 924 | }, 925 | { 926 | "id": "afc5d640-9943-437a-b644-ba1f6f12baa9", 927 | "category": "Bottle", 928 | "name": "Steel Straw Metal Bottle 600 ML", 929 | "seller": "Addidas", 930 | "price": 43, 931 | "stock": 10, 932 | "ratings": 3, 933 | "ratingsCount": 15, 934 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/f7fb63986ed34112bc57ac7d002c9f43_9366/Steel_Straw_Metal_Bottle_600_ML_White_EX7316_01_standard.jpg", 935 | "shipping": 46, 936 | "quantity": 0 937 | }, 938 | { 939 | "id": "5b5c43d9-950d-4b9a-b7d9-ca489224a7b2", 940 | "category": "Bottle", 941 | "name": "Steel Metal Bottle 600 ML", 942 | "seller": "Addidas", 943 | "price": 26, 944 | "stock": 20, 945 | "ratings": 5, 946 | "ratingsCount": 83, 947 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/e2d870a680644e4d98e9ac7d0008ecc7_9366/Steel_Metal_Bottle_600_ML_Yellow_EX7307_01_standard.jpg", 948 | "shipping": 6, 949 | "quantity": 0 950 | }, 951 | { 952 | "id": "96239c09-8b1c-4c81-99f9-f43e7613eab3", 953 | "category": "Bottle", 954 | "name": "Squad Glass Bottle 720 ML", 955 | "seller": "Addidas", 956 | "price": 39, 957 | "stock": 20, 958 | "ratings": 3, 959 | "ratingsCount": 1, 960 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/77ad16764abf4e828560ad44001cd640_9366/Squad_Glass_Bottle_720_ML_Black_FZ7115_01_standard.jpg", 961 | "shipping": 5, 962 | "quantity": 0 963 | }, 964 | { 965 | "id": "30698483-f7aa-49ba-9de9-9070f64dc263", 966 | "category": "Bottle", 967 | "name": "Steel Bottle 600 ML", 968 | "seller": "Addidas", 969 | "price": 23, 970 | "stock": 11, 971 | "ratings": 5, 972 | "ratingsCount": 35, 973 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/48057b65216644f683a9aa1c0172ae6e_9366/Steel_Bottle_600_ML_Black_CL6093_01_standard.jpg", 974 | "shipping": 5, 975 | "quantity": 0 976 | }, 977 | { 978 | "id": "02871edc-272b-4e20-bcc2-b32681213b3c", 979 | "category": "Bottle", 980 | "name": "Steel Metal Bottle 2L", 981 | "seller": "Addidas", 982 | "price": 37, 983 | "stock": 14, 984 | "ratings": 4, 985 | "ratingsCount": 68, 986 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/f8d89293c9cb4bf08d52adb100f95a3a_9366/Steel_Metal_Bottle_2L_Black_EX7302_01_standard.jpg", 987 | "shipping": 27, 988 | "quantity": 0 989 | } 990 | ] 991 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | #root { 2 | min-width: 100%; 3 | } 4 | 5 | .logo { 6 | height: 6em; 7 | padding: 1.5em; 8 | will-change: filter; 9 | transition: filter 300ms; 10 | } 11 | .logo:hover { 12 | filter: drop-shadow(0 0 2em #646cffaa); 13 | } 14 | .logo.react:hover { 15 | filter: drop-shadow(0 0 2em #61dafbaa); 16 | } 17 | 18 | @keyframes logo-spin { 19 | from { 20 | transform: rotate(0deg); 21 | } 22 | to { 23 | transform: rotate(360deg); 24 | } 25 | } 26 | 27 | @media (prefers-reduced-motion: no-preference) { 28 | a:nth-of-type(2) .logo { 29 | animation: logo-spin infinite 20s linear; 30 | } 31 | } 32 | 33 | .card { 34 | padding: 2em; 35 | } 36 | 37 | .read-the-docs { 38 | color: #888; 39 | } 40 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import './App.css' 3 | import Header from './components/Header/Header' 4 | import Shop from './components/Shop/Shop' 5 | 6 | function App() { 7 | const [count, setCount] = useState(0) 8 | 9 | return ( 10 |
11 |
12 | 13 |
14 | ) 15 | } 16 | 17 | export default App 18 | -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/Header/Header.css: -------------------------------------------------------------------------------- 1 | .header { 2 | height: 80px; 3 | background-color: #1C2B35;; 4 | display: flex; 5 | justify-content: space-between; 6 | align-items: center; 7 | padding-left: 100px; 8 | padding-right: 100px; 9 | } 10 | 11 | nav.header a{ 12 | text-decoration: none; 13 | color: #FFFFFF; 14 | margin-left: 30px; 15 | } 16 | nav.header a:hover{ 17 | color: orange; 18 | } -------------------------------------------------------------------------------- /src/components/Header/Header.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Header.css'; 3 | import logo from '../../images/Logo.svg'; 4 | 5 | const Header = () => { 6 | return ( 7 | 16 | ); 17 | }; 18 | 19 | export default Header; -------------------------------------------------------------------------------- /src/components/Product/Product.css: -------------------------------------------------------------------------------- 1 | .product { 2 | width: 300px; 3 | height: 510px; 4 | border: 1px solid #95A0A7; 5 | border-radius: 8px; 6 | position: relative; 7 | } 8 | 9 | .product img { 10 | width: 286px; 11 | height: 286px; 12 | margin: 7px; 13 | border-radius: 8px; 14 | } 15 | 16 | .product-name { 17 | margin-top: 0px; 18 | margin-bottom: 0px; 19 | font-family: 'Lato'; 20 | font-style: normal; 21 | font-weight: 400; 22 | font-size: 21px; 23 | line-height: 25px; 24 | letter-spacing: 0.0015em; 25 | color: #0E161A; 26 | } 27 | .product-info{ 28 | margin-left: 14px; 29 | } 30 | .product-info p{ 31 | margin-top: 5px; 32 | } 33 | .btn-cart{ 34 | width: 100%; 35 | background: #FFE0B3; 36 | border: 1px solid #95A0A7; 37 | border-radius: 0px 0px 8px 8px; 38 | position: absolute; 39 | bottom: 0; 40 | } 41 | .btn-cart:hover{ 42 | background-color: orange; 43 | } -------------------------------------------------------------------------------- /src/components/Product/Product.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' 3 | import { faShoppingCart } from '@fortawesome/free-solid-svg-icons' 4 | import './Product.css'; 5 | 6 | const Product = (props) => { 7 | 8 | const { img, name, seller, ratings, price } = props.product; 9 | const handleAddToCart = props.handleAddToCart; 10 | 11 | 12 | return ( 13 |
14 | 15 |
16 |
{name}
17 |

Price: ${price}

18 |

Manufacturer: {seller}

19 |

Rating: {ratings} Stars

20 |
21 | 25 |
26 | ); 27 | }; 28 | 29 | export default Product; -------------------------------------------------------------------------------- /src/components/Shop/Shop.css: -------------------------------------------------------------------------------- 1 | .shop-container{ 2 | display: grid; 3 | grid-template-columns: 4fr 1fr; 4 | } 5 | .products-container{ 6 | margin: 50px; 7 | display: grid; 8 | grid-template-columns: repeat(3, 1fr); 9 | gap: 45px; 10 | } -------------------------------------------------------------------------------- /src/components/Shop/Shop.jsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | import Product from '../Product/Product'; 3 | import './Shop.css'; 4 | 5 | const Shop = () => { 6 | const [products, setProducts] = useState([]); 7 | const [cart, setCart] = useState([]) 8 | 9 | useEffect(() => { 10 | fetch('products.json') 11 | .then(res => res.json()) 12 | .then(data => setProducts(data)) 13 | }, []); 14 | 15 | const handleAddToCart = (product) => { 16 | // cart.push(product); 17 | const newCart = [...cart, product]; 18 | setCart(newCart); 19 | } 20 | 21 | return ( 22 |
23 |
24 | { 25 | products.map(product => ) 30 | } 31 |
32 |
33 |

Order Summary

34 |

Selected Items: {cart.length}

35 |
36 |
37 | ); 38 | }; 39 | 40 | export default Shop; -------------------------------------------------------------------------------- /src/fakeData/products.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "124e13b9-2d54-4b2f-a74d-a77b362d6ead", 4 | "category": "Men's Sneaker", 5 | "name": "ULTRABOOST 22 SHOES", 6 | "seller": "Addidas", 7 | "price": 420, 8 | "stock": 20, 9 | "ratings": 4, 10 | "ratingsCount": 3725, 11 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/fbaf991a78bc4896a3e9ad7800abcec6_9366/Ultraboost_22_Shoes_Black_GZ0127_01_standard.jpg", 12 | "shipping": 1, 13 | "quantity": 0 14 | }, 15 | { 16 | "id": "13cbc7ed-a61b-4883-9d42-82d7d8642b86", 17 | "category": "Men's Sneaker", 18 | "name": "LUNAR NEW YEAR ULTRABOOST DNA SHOES", 19 | "seller": "Addidas", 20 | "price": 196, 21 | "stock": 19, 22 | "ratings": 5, 23 | "ratingsCount": 4355, 24 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/2cee64414e1f4f31baf1ae270099d950_9366/Lunar_New_Year_Ultraboost_DNA_Shoes_Black_GZ6074_01_standard.jpg", 25 | "shipping": 14, 26 | "quantity": 0 27 | }, 28 | { 29 | "id": "307f166f-1d04-4573-bc37-2f461ea9d4f7", 30 | "category": "Men's Sneaker", 31 | "name": "SUPERNOVA SHOES", 32 | "seller": "Addidas", 33 | "price": 245, 34 | "stock": 20, 35 | "ratings": 4, 36 | "ratingsCount": 3972, 37 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/69cbc73d0cb846889f89acbb011e68cb_9366/Supernova_Shoes_Black_S42722_01_standard.jpg", 38 | "shipping": 1, 39 | "quantity": 0 40 | }, 41 | { 42 | "id": "4bf9798f-63bc-4a83-b0c6-6a3b816fe922", 43 | "category": "Men's Sneaker", 44 | "name": "LITE RACER ADAPT 3.0 SHOES", 45 | "seller": "Addidas", 46 | "price": 229, 47 | "stock": 10, 48 | "ratings": 5, 49 | "ratingsCount": 1764, 50 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/96a5f085fedf4e678095abad01056711_9366/Lite_Racer_Adapt_3.0_Shoes_Black_FX8802_01_standard.jpg", 51 | "shipping": 32, 52 | "quantity": 0 53 | }, 54 | { 55 | "id": "9496d72b-04ec-41f8-9bc3-0a7c9697be8e", 56 | "category": "Men's Sneaker", 57 | "name": "4DFWD SHOES", 58 | "seller": "Addidas", 59 | "price": 287, 60 | "stock": 11, 61 | "ratings": 4, 62 | "ratingsCount": 799, 63 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/8c5d1994dfd343e28567ad4400dd351d_9366/4DFWD_Shoes_Black_Q46447_01_standard.jpg", 64 | "shipping": 49, 65 | "quantity": 0 66 | }, 67 | { 68 | "id": "6e5593d3-557b-43cf-8dab-a5140faedfb0", 69 | "category": "Men's Sneaker", 70 | "name": "KAPTIR 2.0 SHOES", 71 | "seller": "Addidas", 72 | "price": 138, 73 | "stock": 19, 74 | "ratings": 3, 75 | "ratingsCount": 4372, 76 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/0846e90b15144861b33dacf500e3cfd1_9366/Kaptir_2.0_Shoes_White_H00276_01_standard.jpg", 77 | "shipping": 19, 78 | "quantity": 0 79 | }, 80 | { 81 | "id": "9c0c13c2-54e4-4001-809b-afbd9d84037d", 82 | "category": "Men's Sneaker", 83 | "name": "4DFWD PULSE SHOES", 84 | "seller": "Addidas", 85 | "price": 226, 86 | "stock": 1, 87 | "ratings": 4, 88 | "ratingsCount": 2870, 89 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9a8256bb7ca34da49ff8ad5600bb2812_9366/4DFWD_Pulse_Shoes_White_Q46221_01_standard.jpg", 90 | "shipping": 15, 91 | "quantity": 0 92 | }, 93 | { 94 | "id": "c9d1f410-d28f-49d9-9b01-d759b5acbeea", 95 | "category": "Men's Sneaker", 96 | "name": "ZX 1K BOOST SHOES", 97 | "seller": "Addidas", 98 | "price": 319, 99 | "stock": 7, 100 | "ratings": 4, 101 | "ratingsCount": 1360, 102 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/0e540bae86d5456aa034ada300ebf46c_9366/ZX_1K_Boost_Shoes_Grey_H00430_01_standard.jpg", 103 | "shipping": 50, 104 | "quantity": 0 105 | }, 106 | { 107 | "id": "1564a06b-692f-4f2e-8413-9c8a1cc2da77", 108 | "category": "Men's Sneaker", 109 | "name": "NMD_R1 V2 SHOES", 110 | "seller": "Addidas", 111 | "price": 260, 112 | "stock": 4, 113 | "ratings": 5, 114 | "ratingsCount": 1976, 115 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c2a18c4e3f104d52a697ad6a01477bb7_9366/NMD_R1_V2_Shoes_Black_GX6367_01_standard.jpg", 116 | "shipping": 46, 117 | "quantity": 0 118 | }, 119 | { 120 | "id": "ac44095f-230e-4502-8816-dea3eaae8320", 121 | "category": "Men's Sneaker", 122 | "name": "NMD_R1 PRIMEBLUE SHOES", 123 | "seller": "Addidas", 124 | "price": 437, 125 | "stock": 1, 126 | "ratings": 4, 127 | "ratingsCount": 565, 128 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/0e03e7a2a9cb44dfac2bad6a00f95888_9366/NMD_R1_Primeblue_Shoes_White_GZ9261_01_standard.jpg", 129 | "shipping": 36, 130 | "quantity": 0 131 | }, 132 | { 133 | "id": "d0803f97-966f-4296-ad31-a7f70fc86fab", 134 | "category": "Men's Pants", 135 | "name": "TIRO TRACK PANTS", 136 | "seller": "Addidas", 137 | "price": 146, 138 | "stock": 15, 139 | "ratings": 5, 140 | "ratingsCount": 3702, 141 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 142 | "shipping": 29, 143 | "quantity": 0 144 | }, 145 | { 146 | "id": "8a5b4a9c-76ea-4fbb-9c70-9548de4eab01", 147 | "category": "Men's Pants", 148 | "name": "TIRO 21 TRACK PANTS", 149 | "seller": "Addidas", 150 | "price": 109, 151 | "stock": 6, 152 | "ratings": 5, 153 | "ratingsCount": 1688, 154 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 155 | "shipping": 48, 156 | "quantity": 0 157 | }, 158 | { 159 | "id": "b357e19b-4dd9-4fc7-b5c0-9ed5255464ba", 160 | "category": "Men's Pants", 161 | "name": "PRIMEBLUE SST TRACK PANTS", 162 | "seller": "Addidas", 163 | "price": 63, 164 | "stock": 46, 165 | "ratings": 4, 166 | "ratingsCount": 50, 167 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/52b5fde5829a4a04820dacf50127b969_9366/Adicolor_Classics_Primeblue_SST_Track_Pants_Blue_H06714_21_model.jpg", 168 | "shipping": 20, 169 | "quantity": 0 170 | }, 171 | { 172 | "id": "e4220958-06d2-4d50-96fa-0163a563f43d", 173 | "category": "Men's Pants", 174 | "name": "TIRO 21 TRACK PANTS", 175 | "seller": "Addidas", 176 | "price": 148, 177 | "stock": 41, 178 | "ratings": 3, 179 | "ratingsCount": 4483, 180 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 181 | "shipping": 8, 182 | "quantity": 0 183 | }, 184 | { 185 | "id": "ae69f0e4-559c-4b24-8032-80b63f9b5073", 186 | "category": "Men's Pants", 187 | "name": "TIRO TRACK PANTS RED", 188 | "seller": "Addidas", 189 | "price": 122, 190 | "stock": 43, 191 | "ratings": 4, 192 | "ratingsCount": 1239, 193 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 194 | "shipping": 27, 195 | "quantity": 0 196 | }, 197 | { 198 | "id": "dbf7ab3f-b383-4d95-8ab7-f55fcf6fa5f2", 199 | "category": "Men's Pants", 200 | "name": "TIRO PANTS BLACK GOLD", 201 | "seller": "Addidas", 202 | "price": 115, 203 | "stock": 26, 204 | "ratings": 5, 205 | "ratingsCount": 4557, 206 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c447324cf06544b78105ade500fd9e2f_9366/Tiro_Pants_Black_HI1073_21_model.jpg", 207 | "shipping": 33, 208 | "quantity": 0 209 | }, 210 | { 211 | "id": "ed6a7ac3-7e67-4e3f-8461-bceb5178be42", 212 | "category": "Men's Pants", 213 | "name": "TAPERED-CUFF 3-STRIPES PANTS", 214 | "seller": "Addidas", 215 | "price": 108, 216 | "stock": 5, 217 | "ratings": 3, 218 | "ratingsCount": 3383, 219 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9c7058d8677742ac8519ac3f009cdcf4_9366/Tiro_21_Track_Pants_Black_GH7305_21_model.jpg", 220 | "shipping": 26, 221 | "quantity": 0 222 | }, 223 | { 224 | "id": "fd52819a-cb78-4510-ad2f-c5bdd888ae78", 225 | "category": "Men's Pants", 226 | "name": "FRENCH TERRY TAPERED CUFF LOGO PANTS", 227 | "seller": "Addidas", 228 | "price": 189, 229 | "stock": 27, 230 | "ratings": 3, 231 | "ratingsCount": 1974, 232 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/d47f8bc94b2c401b9eafad23007fd8c4_9366/Primegreen_Essentials_Warm-Up_Open_Hem_3-Stripes_Track_Pants_Black_H48430_21_model.jpg", 233 | "shipping": 20, 234 | "quantity": 0 235 | }, 236 | { 237 | "id": "c667d3ff-41eb-4cf7-a433-819d959ea768", 238 | "category": "Men's Pants", 239 | "name": "OPEN HEM 3-STRIPES TRACK PANTS", 240 | "seller": "Addidas", 241 | "price": 58, 242 | "stock": 41, 243 | "ratings": 5, 244 | "ratingsCount": 2140, 245 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/d47f8bc94b2c401b9eafad23007fd8c4_9366/Primegreen_Essentials_Warm-Up_Open_Hem_3-Stripes_Track_Pants_Black_H48430_21_model.jpg", 246 | "shipping": 49, 247 | "quantity": 0 248 | }, 249 | { 250 | "id": "e1dbc7fe-be17-4e0f-9e2d-6ad5dbc102fc", 251 | "category": "Men's Pants", 252 | "name": "ESSENTIALS4GAMEDAY PANTS", 253 | "seller": "Addidas", 254 | "price": 185, 255 | "stock": 43, 256 | "ratings": 5, 257 | "ratingsCount": 2676, 258 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/64f1ba254925439d88eaad920127d77e_9366/Essentials4Gameday_Pants_Black_HE1800_21_model.jpg", 259 | "shipping": 27, 260 | "quantity": 0 261 | }, 262 | { 263 | "id": "0298e695-1f9b-49b1-9961-8a8460f95b1c", 264 | "category": "Men's Boot", 265 | "name": "TERREX FREE HIKER GORE-TEX HIKING SHOES", 266 | "seller": "Addidas", 267 | "price": 132, 268 | "stock": 1, 269 | "ratings": 3, 270 | "ratingsCount": 128, 271 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/12cf12ac1c8e484ea487ad6400ee3444_9366/Terrex_Free_Hiker_Gore-Tex_Hiking_Shoes_Black_GZ0355_01_standard.jpg", 272 | "shipping": 13, 273 | "quantity": 0 274 | }, 275 | { 276 | "id": "3cfe9adc-c27f-4be4-a859-a5c98ce88a27", 277 | "category": "Men's Boot", 278 | "name": "TERREX AX4 MID GORE-TEX HIKING SHOES", 279 | "seller": "Addidas", 280 | "price": 111, 281 | "stock": 19, 282 | "ratings": 4, 283 | "ratingsCount": 894, 284 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/dfa8c9a7d2864065b27fad7400b2e05e_9366/Terrex_AX4_Mid_GORE-TEX_Hiking_shoes_Black_FY9638_01_standard.jpg", 285 | "shipping": 27, 286 | "quantity": 0 287 | }, 288 | { 289 | "id": "6602468a-a3a8-4c2c-9d3a-fd54e2c5daf7", 290 | "category": "Men's Boot", 291 | "name": "RESPONSE 3MC ADV BOOTS", 292 | "seller": "Addidas", 293 | "price": 104, 294 | "stock": 6, 295 | "ratings": 5, 296 | "ratingsCount": 354, 297 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/b513f2cec8b440978d60ab6d014ad452_9366/Response_3MC_ADV_Boots_Black_EG9391_01_standard.jpg", 298 | "shipping": 26, 299 | "quantity": 0 300 | }, 301 | { 302 | "id": "5db3ee2f-2eb7-4764-942d-894f72198e86", 303 | "category": "Men's Boot", 304 | "name": "TACTICAL LEXICON ADV BOOTS", 305 | "seller": "Addidas", 306 | "price": 151, 307 | "stock": 3, 308 | "ratings": 4, 309 | "ratingsCount": 584, 310 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/f5350f3d583c46038534ab6d01445e2a_9366/Tactical_Lexicon_ADV_Boots_Grey_EG9386_01_standard.jpg", 311 | "shipping": 33, 312 | "quantity": 0 313 | }, 314 | { 315 | "id": "9b169efb-0966-40f3-b9c2-79b16cb96388", 316 | "category": "Men's Boot", 317 | "name": "Superstar Boots", 318 | "seller": "Addidas", 319 | "price": 151, 320 | "stock": 13, 321 | "ratings": 3, 322 | "ratingsCount": 1010, 323 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/6853ac5565a9407bae19ac080120d9d7_9366/Superstar_Boots_Red_FZ2642_01_standard.jpg", 324 | "shipping": 4, 325 | "quantity": 0 326 | }, 327 | { 328 | "id": "fb1f9913-d903-498c-9e4a-16d363aa2eba", 329 | "category": "Men's Boot", 330 | "name": "TACTICAL LEXICON ADV BOOTS", 331 | "seller": "Addidas", 332 | "price": 199, 333 | "stock": 14, 334 | "ratings": 4, 335 | "ratingsCount": 2422, 336 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/3a819de9f29c498fae13ab6d01473c4d_9366/Tactical_Lexicon_ADV_Boots_White_EG9385_01_standard.jpg", 337 | "shipping": 39, 338 | "quantity": 0 339 | }, 340 | { 341 | "id": "fe48e340-4dc9-44b3-911b-9308b4f530b3", 342 | "category": "Men's Boot", 343 | "name": "TERREX TRAILMAKER MID COLD.RDY HIKING SHOES", 344 | "seller": "Addidas", 345 | "price": 110, 346 | "stock": 16, 347 | "ratings": 3, 348 | "ratingsCount": 1533, 349 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c2ee4c27eba64258bcbaad5100e5d998_9366/Terrex_Trailmaker_Mid_COLD.RDY_Hiking_Shoes_Brown_FZ3370_01_standard.jpg", 350 | "shipping": 33, 351 | "quantity": 0 352 | }, 353 | { 354 | "id": "2e06fa90-2961-4867-8322-6fdcca2f086a", 355 | "category": "Men's Boot", 356 | "name": "TERREX FREE HIKER GORE-TEX HIKING SHOES", 357 | "seller": "Addidas", 358 | "price": 155, 359 | "stock": 4, 360 | "ratings": 5, 361 | "ratingsCount": 1351, 362 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/efbedb26b92e4affa103ad6b008a789a_9366/Terrex_Free_Hiker_Gore-Tex_Hiking_Shoes_Grey_GZ0356_01_standard.jpg", 363 | "shipping": 38, 364 | "quantity": 0 365 | }, 366 | { 367 | "id": "008c06dd-04e4-4923-b840-927bd6b4c2de", 368 | "category": "Men's Boot", 369 | "name": "TERREX AGRAVIC TECH PRO TRAIL RUNNING SHOES", 370 | "seller": "Addidas", 371 | "price": 118, 372 | "stock": 8, 373 | "ratings": 3, 374 | "ratingsCount": 1798, 375 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/0a340319370844e99645abc90091df96_9366/Terrex_Agravic_Tech_Pro_Trail_Running_Shoes_Black_FU7634_01_standard.jpg", 376 | "shipping": 37, 377 | "quantity": 0 378 | }, 379 | { 380 | "id": "b4d83415-d20a-4bba-8629-22b2780b6e93", 381 | "category": "Men's Boot", 382 | "name": "TERREX FREE HIKER COLD.RDY HIKING BOOTS", 383 | "seller": "Addidas", 384 | "price": 169, 385 | "stock": 17, 386 | "ratings": 5, 387 | "ratingsCount": 2833, 388 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/2ded0bee28b249bbb19cad5000818b77_9366/Terrex_Free_Hiker_COLD.RDY_Hiking_Boots_Black_FZ3364_01_standard.jpg", 389 | "shipping": 10, 390 | "quantity": 0 391 | }, 392 | { 393 | "id": "1d54fd83-83df-42f8-ae2b-f5ef9d4987ea", 394 | "category": "Men's Sneaker", 395 | "name": "MOVE FEELREADY SPORT TEE", 396 | "seller": "Addidas", 397 | "price": 14, 398 | "stock": 19, 399 | "ratings": 3, 400 | "ratingsCount": 4041, 401 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/ec81fbd781fe4aa3a8cead230019c192_9366/AEROREADY_Designed_2_Move_Feelready_Sport_Tee_Burgundy_H30268_21_model.jpg", 402 | "shipping": 5, 403 | "quantity": 0 404 | }, 405 | { 406 | "id": "1ce97e0e-3611-4406-8788-7b413640f59e", 407 | "category": "Men's Sneaker", 408 | "name": "ADIDAS CAMO BOX GRAPHIC TEE", 409 | "seller": "Addidas", 410 | "price": 16, 411 | "stock": 10, 412 | "ratings": 3, 413 | "ratingsCount": 4505, 414 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/809d5f06a7c74e93aef3ad08017c415a_9366/adidas_Camo_Box_Graphic_Tee_Grey_HB4828_21_model.jpg", 415 | "shipping": 11, 416 | "quantity": 0 417 | }, 418 | { 419 | "id": "f088beb8-d664-4166-99f8-6995c2f08465", 420 | "category": "Men's Sneaker", 421 | "name": "ADICOLOR CLASSICS TREFOIL TEE", 422 | "seller": "Addidas", 423 | "price": 20, 424 | "stock": 12, 425 | "ratings": 4, 426 | "ratingsCount": 41, 427 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/de7b5dc9e5a341b9bf5aad570106ba06_9366/Adicolor_Classics_Trefoil_Tee_Burgundy_H06641_21_model.jpg", 428 | "shipping": 38, 429 | "quantity": 0 430 | }, 431 | { 432 | "id": "26dd7da8-c854-4bab-aaf5-32cc964da2ec", 433 | "category": "Men's Sneaker", 434 | "name": "LNY TREFOIL FILL TEE", 435 | "seller": "Addidas", 436 | "price": 16, 437 | "stock": 17, 438 | "ratings": 4, 439 | "ratingsCount": 4985, 440 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c53945c38b614702ba6fae1d0164b2f1_9366/LNY_Trefoil_Fill_Tee_Black_HR9040_21_model.jpg", 441 | "shipping": 35, 442 | "quantity": 0 443 | }, 444 | { 445 | "id": "a2615943-7eeb-4d6a-ab1b-78fb51ce39da", 446 | "category": "Men's Sneaker", 447 | "name": "CREATOR 365 TEE", 448 | "seller": "Addidas", 449 | "price": 34, 450 | "stock": 20, 451 | "ratings": 3, 452 | "ratingsCount": 4727, 453 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c53945c38b614702ba6fae1d0164b2f1_9366/LNY_Trefoil_Fill_Tee_Black_HR9040_21_model.jpg", 454 | "shipping": 2, 455 | "quantity": 0 456 | }, 457 | { 458 | "id": "27cf3efa-7352-4889-85c4-44a4de2aa93a", 459 | "category": "Men's Sneaker", 460 | "name": "OWN THE RUN LONG SLEEVE TEE", 461 | "seller": "Addidas", 462 | "price": 23, 463 | "stock": 17, 464 | "ratings": 3, 465 | "ratingsCount": 4003, 466 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c6a321b7bb7243d28fe9ac71011393c7_9366/Own_the_Run_Long_Sleeve_Tee_Black_GJ9977_21_model.jpg", 467 | "shipping": 2, 468 | "quantity": 0 469 | }, 470 | { 471 | "id": "6add9d60-1339-4115-b2ac-00d4886f4ad7", 472 | "category": "Men's Sneaker", 473 | "name": "NYC BADGE OF SPORT LOGO GRAPHIC TEE", 474 | "seller": "Addidas", 475 | "price": 29, 476 | "stock": 6, 477 | "ratings": 3, 478 | "ratingsCount": 805, 479 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/e0101e13ac1940208478add1000e953a_9366/NYC_Badge_of_Sport_Logo_Graphic_Tee_White_HE2363_21_model.jpg", 480 | "shipping": 6, 481 | "quantity": 0 482 | }, 483 | { 484 | "id": "1b6f1af1-2103-4838-932d-2b98dfdb6c1f", 485 | "category": "Men's Sneaker", 486 | "name": "RUNNER TEE", 487 | "seller": "Addidas", 488 | "price": 20, 489 | "stock": 7, 490 | "ratings": 5, 491 | "ratingsCount": 3343, 492 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/8c3f5445517340e8bc02ad8100ffd3f6_9366/Runner_Tee_Burgundy_H25050_21_model.jpg", 493 | "shipping": 48, 494 | "quantity": 0 495 | }, 496 | { 497 | "id": "c6cb80a7-3542-4270-bd2b-920efd5f3f85", 498 | "category": "Men's Sneaker", 499 | "name": "V-DAY TEE (GENDER NEUTRAL)", 500 | "seller": "Addidas", 501 | "price": 18, 502 | "stock": 2, 503 | "ratings": 4, 504 | "ratingsCount": 1590, 505 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/c53945c38b614702ba6fae1d0164b2f1_9366/LNY_Trefoil_Fill_Tee_Black_HR9040_21_model.jpg", 506 | "shipping": 13, 507 | "quantity": 0 508 | }, 509 | { 510 | "id": "f54a4763-b8c2-4922-ba8d-80652a64f5bc", 511 | "category": "Men's Sneaker", 512 | "name": "ESSENTIALS COLORBLOCK TEE", 513 | "seller": "Addidas", 514 | "price": 35, 515 | "stock": 6, 516 | "ratings": 3, 517 | "ratingsCount": 2680, 518 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto,fl_lossy,c_fill,g_auto/9889d39ac10243a2bb0fad1a0097ef07_9366/Essentials_Colorblock_Tee_Black_H14627_21_model.jpg", 519 | "shipping": 39, 520 | "quantity": 0 521 | }, 522 | { 523 | "id": "4a0090e7-b65d-4f6e-a42b-5603a3f51883", 524 | "category": "Bag", 525 | "name": "3-Stripes Backpack 2.0", 526 | "seller": "Addidas", 527 | "price": 74, 528 | "stock": 7, 529 | "ratings": 5, 530 | "ratingsCount": 365, 531 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/ba79ccb861fd4fd49e3aac9f006a6407_9366/3-Stripes_Backpack_2.0_Grey_EX6735_01_standard.jpg", 532 | "shipping": 23, 533 | "quantity": 0 534 | }, 535 | { 536 | "id": "0ac76ee7-53f1-45ba-b5ca-81ff6063bc1a", 537 | "category": "Bag", 538 | "name": "Trefoil Backpack", 539 | "seller": "Addidas", 540 | "price": 65, 541 | "stock": 3, 542 | "ratings": 4, 543 | "ratingsCount": 465, 544 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/a520df1b51384c00af9caca100489f04_9366/Trefoil_Backpack_Black_EX6752_01_standard.jpg", 545 | "shipping": 36, 546 | "quantity": 0 547 | }, 548 | { 549 | "id": "1770549a-571b-4baf-bc58-7bae7a228dcb", 550 | "category": "Bag", 551 | "name": "Santiago Lunch Bag", 552 | "seller": "Addidas", 553 | "price": 63, 554 | "stock": 10, 555 | "ratings": 3, 556 | "ratingsCount": 346, 557 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c2aaf5e8a7924f1d9277ac9f005b5f37_9366/Santiago_Lunch_Bag_Black_EX6532_01_standard.jpg", 558 | "shipping": 42, 559 | "quantity": 0 560 | }, 561 | { 562 | "id": "24b20ba6-9024-4b0a-b8a9-cf937521cede", 563 | "category": "Bag", 564 | "name": "Blue Version Backpack", 565 | "seller": "Addidas", 566 | "price": 87, 567 | "stock": 15, 568 | "ratings": 5, 569 | "ratingsCount": 234, 570 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/a9e0c5635057425daab5ad0b0089194b_9366/Blue_Version_Backpack_Black_H22735_01_standard.jpg", 571 | "shipping": 21, 572 | "quantity": 0 573 | }, 574 | { 575 | "id": "a7231186-0316-4cc0-94bf-4f496a382346", 576 | "category": "Bag", 577 | "name": "Defender Backpack", 578 | "seller": "Addidas", 579 | "price": 96, 580 | "stock": 10, 581 | "ratings": 4, 582 | "ratingsCount": 241, 583 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/d6ee0177281f42f0a254acb1016aa051_9366/Defender_Backpack_Red_EX7011_01_standard.jpg", 584 | "shipping": 15, 585 | "quantity": 0 586 | }, 587 | { 588 | "id": "35ac57f9-870a-4299-aac8-e5d8d2716b31", 589 | "category": "Bag", 590 | "name": "Excel Backpack", 591 | "seller": "Addidas", 592 | "price": 62, 593 | "stock": 18, 594 | "ratings": 5, 595 | "ratingsCount": 168, 596 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/ac09bb56249b43158485aca1007cc1ef_9366/Excel_Backpack_Black_EX6933_01_standard.jpg", 597 | "shipping": 14, 598 | "quantity": 0 599 | }, 600 | { 601 | "id": "c50bebaf-2633-4674-aba2-25be34bfdbba", 602 | "category": "Bag", 603 | "name": "Alliance Sackpack", 604 | "seller": "Addidas", 605 | "price": 99, 606 | "stock": 16, 607 | "ratings": 3, 608 | "ratingsCount": 311, 609 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/2e8a6f09838d49c3b00fad4f0017f753_9366/Alliance_Sackpack_White_FZ6823_01_standard.jpg", 610 | "shipping": 40, 611 | "quantity": 0 612 | }, 613 | { 614 | "id": "ff5bf372-7ed1-4904-aac5-7a2ce98e70ef", 615 | "category": "Bag", 616 | "name": "R.Y.V. Toploader Backpack", 617 | "seller": "Addidas", 618 | "price": 56, 619 | "stock": 19, 620 | "ratings": 3, 621 | "ratingsCount": 471, 622 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/1c87c940836e4628852bad130101e5c6_9366/R.Y.V._Toploader_Backpack_Black_H32458_01_standard.jpg", 623 | "shipping": 20, 624 | "quantity": 0 625 | }, 626 | { 627 | "id": "83ef9902-0224-48d3-ba7c-eeff3e678d13", 628 | "category": "Bag", 629 | "name": "Adicolor Archive Backpack", 630 | "seller": "Addidas", 631 | "price": 84, 632 | "stock": 5, 633 | "ratings": 4, 634 | "ratingsCount": 445, 635 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/0bb325f9cc174ea4bed7ad9e0101b682_9366/Adicolor_Archive_Backpack_Green_HE9804_01_standard.jpg", 636 | "shipping": 19, 637 | "quantity": 0 638 | }, 639 | { 640 | "id": "7490b4c8-8242-4de5-b161-b8ac96ea0e0b", 641 | "category": "Bag", 642 | "name": "R.Y.V. Backpack", 643 | "seller": "Addidas", 644 | "price": 67, 645 | "stock": 10, 646 | "ratings": 5, 647 | "ratingsCount": 83, 648 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/dc7dca21df62473ea518ade101251809_9366/R.Y.V._Backpack_Black_HD9650_01_standard.jpg", 649 | "shipping": 24, 650 | "quantity": 0 651 | }, 652 | { 653 | "id": "b1872b25-ba91-48ed-9468-1822df0637b9", 654 | "category": "Cap", 655 | "name": "Relaxed Strap-Back Hat", 656 | "seller": "Addidas", 657 | "price": 30, 658 | "stock": 6, 659 | "ratings": 4, 660 | "ratingsCount": 4, 661 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/4feb20f4d990407cb4f1a88a0040b212_9366/Relaxed_Strap-Back_Hat_Black_BH7137_01_standard.jpg", 662 | "shipping": 1, 663 | "quantity": 0 664 | }, 665 | { 666 | "id": "ea028038-4e9d-42bf-b033-88aa5e6cc477", 667 | "category": "Cap", 668 | "name": "Icon Snapback Hat", 669 | "seller": "Addidas", 670 | "price": 21, 671 | "stock": 13, 672 | "ratings": 4, 673 | "ratingsCount": 1, 674 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/1e27ae8bbfb647489261ac8e015d181f_9366/Icon_Snapback_Hat_Grey_EX6798_01_standard.jpg", 675 | "shipping": 26, 676 | "quantity": 0 677 | }, 678 | { 679 | "id": "d48e0fcb-904c-499e-93a0-312d77e6dbf9", 680 | "category": "Cap", 681 | "name": "Superlite Hat", 682 | "seller": "Addidas", 683 | "price": 11, 684 | "stock": 18, 685 | "ratings": 3, 686 | "ratingsCount": 39, 687 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/0ae141db6fce44999337ac8e015954ea_9366/Superlite_Hat_Grey_EX7054_01_standard.jpg", 688 | "shipping": 32, 689 | "quantity": 0 690 | }, 691 | { 692 | "id": "71dfc7f9-844b-4be7-816f-891a5cbaa0f1", 693 | "category": "Cap", 694 | "name": "Superlite Hat", 695 | "seller": "Addidas", 696 | "price": 10, 697 | "stock": 10, 698 | "ratings": 5, 699 | "ratingsCount": 47, 700 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/272d5d9cb7b74415a6c9ac8e015a4ccc_9366/Superlite_Hat_Black_EX7048_01_standard.jpg", 701 | "shipping": 24, 702 | "quantity": 0 703 | }, 704 | { 705 | "id": "a9d89eac-7418-4bca-a484-c8238c356270", 706 | "category": "Cap", 707 | "name": "Tee Time 5-Panel Hat", 708 | "seller": "Addidas", 709 | "price": 24, 710 | "stock": 1, 711 | "ratings": 4, 712 | "ratingsCount": 14, 713 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/df67ab60b5574c368b76adf9010f2d2d_9366/Tee_Time_5-Panel_Hat_Black_HA9254_01_standard.jpg", 714 | "shipping": 48, 715 | "quantity": 0 716 | }, 717 | { 718 | "id": "f6a5e6c0-5aec-4f10-84d7-bde9b6199045", 719 | "category": "Cap", 720 | "name": "Baseball Cap", 721 | "seller": "Addidas", 722 | "price": 17, 723 | "stock": 7, 724 | "ratings": 5, 725 | "ratingsCount": 37, 726 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/0ce5f49aa0914deabf16adc600d09e60_9366/Baseball_Cap_Black_HD7039_01_standard.jpg", 727 | "shipping": 48, 728 | "quantity": 0 729 | }, 730 | { 731 | "id": "625b4b60-611c-490c-ac0a-f3c2d2afd05c", 732 | "category": "Cap", 733 | "name": "Relaxed Strap-Back Hat", 734 | "seller": "Addidas", 735 | "price": 24, 736 | "stock": 9, 737 | "ratings": 5, 738 | "ratingsCount": 15, 739 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/aaa5ae549c624178bc25a740012dd61f_9366/Relaxed_Strap-Back_Hat_White_BH7135_01_standard.jpg", 740 | "shipping": 6, 741 | "quantity": 0 742 | }, 743 | { 744 | "id": "5960bf40-9603-4a39-9ff6-6cf9f1ce4815", 745 | "category": "Cap", 746 | "name": "UNISEX ORIGINALS WASHED BUCKET", 747 | "seller": "Addidas", 748 | "price": 27, 749 | "stock": 14, 750 | "ratings": 4, 751 | "ratingsCount": 3, 752 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/e1e758585df14bbbb7d8aaf000c95bd7_9366/UNISEX_ORIGINALS_WASHED_BUCKET_White_CM3933_01_standard.jpg", 753 | "shipping": 14, 754 | "quantity": 0 755 | }, 756 | { 757 | "id": "5991add1-f4ba-4fb9-9b6b-ec59aa2dda60", 758 | "category": "Cap", 759 | "name": "SST Plus Strap-Back Hat", 760 | "seller": "Addidas", 761 | "price": 23, 762 | "stock": 14, 763 | "ratings": 4, 764 | "ratingsCount": 32, 765 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/92e77a8d84d845d19171ad50003f2ea1_9366/SST_Plus_Strap-Back_Hat_White_FZ8569_01_standard.jpg", 766 | "shipping": 47, 767 | "quantity": 0 768 | }, 769 | { 770 | "id": "5690e579-a943-4b42-9ffe-dfc65b71c560", 771 | "category": "Cap", 772 | "name": "Dispatch Trucker Hat", 773 | "seller": "Addidas", 774 | "price": 28, 775 | "stock": 16, 776 | "ratings": 4, 777 | "ratingsCount": 30, 778 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c3981523051c4a978674ad3c01015664_9366/Dispatch_Trucker_Hat_Black_EY5534_01_standard.jpg", 779 | "shipping": 14, 780 | "quantity": 0 781 | }, 782 | { 783 | "id": "be7a4d0a-c681-416c-ab8d-f9be28223f4e", 784 | "category": "Earphones", 785 | "name": "adidas Z.N.E. 01 True Wireless Earbuds", 786 | "seller": "Addidas", 787 | "price": 142, 788 | "stock": 11, 789 | "ratings": 5, 790 | "ratingsCount": 22, 791 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/00276c6c380b41bcb29fadcc00f98312_9366/adidas_Z.N.E._01_True_Wireless_Earbuds_Grey_EY5116_42_detail.jpg", 792 | "shipping": 23, 793 | "quantity": 0 794 | }, 795 | { 796 | "id": "b278e667-ca17-465c-b603-af1af4319b7b", 797 | "category": "Earphones", 798 | "name": "adidas Z.N.E. 01 ANC True Wireless Earbuds", 799 | "seller": "Addidas", 800 | "price": 135, 801 | "stock": 16, 802 | "ratings": 5, 803 | "ratingsCount": 51, 804 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/b322cdef8e654551ace9adcc00f963ed_9366/adidas_Z.N.E._01_ANC_True_Wireless_Earbuds_Grey_EY5114_41_detail.jpg", 805 | "shipping": 30, 806 | "quantity": 0 807 | }, 808 | { 809 | "id": "1f56c0e5-4407-44bf-9225-90f592d2924a", 810 | "category": "Earphones", 811 | "name": "FWD-01 Sport In-Ear Headphones", 812 | "seller": "Addidas", 813 | "price": 185, 814 | "stock": 8, 815 | "ratings": 4, 816 | "ratingsCount": 66, 817 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/2cdb8652aa2340369ba2aa79010062d1_9366/FWD-01_Sport_In-Ear_Headphones_Black_CM5016_01_standard.jpg", 818 | "shipping": 15, 819 | "quantity": 0 820 | }, 821 | { 822 | "id": "4ead4708-68e8-4a93-b28e-5e99ccc4d75c", 823 | "category": "Earphones", 824 | "name": "adidas FWD-02 Sport True Wireless Earbuds", 825 | "seller": "Addidas", 826 | "price": 162, 827 | "stock": 14, 828 | "ratings": 4, 829 | "ratingsCount": 6, 830 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/523731a02e914d318cb4adcc00f985ba_9366/adidas_FWD-02_Sport_True_Wireless_Earbuds_Grey_EY5113_03_standard_hover.jpg", 831 | "shipping": 29, 832 | "quantity": 0 833 | }, 834 | { 835 | "id": "d1116075-10f2-49c4-985e-0d41e19ce1b3", 836 | "category": "Earphones", 837 | "name": "adidas Z.N.E. 01 ANC True Wireless Earbuds", 838 | "seller": "Addidas", 839 | "price": 110, 840 | "stock": 15, 841 | "ratings": 5, 842 | "ratingsCount": 9, 843 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/9e6e7967b3b24ef298f5adcc00f983ec_9366/adidas_Z.N.E._01_ANC_True_Wireless_Earbuds_Grey_EY5115_41_detail.jpg", 844 | "shipping": 48, 845 | "quantity": 0 846 | }, 847 | { 848 | "id": "d1116075-10f2-49c4-985e-fg41e19dc1b8", 849 | "category": "Earphones", 850 | "name": "RPT-01 Sport On-Ear Headphones", 851 | "seller": "Addidas", 852 | "price": 170, 853 | "stock": 15, 854 | "ratings": 5, 855 | "ratingsCount": 55, 856 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c697ceddb0c2469aaa2eaa7101121d10_9366/RPT-01_Sport_On-Ear_Headphones_Black_CM5015_01_standard.jpg", 857 | "shipping": 48, 858 | "quantity": 0 859 | }, 860 | { 861 | "id": "9e7cda87-8160-458f-bd32-ecf253a2d86a", 862 | "category": "Bottle", 863 | "name": "Steel Metal Bottle 1L", 864 | "seller": "Addidas", 865 | "price": 33, 866 | "stock": 7, 867 | "ratings": 4, 868 | "ratingsCount": 62, 869 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/a9c04ca9fa51408faf2fac8e0117abb9_9366/Steel_Metal_Bottle_1L_Black_EX7288_01_standard.jpg", 870 | "shipping": 15, 871 | "quantity": 0 872 | }, 873 | { 874 | "id": "eaff8921-f7eb-446f-b072-d96559685de0", 875 | "category": "Bottle", 876 | "name": "Steel Metal Bottle 1L", 877 | "seller": "Addidas", 878 | "price": 40, 879 | "stock": 14, 880 | "ratings": 5, 881 | "ratingsCount": 58, 882 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c45df020e3ae4e9199a4ac7d0001cfb7_9366/Steel_Metal_Bottle_1L_White_EX7301_01_standard.jpg", 883 | "shipping": 17, 884 | "quantity": 0 885 | }, 886 | { 887 | "id": "96fd22a5-f22f-4ad8-b7b5-f1cfd0852553", 888 | "category": "Bottle", 889 | "name": "Steel Metal Bottle 1 L", 890 | "seller": "Addidas", 891 | "price": 46, 892 | "stock": 2, 893 | "ratings": 5, 894 | "ratingsCount": 73, 895 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/c670a94f6388451a868fad440014460d_9366/Steel_Metal_Bottle_1_L_Purple_EY5529_01_standard.jpg", 896 | "shipping": 45, 897 | "quantity": 0 898 | }, 899 | { 900 | "id": "e1a7c529-f91b-4ef5-a661-c2317c5c314e", 901 | "category": "Bottle", 902 | "name": "Steel Metal Bottle 1L", 903 | "seller": "Addidas", 904 | "price": 20, 905 | "stock": 14, 906 | "ratings": 5, 907 | "ratingsCount": 63, 908 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/29ef510920b54492a721aa1c01782cb2_9366/Steel_Metal_Bottle_1L_White_CL6092_01_standard.jpg", 909 | "shipping": 21, 910 | "quantity": 0 911 | }, 912 | { 913 | "id": "e912ad01-2551-48dc-a709-4054cbfbcbbc", 914 | "category": "Bottle", 915 | "name": "Steel Metal Bottle 600 ML", 916 | "seller": "Addidas", 917 | "price": 43, 918 | "stock": 19, 919 | "ratings": 4, 920 | "ratingsCount": 64, 921 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/1105dc0c9232477eb80dac7d000edc0c_9366/Steel_Metal_Bottle_600_ML_White_EX7306_01_standard.jpg", 922 | "shipping": 43, 923 | "quantity": 0 924 | }, 925 | { 926 | "id": "afc5d640-9943-437a-b644-ba1f6f12baa9", 927 | "category": "Bottle", 928 | "name": "Steel Straw Metal Bottle 600 ML", 929 | "seller": "Addidas", 930 | "price": 43, 931 | "stock": 10, 932 | "ratings": 3, 933 | "ratingsCount": 15, 934 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/f7fb63986ed34112bc57ac7d002c9f43_9366/Steel_Straw_Metal_Bottle_600_ML_White_EX7316_01_standard.jpg", 935 | "shipping": 46, 936 | "quantity": 0 937 | }, 938 | { 939 | "id": "5b5c43d9-950d-4b9a-b7d9-ca489224a7b2", 940 | "category": "Bottle", 941 | "name": "Steel Metal Bottle 600 ML", 942 | "seller": "Addidas", 943 | "price": 26, 944 | "stock": 20, 945 | "ratings": 5, 946 | "ratingsCount": 83, 947 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/e2d870a680644e4d98e9ac7d0008ecc7_9366/Steel_Metal_Bottle_600_ML_Yellow_EX7307_01_standard.jpg", 948 | "shipping": 6, 949 | "quantity": 0 950 | }, 951 | { 952 | "id": "96239c09-8b1c-4c81-99f9-f43e7613eab3", 953 | "category": "Bottle", 954 | "name": "Squad Glass Bottle 720 ML", 955 | "seller": "Addidas", 956 | "price": 39, 957 | "stock": 20, 958 | "ratings": 3, 959 | "ratingsCount": 1, 960 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/77ad16764abf4e828560ad44001cd640_9366/Squad_Glass_Bottle_720_ML_Black_FZ7115_01_standard.jpg", 961 | "shipping": 5, 962 | "quantity": 0 963 | }, 964 | { 965 | "id": "30698483-f7aa-49ba-9de9-9070f64dc263", 966 | "category": "Bottle", 967 | "name": "Steel Bottle 600 ML", 968 | "seller": "Addidas", 969 | "price": 23, 970 | "stock": 11, 971 | "ratings": 5, 972 | "ratingsCount": 35, 973 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/48057b65216644f683a9aa1c0172ae6e_9366/Steel_Bottle_600_ML_Black_CL6093_01_standard.jpg", 974 | "shipping": 5, 975 | "quantity": 0 976 | }, 977 | { 978 | "id": "02871edc-272b-4e20-bcc2-b32681213b3c", 979 | "category": "Bottle", 980 | "name": "Steel Metal Bottle 2L", 981 | "seller": "Addidas", 982 | "price": 37, 983 | "stock": 14, 984 | "ratings": 4, 985 | "ratingsCount": 68, 986 | "img": "https://assets.adidas.com/images/h_840,f_auto,q_auto:sensitive,fl_lossy,c_fill,g_auto/f8d89293c9cb4bf08d52adb100f95a3a_9366/Steel_Metal_Bottle_2L_Black_EX7302_01_standard.jpg", 987 | "shipping": 27, 988 | "quantity": 0 989 | } 990 | ] 991 | -------------------------------------------------------------------------------- /src/images/Logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProgrammingHero1/ema-john-simple/e6c7a4940f2895aa38e21a815844997a6a8dcb71/src/images/favicon.ico -------------------------------------------------------------------------------- /src/images/giphy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProgrammingHero1/ema-john-simple/e6c7a4940f2895aa38e21a815844997a6a8dcb71/src/images/giphy.gif -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | -webkit-text-size-adjust: 100%; 15 | } 16 | 17 | 18 | body { 19 | margin: 0; 20 | display: flex; 21 | min-width: 320px; 22 | min-height: 100vh; 23 | } 24 | 25 | h1 { 26 | font-size: 3.2em; 27 | line-height: 1.1; 28 | } 29 | 30 | button { 31 | border-radius: 8px; 32 | border: 1px solid transparent; 33 | padding: 0.6em 1.2em; 34 | font-size: 1em; 35 | font-weight: 500; 36 | font-family: inherit; 37 | background-color: #1a1a1a; 38 | cursor: pointer; 39 | transition: border-color 0.25s; 40 | } 41 | button:hover { 42 | border-color: #646cff; 43 | } 44 | button:focus, 45 | button:focus-visible { 46 | outline: 4px auto -webkit-focus-ring-color; 47 | } 48 | 49 | @media (prefers-color-scheme: light) { 50 | :root { 51 | color: #213547; 52 | background-color: #ffffff; 53 | } 54 | a:hover { 55 | color: #747bff; 56 | } 57 | button { 58 | background-color: #f9f9f9; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './App' 4 | import './index.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root')).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /src/utilities/fakedb.js: -------------------------------------------------------------------------------- 1 | // use local storage to manage cart data 2 | const addToDb = id => { 3 | let shoppingCart = getShoppingCart(); 4 | // add quantity 5 | const quantity = shoppingCart[id]; 6 | if (!quantity) { 7 | shoppingCart[id] = 1; 8 | } 9 | else { 10 | const newQuantity = quantity + 1; 11 | shoppingCart[id] = newQuantity; 12 | } 13 | localStorage.setItem('shopping-cart', JSON.stringify(shoppingCart)); 14 | } 15 | 16 | const removeFromDb = id => { 17 | const shoppingCart = getShoppingCart(); 18 | if (id in shoppingCart) { 19 | delete shoppingCart[id]; 20 | localStorage.setItem('shopping-cart', JSON.stringify(shoppingCart)); 21 | } 22 | } 23 | 24 | const getShoppingCart = () => { 25 | let shoppingCart = {}; 26 | 27 | //get the shopping cart from local storage 28 | const storedCart = localStorage.getItem('shopping-cart'); 29 | if (storedCart) { 30 | shoppingCart = JSON.parse(storedCart); 31 | } 32 | return shoppingCart; 33 | } 34 | 35 | const deleteShoppingCart = () => { 36 | localStorage.removeItem('shopping-cart'); 37 | } 38 | 39 | export { 40 | addToDb, 41 | removeFromDb, 42 | getShoppingCart, 43 | deleteShoppingCart 44 | } 45 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | --------------------------------------------------------------------------------