From d56d1c193b913d2e961947b71bb7eca484837927 Mon Sep 17 00:00:00 2001 From: dikapratana Date: Fri, 9 Jan 2026 13:17:13 +0700 Subject: [PATCH] initial code --- .gitignore | 25 + README.md | 73 + eslint.config.js | 23 + index.html | 13 + package-lock.json | 4396 +++++++++++++++++ package.json | 44 + public/vite.svg | 1 + src/App.css | 65 + src/App.tsx | 22 + src/assets/images/auto.png | Bin 0 -> 15271 bytes src/assets/images/contrast.png | Bin 0 -> 19813 bytes src/assets/images/fan.png | Bin 0 -> 13079 bytes src/assets/images/room.avif | Bin 0 -> 104574 bytes src/assets/images/swing.png | Bin 0 -> 11146 bytes src/assets/react.svg | 1 + src/components/layout/auth.layout.tsx | 11 + .../layout/main-navigation.layout.tsx | 11 + src/components/layout/main.layout.tsx | 9 + src/components/layout/navigation.layout.tsx | 77 + .../bottom-navigation/bottom-navigation.tsx | 36 + src/components/ui/card/index.tsx | 51 + src/components/ui/progress-bar/index.tsx | 55 + src/components/ui/switch/index.tsx | 52 + src/constants/env.ts | 5 + src/constants/images.ts | 13 + src/features/analysis/index.tsx | 101 + src/features/analysis/utils.ts | 14 + src/features/device/add/index.tsx | 150 + src/features/device/add/utils.ts | 39 + .../device/detail/components/configs.tsx | 42 + .../device/detail/components/controll.tsx | 70 + src/features/device/detail/index.tsx | 31 + src/features/device/pairing/index.tsx | 89 + src/features/device/pairing/utils.ts | 39 + src/features/home/hooks/mutations.ts | 9 + src/features/home/hooks/queries.ts | 60 + src/features/home/index.tsx | 11 + src/features/home/sections/devices.tsx | 152 + src/features/home/sections/weather.tsx | 15 + src/features/rooms/index.tsx | 72 + src/features/settings/index.tsx | 61 + src/index.css | 13 + src/main.tsx | 10 + src/pages/analysis/index.tsx | 18 + src/pages/device/add.tsx | 15 + src/pages/device/detail.tsx | 19 + src/pages/device/pairing.tsx | 14 + src/pages/home/index.tsx | 10 + src/pages/rooms/index.tsx | 19 + src/pages/settings/index.tsx | 15 + src/repositories/device/index.ts | 11 + src/repositories/device/types.d.ts | 46 + src/router/app-navigation.route.tsx | 24 + src/router/app.route.ts | 34 + src/router/auth.route.tsx | 12 + src/router/index.ts | 28 + src/router/root.tsx | 9 + src/types/router.d.ts | 7 + src/utils/axios.ts | 68 + src/utils/classname.ts | 6 + src/utils/data.ts | 13 + src/utils/signer.ts | 81 + src/utils/storage.ts | 41 + src/utils/types.d.ts | 9 + tsconfig.app.json | 28 + tsconfig.json | 7 + tsconfig.node.json | 26 + vite.config.ts | 8 + 68 files changed, 6529 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/vite.svg create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/assets/images/auto.png create mode 100644 src/assets/images/contrast.png create mode 100644 src/assets/images/fan.png create mode 100644 src/assets/images/room.avif create mode 100644 src/assets/images/swing.png create mode 100644 src/assets/react.svg create mode 100644 src/components/layout/auth.layout.tsx create mode 100644 src/components/layout/main-navigation.layout.tsx create mode 100644 src/components/layout/main.layout.tsx create mode 100644 src/components/layout/navigation.layout.tsx create mode 100644 src/components/ui/bottom-navigation/bottom-navigation.tsx create mode 100644 src/components/ui/card/index.tsx create mode 100644 src/components/ui/progress-bar/index.tsx create mode 100644 src/components/ui/switch/index.tsx create mode 100644 src/constants/env.ts create mode 100644 src/constants/images.ts create mode 100644 src/features/analysis/index.tsx create mode 100644 src/features/analysis/utils.ts create mode 100644 src/features/device/add/index.tsx create mode 100644 src/features/device/add/utils.ts create mode 100644 src/features/device/detail/components/configs.tsx create mode 100644 src/features/device/detail/components/controll.tsx create mode 100644 src/features/device/detail/index.tsx create mode 100644 src/features/device/pairing/index.tsx create mode 100644 src/features/device/pairing/utils.ts create mode 100644 src/features/home/hooks/mutations.ts create mode 100644 src/features/home/hooks/queries.ts create mode 100644 src/features/home/index.tsx create mode 100644 src/features/home/sections/devices.tsx create mode 100644 src/features/home/sections/weather.tsx create mode 100644 src/features/rooms/index.tsx create mode 100644 src/features/settings/index.tsx create mode 100644 src/index.css create mode 100644 src/main.tsx create mode 100644 src/pages/analysis/index.tsx create mode 100644 src/pages/device/add.tsx create mode 100644 src/pages/device/detail.tsx create mode 100644 src/pages/device/pairing.tsx create mode 100644 src/pages/home/index.tsx create mode 100644 src/pages/rooms/index.tsx create mode 100644 src/pages/settings/index.tsx create mode 100644 src/repositories/device/index.ts create mode 100644 src/repositories/device/types.d.ts create mode 100644 src/router/app-navigation.route.tsx create mode 100644 src/router/app.route.ts create mode 100644 src/router/auth.route.tsx create mode 100644 src/router/index.ts create mode 100644 src/router/root.tsx create mode 100644 src/types/router.d.ts create mode 100644 src/utils/axios.ts create mode 100644 src/utils/classname.ts create mode 100644 src/utils/data.ts create mode 100644 src/utils/signer.ts create mode 100644 src/utils/storage.ts create mode 100644 src/utils/types.d.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7ceb59f --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2e7761 --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..5e6b472 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..fa4f60a --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + smart-home + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f57d32e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4396 @@ +{ + "name": "smart-home", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "smart-home", + "version": "0.0.0", + "dependencies": { + "@tailwindcss/vite": "^4.1.18", + "@tanstack/react-query": "^5.90.16", + "@tanstack/react-router": "^1.144.0", + "@tanstack/react-router-devtools": "^1.144.0", + "axios": "^1.13.2", + "clsx": "^2.1.1", + "crypto-js": "^4.2.0", + "framer-motion": "^12.24.0", + "lucide-react": "^0.562.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.18", + "uuid": "^13.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/crypto-js": "^4.2.2", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz", + "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz", + "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz", + "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz", + "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz", + "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz", + "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz", + "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz", + "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz", + "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz", + "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz", + "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz", + "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz", + "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz", + "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz", + "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz", + "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz", + "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz", + "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz", + "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz", + "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz", + "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz", + "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "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.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz", + "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "tailwindcss": "4.1.18" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tanstack/history": { + "version": "1.141.0", + "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.141.0.tgz", + "integrity": "sha512-LS54XNyxyTs5m/pl1lkwlg7uZM3lvsv2FIIV1rsJgnfwVCnI+n4ZGZ2CcjNT13BPu/3hPP+iHmliBSscJxW5FQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.90.16", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.16.tgz", + "integrity": "sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.90.16", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.16.tgz", + "integrity": "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.90.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-router": { + "version": "1.144.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.144.0.tgz", + "integrity": "sha512-GmRyIGmHtGj3VLTHXepIwXAxTcHyL5W7Vw7O1CnVEtFxQQWKMVOnWgI7tPY6FhlNwMKVb3n0mPFWz9KMYyd2GA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@tanstack/history": "1.141.0", + "@tanstack/react-store": "^0.8.0", + "@tanstack/router-core": "1.144.0", + "isbot": "^5.1.22", + "tiny-invariant": "^1.3.3", + "tiny-warning": "^1.0.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=18.0.0 || >=19.0.0", + "react-dom": ">=18.0.0 || >=19.0.0" + } + }, + "node_modules/@tanstack/react-router-devtools": { + "version": "1.144.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.144.0.tgz", + "integrity": "sha512-nstjZvZbOM4U0/Hzi82rtsP1DsR2tfigBidK+WuaDRVVstBsnwVor3DQXTGY5CcfgIiMI3eKzI17VOy3SQDDoQ==", + "license": "MIT", + "dependencies": { + "@tanstack/router-devtools-core": "1.144.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-router": "^1.144.0", + "@tanstack/router-core": "^1.144.0", + "react": ">=18.0.0 || >=19.0.0", + "react-dom": ">=18.0.0 || >=19.0.0" + }, + "peerDependenciesMeta": { + "@tanstack/router-core": { + "optional": true + } + } + }, + "node_modules/@tanstack/react-store": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.8.0.tgz", + "integrity": "sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==", + "license": "MIT", + "dependencies": { + "@tanstack/store": "0.8.0", + "use-sync-external-store": "^1.6.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/router-core": { + "version": "1.144.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.144.0.tgz", + "integrity": "sha512-6oVERtK9XDHCP4XojgHsdHO56ZSj11YaWjF5g/zw39LhyA6Lx+/X86AEIHO4y0BUrMQaJfcjdAQMVSAs6Vjtdg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@tanstack/history": "1.141.0", + "@tanstack/store": "^0.8.0", + "cookie-es": "^2.0.0", + "seroval": "^1.4.1", + "seroval-plugins": "^1.4.0", + "tiny-invariant": "^1.3.3", + "tiny-warning": "^1.0.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/router-devtools-core": { + "version": "1.144.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.144.0.tgz", + "integrity": "sha512-rbpQn1aHUtcfY3U3SyJqOZRqDu0a2uPK+TE2CH50HieJApmCuNKj5RsjVQYHgwiFFvR0w0LUmueTnl2X2hiWTg==", + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1", + "goober": "^2.1.16", + "tiny-invariant": "^1.3.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/router-core": "^1.144.0", + "csstype": "^3.0.10", + "solid-js": ">=1.9.5" + }, + "peerDependenciesMeta": { + "csstype": { + "optional": true + } + } + }, + "node_modules/@tanstack/store": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.8.0.tgz", + "integrity": "sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/crypto-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", + "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", + "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.51.0.tgz", + "integrity": "sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/type-utils": "8.51.0", + "@typescript-eslint/utils": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.51.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.51.0.tgz", + "integrity": "sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.51.0.tgz", + "integrity": "sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.51.0", + "@typescript-eslint/types": "^8.51.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.51.0.tgz", + "integrity": "sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.51.0.tgz", + "integrity": "sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.51.0.tgz", + "integrity": "sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0", + "@typescript-eslint/utils": "8.51.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.51.0.tgz", + "integrity": "sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.51.0.tgz", + "integrity": "sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.51.0", + "@typescript-eslint/tsconfig-utils": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", + "debug": "^4.3.4", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.51.0.tgz", + "integrity": "sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.51.0.tgz", + "integrity": "sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.51.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.53", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "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.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.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==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "dev": true, + "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/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", + "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT", + "peer": true + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": 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/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/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/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "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.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "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/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "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.24.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.24.0.tgz", + "integrity": "sha512-ggTMRkIDPc76lHmM+dRT1MmVfFV6t/y+jkWjWuzR7FG5xRvnAAl/5wFPjzSkLE8Nu5E5uIQRCNxmIXtWJVo6XQ==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.24.0", + "motion-utils": "^12.23.28", + "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/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/goober": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.18.tgz", + "integrity": "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, + "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-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isbot": { + "version": "5.1.32", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.32.tgz", + "integrity": "sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==", + "license": "Unlicense", + "engines": { + "node": ">=18" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "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.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "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/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "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/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.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/motion-dom": { + "version": "12.24.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.24.0.tgz", + "integrity": "sha512-RD2kZkFd/GH4fITI8IJvypGgn0vIu5vkrJaXIAkYqORGs5P0CKDHKNvswmoY1H+tbUAOPSh6VtUqoAmc/3Gvig==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.28" + } + }, + "node_modules/motion-utils": { + "version": "12.23.28", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.28.tgz", + "integrity": "sha512-0W6cWd5Okoyf8jmessVK3spOmbyE0yTdNKujHctHH9XdAE4QDuZ1/LjSXC68rrhsJU+TkzXURC5OdSWh9ibOwQ==", + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz", + "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.54.0", + "@rollup/rollup-android-arm64": "4.54.0", + "@rollup/rollup-darwin-arm64": "4.54.0", + "@rollup/rollup-darwin-x64": "4.54.0", + "@rollup/rollup-freebsd-arm64": "4.54.0", + "@rollup/rollup-freebsd-x64": "4.54.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.54.0", + "@rollup/rollup-linux-arm-musleabihf": "4.54.0", + "@rollup/rollup-linux-arm64-gnu": "4.54.0", + "@rollup/rollup-linux-arm64-musl": "4.54.0", + "@rollup/rollup-linux-loong64-gnu": "4.54.0", + "@rollup/rollup-linux-ppc64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-musl": "4.54.0", + "@rollup/rollup-linux-s390x-gnu": "4.54.0", + "@rollup/rollup-linux-x64-gnu": "4.54.0", + "@rollup/rollup-linux-x64-musl": "4.54.0", + "@rollup/rollup-openharmony-arm64": "4.54.0", + "@rollup/rollup-win32-arm64-msvc": "4.54.0", + "@rollup/rollup-win32-ia32-msvc": "4.54.0", + "@rollup/rollup-win32-x64-gnu": "4.54.0", + "@rollup/rollup-win32-x64-msvc": "4.54.0", + "fsevents": "~2.3.2" + } + }, + "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/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/seroval": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", + "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/seroval-plugins": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.4.2.tgz", + "integrity": "sha512-X7p4MEDTi+60o2sXZ4bnDBhgsUYDSkQEvzYZuJyFqWg9jcoPsHts5nrg5O956py2wyt28lUrBxk0M0/wU8URpA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/solid-js": { + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.10.tgz", + "integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.0", + "seroval": "~1.3.0", + "seroval-plugins": "~1.3.0" + } + }, + "node_modules/solid-js/node_modules/seroval": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", + "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/solid-js/node_modules/seroval-plugins": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz", + "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, + "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/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "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-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.51.0.tgz", + "integrity": "sha512-jh8ZuM5oEh2PSdyQG9YAEM1TCGuWenLSuSUhf/irbVUNW9O5FhbFVONviN2TgMTBnUmyHv7E56rYnfLZK6TkiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.51.0", + "@typescript-eslint/parser": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0", + "@typescript-eslint/utils": "8.51.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/uuid": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vite": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d062af3 --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "name": "smart-home", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "host": "vite --host", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@tailwindcss/vite": "^4.1.18", + "@tanstack/react-query": "^5.90.16", + "@tanstack/react-router": "^1.144.0", + "@tanstack/react-router-devtools": "^1.144.0", + "axios": "^1.13.2", + "clsx": "^2.1.1", + "crypto-js": "^4.2.0", + "framer-motion": "^12.24.0", + "lucide-react": "^0.562.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.18", + "uuid": "^13.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/crypto-js": "^4.2.2", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } +} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..e844826 --- /dev/null +++ b/src/App.css @@ -0,0 +1,65 @@ +@keyframes ringStep1 { + 0% { + border-color: transparent; + } + 25%, + 100% { + border-color: rgba(255, 255, 255, 0.4); + } +} + +@keyframes ringStep2 { + 0%, + 25% { + border-color: transparent; + } + 50%, + 100% { + border-color: rgba(255, 255, 255, 0.4); + } +} + +@keyframes ringStep3 { + 0%, + 50% { + border-color: transparent; + } + 75%, + 100% { + border-color: rgba(255, 255, 255, 0.4); + } +} + +/* Chrome, Edge, Safari */ +::-webkit-scrollbar { + width: 6px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.25); + border-radius: 999px; +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.4); +} + +/* Firefox */ +* { + scrollbar-width: thin; + scrollbar-color: rgba(255,255,255,0.25) transparent; +} + +.scrollbar-none { + -ms-overflow-style: none; /* IE & Edge */ + scrollbar-width: none; /* Firefox */ +} + +.scrollbar-none::-webkit-scrollbar { + display: none; /* Chrome, Safari */ +} + diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..146e516 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,22 @@ +import "./App.css"; +import { RouterProvider } from "@tanstack/react-router"; +import { router } from "./router"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, +}); + +function App() { + return ( + + + + ); +} + +export default App; diff --git a/src/assets/images/auto.png b/src/assets/images/auto.png new file mode 100644 index 0000000000000000000000000000000000000000..0bebfbaaaf022c6b61ce6ea6263c8568b2dc33bc GIT binary patch literal 15271 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 MvA)t|?EdKg17zHl!TQgM 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�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 literal 0 HcmV?d00001 diff --git a/src/assets/images/fan.png b/src/assets/images/fan.png new file mode 100644 index 0000000000000000000000000000000000000000..4b151bd43dc956aaa979157adb22ae074d06cbfb GIT binary patch literal 13079 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 Ts=fkWYJqU3c#{`KZvXusa!}x1 literal 0 HcmV?d00001 diff --git a/src/assets/images/room.avif b/src/assets/images/room.avif new file mode 100644 index 0000000000000000000000000000000000000000..6488cacc63dd8fe3f5a82d1f974ce1807dfd5bc4 GIT binary patch literal 104574 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
K6?647DZ#Sxu*&7 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

P=8wvNdu( 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 X%itu&W7E%1-@&YP-CMZ>qA;1cJX*m| literal 0 HcmV?d00001 diff --git a/src/assets/images/swing.png b/src/assets/images/swing.png new file mode 100644 index 0000000000000000000000000000000000000000..4124e247b760739a45d5e44578e723c988d98925 GIT binary patch literal 11146 zcmdsdcU05cv+p+v1nC0OtJ0(h(tA-s5fjtyJ(ga|q&kH~?_;9REY|6gY&z zM!^VErwF^?+Y!;8VctM=bhMIhkbk(BXNb2_aF|cQhQ1I0NB~Ha3-&RE>vOR!w;f_j zx0mOg9qd(}vfMe%agTe+xbnj;i-Um183A5aew!I9QpKz5bIqbBMaqz=lFS%Ip63GP zqRw8)+7%+)ygafjYb`V9Sh&1vAXW0}Z1-#!$GVRCXbq8XB2$93mpiG2M~4$}ljr0@ zILUfGxP^J@n%ZTQ47wGs>%rb6wOw$q?M^t#m1* z?Rqhr;^{#KfU_9lWZi!fY$01_KVdM0#q*$f@vZo)7xHqXkb511+VD1?PBQ0wYBGrB z8ZEV@i%b#3@9XB<0?epz+cb#f)~;`!P;9{NKL-u@qa~>&t$u_0 z>zW7s{!B|2VMbV$W4Q%>2Kjte7*j5Eb{Rp8WY2y14D7i1s4aNO>%w<)+X74AH8e%T zem;tT7l@3p@?F1I8agEiAp2*T)wKkmA`p=UkJy)a6Z7Z6>Cb%~c`sM+dep7>_s;-? z?fk?k+uOIMv)9?ZK+R*FMQwhJK)kIK>bpF@Fq}ok&ax}Ao(+$E?>(g0f!$9k06?Fz z13g79I2xWCYi683YVIE_0NSE|b`Rq1#&7eZ1yrsVwAim#%~`6F0~rDTt^5AP{zr;> ze|34@WdS=iAzz>(^ER=w7zga@@1|$#yNGr`4pwIkG8Ej@xsxi&X5k-v)}2Wa)QKaY zj7I&%N2rY{2M6)5`S=yBODgblC4WN_P19R%hf23jf-+l5$+imyzg^j1mAhB8{HrCD z$bCE)mc{Y!%zYa{_x8Q&h1aoHGcaT>v~WxQ8X)}-;n?d@^dK9GbKblyiYSlHo(z+$GFCl^S!-axtP6K)8j)(W=W{_-ABQ85)aW1cg z{)XJp3KD68F(h~Gqjur!3)?h9=FU^k9yK7&`v5FEZX$=$dFvnW9c2nv<$Zvgb+X>wIri;xL^h(@2ru(D z8T`dMph3Dm8JR=8O%xy&|9rp@%3OLfxaX~V&TU=p7}p4C^CdRpmojMQZ5Wxihiy zlLcYhn~~9AjQqkdRX2zK>!&%w_C*wIpj?3q9}cjb9G}b?{l+#zi9I@2hw~+ZeU=+f>2So(L|DOL#Hj zA+aCiy&1h8`anKyni+p;D}TPE1oG%K zGH1q*gh`IQl!yd(KmS)g zD=K`h5N|K$CcYTM5d9E_rW$heYhV_wfKi4x0-OwE&E`w^G&~aDjOW1|#iPhTh{2XC zaRBd)Pk=<$5g1714h|<+9sJrpZ6k^Z_mFJD>{91=Z2IKS!HQw}{4qjX+P31r7nlpX z3*%j0imZofX@-OR`azyOh8I7L55(J-G{a)TH*tXlFtia6R7T$qVwz_ZnYkNj_6iy! zOp4Y-#4lXbL*W!K(P~cd!O(f+K|sqO3sDj7A6(Grj^vGHZpxzti@fw=ZR*~>!MSm;cR=dFyly^~lY5exSU<6_+Fb7aK)!d`|zx z(&)EXo_xUY;@7$KB6F__yct=>5n!b)d&ED#JdH`9l|Ge!!j$v)m@}<;x z^{2Ne-Jt-iH*37sU@N)km?XIJ&3<>qpPJ{sao%a@T2>#$G8SEVIoSkC47+lLI-IfI z6I6Pm*JIc;Q%H-u<3doDfW^jwy2Ctyd}#OSJVT;|CMSgJY2@E=lDv7L9bK%HRh!bnRXfg&L=cV&cqh6tLafnaSuVvp?q|dXfZNEDxXe+IXGJD|m%QsHYLuasaBX;aObC&$XeP22$ zbxPXx*RD}dtAVZW0FYH2me$=(Wqu07K4|gX!Zp1xbV86u=_e=m?^K+F0WRvd5(+pT z1HLAKLWf2cpY;|kN@yu6cun<#}yv zz`QWlY6rTRIZ8*`Q^Rc*Re_kyEZtA69Vjch?A7(*3uyzuXs07Wbdk|OppyQ$%JAcb z>f~CYQm*-cB5GJ&t*s-_74&cqoaPBp`z>u_`+Z1;cGFogO!V+AiT=i9&n(CV{><4q z2d%cc0?090phbJ!@35L?jM7F6X(i6~sBa&=(QjHkbv*QfPS~dyJf=Jh`19lM0we7s zqmnAx$Ls-M$N#-0e$?N;>(rY5qH@#kGvv48Ag{H3$uaM}@5Ky-&hDcXP75+LXn{gl z@qWpVUHW0!fs~^XOi^+9J34q`DoAcDvd7)yWjXu8v10d3_K*!Oa3_}rHHcC5%Mn{_ zM;Z=)`?50}6>@+&ef20u;VIiK>l0PIw(2?jgy9%0i0 zKV^&~CrVDnhqkUCk8~lks{2#X0FeC2Q-+w(`r4M|S3!@fQ=rJPu8AglS2kSW0xl8U zO|NJ&<|65dna#kH|6ciSP+aS?C6Z+KYZ!FR&=s#P38>V z8$F`lDiU(pjy)$Vglo^$(pBKFh_>l&FW!1@04T54V{U7D^8yk33^2U1$3NBzihDvW3e*OT?oBaP&1COEIBjM9@;AWnq?!1%AkafsIl@85

{bgSfzS< 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 SLImHN1(2pzCJh%olKu^?y_x9% literal 0 HcmV?d00001 diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/layout/auth.layout.tsx b/src/components/layout/auth.layout.tsx new file mode 100644 index 0000000..96bca18 --- /dev/null +++ b/src/components/layout/auth.layout.tsx @@ -0,0 +1,11 @@ +import { Outlet } from '@tanstack/react-router' + +export default function AuthLayout() { + return ( +

+
+ +
+
+ ) +} diff --git a/src/components/layout/main-navigation.layout.tsx b/src/components/layout/main-navigation.layout.tsx new file mode 100644 index 0000000..b06511b --- /dev/null +++ b/src/components/layout/main-navigation.layout.tsx @@ -0,0 +1,11 @@ +import { Outlet } from "@tanstack/react-router"; +import BottomNavigation from "../ui/bottom-navigation/bottom-navigation"; + +export default function MainNavigationLayout() { + return ( +
+ + +
+ ); +} diff --git a/src/components/layout/main.layout.tsx b/src/components/layout/main.layout.tsx new file mode 100644 index 0000000..ad695b5 --- /dev/null +++ b/src/components/layout/main.layout.tsx @@ -0,0 +1,9 @@ +import { Outlet } from "@tanstack/react-router"; + +export default function MainLayout() { + return ( +
+ +
+ ); +} diff --git a/src/components/layout/navigation.layout.tsx b/src/components/layout/navigation.layout.tsx new file mode 100644 index 0000000..fd10b85 --- /dev/null +++ b/src/components/layout/navigation.layout.tsx @@ -0,0 +1,77 @@ +import { ChevronLeft } from "lucide-react"; +import { useRouter } from "@tanstack/react-router"; +import { cn } from "../../utils/classname"; + +interface NavigationLayoutProps { + children: React.ReactNode; + isBack?: boolean; + backText?: string; + backClassName?: string; + className?: string; + mainClassName?: string; + title?: string | React.ReactNode; + isBottomNav?: boolean; + action?: React.ReactNode; + bgImage?: string; +} + +export default function NavigationLayout({ + children, + isBack, + className, + backClassName, + isBottomNav, + title, + action, + mainClassName, + bgImage, + backText = 'back' +}: NavigationLayoutProps) { + const router = useRouter(); + + + return ( +
+ { bgImage &&
} + {title && ( +
+ {title} +
+ )} +
+ {isBack && ( + router.history.back()} + className={cn( + "flex justify-start shrink-0 items-center gap-2 text-base font-semibold cursor-pointer w-fit p-4", + backClassName + )} + > + + {backText} + + )} + {action &&
{action}
} +
+
+ {children} +
+
+
+ ); +} diff --git a/src/components/ui/bottom-navigation/bottom-navigation.tsx b/src/components/ui/bottom-navigation/bottom-navigation.tsx new file mode 100644 index 0000000..13a72d1 --- /dev/null +++ b/src/components/ui/bottom-navigation/bottom-navigation.tsx @@ -0,0 +1,36 @@ +import { Link, useRouterState } from "@tanstack/react-router"; +import { BarChart3, DoorOpen, Home, Settings } from "lucide-react"; +import { cn } from "../../../utils/classname"; + + +export default function BottomNavigation() { + const location = useRouterState({ + select: (state) => state.location, +}) + +console.log(location.pathname) + + const tabs = [ + { path: "/", icon: Home, label: "Dashboard" }, + { path: "/analysis", icon: BarChart3, label: "analysis" }, + { path: "/rooms", icon: DoorOpen, label: "Rooms" }, + { path: "/settings", icon: Settings, label: "Settings" }, + ]; + + return ( +
+
+ {tabs.map((tab, key) => ( + + + {tab.label} + + ))} +
+
+ ); +} diff --git a/src/components/ui/card/index.tsx b/src/components/ui/card/index.tsx new file mode 100644 index 0000000..e546e20 --- /dev/null +++ b/src/components/ui/card/index.tsx @@ -0,0 +1,51 @@ +import { Link } from "@tanstack/react-router"; +import { cn } from "../../../utils/classname"; +import { ChevronRight } from "lucide-react"; + +interface CardProps { + children: React.ReactNode; + className?: string; + title?: string; + to?: string; + cardTo?: string; +} + +export default function Card({ + children, + className, + title, + to, + cardTo, +}: CardProps) { + const containerClassName = cn( + "bg-white rounded-2xl p-3 shadow-sm shadow-neutral-200 border border-gray-100", + className + ); + + const content = ( + <> +
+ {title && ( +

{title}

+ )} + {to && ( + + {" "} + {" "} + + )} +
+ {children} + + ); + + if (cardTo) { + return ( + + {content} + + ); + } + + return
{content}
; +} diff --git a/src/components/ui/progress-bar/index.tsx b/src/components/ui/progress-bar/index.tsx new file mode 100644 index 0000000..6b6114c --- /dev/null +++ b/src/components/ui/progress-bar/index.tsx @@ -0,0 +1,55 @@ +interface ProgressBarProps { + title?: string; + subTitle?: string; + color?: string; + icon?: React.ReactNode; + value?: number; + className?: string; +} + +export default function ProgressBar({ + title, + subTitle, + color = "#ff6900", + icon, + className, + value = 0, +}: ProgressBarProps) { + return ( +
+
+ {icon && ( +
+ {icon} +
+ )} +
+
+ {title && ( +

+ {title} +

+ )} + {subTitle && ( +

+ {subTitle} +

+ )} +
+
+
+
+
+
+
+ ); +} diff --git a/src/components/ui/switch/index.tsx b/src/components/ui/switch/index.tsx new file mode 100644 index 0000000..9043283 --- /dev/null +++ b/src/components/ui/switch/index.tsx @@ -0,0 +1,52 @@ +import * as React from 'react' +import { cn } from '../../../utils/classname' + +interface SwitchProps { + checked?: boolean + defaultChecked?: boolean + onChange?: (checked: boolean) => void + disabled?: boolean + className?: string +} + +export function Switch({ + checked, + defaultChecked = false, + onChange, + disabled, + className, +}: SwitchProps) { + const [internal, setInternal] = React.useState(defaultChecked) + const isControlled = checked !== undefined + const value = isControlled ? checked : internal + + const toggle = () => { + if (disabled) return + const next = !value + if (!isControlled) setInternal(next) + onChange?.(next) + } + + return ( + + ) +} diff --git a/src/constants/env.ts b/src/constants/env.ts new file mode 100644 index 0000000..999d7d0 --- /dev/null +++ b/src/constants/env.ts @@ -0,0 +1,5 @@ +export const ENV = { + apiUrl: import.meta.env.VITE_API_URL, + apiKey: import.meta.env.VITE_SIGN_KEY, + secretKey: import.meta.env.VITE_SIGN_SECRET_KEY, +} \ No newline at end of file diff --git a/src/constants/images.ts b/src/constants/images.ts new file mode 100644 index 0000000..09557f4 --- /dev/null +++ b/src/constants/images.ts @@ -0,0 +1,13 @@ +import Sun from "../assets/images/contrast.png"; +import Rooms from "../assets/images/room.avif"; +import ModeAuto from "../assets/images/auto.png"; +import ModeFan from "../assets/images/fan.png"; +import ModeSwing from "../assets/images/swing.png"; + +export const IMAGES = { + Sun, + Rooms, + ModeAuto, + ModeFan, + ModeSwing +}; diff --git a/src/features/analysis/index.tsx b/src/features/analysis/index.tsx new file mode 100644 index 0000000..eab7ded --- /dev/null +++ b/src/features/analysis/index.tsx @@ -0,0 +1,101 @@ +import { motion } from "framer-motion"; +import { useState } from "react"; +import Card from "../../components/ui/card"; +import { BarChart2, RefreshCwIcon, Thermometer } from "lucide-react"; +import ProgressBar from "../../components/ui/progress-bar"; + +const tabs = [ + { id: 0, label: "January" }, + { id: 1, label: "February" }, + { id: 2, label: "March" }, + { id: 3, label: "April" }, + { id: 4, label: "May" }, + { id: 5, label: "June" }, + { id: 6, label: "July" }, + { id: 7, label: "August" }, + { id: 8, label: "September" }, + { id: 9, label: "October" }, + { id: 10, label: "November" }, + { id: 11, label: "December" }, +]; + +export default function AnalysisFeature() { + const [active, setActive] = useState(0); + + const handleChange = (index: number) => { + setActive(index); + }; + + return ( +
+ {/* TABS */} +
+ {tabs.map((tab, i) => ( + + ))} +
+
+ +
+
+ +
+
+

+ 385 kWh +

+

Costs: $22.31

+
+
+
+ + + + + + + } + /> + } + /> + +
+
+ ); +} diff --git a/src/features/analysis/utils.ts b/src/features/analysis/utils.ts new file mode 100644 index 0000000..8fac6ce --- /dev/null +++ b/src/features/analysis/utils.ts @@ -0,0 +1,14 @@ +export const contentVariants = { + enter: (direction: number) => ({ + x: direction > 0 ? "100%" : "-100%", + opacity: 0, + }), + center: { + x: 0, + opacity: 1, + }, + exit: (direction: number) => ({ + x: direction > 0 ? "-100%" : "100%", + opacity: 0, + }), +}; \ No newline at end of file diff --git a/src/features/device/add/index.tsx b/src/features/device/add/index.tsx new file mode 100644 index 0000000..33432cf --- /dev/null +++ b/src/features/device/add/index.tsx @@ -0,0 +1,150 @@ +import { useState } from "react"; +import { + getDevices, + saveDevices, + isDuplicateDevice, +} from "../../../utils/storage"; +import { useNavigate } from "@tanstack/react-router"; + +const initialState: DeviceData = { + towerNumber: "", + floorName: "", + unitNumber: "", + roomName: "", + deviceName: "", + deviceType: "", + code: "", + payload: "", + active: true, + status: false, +}; + +export default function AddDeviceFeature() { + const [form, setForm] = useState(initialState); + const navigate = useNavigate(); + + function handleChange( + e: React.ChangeEvent + ) { + const { name, value } = e.target; + setForm((prev) => ({ ...prev, [name]: value })); + } + + function handleSubmit(e: React.FormEvent) { + e.preventDefault(); + + const devices = getDevices(); + + const deviceToSave: DeviceData = { + ...form, + deviceLabel: form.deviceLabel || `${form.roomName} ${form.deviceName}`, + }; + + if (isDuplicateDevice(devices, deviceToSave)) { + return; + } + + saveDevices([...devices, deviceToSave]); + setForm(initialState); + navigate({ to: '/' }); + } + + return ( +
+

Add Device

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ ); +} diff --git a/src/features/device/add/utils.ts b/src/features/device/add/utils.ts new file mode 100644 index 0000000..7a1b934 --- /dev/null +++ b/src/features/device/add/utils.ts @@ -0,0 +1,39 @@ +type Point = { x: number; y: number } + +function distance(a: Point, b: Point) { + return Math.hypot(a.x - b.x, a.y - b.y) +} + +export function generateUniquePoints( + count: number, + minRadius: number, + maxRadius: number, + minDistance: number +): Point[] { + const points: Point[] = [] + let attempts = 0 + + while (points.length < count && attempts < 500) { + attempts++ + + const angle = Math.random() * Math.PI * 2 + const r = + minRadius + + Math.sqrt(Math.random()) * (maxRadius - minRadius) + + const point = { + x: Math.cos(angle) * r, + y: Math.sin(angle) * r, + } + + const isTooClose = points.some( + (p) => distance(p, point) < minDistance + ) + + if (!isTooClose) { + points.push(point) + } + } + + return points +} diff --git a/src/features/device/detail/components/configs.tsx b/src/features/device/detail/components/configs.tsx new file mode 100644 index 0000000..6e1b416 --- /dev/null +++ b/src/features/device/detail/components/configs.tsx @@ -0,0 +1,42 @@ +import { Calendar, LineChart, MoreHorizontal, Timer } from "lucide-react"; + +export default function Configs() { + const configList = [ + { + id: 1, + icon: , + name: "Timer", + }, + { + id: 2, + icon: , + name: "Schedule", + }, + { + id: 3, + icon: , + name: "Graph", + }, + { + id: 3, + icon: , + name: "More", + }, + ]; + + return ( +
+ {configList?.map((item, index) => ( +
+
+ {item.icon} +
+

{item.name}

+
+ ))} +
+ ); +} diff --git a/src/features/device/detail/components/controll.tsx b/src/features/device/detail/components/controll.tsx new file mode 100644 index 0000000..0c56b31 --- /dev/null +++ b/src/features/device/detail/components/controll.tsx @@ -0,0 +1,70 @@ +import { ChevronRight, Minus, Plug, Plus } from "lucide-react"; +import { IMAGES } from "../../../../constants/images"; +import { useState } from "react"; +import { cn } from "../../../../utils/classname"; + +export default function Controll() { + const [suhu, setSuhu] = useState(23); + const [mode, setMode] = useState(1); + + const modeList = [ + { + id: 1, + icon: IMAGES.ModeAuto, + name: "Mode", + }, + { + id: 2, + icon: IMAGES.ModeFan, + name: "Fan", + }, + { + id: 3, + icon: IMAGES.ModeSwing, + name: "Swing", + }, + ]; + + return ( +
+
+ +
+

{suhu}°

+

Turn On

+
+ +
+
+ {modeList?.map((item, index) => ( + + ))} +
+
+ +

220 kWh

+ +
+
+ ); +} diff --git a/src/features/device/detail/index.tsx b/src/features/device/detail/index.tsx new file mode 100644 index 0000000..dee648a --- /dev/null +++ b/src/features/device/detail/index.tsx @@ -0,0 +1,31 @@ +import { Wind } from "lucide-react"; +import Card from "../../../components/ui/card"; +import { Switch } from "../../../components/ui/switch"; +import Controll from "./components/controll"; +import Configs from "./components/configs"; + +export default function DetailDeviceFeature() { + return ( +
+ +
+
+
+ +
+
+

+ Air Conditioner +

+

Entrance - Off

+
+
+ + +
+
+ + +
+ ); +} diff --git a/src/features/device/pairing/index.tsx b/src/features/device/pairing/index.tsx new file mode 100644 index 0000000..66420e7 --- /dev/null +++ b/src/features/device/pairing/index.tsx @@ -0,0 +1,89 @@ +import { Bluetooth, Lightbulb, SpeakerIcon, Tv, Wind } from "lucide-react"; +import { useMemo } from "react"; +import { generateUniquePoints } from "./utils"; +import { useNavigate } from "@tanstack/react-router"; + +export default function AddDevice() { + const navigate = useNavigate(); + + const devices = [ + { + id: 1, + icon: , + name: "Air Conditioner", + }, + { + id: 2, + icon: , + name: "Speaker", + }, + { + id: 3, + icon: , + name: "Smart TV", + }, + { + id: 4, + icon: , + name: "Ceiling Light", + }, + ]; + + const positions = useMemo( + () => + generateUniquePoints( + 5, // jumlah device + 60, // radius area orange (inner) + 160, // batas spiral (outer) + 80 // ↔ minimal jarak antar device + ), + [] + ); + + return ( +
+
+

+ Add new device +

+

Searching devices...

+
+
+
+
+
+
+ +
+
+
+
+ + {devices.map((device, i) => ( + + ))} +
+ +
+

Tap on device to add

+
+
+ ); +} diff --git a/src/features/device/pairing/utils.ts b/src/features/device/pairing/utils.ts new file mode 100644 index 0000000..7a1b934 --- /dev/null +++ b/src/features/device/pairing/utils.ts @@ -0,0 +1,39 @@ +type Point = { x: number; y: number } + +function distance(a: Point, b: Point) { + return Math.hypot(a.x - b.x, a.y - b.y) +} + +export function generateUniquePoints( + count: number, + minRadius: number, + maxRadius: number, + minDistance: number +): Point[] { + const points: Point[] = [] + let attempts = 0 + + while (points.length < count && attempts < 500) { + attempts++ + + const angle = Math.random() * Math.PI * 2 + const r = + minRadius + + Math.sqrt(Math.random()) * (maxRadius - minRadius) + + const point = { + x: Math.cos(angle) * r, + y: Math.sin(angle) * r, + } + + const isTooClose = points.some( + (p) => distance(p, point) < minDistance + ) + + if (!isTooClose) { + points.push(point) + } + } + + return points +} diff --git a/src/features/home/hooks/mutations.ts b/src/features/home/hooks/mutations.ts new file mode 100644 index 0000000..86ddff8 --- /dev/null +++ b/src/features/home/hooks/mutations.ts @@ -0,0 +1,9 @@ +import { useMutation } from "@tanstack/react-query"; +import { postCommandStatus } from "../../../repositories/device"; + +export function useDeviceCommand() { + return useMutation({ + mutationFn: (payload: DevicePayload) => + postCommandStatus(payload), + }); +} \ No newline at end of file diff --git a/src/features/home/hooks/queries.ts b/src/features/home/hooks/queries.ts new file mode 100644 index 0000000..a191669 --- /dev/null +++ b/src/features/home/hooks/queries.ts @@ -0,0 +1,60 @@ +import { useQueries } from "@tanstack/react-query"; +import { getDeviceStatus } from "../../../repositories/device"; +import { DEVICES_DATA } from "../../../utils/data"; +import { getMerchant } from "../../../utils/storage"; + +export function useDevices() { + const queries = useQueries({ + queries: DEVICES_DATA.map((device) => ({ + queryKey: [ + "device-status", + device.code, + device.roomName, + device.deviceType, + ], + queryFn: async () => { + const merchant = getMerchant(); + const params = { + merchantName: merchant, + floorName: device.floorName, + unitNumber: device.unitNumber, + deviceName: device.code, + roomName: device.roomName, + deviceType: device.deviceType, + commandType: "S", + towerNumber: device.towerNumber, + }; + const data = await getDeviceStatus(params); + + return { + ...device, + code: data.data.code, + deviceName: device.code, + status: + data.data.payload?.toLowerCase().includes("on") || + data.data.payload?.toLowerCase().includes("lock") || + data.data.payload?.toLowerCase().includes("Open") + ? true + : false, + } as unknown as Device; + }, + staleTime: 10_000, + retry: 1, + })), + }); + + const devices = queries + .map((q, index) => ({ + ...q.data, + isLoading: q.isLoading || q.isFetching, + isError: q.isError, + refetch: q.refetch, // 👈 per device + key: DEVICES_DATA[index].code, + })) + .filter((d) => !d?.isError); + + return { + data: devices as unknown as DeviceData[], + isLoading: queries.some((q) => q.isLoading), + }; +} diff --git a/src/features/home/index.tsx b/src/features/home/index.tsx new file mode 100644 index 0000000..f7283f8 --- /dev/null +++ b/src/features/home/index.tsx @@ -0,0 +1,11 @@ +import Devices from "./sections/devices"; +import Weather from "./sections/weather"; + +export default function HomeFeature() { + return ( + <> + + + + ); +} diff --git a/src/features/home/sections/devices.tsx b/src/features/home/sections/devices.tsx new file mode 100644 index 0000000..ce26736 --- /dev/null +++ b/src/features/home/sections/devices.tsx @@ -0,0 +1,152 @@ +import { Lightbulb, Minus, Plus, SpeakerIcon, Tv, Wind } from "lucide-react"; +import { Switch } from "../../../components/ui/switch"; +import { useNavigate } from "@tanstack/react-router"; +import Card from "../../../components/ui/card"; +import { useDevices } from "../hooks/queries"; +import { getDevices, getMerchant } from "../../../utils/storage"; +import { useDeviceCommand } from "../hooks/mutations"; + +export default function Devices() { + const navigate = useNavigate(); + const dataStorage = getDevices(); + const merchant = getMerchant(); + + const { data, isLoading } = useDevices(); + const { isPending, mutate } = useDeviceCommand(); + + const onSubmit = (payload: DeviceData, action = "") => { + mutate( + { + commandType: "C", + deviceName: payload.deviceName, + deviceType: payload.deviceType, + floorName: payload.floorName, + merchantName: merchant, + payload: { action }, + roomName: payload.roomName, + towerNumber: payload.towerNumber, + unitNumber: payload.unitNumber, + }, + { + onSuccess: () => { + payload?.refetch?.(); + }, + onError: () => { + payload?.refetch?.(); + }, + } + ); + }; + + const icons = [ + { icon: , label: "light" }, + { icon: , label: "tv" }, + { icon: , label: "power" }, + { icon: , label: "ac" }, + { icon: , label: "device" }, + ]; + + const datas = [...data, ...dataStorage]; + + console.log(data); + + return ( + <> +
+

+ Your Devices +

+
+ + {icons.map((item, idx) => ( + + ))} +
+
+
+
+ {!isLoading && + datas?.map((item, index) => ( + +
+
+ icon +
+ {!["FT1"].includes(item.deviceName) && ( + { + if (item.deviceName === "DL") { + onSubmit(item, item.status ? "Unlock" : "Lock"); + } else if (item.deviceName === "BL") { + onSubmit(item, item.status ? "Closed" : "Open"); + } else { + onSubmit(item, item.status ? "Off" : "On"); + } + }} + /> + )} +
+ +

+ {item?.deviceLabel} +

+

+ T{item?.towerNumber}/L{item?.floorName}/R{item?.roomName} +

+ + {item?.deviceName === "AC" && ( + <> +
+

+ {item.deviceName} +

+

+ Unit {item.unitNumber} +

+
+ +
+ + +
+ + )} +
+ ))} +
+
+ + ); +} diff --git a/src/features/home/sections/weather.tsx b/src/features/home/sections/weather.tsx new file mode 100644 index 0000000..7eae6c7 --- /dev/null +++ b/src/features/home/sections/weather.tsx @@ -0,0 +1,15 @@ +import { IMAGES } from "../../../constants/images"; + +export default function Weather() { + return ( +
+
+ +
+

Sunny, 24°C

+

Stockholm, Sweden

+
+
+
+ ); +} diff --git a/src/features/rooms/index.tsx b/src/features/rooms/index.tsx new file mode 100644 index 0000000..d9c997e --- /dev/null +++ b/src/features/rooms/index.tsx @@ -0,0 +1,72 @@ +import { Lightbulb, SpeakerIcon, Tv, Wind } from "lucide-react"; +import Card from "../../components/ui/card"; +import { Switch } from "../../components/ui/switch"; +import { cn } from "../../utils/classname"; +import { Link } from "@tanstack/react-router"; + +export default function RoomsFeature() { + const deviceData = [ + { + id: 1, + icon: , + name: "Air Conditioner", + device: 2, + }, + { + id: 2, + icon: , + name: "Speaker", + device: 2, + }, + { + id: 3, + icon: , + name: "Smart TV", + device: 2, + }, + { + id: 4, + icon: , + name: "Lamp", + device: 4, + }, + ]; + + return ( +
+
+

Living Room

+

4 Devices

+
+
+ {deviceData?.map((item, index) => { + return ( + +
+
+ {item.icon} +
+ +
+ + + {item.name} + +

{item.device} Devices

+
+ ); + })} +
+
+ ); +} diff --git a/src/features/settings/index.tsx b/src/features/settings/index.tsx new file mode 100644 index 0000000..e04260f --- /dev/null +++ b/src/features/settings/index.tsx @@ -0,0 +1,61 @@ +/* eslint-disable react-hooks/set-state-in-effect */ +import { useEffect, useState } from "react"; +import { + saveMerchant, + getMerchant, +} from "../../utils/storage"; + +export default function SettingsFeature() { + const [form, setForm] = useState(''); + const [loading, setLoading] = useState(false); + const merchant = getMerchant(); + + function handleChange( + e: React.ChangeEvent + ) { + const { value } = e.target; + setForm(value); + } + + function handleSubmit(e: React.FormEvent) { + e.preventDefault(); + setLoading(true); + saveMerchant(form) + setTimeout(() => { + setLoading(false); + }, 200); + + } + + useEffect(() => { + setForm(merchant || 'SAVY'); + },[merchant]); + + return ( +
+
+
+ + +
+ +
+ + +
+ ); +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..a4faf70 --- /dev/null +++ b/src/index.css @@ -0,0 +1,13 @@ +@import "tailwindcss"; + +@theme { + --color-gray-1: #f0f4f9; + --color-gray-2: #e2e7ed; + --color-gray-3: #f5f5f5; + --color-gray-4: #ecf1f5; + --color-gray-5: #8893a4; + --color-dark-1: #242d3e; + --color-dark-2: #4c5261; + --color-dark-3: #273041; + +} \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/pages/analysis/index.tsx b/src/pages/analysis/index.tsx new file mode 100644 index 0000000..7263aae --- /dev/null +++ b/src/pages/analysis/index.tsx @@ -0,0 +1,18 @@ +import { Info } from "lucide-react"; +import NavigationLayout from "../../components/layout/navigation.layout"; +import AnalysisFeature from "../../features/analysis"; + +export default function AnalysisPage() { + return ( + } + className="bg-linear-to-b from-gray-3 to-gray-3" + mainClassName="pt-2" + > + + + ); +} diff --git a/src/pages/device/add.tsx b/src/pages/device/add.tsx new file mode 100644 index 0000000..eaf3d91 --- /dev/null +++ b/src/pages/device/add.tsx @@ -0,0 +1,15 @@ +import NavigationLayout from "../../components/layout/navigation.layout"; +import AddDeviceFeature from "../../features/device/add"; + +export default function AddDevicePage() { + return ( + + + + ); +} diff --git a/src/pages/device/detail.tsx b/src/pages/device/detail.tsx new file mode 100644 index 0000000..215821e --- /dev/null +++ b/src/pages/device/detail.tsx @@ -0,0 +1,19 @@ +import { MoreVertical } from "lucide-react"; +import NavigationLayout from "../../components/layout/navigation.layout"; +import DetailDeviceFeature from "../../features/device/detail"; + +export default function DetailDevicdePage() { + return ( + } + className="from-gray-4 to-gray-5" + mainClassName="pt-2" + > + + + ); +} diff --git a/src/pages/device/pairing.tsx b/src/pages/device/pairing.tsx new file mode 100644 index 0000000..a466b69 --- /dev/null +++ b/src/pages/device/pairing.tsx @@ -0,0 +1,14 @@ +import NavigationLayout from "../../components/layout/navigation.layout"; +import AddDevice from "../../features/device/add"; + +export default function AddDevicePage() { + return ( + + + + ); +} diff --git a/src/pages/home/index.tsx b/src/pages/home/index.tsx new file mode 100644 index 0000000..fa6ebec --- /dev/null +++ b/src/pages/home/index.tsx @@ -0,0 +1,10 @@ +import NavigationLayout from "../../components/layout/navigation.layout"; +import HomeFeature from "../../features/home"; + +export default function HomePage() { + return ( + + + + ); +} diff --git a/src/pages/rooms/index.tsx b/src/pages/rooms/index.tsx new file mode 100644 index 0000000..1bf6248 --- /dev/null +++ b/src/pages/rooms/index.tsx @@ -0,0 +1,19 @@ +import { MoreVertical } from "lucide-react"; +import NavigationLayout from "../../components/layout/navigation.layout"; +import { IMAGES } from "../../constants/images"; +import RoomsFeature from "../../features/rooms"; + +export default function RoomsPage() { + + return ( + } + mainClassName="pt-2" + backClassName="text-white" + bgImage={IMAGES.Rooms} + > + + + ); +} diff --git a/src/pages/settings/index.tsx b/src/pages/settings/index.tsx new file mode 100644 index 0000000..fee821b --- /dev/null +++ b/src/pages/settings/index.tsx @@ -0,0 +1,15 @@ +import NavigationLayout from "../../components/layout/navigation.layout"; +import SettingsFeature from "../../features/settings"; + +export default function SettingsPage() { + return ( + + + + ); +} diff --git a/src/repositories/device/index.ts b/src/repositories/device/index.ts new file mode 100644 index 0000000..4e6d75a --- /dev/null +++ b/src/repositories/device/index.ts @@ -0,0 +1,11 @@ +import api from "../../utils/axios"; + +export const getDeviceStatus = async (params: DeviceParams): Promise => { + const res = await api.get('/device/v1/status', { params }); + return res.data; +}; + +export const postCommandStatus = async (payload: DevicePayload): Promise => { + const res = await api.post('/device/v1/command', payload); + return res.data; +}; \ No newline at end of file diff --git a/src/repositories/device/types.d.ts b/src/repositories/device/types.d.ts new file mode 100644 index 0000000..56a0c52 --- /dev/null +++ b/src/repositories/device/types.d.ts @@ -0,0 +1,46 @@ +type Device = { + status: string; + message: string; + data: DeviceData; +}; + +type DeviceData = { + floorName: string; + unitNumber: string; + deviceName: string; + roomName: string; + deviceType: string; + code: string; + towerNumber: string; + payload?: string; + deviceLabel?: string + deviceName?: string + active?: boolean + status?: boolean + refetch?: () => void + }; + +type DeviceParams = { + merchantName: string; + floorName: string; + unitNumber: string; + deviceName: string; + roomName: string; + deviceType: string; + commandType: string; + towerNumber: string; +}; + +type DevicePayload = { + commandType: string, + deviceName: string, + deviceType: string, + floorName: string, + merchantName: string, + payload: { + action: string + }, + roomName: string, + towerNumber: string, + unitNumber: string, +} \ No newline at end of file diff --git a/src/router/app-navigation.route.tsx b/src/router/app-navigation.route.tsx new file mode 100644 index 0000000..8236029 --- /dev/null +++ b/src/router/app-navigation.route.tsx @@ -0,0 +1,24 @@ +import { createRoute, lazyRouteComponent } from "@tanstack/react-router"; +import { Route as RootRoute } from "./root"; + +export const AppNavigationRoute = createRoute({ + getParentRoute: () => RootRoute, + id: "app", + component: lazyRouteComponent( + () => import("../components/layout/main-navigation.layout") + ), +}); + +export const HomeRoute = createRoute({ + getParentRoute: () => AppNavigationRoute, + path: "/", + component: lazyRouteComponent(() => import("../pages/home")), +}); + +export const AnalysisRoute = createRoute({ + getParentRoute: () => AppNavigationRoute, + path: "/analysis", + component: lazyRouteComponent(() => import("../pages/analysis")), +}); + + diff --git a/src/router/app.route.ts b/src/router/app.route.ts new file mode 100644 index 0000000..db7db65 --- /dev/null +++ b/src/router/app.route.ts @@ -0,0 +1,34 @@ +import { createRoute, lazyRouteComponent } from "@tanstack/react-router"; +import { Route as RootRoute } from "./root"; + +export const AppRoute = createRoute({ + getParentRoute: () => RootRoute, + id: "general", + component: lazyRouteComponent( + () => import("../components/layout/main.layout") + ), +}); + +export const AddDeviceRoute = createRoute({ + getParentRoute: () => AppRoute, + path: "/device/add", + component: lazyRouteComponent(() => import("../pages/device/add")), +}); + +export const RoomsRoute = createRoute({ + getParentRoute: () => AppRoute, + path: "/rooms", + component: lazyRouteComponent(() => import("../pages/rooms")), +}); + +export const DetailDeviceRoute = createRoute({ + getParentRoute: () => AppRoute, + path: "/device/$id", + component: lazyRouteComponent(() => import("../pages/device/detail")), +}); + +export const SettingsRoute = createRoute({ + getParentRoute: () => AppRoute, + path: "/settings", + component: lazyRouteComponent(() => import("../pages/settings")), +}); \ No newline at end of file diff --git a/src/router/auth.route.tsx b/src/router/auth.route.tsx new file mode 100644 index 0000000..30430d4 --- /dev/null +++ b/src/router/auth.route.tsx @@ -0,0 +1,12 @@ +import { createRoute } from '@tanstack/react-router' +import { Route as RootRoute } from './root' +import AuthLayout from '../components/layout/auth.layout' +// import AuthLayout from '@/app/layouts/auth.layout' +// import LoginPage from '@/features/auth/login.page' + +export const AuthRoute = createRoute({ + getParentRoute: () => RootRoute, + path: '/login', + component: AuthLayout, +}) + diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..3424cc6 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,28 @@ +import { createRouter } from "@tanstack/react-router"; +import { Route as RootRoute } from "./root"; +import { AuthRoute } from "./auth.route"; +import { + AnalysisRoute, + AppNavigationRoute, + HomeRoute, +} from "./app-navigation.route"; +import { + AddDeviceRoute, + AppRoute, + DetailDeviceRoute, + RoomsRoute, + SettingsRoute, +} from "./app.route"; + +const routeTree = RootRoute.addChildren([ + AuthRoute.addChildren([]), + AppNavigationRoute.addChildren([HomeRoute, AnalysisRoute]), + AppRoute.addChildren([ + AddDeviceRoute, + RoomsRoute, + DetailDeviceRoute, + SettingsRoute, + ]), +]); + +export const router = createRouter({ routeTree }); diff --git a/src/router/root.tsx b/src/router/root.tsx new file mode 100644 index 0000000..7e55eaf --- /dev/null +++ b/src/router/root.tsx @@ -0,0 +1,9 @@ +import { createRootRoute, Outlet } from '@tanstack/react-router' + +export const Route = createRootRoute({ + component: RootLayout, +}) + +function RootLayout() { + return +} diff --git a/src/types/router.d.ts b/src/types/router.d.ts new file mode 100644 index 0000000..84980e1 --- /dev/null +++ b/src/types/router.d.ts @@ -0,0 +1,7 @@ +import '@tanstack/react-router' + +declare module '@tanstack/react-router' { + interface HistoryState { + direction?: 'forward' | 'back' + } +} diff --git a/src/utils/axios.ts b/src/utils/axios.ts new file mode 100644 index 0000000..b36f510 --- /dev/null +++ b/src/utils/axios.ts @@ -0,0 +1,68 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +// src/lib/axios.ts +import axios from "axios"; +import { generateSignature, parseQueryParamsManual } from "./signer"; +import { ENV } from "../constants/env"; + +import type { InternalAxiosRequestConfig } from "axios"; + +interface SignedAxiosRequestConfig + extends InternalAxiosRequestConfig { + signed?: boolean; +} + +const api = axios.create({ + baseURL: ENV.apiUrl, + timeout: 15000, +}); + + +api.interceptors.request.use( + (config: SignedAxiosRequestConfig) => { + if (config.signed === false) { + return config; + } + + const method = config.method?.toLowerCase() ?? "get"; + + let body: any = {}; + + if (method === "get" || method === "delete") { + // 🔥 SAMA PERSIS DENGAN POSTMAN + const fullUrl = + (config.baseURL ?? "") + + (config.url ?? "") + + (config.params + ? `?${new URLSearchParams(config.params as any).toString()}` + : ""); + + body = parseQueryParamsManual(fullUrl); + } else { + body = config.data ?? {}; + } + + const { timestamp, nonce, signature } = generateSignature(body); + + config.headers.set("X-API-Key", ENV.apiKey); + config.headers.set("X-Timestamp", timestamp.toString()); + config.headers.set("X-Nonce", nonce); + config.headers.set("X-Signature", signature); + + return config; + }, + (error) => Promise.reject(error) +); + + +// RESPONSE INTERCEPTOR (Optional) +api.interceptors.response.use( + (response) => response, + (error) => { + if (error.response?.status === 401) { + console.warn("Unauthorized"); + } + return Promise.reject(error); + } +); + +export default api; diff --git a/src/utils/classname.ts b/src/utils/classname.ts new file mode 100644 index 0000000..fed2fe9 --- /dev/null +++ b/src/utils/classname.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from 'clsx' +import { twMerge } from 'tailwind-merge' + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/utils/data.ts b/src/utils/data.ts new file mode 100644 index 0000000..5794701 --- /dev/null +++ b/src/utils/data.ts @@ -0,0 +1,13 @@ +export const DEVICES_DATA: DeviceData[] = [ + { deviceLabel: "Living Room Light", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "L", roomName: "LV", deviceType: "S" }, + { deviceLabel: "Master Bedroom Light", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "L", roomName: "MS", deviceType: "S" }, + { deviceLabel: "Master Bathroom Light", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "L", roomName: "BT", deviceType: "S" }, + { deviceLabel: "Wardrobe Light", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "L", roomName: "WIC", deviceType: "S" }, + { deviceLabel: "Living Room Curtain", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "BL", roomName: "LV", deviceType: "S" }, + { deviceLabel: "Master Bedroom Curtain", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "BL", roomName: "MS", deviceType: "S" }, + { deviceLabel: "Kitchen AC", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "AC", roomName: "KN", deviceType: "S" }, + { deviceLabel: "Kitchen AC", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "AC", roomName: "KN", deviceType: "A" }, + { deviceLabel: "Living Room IAQ", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "FT1", roomName: "LV", deviceType: "A" }, + { deviceLabel: "Living Room IAQ", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "FT2", roomName: "LV", deviceType: "S" }, + { deviceLabel: "Living ERV", towerNumber: "T2", floorName: "L3", unitNumber: "01", code: "ERV", roomName: "LV", deviceType: "S" }, +] \ No newline at end of file diff --git a/src/utils/signer.ts b/src/utils/signer.ts new file mode 100644 index 0000000..b9e3a50 --- /dev/null +++ b/src/utils/signer.ts @@ -0,0 +1,81 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { v4 as uuidv4 } from "uuid"; +import CryptoJS from "crypto-js"; +import { ENV } from "../constants/env"; + +/* ========================= + HELPERS (COPY POSTMAN) +========================= */ + +export function parseQueryParamsManual(url: string) { + const result: Record = {}; + const queryStartIndex = url.indexOf("?"); + + if (queryStartIndex === -1 || queryStartIndex === url.length - 1) { + return result; + } + + const queryString = url.substring(queryStartIndex + 1); + const pairs = queryString.split("&"); + + for (const pair of pairs) { + const parts = pair.split("="); + + if (parts.length === 2) { + const key = decodeURIComponent(parts[0].replace(/\+/g, " ")); + const value = decodeURIComponent(parts[1].replace(/\+/g, " ")); + result[key] = value; + } + } + + return result; +} + +export function sortKeysDeep(obj: any): any { + if (Array.isArray(obj)) { + return obj.map(sortKeysDeep); + } + + if (obj !== null && typeof obj === "object") { + return Object.keys(obj) + .sort() + .reduce((acc: any, key) => { + acc[key] = sortKeysDeep(obj[key]); + return acc; + }, {}); + } + + return obj; +} + +/* ========================= + SIGNATURE +========================= */ + +export interface SignatureResult { + timestamp: number; + nonce: string; + signature: string; +} + +export function generateSignature(rawBody: any): SignatureResult { + const timestamp = Math.floor(Date.now() / 1000); + const nonce = uuidv4(); + + const body = sortKeysDeep(rawBody ?? {}); + + const payload = JSON.stringify({ + timestamp, + nonce, + body: JSON.stringify(body), // ⚠️ STRINGIFY GANDA (WAJIB) + }); + + const hash = CryptoJS.HmacSHA256(payload, ENV.secretKey); + + return { + timestamp, + nonce, + signature: CryptoJS.enc.Hex.stringify(hash), + }; +} diff --git a/src/utils/storage.ts b/src/utils/storage.ts new file mode 100644 index 0000000..dcbece8 --- /dev/null +++ b/src/utils/storage.ts @@ -0,0 +1,41 @@ +const STORAGE_KEY = "devices"; +const MERCHANT_KEY = "merchant"; + +export function getDevices(): DeviceData[] { + try { + return JSON.parse(localStorage.getItem(STORAGE_KEY) || "[]"); + } catch { + return []; + } +} + +export function saveDevices(devices: DeviceData[]) { + localStorage.setItem(STORAGE_KEY, JSON.stringify(devices)); +} + +export function isDuplicateDevice( + devices: DeviceData[], + newDevice: DeviceData +) { + return devices.some(d => + d.towerNumber === newDevice.towerNumber && + d.floorName === newDevice.floorName && + d.unitNumber === newDevice.unitNumber && + d.roomName === newDevice.roomName && + d.code === newDevice.code && + d.deviceType === newDevice.deviceType + ); +} + + +export function getMerchant(): string { + try { + return JSON.parse(localStorage.getItem(MERCHANT_KEY) || ""); + } catch { + return ''; + } +} + +export function saveMerchant(val: string) { + localStorage.setItem(MERCHANT_KEY, JSON.stringify(val)); +} diff --git a/src/utils/types.d.ts b/src/utils/types.d.ts new file mode 100644 index 0000000..af3ea26 --- /dev/null +++ b/src/utils/types.d.ts @@ -0,0 +1,9 @@ +type DeviceCommand = { + deviceLabel: string + tower: string + floor: string + unit: string + deviceCode: string + room: string + type: string +} \ No newline at end of file diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..a9b5a59 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..8a67f62 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..4ff4f8f --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import tailwindcss from "@tailwindcss/vite"; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(), tailwindcss()], +});