From e4dce4491cbe058ef19220e51a57647dff07c2bf Mon Sep 17 00:00:00 2001 From: DrMesta103 Date: Thu, 11 Jun 2026 09:04:28 +0330 Subject: [PATCH] first commit --- .gitignore | 43 + jsconfig.json | 8 + next.config.mjs | 3 + package-lock.json | 3080 ++++++++++++++++++++++++++++++ package.json | 32 + postcss.config.mjs | 5 + prisma/schema.prisma | 54 + prisma/seed.js | 66 + public/fonts/iran.woff | Bin 0 -> 38708 bytes public/fonts/iran.woff2 | Bin 0 -> 29460 bytes src/app/admin/locations/page.js | 179 ++ src/app/api/admin/stats/route.js | 32 + src/app/api/auth/login/route.js | 34 + src/app/api/counting/route.js | 61 + src/app/api/hesabfa/route.js | 33 + src/app/api/locations/route.js | 48 + src/app/counting/page.js | 180 ++ src/app/dashboard/page.js | 68 + src/app/globals.css | 33 + src/app/history/page.js | 54 + src/app/layout.js | 20 + src/app/my-counts/page.js | 58 + src/app/page.js | 116 ++ src/app/scan/page.js | 110 ++ src/components/Header.js | 79 + src/lib/auth.js | 13 + src/lib/prisma.js | 13 + 27 files changed, 4422 insertions(+) create mode 100644 .gitignore create mode 100644 jsconfig.json create mode 100644 next.config.mjs create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.mjs create mode 100644 prisma/schema.prisma create mode 100644 prisma/seed.js create mode 100644 public/fonts/iran.woff create mode 100644 public/fonts/iran.woff2 create mode 100644 src/app/admin/locations/page.js create mode 100644 src/app/api/admin/stats/route.js create mode 100644 src/app/api/auth/login/route.js create mode 100644 src/app/api/counting/route.js create mode 100644 src/app/api/hesabfa/route.js create mode 100644 src/app/api/locations/route.js create mode 100644 src/app/counting/page.js create mode 100644 src/app/dashboard/page.js create mode 100644 src/app/globals.css create mode 100644 src/app/history/page.js create mode 100644 src/app/layout.js create mode 100644 src/app/my-counts/page.js create mode 100644 src/app/page.js create mode 100644 src/app/scan/page.js create mode 100644 src/components/Header.js create mode 100644 src/lib/auth.js create mode 100644 src/lib/prisma.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d7e7bb5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# prisma +*.db +*.db-journal +/prisma/dev.db diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..abe04df --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..f26ac37 --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,3 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; +export default nextConfig; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8dd418d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3080 @@ +{ + "name": "new", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "new", + "version": "1.0.0", + "dependencies": { + "@prisma/client": "^6.4.1", + "@tailwindcss/postcss": "^4.0.0", + "@yudiel/react-qr-scanner": "^2.6.0", + "axios": "^1.7.9", + "bcrypt": "^5.1.1", + "framer-motion": "^12.40.0", + "jsonwebtoken": "^9.0.2", + "lucide-react": "^1.17.0", + "next": "15.1.7", + "postcss": "^8.5.2", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "tailwindcss": "^4.0.0" + }, + "devDependencies": { + "prisma": "^6.4.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz", + "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@next/env": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.7.tgz", + "integrity": "sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==", + "license": "MIT" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.7.tgz", + "integrity": "sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.7.tgz", + "integrity": "sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.7.tgz", + "integrity": "sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.7.tgz", + "integrity": "sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.7.tgz", + "integrity": "sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.7.tgz", + "integrity": "sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.7.tgz", + "integrity": "sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.7.tgz", + "integrity": "sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@prisma/client": { + "version": "6.19.3", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.19.3.tgz", + "integrity": "sha512-mKq3jQFhjvko5LTJFHGilsuQs+W+T3Gm451NzuTDGQxwCzwXHYnIu2zGkRoW+Exq3Rob7yp2MfzSrdIiZVhrBg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "prisma": "*", + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/config": { + "version": "6.19.3", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.19.3.tgz", + "integrity": "sha512-CBPT44BjlQxEt8kiMEauji2WHTDoVBOKl7UlewXmUgBPnr/oPRZC3psci5chJnYmH0ivEIog2OU9PGWoki3DLQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.21.0", + "empathic": "2.0.0" + } + }, + "node_modules/@prisma/debug": { + "version": "6.19.3", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.19.3.tgz", + "integrity": "sha512-ljkJ+SgpXNktLG0Q/n4JGYCkKf0f8oYLyjImS2I8e2q2WCfdRRtWER062ZV/ixaNP2M2VKlWXVJiGzZaUgbKZw==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "6.19.3", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.19.3.tgz", + "integrity": "sha512-RSYxtlYFl5pJ8ZePgMv0lZ9IzVCOdTPOegrs2qcbAEFrBI1G33h6wyC9kjQvo0DnYEhEVY0X4LsuFHXLKQk88g==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.3", + "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", + "@prisma/fetch-engine": "6.19.3", + "@prisma/get-platform": "6.19.3" + } + }, + "node_modules/@prisma/engines-version": { + "version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7.tgz", + "integrity": "sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "6.19.3", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.3.tgz", + "integrity": "sha512-tKtl/qco9Nt7LU5iKhpultD8O4vMCZcU2CHjNTnRrL1QvSUr5W/GcyFPjNL87GtRrwBc7ubXXD9xy4EvLvt8JA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.3", + "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", + "@prisma/get-platform": "6.19.3" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.19.3", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.3.tgz", + "integrity": "sha512-xFj1VcJ1N3MKooOQAGO0W5tsd0W2QzIvW7DD7c/8H14Zmp4jseeWAITm+w2LLoLrlhoHdPPh0NMZ8mfL6puoHA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.3" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", + "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.21.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", + "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-x64": "4.3.0", + "@tailwindcss/oxide-freebsd-x64": "4.3.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-x64-musl": "4.3.0", + "@tailwindcss/oxide-wasm32-wasi": "4.3.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", + "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", + "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", + "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", + "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", + "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", + "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", + "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", + "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", + "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", + "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", + "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", + "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.3.0.tgz", + "integrity": "sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.3.0", + "@tailwindcss/oxide": "4.3.0", + "postcss": "^8.5.10", + "tailwindcss": "4.3.0" + } + }, + "node_modules/@types/emscripten": { + "version": "1.41.5", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.41.5.tgz", + "integrity": "sha512-cMQm7pxu6BxtHyqJ7mQZ2kXWV5SLmugybFdHCBbJ5eHzOo6VhBckEgAT3//rP5FwPHNPeEiq4SmQ5ucBwsOo4Q==", + "license": "MIT" + }, + "node_modules/@yudiel/react-qr-scanner": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@yudiel/react-qr-scanner/-/react-qr-scanner-2.6.0.tgz", + "integrity": "sha512-WjNcSt7qquYUz1LVbwKzSnRQI47sNrh4Vh6nNiGKVxnYcP+KgN5q9rcSzXyZ/7GRV9PPrnzoIuE5YdOxB9yAog==", + "license": "MIT", + "dependencies": { + "barcode-detector": "^3.1.3", + "webrtc-adapter": "^9.0.5" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/barcode-detector": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/barcode-detector/-/barcode-detector-3.2.0.tgz", + "integrity": "sha512-MrT5TT058ptG5YB157pHLfXKVpp0BKEfQBOb8QvzTbatzmLDu85JJ0Gd/sCYwbwdwStJvxsYflrSN6D6E4Ndyw==", + "license": "MIT", + "dependencies": { + "zxing-wasm": "3.1.0" + } + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001797", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz", + "integrity": "sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/effect": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.21.0.tgz", + "integrity": "sha512-PPN80qRokCd1f015IANNhrwOnLO7GrrMQfk4/lnZRE/8j7UPWrNNjPV0uBrZutI/nHzernbW+J0hdqQysHiSnQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz", + "integrity": "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/framer-motion": { + "version": "12.40.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.40.0.tgz", + "integrity": "sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.40.0", + "motion-utils": "^12.39.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT", + "optional": true + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/lucide-react": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.17.0.tgz", + "integrity": "sha512-9FA9evdox/JQL5PT57fdA1x/yg8T7knJ98+zjTL3UfKza6pflQUUh3XtaQIHKvnsJw1lmsEyHVlt5jchYxOQ5w==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/motion-dom": { + "version": "12.40.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.40.0.tgz", + "integrity": "sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.39.0" + } + }, + "node_modules/motion-utils": { + "version": "12.39.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz", + "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next": { + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.7.tgz", + "integrity": "sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==", + "deprecated": "This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/CVE-2025-66478 for more details.", + "license": "MIT", + "dependencies": { + "@next/env": "15.1.7", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.15", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.1.7", + "@next/swc-darwin-x64": "15.1.7", + "@next/swc-linux-arm64-gnu": "15.1.7", + "@next/swc-linux-arm64-musl": "15.1.7", + "@next/swc-linux-x64-gnu": "15.1.7", + "@next/swc-linux-x64-musl": "15.1.7", + "@next/swc-win32-arm64-msvc": "15.1.7", + "@next/swc-win32-x64-msvc": "15.1.7", + "sharp": "^0.33.5" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nypm": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.6.tgz", + "integrity": "sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.2.2", + "pathe": "^2.0.3", + "tinyexec": "^1.1.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nypm/node_modules/citty": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz", + "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/pkg-types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.4", + "exsolve": "^1.0.8", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prisma": { + "version": "6.19.3", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.19.3.tgz", + "integrity": "sha512-++ZJ0ijLrDJF6hNB4t4uxg2br3fC4H9Yc9tcbjr2fcNFP3rh/SBNrAgjhsqBU4Ght8JPrVofG/ZkXfnSfnYsFg==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/config": "6.19.3", + "@prisma/engines": "6.19.3" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.7" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/sdp": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.2.tgz", + "integrity": "sha512-xZocWwfyp4hkbN4hLWxMjmv2Q8aNa9MhmOZ7L9aCZPT+dZsgRr6wZRrSYE3HTdyk/2pZKPSgqI7ns7Een1xMSA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", + "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.7.0.tgz", + "integrity": "sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/webrtc-adapter": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-9.0.5.tgz", + "integrity": "sha512-U9vjByy/sK2OMXu5mmfuZFKTMIUQe34c0JXRO+oDrxJTsntdYT2iIFwYMOV7HhMTuktcZLGf2W1N/OcSf9ssWg==", + "license": "BSD-3-Clause", + "dependencies": { + "sdp": "^3.2.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=3.10.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/zxing-wasm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/zxing-wasm/-/zxing-wasm-3.1.0.tgz", + "integrity": "sha512-5+3V1wPRx4gvbeLH2jB7n2cKrYJ1q4i3QgjnBUtrDPeqxJSi6BdzKJg4y6aF6bgW8zfntnYJyrkqFMevDhL2NA==", + "license": "MIT", + "dependencies": { + "@types/emscripten": "^1.41.5", + "type-fest": "^5.7.0" + }, + "peerDependencies": { + "@types/emscripten": ">=1.39.6" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bce9cb6 --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "new", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@prisma/client": "^6.4.1", + "@tailwindcss/postcss": "^4.0.0", + "@yudiel/react-qr-scanner": "^2.6.0", + "axios": "^1.7.9", + "bcrypt": "^5.1.1", + "framer-motion": "^12.40.0", + "jsonwebtoken": "^9.0.2", + "lucide-react": "^1.17.0", + "next": "15.1.7", + "postcss": "^8.5.2", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "tailwindcss": "^4.0.0" + }, + "devDependencies": { + "prisma": "^6.4.1" + }, + "prisma": { + "seed": "node prisma/seed.js" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..a34a3d5 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..ac4169c --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,54 @@ +datasource db { + provider = "mysql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +enum Role { + USER + ADMIN +} + +model User { + id Int @id @default(autoincrement()) + username String @unique + password String + name String? + mobile String? + role Role @default(USER) + orgId Int? + countings Counting[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Location { + id Int @id @default(autoincrement()) + code String @unique + floor String + region Int + sector String + row Int + countings Counting[] + createdAt DateTime @default(now()) +} + +model Counting { + id Int @id @default(autoincrement()) + product_id Int + product_name String + warehouse Int + + shelfCode String? + location Location? @relation(fields: [shelfCode], references: [code]) + + old_count Int + new_count Int + user_id Int + user User @relation(fields: [user_id], references: [id]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} diff --git a/prisma/seed.js b/prisma/seed.js new file mode 100644 index 0000000..10d70fc --- /dev/null +++ b/prisma/seed.js @@ -0,0 +1,66 @@ +import { PrismaClient } from '@prisma/client'; +import bcrypt from 'bcrypt'; + +const prisma = new PrismaClient(); + +const persons = [ + { name: 'ایمان کمالی', number: '09911999852', org: 0, role: 'ADMIN' }, + { name: 'طباطبایی', number: '09176852349', org: 1, role: 'USER' }, + { name: 'نکویی', number: '09174234065', org: 2, role: 'USER' }, + { name: 'عبادی', number: '09170493652', org: 3, role: 'USER' }, + { name: 'ایزدی', number: '09173260279', org: 4, role: 'USER' }, + { name: 'اسماعیل بیگ', number: '09173268033', org: 5, role: 'USER' }, + { name: 'مدیریت', number: '09177154176', org: 6, role: 'ADMIN' }, + { name: 'طاهری', number: '09382217731', org: 7, role: 'USER' }, + { name: 'نعمتی', number: '09172556207', org: 8, role: 'USER' }, + { name: 'ملکی', number: '09335585635', org: 9, role: 'USER' }, + { name: 'حیدری', number: '09173268028', org: 10, role: 'USER' }, + { name: 'آقارضا', number: '09385512778', org: 11, role: 'USER' }, + { name: 'حبیبی', number: '09338907776', org: 12, role: 'USER' }, + { name: 'قائدی', number: '09171088733', org: 13, role: 'USER' }, + { name: 'رجبی', number: '09056011806', org: 14, role: 'USER' } +]; + +async function main() { + console.log(`Start seeding ...`); + for (const p of persons) { + const hashedPassword = await bcrypt.hash('123456', 10); + const user = await prisma.user.upsert({ + where: { username: p.number }, + update: { role: p.role }, + create: { + username: p.number, + password: hashedPassword, + name: p.name, + mobile: p.number, + role: p.role, + orgId: p.org + }, + }); + console.log(`Created user with id: ${user.id} - ${user.name}`); + } + + await prisma.location.upsert({ + where: { code: 'C2F2' }, + update: {}, + create: { + code: 'C2F2', + floor: 'C', + region: 2, + sector: 'F', + row: 2 + } + }); + + console.log(`Seeding finished.`); +} + +main() + .then(async () => { + await prisma.$disconnect(); + }) + .catch(async (e) => { + console.error(e); + await prisma.$disconnect(); + process.exit(1); + }); diff --git a/public/fonts/iran.woff b/public/fonts/iran.woff new file mode 100644 index 0000000000000000000000000000000000000000..4a01edc97af366dcaa31d8eca03d732408346e40 GIT binary patch literal 38708 zcmaG`V~i$1lOEgLv8^53+_CLYWZ0y*!ZQHi(n@hg?bGcllpLD9bs=9u3I_av% zRZdI{2pH%`QdocxekNcamjBlNFA-7tBmQGY`?Cl29{`Jsh>8ILIY#~He}B+H3rXW3 zE-$A91mr{r1cdRk&hRx5E~PE5q#^_a6j1>L1m_0?gqd$dp&=%x#J~guWYqHGC;J2a zuv0KjfVF`g5Rmate9$o0U#i} zzh3Cv_-?>KD&X2U>+_qfdC-ZHb8%qBHP!*^CiO&UkqH8ELCSS9c9b1`WVt0vs{;f}Cic zm@ly+KLZXtHA@zw5>_#fI_i!!HyX=${s~%~FT+hP&*=VE>&Gk0lxwp) zH@%Lw{@iG`M;QUTbo*twM%J509?&Sj8#@XK1Cu*ky}%?!+9Z!{O-M zgMl3o@wONZ%&py9xyK4VCSE?81I$oJ4A)?jVKrO$EVctIzDCR8v+S7uCbuQLT|Mbq zR4h-h+G6GqQilR)g>qIHD=;f)eq?@nC_IXXXard+&H4bIm|E%(xoe0zvfI1eb;%}N z2o{Wy+9(HF2pISmJ&K&0@CUdk33$64CqDJwZ@D-g{0|oMoR}x`1>IrlC5fkU#)|Pm zc?g74MwZXCA>AO{2V%&3S4aKb%0Dm(a3g3pw0b2ZkL}5{+zW`s`1U)A9F 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 >9!f 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 Y$DE(ac8j+E0f{WioB#j-0RR910M+J67ytkO literal 0 HcmV?d00001 diff --git a/public/fonts/iran.woff2 b/public/fonts/iran.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e08285c0afc132e8b5231fdea4e2efa844ba069a GIT binary patch literal 29460 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 import('@yudiel/react-qr-scanner').then(mod => mod.Scanner), { ssr: false }); + +export default function AdminLocations() { + const [locations, setLocations] = useState([]); + const [newCode, setNewCode] = useState(''); + const [loading, setLoading] = useState(false); + const [cameraEnabled, setCameraEnabled] = useState(false); + + const [camError, setCamError] = useState(''); + const [activeFilter, setActiveFilter] = useState('all'); + + useEffect(() => { + fetchLocations(); + }, []); + + const fetchLocations = async () => { + try { + const res = await fetch('/api/locations'); + if (res.ok) { + setLocations(await res.json()); + } + } catch (e) { + console.error(e); + } + }; + + const handleAddLocation = async (codeValue) => { + const targetCode = codeValue || newCode; + if (!targetCode) return; + + setLoading(true); + try { + const res = await fetch('/api/locations', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ code: targetCode }) + }); + + const data = await res.json(); + if (res.ok) { + alert('قفسه با موفقیت ثبت شد!'); + setNewCode(''); + fetchLocations(); + } else { + alert(data.error || 'خطا در ثبت قفسه'); + } + } catch (e) { + alert('خطای شبکه'); + } finally { + setLoading(false); + setCameraEnabled(false); + } + }; + + const handleScan = (detectedCodes) => { + if (detectedCodes && detectedCodes.length > 0) { + const scannedValue = detectedCodes[0].rawValue; + handleAddLocation(scannedValue); + } + }; + + const handleError = (error) => { + console.error(error); + const msg = error?.message || error?.name || ''; + if (msg.includes('Requested device not found') || msg.includes('NotFoundError') || msg.includes('device not found')) { + setCamError('هیچ دوربینی روی این دستگاه یافت نشد. لطفاً از لپ‌تاپ یا موبایل استفاده کنید.'); + } else { + setCamError(msg || 'خطا در دسترسی به دوربین. آیا از HTTPS یا localhost استفاده میکنید؟'); + } + }; + + // استخراج طبقات یکتا برای ساخت دکمه‌های فیلتر + const floors = [...new Set(locations.map(loc => loc.floor))].sort(); + + // اعمال فیلتر روی لیست قفسه‌ها + const filteredLocations = activeFilter === 'all' + ? locations + : locations.filter(loc => loc.floor === activeFilter); + + return ( +
+
+ +
+ +
+

ثبت قفسه جدید

+

+ فرمت استاندارد شامل حروف و اعداد است. + مثال: C2F2 (طبقه C، منطقه 2، قطاع F، ردیف 2) +

+ +
+ setNewCode(e.target.value)} + placeholder="مثال: C2F2" + className="w-full border p-2 rounded text-center uppercase font-bold" + /> + +
+ +
+ {cameraEnabled ? ( +
+ {camError ? ( +
{camError}
+ ) : ( + + )} + +
+ ) : ( + + )} +
+
+ +
+

قفسه های ثبت شده ({filteredLocations.length})

+ + {/* فیلترهای تگ (اسکرول افقی) */} + {floors.length > 0 && ( +
+ + {floors.map(floor => ( + + ))} +
+ )} + +
+ {filteredLocations.map((loc) => ( +
+ {loc.code} + طبقه {loc.floor} | منطقه {loc.region} | قطاع {loc.sector} | ردیف {loc.row} +
+ ))} + {filteredLocations.length === 0 && موردی یافت نشد.} +
+
+ +
+
+ ); +} diff --git a/src/app/api/admin/stats/route.js b/src/app/api/admin/stats/route.js new file mode 100644 index 0000000..852b343 --- /dev/null +++ b/src/app/api/admin/stats/route.js @@ -0,0 +1,32 @@ +import prisma from '@/lib/prisma'; +import { NextResponse } from 'next/server'; + +export async function GET() { + try { + // Get all countings grouped by floor using the relation + const countings = await prisma.counting.findMany({ + include: { + location: true + } + }); + + // Calculate stats per floor + const stats = countings.reduce((acc, curr) => { + const floor = curr.location?.floor || 'بدون قفسه'; + + if (!acc[floor]) { + acc[floor] = { floor, totalCountings: 0, items: [] }; + } + + acc[floor].totalCountings += 1; + acc[floor].items.push(curr); + + return acc; + }, {}); + + return NextResponse.json(Object.values(stats)); + } catch (error) { + console.error(error); + return NextResponse.json({ error: 'خطا در دریافت آمار' }, { status: 500 }); + } +} diff --git a/src/app/api/auth/login/route.js b/src/app/api/auth/login/route.js new file mode 100644 index 0000000..6f61361 --- /dev/null +++ b/src/app/api/auth/login/route.js @@ -0,0 +1,34 @@ +import prisma from '@/lib/prisma'; +import bcrypt from 'bcrypt'; +import { signToken } from '@/lib/auth'; + +export async function POST(req) { + try { + const { username, password } = await req.json(); + + if (!username || !password) { + return Response.json({ error: 'نام کاربری و رمز عبور الزامی است.' }, { status: 400 }); + } + + const user = await prisma.user.findUnique({ + where: { username } + }); + + if (!user) { + return Response.json({ error: 'کاربر یافت نشد.' }, { status: 404 }); + } + + const isMatch = await bcrypt.compare(password, user.password); + + if (!isMatch) { + return Response.json({ error: 'رمز عبور اشتباه است.' }, { status: 401 }); + } + + const token = signToken({ id: user.id, username: user.username, name: user.name, orgId: user.orgId, role: user.role }); + + return Response.json({ message: 'با موفقیت وارد شدید', token, user: { id: user.id, name: user.name, orgId: user.orgId, role: user.role } }); + } catch (error) { + console.error(error); + return Response.json({ error: 'خطای سرور رخ داد.' }, { status: 500 }); + } +} diff --git a/src/app/api/counting/route.js b/src/app/api/counting/route.js new file mode 100644 index 0000000..6ea052f --- /dev/null +++ b/src/app/api/counting/route.js @@ -0,0 +1,61 @@ +import prisma from '@/lib/prisma'; +import { NextResponse } from 'next/server'; + +export async function POST(req) { + try { + const data = await req.json(); + + const count = await prisma.counting.create({ + data: { + product_id: Number(data.product_id), + product_name: data.product_name, + warehouse: Number(data.warehouse), + shelfCode: data.shelfCode || null, + old_count: Number(data.old_count), + new_count: Number(data.new_count), + user_id: Number(data.user_id) + } + }); + + return NextResponse.json({ success: true, count }); + } catch (error) { + console.error(error); + return NextResponse.json({ error: 'خطا در ثبت اطلاعات' }, { status: 500 }); + } +} + +export async function GET(req) { + const { searchParams } = new URL(req.url); + const productId = searchParams.get('product_id'); + const warehouse = searchParams.get('warehouse'); + const userId = searchParams.get('user_id'); + + try { + if (productId && warehouse) { + const lastCount = await prisma.counting.findFirst({ + where: { product_id: Number(productId), warehouse: Number(warehouse) }, + orderBy: { createdAt: 'desc' } + }); + return NextResponse.json(lastCount || { message: -1 }); + } + + if (userId) { + const counts = await prisma.counting.findMany({ + where: { user_id: Number(userId) }, + orderBy: { createdAt: 'desc' }, + include: { location: true } + }); + return NextResponse.json(counts); + } + + const allCounts = await prisma.counting.findMany({ + orderBy: { createdAt: 'desc' }, + take: 50, + include: { user: { select: { name: true } }, location: true } + }); + return NextResponse.json(allCounts); + + } catch (error) { + return NextResponse.json({ error: 'خطا در دریافت اطلاعات' }, { status: 500 }); + } +} diff --git a/src/app/api/hesabfa/route.js b/src/app/api/hesabfa/route.js new file mode 100644 index 0000000..2e208d7 --- /dev/null +++ b/src/app/api/hesabfa/route.js @@ -0,0 +1,33 @@ +import { NextResponse } from 'next/server'; +import axios from 'axios'; + +const HESABFA_API_KEY = 'NCuDX3bksHlhXWGIqTvatvme3YTplxdF'; +const HESABFA_TOKEN = '4ddb2fc517f6f6fe6d4b9bdd08fa0df31a564a62e12c4353eb9533ae63447b57ca87c479beb7f02b276929c861dad779'; + +export async function POST(req) { + try { + const { code, type } = await req.json(); + + if (type === 'name') { + const res = await axios.post('https://api.hesabfa.com/v1/item/get', { + apiKey: HESABFA_API_KEY, + loginToken: HESABFA_TOKEN, + code: Number(code) + }); + return NextResponse.json(res.data); + } + + if (type === 'quantity') { + const res = await axios.post('https://api.hesabfa.com/v1/item/GetQuantity2', { + apiKey: HESABFA_API_KEY, + loginToken: HESABFA_TOKEN, + codes: [Number(code)] + }); + return NextResponse.json(res.data); + } + + return NextResponse.json({ error: 'نوع درخواست نامعتبر است' }, { status: 400 }); + } catch (error) { + return NextResponse.json({ error: 'خطا در ارتباط با حسابفا' }, { status: 500 }); + } +} diff --git a/src/app/api/locations/route.js b/src/app/api/locations/route.js new file mode 100644 index 0000000..1687cc0 --- /dev/null +++ b/src/app/api/locations/route.js @@ -0,0 +1,48 @@ +import prisma from '@/lib/prisma'; +import { NextResponse } from 'next/server'; + +export async function GET() { + try { + const locations = await prisma.location.findMany({ + orderBy: [{ floor: 'asc' }, { region: 'asc' }, { sector: 'asc' }, { row: 'asc' }] + }); + return NextResponse.json(locations); + } catch (error) { + return NextResponse.json({ error: 'خطا در دریافت لیست انبارها' }, { status: 500 }); + } +} + +export async function POST(req) { + try { + const { code } = await req.json(); // "C2F2" + + // Pattern validation (e.g., C2F2 -> 1 Char, 1 Num, 1 Char, 1 Num) + const regex = /^([A-Za-z]+)(\d+)([A-Za-z]+)(\d+)$/; + const match = code.toUpperCase().match(regex); + + if (!match) { + return NextResponse.json({ error: 'فرمت کد قفسه نامعتبر است. مثال صحیح: C2F2' }, { status: 400 }); + } + + const [, floor, regionStr, sector, rowStr] = match; + const region = parseInt(regionStr, 10); + const row = parseInt(rowStr, 10); + + const location = await prisma.location.upsert({ + where: { code: code.toUpperCase() }, + update: {}, // if exists, do nothing or update timestamps + create: { + code: code.toUpperCase(), + floor, + region, + sector, + row + } + }); + + return NextResponse.json({ success: true, location }); + } catch (error) { + console.error(error); + return NextResponse.json({ error: 'خطا در ثبت قفسه' }, { status: 500 }); + } +} diff --git a/src/app/counting/page.js b/src/app/counting/page.js new file mode 100644 index 0000000..f963952 --- /dev/null +++ b/src/app/counting/page.js @@ -0,0 +1,180 @@ +'use client'; +import { useState, useEffect, Suspense } from 'react'; +import { useRouter, useSearchParams } from 'next/navigation'; +import Header from '@/components/Header'; + +function CountingContent() { + const router = useRouter(); + const searchParams = useSearchParams(); + const code = searchParams.get('code'); + const warehouse = searchParams.get('warehouse'); + + const [productName, setProductName] = useState(''); + const [oldCount, setOldCount] = useState(null); + const [newCount, setNewCount] = useState(''); + const [shelf, setShelf] = useState(''); + const [lastCount, setLastCount] = useState(null); + const [loading, setLoading] = useState(true); + const [user, setUser] = useState(null); + + useEffect(() => { + const userData = localStorage.getItem('user'); + if (userData) { + setUser(JSON.parse(userData)); + } + + if (code && warehouse) { + fetchData(); + } + }, [code, warehouse]); + + const fetchData = async () => { + try { + // Fetch Product Name + const nameRes = await fetch('/api/hesabfa', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ code, type: 'name' }) + }); + const nameData = await nameRes.json(); + setProductName(nameData?.Result?.Name || 'نامشخص'); + + // Fetch Product Quantity + const qRes = await fetch('/api/hesabfa', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ code, type: 'quantity' }) + }); + const qData = await qRes.json(); + const productInfo = qData?.Result?.[0]; + const wInfo = productInfo?.Warehouse?.find(w => w.Code === Number(warehouse)); + setOldCount(wInfo?.Quantity ?? 0); + + // Fetch Last Count + const lastRes = await fetch(`/api/counting?product_id=${code}&warehouse=${warehouse}`); + const lastData = await lastRes.json(); + if (lastData.message !== -1) { + setLastCount(lastData); + } + } catch (err) { + console.error(err); + } finally { + setLoading(false); + } + }; + + const handleSubmit = async (isConfirm) => { + const finalCount = isConfirm ? oldCount : newCount; + if (finalCount === '' || finalCount === null) { + alert('لطفا تعداد را وارد کنید.'); + return; + } + + try { + const res = await fetch('/api/counting', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + product_id: code, + product_name: productName, + warehouse, + shelfCode: shelf.toUpperCase(), + old_count: oldCount, + new_count: finalCount, + user_id: user?.id + }) + }); + + if (res.ok) { + alert('شمارش با موفقیت ثبت شد!'); + router.push('/dashboard'); + } else { + alert('خطا در ثبت شمارش'); + } + } catch (err) { + console.error(err); + } + }; + + return ( +
+
+ +
+ {loading ? ( +
در حال دریافت اطلاعات...
+ ) : ( + <> +
+
+
+ کد: {code} + {productName} +
+
+ {oldCount} + موجودی سیستم +
+
+
+ +
+ آخرین شمارش: + {lastCount ? ( + {lastCount.new_count} عدد (توسط کاربر {lastCount.user_id}) + ) : ( + ندارد + )} +
+ +
+ + + setShelf(e.target.value)} + className="w-full border rounded p-2 text-center uppercase" + /> + + setNewCount(e.target.value)} + className="w-full border-2 border-purple-200 focus:border-purple-500 rounded p-4 text-center text-2xl font-bold" + /> +
+ +
+ +
+ + + + )} +
+
+ ); +} + +export default function CountingPage() { + return ( + در حال بارگذاری...}> + + + ); +} diff --git a/src/app/dashboard/page.js b/src/app/dashboard/page.js new file mode 100644 index 0000000..3561952 --- /dev/null +++ b/src/app/dashboard/page.js @@ -0,0 +1,68 @@ +'use client'; +import Header from '@/components/Header'; +import Link from 'next/link'; +import { motion } from 'framer-motion'; +import { History, ScanLine, ListChecks } from 'lucide-react'; + +export default function Dashboard() { + + const container = { + hidden: { opacity: 0 }, + show: { + opacity: 1, + transition: { staggerChildren: 0.1 } + } + }; + + const item = { + hidden: { opacity: 0, y: 20 }, + show: { opacity: 1, y: 0, transition: { type: 'spring', stiffness: 300, damping: 24 } } + }; + + return ( +
+
+ + +
+ + +
+ +
+ تاریخچه شمارش + +
+ + + +
+ +
+ اسکن کالا + +
+
+ + + +
+
+ +
+ شمارش‌های من +
+
+ +
+ +
+
+
+ ); +} diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..1c27f83 --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,33 @@ +@import "tailwindcss"; + +@font-face { + font-family: "IRANSans"; + src: url("/fonts/iran.woff2") format("woff2"), + url("/fonts/iran.woff") format("woff"); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@theme { + --font-iran: "IRANSans", sans-serif; +} + +body { + direction: rtl; + background-color: #f8fafc; /* Lighter modern gray */ + font-family: var(--font-iran); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + scroll-behavior: smooth; +} + +/* Hide scrollbar for horizontal scroll areas but keep functionality */ +.scrollbar-hide::-webkit-scrollbar { + display: none; +} +.scrollbar-hide { + -ms-overflow-style: none; + scrollbar-width: none; +} diff --git a/src/app/history/page.js b/src/app/history/page.js new file mode 100644 index 0000000..d975584 --- /dev/null +++ b/src/app/history/page.js @@ -0,0 +1,54 @@ +'use client'; +import { useState, useEffect } from 'react'; +import Header from '@/components/Header'; + +export default function HistoryPage() { + const [counts, setCounts] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const fetchHistory = async () => { + try { + const res = await fetch(`/api/counting`); + if (res.ok) setCounts(await res.json()); + } catch (e) { + console.error(e); + } + setLoading(false); + }; + fetchHistory(); + }, []); + + return ( +
+
+ +
+ {loading ? ( +
در حال دریافت...
+ ) : counts.length === 0 ? ( +
تاریخچه خالی است.
+ ) : ( + counts.map(count => ( +
+
+
+ {count.product_name} + شمارنده: {count.user?.name} | انبار: {count.warehouse} + قفسه: {count.shelf || 'ثبت نشده'} +
+
+ {count.new_count} + موجودی ثبت شده +
+
+
+ {new Date(count.createdAt).toLocaleString('fa-IR')} +
+
+ )) + )} +
+
+ ); +} diff --git a/src/app/layout.js b/src/app/layout.js new file mode 100644 index 0000000..93907a1 --- /dev/null +++ b/src/app/layout.js @@ -0,0 +1,20 @@ +import './globals.css' + +export const metadata = { + title: 'Pardis Counting', + description: 'اپلیکیشن انبارگردانی پردیس', +} + +export default function RootLayout({ children }) { + return ( + + +
+
+ {children} +
+
+ + + ) +} diff --git a/src/app/my-counts/page.js b/src/app/my-counts/page.js new file mode 100644 index 0000000..cd30060 --- /dev/null +++ b/src/app/my-counts/page.js @@ -0,0 +1,58 @@ +'use client'; +import { useState, useEffect } from 'react'; +import Header from '@/components/Header'; + +export default function MyCountsPage() { + const [counts, setCounts] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const fetchMyCounts = async () => { + const userData = localStorage.getItem('user'); + if (userData) { + const user = JSON.parse(userData); + try { + const res = await fetch(`/api/counting?user_id=${user.id}`); + if (res.ok) setCounts(await res.json()); + } catch (e) { + console.error(e); + } + } + setLoading(false); + }; + fetchMyCounts(); + }, []); + + return ( +
+
+ +
+ {loading ? ( +
در حال دریافت...
+ ) : counts.length === 0 ? ( +
هنوز شمارشی ثبت نکرده‌اید.
+ ) : ( + counts.map(count => ( +
+
+
+ {count.product_name} + کد: {count.product_id} | انبار: {count.warehouse} + قفسه: {count.shelf || 'ثبت نشده'} +
+
+ {count.new_count} + شمارش شما +
+
+
+ {new Date(count.createdAt).toLocaleString('fa-IR')} +
+
+ )) + )} +
+
+ ); +} diff --git a/src/app/page.js b/src/app/page.js new file mode 100644 index 0000000..eb5f3bb --- /dev/null +++ b/src/app/page.js @@ -0,0 +1,116 @@ +'use client'; +import { useState, useEffect } from 'react'; +import { useRouter } from 'next/navigation'; +import { motion } from 'framer-motion'; + +export default function LoginPage() { + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(false); + const router = useRouter(); + + useEffect(() => { + const token = localStorage.getItem('token'); + if (token) { + router.push('/dashboard'); + } + }, [router]); + + const handleLogin = async (e) => { + e.preventDefault(); + setError(''); + setLoading(true); + + try { + const res = await fetch('/api/auth/login', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ username, password }) + }); + + const data = await res.json(); + + if (res.ok) { + localStorage.setItem('token', data.token); + localStorage.setItem('user', JSON.stringify(data.user)); + router.push('/dashboard'); + } else { + setError(data.error); + } + } catch (err) { + setError('خطا در برقراری ارتباط با سرور'); + } finally { + setLoading(false); + } + }; + + return ( +
+ + {/* Decorative Blur Backgrounds */} +
+
+ + +
+
+ P +
+

پردیس رایانه

+

اپلیکیشن مدیریت انبار

+
+ + {error && ( + + {error} + + )} + +
+
+ + setUsername(e.target.value)} + className="px-4 py-3 bg-white/50 border border-gray-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-purple-500/50 focus:border-purple-500 focus:bg-white transition-all text-sm" + placeholder="09xxxxxxxxx" + required + /> +
+ +
+ + setPassword(e.target.value)} + className="px-4 py-3 bg-white/50 border border-gray-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-purple-500/50 focus:border-purple-500 focus:bg-white transition-all text-sm" + placeholder="••••••••" + required + /> +
+ + + {loading ? 'در حال ورود...' : 'ورود به سیستم'} + +
+

رمز عبور پیش‌فرض: 123456

+
+
+ ); +} diff --git a/src/app/scan/page.js b/src/app/scan/page.js new file mode 100644 index 0000000..bee7aa5 --- /dev/null +++ b/src/app/scan/page.js @@ -0,0 +1,110 @@ +'use client'; +import { useState, useEffect } from 'react'; +import { useRouter } from 'next/navigation'; +import Header from '@/components/Header'; +import dynamic from 'next/dynamic'; +const Scanner = dynamic(() => import('@yudiel/react-qr-scanner').then(mod => mod.Scanner), { ssr: false }); + +export default function ScanPage() { + const [code, setCode] = useState(''); + const [warehouse, setWarehouse] = useState('11'); + const [cameraEnabled, setCameraEnabled] = useState(false); + const router = useRouter(); + + const handleGoToCounting = () => { + if (code) { + router.push(`/counting?code=${code}&warehouse=${warehouse}`); + } + }; + + const [camError, setCamError] = useState(''); + + const handleScan = (detectedCodes) => { + if (detectedCodes && detectedCodes.length > 0) { + const scannedValue = detectedCodes[0].rawValue; + setCode(scannedValue); + setCameraEnabled(false); + setTimeout(() => { + router.push(`/counting?code=${scannedValue}&warehouse=${warehouse}`); + }, 1500); + } + }; + + const handleError = (error) => { + console.error(error); + const msg = error?.message || error?.name || ''; + if (msg.includes('Requested device not found') || msg.includes('NotFoundError') || msg.includes('device not found')) { + setCamError('هیچ دوربینی روی این دستگاه یافت نشد. لطفاً از لپ‌تاپ یا موبایل استفاده کنید.'); + } else { + setCamError(msg || 'خطا در دسترسی به دوربین. آیا از HTTPS یا localhost استفاده میکنید؟'); + } + }; + + return ( +
+
+ +
+ +
+ {cameraEnabled ? ( +
+ {camError ? ( +
{camError}
+ ) : ( + + )} + +
+ ) : ( + + )} +
+ +

کد کالا را اسکن یا وارد کنید

+ + setCode(e.target.value)} + placeholder="ورود دستی کد" + className="w-full max-w-xs text-center text-3xl p-4 border rounded-lg focus:ring-2 focus:ring-purple-500 outline-none" + /> + + + + +
+
+ ); +} diff --git a/src/components/Header.js b/src/components/Header.js new file mode 100644 index 0000000..1a834e7 --- /dev/null +++ b/src/components/Header.js @@ -0,0 +1,79 @@ +'use client'; +import { useState, useEffect } from 'react'; +import { useRouter } from 'next/navigation'; +import Link from 'next/link'; +import { motion } from 'framer-motion'; +import { LogOut, ChevronRight, Wifi, WifiOff } from 'lucide-react'; + +export default function Header({ title = 'داشبورد', showBack = false }) { + const [user, setUser] = useState(null); + const [isOnline, setIsOnline] = useState(true); + const router = useRouter(); + + useEffect(() => { + const userData = localStorage.getItem('user'); + if (userData) { + setUser(JSON.parse(userData)); + } else { + router.push('/'); + } + + setIsOnline(navigator.onLine); + + const handleOnline = () => setIsOnline(true); + const handleOffline = () => setIsOnline(false); + + window.addEventListener('online', handleOnline); + window.addEventListener('offline', handleOffline); + + return () => { + window.removeEventListener('online', handleOnline); + window.removeEventListener('offline', handleOffline); + }; + }, [router]); + + const handleLogout = () => { + localStorage.removeItem('token'); + localStorage.removeItem('user'); + router.push('/'); + }; + + return ( + +
+ {showBack ? ( + + ) : ( + + )} +
+ +
+ {title} +
+ +
+
+ {user?.name || 'کاربر'} + {user?.role === 'ADMIN' && مدیریت قفسه‌ها} +
+
+ {isOnline ? ( + + ) : ( + + )} +
+
+
+ ); +} diff --git a/src/lib/auth.js b/src/lib/auth.js new file mode 100644 index 0000000..7e698ee --- /dev/null +++ b/src/lib/auth.js @@ -0,0 +1,13 @@ +import jwt from 'jsonwebtoken'; + +export function signToken(payload) { + return jwt.sign(payload, process.env.JWT_SECRET || 'secret', { expiresIn: '1d' }); +} + +export function verifyToken(token) { + try { + return jwt.verify(token, process.env.JWT_SECRET || 'secret'); + } catch (error) { + return null; + } +} diff --git a/src/lib/prisma.js b/src/lib/prisma.js new file mode 100644 index 0000000..1bf7925 --- /dev/null +++ b/src/lib/prisma.js @@ -0,0 +1,13 @@ +import { PrismaClient } from '@prisma/client' + +const prismaClientSingleton = () => { + return new PrismaClient() +} + +const globalForPrisma = globalThis + +const prisma = globalForPrisma.prisma ?? prismaClientSingleton() + +export default prisma + +if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma