From 55fee32589b3202da09235af49206969a1529ff0 Mon Sep 17 00:00:00 2001 From: Lance Date: Wed, 3 Sep 2025 15:55:42 -0600 Subject: [PATCH] Fix: replace accidental submodule with regular files --- federated-dashboard | 1 - federated-dashboard/.gitignore | 27 + federated-dashboard/README.md | 69 + federated-dashboard/eslint.config.js | 23 + federated-dashboard/index.html | 13 + federated-dashboard/package-lock.json | 4242 +++++++++++++++++ federated-dashboard/package.json | 38 + federated-dashboard/postcss.config.cjs | 6 + .../public/assets/Billingblack.png | Bin 0 -> 9973 bytes .../public/assets/Billingwhite.png | Bin 0 -> 16375 bytes .../public/assets/Vaultwarden.svg | 58 + .../public/assets/Wordpress.png | Bin 0 -> 34705 bytes federated-dashboard/public/assets/baserow.svg | 1 + .../public/assets/bookstack.svg | 1 + .../public/assets/calcomblack.svg | 9 + .../public/assets/calcomwhite.svg | 9 + federated-dashboard/public/assets/element.png | Bin 0 -> 37455 bytes federated-dashboard/public/assets/espocrm.svg | 14 + .../public/assets/federated.png | Bin 0 -> 7800 bytes .../public/assets/freescout.png | Bin 0 -> 20709 bytes federated-dashboard/public/assets/gitea.svg | 1 + federated-dashboard/public/assets/jitsi.svg | 1 + .../public/assets/nextcloud.svg | 1 + .../public/assets/panelblack.png | Bin 0 -> 6298 bytes .../public/assets/panelwhite.png | Bin 0 -> 13988 bytes federated-dashboard/public/assets/plane.svg | 1 + .../public/assets/powerdns.svg | 1 + .../public/assets/roundcube.svg | 1 + federated-dashboard/public/vite.svg | 1 + federated-dashboard/src/App.css | 42 + federated-dashboard/src/App.tsx | 6 + .../src/FederatedDashboard.tsx | 493 ++ federated-dashboard/src/assets/react.svg | 1 + federated-dashboard/src/index.css | 5 + federated-dashboard/src/main.tsx | 10 + federated-dashboard/src/vite-env.d.ts | 1 + federated-dashboard/tsconfig.app.json | 27 + federated-dashboard/tsconfig.json | 7 + federated-dashboard/tsconfig.node.json | 25 + federated-dashboard/vite.config.ts | 7 + 40 files changed, 5141 insertions(+), 1 deletion(-) delete mode 160000 federated-dashboard create mode 100644 federated-dashboard/.gitignore create mode 100644 federated-dashboard/README.md create mode 100644 federated-dashboard/eslint.config.js create mode 100644 federated-dashboard/index.html create mode 100644 federated-dashboard/package-lock.json create mode 100644 federated-dashboard/package.json create mode 100644 federated-dashboard/postcss.config.cjs create mode 100644 federated-dashboard/public/assets/Billingblack.png create mode 100644 federated-dashboard/public/assets/Billingwhite.png create mode 100644 federated-dashboard/public/assets/Vaultwarden.svg create mode 100644 federated-dashboard/public/assets/Wordpress.png create mode 100644 federated-dashboard/public/assets/baserow.svg create mode 100644 federated-dashboard/public/assets/bookstack.svg create mode 100644 federated-dashboard/public/assets/calcomblack.svg create mode 100644 federated-dashboard/public/assets/calcomwhite.svg create mode 100644 federated-dashboard/public/assets/element.png create mode 100644 federated-dashboard/public/assets/espocrm.svg create mode 100644 federated-dashboard/public/assets/federated.png create mode 100644 federated-dashboard/public/assets/freescout.png create mode 100644 federated-dashboard/public/assets/gitea.svg create mode 100644 federated-dashboard/public/assets/jitsi.svg create mode 100644 federated-dashboard/public/assets/nextcloud.svg create mode 100644 federated-dashboard/public/assets/panelblack.png create mode 100644 federated-dashboard/public/assets/panelwhite.png create mode 100644 federated-dashboard/public/assets/plane.svg create mode 100644 federated-dashboard/public/assets/powerdns.svg create mode 100644 federated-dashboard/public/assets/roundcube.svg create mode 100644 federated-dashboard/public/vite.svg create mode 100644 federated-dashboard/src/App.css create mode 100644 federated-dashboard/src/App.tsx create mode 100644 federated-dashboard/src/FederatedDashboard.tsx create mode 100644 federated-dashboard/src/assets/react.svg create mode 100644 federated-dashboard/src/index.css create mode 100644 federated-dashboard/src/main.tsx create mode 100644 federated-dashboard/src/vite-env.d.ts create mode 100644 federated-dashboard/tsconfig.app.json create mode 100644 federated-dashboard/tsconfig.json create mode 100644 federated-dashboard/tsconfig.node.json create mode 100644 federated-dashboard/vite.config.ts diff --git a/federated-dashboard b/federated-dashboard deleted file mode 160000 index 1a88bb7..0000000 --- a/federated-dashboard +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1a88bb7ed93ae467683d83d9e2335477d271d29a diff --git a/federated-dashboard/.gitignore b/federated-dashboard/.gitignore new file mode 100644 index 0000000..82d1a54 --- /dev/null +++ b/federated-dashboard/.gitignore @@ -0,0 +1,27 @@ +# 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? +node_modules/ +dist/ +.env diff --git a/federated-dashboard/README.md b/federated-dashboard/README.md new file mode 100644 index 0000000..7959ce4 --- /dev/null +++ b/federated-dashboard/README.md @@ -0,0 +1,69 @@ +# 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/) 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 + +## 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 tseslint.config([ + 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 tseslint.config([ + 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/federated-dashboard/eslint.config.js b/federated-dashboard/eslint.config.js new file mode 100644 index 0000000..d94e7de --- /dev/null +++ b/federated-dashboard/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 { globalIgnores } from 'eslint/config' + +export default tseslint.config([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/federated-dashboard/index.html b/federated-dashboard/index.html new file mode 100644 index 0000000..f912a91 --- /dev/null +++ b/federated-dashboard/index.html @@ -0,0 +1,13 @@ + + + + + + + Federated Dashboard + + +
+ + + diff --git a/federated-dashboard/package-lock.json b/federated-dashboard/package-lock.json new file mode 100644 index 0000000..d6c67ce --- /dev/null +++ b/federated-dashboard/package-lock.json @@ -0,0 +1,4242 @@ +{ + "name": "federated-dashboard", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "federated-dashboard", + "version": "0.0.0", + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^7.0.0", + "@fortawesome/free-brands-svg-icons": "^7.0.0", + "@fortawesome/free-regular-svg-icons": "^7.0.0", + "@fortawesome/free-solid-svg-icons": "^7.0.0", + "@fortawesome/react-fontawesome": "^3.0.1", + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@eslint/js": "^9.33.0", + "@tailwindcss/postcss": "^4.1.12", + "@types/react": "^19.1.10", + "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "^5.0.0", + "autoprefixer": "^10.4.21", + "eslint": "^9.33.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.12", + "typescript": "~5.8.3", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", + "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/core/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/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@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-compilation-targets/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/@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.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "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.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + }, + "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.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "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.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "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.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "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.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "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.0", + "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.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", + "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.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-7.0.0.tgz", + "integrity": "sha512-PGMrIYXLGA5K8RWy8zwBkd4vFi4z7ubxtet6Yn13Plf6krRTwPbdlCwlcfmoX0R7B4Z643QvrtHmdQ5fNtfFCg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.0.0.tgz", + "integrity": "sha512-obBEF+zd98r/KtKVW6A+8UGWeaOoyMpl6Q9P3FzHsOnsg742aXsl8v+H/zp09qSSu/a/Hxe9LNKzbBaQq1CEbA==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-7.0.0.tgz", + "integrity": "sha512-C8oY28gq/Qx/cHReJa2AunKJUHvUZDVoPlSTHtAvjriaNfi+5nugW4cx7yA/xN3f/nYkElw11gFBoJ2xUDDFgg==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-7.0.0.tgz", + "integrity": "sha512-qAh0mTaCY22sQzMK2lKBrtn/aR4keUu5XmtdYR7d702laMe0h+Ab4Kj2pExR9HZkKhjKoq8pbwt8Td+mjW/ipQ==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-7.0.0.tgz", + "integrity": "sha512-njSLAllkOddYDCXgTFboXn54Oe5FcvpkWq+FoetOHR64PbN0608kM02Lze0xtISGpXgP+i26VyXRQA0Irh3Obw==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-3.0.1.tgz", + "integrity": "sha512-kpVyf85UHhQ+Y/TPyiNaUldqylhhXiVXv20z7sq+CLmhKLXWbzjIHaRPDrHIydnrL6Qq9oFwuNHq66alJdDM5Q==", + "license": "MIT", + "dependencies": { + "semver": "^7.7.2" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~6 || ~7", + "react": "^18.0.0 || ^19.0.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.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.34.tgz", + "integrity": "sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.49.0.tgz", + "integrity": "sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.49.0.tgz", + "integrity": "sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.49.0.tgz", + "integrity": "sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.49.0.tgz", + "integrity": "sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.49.0.tgz", + "integrity": "sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.49.0.tgz", + "integrity": "sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.49.0.tgz", + "integrity": "sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.49.0.tgz", + "integrity": "sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.49.0.tgz", + "integrity": "sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.49.0.tgz", + "integrity": "sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.49.0.tgz", + "integrity": "sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.49.0.tgz", + "integrity": "sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.49.0.tgz", + "integrity": "sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.49.0.tgz", + "integrity": "sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.49.0.tgz", + "integrity": "sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.49.0.tgz", + "integrity": "sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.49.0.tgz", + "integrity": "sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.49.0.tgz", + "integrity": "sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.49.0.tgz", + "integrity": "sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.49.0.tgz", + "integrity": "sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.12.tgz", + "integrity": "sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.12" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.12.tgz", + "integrity": "sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.12", + "@tailwindcss/oxide-darwin-arm64": "4.1.12", + "@tailwindcss/oxide-darwin-x64": "4.1.12", + "@tailwindcss/oxide-freebsd-x64": "4.1.12", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.12", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.12", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.12", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.12", + "@tailwindcss/oxide-linux-x64-musl": "4.1.12", + "@tailwindcss/oxide-wasm32-wasi": "4.1.12", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.12", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.12" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.12.tgz", + "integrity": "sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.12.tgz", + "integrity": "sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.12.tgz", + "integrity": "sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.12.tgz", + "integrity": "sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.12.tgz", + "integrity": "sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.12.tgz", + "integrity": "sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.12.tgz", + "integrity": "sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.12.tgz", + "integrity": "sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.12.tgz", + "integrity": "sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.12.tgz", + "integrity": "sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.12.tgz", + "integrity": "sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.12.tgz", + "integrity": "sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.12.tgz", + "integrity": "sha512-5PpLYhCAwf9SJEeIsSmCDLgyVfdBhdBpzX1OJ87anT9IVR0Z9pjM0FNixCAUAHGnMBGB8K99SwAheXrT0Kh6QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.12", + "@tailwindcss/oxide": "4.1.12", + "postcss": "^8.4.41", + "tailwindcss": "4.1.12" + } + }, + "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/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "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/react": { + "version": "19.1.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", + "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", + "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz", + "integrity": "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/type-utils": "8.41.0", + "@typescript-eslint/utils": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.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.41.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.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.41.0.tgz", + "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.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.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz", + "integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.41.0", + "@typescript-eslint/types": "^8.41.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.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz", + "integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.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.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz", + "integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==", + "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.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz", + "integrity": "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.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.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz", + "integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==", + "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.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz", + "integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.41.0", + "@typescript-eslint/tsconfig-utils": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.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/utils": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.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.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz", + "integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.41.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.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.0.2.tgz", + "integrity": "sha512-tmyFgixPZCx2+e6VO9TNITWcCQl8+Nl/E8YbAyPVv85QCc7/A3JrdfG2A8gIzvVhWuzMOVrFW1aReaNxrI6tbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.3", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.34", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.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", + "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/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.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/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/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", + "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", + "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": { + "caniuse-lite": "^1.0.30001737", + "electron-to-chromium": "^1.5.211", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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.30001737", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz", + "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==", + "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/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "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/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/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/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "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/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.211", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.211.tgz", + "integrity": "sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "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.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.34.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "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": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "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.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "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.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "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-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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/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.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "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/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/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "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.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "dev": true, + "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.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "dev": true, + "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-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "dev": true, + "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/magic-string": { + "version": "0.30.18", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz", + "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.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/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "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.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "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==", + "dev": true, + "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/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "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/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/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "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/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.49.0.tgz", + "integrity": "sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==", + "dev": true, + "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.49.0", + "@rollup/rollup-android-arm64": "4.49.0", + "@rollup/rollup-darwin-arm64": "4.49.0", + "@rollup/rollup-darwin-x64": "4.49.0", + "@rollup/rollup-freebsd-arm64": "4.49.0", + "@rollup/rollup-freebsd-x64": "4.49.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.49.0", + "@rollup/rollup-linux-arm-musleabihf": "4.49.0", + "@rollup/rollup-linux-arm64-gnu": "4.49.0", + "@rollup/rollup-linux-arm64-musl": "4.49.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.49.0", + "@rollup/rollup-linux-ppc64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-musl": "4.49.0", + "@rollup/rollup-linux-s390x-gnu": "4.49.0", + "@rollup/rollup-linux-x64-gnu": "4.49.0", + "@rollup/rollup-linux-x64-musl": "4.49.0", + "@rollup/rollup-win32-arm64-msvc": "4.49.0", + "@rollup/rollup-win32-ia32-msvc": "4.49.0", + "@rollup/rollup-win32-x64-msvc": "4.49.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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/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==", + "dev": true, + "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/tailwindcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "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.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.41.0.tgz", + "integrity": "sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.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/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "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/vite": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", + "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.14" + }, + "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/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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" + } + } + } +} diff --git a/federated-dashboard/package.json b/federated-dashboard/package.json new file mode 100644 index 0000000..d4ccc18 --- /dev/null +++ b/federated-dashboard/package.json @@ -0,0 +1,38 @@ +{ + "name": "federated-dashboard", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^7.0.0", + "@fortawesome/free-brands-svg-icons": "^7.0.0", + "@fortawesome/free-regular-svg-icons": "^7.0.0", + "@fortawesome/free-solid-svg-icons": "^7.0.0", + "@fortawesome/react-fontawesome": "^3.0.1", + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@eslint/js": "^9.33.0", + "@tailwindcss/postcss": "^4.1.12", + "@types/react": "^19.1.10", + "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "^5.0.0", + "autoprefixer": "^10.4.21", + "eslint": "^9.33.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.12", + "typescript": "~5.8.3", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2" + } +} diff --git a/federated-dashboard/postcss.config.cjs b/federated-dashboard/postcss.config.cjs new file mode 100644 index 0000000..c2b4e04 --- /dev/null +++ b/federated-dashboard/postcss.config.cjs @@ -0,0 +1,6 @@ +// Tailwind v4 PostCSS wiring (array form avoids loader quirks) +module.exports = { + plugins: [ + require("@tailwindcss/postcss"), + ], +}; \ No newline at end of file diff --git a/federated-dashboard/public/assets/Billingblack.png b/federated-dashboard/public/assets/Billingblack.png new file mode 100644 index 0000000000000000000000000000000000000000..e91778eb9123b854d752a1711f49ce0004ab69c6 GIT binary patch literal 9973 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ã!1M<_!7d$V3#H1D=S~bSac@veXDu>JCqh z%;Qtda84}aL?Rc;nCHj2T@eO$?lnx1;gatI$Ibf1yU8ut+BJ2wo3pLdQGhwI;ul|a z=!@I+C|S0p5a_-t55!g_V%9n|ptl1OERZl|7G5r|WT`T9w-8|EtOX~UhG#goE1rtDxtn=SPsxIZJryWk8#!C^ zZf7F&#$)MKBn)ar0bF6qpqmB)4jxx&#jlo;Genm6z(L!*y-2Qxh<|v0qtO*u*4cOW z40^j)Fz*DNQmUCZfSFrWzGB3}AYdtI+Yr^;EAyTwN-yh)09IBgiW`3SHB}nMx?7&b zbBF_U_m!BlP1GN7Y;#t)MUS+OUwuOMIxLL8@5cRk(unP3z;cFn*H9B_P(>g;4d{%+@)wg+pb%o8nR`xt}X)a=mp6W{whX{iUWR=SG{BGf=F#a#mt z@_;wwYGazVIkWtgZr$Lsg@p2JgAtn4Y#bJ3M|%f7@=T?t#AUZpn}mU;2Ec!sB{F$(@}_sv_97RF0a0qn(*czpUK4 z<&bgZ-5w!{5BtV%qgc82XY@m)G?bYad!Nl0c6)TMAQoFDK0R|PT(!9SS~Td^ogYe*>F@3CoJ&nB zTE!IQR%Wk*gp#5#)O=E|M(_$}`-k2L#R*t0AwM%_H9KaxKRojeP8f6>S-WswB}tRB z%*X~TWPP*SN5kS~!LU7Qfm;t71If_Eg?%FZP6MyU&{~5^@hd=cth9TIG{|A`g1THg zR)R!gnW+MBSRHJ^F?48Hwk|gU>_Ea=7ozqX_kX@8GlnoUjunVv29%5*4Racr9ul-+ zDbM*lO|RMhd3@xD=DvPGn|kWlq`3d3rnns4kC8*Yuvw8U_Q!Yl|I!o}(2D?>JM9ON zvorIPxAd7-(l0(UU+qcfrbsFp4&M{N+F_*ZLSL^p<@2+&KZ)}r1r$yjTsg^!w`sk& zJ?*`P;iHKN&&!{nGD>62Lj$B!^qS@ZMv; zRMzAN>-dTHobR^L55CL1=2uoql|hOvDHi{cGO_28D8PT%;{T|Ry{%LUblDItl#MAH zj>`+bV*_7@pV8D#lVStFf869u2Jh3RCwbhgOF?`{*!}jhy>e^G^IRF{+7x>p&e z#>yS&&+iumnJv|lfjQ9^tQdme<-He1xKq-|-F&VHrfSOV`IcqntTh;Z?=j1Qd^_6( zl+_Y~d7n}s`k(>d_5QINNV+24Jdxk&VKBR()4~sue!E%1S$XeOT1h03FuQ6LJVN48 zT!W#2S(z@g;-T|OU*I?_sqp4uq>Se2@!%E=$lVf7oO&@9;NrVfHZ>%u0hQ2jfaxe{x06-S#RJAEM{ZjW8GwDo z>QPVKYTcA9j;gc-rVaWvZo^B;!49~t=kfsj^)R$x?k5cBu2!xyDeZ+bjY|Z)i+apeon}>R)}^C*xO(JA#*=`@vw~K{)hk^}9Ja zQ{Vyz)!JsMXsBi&mOUgew|CCoyG=kY+`+#Bsb7M4zdLylJaRB+NbA*mrEPBLOX0ct=wpw2l<44l5T1oiqB z81R4%(U5UDe@FP|1Z_?UNLAfhGW_#FbGG#ifOf`ULb>C$YJhLud8Z zXg6zbMp{irokT*X0<8N^a3(uEhi4jx5FNk`OAtu{ffzd*i&| zmmlh2F4PS#pKgc#LTfF1R_aRC+wKj|hO-r*F&j^tqg%M4&jcibc?S_84oQAR0yq9e zX9!xUKl#jdNVYFrt!eo5x3iFwXLmQRSlA&9rHkZh%=3y*!=TfE18MS0X6lfpC(Np3 zaXvEd94sTN2h9miUEc=AI{TjWN9H=iGAdK$4oXTaVjN){;Q!`@Wv+8c&bO$mT&z~x P@X*}U$|UaqKI%UJ?r*_I literal 0 HcmV?d00001 diff --git a/federated-dashboard/public/assets/Billingwhite.png b/federated-dashboard/public/assets/Billingwhite.png new file mode 100644 index 0000000000000000000000000000000000000000..4c59b0a99eb1305752dc004b74eb173a6ebbe6f3 GIT binary patch literal 16375 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⍭qe6O%Vu>3=jcm8v{hou=x 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 literal 0 HcmV?d00001 diff --git a/federated-dashboard/public/assets/Vaultwarden.svg b/federated-dashboard/public/assets/Vaultwarden.svg new file mode 100644 index 0000000..54d485a --- /dev/null +++ b/federated-dashboard/public/assets/Vaultwarden.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + aultwarden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/federated-dashboard/public/assets/Wordpress.png b/federated-dashboard/public/assets/Wordpress.png new file mode 100644 index 0000000000000000000000000000000000000000..f8afeb986b65b6584d0097ddc0905f71b359e6bd GIT binary patch literal 34705 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 literal 0 HcmV?d00001 diff --git a/federated-dashboard/public/assets/baserow.svg b/federated-dashboard/public/assets/baserow.svg new file mode 100644 index 0000000..44b6198 --- /dev/null +++ b/federated-dashboard/public/assets/baserow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/public/assets/bookstack.svg b/federated-dashboard/public/assets/bookstack.svg new file mode 100644 index 0000000..db69426 --- /dev/null +++ b/federated-dashboard/public/assets/bookstack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/public/assets/calcomblack.svg b/federated-dashboard/public/assets/calcomblack.svg new file mode 100644 index 0000000..bccfe81 --- /dev/null +++ b/federated-dashboard/public/assets/calcomblack.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/federated-dashboard/public/assets/calcomwhite.svg b/federated-dashboard/public/assets/calcomwhite.svg new file mode 100644 index 0000000..e12d287 --- /dev/null +++ b/federated-dashboard/public/assets/calcomwhite.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/federated-dashboard/public/assets/element.png b/federated-dashboard/public/assets/element.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa705e8fbd390c4890cac97c712dd01230ea857 GIT binary patch literal 37455 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 IcDVNc0lFdtRR910 literal 0 HcmV?d00001 diff --git a/federated-dashboard/public/assets/espocrm.svg b/federated-dashboard/public/assets/espocrm.svg new file mode 100644 index 0000000..76ca1ab --- /dev/null +++ b/federated-dashboard/public/assets/espocrm.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/federated-dashboard/public/assets/federated.png b/federated-dashboard/public/assets/federated.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6564636239dcac47cb20acd8e1838ed8dc980a GIT binary patch literal 7800 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 b>h+VRt+l9>5 zIY&4g(Pvz6wUE8H8%2}7?#O7|pV~6+&Ha71_5gT`7v^JcQ}neG=SwO?dljz*$$J$E z9U07?$CpS?rtJ7>_r;>kYJC@Y#es?E5O3mwGI$128))m8?wmQ$*7~iQ77O$E7Y&Z` z^4RBNqF0uk`qkp!r{9({=Z7m-K5a;G99s-7R%NG!*;LN?vC}6w%i?zNJmdWb*Q}#E+Le=ZOsRO5HsC;vBY1t)q<7Lwka1Du@qF@(k45gy}h*!I#g~ zj8hGHQ#4aOk~Uc8EQ6NBJ)M}Abz)m;=KZZmt=##o-ggPDM+PwtC3URSwAp2)UJWBi zWVvZ}H|(D_HElQAG@BvyDBO!V*uaVWL2x@Gf-;doI=-y5Yr*V1dxnW-Rl^Hl;`kvO z8}=+r01rWI((+IX`OdkcRSQNF)%QE@Xu@`1sE+MC)NbjOotoAjc#KvnQcPlq3X{$5F&zh+&9_82|bYKMt4hLQ$ zD+J9)SOJ3yqNRpGRh^9}-@KsiVUev?tgKD*TyiJbE*d36CITO;E3R)$G*xQmOjTWu zT%DPwhtMdem*tM{j#x(&Bcr)3Ckxu^S1# zGuTx&9e?nQ-_|z`iSp4e&@0=+a21xj74U)_Usv%0F|eHZ=!nV4y*HOFG);+^mF_Y)v>*7TlSl2Tj8EGWJHp~!f3~Qf(#3e1u zZWg`MB>mr=>$hlJ?z-EWs5cVSkD{BR!ZK&kWvMYGixOA?=bQ?P$A+l_EFHIA@*V7( z8&u`HRG%fBbFuQKS&EVgjFqe8nPu_8p-txTm^R1GhL^7MNXvh$I-;Q}BUU;=yc6xOAc6I8Xg3JzzL2>#_Rv&O53CM6I}Si&d2B$}%q-745u3^e#Jr?tD^ zdx)Bg8>Tkz;rn>Itct9T-b(K{zu)72S8Pt^38P#`+ZxZ8ZA|VsYRl-;6cgLYos^{p zCQ+4!K3->PjwTdmOSXwHhCeRK$bFy2K9Fle29>mYlWTt4JL_Yk%LQeRPzL9p6QaA#R7Tfvak zi&V4c^%%5`t%%#p1iX8$ytGkXlCwvv0Q=Lv&8Rsx#}bNf=d-eU#PlHvtvBpPJW)>1 zKm2y(^`}9B$q%N@ORv@%J;+GYZ@S^}UP&{tC=@j4zuatUdj8La4%dY&)keEwRe9|_ zPlh^)dd%F1|9sTVab#A#!I56z9kqZ+HmNC8Ie#SW(3>r-hZGpEMUI(C5~MYK3M?mP z8H(;q0LQK_^n0Yemt|o|bpMm9OdO8ze?8)B&M0s)w!-Bus_YsuDGxhk%#X`c9N$|&^IILSCu_F~ hb4}KN?#D&_KF({?+~GTlwrlrubZ0N8Vu!`6{s+*!?`i-5 literal 0 HcmV?d00001 diff --git a/federated-dashboard/public/assets/freescout.png b/federated-dashboard/public/assets/freescout.png new file mode 100644 index 0000000000000000000000000000000000000000..27cb8bb52102f914b90bdd2ab2c4d88e40b2891e GIT binary patch literal 20709 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 XwP@l8-Sm%uF9>qlvmaY!?@#;}RmVFm literal 0 HcmV?d00001 diff --git a/federated-dashboard/public/assets/gitea.svg b/federated-dashboard/public/assets/gitea.svg new file mode 100644 index 0000000..07505e4 --- /dev/null +++ b/federated-dashboard/public/assets/gitea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/public/assets/jitsi.svg b/federated-dashboard/public/assets/jitsi.svg new file mode 100644 index 0000000..e918636 --- /dev/null +++ b/federated-dashboard/public/assets/jitsi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/public/assets/nextcloud.svg b/federated-dashboard/public/assets/nextcloud.svg new file mode 100644 index 0000000..841b9d9 --- /dev/null +++ b/federated-dashboard/public/assets/nextcloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/public/assets/panelblack.png b/federated-dashboard/public/assets/panelblack.png new file mode 100644 index 0000000000000000000000000000000000000000..3652f77d044b45fb39084efaae89b33083264743 GIT binary patch literal 6298 zcmeHLXH-+!7QPe}X$n{Z0}@)SNp2b>ktj&fI0Pv{iGXrRE)XCICV@}}MN||;8I=+N zoreN~9TW=;2r3977C>bH#X=EKK>?8&m3ITkIP1+@Z@Jc+e`clJv(LA`v-fxQ*(>)Z zxHzxWQa4Zs06>em%H9nClu(L~nhIh$=b~Q*0Lt&8*q%~1NQMp-i~RW^Fj^WJ3Zvl& zzCQp&G`~*sDQrP&?r7sUr1>({5;}ZA(qr4SHnWzur6b*T&ByQDNZcArRg1AXaN*PM zw1yeh?9%L0ojIw6PirXagn1vt)`GkIn&{0x^`Cbfe%;;Un;hr1PaEG=?)3-lscuMK zx0Oj>z|E*O*8$hUaCA_;uT+Mn>c zIj#CdSIDj>E@brqjJbwbXSw0e5fr9f<^JO z*;o*_@wQILWu11@o%*}(S#LWL9V_a7JN=AuoPp~;GdG>4p`Sfd%7n_l*=lIc?%3pA zU9~WFCKR-TWR3=c%vbN2!?iS3tyjvc2ur=aSncOUGpIG3>{u;l-Q22~#~vrA+|RtX zuU6BXy&KiU=EtU-_Z#&Lf0dPcl;g1{y?Cv_VKr|3>H^&~KT<)a(`or3ucFT9zdhKK zQL;{ya`I_?xcpW%azQq>fw%zfm;YF5F? zV)xHyH9B~`yFZw^y8I9Q7(dd!x z!C{qOUy5&hI*>sH0BsH*=|-L`CpuRoz(G8bAB>9-gd*Jv0IZisghJe4Sc>+81NcIQ zXj*kRAb_P1IzkX4l+Ys> zrenNxCR9N5z(+u#cmfW@3k3MDJtR_xaD-$cpuhEyu#u*Y zcY`IOFfkW)2#1AIv#%+5+)4k?FmcFOIy^2O4uJ&-RD!HZ_{)+jnJkw{4}}B)d_m}# z7b5mwkW#+?pJM$bHpR?XI$sBZxKHx_1^p%WF))H+vFP?9ZkQrGrai+{u|AzA;_`X) zu}eP~;`wn2WUN1zYK0}!C|oR+LWQwhODiIo4ADqrE8bUBOrb;y3AwO>3L(ew5gsm; z08wF>izSk2AeKy_SYl})=#M4&lVBc~$ffc?+E)~7#C)VGp^&emQc&>_DjETV2vm|4 z){kaM#3IX6u~dIc5|(R4ppl4HB#1;EkA}ykJBq{t2-!})01ANdp~8T%H57u=ZC#iQ zQz8!h)8Y~WN&OKAtQ6ZYPEzsYuKgi9#5rilER6&&g>Pa-evS6tah; zFhU9vDRhuZCsNr25}in(6RfbHB^~?!XGJgrMC31(L1Nf80MQZA3MtSrt`nk#_M1*=>MMLL^b}mBq>;sik++qBEfVbJ!`z8DSp{dYy5v~`8eRKE{e!9ZbP~= z((Lh*-F`wZB-VfOHBoB+iRC%H!1K<;P2J-f0Il7 z&-+DKi2TWuA$Nln=eKqucapnZoY)S44TxNhj*ga>mw){Dad2>OWMrhFp`pLOzpk#X zprD|ts_Omw_lb##@$vC7F)_Wpy{)aSfq{X~o;~yQ^vui4%gD$OiA34i+4t_<^YQU1 zDk^eva%yU7N=iy%v)N%`VaCSBbUGb_!RYGh;&36yqwJYbrX z$#R(1t!AhXZdLyDXm? z%@@=b8rsfO9e=-FFgW_Jnya;Y9~4;SKO*?#6f!>Tq;&e=i9UmpG zM`vI@E)lKMx>P&g;uA^U<8Nj@XK2lv-E-2myvje^ar0FDL_H=v}Fs8hAr-9r;)mgt@v z-aXIP30!ulNnOv&XSZ*A{C&FIGpd|j;mKPa+<4u-v=)P+K^LaydgoHFs$k~i4wv7! z_-c_+^OD!4zpkoNJsqTPXVP-wGA6CPD5N)fs4UO?tYhR!Xv5+y*Bs;{N^ZR?vZirb zlOC?`vA`MekG?&#GqOzFe$weT;*32VuhxeDg8yv(pyS}aBWVj?x_=&C?C@Dw$%!jo zakgy1@x8Ns>J71S*J`n&Gf`L#-*i}26O@%i@XUF! zSDsX&Rc`y>I*8@KfCa8n@k7DoD1IDpMtyfbic!<`ePfjzNu6tA_A53_#mOXb``88Y zbvso@VVW4Ot5HKC*r|#y|9nmGQOV@g1nBw$3aH6eI&To~b)mI!8iJ(z%JsE1!Rq8< zKvLiYaCbnTTG&>&4?p@Go2TaW-j6Fj(w;1b;3A%OrPLPBr}9_)6q z_t|Hk_wF5UoH5@0cY0L!SgY!rU(NZ|tmyHJasiC0{{St^4A*^ z1yNI{N7W4gFqi}wnR*%6`T{*X-5s1=p+GNx4=51o=j;Fg_^s6BIQ!7Grq*dhWXqdM*tuba=n5Xz&f4u%9gs ze2U+c4IRFAlIcpyzjwB_em_&≈aJqbf5pBWiy2vyY)R^tSf`4a54|N2`jOTKCEP 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 RM0~XX)RlFVUMtu{{1@BUF2Mi* literal 0 HcmV?d00001 diff --git a/federated-dashboard/public/assets/plane.svg b/federated-dashboard/public/assets/plane.svg new file mode 100644 index 0000000..f108a08 --- /dev/null +++ b/federated-dashboard/public/assets/plane.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/public/assets/powerdns.svg b/federated-dashboard/public/assets/powerdns.svg new file mode 100644 index 0000000..f012310 --- /dev/null +++ b/federated-dashboard/public/assets/powerdns.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/public/assets/roundcube.svg b/federated-dashboard/public/assets/roundcube.svg new file mode 100644 index 0000000..37b50d0 --- /dev/null +++ b/federated-dashboard/public/assets/roundcube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/public/vite.svg b/federated-dashboard/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/federated-dashboard/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/src/App.css b/federated-dashboard/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/federated-dashboard/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/federated-dashboard/src/App.tsx b/federated-dashboard/src/App.tsx new file mode 100644 index 0000000..1be0c5b --- /dev/null +++ b/federated-dashboard/src/App.tsx @@ -0,0 +1,6 @@ +import React from "react"; +import FederatedDashboard from "./FederatedDashboard"; + +export default function App() { + return ; +} \ No newline at end of file diff --git a/federated-dashboard/src/FederatedDashboard.tsx b/federated-dashboard/src/FederatedDashboard.tsx new file mode 100644 index 0000000..7b5e701 --- /dev/null +++ b/federated-dashboard/src/FederatedDashboard.tsx @@ -0,0 +1,493 @@ +// Federated Dashboard — React + Tailwind + Font Awesome 6 Free (Canvas Preview JS) +// Adds custom drag preview that follows the cursor with a blue (#0EA5E9 @ 50%) shadow. +// Features: theme toggle, favorites, search (headings hidden while typing), drag & drop reordering, +// custom floating preview, status pill, 4-col grid, centered Federated logo. + +import React, { useMemo, useState, useCallback, useEffect } from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faStar as faStarRegular } from "@fortawesome/free-regular-svg-icons"; +import { + faSun, + faMoon, + faArrowUpRightFromSquare, + faMagnifyingGlass, + faStar as faStarSolid, + faXmark, +} from "@fortawesome/free-solid-svg-icons"; + +// ------------------------------------ +// Brand Tokens +// ------------------------------------ +const BRAND_TOKENS = { + primary: "#0F172A", // dark theme background + accent: "#D67147", // favorites + focus ring + section label color + surface: "#1E293B", +}; +const LIGHT_TOKENS = { + primary: "#4D6F83", // requested light background + surface: "#FFFFFF", // white logo tile in light +}; + +// ------------------------------------ +// Data +// ------------------------------------ +// Local asset files for app logos (place in public/assets/) +const ASSETS = { + panel_black: "/assets/panelblack.png", + panel_white: "/assets/panelwhite.png", + billing_black: "/assets/Billingblack.png", + billing_white: "/assets/Billingwhite.png", + jitsi: "/assets/jitsi.svg", + element: "/assets/element.png", + nextcloud: "/assets/nextcloud.svg", + espocrm: "/assets/espocrm.svg", + plane: "/assets/plane.svg", + freescout: "/assets/freescout.png", + roundcube: "/assets/roundcube.svg", + bookstack: "/assets/bookstack.svg", + baserow: "/assets/baserow.svg", + gitea: "/assets/gitea.svg", + powerdns: "/assets/powerdns.svg", + wordpress: "/assets/Wordpress.png", + vaultwarden: "/assets/Vaultwarden.svg", + calcom_black: "/assets/calcomblack.svg", + calcom_white: "/assets/calcomwhite.svg", + federated_logo_light: "/assets/federated.png", + federated_logo_dark: "/assets/federated.png", +}; + +const APP_CATALOG = [ + { id: "nextcloud", name: "Nextcloud", category: "Email, Files, Documents", panelManaged: true, logoUrl: ASSETS.nextcloud }, + { id: "jitsi", name: "Jitsi (Meet)", category: "Video Chat", panelManaged: true, logoUrl: ASSETS.jitsi }, + { id: "element", name: "Element", category: "Team Chat", panelManaged: true, logoUrl: ASSETS.element }, + { id: "espocrm", name: "EspoCRM", category: "Customer Relationship Manager", panelManaged: true, logoUrl: ASSETS.espocrm }, + { id: "plane", name: "Plane", category: "Project Management", panelManaged: false, logoUrl: ASSETS.plane }, + { id: "freescout", name: "FreeScout", category: "Customer Help Desk", panelManaged: false, logoUrl: ASSETS.freescout }, + { id: "vaultwarden", name: "Vaultwarden", category: "Passwords", panelManaged: false, logoUrl: ASSETS.vaultwarden }, + { id: "roundcube", name: "Roundcube", category: "Web Mail", panelManaged: true, logoUrl: ASSETS.roundcube }, + { id: "bookstack", name: "BookStack", category: "Wiki Knowledgebase", panelManaged: true, logoUrl: ASSETS.bookstack }, + { id: "baserow", name: "Baserow", category: "Visual Databases", panelManaged: true, logoUrl: ASSETS.baserow }, + { id: "gitea", name: "Gitea", category: "GIT Source Control", panelManaged: true, logoUrl: ASSETS.gitea }, + { id: "wordpress", name: "WordPress", category: "Your Website", panelManaged: true, logoUrl: ASSETS.wordpress }, + { id: "powerdns", name: "PowerDNS", category: "DNS Management", panelManaged: true, logoUrl: ASSETS.powerdns }, + { id: "calcom", name: "Cal.com", category: "Scheduling", panelManaged: true, logoUrl: ASSETS.calcom_black }, + { id: "panel", name: "Federated Panel", category: "Create & Manage Users", panelManaged: true, logoUrl: ASSETS.panel_black }, + { id: "billing", name: "Billing", category: "Manage your subscription", panelManaged: false, logoUrl: ASSETS.billing_black }, +]; + +// ------------------------------------ +// Hooks +// ------------------------------------ +function useDebouncedValue(value, delay = 150) { + const [debounced, setDebounced] = useState(value); + useEffect(() => { + const t = setTimeout(() => setDebounced(value), delay); + return () => clearTimeout(t); + }, [value, delay]); + return debounced; +} + +// ------------------------------------ +// UI bits +// ------------------------------------ +const Pill = React.memo(function Pill({ managed }) { + const pillBg = managed + ? "bg-emerald-600 text-white ring-1 ring-emerald-300/30" + : "bg-red-600 text-white ring-1 ring-red-300/30"; + const label = managed ? "In Panel" : "In App"; + return ( + + {label} + + ); +}); + +const AppLogo = React.memo(function AppLogo({ app, theme }) { + const bg = theme === "light" ? "bg-white" : "bg-black/20"; + const themedSrc = app.id === "panel" + ? (theme === "light" ? ASSETS.panel_black : ASSETS.panel_white) + : app.id === "billing" + ? (theme === "light" ? ASSETS.billing_black : ASSETS.billing_white) + : app.id === "calcom" + ? (theme === "light" ? ASSETS.calcom_black : ASSETS.calcom_white) + : app.logoUrl; + return ( +
+ {themedSrc ? ( + {`${app.name} + ) : null} +
+ ); +}); + +// Drag-and-drop capable card +const AppCard = React.memo(function AppCard({ + app, + favorite = false, + theme = "light", + onToggleFavorite, + dnd, +}) { + const draggable = !!(dnd && dnd.enabled); + const isDragging = draggable && dnd && dnd.draggingId === app.id; + return ( +
+ {/* Brand link (top-left) */} + + + {/* Status pill (bottom-right) */} +
+ +
+ + {/* Favorite toggle */} +
+ +
+ + {/* Title and purpose ABOVE the logo */} +
+
+
{app.category}
+

{app.name}

+
+ +
+ + {/* Logo area */} + +
+ ); +}); + +// ------------------------------------ +// Page +// ------------------------------------ +export default function FederatedDashboard() { + const [theme, setTheme] = useState("light"); + const [query, setQuery] = useState(""); + + // Default favorite: Panel only + const [favorites, setFavorites] = useState(new Set(["panel"])); + + // Orders for within-section reordering + const initialFav = new Set(["panel"]); + const [favoritesOrder, setFavoritesOrder] = useState(APP_CATALOG.map(a => a.id).filter(id => initialFav.has(id))); + const [othersOrder, setOthersOrder] = useState(APP_CATALOG.map(a => a.id).filter(id => !initialFav.has(id))); + + // Drag state + const [dragging, setDragging] = useState(null); // { id, from } + const [dragPos, setDragPos] = useState(null); // { x, y } + const [dragMeta, setDragMeta] = useState(null); // { offsetX, offsetY, width, height, app } + + // CSS vars + const rootStyle = useMemo(() => ({ + "--brand-primary": theme === "light" ? LIGHT_TOKENS.primary : BRAND_TOKENS.primary, + "--brand-accent": BRAND_TOKENS.accent, + "--brand-surface": theme === "light" ? LIGHT_TOKENS.surface : BRAND_TOKENS.surface, + }), [theme]); + + // Index for search + const APP_INDEX = useMemo( + () => APP_CATALOG.map((a) => ({ ...a, _hay: `${a.name} ${a.category} ${a.id}`.toLowerCase() })), + [] + ); + const APP_MAP = useMemo(() => { + const m = new Map(); + APP_INDEX.forEach(a => m.set(a.id, a)); + return m; + }, [APP_INDEX]); + + const debouncedQuery = useDebouncedValue(query, 150); + const tokens = useMemo( + () => debouncedQuery.toLowerCase().trim().split(/\s+/).filter(Boolean), + [debouncedQuery] + ); + const isSearching = tokens.length > 0; + + const matches = useCallback((a) => { + if (tokens.length === 0) return true; + const h = a._hay; + for (const t of tokens) if (!h.includes(t)) return false; + return true; + }, [tokens]); + + // Lists in display order, then filtered + const favAll = useMemo(() => favoritesOrder.map(id => APP_MAP.get(id)).filter(Boolean), [favoritesOrder, APP_MAP]); + const otherAll = useMemo(() => othersOrder.map(id => APP_MAP.get(id)).filter(Boolean), [othersOrder, APP_MAP]); + const favList = useMemo(() => favAll.filter(matches), [favAll, matches]); + const otherList = useMemo(() => otherAll.filter(matches), [otherAll, matches]); + + // Favorite toggle + sync orders + const toggleFavorite = useCallback((id) => { + setFavorites(prev => { + const next = new Set(prev); + const wasFav = next.has(id); + if (wasFav) next.delete(id); else next.add(id); + setFavoritesOrder(o => (wasFav ? o.filter(x => x !== id) : o.includes(id) ? o : [...o, id])); + setOthersOrder(o => (wasFav ? (o.includes(id) ? o : [...o, id]) : o.filter(x => x !== id))); + return next; + }); + }, []); + + // DnD handlers (within-section only) + floating preview tracking + const onDragStart = useCallback((id, list) => (e) => { + setDragging({ id, from: list }); + const rect = e.currentTarget.getBoundingClientRect(); + const offsetX = e.clientX - rect.left; + const offsetY = e.clientY - rect.top; + setDragMeta({ offsetX, offsetY, width: rect.width, height: rect.height, app: APP_MAP.get(id) }); + setDragPos({ x: e.clientX, y: e.clientY }); + e.dataTransfer.effectAllowed = "move"; + // hide the native ghost image so only our custom preview shows + const img = new Image(); + img.src = "data:image/svg+xml;base64," + btoa(''); + e.dataTransfer.setDragImage(img, 0, 0); + }, [APP_MAP]); + + const onDragOver = useCallback((overId, list) => (e) => { + if (!dragging || dragging.from !== list) return; + e.preventDefault(); + e.dataTransfer.dropEffect = "move"; + }, [dragging]); + + // keep preview following cursor even when not over a specific card + useEffect(() => { + if (!dragging) return; + const handle = (e) => { + setDragPos({ x: e.clientX, y: e.clientY }); + }; + window.addEventListener("dragover", handle); + return () => window.removeEventListener("dragover", handle); + }, [dragging]); + + const onDrag = useCallback((e) => { + if (!dragging) return; + setDragPos({ x: e.clientX, y: e.clientY }); + }, [dragging]); + + const onDrop = useCallback((overId, list) => (e) => { + e.preventDefault(); + if (!dragging || dragging.from !== list) return; + if (dragging.id === overId) { setDragging(null); setDragMeta(null); setDragPos(null); return; } + const arr = list === "fav" ? favoritesOrder.slice() : othersOrder.slice(); + const fromIdx = arr.indexOf(dragging.id); + const toIdx = arr.indexOf(overId); + if (fromIdx < 0 || toIdx < 0) { setDragging(null); setDragMeta(null); setDragPos(null); return; } + arr.splice(fromIdx, 1); + arr.splice(toIdx, 0, dragging.id); + if (list === "fav") setFavoritesOrder(arr); else setOthersOrder(arr); + setDragging(null); setDragMeta(null); setDragPos(null); + }, [dragging, favoritesOrder, othersOrder]); + + const onDropToEnd = useCallback((list) => (e) => { + e.preventDefault(); + if (!dragging || dragging.from !== list) return; + const arr = list === "fav" ? favoritesOrder.slice() : othersOrder.slice(); + const fromIdx = arr.indexOf(dragging.id); + if (fromIdx < 0) { setDragging(null); setDragMeta(null); setDragPos(null); return; } + arr.splice(fromIdx, 1); + arr.push(dragging.id); + if (list === "fav") setFavoritesOrder(arr); else setOthersOrder(arr); + setDragging(null); setDragMeta(null); setDragPos(null); + }, [dragging, favoritesOrder, othersOrder]); + + const onDragEnd = useCallback(() => { setDragging(null); setDragMeta(null); setDragPos(null); }, []); + + const clearSearch = useCallback(() => setQuery(""), []); + + return ( +
+ {/* Header */} +
+
+
+
+ Federated Computer +

Dashboard

+
+
+ + +
+
+
+ + {/* Search */} +
+
+ + setQuery(e.target.value)} + onKeyDown={(e) => { if (e.key === "Escape") clearSearch(); }} + placeholder="Search apps…" + className="w-full rounded-xl border border-white/10 bg-white/5 py-3 pl-10 pr-10 outline-none placeholder:text-white/50 focus:ring-2 focus:ring-[var(--brand-accent)]" + aria-label="Search apps" + /> + {query && ( + + )} +
+
+ + {isSearching ? ( +
+
+ {[...favList, ...otherList].map((app) => ( + + ))} + {[...favList, ...otherList].length === 0 && ( +
+ No apps found for “{debouncedQuery}”. +
+ )} +
+
+ ) : ( + <> + {/* Favorites */} +
dragging && dragging.from === "fav" && e.preventDefault()} onDrop={onDropToEnd("fav")}> +

Favorites

+
+ {favList.map((app) => ( + + ))} + {favList.length === 0 && ( +
+ Click the star on any app to favorite it. +
+ )} +
+
+ + {/* Your Apps (non-favorites) */} +
dragging && dragging.from === "other" && e.preventDefault()} onDrop={onDropToEnd("other") }> +

Your Apps

+
+ {otherList.map((app) => ( + + ))} +
+
+ + )} + + {/* Floating drag preview */} + {dragging && dragMeta && dragPos && ( +
+
+
+
+
{dragMeta.app.category}
+

{dragMeta.app.name}

+
+ +
+ +
+ +
+
+
+ )} + + {/* Footer */} +
+
+
© {new Date().getFullYear()} Federated Computer · Dashboard
+
+ + Light/Dark · Favorites toggle · Search (debounced) · Drag to reorder +
+
+
+
+ ); +} + +// NOTE: Dev-only sanity checks were removed to maximize Canvas compatibility. diff --git a/federated-dashboard/src/assets/react.svg b/federated-dashboard/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/federated-dashboard/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/federated-dashboard/src/index.css b/federated-dashboard/src/index.css new file mode 100644 index 0000000..9fded68 --- /dev/null +++ b/federated-dashboard/src/index.css @@ -0,0 +1,5 @@ +/* Tailwind v4: single import */ +@import "tailwindcss"; + +/* your app baseline */ +html, body, #root { height: 100%; } \ No newline at end of file diff --git a/federated-dashboard/src/main.tsx b/federated-dashboard/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/federated-dashboard/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/federated-dashboard/src/vite-env.d.ts b/federated-dashboard/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/federated-dashboard/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/federated-dashboard/tsconfig.app.json b/federated-dashboard/tsconfig.app.json new file mode 100644 index 0000000..227a6c6 --- /dev/null +++ b/federated-dashboard/tsconfig.app.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "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/federated-dashboard/tsconfig.json b/federated-dashboard/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/federated-dashboard/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/federated-dashboard/tsconfig.node.json b/federated-dashboard/tsconfig.node.json new file mode 100644 index 0000000..f85a399 --- /dev/null +++ b/federated-dashboard/tsconfig.node.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "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/federated-dashboard/vite.config.ts b/federated-dashboard/vite.config.ts new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/federated-dashboard/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +})