diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index c02fa051..6274da50 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -11,51 +11,51 @@ jobs: run: | set -e echo "--- EPIC WEB CONTROL: Starting Auto-Cleanup & Deploy ---" - + # 1. Clean up unused build images safely docker image prune -f - + # 2. Navigate to your website directory cd /var/www/atom-nexst/ - + # CRITICAL: Prevent Git permission blocks caused by the www-data ownership change git config --global --add safe.directory /var/www/atom-nexst - + # Point Git directly to the local Gitea folder path git remote set-url origin /docker/gitea/gitea/git/repositories/remco/epicnext-cms.git/ - + # 3. Fetch and update code git fetch origin --prune git reset --hard origin/main - + # Preserve .next/cache so Next.js can reuse its incremental build cache. # next build safely refreshes stale server/static output itself. rm -rf .output dist - + # 4. Configure trusted dependencies globally and install cleanly export PNPM_CONFIG_ONLY_BUILT_DEPENDENCIES="@parcel/watcher,@swc/core,sharp" pnpm install --frozen-lockfile - + # 5. Apply versioned CMS migrations and generate the Prisma client safely pnpm db:migrate pnpm prisma:generate - + # 6. Next.js Build pnpm build - + # 7. Fix ownership: Build first, THEN set permissions for the web server sudo chown -R www-data:www-data /var/www/atom-nexst/ - + # 8. Hard restart of the Systemd service to clear memory cache echo "Hard resetting systemd service..." sudo systemctl stop atom-nexst.service sudo systemctl start atom-nexst.service - + # Extra health check: Ensure the service is actually running sleep 2 if ! systemctl is-active --quiet atom-nexst.service; then echo "ERROR: atom-nexst.service failed to start!" >&2 exit 1 fi - + echo "--- Deployment successfully completed ---" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37b71b92..0f8e2c9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: "9.0" +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -6,31 +6,32 @@ settings: overrides: fast-uri: ^3.1.3 - "@hono/node-server": ^1.19.13 + '@hono/node-server': ^1.19.13 postcss: ^8.5.16 importers: + .: dependencies: - "@dnd-kit/core": + '@dnd-kit/core': specifier: ^6.3.1 version: 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@dnd-kit/sortable": + '@dnd-kit/sortable': specifier: ^10.0.0 version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7) - "@dnd-kit/utilities": + '@dnd-kit/utilities': specifier: ^3.2.2 version: 3.2.2(react@19.2.7) - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^5.4.0 version: 5.4.0(react-hook-form@7.81.0(react@19.2.7)) - "@prisma/adapter-mariadb": + '@prisma/adapter-mariadb': specifier: ^7.8.0 version: 7.8.0 - "@prisma/client": + '@prisma/client': specifier: ^7.8.0 version: 7.8.0(prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3))(typescript@5.9.3) - "@tanstack/react-virtual": + '@tanstack/react-virtual': specifier: ^3.14.5 version: 3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) bcryptjs: @@ -118,37 +119,37 @@ importers: specifier: ^3.24.0 version: 3.25.76 devDependencies: - "@eslint/js": + '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@10.6.0(jiti@2.7.0)) - "@next/eslint-plugin-next": + '@next/eslint-plugin-next': specifier: ^16.2.10 version: 16.2.10 - "@tailwindcss/forms": + '@tailwindcss/forms': specifier: ^0.5.11 version: 0.5.11(tailwindcss@4.3.2) - "@tailwindcss/postcss": + '@tailwindcss/postcss': specifier: ^4.3.2 version: 4.3.2 - "@tailwindcss/typography": + '@tailwindcss/typography': specifier: ^0.5.20 version: 0.5.20(tailwindcss@4.3.2) - "@types/jpeg-js": + '@types/jpeg-js': specifier: ^0.3.7 version: 0.3.7 - "@types/node": + '@types/node': specifier: ^22.10.0 version: 22.20.0 - "@types/nodemailer": + '@types/nodemailer': specifier: ^6.4.0 version: 6.4.24 - "@types/react": + '@types/react': specifier: ^19.2.0 version: 19.2.17 - "@types/react-dom": + '@types/react-dom': specifier: ^19.2.0 version: 19.2.3(@types/react@19.2.17) - "@types/sanitize-html": + '@types/sanitize-html': specifier: ^2.16.1 version: 2.16.1 dotenv: @@ -196,7 +197,7 @@ importers: packages/db: dependencies: - "@atomcms/settings": + '@atomcms/settings': specifier: workspace:* version: link:../settings drizzle-orm: @@ -226,3611 +227,2454 @@ importers: version: 2.1.9(@types/node@22.20.0) packages: - "@alloc/quick-lru@5.2.0": - resolution: - { - integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, - } - engines: { node: ">=10" } - "@auth/core@0.41.2": - resolution: - { - integrity: sha512-Hx5MNBxN2fJTbJKGUKAA0wca43D0Akl3TvufY54Gn8lop7F+34vU1zA1pn0vQfIoVuLIrpfc2nkyjwIaPJMW7w==, - } + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@auth/core@0.41.2': + resolution: {integrity: sha512-Hx5MNBxN2fJTbJKGUKAA0wca43D0Akl3TvufY54Gn8lop7F+34vU1zA1pn0vQfIoVuLIrpfc2nkyjwIaPJMW7w==} peerDependencies: - "@simplewebauthn/browser": ^9.0.1 - "@simplewebauthn/server": ^9.0.2 + '@simplewebauthn/browser': ^9.0.1 + '@simplewebauthn/server': ^9.0.2 nodemailer: ^7.0.7 peerDependenciesMeta: - "@simplewebauthn/browser": + '@simplewebauthn/browser': optional: true - "@simplewebauthn/server": + '@simplewebauthn/server': optional: true nodemailer: optional: true - "@babel/code-frame@7.29.7": - resolution: - { - integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==, - } - engines: { node: ">=6.9.0" } + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} - "@babel/compat-data@7.29.7": - resolution: - { - integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==, - } - engines: { node: ">=6.9.0" } + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} - "@babel/core@7.29.7": - resolution: - { - integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==, - } - engines: { node: ">=6.9.0" } + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} - "@babel/generator@7.29.7": - resolution: - { - integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==, - } - engines: { node: ">=6.9.0" } + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + engines: {node: '>=6.9.0'} - "@babel/helper-compilation-targets@7.29.7": - resolution: - { - integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} - "@babel/helper-globals@7.29.7": - resolution: - { - integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} - "@babel/helper-module-imports@7.29.7": - resolution: - { - integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} - "@babel/helper-module-transforms@7.29.7": - resolution: - { - integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 - "@babel/helper-string-parser@7.29.7": - resolution: - { - integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} - "@babel/helper-validator-identifier@7.29.7": - resolution: - { - integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} - "@babel/helper-validator-option@7.29.7": - resolution: - { - integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} - "@babel/helpers@7.29.7": - resolution: - { - integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==, - } - engines: { node: ">=6.9.0" } + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} - "@babel/parser@7.29.7": - resolution: - { - integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==, - } - engines: { node: ">=6.0.0" } + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} hasBin: true - "@babel/template@7.29.7": - resolution: - { - integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==, - } - engines: { node: ">=6.9.0" } + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} - "@babel/traverse@7.29.7": - resolution: - { - integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==, - } - engines: { node: ">=6.9.0" } + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} + engines: {node: '>=6.9.0'} - "@babel/types@7.29.7": - resolution: - { - integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==, - } - engines: { node: ">=6.9.0" } + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} - "@borewit/text-codec@0.2.2": - resolution: - { - integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==, - } + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} - "@dnd-kit/accessibility@3.1.1": - resolution: - { - integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==, - } + '@dnd-kit/accessibility@3.1.1': + resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} peerDependencies: - react: ">=16.8.0" + react: '>=16.8.0' - "@dnd-kit/core@6.3.1": - resolution: - { - integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==, - } + '@dnd-kit/core@6.3.1': + resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" + react: '>=16.8.0' + react-dom: '>=16.8.0' - "@dnd-kit/sortable@10.0.0": - resolution: - { - integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==, - } + '@dnd-kit/sortable@10.0.0': + resolution: {integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==} peerDependencies: - "@dnd-kit/core": ^6.3.0 - react: ">=16.8.0" + '@dnd-kit/core': ^6.3.0 + react: '>=16.8.0' - "@dnd-kit/utilities@3.2.2": - resolution: - { - integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==, - } + '@dnd-kit/utilities@3.2.2': + resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} peerDependencies: - react: ">=16.8.0" + react: '>=16.8.0' - "@drizzle-team/brocli@0.10.2": - resolution: - { - integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==, - } + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - "@electric-sql/pglite-socket@0.1.1": - resolution: - { - integrity: sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==, - } + '@electric-sql/pglite-socket@0.1.1': + resolution: {integrity: sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==} hasBin: true peerDependencies: - "@electric-sql/pglite": 0.4.1 + '@electric-sql/pglite': 0.4.1 - "@electric-sql/pglite-tools@0.3.1": - resolution: - { - integrity: sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==, - } + '@electric-sql/pglite-tools@0.3.1': + resolution: {integrity: sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==} peerDependencies: - "@electric-sql/pglite": 0.4.1 + '@electric-sql/pglite': 0.4.1 - "@electric-sql/pglite@0.4.1": - resolution: - { - integrity: sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==, - } + '@electric-sql/pglite@0.4.1': + resolution: {integrity: sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==} - "@emnapi/runtime@1.11.1": - resolution: - { - integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==, - } + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - "@esbuild-kit/core-utils@3.3.2": - resolution: - { - integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==, - } - deprecated: "Merged into tsx: https://tsx.is" + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.is' - "@esbuild-kit/esm-loader@2.6.5": - resolution: - { - integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==, - } - deprecated: "Merged into tsx: https://tsx.is" + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.is' - "@esbuild/aix-ppc64@0.19.12": - resolution: - { - integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==, - } - engines: { node: ">=12" } + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.21.5": - resolution: - { - integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, - } - engines: { node: ">=12" } + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.28.1": - resolution: - { - integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==, - } - engines: { node: ">=18" } + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - "@esbuild/android-arm64@0.18.20": - resolution: - { - integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, - } - engines: { node: ">=12" } + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.19.12": - resolution: - { - integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==, - } - engines: { node: ">=12" } + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.21.5": - resolution: - { - integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, - } - engines: { node: ">=12" } + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.28.1": - resolution: - { - integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - "@esbuild/android-arm@0.18.20": - resolution: - { - integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, - } - engines: { node: ">=12" } + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} cpu: [arm] os: [android] - "@esbuild/android-arm@0.19.12": - resolution: - { - integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==, - } - engines: { node: ">=12" } + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} cpu: [arm] os: [android] - "@esbuild/android-arm@0.21.5": - resolution: - { - integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, - } - engines: { node: ">=12" } + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} cpu: [arm] os: [android] - "@esbuild/android-arm@0.28.1": - resolution: - { - integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==, - } - engines: { node: ">=18" } + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} cpu: [arm] os: [android] - "@esbuild/android-x64@0.18.20": - resolution: - { - integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, - } - engines: { node: ">=12" } + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} cpu: [x64] os: [android] - "@esbuild/android-x64@0.19.12": - resolution: - { - integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==, - } - engines: { node: ">=12" } + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} cpu: [x64] os: [android] - "@esbuild/android-x64@0.21.5": - resolution: - { - integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, - } - engines: { node: ">=12" } + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} cpu: [x64] os: [android] - "@esbuild/android-x64@0.28.1": - resolution: - { - integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==, - } - engines: { node: ">=18" } + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} cpu: [x64] os: [android] - "@esbuild/darwin-arm64@0.18.20": - resolution: - { - integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, - } - engines: { node: ">=12" } + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.19.12": - resolution: - { - integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==, - } - engines: { node: ">=12" } + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.21.5": - resolution: - { - integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, - } - engines: { node: ">=12" } + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.28.1": - resolution: - { - integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==, - } - engines: { node: ">=18" } + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-x64@0.18.20": - resolution: - { - integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, - } - engines: { node: ">=12" } + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.19.12": - resolution: - { - integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==, - } - engines: { node: ">=12" } + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.21.5": - resolution: - { - integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, - } - engines: { node: ">=12" } + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.28.1": - resolution: - { - integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==, - } - engines: { node: ">=18" } + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - "@esbuild/freebsd-arm64@0.18.20": - resolution: - { - integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.19.12": - resolution: - { - integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.21.5": - resolution: - { - integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.28.1": - resolution: - { - integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-x64@0.18.20": - resolution: - { - integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.19.12": - resolution: - { - integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.21.5": - resolution: - { - integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.28.1": - resolution: - { - integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - "@esbuild/linux-arm64@0.18.20": - resolution: - { - integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.19.12": - resolution: - { - integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.21.5": - resolution: - { - integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.28.1": - resolution: - { - integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm@0.18.20": - resolution: - { - integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.19.12": - resolution: - { - integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.21.5": - resolution: - { - integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.28.1": - resolution: - { - integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - "@esbuild/linux-ia32@0.18.20": - resolution: - { - integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, - } - engines: { node: ">=12" } + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.19.12": - resolution: - { - integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==, - } - engines: { node: ">=12" } + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.21.5": - resolution: - { - integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, - } - engines: { node: ">=12" } + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.28.1": - resolution: - { - integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==, - } - engines: { node: ">=18" } + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - "@esbuild/linux-loong64@0.18.20": - resolution: - { - integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, - } - engines: { node: ">=12" } + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.19.12": - resolution: - { - integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==, - } - engines: { node: ">=12" } + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.21.5": - resolution: - { - integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, - } - engines: { node: ">=12" } + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.28.1": - resolution: - { - integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==, - } - engines: { node: ">=18" } + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - "@esbuild/linux-mips64el@0.18.20": - resolution: - { - integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, - } - engines: { node: ">=12" } + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.19.12": - resolution: - { - integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==, - } - engines: { node: ">=12" } + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.21.5": - resolution: - { - integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, - } - engines: { node: ">=12" } + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.28.1": - resolution: - { - integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - "@esbuild/linux-ppc64@0.18.20": - resolution: - { - integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, - } - engines: { node: ">=12" } + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.19.12": - resolution: - { - integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==, - } - engines: { node: ">=12" } + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.21.5": - resolution: - { - integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, - } - engines: { node: ">=12" } + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.28.1": - resolution: - { - integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - "@esbuild/linux-riscv64@0.18.20": - resolution: - { - integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, - } - engines: { node: ">=12" } + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.19.12": - resolution: - { - integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==, - } - engines: { node: ">=12" } + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.21.5": - resolution: - { - integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, - } - engines: { node: ">=12" } + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.28.1": - resolution: - { - integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - "@esbuild/linux-s390x@0.18.20": - resolution: - { - integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, - } - engines: { node: ">=12" } + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.19.12": - resolution: - { - integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==, - } - engines: { node: ">=12" } + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.21.5": - resolution: - { - integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, - } - engines: { node: ">=12" } + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.28.1": - resolution: - { - integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==, - } - engines: { node: ">=18" } + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - "@esbuild/linux-x64@0.18.20": - resolution: - { - integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, - } - engines: { node: ">=12" } + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.19.12": - resolution: - { - integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==, - } - engines: { node: ">=12" } + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.21.5": - resolution: - { - integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, - } - engines: { node: ">=12" } + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.28.1": - resolution: - { - integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==, - } - engines: { node: ">=18" } + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - "@esbuild/netbsd-arm64@0.28.1": - resolution: - { - integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-x64@0.18.20": - resolution: - { - integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, - } - engines: { node: ">=12" } + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.19.12": - resolution: - { - integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==, - } - engines: { node: ">=12" } + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.21.5": - resolution: - { - integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, - } - engines: { node: ">=12" } + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.28.1": - resolution: - { - integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - "@esbuild/openbsd-arm64@0.28.1": - resolution: - { - integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-x64@0.18.20": - resolution: - { - integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, - } - engines: { node: ">=12" } + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.19.12": - resolution: - { - integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==, - } - engines: { node: ">=12" } + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.21.5": - resolution: - { - integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, - } - engines: { node: ">=12" } + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.28.1": - resolution: - { - integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - "@esbuild/openharmony-arm64@0.28.1": - resolution: - { - integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==, - } - engines: { node: ">=18" } + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - "@esbuild/sunos-x64@0.18.20": - resolution: - { - integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, - } - engines: { node: ">=12" } + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.19.12": - resolution: - { - integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==, - } - engines: { node: ">=12" } + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.21.5": - resolution: - { - integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, - } - engines: { node: ">=12" } + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.28.1": - resolution: - { - integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==, - } - engines: { node: ">=18" } + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - "@esbuild/win32-arm64@0.18.20": - resolution: - { - integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, - } - engines: { node: ">=12" } + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.19.12": - resolution: - { - integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==, - } - engines: { node: ">=12" } + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.21.5": - resolution: - { - integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, - } - engines: { node: ">=12" } + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.28.1": - resolution: - { - integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==, - } - engines: { node: ">=18" } + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - "@esbuild/win32-ia32@0.18.20": - resolution: - { - integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, - } - engines: { node: ">=12" } + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.19.12": - resolution: - { - integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==, - } - engines: { node: ">=12" } + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.21.5": - resolution: - { - integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, - } - engines: { node: ">=12" } + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.28.1": - resolution: - { - integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==, - } - engines: { node: ">=18" } + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - "@esbuild/win32-x64@0.18.20": - resolution: - { - integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, - } - engines: { node: ">=12" } + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.19.12": - resolution: - { - integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==, - } - engines: { node: ">=12" } + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.21.5": - resolution: - { - integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, - } - engines: { node: ">=12" } + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.28.1": - resolution: - { - integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==, - } - engines: { node: ">=18" } + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - "@eslint-community/eslint-utils@4.9.1": - resolution: - { - integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - "@eslint-community/regexpp@4.12.2": - resolution: - { - integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - "@eslint/config-array@0.23.5": - resolution: - { - integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - "@eslint/config-helpers@0.6.0": - resolution: - { - integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - "@eslint/core@1.2.1": - resolution: - { - integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - "@eslint/js@10.0.1": - resolution: - { - integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: ^10.0.0 peerDependenciesMeta: eslint: optional: true - "@eslint/object-schema@3.0.5": - resolution: - { - integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - "@eslint/plugin-kit@0.7.2": - resolution: - { - integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - "@floating-ui/core@1.8.0": - resolution: - { - integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==, - } + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - "@floating-ui/dom@1.8.0": - resolution: - { - integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==, - } + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - "@floating-ui/react-dom@2.1.9": - resolution: - { - integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==, - } + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" + react: '>=16.8.0' + react-dom: '>=16.8.0' - "@floating-ui/utils@0.2.12": - resolution: - { - integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==, - } + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} - "@formatjs/fast-memoize@3.1.6": - resolution: - { - integrity: sha512-H5aexk1Le7T9TPmscacZ+1pR6CTa2n1wq+HDVGXhH8TzUlQQpeXzZs91dRtmFHrbeNbjPFPfQujUqm7MHgVoXQ==, - } + '@formatjs/fast-memoize@3.1.6': + resolution: {integrity: sha512-H5aexk1Le7T9TPmscacZ+1pR6CTa2n1wq+HDVGXhH8TzUlQQpeXzZs91dRtmFHrbeNbjPFPfQujUqm7MHgVoXQ==} - "@formatjs/icu-messageformat-parser@3.5.12": - resolution: - { - integrity: sha512-YyzzxVgYJ8DELmmkhn0Yr0rUj0dTJFf9Jp628K3S0ysInBWxLVDOS8i3RP91cCp4DMK4WYb4cVMhWA9i4knSJg==, - } + '@formatjs/icu-messageformat-parser@3.5.12': + resolution: {integrity: sha512-YyzzxVgYJ8DELmmkhn0Yr0rUj0dTJFf9Jp628K3S0ysInBWxLVDOS8i3RP91cCp4DMK4WYb4cVMhWA9i4knSJg==} - "@formatjs/icu-skeleton-parser@2.1.10": - resolution: - { - integrity: sha512-XuSva+8ZGawk8VnD5VD6UeH8KarQ/Z022zgjHDoHmlNiAewstXuuzXc0Hk5pGFSdG+nNw5bfJKXqj1ZXHn9yUA==, - } + '@formatjs/icu-skeleton-parser@2.1.10': + resolution: {integrity: sha512-XuSva+8ZGawk8VnD5VD6UeH8KarQ/Z022zgjHDoHmlNiAewstXuuzXc0Hk5pGFSdG+nNw5bfJKXqj1ZXHn9yUA==} - "@formatjs/intl-localematcher@0.8.10": - resolution: - { - integrity: sha512-P/IC3qws3jH+1fEs+o0RIFgXKRaQlFehjS5W0FPAqdo6hgzawLl+eD0q0JjheQ3XtoOe5n8WSYfX06KQZI/QJA==, - } + '@formatjs/intl-localematcher@0.8.10': + resolution: {integrity: sha512-P/IC3qws3jH+1fEs+o0RIFgXKRaQlFehjS5W0FPAqdo6hgzawLl+eD0q0JjheQ3XtoOe5n8WSYfX06KQZI/QJA==} - "@hono/node-server@1.19.14": - resolution: - { - integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==, - } - engines: { node: ">=18.14.1" } + '@hono/node-server@1.19.14': + resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} + engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 - "@hookform/resolvers@5.4.0": - resolution: - { - integrity: sha512-EIsqr/t/qbinPIhGjMdtvutIN1Kk4uwbROE9/UQ93CAVGR7GkA7Y92+fX80OzXi/OB67jVFYwKGO1WzkxmkFZw==, - } + '@hookform/resolvers@5.4.0': + resolution: {integrity: sha512-EIsqr/t/qbinPIhGjMdtvutIN1Kk4uwbROE9/UQ93CAVGR7GkA7Y92+fX80OzXi/OB67jVFYwKGO1WzkxmkFZw==} peerDependencies: react-hook-form: ^7.55.0 - "@humanfs/core@0.19.2": - resolution: - { - integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==, - } - engines: { node: ">=18.18.0" } + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} - "@humanfs/node@0.16.8": - resolution: - { - integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==, - } - engines: { node: ">=18.18.0" } + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} - "@humanfs/types@0.15.0": - resolution: - { - integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==, - } - engines: { node: ">=18.18.0" } + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} - "@humanwhocodes/module-importer@1.0.1": - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: ">=12.22" } + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} - "@humanwhocodes/retry@0.4.3": - resolution: - { - integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, - } - engines: { node: ">=18.18" } + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} - "@img/colour@1.1.0": - resolution: - { - integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, - } - engines: { node: ">=18" } + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} - "@img/sharp-darwin-arm64@0.34.5": - resolution: - { - integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - "@img/sharp-darwin-x64@0.34.5": - resolution: - { - integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - "@img/sharp-libvips-darwin-arm64@1.2.4": - resolution: - { - integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, - } + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - "@img/sharp-libvips-darwin-x64@1.2.4": - resolution: - { - integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, - } + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - "@img/sharp-libvips-linux-arm64@1.2.4": - resolution: - { - integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, - } + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-arm@1.2.4": - resolution: - { - integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, - } + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-ppc64@1.2.4": - resolution: - { - integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, - } + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-riscv64@1.2.4": - resolution: - { - integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, - } + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-s390x@1.2.4": - resolution: - { - integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, - } + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-x64@1.2.4": - resolution: - { - integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, - } + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] libc: [glibc] - "@img/sharp-libvips-linuxmusl-arm64@1.2.4": - resolution: - { - integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, - } + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] libc: [musl] - "@img/sharp-libvips-linuxmusl-x64@1.2.4": - resolution: - { - integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, - } + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] libc: [musl] - "@img/sharp-linux-arm64@0.34.5": - resolution: - { - integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [glibc] - "@img/sharp-linux-arm@0.34.5": - resolution: - { - integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] libc: [glibc] - "@img/sharp-linux-ppc64@0.34.5": - resolution: - { - integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] libc: [glibc] - "@img/sharp-linux-riscv64@0.34.5": - resolution: - { - integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] libc: [glibc] - "@img/sharp-linux-s390x@0.34.5": - resolution: - { - integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] libc: [glibc] - "@img/sharp-linux-x64@0.34.5": - resolution: - { - integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [glibc] - "@img/sharp-linuxmusl-arm64@0.34.5": - resolution: - { - integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [musl] - "@img/sharp-linuxmusl-x64@0.34.5": - resolution: - { - integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [musl] - "@img/sharp-wasm32@0.34.5": - resolution: - { - integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - "@img/sharp-win32-arm64@0.34.5": - resolution: - { - integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - "@img/sharp-win32-ia32@0.34.5": - resolution: - { - integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - "@img/sharp-win32-x64@0.34.5": - resolution: - { - integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - "@ioredis/commands@1.10.0": - resolution: - { - integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==, - } + '@ioredis/commands@1.10.0': + resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==} - "@jridgewell/gen-mapping@0.3.13": - resolution: - { - integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, - } + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - "@jridgewell/remapping@2.3.5": - resolution: - { - integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, - } + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - "@jridgewell/resolve-uri@3.1.2": - resolution: - { - integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, - } - engines: { node: ">=6.0.0" } + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - "@jridgewell/sourcemap-codec@1.5.5": - resolution: - { - integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, - } + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - "@jridgewell/trace-mapping@0.3.31": - resolution: - { - integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, - } + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - "@kurkle/color@0.3.4": - resolution: - { - integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==, - } + '@kurkle/color@0.3.4': + resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} - "@next/env@16.2.10": - resolution: - { - integrity: sha512-zLPxg9M0MEHmygpj5OuxjQ+vHMiy/K7cSp74G8ecYolmgUWw0RwN02tF56npup/+qaI8JB97hQgS/r2Hb6QwVA==, - } + '@next/env@16.2.10': + resolution: {integrity: sha512-zLPxg9M0MEHmygpj5OuxjQ+vHMiy/K7cSp74G8ecYolmgUWw0RwN02tF56npup/+qaI8JB97hQgS/r2Hb6QwVA==} - "@next/eslint-plugin-next@16.2.10": - resolution: - { - integrity: sha512-Gs8D2m21VnJeFo9qvYIIqJH94frWerWYu41BprU1pLtRVF7PCQNLiFZZ3fG+iPuj3K83Cwv/rt+msLOy8Qgu3Q==, - } + '@next/eslint-plugin-next@16.2.10': + resolution: {integrity: sha512-Gs8D2m21VnJeFo9qvYIIqJH94frWerWYu41BprU1pLtRVF7PCQNLiFZZ3fG+iPuj3K83Cwv/rt+msLOy8Qgu3Q==} - "@next/swc-darwin-arm64@16.2.10": - resolution: - { - integrity: sha512-v9IdJCa0H0mbo+8z5zwUpOk1Vj7RjkcI5uNYf5Ws1y6szf/p3Mzl9hLaST8SCt6L9h8NGnruZcd2+o0NTNwDhA==, - } - engines: { node: ">= 10" } + '@next/swc-darwin-arm64@16.2.10': + resolution: {integrity: sha512-v9IdJCa0H0mbo+8z5zwUpOk1Vj7RjkcI5uNYf5Ws1y6szf/p3Mzl9hLaST8SCt6L9h8NGnruZcd2+o0NTNwDhA==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - "@next/swc-darwin-x64@16.2.10": - resolution: - { - integrity: sha512-17IS0jJRViROGmA9uGdNR8VPJpfbnaVG7E9qhso5jDLkmyd0lSDORWxbcKINzcFqzZqGwGtMSnrFRxBpuUYjLQ==, - } - engines: { node: ">= 10" } + '@next/swc-darwin-x64@16.2.10': + resolution: {integrity: sha512-17IS0jJRViROGmA9uGdNR8VPJpfbnaVG7E9qhso5jDLkmyd0lSDORWxbcKINzcFqzZqGwGtMSnrFRxBpuUYjLQ==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] - "@next/swc-linux-arm64-gnu@16.2.10": - resolution: - { - integrity: sha512-GRQRsRtuciNJvB54AvvuQTiq0oZtFwa1owQqtZD8wwnGpM2L39MV22kpI72YSXLKIyY40LC66EiLFv4PiicXxg==, - } - engines: { node: ">= 10" } + '@next/swc-linux-arm64-gnu@16.2.10': + resolution: {integrity: sha512-GRQRsRtuciNJvB54AvvuQTiq0oZtFwa1owQqtZD8wwnGpM2L39MV22kpI72YSXLKIyY40LC66EiLFv4PiicXxg==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - "@next/swc-linux-arm64-musl@16.2.10": - resolution: - { - integrity: sha512-zkN9MQYS7UQBro+FnISUq1itaQjXI9xqISzuQ+2bc921NcJ1x4yPCqrn77tVN6/dOOXaaWVX3k6/bR07pPwK+A==, - } - engines: { node: ">= 10" } + '@next/swc-linux-arm64-musl@16.2.10': + resolution: {integrity: sha512-zkN9MQYS7UQBro+FnISUq1itaQjXI9xqISzuQ+2bc921NcJ1x4yPCqrn77tVN6/dOOXaaWVX3k6/bR07pPwK+A==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - "@next/swc-linux-x64-gnu@16.2.10": - resolution: - { - integrity: sha512-iCVJnwvrPYECvA6WM/7+oo+OiTvedIKLxtCLAZP4xZR3nXa1zmzZyLPbYCmWvpd4CvMYF1EMTafd0ii3DygLvA==, - } - engines: { node: ">= 10" } + '@next/swc-linux-x64-gnu@16.2.10': + resolution: {integrity: sha512-iCVJnwvrPYECvA6WM/7+oo+OiTvedIKLxtCLAZP4xZR3nXa1zmzZyLPbYCmWvpd4CvMYF1EMTafd0ii3DygLvA==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - "@next/swc-linux-x64-musl@16.2.10": - resolution: - { - integrity: sha512-ov2g4H0dHY9bPoOU83m91hWT7Iq5qy13bUnyyshLU3HGR1Ownn0X9QpmDPc5iIUaahTp7f7LeGAhV4DSFtackw==, - } - engines: { node: ">= 10" } + '@next/swc-linux-x64-musl@16.2.10': + resolution: {integrity: sha512-ov2g4H0dHY9bPoOU83m91hWT7Iq5qy13bUnyyshLU3HGR1Ownn0X9QpmDPc5iIUaahTp7f7LeGAhV4DSFtackw==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - "@next/swc-win32-arm64-msvc@16.2.10": - resolution: - { - integrity: sha512-DwAnhLX76HQiFFQNgWlcK+JzlnD1rZ+UK/WY0ZMI/deXpvgnesjNYrqcfo1JzBuz4Kf7o3brIBL0glI1junatA==, - } - engines: { node: ">= 10" } + '@next/swc-win32-arm64-msvc@16.2.10': + resolution: {integrity: sha512-DwAnhLX76HQiFFQNgWlcK+JzlnD1rZ+UK/WY0ZMI/deXpvgnesjNYrqcfo1JzBuz4Kf7o3brIBL0glI1junatA==} + engines: {node: '>= 10'} cpu: [arm64] os: [win32] - "@next/swc-win32-x64-msvc@16.2.10": - resolution: - { - integrity: sha512-0JXq3b85Jk9Jg4ntLUbXSPvoDw3gpZou7twuKdoFG2jOw635v7+IiXfTaa0TxVMyx78pUjnrVYwLgjKfX4e6/A==, - } - engines: { node: ">= 10" } + '@next/swc-win32-x64-msvc@16.2.10': + resolution: {integrity: sha512-0JXq3b85Jk9Jg4ntLUbXSPvoDw3gpZou7twuKdoFG2jOw635v7+IiXfTaa0TxVMyx78pUjnrVYwLgjKfX4e6/A==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - "@nodelib/fs.scandir@2.1.5": - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: ">= 8" } + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} - "@nodelib/fs.stat@2.0.5": - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: ">= 8" } + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} - "@nodelib/fs.walk@1.2.8": - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: ">= 8" } + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} - "@otplib/core@12.0.1": - resolution: - { - integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==, - } + '@otplib/core@12.0.1': + resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==} - "@otplib/plugin-crypto@12.0.1": - resolution: - { - integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==, - } + '@otplib/plugin-crypto@12.0.1': + resolution: {integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==} deprecated: Please upgrade to v13 of otplib. Refer to otplib docs for migration paths - "@otplib/plugin-thirty-two@12.0.1": - resolution: - { - integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==, - } + '@otplib/plugin-thirty-two@12.0.1': + resolution: {integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==} deprecated: Please upgrade to v13 of otplib. Refer to otplib docs for migration paths - "@otplib/preset-default@12.0.1": - resolution: - { - integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==, - } + '@otplib/preset-default@12.0.1': + resolution: {integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==} deprecated: Please upgrade to v13 of otplib. Refer to otplib docs for migration paths - "@otplib/preset-v11@12.0.1": - resolution: - { - integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==, - } + '@otplib/preset-v11@12.0.1': + resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==} - "@panva/hkdf@1.2.1": - resolution: - { - integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==, - } + '@panva/hkdf@1.2.1': + resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} - "@parcel/watcher-android-arm64@2.5.6": - resolution: - { - integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - "@parcel/watcher-darwin-arm64@2.5.6": - resolution: - { - integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - "@parcel/watcher-darwin-x64@2.5.6": - resolution: - { - integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - "@parcel/watcher-freebsd-x64@2.5.6": - resolution: - { - integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - "@parcel/watcher-linux-arm-glibc@2.5.6": - resolution: - { - integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [glibc] - "@parcel/watcher-linux-arm-musl@2.5.6": - resolution: - { - integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [musl] - "@parcel/watcher-linux-arm64-glibc@2.5.6": - resolution: - { - integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - "@parcel/watcher-linux-arm64-musl@2.5.6": - resolution: - { - integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [musl] - "@parcel/watcher-linux-x64-glibc@2.5.6": - resolution: - { - integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [glibc] - "@parcel/watcher-linux-x64-musl@2.5.6": - resolution: - { - integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [musl] - "@parcel/watcher-win32-arm64@2.5.6": - resolution: - { - integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - "@parcel/watcher-win32-ia32@2.5.6": - resolution: - { - integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - "@parcel/watcher-win32-x64@2.5.6": - resolution: - { - integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - "@parcel/watcher@2.5.6": - resolution: - { - integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==, - } - engines: { node: ">= 10.0.0" } + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} - "@petamoriken/float16@3.9.3": - resolution: - { - integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==, - } + '@petamoriken/float16@3.9.3': + resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==} - "@prisma/adapter-mariadb@7.8.0": - resolution: - { - integrity: sha512-mWsgcfbUjxB3qSzRlLs8E03vsKrqXzYK2zpx3e8u6wIgeHJM/sE46cuOGcYvHiZGmeQLCd3xL6YSSGM9QOLI6w==, - } + '@prisma/adapter-mariadb@7.8.0': + resolution: {integrity: sha512-mWsgcfbUjxB3qSzRlLs8E03vsKrqXzYK2zpx3e8u6wIgeHJM/sE46cuOGcYvHiZGmeQLCd3xL6YSSGM9QOLI6w==} - "@prisma/client-runtime-utils@7.8.0": - resolution: - { - integrity: sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==, - } + '@prisma/client-runtime-utils@7.8.0': + resolution: {integrity: sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==} - "@prisma/client@7.8.0": - resolution: - { - integrity: sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==, - } - engines: { node: ^20.19 || ^22.12 || >=24.0 } + '@prisma/client@7.8.0': + resolution: {integrity: sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==} + engines: {node: ^20.19 || ^22.12 || >=24.0} peerDependencies: - prisma: "*" - typescript: ">=5.4.0" + prisma: '*' + typescript: '>=5.4.0' peerDependenciesMeta: prisma: optional: true typescript: optional: true - "@prisma/config@7.8.0": - resolution: - { - integrity: sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==, - } + '@prisma/config@7.8.0': + resolution: {integrity: sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==} - "@prisma/debug@7.2.0": - resolution: - { - integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==, - } + '@prisma/debug@7.2.0': + resolution: {integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==} - "@prisma/debug@7.8.0": - resolution: - { - integrity: sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==, - } + '@prisma/debug@7.8.0': + resolution: {integrity: sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==} - "@prisma/dev@0.24.3": - resolution: - { - integrity: sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==, - } + '@prisma/dev@0.24.3': + resolution: {integrity: sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==} - "@prisma/driver-adapter-utils@7.8.0": - resolution: - { - integrity: sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==, - } + '@prisma/driver-adapter-utils@7.8.0': + resolution: {integrity: sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==} - "@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a": - resolution: - { - integrity: sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==, - } + '@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a': + resolution: {integrity: sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==} - "@prisma/engines@7.8.0": - resolution: - { - integrity: sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==, - } + '@prisma/engines@7.8.0': + resolution: {integrity: sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==} - "@prisma/fetch-engine@7.8.0": - resolution: - { - integrity: sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==, - } + '@prisma/fetch-engine@7.8.0': + resolution: {integrity: sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==} - "@prisma/get-platform@7.2.0": - resolution: - { - integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==, - } + '@prisma/get-platform@7.2.0': + resolution: {integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==} - "@prisma/get-platform@7.8.0": - resolution: - { - integrity: sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==, - } + '@prisma/get-platform@7.8.0': + resolution: {integrity: sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==} - "@prisma/query-plan-executor@7.2.0": - resolution: - { - integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==, - } + '@prisma/query-plan-executor@7.2.0': + resolution: {integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==} - "@prisma/streams-local@0.1.2": - resolution: - { - integrity: sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==, - } - engines: { bun: ">=1.3.6", node: ">=22.0.0" } + '@prisma/streams-local@0.1.2': + resolution: {integrity: sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==} + engines: {bun: '>=1.3.6', node: '>=22.0.0'} - "@prisma/studio-core@0.27.3": - resolution: - { - integrity: sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==, - } - engines: { node: ^20.19 || ^22.12 || >=24.0, pnpm: "8" } + '@prisma/studio-core@0.27.3': + resolution: {integrity: sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==} + engines: {node: ^20.19 || ^22.12 || >=24.0, pnpm: '8'} peerDependencies: - "@types/react": ^18.0.0 || ^19.0.0 + '@types/react': ^18.0.0 || ^19.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - "@radix-ui/number@1.1.2": - resolution: - { - integrity: sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==, - } + '@radix-ui/number@1.1.2': + resolution: {integrity: sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==} - "@radix-ui/primitive@1.1.3": - resolution: - { - integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==, - } + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - "@radix-ui/primitive@1.1.5": - resolution: - { - integrity: sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==, - } + '@radix-ui/primitive@1.1.5': + resolution: {integrity: sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==} - "@radix-ui/react-accessible-icon@1.1.11": - resolution: - { - integrity: sha512-HQDOFTKwSnmUij6l54wYJJtxTAnxI71+YJLOrjm2ladFB8HAV5Jt7hwaZPhWTGBkYoW4+ZAOfNZrLDh/qvxSYA==, - } + '@radix-ui/react-accessible-icon@1.1.11': + resolution: {integrity: sha512-HQDOFTKwSnmUij6l54wYJJtxTAnxI71+YJLOrjm2ladFB8HAV5Jt7hwaZPhWTGBkYoW4+ZAOfNZrLDh/qvxSYA==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-accordion@1.2.16": - resolution: - { - integrity: sha512-BpZJNmetujnGgUI6OX0jEhEmlA46WPqgub8Rv09Kyquwd0cc1ndMKpiPYCjmBU6KSSRPAMtgLpEoZSG/tdNIWQ==, - } + '@radix-ui/react-accordion@1.2.16': + resolution: {integrity: sha512-BpZJNmetujnGgUI6OX0jEhEmlA46WPqgub8Rv09Kyquwd0cc1ndMKpiPYCjmBU6KSSRPAMtgLpEoZSG/tdNIWQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-alert-dialog@1.1.19": - resolution: - { - integrity: sha512-FA7n1f6D/DwGE0+AWxiY5LacNbbExQuEgMubeG06idEaH+mSLuf9dp/qBNqOnvbTQ+4gZ2ue1RATF1Ub91Mg5g==, - } + '@radix-ui/react-alert-dialog@1.1.19': + resolution: {integrity: sha512-FA7n1f6D/DwGE0+AWxiY5LacNbbExQuEgMubeG06idEaH+mSLuf9dp/qBNqOnvbTQ+4gZ2ue1RATF1Ub91Mg5g==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-arrow@1.1.11": - resolution: - { - integrity: sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==, - } + '@radix-ui/react-arrow@1.1.11': + resolution: {integrity: sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-aspect-ratio@1.1.11": - resolution: - { - integrity: sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==, - } + '@radix-ui/react-aspect-ratio@1.1.11': + resolution: {integrity: sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-avatar@1.2.2": - resolution: - { - integrity: sha512-sST0qh8GzOB7besQ3tMLWLyngnRuSk0gc/Hm+667KYKQFCt6Y6ZXv25WlqM7dIDK54ULCh5+CHmk4LIolzfz+A==, - } + '@radix-ui/react-avatar@1.2.2': + resolution: {integrity: sha512-sST0qh8GzOB7besQ3tMLWLyngnRuSk0gc/Hm+667KYKQFCt6Y6ZXv25WlqM7dIDK54ULCh5+CHmk4LIolzfz+A==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-checkbox@1.3.7": - resolution: - { - integrity: sha512-JroKHfQBfh+fDuzpPsBC+pESkhuq8ql4hljTguz8MWnS35cISr3d/Jhl9kYrB44FlDtxCArYdDvTx+BSsJ64rQ==, - } + '@radix-ui/react-checkbox@1.3.7': + resolution: {integrity: sha512-JroKHfQBfh+fDuzpPsBC+pESkhuq8ql4hljTguz8MWnS35cISr3d/Jhl9kYrB44FlDtxCArYdDvTx+BSsJ64rQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-collapsible@1.1.16": - resolution: - { - integrity: sha512-opfXRe6nnzyGmCDPx+l1Aqo/RbqWtQal2FnsBqF9hhePp6j0LsRoBaRxcMOlTv+uYTJVtWYZKg9t9wTe+BA/ZA==, - } + '@radix-ui/react-collapsible@1.1.16': + resolution: {integrity: sha512-opfXRe6nnzyGmCDPx+l1Aqo/RbqWtQal2FnsBqF9hhePp6j0LsRoBaRxcMOlTv+uYTJVtWYZKg9t9wTe+BA/ZA==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-collection@1.1.12": - resolution: - { - integrity: sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==, - } + '@radix-ui/react-collection@1.1.12': + resolution: {integrity: sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-compose-refs@1.1.2": - resolution: - { - integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==, - } + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-compose-refs@1.1.3": - resolution: - { - integrity: sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==, - } + '@radix-ui/react-compose-refs@1.1.3': + resolution: {integrity: sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-context-menu@2.3.3": - resolution: - { - integrity: sha512-PS+gKE0z2prJ74Y0sM+brAGK4mYOHIR7TlcV5EJgUQ6E0xMvyswkK2X4yRqyganrzsRL+WCSKAPu0NQITICRWg==, - } + '@radix-ui/react-context-menu@2.3.3': + resolution: {integrity: sha512-PS+gKE0z2prJ74Y0sM+brAGK4mYOHIR7TlcV5EJgUQ6E0xMvyswkK2X4yRqyganrzsRL+WCSKAPu0NQITICRWg==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-context@1.2.0": - resolution: - { - integrity: sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==, - } + '@radix-ui/react-context@1.2.0': + resolution: {integrity: sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-dialog@1.1.19": - resolution: - { - integrity: sha512-+HhbN2+YtkRgVirjZ2afMeutQRuGOrdkWR5+EFC58SJojGmtyNQwYzgi6tHBpOxvFHefMtPeHdgtjz0BOGxFQg==, - } + '@radix-ui/react-dialog@1.1.19': + resolution: {integrity: sha512-+HhbN2+YtkRgVirjZ2afMeutQRuGOrdkWR5+EFC58SJojGmtyNQwYzgi6tHBpOxvFHefMtPeHdgtjz0BOGxFQg==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-direction@1.1.2": - resolution: - { - integrity: sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==, - } + '@radix-ui/react-direction@1.1.2': + resolution: {integrity: sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-dismissable-layer@1.1.15": - resolution: - { - integrity: sha512-b0XaRlzn2QKuo10XyNgi2DAJDf5XC9d1nD3FJcuvCjbR7+4Ad28zmZsLsqx+hvDEzMnRuZaZxZm9gYObV6RmRA==, - } + '@radix-ui/react-dismissable-layer@1.1.15': + resolution: {integrity: sha512-b0XaRlzn2QKuo10XyNgi2DAJDf5XC9d1nD3FJcuvCjbR7+4Ad28zmZsLsqx+hvDEzMnRuZaZxZm9gYObV6RmRA==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-dropdown-menu@2.1.20": - resolution: - { - integrity: sha512-slfm+rRaZRuQBvHq60lXvSVUPhid0IPtjSZzIuUlWZMUs01iYZNlGS3mJgRD3ChLQVBAYlKiL/tFyWGX+dz8Xw==, - } + '@radix-ui/react-dropdown-menu@2.1.20': + resolution: {integrity: sha512-slfm+rRaZRuQBvHq60lXvSVUPhid0IPtjSZzIuUlWZMUs01iYZNlGS3mJgRD3ChLQVBAYlKiL/tFyWGX+dz8Xw==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-focus-guards@1.1.4": - resolution: - { - integrity: sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==, - } + '@radix-ui/react-focus-guards@1.1.4': + resolution: {integrity: sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-focus-scope@1.1.12": - resolution: - { - integrity: sha512-jjk/lqTeNL0azUx5ZYzVrl4NgaDIrdzTNE4mABV9yBFI7FQqN7pIgzV1bTleUezP2QiTGA1BFTqY8MegDgWX9A==, - } + '@radix-ui/react-focus-scope@1.1.12': + resolution: {integrity: sha512-jjk/lqTeNL0azUx5ZYzVrl4NgaDIrdzTNE4mABV9yBFI7FQqN7pIgzV1bTleUezP2QiTGA1BFTqY8MegDgWX9A==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-form@0.1.12": - resolution: - { - integrity: sha512-JTX94E4LDL91rzLg7X0mHPdxr0A8JEdVwZEmeOwZJSMDHCGW5DFtSlTSJozUyUs807IQmnvbfzKZFVCK5DmkqQ==, - } + '@radix-ui/react-form@0.1.12': + resolution: {integrity: sha512-JTX94E4LDL91rzLg7X0mHPdxr0A8JEdVwZEmeOwZJSMDHCGW5DFtSlTSJozUyUs807IQmnvbfzKZFVCK5DmkqQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-hover-card@1.1.19": - resolution: - { - integrity: sha512-2KTgMLQtKvicznQgbindEI2RZ3QbDIwU5gabjUPwFJsormjGDz+rUvO4NANmYwzEEpTcTONUt33vBHIfTIVSfw==, - } + '@radix-ui/react-hover-card@1.1.19': + resolution: {integrity: sha512-2KTgMLQtKvicznQgbindEI2RZ3QbDIwU5gabjUPwFJsormjGDz+rUvO4NANmYwzEEpTcTONUt33vBHIfTIVSfw==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-id@1.1.2": - resolution: - { - integrity: sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==, - } + '@radix-ui/react-id@1.1.2': + resolution: {integrity: sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-label@2.1.11": - resolution: - { - integrity: sha512-3PKvDDxOn62k0oV1n4QtNtD2vpu+zYjXR7ojLBPaO6SPvhy53yg0vAmgNeBQeJW5rV3dffoRG+HYfLBZuzw0CQ==, - } + '@radix-ui/react-label@2.1.11': + resolution: {integrity: sha512-3PKvDDxOn62k0oV1n4QtNtD2vpu+zYjXR7ojLBPaO6SPvhy53yg0vAmgNeBQeJW5rV3dffoRG+HYfLBZuzw0CQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-menu@2.1.20": - resolution: - { - integrity: sha512-VsUrXxFe9d2ScbZF0fR/oPR1+qjyeLs5p0jzG8h90puMoA9bq4SirYlXbE+USRg9Q2qTeJSFNqjw2nts8jJe4w==, - } + '@radix-ui/react-menu@2.1.20': + resolution: {integrity: sha512-VsUrXxFe9d2ScbZF0fR/oPR1+qjyeLs5p0jzG8h90puMoA9bq4SirYlXbE+USRg9Q2qTeJSFNqjw2nts8jJe4w==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-menubar@1.1.20": - resolution: - { - integrity: sha512-gzFZvybgmwYsFBWDqanycIoEYnhyk8MMnuLamdFVHUZYGp4COM+sqXiwbnn0VMWqGLeeU7GV7jm+dXRa+Wufag==, - } + '@radix-ui/react-menubar@1.1.20': + resolution: {integrity: sha512-gzFZvybgmwYsFBWDqanycIoEYnhyk8MMnuLamdFVHUZYGp4COM+sqXiwbnn0VMWqGLeeU7GV7jm+dXRa+Wufag==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-navigation-menu@1.2.18": - resolution: - { - integrity: sha512-K9HiuxZ6xCwSaHcIuUpxyhy4w5gpwzWjh9dHTSbMN3Ix4qAyVObS9RlU3zMycb0PO3v9Tpk0BXMwWvXOUbVXew==, - } + '@radix-ui/react-navigation-menu@1.2.18': + resolution: {integrity: sha512-K9HiuxZ6xCwSaHcIuUpxyhy4w5gpwzWjh9dHTSbMN3Ix4qAyVObS9RlU3zMycb0PO3v9Tpk0BXMwWvXOUbVXew==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-one-time-password-field@0.1.12": - resolution: - { - integrity: sha512-nQLu5OAcORDQp1EHAv6k3mJGV1hjMTw2NTGVAsGE1g/mWeNqAd1R5jyaAs3U+A8ZD/W8XNPY2yKT0ZdQnqo3NA==, - } + '@radix-ui/react-one-time-password-field@0.1.12': + resolution: {integrity: sha512-nQLu5OAcORDQp1EHAv6k3mJGV1hjMTw2NTGVAsGE1g/mWeNqAd1R5jyaAs3U+A8ZD/W8XNPY2yKT0ZdQnqo3NA==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-password-toggle-field@0.1.7": - resolution: - { - integrity: sha512-gB1Mr8vzdv1XzDjrtJTXmL0JORRs1B4g7ngUs0F+H2VvMOwXTZMTmLCl0wZZ3m7ylX8TssI7NCvgiSHmLuTm/A==, - } + '@radix-ui/react-password-toggle-field@0.1.7': + resolution: {integrity: sha512-gB1Mr8vzdv1XzDjrtJTXmL0JORRs1B4g7ngUs0F+H2VvMOwXTZMTmLCl0wZZ3m7ylX8TssI7NCvgiSHmLuTm/A==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-popover@1.1.19": - resolution: - { - integrity: sha512-jkrTdQVxnIB8fpn0NyyxW9CTB5aCXZZelVz5z+Xmii6g5WxMqS3fInNslZ63puP39+Puu4jYohUK31y3dT87gQ==, - } + '@radix-ui/react-popover@1.1.19': + resolution: {integrity: sha512-jkrTdQVxnIB8fpn0NyyxW9CTB5aCXZZelVz5z+Xmii6g5WxMqS3fInNslZ63puP39+Puu4jYohUK31y3dT87gQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-popper@1.3.3": - resolution: - { - integrity: sha512-mS7dGpyjv6b+gsDjLF7e0ia1W4Im1B1hSCy2yuXlHuvnZxHKagfDaobt/KAKt27EpZMit2pss8eJBVyVjEWM+g==, - } + '@radix-ui/react-popper@1.3.3': + resolution: {integrity: sha512-mS7dGpyjv6b+gsDjLF7e0ia1W4Im1B1hSCy2yuXlHuvnZxHKagfDaobt/KAKt27EpZMit2pss8eJBVyVjEWM+g==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-portal@1.1.13": - resolution: - { - integrity: sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==, - } + '@radix-ui/react-portal@1.1.13': + resolution: {integrity: sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-presence@1.1.7": - resolution: - { - integrity: sha512-zBZ4QM5XG3JRanDmqXYf3MD6th4AFXFmgU6KNMFzUaV6F3uw9I5/zjMUvFriSEn5ewo1nxuibvyxJdmLlDcslA==, - } + '@radix-ui/react-presence@1.1.7': + resolution: {integrity: sha512-zBZ4QM5XG3JRanDmqXYf3MD6th4AFXFmgU6KNMFzUaV6F3uw9I5/zjMUvFriSEn5ewo1nxuibvyxJdmLlDcslA==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-primitive@2.1.3": - resolution: - { - integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==, - } + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-primitive@2.1.7": - resolution: - { - integrity: sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==, - } + '@radix-ui/react-primitive@2.1.7': + resolution: {integrity: sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-progress@1.1.12": - resolution: - { - integrity: sha512-ZPHyI0JyzoH/rP0tq2uRaIZTj/4s8+kAbqPz+e2N8+ejHvwPJ889dHhqn+vh7PNvNeq+boAoH9yzqeoShzwF2w==, - } + '@radix-ui/react-progress@1.1.12': + resolution: {integrity: sha512-ZPHyI0JyzoH/rP0tq2uRaIZTj/4s8+kAbqPz+e2N8+ejHvwPJ889dHhqn+vh7PNvNeq+boAoH9yzqeoShzwF2w==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-radio-group@1.4.3": - resolution: - { - integrity: sha512-WwZFjWV4s3aC1QtR3k04R+oANHtX2q6fgKlc7MCEiDNlnTxCZ3H8k3mHtEgVlOejystwk1WQgarQhNOQZ2bK1g==, - } + '@radix-ui/react-radio-group@1.4.3': + resolution: {integrity: sha512-WwZFjWV4s3aC1QtR3k04R+oANHtX2q6fgKlc7MCEiDNlnTxCZ3H8k3mHtEgVlOejystwk1WQgarQhNOQZ2bK1g==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-roving-focus@1.1.15": - resolution: - { - integrity: sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==, - } + '@radix-ui/react-roving-focus@1.1.15': + resolution: {integrity: sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-scroll-area@1.2.14": - resolution: - { - integrity: sha512-bBODCWZK7JTbQLHs0uIP4f73wIWatakK4OS33UzkR1x897wu0PuO658a3f+6P2GEGyDzGYMuHRatMVoAk9WZTw==, - } + '@radix-ui/react-scroll-area@1.2.14': + resolution: {integrity: sha512-bBODCWZK7JTbQLHs0uIP4f73wIWatakK4OS33UzkR1x897wu0PuO658a3f+6P2GEGyDzGYMuHRatMVoAk9WZTw==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-select@2.3.3": - resolution: - { - integrity: sha512-L5RQTXz6Anxsf9CCv+pTgiAsUpyVj7rJxsGtmhFaEOJ++cVfXucv4qWfsIO0AIB4NAhi3yovWGVMKKS1Xf1Wrg==, - } + '@radix-ui/react-select@2.3.3': + resolution: {integrity: sha512-L5RQTXz6Anxsf9CCv+pTgiAsUpyVj7rJxsGtmhFaEOJ++cVfXucv4qWfsIO0AIB4NAhi3yovWGVMKKS1Xf1Wrg==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-separator@1.1.11": - resolution: - { - integrity: sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==, - } + '@radix-ui/react-separator@1.1.11': + resolution: {integrity: sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-slider@1.4.3": - resolution: - { - integrity: sha512-CWVVj+XaTom0SKCqw1EUgb0NuiLwS+N3OFG73mVEezKEjgNIvZiu0EevMelSSU+CbX3owbqJweG2gPU31WGC5A==, - } + '@radix-ui/react-slider@1.4.3': + resolution: {integrity: sha512-CWVVj+XaTom0SKCqw1EUgb0NuiLwS+N3OFG73mVEezKEjgNIvZiu0EevMelSSU+CbX3owbqJweG2gPU31WGC5A==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-slot@1.2.3": - resolution: - { - integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==, - } + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-slot@1.3.0": - resolution: - { - integrity: sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==, - } + '@radix-ui/react-slot@1.3.0': + resolution: {integrity: sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-switch@1.3.3": - resolution: - { - integrity: sha512-1+mlB4/lxJfk5tgJ4g+R5mUCbRpPE1T9+UsEyeLYbGgMtwiMgmuTnfKz4Mw1nHALHjuwyxw4MLd4cSHn6pNSlQ==, - } + '@radix-ui/react-switch@1.3.3': + resolution: {integrity: sha512-1+mlB4/lxJfk5tgJ4g+R5mUCbRpPE1T9+UsEyeLYbGgMtwiMgmuTnfKz4Mw1nHALHjuwyxw4MLd4cSHn6pNSlQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-tabs@1.1.17": - resolution: - { - integrity: sha512-nRyXnrAVCwjeXcHbvEbLS6ndbTeKHG1RqCP4A8Gw5L4cemDzPXdD8rAmr6wet0v57R69wGvuIIsFjHSVkZiMzQ==, - } + '@radix-ui/react-tabs@1.1.17': + resolution: {integrity: sha512-nRyXnrAVCwjeXcHbvEbLS6ndbTeKHG1RqCP4A8Gw5L4cemDzPXdD8rAmr6wet0v57R69wGvuIIsFjHSVkZiMzQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-toast@1.2.19": - resolution: - { - integrity: sha512-SxfVZfVOibWKWdkf0Xx1awW2d09fQu4V4PXDY1j5hi4MVf7MWdJZqTBJMa1KWtOr1S6GGtCk02nniZ0Iia+dHw==, - } + '@radix-ui/react-toast@1.2.19': + resolution: {integrity: sha512-SxfVZfVOibWKWdkf0Xx1awW2d09fQu4V4PXDY1j5hi4MVf7MWdJZqTBJMa1KWtOr1S6GGtCk02nniZ0Iia+dHw==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-toggle-group@1.1.15": - resolution: - { - integrity: sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==, - } + '@radix-ui/react-toggle-group@1.1.15': + resolution: {integrity: sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-toggle@1.1.10": - resolution: - { - integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==, - } + '@radix-ui/react-toggle@1.1.10': + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-toggle@1.1.14": - resolution: - { - integrity: sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==, - } + '@radix-ui/react-toggle@1.1.14': + resolution: {integrity: sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-toolbar@1.1.15": - resolution: - { - integrity: sha512-t/iEuVjUnXXtrsGK40AA43uIx37sn3AqZ7oAVnPICK6lFJP6dzMzWR3U9b6eCfFjb6wtSEqkJ9Rn9xDjiOx20g==, - } + '@radix-ui/react-toolbar@1.1.15': + resolution: {integrity: sha512-t/iEuVjUnXXtrsGK40AA43uIx37sn3AqZ7oAVnPICK6lFJP6dzMzWR3U9b6eCfFjb6wtSEqkJ9Rn9xDjiOx20g==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-tooltip@1.2.12": - resolution: - { - integrity: sha512-U3HoftgWnmla78vzQbLvKKb7bUYJxoiiqYFzp1wu/TBMyDqMZSuCl3aRICsD6EfVEwcJD2mumGDGUXLFVqQHKA==, - } + '@radix-ui/react-tooltip@1.2.12': + resolution: {integrity: sha512-U3HoftgWnmla78vzQbLvKKb7bUYJxoiiqYFzp1wu/TBMyDqMZSuCl3aRICsD6EfVEwcJD2mumGDGUXLFVqQHKA==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-use-callback-ref@1.1.2": - resolution: - { - integrity: sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==, - } + '@radix-ui/react-use-callback-ref@1.1.2': + resolution: {integrity: sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-controllable-state@1.2.2": - resolution: - { - integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==, - } + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-controllable-state@1.2.3": - resolution: - { - integrity: sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==, - } + '@radix-ui/react-use-controllable-state@1.2.3': + resolution: {integrity: sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-effect-event@0.0.2": - resolution: - { - integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==, - } + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-effect-event@0.0.3": - resolution: - { - integrity: sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==, - } + '@radix-ui/react-use-effect-event@0.0.3': + resolution: {integrity: sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-escape-keydown@1.1.3": - resolution: - { - integrity: sha512-3wEkMiPHXha/2VadZ68rYBcmYnPINVGl4Y3gtcM7fKRjANk0OscK+cdqBgUWdozb7YJxsh0vefM7vgAMHXOjqg==, - } + '@radix-ui/react-use-escape-keydown@1.1.3': + resolution: {integrity: sha512-3wEkMiPHXha/2VadZ68rYBcmYnPINVGl4Y3gtcM7fKRjANk0OscK+cdqBgUWdozb7YJxsh0vefM7vgAMHXOjqg==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-is-hydrated@0.1.1": - resolution: - { - integrity: sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==, - } + '@radix-ui/react-use-is-hydrated@0.1.1': + resolution: {integrity: sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-layout-effect@1.1.1": - resolution: - { - integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==, - } + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-layout-effect@1.1.2": - resolution: - { - integrity: sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==, - } + '@radix-ui/react-use-layout-effect@1.1.2': + resolution: {integrity: sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-previous@1.1.2": - resolution: - { - integrity: sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==, - } + '@radix-ui/react-use-previous@1.1.2': + resolution: {integrity: sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-rect@1.1.2": - resolution: - { - integrity: sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==, - } + '@radix-ui/react-use-rect@1.1.2': + resolution: {integrity: sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-size@1.1.2": - resolution: - { - integrity: sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==, - } + '@radix-ui/react-use-size@1.1.2': + resolution: {integrity: sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-visually-hidden@1.2.7": - resolution: - { - integrity: sha512-1wNZBggTDK3GRuuQ6nP4k2yi7a6l7I5qbMPbZcRsrGsGVead/f/d5FhEzUvqFs0bcrDLx7n1zKQ3JvLR6whaaw==, - } + '@radix-ui/react-visually-hidden@1.2.7': + resolution: {integrity: sha512-1wNZBggTDK3GRuuQ6nP4k2yi7a6l7I5qbMPbZcRsrGsGVead/f/d5FhEzUvqFs0bcrDLx7n1zKQ3JvLR6whaaw==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/rect@1.1.2": - resolution: - { - integrity: sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==, - } + '@radix-ui/rect@1.1.2': + resolution: {integrity: sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==} - "@rollup/rollup-android-arm-eabi@4.62.2": - resolution: - { - integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==, - } + '@rollup/rollup-android-arm-eabi@4.62.2': + resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} cpu: [arm] os: [android] - "@rollup/rollup-android-arm64@4.62.2": - resolution: - { - integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==, - } + '@rollup/rollup-android-arm64@4.62.2': + resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} cpu: [arm64] os: [android] - "@rollup/rollup-darwin-arm64@4.62.2": - resolution: - { - integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==, - } + '@rollup/rollup-darwin-arm64@4.62.2': + resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} cpu: [arm64] os: [darwin] - "@rollup/rollup-darwin-x64@4.62.2": - resolution: - { - integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==, - } + '@rollup/rollup-darwin-x64@4.62.2': + resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} cpu: [x64] os: [darwin] - "@rollup/rollup-freebsd-arm64@4.62.2": - resolution: - { - integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==, - } + '@rollup/rollup-freebsd-arm64@4.62.2': + resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} cpu: [arm64] os: [freebsd] - "@rollup/rollup-freebsd-x64@4.62.2": - resolution: - { - integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==, - } + '@rollup/rollup-freebsd-x64@4.62.2': + resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} cpu: [x64] os: [freebsd] - "@rollup/rollup-linux-arm-gnueabihf@4.62.2": - resolution: - { - integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==, - } + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} cpu: [arm] os: [linux] libc: [glibc] - "@rollup/rollup-linux-arm-musleabihf@4.62.2": - resolution: - { - integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==, - } + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} cpu: [arm] os: [linux] libc: [musl] - "@rollup/rollup-linux-arm64-gnu@4.62.2": - resolution: - { - integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==, - } + '@rollup/rollup-linux-arm64-gnu@4.62.2': + resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} cpu: [arm64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-arm64-musl@4.62.2": - resolution: - { - integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==, - } + '@rollup/rollup-linux-arm64-musl@4.62.2': + resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} cpu: [arm64] os: [linux] libc: [musl] - "@rollup/rollup-linux-loong64-gnu@4.62.2": - resolution: - { - integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==, - } + '@rollup/rollup-linux-loong64-gnu@4.62.2': + resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} cpu: [loong64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-loong64-musl@4.62.2": - resolution: - { - integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==, - } + '@rollup/rollup-linux-loong64-musl@4.62.2': + resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} cpu: [loong64] os: [linux] libc: [musl] - "@rollup/rollup-linux-ppc64-gnu@4.62.2": - resolution: - { - integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==, - } + '@rollup/rollup-linux-ppc64-gnu@4.62.2': + resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} cpu: [ppc64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-ppc64-musl@4.62.2": - resolution: - { - integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==, - } + '@rollup/rollup-linux-ppc64-musl@4.62.2': + resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} cpu: [ppc64] os: [linux] libc: [musl] - "@rollup/rollup-linux-riscv64-gnu@4.62.2": - resolution: - { - integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==, - } + '@rollup/rollup-linux-riscv64-gnu@4.62.2': + resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} cpu: [riscv64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-riscv64-musl@4.62.2": - resolution: - { - integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==, - } + '@rollup/rollup-linux-riscv64-musl@4.62.2': + resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} cpu: [riscv64] os: [linux] libc: [musl] - "@rollup/rollup-linux-s390x-gnu@4.62.2": - resolution: - { - integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==, - } + '@rollup/rollup-linux-s390x-gnu@4.62.2': + resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} cpu: [s390x] os: [linux] libc: [glibc] - "@rollup/rollup-linux-x64-gnu@4.62.2": - resolution: - { - integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==, - } + '@rollup/rollup-linux-x64-gnu@4.62.2': + resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} cpu: [x64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-x64-musl@4.62.2": - resolution: - { - integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==, - } + '@rollup/rollup-linux-x64-musl@4.62.2': + resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} cpu: [x64] os: [linux] libc: [musl] - "@rollup/rollup-openbsd-x64@4.62.2": - resolution: - { - integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==, - } + '@rollup/rollup-openbsd-x64@4.62.2': + resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} cpu: [x64] os: [openbsd] - "@rollup/rollup-openharmony-arm64@4.62.2": - resolution: - { - integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==, - } + '@rollup/rollup-openharmony-arm64@4.62.2': + resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} cpu: [arm64] os: [openharmony] - "@rollup/rollup-win32-arm64-msvc@4.62.2": - resolution: - { - integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==, - } + '@rollup/rollup-win32-arm64-msvc@4.62.2': + resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} cpu: [arm64] os: [win32] - "@rollup/rollup-win32-ia32-msvc@4.62.2": - resolution: - { - integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==, - } + '@rollup/rollup-win32-ia32-msvc@4.62.2': + resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} cpu: [ia32] os: [win32] - "@rollup/rollup-win32-x64-gnu@4.62.2": - resolution: - { - integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==, - } + '@rollup/rollup-win32-x64-gnu@4.62.2': + resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} cpu: [x64] os: [win32] - "@rollup/rollup-win32-x64-msvc@4.62.2": - resolution: - { - integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==, - } + '@rollup/rollup-win32-x64-msvc@4.62.2': + resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} cpu: [x64] os: [win32] - "@schummar/icu-type-parser@1.21.5": - resolution: - { - integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==, - } + '@schummar/icu-type-parser@1.21.5': + resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==} - "@stablelib/base64@1.0.1": - resolution: - { - integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==, - } + '@stablelib/base64@1.0.1': + resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==} - "@standard-schema/spec@1.1.0": - resolution: - { - integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, - } + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - "@standard-schema/utils@0.3.0": - resolution: - { - integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==, - } + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - "@swc/core-darwin-arm64@1.15.43": - resolution: - { - integrity: sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==, - } - engines: { node: ">=10" } + '@swc/core-darwin-arm64@1.15.43': + resolution: {integrity: sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==} + engines: {node: '>=10'} cpu: [arm64] os: [darwin] - "@swc/core-darwin-x64@1.15.43": - resolution: - { - integrity: sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==, - } - engines: { node: ">=10" } + '@swc/core-darwin-x64@1.15.43': + resolution: {integrity: sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==} + engines: {node: '>=10'} cpu: [x64] os: [darwin] - "@swc/core-linux-arm-gnueabihf@1.15.43": - resolution: - { - integrity: sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==, - } - engines: { node: ">=10" } + '@swc/core-linux-arm-gnueabihf@1.15.43': + resolution: {integrity: sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==} + engines: {node: '>=10'} cpu: [arm] os: [linux] - "@swc/core-linux-arm64-gnu@1.15.43": - resolution: - { - integrity: sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==, - } - engines: { node: ">=10" } + '@swc/core-linux-arm64-gnu@1.15.43': + resolution: {integrity: sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==} + engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [glibc] - "@swc/core-linux-arm64-musl@1.15.43": - resolution: - { - integrity: sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==, - } - engines: { node: ">=10" } + '@swc/core-linux-arm64-musl@1.15.43': + resolution: {integrity: sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==} + engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [musl] - "@swc/core-linux-ppc64-gnu@1.15.43": - resolution: - { - integrity: sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==, - } - engines: { node: ">=10" } + '@swc/core-linux-ppc64-gnu@1.15.43': + resolution: {integrity: sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==} + engines: {node: '>=10'} cpu: [ppc64] os: [linux] libc: [glibc] - "@swc/core-linux-s390x-gnu@1.15.43": - resolution: - { - integrity: sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==, - } - engines: { node: ">=10" } + '@swc/core-linux-s390x-gnu@1.15.43': + resolution: {integrity: sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==} + engines: {node: '>=10'} cpu: [s390x] os: [linux] libc: [glibc] - "@swc/core-linux-x64-gnu@1.15.43": - resolution: - { - integrity: sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==, - } - engines: { node: ">=10" } + '@swc/core-linux-x64-gnu@1.15.43': + resolution: {integrity: sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==} + engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [glibc] - "@swc/core-linux-x64-musl@1.15.43": - resolution: - { - integrity: sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==, - } - engines: { node: ">=10" } + '@swc/core-linux-x64-musl@1.15.43': + resolution: {integrity: sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==} + engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [musl] - "@swc/core-win32-arm64-msvc@1.15.43": - resolution: - { - integrity: sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==, - } - engines: { node: ">=10" } + '@swc/core-win32-arm64-msvc@1.15.43': + resolution: {integrity: sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==} + engines: {node: '>=10'} cpu: [arm64] os: [win32] - "@swc/core-win32-ia32-msvc@1.15.43": - resolution: - { - integrity: sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==, - } - engines: { node: ">=10" } + '@swc/core-win32-ia32-msvc@1.15.43': + resolution: {integrity: sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==} + engines: {node: '>=10'} cpu: [ia32] os: [win32] - "@swc/core-win32-x64-msvc@1.15.43": - resolution: - { - integrity: sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==, - } - engines: { node: ">=10" } + '@swc/core-win32-x64-msvc@1.15.43': + resolution: {integrity: sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==} + engines: {node: '>=10'} cpu: [x64] os: [win32] - "@swc/core@1.15.43": - resolution: - { - integrity: sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==, - } - engines: { node: ">=10" } + '@swc/core@1.15.43': + resolution: {integrity: sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==} + engines: {node: '>=10'} peerDependencies: - "@swc/helpers": ">=0.5.17" + '@swc/helpers': '>=0.5.17' peerDependenciesMeta: - "@swc/helpers": + '@swc/helpers': optional: true - "@swc/counter@0.1.3": - resolution: - { - integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, - } + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - "@swc/helpers@0.5.15": - resolution: - { - integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==, - } + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - "@swc/types@0.1.27": - resolution: - { - integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==, - } + '@swc/types@0.1.27': + resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} - "@tailwindcss/forms@0.5.11": - resolution: - { - integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==, - } + '@tailwindcss/forms@0.5.11': + resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==} peerDependencies: - tailwindcss: ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' - "@tailwindcss/node@4.3.2": - resolution: - { - integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==, - } + '@tailwindcss/node@4.3.2': + resolution: {integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==} - "@tailwindcss/oxide-android-arm64@4.3.2": - resolution: - { - integrity: sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-android-arm64@4.3.2': + resolution: {integrity: sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==} + engines: {node: '>= 20'} cpu: [arm64] os: [android] - "@tailwindcss/oxide-darwin-arm64@4.3.2": - resolution: - { - integrity: sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-darwin-arm64@4.3.2': + resolution: {integrity: sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==} + engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - "@tailwindcss/oxide-darwin-x64@4.3.2": - resolution: - { - integrity: sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-darwin-x64@4.3.2': + resolution: {integrity: sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==} + engines: {node: '>= 20'} cpu: [x64] os: [darwin] - "@tailwindcss/oxide-freebsd-x64@4.3.2": - resolution: - { - integrity: sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-freebsd-x64@4.3.2': + resolution: {integrity: sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==} + engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2": - resolution: - { - integrity: sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': + resolution: {integrity: sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==} + engines: {node: '>= 20'} cpu: [arm] os: [linux] - "@tailwindcss/oxide-linux-arm64-gnu@4.3.2": - resolution: - { - integrity: sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': + resolution: {integrity: sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [glibc] - "@tailwindcss/oxide-linux-arm64-musl@4.3.2": - resolution: - { - integrity: sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm64-musl@4.3.2': + resolution: {integrity: sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [musl] - "@tailwindcss/oxide-linux-x64-gnu@4.3.2": - resolution: - { - integrity: sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-x64-gnu@4.3.2': + resolution: {integrity: sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [glibc] - "@tailwindcss/oxide-linux-x64-musl@4.3.2": - resolution: - { - integrity: sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-x64-musl@4.3.2': + resolution: {integrity: sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [musl] - "@tailwindcss/oxide-wasm32-wasi@4.3.2": - resolution: - { - integrity: sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==, - } - engines: { node: ">=14.0.0" } + '@tailwindcss/oxide-wasm32-wasi@4.3.2': + resolution: {integrity: sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==} + engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: - - "@napi-rs/wasm-runtime" - - "@emnapi/core" - - "@emnapi/runtime" - - "@tybys/wasm-util" - - "@emnapi/wasi-threads" + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' - tslib - "@tailwindcss/oxide-win32-arm64-msvc@4.3.2": - resolution: - { - integrity: sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': + resolution: {integrity: sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [win32] - "@tailwindcss/oxide-win32-x64-msvc@4.3.2": - resolution: - { - integrity: sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-win32-x64-msvc@4.3.2': + resolution: {integrity: sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==} + engines: {node: '>= 20'} cpu: [x64] os: [win32] - "@tailwindcss/oxide@4.3.2": - resolution: - { - integrity: sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide@4.3.2': + resolution: {integrity: sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==} + engines: {node: '>= 20'} - "@tailwindcss/postcss@4.3.2": - resolution: - { - integrity: sha512-rjVWYCa7Ngbi5AarT6k8TkxUG3Wl1QKzHdIZVsjZSzf36Jmo2IKZt/NHRAwly8oDkbBOH0YTu+CHuf9jPxMc+g==, - } + '@tailwindcss/postcss@4.3.2': + resolution: {integrity: sha512-rjVWYCa7Ngbi5AarT6k8TkxUG3Wl1QKzHdIZVsjZSzf36Jmo2IKZt/NHRAwly8oDkbBOH0YTu+CHuf9jPxMc+g==} - "@tailwindcss/typography@0.5.20": - resolution: - { - integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==, - } + '@tailwindcss/typography@0.5.20': + resolution: {integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==} peerDependencies: - tailwindcss: ">=3.0.0 || >=4.0.0 || insiders" + tailwindcss: '>=3.0.0 || >=4.0.0 || insiders' - "@tanstack/react-virtual@3.14.5": - resolution: - { - integrity: sha512-4EKRXh7zBLkbKbFmG3AUVkircuHd+7OdT1pocJSepxtfBd3qnrJgJ5rtPkRYyo9fmyVb2+pI2xPy5oYvMLQy6A==, - } + '@tanstack/react-virtual@3.14.5': + resolution: {integrity: sha512-4EKRXh7zBLkbKbFmG3AUVkircuHd+7OdT1pocJSepxtfBd3qnrJgJ5rtPkRYyo9fmyVb2+pI2xPy5oYvMLQy6A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - "@tanstack/virtual-core@3.17.3": - resolution: - { - integrity: sha512-8Np/TFELpI0ySuJoVmjvOrQYXH/8sTX0Biv9szhFhY39xOdAAY+smrMxjxOum/ux3eM8MUJQsEJ0/R0UpvC8dw==, - } + '@tanstack/virtual-core@3.17.3': + resolution: {integrity: sha512-8Np/TFELpI0ySuJoVmjvOrQYXH/8sTX0Biv9szhFhY39xOdAAY+smrMxjxOum/ux3eM8MUJQsEJ0/R0UpvC8dw==} - "@tokenizer/inflate@0.4.1": - resolution: - { - integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==, - } - engines: { node: ">=18" } + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} - "@tokenizer/token@0.3.0": - resolution: - { - integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==, - } + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - "@types/esrecurse@4.3.1": - resolution: - { - integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==, - } + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - "@types/estree@1.0.9": - resolution: - { - integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==, - } + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - "@types/geojson@7946.0.16": - resolution: - { - integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==, - } + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - "@types/jpeg-js@0.3.7": - resolution: - { - integrity: sha512-v3FEzt2TXOOIgvwwOqMoeEhqYqUoK4wcV/K7JbKj8CzwDE9sSuor8EZpSJKaOnuEtyO0W+Nd2uKk8MbtusYpEg==, - } + '@types/jpeg-js@0.3.7': + resolution: {integrity: sha512-v3FEzt2TXOOIgvwwOqMoeEhqYqUoK4wcV/K7JbKj8CzwDE9sSuor8EZpSJKaOnuEtyO0W+Nd2uKk8MbtusYpEg==} deprecated: This is a stub types definition. jpeg-js provides its own type definitions, so you do not need this installed. - "@types/json-schema@7.0.15": - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, - } + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - "@types/node@22.20.0": - resolution: - { - integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==, - } + '@types/node@22.20.0': + resolution: {integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==} - "@types/node@24.13.2": - resolution: - { - integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==, - } + '@types/node@24.13.2': + resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==} - "@types/nodemailer@6.4.24": - resolution: - { - integrity: sha512-Ww4u0rT9wQNXh4JiQaIwx3QWdcOFXzOjQA2zc+jtFYNmQiT4mIUqcDin51bDFdkzKubFnQCZNK7FIHlPKQ/q9w==, - } + '@types/nodemailer@6.4.24': + resolution: {integrity: sha512-Ww4u0rT9wQNXh4JiQaIwx3QWdcOFXzOjQA2zc+jtFYNmQiT4mIUqcDin51bDFdkzKubFnQCZNK7FIHlPKQ/q9w==} - "@types/react-dom@19.2.3": - resolution: - { - integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, - } + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: - "@types/react": ^19.2.0 + '@types/react': ^19.2.0 - "@types/react@19.2.17": - resolution: - { - integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==, - } + '@types/react@19.2.17': + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} - "@types/sanitize-html@2.16.1": - resolution: - { - integrity: sha512-n9wjs8bCOTyN/ynwD8s/nTcTreIHB1vf31vhLMGqUPNHaweKC4/fAl4Dj+hUlCTKYgm4P3k83fmiFfzkZ6sgMA==, - } + '@types/sanitize-html@2.16.1': + resolution: {integrity: sha512-n9wjs8bCOTyN/ynwD8s/nTcTreIHB1vf31vhLMGqUPNHaweKC4/fAl4Dj+hUlCTKYgm4P3k83fmiFfzkZ6sgMA==} - "@typescript-eslint/eslint-plugin@8.63.0": - resolution: - { - integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/eslint-plugin@8.63.0': + resolution: {integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - "@typescript-eslint/parser": ^8.63.0 + '@typescript-eslint/parser': ^8.63.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" + typescript: '>=4.8.4 <6.1.0' - "@typescript-eslint/parser@8.63.0": - resolution: - { - integrity: sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/parser@8.63.0': + resolution: {integrity: sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" + typescript: '>=4.8.4 <6.1.0' - "@typescript-eslint/project-service@8.63.0": - resolution: - { - integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/project-service@8.63.0': + resolution: {integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.1.0" + typescript: '>=4.8.4 <6.1.0' - "@typescript-eslint/scope-manager@8.63.0": - resolution: - { - integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/scope-manager@8.63.0': + resolution: {integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@typescript-eslint/tsconfig-utils@8.63.0": - resolution: - { - integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/tsconfig-utils@8.63.0': + resolution: {integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.1.0" + typescript: '>=4.8.4 <6.1.0' - "@typescript-eslint/type-utils@8.63.0": - resolution: - { - integrity: sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/type-utils@8.63.0': + resolution: {integrity: sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" + typescript: '>=4.8.4 <6.1.0' - "@typescript-eslint/types@8.63.0": - resolution: - { - integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/types@8.63.0': + resolution: {integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@typescript-eslint/typescript-estree@8.63.0": - resolution: - { - integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/typescript-estree@8.63.0': + resolution: {integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.1.0" + typescript: '>=4.8.4 <6.1.0' - "@typescript-eslint/utils@8.63.0": - resolution: - { - integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/utils@8.63.0': + resolution: {integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" + typescript: '>=4.8.4 <6.1.0' - "@typescript-eslint/visitor-keys@8.63.0": - resolution: - { - integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/visitor-keys@8.63.0': + resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@vitest/expect@2.1.9": - resolution: - { - integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==, - } + '@vitest/expect@2.1.9': + resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} - "@vitest/mocker@2.1.9": - resolution: - { - integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==, - } + '@vitest/mocker@2.1.9': + resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -3840,643 +2684,391 @@ packages: vite: optional: true - "@vitest/pretty-format@2.1.9": - resolution: - { - integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==, - } + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - "@vitest/runner@2.1.9": - resolution: - { - integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==, - } + '@vitest/runner@2.1.9': + resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} - "@vitest/snapshot@2.1.9": - resolution: - { - integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==, - } + '@vitest/snapshot@2.1.9': + resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - "@vitest/spy@2.1.9": - resolution: - { - integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==, - } + '@vitest/spy@2.1.9': + resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} - "@vitest/utils@2.1.9": - resolution: - { - integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==, - } + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} acorn-jsx@5.3.2: - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn@8.17.0: - resolution: - { - integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} hasBin: true ajv@6.15.0: - resolution: - { - integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==, - } + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ajv@8.20.0: - resolution: - { - integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==, - } + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} aria-hidden@1.2.6: - resolution: - { - integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} aria-query@5.3.2: - resolution: - { - integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-buffer-byte-length@1.0.2: - resolution: - { - integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} array-includes@3.1.9: - resolution: - { - integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} array.prototype.flat@1.3.3: - resolution: - { - integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} array.prototype.flatmap@1.3.3: - resolution: - { - integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} arraybuffer.prototype.slice@1.0.4: - resolution: - { - integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} assertion-error@2.0.1: - resolution: - { - integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} ast-types-flow@0.0.8: - resolution: - { - integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==, - } + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} async-function@1.0.0: - resolution: - { - integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} aws-ssl-profiles@1.1.2: - resolution: - { - integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==, - } - engines: { node: ">= 6.0.0" } + resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} + engines: {node: '>= 6.0.0'} axe-core@4.12.1: - resolution: - { - integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} + engines: {node: '>=4'} axobject-query@4.1.0: - resolution: - { - integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} balanced-match@4.0.4: - resolution: - { - integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} baseline-browser-mapping@2.10.40: - resolution: - { - integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==} + engines: {node: '>=6.0.0'} hasBin: true baseline-browser-mapping@2.10.42: - resolution: - { - integrity: sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==} + engines: {node: '>=6.0.0'} hasBin: true bcryptjs@3.0.3: - resolution: - { - integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==, - } + resolution: {integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==} hasBin: true better-result@2.9.2: - resolution: - { - integrity: sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==, - } + resolution: {integrity: sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==} brace-expansion@1.1.16: - resolution: - { - integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==, - } + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} brace-expansion@5.0.7: - resolution: - { - integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: - resolution: - { - integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} browserslist@4.28.5: - resolution: - { - integrity: sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, - } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} c12@3.3.4: - resolution: - { - integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==, - } + resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==} peerDependencies: - magicast: "*" + magicast: '*' peerDependenciesMeta: magicast: optional: true cac@6.7.14: - resolution: - { - integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} call-bind-apply-helpers@1.0.2: - resolution: - { - integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} call-bind@1.0.9: - resolution: - { - integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} call-bound@1.0.4: - resolution: - { - integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} caniuse-lite@1.0.30001799: - resolution: - { - integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==, - } + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} caniuse-lite@1.0.30001803: - resolution: - { - integrity: sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==, - } + resolution: {integrity: sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==} chai@5.3.3: - resolution: - { - integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} chart.js@4.5.1: - resolution: - { - integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==, - } - engines: { pnpm: ">=8" } + resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} + engines: {pnpm: '>=8'} check-error@2.1.3: - resolution: - { - integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==, - } - engines: { node: ">= 16" } + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} chokidar@5.0.0: - resolution: - { - integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==, - } - engines: { node: ">= 20.19.0" } + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} class-variance-authority@0.7.1: - resolution: - { - integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, - } + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} client-only@0.0.1: - resolution: - { - integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, - } + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} clsx@2.1.1: - resolution: - { - integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} cluster-key-slot@1.1.1: - resolution: - { - integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} + engines: {node: '>=0.10.0'} cmdk@1.1.1: - resolution: - { - integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==, - } + resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} confbox@0.2.4: - resolution: - { - integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==, - } + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} content-type@2.0.0: - resolution: - { - integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, - } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} core-util-is@1.0.3: - resolution: - { - integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, - } + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} croner@10.0.1: - resolution: - { - integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==, - } - engines: { node: ">=18.0" } + resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} + engines: {node: '>=18.0'} cross-spawn@7.0.6: - resolution: - { - integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} cssesc@3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true csstype@3.2.3: - resolution: - { - integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, - } + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} damerau-levenshtein@1.0.8: - resolution: - { - integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, - } + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} data-view-buffer@1.0.2: - resolution: - { - integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} data-view-byte-length@1.0.2: - resolution: - { - integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} data-view-byte-offset@1.0.1: - resolution: - { - integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} dayjs@1.11.21: - resolution: - { - integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==, - } + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} debug@4.4.3: - resolution: - { - integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true deep-eql@5.0.2: - resolution: - { - integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} deepmerge-ts@7.1.5: - resolution: - { - integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==, - } - engines: { node: ">=16.0.0" } + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} deepmerge@4.3.1: - resolution: - { - integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} defu@6.1.7: - resolution: - { - integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==, - } + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} denque@2.1.0: - resolution: - { - integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} destr@2.0.5: - resolution: - { - integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==, - } + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} detect-libc@2.1.2: - resolution: - { - integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} detect-node-es@1.1.0: - resolution: - { - integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, - } + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} dom-serializer@2.0.0: - resolution: - { - integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, - } + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} domelementtype@2.3.0: - resolution: - { - integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, - } + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} domhandler@5.0.3: - resolution: - { - integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} domutils@3.2.2: - resolution: - { - integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==, - } + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dotenv@16.6.1: - resolution: - { - integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} dotenv@17.4.2: - resolution: - { - integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} drizzle-kit@0.30.6: - resolution: - { - integrity: sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g==, - } + resolution: {integrity: sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g==} hasBin: true drizzle-orm@0.38.4: - resolution: - { - integrity: sha512-s7/5BpLKO+WJRHspvpqTydxFob8i1vo2rEx4pY6TGY7QSMuUfWUuzaY0DIpXCkgHOo37BaFC+SJQb99dDUXT3Q==, - } + resolution: {integrity: sha512-s7/5BpLKO+WJRHspvpqTydxFob8i1vo2rEx4pY6TGY7QSMuUfWUuzaY0DIpXCkgHOo37BaFC+SJQb99dDUXT3Q==} peerDependencies: - "@aws-sdk/client-rds-data": ">=3" - "@cloudflare/workers-types": ">=4" - "@electric-sql/pglite": ">=0.2.0" - "@libsql/client": ">=0.10.0" - "@libsql/client-wasm": ">=0.10.0" - "@neondatabase/serverless": ">=0.10.0" - "@op-engineering/op-sqlite": ">=2" - "@opentelemetry/api": ^1.4.1 - "@planetscale/database": ">=1" - "@prisma/client": "*" - "@tidbcloud/serverless": "*" - "@types/better-sqlite3": "*" - "@types/pg": "*" - "@types/react": ">=18" - "@types/sql.js": "*" - "@vercel/postgres": ">=0.8.0" - "@xata.io/client": "*" - better-sqlite3: ">=7" - bun-types: "*" - expo-sqlite: ">=14.0.0" - knex: "*" - kysely: "*" - mysql2: ">=2" - pg: ">=8" - postgres: ">=3" - prisma: "*" - react: ">=18" - sql.js: ">=1" - sqlite3: ">=5" + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/react': '>=18' + '@types/sql.js': '*' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + react: '>=18' + sql.js: '>=1' + sqlite3: '>=5' peerDependenciesMeta: - "@aws-sdk/client-rds-data": + '@aws-sdk/client-rds-data': optional: true - "@cloudflare/workers-types": + '@cloudflare/workers-types': optional: true - "@electric-sql/pglite": + '@electric-sql/pglite': optional: true - "@libsql/client": + '@libsql/client': optional: true - "@libsql/client-wasm": + '@libsql/client-wasm': optional: true - "@neondatabase/serverless": + '@neondatabase/serverless': optional: true - "@op-engineering/op-sqlite": + '@op-engineering/op-sqlite': optional: true - "@opentelemetry/api": + '@opentelemetry/api': optional: true - "@planetscale/database": + '@planetscale/database': optional: true - "@prisma/client": + '@prisma/client': optional: true - "@tidbcloud/serverless": + '@tidbcloud/serverless': optional: true - "@types/better-sqlite3": + '@types/better-sqlite3': optional: true - "@types/pg": + '@types/pg': optional: true - "@types/react": + '@types/react': optional: true - "@types/sql.js": + '@types/sql.js': optional: true - "@vercel/postgres": + '@vercel/postgres': optional: true - "@xata.io/client": + '@xata.io/client': optional: true better-sqlite3: optional: true @@ -4504,359 +3096,209 @@ packages: optional: true dunder-proto@1.0.1: - resolution: - { - integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} effect@3.20.0: - resolution: - { - integrity: sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==, - } + resolution: {integrity: sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==} electron-to-chromium@1.5.389: - resolution: - { - integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==, - } + resolution: {integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==} emoji-regex@9.2.2: - resolution: - { - integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, - } + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} empathic@2.0.0: - resolution: - { - integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} enhanced-resolve@5.21.6: - resolution: - { - integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} + engines: {node: '>=10.13.0'} entities@4.5.0: - resolution: - { - integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, - } - engines: { node: ">=0.12" } + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} entities@7.0.1: - resolution: - { - integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==, - } - engines: { node: ">=0.12" } + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} env-paths@3.0.0: - resolution: - { - integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} es-abstract-get@1.0.0: - resolution: - { - integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} + engines: {node: '>= 0.4'} es-abstract@1.24.2: - resolution: - { - integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} es-define-property@1.0.1: - resolution: - { - integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} es-module-lexer@1.7.0: - resolution: - { - integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, - } + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} es-object-atoms@1.1.2: - resolution: - { - integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: - resolution: - { - integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} es-shim-unscopables@1.1.0: - resolution: - { - integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} es-to-primitive@1.3.4: - resolution: - { - integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} + engines: {node: '>= 0.4'} esbuild-register@3.6.0: - resolution: - { - integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==, - } + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: - esbuild: ">=0.12 <1" + esbuild: '>=0.12 <1' esbuild@0.18.20: - resolution: - { - integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} hasBin: true esbuild@0.19.12: - resolution: - { - integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} hasBin: true esbuild@0.21.5: - resolution: - { - integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} hasBin: true esbuild@0.28.1: - resolution: - { - integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} hasBin: true escalade@3.2.0: - resolution: - { - integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} eslint-config-prettier@10.1.8: - resolution: - { - integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, - } + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: - eslint: ">=7.0.0" + eslint: '>=7.0.0' eslint-plugin-jsx-a11y@6.10.2: - resolution: - { - integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 eslint-plugin-react-hooks@7.1.1: - resolution: - { - integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} + engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 eslint-plugin-security@4.0.1: - resolution: - { - integrity: sha512-/lZCkOxPOWaf1jXAqgICrS8St3BMBccIPvhOSUYuV6VCr1o5nFVG998FnTLt6w2Nxb8Uo0nM8fzmnhp+GY/aEg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-/lZCkOxPOWaf1jXAqgICrS8St3BMBccIPvhOSUYuV6VCr1o5nFVG998FnTLt6w2Nxb8Uo0nM8fzmnhp+GY/aEg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-scope@9.1.2: - resolution: - { - integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint-visitor-keys@5.0.1: - resolution: - { - integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint@10.6.0: - resolution: - { - integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: - jiti: "*" + jiti: '*' peerDependenciesMeta: jiti: optional: true espree@11.2.0: - resolution: - { - integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} esquery@1.7.0: - resolution: - { - integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} estree-walker@3.0.3: - resolution: - { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, - } + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} expect-type@1.4.0: - resolution: - { - integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} exsolve@1.1.0: - resolution: - { - integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==, - } + resolution: {integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==} fast-check@3.23.2: - resolution: - { - integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-glob@3.3.1: - resolution: - { - integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, - } - engines: { node: ">=8.6.0" } + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} fast-sha256@1.3.0: - resolution: - { - integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==, - } + resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} fast-uri@3.1.3: - resolution: - { - integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==, - } + resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} fastq@1.20.1: - resolution: - { - integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==, - } + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fdir@6.5.0: - resolution: - { - integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -4864,1040 +3306,605 @@ packages: optional: true file-entry-cache@8.0.0: - resolution: - { - integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, - } - engines: { node: ">=16.0.0" } + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-type@21.3.4: - resolution: - { - integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} fill-range@7.1.1: - resolution: - { - integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} flat-cache@4.0.1: - resolution: - { - integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.4.2: - resolution: - { - integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==, - } + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} for-each@0.3.5: - resolution: - { - integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} foreground-child@3.3.1: - resolution: - { - integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, - } + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} function.prototype.name@1.2.0: - resolution: - { - integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} + engines: {node: '>= 0.4'} functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, - } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} gel@2.2.0: - resolution: - { - integrity: sha512-q0ma7z2swmoamHQusey8ayo8+ilVdzDt4WTxSPzq/yRqvucWRfymRVMvNgmSC0XK7eNjjEZEcplxpgaNojKdmQ==, - } - engines: { node: ">= 18.0.0" } + resolution: {integrity: sha512-q0ma7z2swmoamHQusey8ayo8+ilVdzDt4WTxSPzq/yRqvucWRfymRVMvNgmSC0XK7eNjjEZEcplxpgaNojKdmQ==} + engines: {node: '>= 18.0.0'} hasBin: true generate-function@2.3.1: - resolution: - { - integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==, - } + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} generator-function@2.0.1: - resolution: - { - integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} get-intrinsic@1.3.0: - resolution: - { - integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} get-nonce@1.0.1: - resolution: - { - integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} get-port-please@3.2.0: - resolution: - { - integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==, - } + resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} get-proto@1.0.1: - resolution: - { - integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} get-symbol-description@1.1.0: - resolution: - { - integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} get-tsconfig@4.14.0: - resolution: - { - integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==, - } + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} giget@3.3.0: - resolution: - { - integrity: sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw==, - } + resolution: {integrity: sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw==} hasBin: true glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} globalthis@1.0.4: - resolution: - { - integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} gopd@1.2.0: - resolution: - { - integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} grammex@3.1.12: - resolution: - { - integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==, - } + resolution: {integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==} graphmatch@1.1.1: - resolution: - { - integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==, - } + resolution: {integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==} has-bigints@1.1.0: - resolution: - { - integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-property-descriptors@1.0.2: - resolution: - { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, - } + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} has-proto@1.2.0: - resolution: - { - integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} has-symbols@1.1.0: - resolution: - { - integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} hash-wasm@4.12.0: - resolution: - { - integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==, - } + resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==} hasown@2.0.4: - resolution: - { - integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} hermes-estree@0.25.1: - resolution: - { - integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==, - } + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} hermes-parser@0.25.1: - resolution: - { - integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==, - } + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} hono@4.12.27: - resolution: - { - integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==, - } - engines: { node: ">=16.9.0" } + resolution: {integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==} + engines: {node: '>=16.9.0'} htmlparser2@10.1.0: - resolution: - { - integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==, - } + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} http-status-codes@2.3.0: - resolution: - { - integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==, - } + resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} iconv-lite@0.6.3: - resolution: - { - integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} iconv-lite@0.7.2: - resolution: - { - integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} icu-minify@4.13.1: - resolution: - { - integrity: sha512-nFYW2im0WJ3RUVZwabd71J8QTZRtkK1xxZBY7klg7a6KS/os17LZSj9q1VhbRSnk3S8Mv2I7F1izr/aEJ6cUsw==, - } + resolution: {integrity: sha512-nFYW2im0WJ3RUVZwabd71J8QTZRtkK1xxZBY7klg7a6KS/os17LZSj9q1VhbRSnk3S8Mv2I7F1izr/aEJ6cUsw==} ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, - } + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} ignore@5.3.2: - resolution: - { - integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} ignore@7.0.6: - resolution: - { - integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} + engines: {node: '>= 4'} immediate@3.0.6: - resolution: - { - integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, - } + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: ">=0.8.19" } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} internal-slot@1.1.0: - resolution: - { - integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} intl-messageformat@11.2.9: - resolution: - { - integrity: sha512-cGzymZerpDhVXRKjKLgXKda9gI29TU2o88L7gwNMHp3WZVxA/0c5tX52udXbW9JklDApolvMXZG6Dhhdz5eirA==, - } + resolution: {integrity: sha512-cGzymZerpDhVXRKjKLgXKda9gI29TU2o88L7gwNMHp3WZVxA/0c5tX52udXbW9JklDApolvMXZG6Dhhdz5eirA==} ioredis@5.11.1: - resolution: - { - integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==, - } - engines: { node: ">=12.22.0" } + resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==} + engines: {node: '>=12.22.0'} is-array-buffer@3.0.5: - resolution: - { - integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} is-async-function@2.1.1: - resolution: - { - integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} is-bigint@1.1.0: - resolution: - { - integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} is-boolean-object@1.2.2: - resolution: - { - integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} is-data-view@1.0.2: - resolution: - { - integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} is-date-object@1.1.0: - resolution: - { - integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} is-document.all@1.0.0: - resolution: - { - integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} + engines: {node: '>= 0.4'} is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} is-finalizationregistry@1.1.1: - resolution: - { - integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} is-generator-function@1.1.2: - resolution: - { - integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} is-map@2.0.3: - resolution: - { - integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} is-negative-zero@2.0.3: - resolution: - { - integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} is-number-object@1.1.1: - resolution: - { - integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} is-plain-object@5.0.0: - resolution: - { - integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} is-property@1.0.2: - resolution: - { - integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==, - } + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} is-regex@1.2.1: - resolution: - { - integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} is-set@2.0.3: - resolution: - { - integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} is-shared-array-buffer@1.0.4: - resolution: - { - integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} is-string@1.1.1: - resolution: - { - integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} is-symbol@1.1.1: - resolution: - { - integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} is-typed-array@1.1.15: - resolution: - { - integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} is-weakmap@2.0.2: - resolution: - { - integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} is-weakref@1.1.1: - resolution: - { - integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} is-weakset@2.0.4: - resolution: - { - integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} isarray@1.0.0: - resolution: - { - integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, - } + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, - } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} isexe@3.1.5: - resolution: - { - integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} + engines: {node: '>=18'} jiti@2.7.0: - resolution: - { - integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==, - } + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true jose@6.2.3: - resolution: - { - integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==, - } + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} jpeg-js@0.4.4: - resolution: - { - integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==, - } + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} jsesc@3.1.0: - resolution: - { - integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true jsx-ast-utils@3.3.5: - resolution: - { - integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} jszip@3.10.1: - resolution: - { - integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==, - } + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} keyv@4.5.4: - resolution: - { - integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, - } + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} language-subtag-registry@0.3.23: - resolution: - { - integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==, - } + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} language-tags@1.0.9: - resolution: - { - integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} launder@1.7.1: - resolution: - { - integrity: sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==, - } + resolution: {integrity: sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==} levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} lie@3.3.0: - resolution: - { - integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==, - } + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} lightningcss-android-arm64@1.32.0: - resolution: - { - integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] lightningcss-darwin-arm64@1.32.0: - resolution: - { - integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] lightningcss-darwin-x64@1.32.0: - resolution: - { - integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] lightningcss-freebsd-x64@1.32.0: - resolution: - { - integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: - { - integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] lightningcss-linux-arm64-gnu@1.32.0: - resolution: - { - integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: - resolution: - { - integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [musl] lightningcss-linux-x64-gnu@1.32.0: - resolution: - { - integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [glibc] lightningcss-linux-x64-musl@1.32.0: - resolution: - { - integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: - resolution: - { - integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] lightningcss-win32-x64-msvc@1.32.0: - resolution: - { - integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] lightningcss@1.32.0: - resolution: - { - integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} long@5.3.2: - resolution: - { - integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==, - } + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} loupe@3.2.1: - resolution: - { - integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==, - } + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lru-cache@10.4.3: - resolution: - { - integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, - } + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} lru.min@1.1.4: - resolution: - { - integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==, - } - engines: { bun: ">=1.0.0", deno: ">=1.30.0", node: ">=8.0.0" } + resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} + engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} lucide-react@1.23.0: - resolution: - { - integrity: sha512-38BpJcD0JhFosxHApP/BYsBetLpQFRoTRzEzstM/XCc3jsAG7wqaY1lgVwxiUe3xqYE+lNxo2PkCmYwXWrwwIw==, - } + resolution: {integrity: sha512-38BpJcD0JhFosxHApP/BYsBetLpQFRoTRzEzstM/XCc3jsAG7wqaY1lgVwxiUe3xqYE+lNxo2PkCmYwXWrwwIw==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 lzma@2.3.2: - resolution: - { - integrity: sha512-DcfiawQ1avYbW+hsILhF38IKAlnguc/fjHrychs9hdxe4qLykvhT5VTGNs5YRWgaNePh7NTxGD4uv4gKsRomCQ==, - } + resolution: {integrity: sha512-DcfiawQ1avYbW+hsILhF38IKAlnguc/fjHrychs9hdxe4qLykvhT5VTGNs5YRWgaNePh7NTxGD4uv4gKsRomCQ==} hasBin: true magic-string@0.30.21: - resolution: - { - integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, - } + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} mariadb@3.4.5: - resolution: - { - integrity: sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==, - } - engines: { node: ">= 14" } + resolution: {integrity: sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==} + engines: {node: '>= 14'} math-intrinsics@1.1.0: - resolution: - { - integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} media-typer@2.0.0: - resolution: - { - integrity: sha512-kOy3OxT2HH39N70UnKgu4NWDZjLOz8W/mfyvniHjRH/DrL3f2pOfvWQ4p60offbbtDAnXWp0v9LfMIqMec269Q==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-kOy3OxT2HH39N70UnKgu4NWDZjLOz8W/mfyvniHjRH/DrL3f2pOfvWQ4p60offbbtDAnXWp0v9LfMIqMec269Q==} + engines: {node: '>=18'} merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} micromatch@4.0.8: - resolution: - { - integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} mini-svg-data-uri@1.4.4: - resolution: - { - integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==, - } + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true minimatch@10.2.5: - resolution: - { - integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.5: - resolution: - { - integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, - } + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} music-metadata@11.13.0: - resolution: - { - integrity: sha512-uXRaov9dfjSpQufXIU7sMxVZnh+FilCQv2mXn+K5EJ/decP3dTWrgvPYa5r6MtRbieNSCE708Da4J0u1UGfQIw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-uXRaov9dfjSpQufXIU7sMxVZnh+FilCQv2mXn+K5EJ/decP3dTWrgvPYa5r6MtRbieNSCE708Da4J0u1UGfQIw==} + engines: {node: '>=18'} mysql2@3.15.3: - resolution: - { - integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==, - } - engines: { node: ">= 8.0" } + resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} + engines: {node: '>= 8.0'} mysql2@3.22.5: - resolution: - { - integrity: sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ==, - } - engines: { node: ">= 8.0" } + resolution: {integrity: sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ==} + engines: {node: '>= 8.0'} peerDependencies: - "@types/node": ">= 8" + '@types/node': '>= 8' mysql2@3.22.6: - resolution: - { - integrity: sha512-fPKmeDGUzvFP7bMD5SASlJ5zIgvCC4hbanTmhbUlEmhyrY1hR4Hi3xLOWgTd3luYjLVifx6uGvMNJ2m/LlqEpg==, - } - engines: { node: ">= 8.0" } + resolution: {integrity: sha512-fPKmeDGUzvFP7bMD5SASlJ5zIgvCC4hbanTmhbUlEmhyrY1hR4Hi3xLOWgTd3luYjLVifx6uGvMNJ2m/LlqEpg==} + engines: {node: '>= 8.0'} peerDependencies: - "@types/node": ">= 8" + '@types/node': '>= 8' named-placeholders@1.1.6: - resolution: - { - integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} + engines: {node: '>=8.0.0'} nanoid@3.3.15: - resolution: - { - integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} negotiator@1.0.0: - resolution: - { - integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} next-auth@5.0.0-beta.31: - resolution: - { - integrity: sha512-1OBgCKPzo+S7UWWMp3xgvGvIJ0OpV7B3vR4ZDRqD9a4Ch+OT6dakLXG9ivhtmIWVa71nTSXattOHyCg8sNi8/Q==, - } + resolution: {integrity: sha512-1OBgCKPzo+S7UWWMp3xgvGvIJ0OpV7B3vR4ZDRqD9a4Ch+OT6dakLXG9ivhtmIWVa71nTSXattOHyCg8sNi8/Q==} peerDependencies: - "@simplewebauthn/browser": ^9.0.1 - "@simplewebauthn/server": ^9.0.2 + '@simplewebauthn/browser': ^9.0.1 + '@simplewebauthn/server': ^9.0.2 next: ^14.0.0-0 || ^15.0.0 || ^16.0.0 nodemailer: ^7.0.7 react: ^18.2.0 || ^19.0.0 peerDependenciesMeta: - "@simplewebauthn/browser": + '@simplewebauthn/browser': optional: true - "@simplewebauthn/server": + '@simplewebauthn/server': optional: true nodemailer: optional: true next-intl-swc-plugin-extractor@4.13.1: - resolution: - { - integrity: sha512-RhlH2DR1ViEXzcX7G3tDXAvzNrBL2Ph54Hq/q/9oP9eXQV/okh3UQpA/lx2k9U5Ck83CZOSgH0eFTNi5U+zyXw==, - } + resolution: {integrity: sha512-RhlH2DR1ViEXzcX7G3tDXAvzNrBL2Ph54Hq/q/9oP9eXQV/okh3UQpA/lx2k9U5Ck83CZOSgH0eFTNi5U+zyXw==} next-intl@4.13.1: - resolution: - { - integrity: sha512-aS8KTA+nNhSNJJBlIhxgvU135WzoObwzFwav4wTDti/Gmhxqe0fs/Q343igo8Z7HGqPB/xgmoagwySZAlHmIfA==, - } + resolution: {integrity: sha512-aS8KTA+nNhSNJJBlIhxgvU135WzoObwzFwav4wTDti/Gmhxqe0fs/Q343igo8Z7HGqPB/xgmoagwySZAlHmIfA==} peerDependencies: next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true next@16.2.10: - resolution: - { - integrity: sha512-2som5AVXb3kE6Yjine3/mNbBayYF58eguBWIVVUdr1y/L426xyVEgYxgBG+1QC34P2x5E+tcDup6XkuOAX3dCA==, - } - engines: { node: ">=20.9.0" } + resolution: {integrity: sha512-2som5AVXb3kE6Yjine3/mNbBayYF58eguBWIVVUdr1y/L426xyVEgYxgBG+1QC34P2x5E+tcDup6XkuOAX3dCA==} + engines: {node: '>=20.9.0'} hasBin: true peerDependencies: - "@opentelemetry/api": ^1.1.0 - "@playwright/test": ^1.51.1 - babel-plugin-react-compiler: "*" + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 sass: ^1.3.0 peerDependenciesMeta: - "@opentelemetry/api": + '@opentelemetry/api': optional: true - "@playwright/test": + '@playwright/test': optional: true babel-plugin-react-compiler: optional: true @@ -5905,269 +3912,152 @@ packages: optional: true node-addon-api@7.1.1: - resolution: - { - integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==, - } + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} node-releases@2.0.51: - resolution: - { - integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + engines: {node: '>=18'} nodemailer@9.0.3: - resolution: - { - integrity: sha512-n+YP+NKwR5zRWa60k3GiQ6Q3B4KXCoAw40dAKeCtYn020iNN74aWK2liXIC3ZEATeGql7we3tE3t8QwhY0eskw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-n+YP+NKwR5zRWa60k3GiQ6Q3B4KXCoAw40dAKeCtYn020iNN74aWK2liXIC3ZEATeGql7we3tE3t8QwhY0eskw==} + engines: {node: '>=6.0.0'} oauth4webapi@3.8.6: - resolution: - { - integrity: sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==, - } + resolution: {integrity: sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==} object-inspect@1.13.4: - resolution: - { - integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} object.assign@4.1.7: - resolution: - { - integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} object.fromentries@2.0.8: - resolution: - { - integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} object.values@1.2.1: - resolution: - { - integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} ohash@2.0.11: - resolution: - { - integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==, - } + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} optionator@0.9.4: - resolution: - { - integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} otplib@12.0.1: - resolution: - { - integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==, - } + resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} own-keys@1.0.1: - resolution: - { - integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} pako@1.0.11: - resolution: - { - integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, - } + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} parse-srcset@1.0.2: - resolution: - { - integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==, - } + resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} pathe@1.1.2: - resolution: - { - integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==, - } + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} pathe@2.0.3: - resolution: - { - integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, - } + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} pathval@2.0.1: - resolution: - { - integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==, - } - engines: { node: ">= 14.16" } + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} perfect-debounce@2.1.0: - resolution: - { - integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==, - } + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} picocolors@1.1.1: - resolution: - { - integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, - } + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.2: - resolution: - { - integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} picomatch@4.0.4: - resolution: - { - integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} pkg-types@2.3.1: - resolution: - { - integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==, - } + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} po-parser@2.1.1: - resolution: - { - integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==, - } + resolution: {integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==} possible-typed-array-names@1.1.0: - resolution: - { - integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} postal-mime@2.7.4: - resolution: - { - integrity: sha512-0WdnFQYUrPGGTFu1uOqD2s7omwua8xaeYGdO6rb88oD5yJ/4pPHDA4sdWqfD8wQVfCny563n/HQS7zTFft+f/g==, - } + resolution: {integrity: sha512-0WdnFQYUrPGGTFu1uOqD2s7omwua8xaeYGdO6rb88oD5yJ/4pPHDA4sdWqfD8wQVfCny563n/HQS7zTFft+f/g==} postcss-selector-parser@6.0.10: - resolution: - { - integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} postcss@8.5.15: - resolution: - { - integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} postcss@8.5.16: - resolution: - { - integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + engines: {node: ^10 || ^12 || >=14} postgres@3.4.7: - resolution: - { - integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} + engines: {node: '>=12'} preact-render-to-string@6.5.11: - resolution: - { - integrity: sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==, - } + resolution: {integrity: sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==} peerDependencies: - preact: ">=10" + preact: '>=10' preact@10.24.3: - resolution: - { - integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==, - } + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} prettier@3.9.5: - resolution: - { - integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} + engines: {node: '>=14'} hasBin: true prisma@7.8.0: - resolution: - { - integrity: sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==, - } - engines: { node: ^20.19 || ^22.12 || >=24.0 } + resolution: {integrity: sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==} + engines: {node: ^20.19 || ^22.12 || >=24.0} hasBin: true peerDependencies: - better-sqlite3: ">=9.0.0" - typescript: ">=5.4.0" + better-sqlite3: '>=9.0.0' + typescript: '>=5.4.0' peerDependenciesMeta: better-sqlite3: optional: true @@ -6175,814 +4065,490 @@ packages: optional: true process-nextick-args@2.0.1: - resolution: - { - integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, - } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} proper-lockfile@4.1.2: - resolution: - { - integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==, - } + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} pure-rand@6.1.0: - resolution: - { - integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==, - } + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} radix-ui@1.6.2: - resolution: - { - integrity: sha512-OwYUjzMwiInCUxgAWpPsavXC3Kh4iyi/49uU1/qZTG3RQDlvegyk1GOMiGvSkjua1RDb3JD3fo3eroL9FV4GQw==, - } + resolution: {integrity: sha512-OwYUjzMwiInCUxgAWpPsavXC3Kh4iyi/49uU1/qZTG3RQDlvegyk1GOMiGvSkjua1RDb3JD3fo3eroL9FV4GQw==} peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true rc9@3.0.1: - resolution: - { - integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==, - } + resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==} react-dom@19.2.7: - resolution: - { - integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==, - } + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} peerDependencies: react: ^19.2.7 react-hook-form@7.81.0: - resolution: - { - integrity: sha512-ocbmr2p5KBMoAfj4WCUvped33lVi1Kd5DuDUvQDnB6VEAacOjPI/jMbtDdbhco4y9ct4xUuCmMY0b/C9L0QHjw==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-ocbmr2p5KBMoAfj4WCUvped33lVi1Kd5DuDUvQDnB6VEAacOjPI/jMbtDdbhco4y9ct4xUuCmMY0b/C9L0QHjw==} + engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 react-remove-scroll-bar@2.3.8: - resolution: - { - integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react-remove-scroll@2.7.2: - resolution: - { - integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react-style-singleton@2.2.3: - resolution: - { - integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react@19.2.7: - resolution: - { - integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} + engines: {node: '>=0.10.0'} readable-stream@2.3.8: - resolution: - { - integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, - } + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} readdirp@5.0.0: - resolution: - { - integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==, - } - engines: { node: ">= 20.19.0" } + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} redis-errors@1.2.0: - resolution: - { - integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} redis-parser@3.0.0: - resolution: - { - integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} reflect.getprototypeof@1.0.10: - resolution: - { - integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} regexp-tree@0.1.27: - resolution: - { - integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==, - } + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true regexp.prototype.flags@1.5.4: - resolution: - { - integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} remeda@2.33.4: - resolution: - { - integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==, - } + resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} resend@6.17.1: - resolution: - { - integrity: sha512-QhHHIRPPM9Tq2uilWmNF8C8kd6nLkUmiFgDQCt1v4eR4o+6p86qrK+Vn12jnAs0jR8Gf6ABdxI18/90LGQ7GVA==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-QhHHIRPPM9Tq2uilWmNF8C8kd6nLkUmiFgDQCt1v4eR4o+6p86qrK+Vn12jnAs0jR8Gf6ABdxI18/90LGQ7GVA==} + engines: {node: '>=20'} peerDependencies: - "@react-email/render": "*" + '@react-email/render': '*' peerDependenciesMeta: - "@react-email/render": + '@react-email/render': optional: true resolve-pkg-maps@1.0.0: - resolution: - { - integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, - } + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} retry@0.12.0: - resolution: - { - integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} reusify@1.1.0: - resolution: - { - integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, - } - engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rollup@4.62.2: - resolution: - { - integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==, - } - engines: { node: ">=18.0.0", npm: ">=8.0.0" } + resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} safe-array-concat@1.1.4: - resolution: - { - integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==, - } - engines: { node: ">=0.4" } + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} + engines: {node: '>=0.4'} safe-buffer@5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, - } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-push-apply@1.0.0: - resolution: - { - integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} safe-regex-test@1.1.0: - resolution: - { - integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} safe-regex@2.1.1: - resolution: - { - integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==, - } + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} safer-buffer@2.1.2: - resolution: - { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, - } + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} sanitize-html@2.17.5: - resolution: - { - integrity: sha512-ZmU1joGRrvoyctKIiuwUxqR6moLoU2Wk+2bMccN6f7UwhAmwYDvWziqPxRDDN2Qip62NqnIrVrT9akbL6Wretg==, - } + resolution: {integrity: sha512-ZmU1joGRrvoyctKIiuwUxqR6moLoU2Wk+2bMccN6f7UwhAmwYDvWziqPxRDDN2Qip62NqnIrVrT9akbL6Wretg==} scheduler@0.27.0: - resolution: - { - integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, - } + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.8.5: - resolution: - { - integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} hasBin: true seq-queue@0.0.5: - resolution: - { - integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==, - } + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} set-function-name@2.0.2: - resolution: - { - integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} set-proto@1.0.0: - resolution: - { - integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} setimmediate@1.0.5: - resolution: - { - integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, - } + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} sharp@0.34.5: - resolution: - { - integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} shell-quote@1.9.0: - resolution: - { - integrity: sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==} + engines: {node: '>= 0.4'} side-channel-list@1.0.1: - resolution: - { - integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} side-channel-map@1.0.1: - resolution: - { - integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} side-channel-weakmap@1.0.2: - resolution: - { - integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} side-channel@1.1.1: - resolution: - { - integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} siginfo@2.0.0: - resolution: - { - integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, - } + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, - } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} signal-exit@4.1.0: - resolution: - { - integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} sonner@2.0.7: - resolution: - { - integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==, - } + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc source-map-js@1.2.1: - resolution: - { - integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map@0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} sql-escaper@1.3.3: - resolution: - { - integrity: sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==, - } - engines: { bun: ">=1.0.0", deno: ">=2.0.0", node: ">=12.0.0" } + resolution: {integrity: sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==} + engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} sql-escaper@1.4.0: - resolution: - { - integrity: sha512-Ti/Zx9J3aITMYUMFhCKbkplQjyi7Kk2SyYXp+rzrkyKZetIy19XbQtVZ+0ZR5aVm/178tIJ6+aVvBqXkH+Xs7w==, - } - engines: { bun: ">=1.0.0", deno: ">=2.0.0", node: ">=12.0.0" } + resolution: {integrity: sha512-Ti/Zx9J3aITMYUMFhCKbkplQjyi7Kk2SyYXp+rzrkyKZetIy19XbQtVZ+0ZR5aVm/178tIJ6+aVvBqXkH+Xs7w==} + engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} sqlstring@2.3.3: - resolution: - { - integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} stackback@0.0.2: - resolution: - { - integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, - } + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} standard-as-callback@2.1.0: - resolution: - { - integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==, - } + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} standardwebhooks@1.0.0: - resolution: - { - integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==, - } + resolution: {integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==} std-env@3.10.0: - resolution: - { - integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==, - } + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stop-iteration-iterator@1.1.0: - resolution: - { - integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} string.prototype.includes@2.0.1: - resolution: - { - integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} string.prototype.trim@1.2.11: - resolution: - { - integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} + engines: {node: '>= 0.4'} string.prototype.trimend@1.0.10: - resolution: - { - integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: - resolution: - { - integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} string_decoder@1.1.1: - resolution: - { - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, - } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} strtok3@10.3.5: - resolution: - { - integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} styled-jsx@5.1.6: - resolution: - { - integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} peerDependencies: - "@babel/core": "*" - babel-plugin-macros: "*" - react: ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' peerDependenciesMeta: - "@babel/core": + '@babel/core': optional: true babel-plugin-macros: optional: true tailwind-merge@3.6.0: - resolution: - { - integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==, - } + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} tailwindcss@4.3.2: - resolution: - { - integrity: sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==, - } + resolution: {integrity: sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==} tapable@2.3.3: - resolution: - { - integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} thirty-two@1.0.2: - resolution: - { - integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==, - } - engines: { node: ">=0.2.6" } + resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} + engines: {node: '>=0.2.6'} tinybench@2.9.0: - resolution: - { - integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, - } + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} tinyexec@0.3.2: - resolution: - { - integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==, - } + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} tinyglobby@0.2.17: - resolution: - { - integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} tinypool@1.1.1: - resolution: - { - integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@1.2.0: - resolution: - { - integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} tinyspy@3.0.2: - resolution: - { - integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} token-types@6.1.2: - resolution: - { - integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} ts-api-utils@2.5.0: - resolution: - { - integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==, - } - engines: { node: ">=18.12" } + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} peerDependencies: - typescript: ">=4.8.4" + typescript: '>=4.8.4' tslib@2.8.1: - resolution: - { - integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, - } + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tsx@4.22.5: - resolution: - { - integrity: sha512-F7JnSfPl5ASt6LqwWyUQ3T8BwN3q0eQEbFMYa2iRWaVQmmudo0d7fRmwM4O002gsvW1bs0yBYioutsAjqLJMvQ==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-F7JnSfPl5ASt6LqwWyUQ3T8BwN3q0eQEbFMYa2iRWaVQmmudo0d7fRmwM4O002gsvW1bs0yBYioutsAjqLJMvQ==} + engines: {node: '>=18.0.0'} hasBin: true type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} typed-array-buffer@1.0.3: - resolution: - { - integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} typed-array-byte-length@1.0.3: - resolution: - { - integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} typed-array-byte-offset@1.0.4: - resolution: - { - integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} typed-array-length@1.0.8: - resolution: - { - integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} + engines: {node: '>= 0.4'} typescript-eslint@8.63.0: - resolution: - { - integrity: sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" + typescript: '>=4.8.4 <6.1.0' typescript@5.9.3: - resolution: - { - integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, - } - engines: { node: ">=14.17" } + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} hasBin: true uint8array-extras@1.5.0: - resolution: - { - integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} unbox-primitive@1.1.0: - resolution: - { - integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} undici-types@6.21.0: - resolution: - { - integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, - } + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} undici-types@7.18.2: - resolution: - { - integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==, - } + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} update-browserslist-db@1.2.3: - resolution: - { - integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==, - } + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: - browserslist: ">= 4.21.0" + browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} use-callback-ref@1.3.3: - resolution: - { - integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true use-intl@4.13.1: - resolution: - { - integrity: sha512-UU5C3zAC7yVg3m7rq5C8VF5J5jhAfvS19Wi9bPNCB9xB7jQYBsUcrqfdxs4Mxl9XR3x6BDB5K++iAw7/rcm3gg==, - } + resolution: {integrity: sha512-UU5C3zAC7yVg3m7rq5C8VF5J5jhAfvS19Wi9bPNCB9xB7jQYBsUcrqfdxs4Mxl9XR3x6BDB5K++iAw7/rcm3gg==} peerDependencies: react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 use-sidecar@1.1.3: - resolution: - { - integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} peerDependencies: - "@types/react": "*" + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - "@types/react": + '@types/react': optional: true util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, - } + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} valibot@1.2.0: - resolution: - { - integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==, - } + resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} peerDependencies: - typescript: ">=5" + typescript: '>=5' peerDependenciesMeta: typescript: optional: true vite-node@2.1.9: - resolution: - { - integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true vite@5.4.21: - resolution: - { - integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true less: optional: true @@ -7000,27 +4566,24 @@ packages: optional: true vitest@2.1.9: - resolution: - { - integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - "@edge-runtime/vm": "*" - "@types/node": ^18.0.0 || >=20.0.0 - "@vitest/browser": 2.1.9 - "@vitest/ui": 2.1.9 - happy-dom: "*" - jsdom: "*" + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.9 + '@vitest/ui': 2.1.9 + happy-dom: '*' + jsdom: '*' peerDependenciesMeta: - "@edge-runtime/vm": + '@edge-runtime/vm': optional: true - "@types/node": + '@types/node': optional: true - "@vitest/browser": + '@vitest/browser': optional: true - "@vitest/ui": + '@vitest/ui': optional: true happy-dom: optional: true @@ -7028,110 +4591,69 @@ packages: optional: true which-boxed-primitive@1.1.1: - resolution: - { - integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} which-builtin-type@1.2.1: - resolution: - { - integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} which-collection@1.0.2: - resolution: - { - integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} which-typed-array@1.1.22: - resolution: - { - integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true which@4.0.0: - resolution: - { - integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==, - } - engines: { node: ^16.13.0 || >=18.0.0 } + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} hasBin: true why-is-node-running@2.3.0: - resolution: - { - integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} hasBin: true win-guid@0.2.1: - resolution: - { - integrity: sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==, - } + resolution: {integrity: sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==} word-wrap@1.2.5: - resolution: - { - integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} zeptomatch@2.1.0: - resolution: - { - integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==, - } + resolution: {integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==} zod-validation-error@4.0.2: - resolution: - { - integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} peerDependencies: zod: ^3.25.0 || ^4.0.0 zod@3.25.76: - resolution: - { - integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, - } + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} snapshots: - "@alloc/quick-lru@5.2.0": {} - "@auth/core@0.41.2(nodemailer@9.0.3)": + '@alloc/quick-lru@5.2.0': {} + + '@auth/core@0.41.2(nodemailer@9.0.3)': dependencies: - "@panva/hkdf": 1.2.1 + '@panva/hkdf': 1.2.1 jose: 6.2.3 oauth4webapi: 3.8.6 preact: 10.24.3 @@ -7139,26 +4661,26 @@ snapshots: optionalDependencies: nodemailer: 9.0.3 - "@babel/code-frame@7.29.7": + '@babel/code-frame@7.29.7': dependencies: - "@babel/helper-validator-identifier": 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - "@babel/compat-data@7.29.7": {} + '@babel/compat-data@7.29.7': {} - "@babel/core@7.29.7": + '@babel/core@7.29.7': dependencies: - "@babel/code-frame": 7.29.7 - "@babel/generator": 7.29.7 - "@babel/helper-compilation-targets": 7.29.7 - "@babel/helper-module-transforms": 7.29.7(@babel/core@7.29.7) - "@babel/helpers": 7.29.7 - "@babel/parser": 7.29.7 - "@babel/template": 7.29.7 - "@babel/traverse": 7.29.7 - "@babel/types": 7.29.7 - "@jridgewell/remapping": 2.3.5 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -7167,766 +4689,766 @@ snapshots: transitivePeerDependencies: - supports-color - "@babel/generator@7.29.7": + '@babel/generator@7.29.7': dependencies: - "@babel/parser": 7.29.7 - "@babel/types": 7.29.7 - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - "@babel/helper-compilation-targets@7.29.7": + '@babel/helper-compilation-targets@7.29.7': dependencies: - "@babel/compat-data": 7.29.7 - "@babel/helper-validator-option": 7.29.7 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 browserslist: 4.28.5 lru-cache: 5.1.1 semver: 6.3.1 - "@babel/helper-globals@7.29.7": {} + '@babel/helper-globals@7.29.7': {} - "@babel/helper-module-imports@7.29.7": + '@babel/helper-module-imports@7.29.7': dependencies: - "@babel/traverse": 7.29.7 - "@babel/types": 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - "@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)": + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - "@babel/core": 7.29.7 - "@babel/helper-module-imports": 7.29.7 - "@babel/helper-validator-identifier": 7.29.7 - "@babel/traverse": 7.29.7 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - "@babel/helper-string-parser@7.29.7": {} + '@babel/helper-string-parser@7.29.7': {} - "@babel/helper-validator-identifier@7.29.7": {} + '@babel/helper-validator-identifier@7.29.7': {} - "@babel/helper-validator-option@7.29.7": {} + '@babel/helper-validator-option@7.29.7': {} - "@babel/helpers@7.29.7": + '@babel/helpers@7.29.7': dependencies: - "@babel/template": 7.29.7 - "@babel/types": 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 - "@babel/parser@7.29.7": + '@babel/parser@7.29.7': dependencies: - "@babel/types": 7.29.7 + '@babel/types': 7.29.7 - "@babel/template@7.29.7": + '@babel/template@7.29.7': dependencies: - "@babel/code-frame": 7.29.7 - "@babel/parser": 7.29.7 - "@babel/types": 7.29.7 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - "@babel/traverse@7.29.7": + '@babel/traverse@7.29.7': dependencies: - "@babel/code-frame": 7.29.7 - "@babel/generator": 7.29.7 - "@babel/helper-globals": 7.29.7 - "@babel/parser": 7.29.7 - "@babel/template": 7.29.7 - "@babel/types": 7.29.7 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color - "@babel/types@7.29.7": + '@babel/types@7.29.7': dependencies: - "@babel/helper-string-parser": 7.29.7 - "@babel/helper-validator-identifier": 7.29.7 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 - "@borewit/text-codec@0.2.2": {} + '@borewit/text-codec@0.2.2': {} - "@dnd-kit/accessibility@3.1.1(react@19.2.7)": + '@dnd-kit/accessibility@3.1.1(react@19.2.7)': dependencies: react: 19.2.7 tslib: 2.8.1 - "@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@dnd-kit/accessibility": 3.1.1(react@19.2.7) - "@dnd-kit/utilities": 3.2.2(react@19.2.7) + '@dnd-kit/accessibility': 3.1.1(react@19.2.7) + '@dnd-kit/utilities': 3.2.2(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 - "@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)": + '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)': dependencies: - "@dnd-kit/core": 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@dnd-kit/utilities": 3.2.2(react@19.2.7) + '@dnd-kit/core': 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@dnd-kit/utilities': 3.2.2(react@19.2.7) react: 19.2.7 tslib: 2.8.1 - "@dnd-kit/utilities@3.2.2(react@19.2.7)": + '@dnd-kit/utilities@3.2.2(react@19.2.7)': dependencies: react: 19.2.7 tslib: 2.8.1 - "@drizzle-team/brocli@0.10.2": {} + '@drizzle-team/brocli@0.10.2': {} - "@electric-sql/pglite-socket@0.1.1(@electric-sql/pglite@0.4.1)": + '@electric-sql/pglite-socket@0.1.1(@electric-sql/pglite@0.4.1)': dependencies: - "@electric-sql/pglite": 0.4.1 + '@electric-sql/pglite': 0.4.1 - "@electric-sql/pglite-tools@0.3.1(@electric-sql/pglite@0.4.1)": + '@electric-sql/pglite-tools@0.3.1(@electric-sql/pglite@0.4.1)': dependencies: - "@electric-sql/pglite": 0.4.1 + '@electric-sql/pglite': 0.4.1 - "@electric-sql/pglite@0.4.1": {} + '@electric-sql/pglite@0.4.1': {} - "@emnapi/runtime@1.11.1": + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true - "@esbuild-kit/core-utils@3.3.2": + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 source-map-support: 0.5.21 - "@esbuild-kit/esm-loader@2.6.5": + '@esbuild-kit/esm-loader@2.6.5': dependencies: - "@esbuild-kit/core-utils": 3.3.2 + '@esbuild-kit/core-utils': 3.3.2 get-tsconfig: 4.14.0 - "@esbuild/aix-ppc64@0.19.12": + '@esbuild/aix-ppc64@0.19.12': optional: true - "@esbuild/aix-ppc64@0.21.5": + '@esbuild/aix-ppc64@0.21.5': optional: true - "@esbuild/aix-ppc64@0.28.1": + '@esbuild/aix-ppc64@0.28.1': optional: true - "@esbuild/android-arm64@0.18.20": + '@esbuild/android-arm64@0.18.20': optional: true - "@esbuild/android-arm64@0.19.12": + '@esbuild/android-arm64@0.19.12': optional: true - "@esbuild/android-arm64@0.21.5": + '@esbuild/android-arm64@0.21.5': optional: true - "@esbuild/android-arm64@0.28.1": + '@esbuild/android-arm64@0.28.1': optional: true - "@esbuild/android-arm@0.18.20": + '@esbuild/android-arm@0.18.20': optional: true - "@esbuild/android-arm@0.19.12": + '@esbuild/android-arm@0.19.12': optional: true - "@esbuild/android-arm@0.21.5": + '@esbuild/android-arm@0.21.5': optional: true - "@esbuild/android-arm@0.28.1": + '@esbuild/android-arm@0.28.1': optional: true - "@esbuild/android-x64@0.18.20": + '@esbuild/android-x64@0.18.20': optional: true - "@esbuild/android-x64@0.19.12": + '@esbuild/android-x64@0.19.12': optional: true - "@esbuild/android-x64@0.21.5": + '@esbuild/android-x64@0.21.5': optional: true - "@esbuild/android-x64@0.28.1": + '@esbuild/android-x64@0.28.1': optional: true - "@esbuild/darwin-arm64@0.18.20": + '@esbuild/darwin-arm64@0.18.20': optional: true - "@esbuild/darwin-arm64@0.19.12": + '@esbuild/darwin-arm64@0.19.12': optional: true - "@esbuild/darwin-arm64@0.21.5": + '@esbuild/darwin-arm64@0.21.5': optional: true - "@esbuild/darwin-arm64@0.28.1": + '@esbuild/darwin-arm64@0.28.1': optional: true - "@esbuild/darwin-x64@0.18.20": + '@esbuild/darwin-x64@0.18.20': optional: true - "@esbuild/darwin-x64@0.19.12": + '@esbuild/darwin-x64@0.19.12': optional: true - "@esbuild/darwin-x64@0.21.5": + '@esbuild/darwin-x64@0.21.5': optional: true - "@esbuild/darwin-x64@0.28.1": + '@esbuild/darwin-x64@0.28.1': optional: true - "@esbuild/freebsd-arm64@0.18.20": + '@esbuild/freebsd-arm64@0.18.20': optional: true - "@esbuild/freebsd-arm64@0.19.12": + '@esbuild/freebsd-arm64@0.19.12': optional: true - "@esbuild/freebsd-arm64@0.21.5": + '@esbuild/freebsd-arm64@0.21.5': optional: true - "@esbuild/freebsd-arm64@0.28.1": + '@esbuild/freebsd-arm64@0.28.1': optional: true - "@esbuild/freebsd-x64@0.18.20": + '@esbuild/freebsd-x64@0.18.20': optional: true - "@esbuild/freebsd-x64@0.19.12": + '@esbuild/freebsd-x64@0.19.12': optional: true - "@esbuild/freebsd-x64@0.21.5": + '@esbuild/freebsd-x64@0.21.5': optional: true - "@esbuild/freebsd-x64@0.28.1": + '@esbuild/freebsd-x64@0.28.1': optional: true - "@esbuild/linux-arm64@0.18.20": + '@esbuild/linux-arm64@0.18.20': optional: true - "@esbuild/linux-arm64@0.19.12": + '@esbuild/linux-arm64@0.19.12': optional: true - "@esbuild/linux-arm64@0.21.5": + '@esbuild/linux-arm64@0.21.5': optional: true - "@esbuild/linux-arm64@0.28.1": + '@esbuild/linux-arm64@0.28.1': optional: true - "@esbuild/linux-arm@0.18.20": + '@esbuild/linux-arm@0.18.20': optional: true - "@esbuild/linux-arm@0.19.12": + '@esbuild/linux-arm@0.19.12': optional: true - "@esbuild/linux-arm@0.21.5": + '@esbuild/linux-arm@0.21.5': optional: true - "@esbuild/linux-arm@0.28.1": + '@esbuild/linux-arm@0.28.1': optional: true - "@esbuild/linux-ia32@0.18.20": + '@esbuild/linux-ia32@0.18.20': optional: true - "@esbuild/linux-ia32@0.19.12": + '@esbuild/linux-ia32@0.19.12': optional: true - "@esbuild/linux-ia32@0.21.5": + '@esbuild/linux-ia32@0.21.5': optional: true - "@esbuild/linux-ia32@0.28.1": + '@esbuild/linux-ia32@0.28.1': optional: true - "@esbuild/linux-loong64@0.18.20": + '@esbuild/linux-loong64@0.18.20': optional: true - "@esbuild/linux-loong64@0.19.12": + '@esbuild/linux-loong64@0.19.12': optional: true - "@esbuild/linux-loong64@0.21.5": + '@esbuild/linux-loong64@0.21.5': optional: true - "@esbuild/linux-loong64@0.28.1": + '@esbuild/linux-loong64@0.28.1': optional: true - "@esbuild/linux-mips64el@0.18.20": + '@esbuild/linux-mips64el@0.18.20': optional: true - "@esbuild/linux-mips64el@0.19.12": + '@esbuild/linux-mips64el@0.19.12': optional: true - "@esbuild/linux-mips64el@0.21.5": + '@esbuild/linux-mips64el@0.21.5': optional: true - "@esbuild/linux-mips64el@0.28.1": + '@esbuild/linux-mips64el@0.28.1': optional: true - "@esbuild/linux-ppc64@0.18.20": + '@esbuild/linux-ppc64@0.18.20': optional: true - "@esbuild/linux-ppc64@0.19.12": + '@esbuild/linux-ppc64@0.19.12': optional: true - "@esbuild/linux-ppc64@0.21.5": + '@esbuild/linux-ppc64@0.21.5': optional: true - "@esbuild/linux-ppc64@0.28.1": + '@esbuild/linux-ppc64@0.28.1': optional: true - "@esbuild/linux-riscv64@0.18.20": + '@esbuild/linux-riscv64@0.18.20': optional: true - "@esbuild/linux-riscv64@0.19.12": + '@esbuild/linux-riscv64@0.19.12': optional: true - "@esbuild/linux-riscv64@0.21.5": + '@esbuild/linux-riscv64@0.21.5': optional: true - "@esbuild/linux-riscv64@0.28.1": + '@esbuild/linux-riscv64@0.28.1': optional: true - "@esbuild/linux-s390x@0.18.20": + '@esbuild/linux-s390x@0.18.20': optional: true - "@esbuild/linux-s390x@0.19.12": + '@esbuild/linux-s390x@0.19.12': optional: true - "@esbuild/linux-s390x@0.21.5": + '@esbuild/linux-s390x@0.21.5': optional: true - "@esbuild/linux-s390x@0.28.1": + '@esbuild/linux-s390x@0.28.1': optional: true - "@esbuild/linux-x64@0.18.20": + '@esbuild/linux-x64@0.18.20': optional: true - "@esbuild/linux-x64@0.19.12": + '@esbuild/linux-x64@0.19.12': optional: true - "@esbuild/linux-x64@0.21.5": + '@esbuild/linux-x64@0.21.5': optional: true - "@esbuild/linux-x64@0.28.1": + '@esbuild/linux-x64@0.28.1': optional: true - "@esbuild/netbsd-arm64@0.28.1": + '@esbuild/netbsd-arm64@0.28.1': optional: true - "@esbuild/netbsd-x64@0.18.20": + '@esbuild/netbsd-x64@0.18.20': optional: true - "@esbuild/netbsd-x64@0.19.12": + '@esbuild/netbsd-x64@0.19.12': optional: true - "@esbuild/netbsd-x64@0.21.5": + '@esbuild/netbsd-x64@0.21.5': optional: true - "@esbuild/netbsd-x64@0.28.1": + '@esbuild/netbsd-x64@0.28.1': optional: true - "@esbuild/openbsd-arm64@0.28.1": + '@esbuild/openbsd-arm64@0.28.1': optional: true - "@esbuild/openbsd-x64@0.18.20": + '@esbuild/openbsd-x64@0.18.20': optional: true - "@esbuild/openbsd-x64@0.19.12": + '@esbuild/openbsd-x64@0.19.12': optional: true - "@esbuild/openbsd-x64@0.21.5": + '@esbuild/openbsd-x64@0.21.5': optional: true - "@esbuild/openbsd-x64@0.28.1": + '@esbuild/openbsd-x64@0.28.1': optional: true - "@esbuild/openharmony-arm64@0.28.1": + '@esbuild/openharmony-arm64@0.28.1': optional: true - "@esbuild/sunos-x64@0.18.20": + '@esbuild/sunos-x64@0.18.20': optional: true - "@esbuild/sunos-x64@0.19.12": + '@esbuild/sunos-x64@0.19.12': optional: true - "@esbuild/sunos-x64@0.21.5": + '@esbuild/sunos-x64@0.21.5': optional: true - "@esbuild/sunos-x64@0.28.1": + '@esbuild/sunos-x64@0.28.1': optional: true - "@esbuild/win32-arm64@0.18.20": + '@esbuild/win32-arm64@0.18.20': optional: true - "@esbuild/win32-arm64@0.19.12": + '@esbuild/win32-arm64@0.19.12': optional: true - "@esbuild/win32-arm64@0.21.5": + '@esbuild/win32-arm64@0.21.5': optional: true - "@esbuild/win32-arm64@0.28.1": + '@esbuild/win32-arm64@0.28.1': optional: true - "@esbuild/win32-ia32@0.18.20": + '@esbuild/win32-ia32@0.18.20': optional: true - "@esbuild/win32-ia32@0.19.12": + '@esbuild/win32-ia32@0.19.12': optional: true - "@esbuild/win32-ia32@0.21.5": + '@esbuild/win32-ia32@0.21.5': optional: true - "@esbuild/win32-ia32@0.28.1": + '@esbuild/win32-ia32@0.28.1': optional: true - "@esbuild/win32-x64@0.18.20": + '@esbuild/win32-x64@0.18.20': optional: true - "@esbuild/win32-x64@0.19.12": + '@esbuild/win32-x64@0.19.12': optional: true - "@esbuild/win32-x64@0.21.5": + '@esbuild/win32-x64@0.21.5': optional: true - "@esbuild/win32-x64@0.28.1": + '@esbuild/win32-x64@0.28.1': optional: true - "@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))": + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': dependencies: eslint: 10.6.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 - "@eslint-community/regexpp@4.12.2": {} + '@eslint-community/regexpp@4.12.2': {} - "@eslint/config-array@0.23.5": + '@eslint/config-array@0.23.5': dependencies: - "@eslint/object-schema": 3.0.5 + '@eslint/object-schema': 3.0.5 debug: 4.4.3 minimatch: 10.2.5 transitivePeerDependencies: - supports-color - "@eslint/config-helpers@0.6.0": + '@eslint/config-helpers@0.6.0': dependencies: - "@eslint/core": 1.2.1 + '@eslint/core': 1.2.1 - "@eslint/core@1.2.1": + '@eslint/core@1.2.1': dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 - "@eslint/js@10.0.1(eslint@10.6.0(jiti@2.7.0))": + '@eslint/js@10.0.1(eslint@10.6.0(jiti@2.7.0))': optionalDependencies: eslint: 10.6.0(jiti@2.7.0) - "@eslint/object-schema@3.0.5": {} + '@eslint/object-schema@3.0.5': {} - "@eslint/plugin-kit@0.7.2": + '@eslint/plugin-kit@0.7.2': dependencies: - "@eslint/core": 1.2.1 + '@eslint/core': 1.2.1 levn: 0.4.1 - "@floating-ui/core@1.8.0": + '@floating-ui/core@1.8.0': dependencies: - "@floating-ui/utils": 0.2.12 + '@floating-ui/utils': 0.2.12 - "@floating-ui/dom@1.8.0": + '@floating-ui/dom@1.8.0': dependencies: - "@floating-ui/core": 1.8.0 - "@floating-ui/utils": 0.2.12 + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 - "@floating-ui/react-dom@2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@floating-ui/react-dom@2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@floating-ui/dom": 1.8.0 + '@floating-ui/dom': 1.8.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - "@floating-ui/utils@0.2.12": {} + '@floating-ui/utils@0.2.12': {} - "@formatjs/fast-memoize@3.1.6": {} + '@formatjs/fast-memoize@3.1.6': {} - "@formatjs/icu-messageformat-parser@3.5.12": + '@formatjs/icu-messageformat-parser@3.5.12': dependencies: - "@formatjs/icu-skeleton-parser": 2.1.10 + '@formatjs/icu-skeleton-parser': 2.1.10 - "@formatjs/icu-skeleton-parser@2.1.10": {} + '@formatjs/icu-skeleton-parser@2.1.10': {} - "@formatjs/intl-localematcher@0.8.10": + '@formatjs/intl-localematcher@0.8.10': dependencies: - "@formatjs/fast-memoize": 3.1.6 + '@formatjs/fast-memoize': 3.1.6 - "@hono/node-server@1.19.14(hono@4.12.27)": + '@hono/node-server@1.19.14(hono@4.12.27)': dependencies: hono: 4.12.27 - "@hookform/resolvers@5.4.0(react-hook-form@7.81.0(react@19.2.7))": + '@hookform/resolvers@5.4.0(react-hook-form@7.81.0(react@19.2.7))': dependencies: - "@standard-schema/utils": 0.3.0 + '@standard-schema/utils': 0.3.0 react-hook-form: 7.81.0(react@19.2.7) - "@humanfs/core@0.19.2": + '@humanfs/core@0.19.2': dependencies: - "@humanfs/types": 0.15.0 + '@humanfs/types': 0.15.0 - "@humanfs/node@0.16.8": + '@humanfs/node@0.16.8': dependencies: - "@humanfs/core": 0.19.2 - "@humanfs/types": 0.15.0 - "@humanwhocodes/retry": 0.4.3 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 - "@humanfs/types@0.15.0": {} + '@humanfs/types@0.15.0': {} - "@humanwhocodes/module-importer@1.0.1": {} + '@humanwhocodes/module-importer@1.0.1': {} - "@humanwhocodes/retry@0.4.3": {} + '@humanwhocodes/retry@0.4.3': {} - "@img/colour@1.1.0": + '@img/colour@1.1.0': optional: true - "@img/sharp-darwin-arm64@0.34.5": + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-darwin-arm64": 1.2.4 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - "@img/sharp-darwin-x64@0.34.5": + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-darwin-x64": 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - "@img/sharp-libvips-darwin-arm64@1.2.4": + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - "@img/sharp-libvips-darwin-x64@1.2.4": + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - "@img/sharp-libvips-linux-arm64@1.2.4": + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - "@img/sharp-libvips-linux-arm@1.2.4": + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - "@img/sharp-libvips-linux-ppc64@1.2.4": + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - "@img/sharp-libvips-linux-riscv64@1.2.4": + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - "@img/sharp-libvips-linux-s390x@1.2.4": + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - "@img/sharp-libvips-linux-x64@1.2.4": + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - "@img/sharp-libvips-linuxmusl-x64@1.2.4": + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - "@img/sharp-linux-arm64@0.34.5": + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-arm64": 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - "@img/sharp-linux-arm@0.34.5": + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-arm": 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - "@img/sharp-linux-ppc64@0.34.5": + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-ppc64": 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - "@img/sharp-linux-riscv64@0.34.5": + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-riscv64": 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - "@img/sharp-linux-s390x@0.34.5": + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-s390x": 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - "@img/sharp-linux-x64@0.34.5": + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-x64": 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - "@img/sharp-linuxmusl-arm64@0.34.5": + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - "@img/sharp-linuxmusl-x64@0.34.5": + '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - "@img/sharp-wasm32@0.34.5": + '@img/sharp-wasm32@0.34.5': dependencies: - "@emnapi/runtime": 1.11.1 + '@emnapi/runtime': 1.11.1 optional: true - "@img/sharp-win32-arm64@0.34.5": + '@img/sharp-win32-arm64@0.34.5': optional: true - "@img/sharp-win32-ia32@0.34.5": + '@img/sharp-win32-ia32@0.34.5': optional: true - "@img/sharp-win32-x64@0.34.5": + '@img/sharp-win32-x64@0.34.5': optional: true - "@ioredis/commands@1.10.0": {} + '@ioredis/commands@1.10.0': {} - "@jridgewell/gen-mapping@0.3.13": + '@jridgewell/gen-mapping@0.3.13': dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/remapping@2.3.5": + '@jridgewell/remapping@2.3.5': dependencies: - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/resolve-uri@3.1.2": {} + '@jridgewell/resolve-uri@3.1.2': {} - "@jridgewell/sourcemap-codec@1.5.5": {} + '@jridgewell/sourcemap-codec@1.5.5': {} - "@jridgewell/trace-mapping@0.3.31": + '@jridgewell/trace-mapping@0.3.31': dependencies: - "@jridgewell/resolve-uri": 3.1.2 - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 - "@kurkle/color@0.3.4": {} + '@kurkle/color@0.3.4': {} - "@next/env@16.2.10": {} + '@next/env@16.2.10': {} - "@next/eslint-plugin-next@16.2.10": + '@next/eslint-plugin-next@16.2.10': dependencies: fast-glob: 3.3.1 - "@next/swc-darwin-arm64@16.2.10": + '@next/swc-darwin-arm64@16.2.10': optional: true - "@next/swc-darwin-x64@16.2.10": + '@next/swc-darwin-x64@16.2.10': optional: true - "@next/swc-linux-arm64-gnu@16.2.10": + '@next/swc-linux-arm64-gnu@16.2.10': optional: true - "@next/swc-linux-arm64-musl@16.2.10": + '@next/swc-linux-arm64-musl@16.2.10': optional: true - "@next/swc-linux-x64-gnu@16.2.10": + '@next/swc-linux-x64-gnu@16.2.10': optional: true - "@next/swc-linux-x64-musl@16.2.10": + '@next/swc-linux-x64-musl@16.2.10': optional: true - "@next/swc-win32-arm64-msvc@16.2.10": + '@next/swc-win32-arm64-msvc@16.2.10': optional: true - "@next/swc-win32-x64-msvc@16.2.10": + '@next/swc-win32-x64-msvc@16.2.10': optional: true - "@nodelib/fs.scandir@2.1.5": + '@nodelib/fs.scandir@2.1.5': dependencies: - "@nodelib/fs.stat": 2.0.5 + '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - "@nodelib/fs.stat@2.0.5": {} + '@nodelib/fs.stat@2.0.5': {} - "@nodelib/fs.walk@1.2.8": + '@nodelib/fs.walk@1.2.8': dependencies: - "@nodelib/fs.scandir": 2.1.5 + '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - "@otplib/core@12.0.1": {} + '@otplib/core@12.0.1': {} - "@otplib/plugin-crypto@12.0.1": + '@otplib/plugin-crypto@12.0.1': dependencies: - "@otplib/core": 12.0.1 + '@otplib/core': 12.0.1 - "@otplib/plugin-thirty-two@12.0.1": + '@otplib/plugin-thirty-two@12.0.1': dependencies: - "@otplib/core": 12.0.1 + '@otplib/core': 12.0.1 thirty-two: 1.0.2 - "@otplib/preset-default@12.0.1": + '@otplib/preset-default@12.0.1': dependencies: - "@otplib/core": 12.0.1 - "@otplib/plugin-crypto": 12.0.1 - "@otplib/plugin-thirty-two": 12.0.1 + '@otplib/core': 12.0.1 + '@otplib/plugin-crypto': 12.0.1 + '@otplib/plugin-thirty-two': 12.0.1 - "@otplib/preset-v11@12.0.1": + '@otplib/preset-v11@12.0.1': dependencies: - "@otplib/core": 12.0.1 - "@otplib/plugin-crypto": 12.0.1 - "@otplib/plugin-thirty-two": 12.0.1 + '@otplib/core': 12.0.1 + '@otplib/plugin-crypto': 12.0.1 + '@otplib/plugin-thirty-two': 12.0.1 - "@panva/hkdf@1.2.1": {} + '@panva/hkdf@1.2.1': {} - "@parcel/watcher-android-arm64@2.5.6": + '@parcel/watcher-android-arm64@2.5.6': optional: true - "@parcel/watcher-darwin-arm64@2.5.6": + '@parcel/watcher-darwin-arm64@2.5.6': optional: true - "@parcel/watcher-darwin-x64@2.5.6": + '@parcel/watcher-darwin-x64@2.5.6': optional: true - "@parcel/watcher-freebsd-x64@2.5.6": + '@parcel/watcher-freebsd-x64@2.5.6': optional: true - "@parcel/watcher-linux-arm-glibc@2.5.6": + '@parcel/watcher-linux-arm-glibc@2.5.6': optional: true - "@parcel/watcher-linux-arm-musl@2.5.6": + '@parcel/watcher-linux-arm-musl@2.5.6': optional: true - "@parcel/watcher-linux-arm64-glibc@2.5.6": + '@parcel/watcher-linux-arm64-glibc@2.5.6': optional: true - "@parcel/watcher-linux-arm64-musl@2.5.6": + '@parcel/watcher-linux-arm64-musl@2.5.6': optional: true - "@parcel/watcher-linux-x64-glibc@2.5.6": + '@parcel/watcher-linux-x64-glibc@2.5.6': optional: true - "@parcel/watcher-linux-x64-musl@2.5.6": + '@parcel/watcher-linux-x64-musl@2.5.6': optional: true - "@parcel/watcher-win32-arm64@2.5.6": + '@parcel/watcher-win32-arm64@2.5.6': optional: true - "@parcel/watcher-win32-ia32@2.5.6": + '@parcel/watcher-win32-ia32@2.5.6': optional: true - "@parcel/watcher-win32-x64@2.5.6": + '@parcel/watcher-win32-x64@2.5.6': optional: true - "@parcel/watcher@2.5.6": + '@parcel/watcher@2.5.6': dependencies: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 picomatch: 4.0.4 optionalDependencies: - "@parcel/watcher-android-arm64": 2.5.6 - "@parcel/watcher-darwin-arm64": 2.5.6 - "@parcel/watcher-darwin-x64": 2.5.6 - "@parcel/watcher-freebsd-x64": 2.5.6 - "@parcel/watcher-linux-arm-glibc": 2.5.6 - "@parcel/watcher-linux-arm-musl": 2.5.6 - "@parcel/watcher-linux-arm64-glibc": 2.5.6 - "@parcel/watcher-linux-arm64-musl": 2.5.6 - "@parcel/watcher-linux-x64-glibc": 2.5.6 - "@parcel/watcher-linux-x64-musl": 2.5.6 - "@parcel/watcher-win32-arm64": 2.5.6 - "@parcel/watcher-win32-ia32": 2.5.6 - "@parcel/watcher-win32-x64": 2.5.6 + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 - "@petamoriken/float16@3.9.3": {} + '@petamoriken/float16@3.9.3': {} - "@prisma/adapter-mariadb@7.8.0": + '@prisma/adapter-mariadb@7.8.0': dependencies: - "@prisma/driver-adapter-utils": 7.8.0 + '@prisma/driver-adapter-utils': 7.8.0 mariadb: 3.4.5 - "@prisma/client-runtime-utils@7.8.0": {} + '@prisma/client-runtime-utils@7.8.0': {} - "@prisma/client@7.8.0(prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3))(typescript@5.9.3)": + '@prisma/client@7.8.0(prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3))(typescript@5.9.3)': dependencies: - "@prisma/client-runtime-utils": 7.8.0 + '@prisma/client-runtime-utils': 7.8.0 optionalDependencies: prisma: 7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3) typescript: 5.9.3 - "@prisma/config@7.8.0": + '@prisma/config@7.8.0': dependencies: c12: 3.3.4 deepmerge-ts: 7.1.5 @@ -7935,19 +5457,19 @@ snapshots: transitivePeerDependencies: - magicast - "@prisma/debug@7.2.0": {} + '@prisma/debug@7.2.0': {} - "@prisma/debug@7.8.0": {} + '@prisma/debug@7.8.0': {} - "@prisma/dev@0.24.3(typescript@5.9.3)": + '@prisma/dev@0.24.3(typescript@5.9.3)': dependencies: - "@electric-sql/pglite": 0.4.1 - "@electric-sql/pglite-socket": 0.1.1(@electric-sql/pglite@0.4.1) - "@electric-sql/pglite-tools": 0.3.1(@electric-sql/pglite@0.4.1) - "@hono/node-server": 1.19.14(hono@4.12.27) - "@prisma/get-platform": 7.2.0 - "@prisma/query-plan-executor": 7.2.0 - "@prisma/streams-local": 0.1.2 + '@electric-sql/pglite': 0.4.1 + '@electric-sql/pglite-socket': 0.1.1(@electric-sql/pglite@0.4.1) + '@electric-sql/pglite-tools': 0.3.1(@electric-sql/pglite@0.4.1) + '@hono/node-server': 1.19.14(hono@4.12.27) + '@prisma/get-platform': 7.2.0 + '@prisma/query-plan-executor': 7.2.0 + '@prisma/streams-local': 0.1.2 foreground-child: 3.3.1 get-port-please: 3.2.0 hono: 4.12.27 @@ -7961,1009 +5483,1009 @@ snapshots: transitivePeerDependencies: - typescript - "@prisma/driver-adapter-utils@7.8.0": + '@prisma/driver-adapter-utils@7.8.0': dependencies: - "@prisma/debug": 7.8.0 + '@prisma/debug': 7.8.0 - "@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a": {} + '@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a': {} - "@prisma/engines@7.8.0": + '@prisma/engines@7.8.0': dependencies: - "@prisma/debug": 7.8.0 - "@prisma/engines-version": 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a - "@prisma/fetch-engine": 7.8.0 - "@prisma/get-platform": 7.8.0 + '@prisma/debug': 7.8.0 + '@prisma/engines-version': 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a + '@prisma/fetch-engine': 7.8.0 + '@prisma/get-platform': 7.8.0 - "@prisma/fetch-engine@7.8.0": + '@prisma/fetch-engine@7.8.0': dependencies: - "@prisma/debug": 7.8.0 - "@prisma/engines-version": 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a - "@prisma/get-platform": 7.8.0 + '@prisma/debug': 7.8.0 + '@prisma/engines-version': 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a + '@prisma/get-platform': 7.8.0 - "@prisma/get-platform@7.2.0": + '@prisma/get-platform@7.2.0': dependencies: - "@prisma/debug": 7.2.0 + '@prisma/debug': 7.2.0 - "@prisma/get-platform@7.8.0": + '@prisma/get-platform@7.8.0': dependencies: - "@prisma/debug": 7.8.0 + '@prisma/debug': 7.8.0 - "@prisma/query-plan-executor@7.2.0": {} + '@prisma/query-plan-executor@7.2.0': {} - "@prisma/streams-local@0.1.2": + '@prisma/streams-local@0.1.2': dependencies: ajv: 8.20.0 better-result: 2.9.2 env-paths: 3.0.0 proper-lockfile: 4.1.2 - "@prisma/studio-core@0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@prisma/studio-core@0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-toggle": 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@types/react": 19.2.17 + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@types/react': 19.2.17 chart.js: 4.5.1 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: - - "@types/react-dom" + - '@types/react-dom' - "@radix-ui/number@1.1.2": {} + '@radix-ui/number@1.1.2': {} - "@radix-ui/primitive@1.1.3": {} + '@radix-ui/primitive@1.1.3': {} - "@radix-ui/primitive@1.1.5": {} + '@radix-ui/primitive@1.1.5': {} - "@radix-ui/react-accessible-icon@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-accessible-icon@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-accordion@1.2.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-accordion@1.2.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collapsible": 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collapsible': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-alert-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-alert-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dialog": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-arrow@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-arrow@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-aspect-ratio@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-aspect-ratio@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-avatar@1.2.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-avatar@1.2.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-checkbox@1.3.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-checkbox@1.3.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-collapsible@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-collapsible@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-collection@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-collection@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-compose-refs@1.1.3(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-compose-refs@1.1.3(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-context-menu@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-context-menu@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-context@1.2.0(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-context@1.2.0(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) aria-hidden: 1.2.6 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-direction@1.1.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-direction@1.1.2(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-dismissable-layer@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-dismissable-layer@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-dropdown-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-dropdown-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-focus-guards@1.1.4(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-focus-guards@1.1.4(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-focus-scope@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-focus-scope@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-form@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-form@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-label": 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-label': 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-hover-card@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-hover-card@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-id@1.1.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-id@1.1.2(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-label@2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-label@2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) aria-hidden: 1.2.6 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-menubar@1.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-menubar@1.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-navigation-menu@1.2.18(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-navigation-menu@1.2.18(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-one-time-password-field@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-one-time-password-field@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/number": 1.1.2 - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/number': 1.1.2 + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-password-toggle-field@0.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-password-toggle-field@0.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-popover@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-popover@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) aria-hidden: 1.2.6 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-popper@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-popper@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@floating-ui/react-dom": 2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-arrow": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-rect": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/rect": 1.1.2 + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-arrow': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-rect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/rect': 1.1.2 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-portal@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-portal@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-presence@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-presence@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-primitive@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-primitive@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-progress@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-progress@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-radio-group@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-radio-group@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-roving-focus@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-roving-focus@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-scroll-area@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-scroll-area@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/number": 1.1.2 - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/number': 1.1.2 + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-select@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-select@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/number": 1.1.2 - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/number': 1.1.2 + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) aria-hidden: 1.2.6 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-separator@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-separator@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-slider@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-slider@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/number": 1.1.2 - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/number': 1.1.2 + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-slot@1.2.3(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-slot@1.2.3(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-slot@1.3.0(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-slot@1.3.0(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-switch@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-switch@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-tabs@1.1.17(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-tabs@1.1.17(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-toast@1.2.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-toast@1.2.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-toggle-group@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-toggle-group@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-toggle": 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-toggle': 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-toggle@1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-toggle@1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-toolbar@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-toolbar@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-separator": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-toggle-group": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-separator': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-toggle-group': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-tooltip@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-tooltip@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/react-use-callback-ref@1.1.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-callback-ref@1.1.2(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-use-effect-event": 0.0.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-controllable-state@1.2.3(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-controllable-state@1.2.3(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-effect-event@0.0.3(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-effect-event@0.0.3(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-escape-keydown@1.1.3(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-escape-keydown@1.1.3(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-is-hydrated@0.1.1(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-is-hydrated@0.1.1(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-layout-effect@1.1.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-layout-effect@1.1.2(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-previous@1.1.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-previous@1.1.2(@types/react@19.2.17)(react@19.2.7)': dependencies: react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-rect@1.1.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-rect@1.1.2(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/rect": 1.1.2 + '@radix-ui/rect': 1.1.2 react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-use-size@1.1.2(@types/react@19.2.17)(react@19.2.7)": + '@radix-ui/react-use-size@1.1.2(@types/react@19.2.17)(react@19.2.7)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@radix-ui/react-visually-hidden@1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@radix-ui/react-visually-hidden@1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - "@radix-ui/rect@1.1.2": {} + '@radix-ui/rect@1.1.2': {} - "@rollup/rollup-android-arm-eabi@4.62.2": + '@rollup/rollup-android-arm-eabi@4.62.2': optional: true - "@rollup/rollup-android-arm64@4.62.2": + '@rollup/rollup-android-arm64@4.62.2': optional: true - "@rollup/rollup-darwin-arm64@4.62.2": + '@rollup/rollup-darwin-arm64@4.62.2': optional: true - "@rollup/rollup-darwin-x64@4.62.2": + '@rollup/rollup-darwin-x64@4.62.2': optional: true - "@rollup/rollup-freebsd-arm64@4.62.2": + '@rollup/rollup-freebsd-arm64@4.62.2': optional: true - "@rollup/rollup-freebsd-x64@4.62.2": + '@rollup/rollup-freebsd-x64@4.62.2': optional: true - "@rollup/rollup-linux-arm-gnueabihf@4.62.2": + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': optional: true - "@rollup/rollup-linux-arm-musleabihf@4.62.2": + '@rollup/rollup-linux-arm-musleabihf@4.62.2': optional: true - "@rollup/rollup-linux-arm64-gnu@4.62.2": + '@rollup/rollup-linux-arm64-gnu@4.62.2': optional: true - "@rollup/rollup-linux-arm64-musl@4.62.2": + '@rollup/rollup-linux-arm64-musl@4.62.2': optional: true - "@rollup/rollup-linux-loong64-gnu@4.62.2": + '@rollup/rollup-linux-loong64-gnu@4.62.2': optional: true - "@rollup/rollup-linux-loong64-musl@4.62.2": + '@rollup/rollup-linux-loong64-musl@4.62.2': optional: true - "@rollup/rollup-linux-ppc64-gnu@4.62.2": + '@rollup/rollup-linux-ppc64-gnu@4.62.2': optional: true - "@rollup/rollup-linux-ppc64-musl@4.62.2": + '@rollup/rollup-linux-ppc64-musl@4.62.2': optional: true - "@rollup/rollup-linux-riscv64-gnu@4.62.2": + '@rollup/rollup-linux-riscv64-gnu@4.62.2': optional: true - "@rollup/rollup-linux-riscv64-musl@4.62.2": + '@rollup/rollup-linux-riscv64-musl@4.62.2': optional: true - "@rollup/rollup-linux-s390x-gnu@4.62.2": + '@rollup/rollup-linux-s390x-gnu@4.62.2': optional: true - "@rollup/rollup-linux-x64-gnu@4.62.2": + '@rollup/rollup-linux-x64-gnu@4.62.2': optional: true - "@rollup/rollup-linux-x64-musl@4.62.2": + '@rollup/rollup-linux-x64-musl@4.62.2': optional: true - "@rollup/rollup-openbsd-x64@4.62.2": + '@rollup/rollup-openbsd-x64@4.62.2': optional: true - "@rollup/rollup-openharmony-arm64@4.62.2": + '@rollup/rollup-openharmony-arm64@4.62.2': optional: true - "@rollup/rollup-win32-arm64-msvc@4.62.2": + '@rollup/rollup-win32-arm64-msvc@4.62.2': optional: true - "@rollup/rollup-win32-ia32-msvc@4.62.2": + '@rollup/rollup-win32-ia32-msvc@4.62.2': optional: true - "@rollup/rollup-win32-x64-gnu@4.62.2": + '@rollup/rollup-win32-x64-gnu@4.62.2': optional: true - "@rollup/rollup-win32-x64-msvc@4.62.2": + '@rollup/rollup-win32-x64-msvc@4.62.2': optional: true - "@schummar/icu-type-parser@1.21.5": {} + '@schummar/icu-type-parser@1.21.5': {} - "@stablelib/base64@1.0.1": {} + '@stablelib/base64@1.0.1': {} - "@standard-schema/spec@1.1.0": {} + '@standard-schema/spec@1.1.0': {} - "@standard-schema/utils@0.3.0": {} + '@standard-schema/utils@0.3.0': {} - "@swc/core-darwin-arm64@1.15.43": + '@swc/core-darwin-arm64@1.15.43': optional: true - "@swc/core-darwin-x64@1.15.43": + '@swc/core-darwin-x64@1.15.43': optional: true - "@swc/core-linux-arm-gnueabihf@1.15.43": + '@swc/core-linux-arm-gnueabihf@1.15.43': optional: true - "@swc/core-linux-arm64-gnu@1.15.43": + '@swc/core-linux-arm64-gnu@1.15.43': optional: true - "@swc/core-linux-arm64-musl@1.15.43": + '@swc/core-linux-arm64-musl@1.15.43': optional: true - "@swc/core-linux-ppc64-gnu@1.15.43": + '@swc/core-linux-ppc64-gnu@1.15.43': optional: true - "@swc/core-linux-s390x-gnu@1.15.43": + '@swc/core-linux-s390x-gnu@1.15.43': optional: true - "@swc/core-linux-x64-gnu@1.15.43": + '@swc/core-linux-x64-gnu@1.15.43': optional: true - "@swc/core-linux-x64-musl@1.15.43": + '@swc/core-linux-x64-musl@1.15.43': optional: true - "@swc/core-win32-arm64-msvc@1.15.43": + '@swc/core-win32-arm64-msvc@1.15.43': optional: true - "@swc/core-win32-ia32-msvc@1.15.43": + '@swc/core-win32-ia32-msvc@1.15.43': optional: true - "@swc/core-win32-x64-msvc@1.15.43": + '@swc/core-win32-x64-msvc@1.15.43': optional: true - "@swc/core@1.15.43": + '@swc/core@1.15.43': dependencies: - "@swc/counter": 0.1.3 - "@swc/types": 0.1.27 + '@swc/counter': 0.1.3 + '@swc/types': 0.1.27 optionalDependencies: - "@swc/core-darwin-arm64": 1.15.43 - "@swc/core-darwin-x64": 1.15.43 - "@swc/core-linux-arm-gnueabihf": 1.15.43 - "@swc/core-linux-arm64-gnu": 1.15.43 - "@swc/core-linux-arm64-musl": 1.15.43 - "@swc/core-linux-ppc64-gnu": 1.15.43 - "@swc/core-linux-s390x-gnu": 1.15.43 - "@swc/core-linux-x64-gnu": 1.15.43 - "@swc/core-linux-x64-musl": 1.15.43 - "@swc/core-win32-arm64-msvc": 1.15.43 - "@swc/core-win32-ia32-msvc": 1.15.43 - "@swc/core-win32-x64-msvc": 1.15.43 + '@swc/core-darwin-arm64': 1.15.43 + '@swc/core-darwin-x64': 1.15.43 + '@swc/core-linux-arm-gnueabihf': 1.15.43 + '@swc/core-linux-arm64-gnu': 1.15.43 + '@swc/core-linux-arm64-musl': 1.15.43 + '@swc/core-linux-ppc64-gnu': 1.15.43 + '@swc/core-linux-s390x-gnu': 1.15.43 + '@swc/core-linux-x64-gnu': 1.15.43 + '@swc/core-linux-x64-musl': 1.15.43 + '@swc/core-win32-arm64-msvc': 1.15.43 + '@swc/core-win32-ia32-msvc': 1.15.43 + '@swc/core-win32-x64-msvc': 1.15.43 - "@swc/counter@0.1.3": {} + '@swc/counter@0.1.3': {} - "@swc/helpers@0.5.15": + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 - "@swc/types@0.1.27": + '@swc/types@0.1.27': dependencies: - "@swc/counter": 0.1.3 + '@swc/counter': 0.1.3 - "@tailwindcss/forms@0.5.11(tailwindcss@4.3.2)": + '@tailwindcss/forms@0.5.11(tailwindcss@4.3.2)': dependencies: mini-svg-data-uri: 1.4.4 tailwindcss: 4.3.2 - "@tailwindcss/node@4.3.2": + '@tailwindcss/node@4.3.2': dependencies: - "@jridgewell/remapping": 2.3.5 + '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.21.6 jiti: 2.7.0 lightningcss: 1.32.0 @@ -8971,131 +6493,131 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.3.2 - "@tailwindcss/oxide-android-arm64@4.3.2": + '@tailwindcss/oxide-android-arm64@4.3.2': optional: true - "@tailwindcss/oxide-darwin-arm64@4.3.2": + '@tailwindcss/oxide-darwin-arm64@4.3.2': optional: true - "@tailwindcss/oxide-darwin-x64@4.3.2": + '@tailwindcss/oxide-darwin-x64@4.3.2': optional: true - "@tailwindcss/oxide-freebsd-x64@4.3.2": + '@tailwindcss/oxide-freebsd-x64@4.3.2': optional: true - "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2": + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': optional: true - "@tailwindcss/oxide-linux-arm64-gnu@4.3.2": + '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': optional: true - "@tailwindcss/oxide-linux-arm64-musl@4.3.2": + '@tailwindcss/oxide-linux-arm64-musl@4.3.2': optional: true - "@tailwindcss/oxide-linux-x64-gnu@4.3.2": + '@tailwindcss/oxide-linux-x64-gnu@4.3.2': optional: true - "@tailwindcss/oxide-linux-x64-musl@4.3.2": + '@tailwindcss/oxide-linux-x64-musl@4.3.2': optional: true - "@tailwindcss/oxide-wasm32-wasi@4.3.2": + '@tailwindcss/oxide-wasm32-wasi@4.3.2': optional: true - "@tailwindcss/oxide-win32-arm64-msvc@4.3.2": + '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': optional: true - "@tailwindcss/oxide-win32-x64-msvc@4.3.2": + '@tailwindcss/oxide-win32-x64-msvc@4.3.2': optional: true - "@tailwindcss/oxide@4.3.2": + '@tailwindcss/oxide@4.3.2': optionalDependencies: - "@tailwindcss/oxide-android-arm64": 4.3.2 - "@tailwindcss/oxide-darwin-arm64": 4.3.2 - "@tailwindcss/oxide-darwin-x64": 4.3.2 - "@tailwindcss/oxide-freebsd-x64": 4.3.2 - "@tailwindcss/oxide-linux-arm-gnueabihf": 4.3.2 - "@tailwindcss/oxide-linux-arm64-gnu": 4.3.2 - "@tailwindcss/oxide-linux-arm64-musl": 4.3.2 - "@tailwindcss/oxide-linux-x64-gnu": 4.3.2 - "@tailwindcss/oxide-linux-x64-musl": 4.3.2 - "@tailwindcss/oxide-wasm32-wasi": 4.3.2 - "@tailwindcss/oxide-win32-arm64-msvc": 4.3.2 - "@tailwindcss/oxide-win32-x64-msvc": 4.3.2 + '@tailwindcss/oxide-android-arm64': 4.3.2 + '@tailwindcss/oxide-darwin-arm64': 4.3.2 + '@tailwindcss/oxide-darwin-x64': 4.3.2 + '@tailwindcss/oxide-freebsd-x64': 4.3.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.2 + '@tailwindcss/oxide-linux-x64-musl': 4.3.2 + '@tailwindcss/oxide-wasm32-wasi': 4.3.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.2 - "@tailwindcss/postcss@4.3.2": + '@tailwindcss/postcss@4.3.2': dependencies: - "@alloc/quick-lru": 5.2.0 - "@tailwindcss/node": 4.3.2 - "@tailwindcss/oxide": 4.3.2 + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.3.2 + '@tailwindcss/oxide': 4.3.2 postcss: 8.5.16 tailwindcss: 4.3.2 - "@tailwindcss/typography@0.5.20(tailwindcss@4.3.2)": + '@tailwindcss/typography@0.5.20(tailwindcss@4.3.2)': dependencies: postcss-selector-parser: 6.0.10 tailwindcss: 4.3.2 - "@tanstack/react-virtual@3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": + '@tanstack/react-virtual@3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - "@tanstack/virtual-core": 3.17.3 + '@tanstack/virtual-core': 3.17.3 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - "@tanstack/virtual-core@3.17.3": {} + '@tanstack/virtual-core@3.17.3': {} - "@tokenizer/inflate@0.4.1": + '@tokenizer/inflate@0.4.1': dependencies: debug: 4.4.3 token-types: 6.1.2 transitivePeerDependencies: - supports-color - "@tokenizer/token@0.3.0": {} + '@tokenizer/token@0.3.0': {} - "@types/esrecurse@4.3.1": {} + '@types/esrecurse@4.3.1': {} - "@types/estree@1.0.9": {} + '@types/estree@1.0.9': {} - "@types/geojson@7946.0.16": {} + '@types/geojson@7946.0.16': {} - "@types/jpeg-js@0.3.7": + '@types/jpeg-js@0.3.7': dependencies: jpeg-js: 0.4.4 - "@types/json-schema@7.0.15": {} + '@types/json-schema@7.0.15': {} - "@types/node@22.20.0": + '@types/node@22.20.0': dependencies: undici-types: 6.21.0 - "@types/node@24.13.2": + '@types/node@24.13.2': dependencies: undici-types: 7.18.2 - "@types/nodemailer@6.4.24": + '@types/nodemailer@6.4.24': dependencies: - "@types/node": 22.20.0 + '@types/node': 22.20.0 - "@types/react-dom@19.2.3(@types/react@19.2.17)": + '@types/react-dom@19.2.3(@types/react@19.2.17)': dependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 - "@types/react@19.2.17": + '@types/react@19.2.17': dependencies: csstype: 3.2.3 - "@types/sanitize-html@2.16.1": + '@types/sanitize-html@2.16.1': dependencies: htmlparser2: 10.1.0 - "@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)": + '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - "@typescript-eslint/scope-manager": 8.63.0 - "@typescript-eslint/type-utils": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - "@typescript-eslint/utils": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.63.0 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/type-utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.63.0 eslint: 10.6.0(jiti@2.7.0) ignore: 7.0.6 natural-compare: 1.4.0 @@ -9104,41 +6626,41 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)": + '@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - "@typescript-eslint/scope-manager": 8.63.0 - "@typescript-eslint/types": 8.63.0 - "@typescript-eslint/typescript-estree": 8.63.0(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.63.0 + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.63.0 debug: 4.4.3 eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.63.0(typescript@5.9.3)": + '@typescript-eslint/project-service@8.63.0(typescript@5.9.3)': dependencies: - "@typescript-eslint/tsconfig-utils": 8.63.0(typescript@5.9.3) - "@typescript-eslint/types": 8.63.0 + '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) + '@typescript-eslint/types': 8.63.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/scope-manager@8.63.0": + '@typescript-eslint/scope-manager@8.63.0': dependencies: - "@typescript-eslint/types": 8.63.0 - "@typescript-eslint/visitor-keys": 8.63.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/visitor-keys': 8.63.0 - "@typescript-eslint/tsconfig-utils@8.63.0(typescript@5.9.3)": + '@typescript-eslint/tsconfig-utils@8.63.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - "@typescript-eslint/type-utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)": + '@typescript-eslint/type-utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - "@typescript-eslint/types": 8.63.0 - "@typescript-eslint/typescript-estree": 8.63.0(typescript@5.9.3) - "@typescript-eslint/utils": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3 eslint: 10.6.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -9146,14 +6668,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/types@8.63.0": {} + '@typescript-eslint/types@8.63.0': {} - "@typescript-eslint/typescript-estree@8.63.0(typescript@5.9.3)": + '@typescript-eslint/typescript-estree@8.63.0(typescript@5.9.3)': dependencies: - "@typescript-eslint/project-service": 8.63.0(typescript@5.9.3) - "@typescript-eslint/tsconfig-utils": 8.63.0(typescript@5.9.3) - "@typescript-eslint/types": 8.63.0 - "@typescript-eslint/visitor-keys": 8.63.0 + '@typescript-eslint/project-service': 8.63.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/visitor-keys': 8.63.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 @@ -9163,67 +6685,67 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)": + '@typescript-eslint/utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@10.6.0(jiti@2.7.0)) - "@typescript-eslint/scope-manager": 8.63.0 - "@typescript-eslint/types": 8.63.0 - "@typescript-eslint/typescript-estree": 8.63.0(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/visitor-keys@8.63.0": + '@typescript-eslint/visitor-keys@8.63.0': dependencies: - "@typescript-eslint/types": 8.63.0 + '@typescript-eslint/types': 8.63.0 eslint-visitor-keys: 5.0.1 - "@vitest/expect@2.1.9": + '@vitest/expect@2.1.9': dependencies: - "@vitest/spy": 2.1.9 - "@vitest/utils": 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 chai: 5.3.3 tinyrainbow: 1.2.0 - "@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0))": + '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0))': dependencies: - "@vitest/spy": 2.1.9 + '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 5.4.21(@types/node@22.20.0)(lightningcss@1.32.0) - "@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.0))": + '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.0))': dependencies: - "@vitest/spy": 2.1.9 + '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 5.4.21(@types/node@22.20.0) - "@vitest/pretty-format@2.1.9": + '@vitest/pretty-format@2.1.9': dependencies: tinyrainbow: 1.2.0 - "@vitest/runner@2.1.9": + '@vitest/runner@2.1.9': dependencies: - "@vitest/utils": 2.1.9 + '@vitest/utils': 2.1.9 pathe: 1.1.2 - "@vitest/snapshot@2.1.9": + '@vitest/snapshot@2.1.9': dependencies: - "@vitest/pretty-format": 2.1.9 + '@vitest/pretty-format': 2.1.9 magic-string: 0.30.21 pathe: 1.1.2 - "@vitest/spy@2.1.9": + '@vitest/spy@2.1.9': dependencies: tinyspy: 3.0.2 - "@vitest/utils@2.1.9": + '@vitest/utils@2.1.9': dependencies: - "@vitest/pretty-format": 2.1.9 + '@vitest/pretty-format': 2.1.9 loupe: 3.2.1 tinyrainbow: 1.2.0 @@ -9392,7 +6914,7 @@ snapshots: chart.js@4.5.1: dependencies: - "@kurkle/color": 0.3.4 + '@kurkle/color': 0.3.4 check-error@2.1.3: {} @@ -9412,15 +6934,15 @@ snapshots: cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dialog": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: - - "@types/react" - - "@types/react-dom" + - '@types/react' + - '@types/react-dom' concat-map@0.0.1: {} @@ -9524,8 +7046,8 @@ snapshots: drizzle-kit@0.30.6: dependencies: - "@drizzle-team/brocli": 0.10.2 - "@esbuild-kit/esm-loader": 2.6.5 + '@drizzle-team/brocli': 0.10.2 + '@esbuild-kit/esm-loader': 2.6.5 esbuild: 0.19.12 esbuild-register: 3.6.0(esbuild@0.19.12) gel: 2.2.0 @@ -9544,7 +7066,7 @@ snapshots: effect@3.20.0: dependencies: - "@standard-schema/spec": 1.1.0 + '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 electron-to-chromium@1.5.389: {} @@ -9667,109 +7189,109 @@ snapshots: esbuild@0.18.20: optionalDependencies: - "@esbuild/android-arm": 0.18.20 - "@esbuild/android-arm64": 0.18.20 - "@esbuild/android-x64": 0.18.20 - "@esbuild/darwin-arm64": 0.18.20 - "@esbuild/darwin-x64": 0.18.20 - "@esbuild/freebsd-arm64": 0.18.20 - "@esbuild/freebsd-x64": 0.18.20 - "@esbuild/linux-arm": 0.18.20 - "@esbuild/linux-arm64": 0.18.20 - "@esbuild/linux-ia32": 0.18.20 - "@esbuild/linux-loong64": 0.18.20 - "@esbuild/linux-mips64el": 0.18.20 - "@esbuild/linux-ppc64": 0.18.20 - "@esbuild/linux-riscv64": 0.18.20 - "@esbuild/linux-s390x": 0.18.20 - "@esbuild/linux-x64": 0.18.20 - "@esbuild/netbsd-x64": 0.18.20 - "@esbuild/openbsd-x64": 0.18.20 - "@esbuild/sunos-x64": 0.18.20 - "@esbuild/win32-arm64": 0.18.20 - "@esbuild/win32-ia32": 0.18.20 - "@esbuild/win32-x64": 0.18.20 + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 esbuild@0.19.12: optionalDependencies: - "@esbuild/aix-ppc64": 0.19.12 - "@esbuild/android-arm": 0.19.12 - "@esbuild/android-arm64": 0.19.12 - "@esbuild/android-x64": 0.19.12 - "@esbuild/darwin-arm64": 0.19.12 - "@esbuild/darwin-x64": 0.19.12 - "@esbuild/freebsd-arm64": 0.19.12 - "@esbuild/freebsd-x64": 0.19.12 - "@esbuild/linux-arm": 0.19.12 - "@esbuild/linux-arm64": 0.19.12 - "@esbuild/linux-ia32": 0.19.12 - "@esbuild/linux-loong64": 0.19.12 - "@esbuild/linux-mips64el": 0.19.12 - "@esbuild/linux-ppc64": 0.19.12 - "@esbuild/linux-riscv64": 0.19.12 - "@esbuild/linux-s390x": 0.19.12 - "@esbuild/linux-x64": 0.19.12 - "@esbuild/netbsd-x64": 0.19.12 - "@esbuild/openbsd-x64": 0.19.12 - "@esbuild/sunos-x64": 0.19.12 - "@esbuild/win32-arm64": 0.19.12 - "@esbuild/win32-ia32": 0.19.12 - "@esbuild/win32-x64": 0.19.12 + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 esbuild@0.21.5: optionalDependencies: - "@esbuild/aix-ppc64": 0.21.5 - "@esbuild/android-arm": 0.21.5 - "@esbuild/android-arm64": 0.21.5 - "@esbuild/android-x64": 0.21.5 - "@esbuild/darwin-arm64": 0.21.5 - "@esbuild/darwin-x64": 0.21.5 - "@esbuild/freebsd-arm64": 0.21.5 - "@esbuild/freebsd-x64": 0.21.5 - "@esbuild/linux-arm": 0.21.5 - "@esbuild/linux-arm64": 0.21.5 - "@esbuild/linux-ia32": 0.21.5 - "@esbuild/linux-loong64": 0.21.5 - "@esbuild/linux-mips64el": 0.21.5 - "@esbuild/linux-ppc64": 0.21.5 - "@esbuild/linux-riscv64": 0.21.5 - "@esbuild/linux-s390x": 0.21.5 - "@esbuild/linux-x64": 0.21.5 - "@esbuild/netbsd-x64": 0.21.5 - "@esbuild/openbsd-x64": 0.21.5 - "@esbuild/sunos-x64": 0.21.5 - "@esbuild/win32-arm64": 0.21.5 - "@esbuild/win32-ia32": 0.21.5 - "@esbuild/win32-x64": 0.21.5 + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 esbuild@0.28.1: optionalDependencies: - "@esbuild/aix-ppc64": 0.28.1 - "@esbuild/android-arm": 0.28.1 - "@esbuild/android-arm64": 0.28.1 - "@esbuild/android-x64": 0.28.1 - "@esbuild/darwin-arm64": 0.28.1 - "@esbuild/darwin-x64": 0.28.1 - "@esbuild/freebsd-arm64": 0.28.1 - "@esbuild/freebsd-x64": 0.28.1 - "@esbuild/linux-arm": 0.28.1 - "@esbuild/linux-arm64": 0.28.1 - "@esbuild/linux-ia32": 0.28.1 - "@esbuild/linux-loong64": 0.28.1 - "@esbuild/linux-mips64el": 0.28.1 - "@esbuild/linux-ppc64": 0.28.1 - "@esbuild/linux-riscv64": 0.28.1 - "@esbuild/linux-s390x": 0.28.1 - "@esbuild/linux-x64": 0.28.1 - "@esbuild/netbsd-arm64": 0.28.1 - "@esbuild/netbsd-x64": 0.28.1 - "@esbuild/openbsd-arm64": 0.28.1 - "@esbuild/openbsd-x64": 0.28.1 - "@esbuild/openharmony-arm64": 0.28.1 - "@esbuild/sunos-x64": 0.28.1 - "@esbuild/win32-arm64": 0.28.1 - "@esbuild/win32-ia32": 0.28.1 - "@esbuild/win32-x64": 0.28.1 + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 escalade@3.2.0: {} @@ -9800,8 +7322,8 @@ snapshots: eslint-plugin-react-hooks@7.1.1(eslint@10.6.0(jiti@2.7.0)): dependencies: - "@babel/core": 7.29.7 - "@babel/parser": 7.29.7 + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 eslint: 10.6.0(jiti@2.7.0) hermes-parser: 0.25.1 zod: 3.25.76 @@ -9815,8 +7337,8 @@ snapshots: eslint-scope@9.1.2: dependencies: - "@types/esrecurse": 4.3.1 - "@types/estree": 1.0.9 + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -9826,16 +7348,16 @@ snapshots: eslint@10.6.0(jiti@2.7.0): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@10.6.0(jiti@2.7.0)) - "@eslint-community/regexpp": 4.12.2 - "@eslint/config-array": 0.23.5 - "@eslint/config-helpers": 0.6.0 - "@eslint/core": 1.2.1 - "@eslint/plugin-kit": 0.7.2 - "@humanfs/node": 0.16.8 - "@humanwhocodes/module-importer": 1.0.1 - "@humanwhocodes/retry": 0.4.3 - "@types/estree": 1.0.9 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 @@ -9879,7 +7401,7 @@ snapshots: estree-walker@3.0.3: dependencies: - "@types/estree": 1.0.9 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -9895,8 +7417,8 @@ snapshots: fast-glob@3.3.1: dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 @@ -9923,7 +7445,7 @@ snapshots: file-type@21.3.4: dependencies: - "@tokenizer/inflate": 0.4.1 + '@tokenizer/inflate': 0.4.1 strtok3: 10.3.5 token-types: 6.1.2 uint8array-extras: 1.5.0 @@ -9976,7 +7498,7 @@ snapshots: gel@2.2.0: dependencies: - "@petamoriken/float16": 3.9.3 + '@petamoriken/float16': 3.9.3 debug: 4.4.3 env-paths: 3.0.0 semver: 7.8.5 @@ -10097,7 +7619,7 @@ snapshots: icu-minify@4.13.1: dependencies: - "@formatjs/icu-messageformat-parser": 3.5.12 + '@formatjs/icu-messageformat-parser': 3.5.12 ieee754@1.2.1: {} @@ -10119,12 +7641,12 @@ snapshots: intl-messageformat@11.2.9: dependencies: - "@formatjs/fast-memoize": 3.1.6 - "@formatjs/icu-messageformat-parser": 3.5.12 + '@formatjs/fast-memoize': 3.1.6 + '@formatjs/icu-messageformat-parser': 3.5.12 ioredis@5.11.1: dependencies: - "@ioredis/commands": 1.10.0 + '@ioredis/commands': 1.10.0 cluster-key-slot: 1.1.1 debug: 4.4.3 denque: 2.1.0 @@ -10384,12 +7906,12 @@ snapshots: magic-string@0.30.21: dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 mariadb@3.4.5: dependencies: - "@types/geojson": 7946.0.16 - "@types/node": 24.13.2 + '@types/geojson': 7946.0.16 + '@types/node': 24.13.2 denque: 2.1.0 iconv-lite: 0.6.3 lru-cache: 10.4.3 @@ -10419,8 +7941,8 @@ snapshots: music-metadata@11.13.0: dependencies: - "@borewit/text-codec": 0.2.2 - "@tokenizer/token": 0.3.0 + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 content-type: 2.0.0 debug: 4.4.3 file-type: 21.3.4 @@ -10446,7 +7968,7 @@ snapshots: mysql2@3.22.5(@types/node@22.20.0): dependencies: - "@types/node": 22.20.0 + '@types/node': 22.20.0 aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 @@ -10458,7 +7980,7 @@ snapshots: mysql2@3.22.6(@types/node@22.20.0): dependencies: - "@types/node": 22.20.0 + '@types/node': 22.20.0 aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 @@ -10480,7 +8002,7 @@ snapshots: next-auth@5.0.0-beta.31(next@16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(nodemailer@9.0.3)(react@19.2.7): dependencies: - "@auth/core": 0.41.2(nodemailer@9.0.3) + '@auth/core': 0.41.2(nodemailer@9.0.3) next: 16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 optionalDependencies: @@ -10490,9 +8012,9 @@ snapshots: next-intl@4.13.1(next@16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)(typescript@5.9.3): dependencies: - "@formatjs/intl-localematcher": 0.8.10 - "@parcel/watcher": 2.5.6 - "@swc/core": 1.15.43 + '@formatjs/intl-localematcher': 0.8.10 + '@parcel/watcher': 2.5.6 + '@swc/core': 1.15.43 icu-minify: 4.13.1 negotiator: 1.0.0 next: 16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -10503,12 +8025,12 @@ snapshots: optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - - "@swc/helpers" + - '@swc/helpers' next@16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - "@next/env": 16.2.10 - "@swc/helpers": 0.5.15 + '@next/env': 16.2.10 + '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.10.40 caniuse-lite: 1.0.30001799 postcss: 8.5.16 @@ -10516,17 +8038,17 @@ snapshots: react-dom: 19.2.7(react@19.2.7) styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.7) optionalDependencies: - "@next/swc-darwin-arm64": 16.2.10 - "@next/swc-darwin-x64": 16.2.10 - "@next/swc-linux-arm64-gnu": 16.2.10 - "@next/swc-linux-arm64-musl": 16.2.10 - "@next/swc-linux-x64-gnu": 16.2.10 - "@next/swc-linux-x64-musl": 16.2.10 - "@next/swc-win32-arm64-msvc": 16.2.10 - "@next/swc-win32-x64-msvc": 16.2.10 + '@next/swc-darwin-arm64': 16.2.10 + '@next/swc-darwin-x64': 16.2.10 + '@next/swc-linux-arm64-gnu': 16.2.10 + '@next/swc-linux-arm64-musl': 16.2.10 + '@next/swc-linux-x64-gnu': 16.2.10 + '@next/swc-linux-x64-musl': 16.2.10 + '@next/swc-win32-arm64-msvc': 16.2.10 + '@next/swc-win32-x64-msvc': 16.2.10 sharp: 0.34.5 transitivePeerDependencies: - - "@babel/core" + - '@babel/core' - babel-plugin-macros node-addon-api@7.1.1: {} @@ -10577,9 +8099,9 @@ snapshots: otplib@12.0.1: dependencies: - "@otplib/core": 12.0.1 - "@otplib/preset-default": 12.0.1 - "@otplib/preset-v11": 12.0.1 + '@otplib/core': 12.0.1 + '@otplib/preset-default': 12.0.1 + '@otplib/preset-v11': 12.0.1 own-keys@1.0.1: dependencies: @@ -10660,17 +8182,17 @@ snapshots: prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3): dependencies: - "@prisma/config": 7.8.0 - "@prisma/dev": 0.24.3(typescript@5.9.3) - "@prisma/engines": 7.8.0 - "@prisma/studio-core": 0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@prisma/config': 7.8.0 + '@prisma/dev': 0.24.3(typescript@5.9.3) + '@prisma/engines': 7.8.0 + '@prisma/studio-core': 0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) mysql2: 3.15.3 postgres: 3.4.7 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - - "@types/react" - - "@types/react-dom" + - '@types/react' + - '@types/react-dom' - magicast - react - react-dom @@ -10691,66 +8213,66 @@ snapshots: radix-ui@1.6.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - "@radix-ui/primitive": 1.1.5 - "@radix-ui/react-accessible-icon": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-accordion": 1.2.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-alert-dialog": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-arrow": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-aspect-ratio": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-avatar": 1.2.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-checkbox": 1.3.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-collapsible": 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-context-menu": 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-dialog": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-dropdown-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-form": 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-hover-card": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-label": 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-menubar": 1.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-navigation-menu": 1.2.18(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-one-time-password-field": 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-password-toggle-field": 0.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-popover": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-progress": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-radio-group": 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-scroll-area": 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-select": 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-separator": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-slider": 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-switch": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-tabs": 1.1.17(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-toast": 1.2.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-toggle": 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-toggle-group": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-toolbar": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-tooltip": 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-escape-keydown": 1.1.3(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) - "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/primitive': 1.1.5 + '@radix-ui/react-accessible-icon': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-accordion': 1.2.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-alert-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-arrow': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-aspect-ratio': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-avatar': 1.2.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-checkbox': 1.3.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-collapsible': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-context-menu': 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-dropdown-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-form': 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-hover-card': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-label': 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-menubar': 1.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-navigation-menu': 1.2.18(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-one-time-password-field': 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-password-toggle-field': 0.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-popover': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-progress': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-radio-group': 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-scroll-area': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-select': 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-separator': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-slider': 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-switch': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-tabs': 1.1.17(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-toast': 1.2.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-toggle': 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-toggle-group': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-toolbar': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-tooltip': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-escape-keydown': 1.1.3(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) + '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 - "@types/react-dom": 19.2.3(@types/react@19.2.17) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) rc9@3.0.1: dependencies: @@ -10772,7 +8294,7 @@ snapshots: react-style-singleton: 2.2.3(@types/react@19.2.17)(react@19.2.7) tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 react-remove-scroll@2.7.2(@types/react@19.2.17)(react@19.2.7): dependencies: @@ -10783,7 +8305,7 @@ snapshots: use-callback-ref: 1.3.3(@types/react@19.2.17)(react@19.2.7) use-sidecar: 1.1.3(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 react-style-singleton@2.2.3(@types/react@19.2.17)(react@19.2.7): dependencies: @@ -10791,7 +8313,7 @@ snapshots: react: 19.2.7 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 react@19.2.7: {} @@ -10852,33 +8374,33 @@ snapshots: rollup@4.62.2: dependencies: - "@types/estree": 1.0.9 + '@types/estree': 1.0.9 optionalDependencies: - "@rollup/rollup-android-arm-eabi": 4.62.2 - "@rollup/rollup-android-arm64": 4.62.2 - "@rollup/rollup-darwin-arm64": 4.62.2 - "@rollup/rollup-darwin-x64": 4.62.2 - "@rollup/rollup-freebsd-arm64": 4.62.2 - "@rollup/rollup-freebsd-x64": 4.62.2 - "@rollup/rollup-linux-arm-gnueabihf": 4.62.2 - "@rollup/rollup-linux-arm-musleabihf": 4.62.2 - "@rollup/rollup-linux-arm64-gnu": 4.62.2 - "@rollup/rollup-linux-arm64-musl": 4.62.2 - "@rollup/rollup-linux-loong64-gnu": 4.62.2 - "@rollup/rollup-linux-loong64-musl": 4.62.2 - "@rollup/rollup-linux-ppc64-gnu": 4.62.2 - "@rollup/rollup-linux-ppc64-musl": 4.62.2 - "@rollup/rollup-linux-riscv64-gnu": 4.62.2 - "@rollup/rollup-linux-riscv64-musl": 4.62.2 - "@rollup/rollup-linux-s390x-gnu": 4.62.2 - "@rollup/rollup-linux-x64-gnu": 4.62.2 - "@rollup/rollup-linux-x64-musl": 4.62.2 - "@rollup/rollup-openbsd-x64": 4.62.2 - "@rollup/rollup-openharmony-arm64": 4.62.2 - "@rollup/rollup-win32-arm64-msvc": 4.62.2 - "@rollup/rollup-win32-ia32-msvc": 4.62.2 - "@rollup/rollup-win32-x64-gnu": 4.62.2 - "@rollup/rollup-win32-x64-msvc": 4.62.2 + '@rollup/rollup-android-arm-eabi': 4.62.2 + '@rollup/rollup-android-arm64': 4.62.2 + '@rollup/rollup-darwin-arm64': 4.62.2 + '@rollup/rollup-darwin-x64': 4.62.2 + '@rollup/rollup-freebsd-arm64': 4.62.2 + '@rollup/rollup-freebsd-x64': 4.62.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 + '@rollup/rollup-linux-arm-musleabihf': 4.62.2 + '@rollup/rollup-linux-arm64-gnu': 4.62.2 + '@rollup/rollup-linux-arm64-musl': 4.62.2 + '@rollup/rollup-linux-loong64-gnu': 4.62.2 + '@rollup/rollup-linux-loong64-musl': 4.62.2 + '@rollup/rollup-linux-ppc64-gnu': 4.62.2 + '@rollup/rollup-linux-ppc64-musl': 4.62.2 + '@rollup/rollup-linux-riscv64-gnu': 4.62.2 + '@rollup/rollup-linux-riscv64-musl': 4.62.2 + '@rollup/rollup-linux-s390x-gnu': 4.62.2 + '@rollup/rollup-linux-x64-gnu': 4.62.2 + '@rollup/rollup-linux-x64-musl': 4.62.2 + '@rollup/rollup-openbsd-x64': 4.62.2 + '@rollup/rollup-openharmony-arm64': 4.62.2 + '@rollup/rollup-win32-arm64-msvc': 4.62.2 + '@rollup/rollup-win32-ia32-msvc': 4.62.2 + '@rollup/rollup-win32-x64-gnu': 4.62.2 + '@rollup/rollup-win32-x64-msvc': 4.62.2 fsevents: 2.3.3 run-parallel@1.2.0: @@ -10956,34 +8478,34 @@ snapshots: sharp@0.34.5: dependencies: - "@img/colour": 1.1.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.8.5 optionalDependencies: - "@img/sharp-darwin-arm64": 0.34.5 - "@img/sharp-darwin-x64": 0.34.5 - "@img/sharp-libvips-darwin-arm64": 1.2.4 - "@img/sharp-libvips-darwin-x64": 1.2.4 - "@img/sharp-libvips-linux-arm": 1.2.4 - "@img/sharp-libvips-linux-arm64": 1.2.4 - "@img/sharp-libvips-linux-ppc64": 1.2.4 - "@img/sharp-libvips-linux-riscv64": 1.2.4 - "@img/sharp-libvips-linux-s390x": 1.2.4 - "@img/sharp-libvips-linux-x64": 1.2.4 - "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 - "@img/sharp-libvips-linuxmusl-x64": 1.2.4 - "@img/sharp-linux-arm": 0.34.5 - "@img/sharp-linux-arm64": 0.34.5 - "@img/sharp-linux-ppc64": 0.34.5 - "@img/sharp-linux-riscv64": 0.34.5 - "@img/sharp-linux-s390x": 0.34.5 - "@img/sharp-linux-x64": 0.34.5 - "@img/sharp-linuxmusl-arm64": 0.34.5 - "@img/sharp-linuxmusl-x64": 0.34.5 - "@img/sharp-wasm32": 0.34.5 - "@img/sharp-win32-arm64": 0.34.5 - "@img/sharp-win32-ia32": 0.34.5 - "@img/sharp-win32-x64": 0.34.5 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 optional: true shebang-command@2.0.0: @@ -11054,7 +8576,7 @@ snapshots: standardwebhooks@1.0.0: dependencies: - "@stablelib/base64": 1.0.1 + '@stablelib/base64': 1.0.1 fast-sha256: 1.3.0 std-env@3.10.0: {} @@ -11100,14 +8622,14 @@ snapshots: strtok3@10.3.5: dependencies: - "@tokenizer/token": 0.3.0 + '@tokenizer/token': 0.3.0 styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.7): dependencies: client-only: 0.0.1 react: 19.2.7 optionalDependencies: - "@babel/core": 7.29.7 + '@babel/core': 7.29.7 tailwind-merge@3.6.0: {} @@ -11138,8 +8660,8 @@ snapshots: token-types@6.1.2: dependencies: - "@borewit/text-codec": 0.2.2 - "@tokenizer/token": 0.3.0 + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 ieee754: 1.2.1 ts-api-utils@2.5.0(typescript@5.9.3): @@ -11193,10 +8715,10 @@ snapshots: typescript-eslint@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3): dependencies: - "@typescript-eslint/eslint-plugin": 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - "@typescript-eslint/parser": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - "@typescript-eslint/typescript-estree": 8.63.0(typescript@5.9.3) - "@typescript-eslint/utils": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: @@ -11232,12 +8754,12 @@ snapshots: react: 19.2.7 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 use-intl@4.13.1(react@19.2.7): dependencies: - "@formatjs/fast-memoize": 3.1.6 - "@schummar/icu-type-parser": 1.21.5 + '@formatjs/fast-memoize': 3.1.6 + '@schummar/icu-type-parser': 1.21.5 icu-minify: 4.13.1 intl-messageformat: 11.2.9 react: 19.2.7 @@ -11248,7 +8770,7 @@ snapshots: react: 19.2.7 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.17 + '@types/react': 19.2.17 util-deprecate@1.0.2: {} @@ -11264,7 +8786,7 @@ snapshots: pathe: 1.1.2 vite: 5.4.21(@types/node@22.20.0) transitivePeerDependencies: - - "@types/node" + - '@types/node' - less - lightningcss - sass @@ -11282,7 +8804,7 @@ snapshots: pathe: 1.1.2 vite: 5.4.21(@types/node@22.20.0)(lightningcss@1.32.0) transitivePeerDependencies: - - "@types/node" + - '@types/node' - less - lightningcss - sass @@ -11298,7 +8820,7 @@ snapshots: postcss: 8.5.15 rollup: 4.62.2 optionalDependencies: - "@types/node": 22.20.0 + '@types/node': 22.20.0 fsevents: 2.3.3 vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0): @@ -11307,19 +8829,19 @@ snapshots: postcss: 8.5.16 rollup: 4.62.2 optionalDependencies: - "@types/node": 22.20.0 + '@types/node': 22.20.0 fsevents: 2.3.3 lightningcss: 1.32.0 vitest@2.1.9(@types/node@22.20.0): dependencies: - "@vitest/expect": 2.1.9 - "@vitest/mocker": 2.1.9(vite@5.4.21(@types/node@22.20.0)) - "@vitest/pretty-format": 2.1.9 - "@vitest/runner": 2.1.9 - "@vitest/snapshot": 2.1.9 - "@vitest/spy": 2.1.9 - "@vitest/utils": 2.1.9 + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.20.0)) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 chai: 5.3.3 debug: 4.4.3 expect-type: 1.4.0 @@ -11334,7 +8856,7 @@ snapshots: vite-node: 2.1.9(@types/node@22.20.0) why-is-node-running: 2.3.0 optionalDependencies: - "@types/node": 22.20.0 + '@types/node': 22.20.0 transitivePeerDependencies: - less - lightningcss @@ -11348,13 +8870,13 @@ snapshots: vitest@2.1.9(@types/node@22.20.0)(lightningcss@1.32.0): dependencies: - "@vitest/expect": 2.1.9 - "@vitest/mocker": 2.1.9(vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0)) - "@vitest/pretty-format": 2.1.9 - "@vitest/runner": 2.1.9 - "@vitest/snapshot": 2.1.9 - "@vitest/spy": 2.1.9 - "@vitest/utils": 2.1.9 + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0)) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 chai: 5.3.3 debug: 4.4.3 expect-type: 1.4.0 @@ -11369,7 +8891,7 @@ snapshots: vite-node: 2.1.9(@types/node@22.20.0)(lightningcss@1.32.0) why-is-node-running: 2.3.0 optionalDependencies: - "@types/node": 22.20.0 + '@types/node': 22.20.0 transitivePeerDependencies: - less - lightningcss diff --git a/scripts/db-url.test.ts b/scripts/db-url.test.ts index 92e4a64a..7c42c31b 100644 --- a/scripts/db-url.test.ts +++ b/scripts/db-url.test.ts @@ -3,9 +3,7 @@ import { mysqlConnectionUrl } from "./db-url"; describe("mysqlConnectionUrl", () => { it("removes Prisma-only pool options before passing the URL to MySQL2", () => { - const result = mysqlConnectionUrl( - "mysql://user:pass@localhost:3306/cms?connection_limit=20&pool_timeout=30&charset=utf8mb4", - ); + const result = mysqlConnectionUrl("mysql://user:pass@localhost:3306/cms?connection_limit=20&pool_timeout=30&charset=utf8mb4"); expect(result).not.toContain("connection_limit"); expect(result).not.toContain("pool_timeout"); expect(result).toContain("charset=utf8mb4"); diff --git a/scripts/sql-statements.ts b/scripts/sql-statements.ts index 98ca1991..223ddb96 100644 --- a/scripts/sql-statements.ts +++ b/scripts/sql-statements.ts @@ -1,5 +1,7 @@ export function splitSqlStatements(sql: string): string[] { - const withoutComments = sql.replace(/\/\*[\s\S]*?\*\//g, "").replace(/^\s*--.*$/gm, ""); + const withoutComments = sql + .replace(/\/\*[\s\S]*?\*\//g, "") + .replace(/^\s*--.*$/gm, ""); return withoutComments .split(";") diff --git a/src/actions/badges.ts b/src/actions/badges.ts index 92598924..3d28e087 100644 --- a/src/actions/badges.ts +++ b/src/actions/badges.ts @@ -19,13 +19,7 @@ export async function updateBadge({ code, name, desc }: { code: string; name: st await prisma.websiteBadges.upsert({ where: { badgeKey: code }, update: { badgeName: name, badgeDescription: desc, updatedAt: new Date() }, - create: { - badgeKey: code, - badgeName: name, - badgeDescription: desc, - createdAt: new Date(), - updatedAt: new Date(), - }, + create: { badgeKey: code, badgeName: name, badgeDescription: desc, createdAt: new Date(), updatedAt: new Date() }, }); revalidatePath("/admin/import/badges"); } diff --git a/src/actions/banners.ts b/src/actions/banners.ts index b324ba5c..2e122afb 100644 --- a/src/actions/banners.ts +++ b/src/actions/banners.ts @@ -1,70 +1,70 @@ -"use server"; +'use server' -import { z } from "zod"; -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; -import { logAudit } from "@/lib/services/audit"; +import { z } from 'zod' +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { logAudit } from '@/lib/services/audit' const bannerSchema = z.object({ title: z.string().min(1).max(255), - subtitle: z.string().max(500).optional().default(""), + subtitle: z.string().max(500).optional().default(''), image: z.string().max(500), - link: z.string().max(500).optional().default(""), - color: z.string().max(20).optional().default(""), + link: z.string().max(500).optional().default(''), + color: z.string().max(20).optional().default(''), isActive: z.coerce.number().int().min(0).max(1).default(1), sortOrder: z.coerce.number().int().min(0).default(0), startDate: z.string().max(50).nullable().optional(), endDate: z.string().max(50).nullable().optional(), -}); +}) export const createBanner = adminAction( { permission: PERMS.BANNERS_EDIT, schema: bannerSchema }, async (ctx) => { - const banner = await prisma.websiteBanner.create({ data: ctx.data }); + const banner = await prisma.websiteBanner.create({ data: ctx.data }) logAudit({ userId: ctx.session.user.id, - action: "banner_create", - target: "WebsiteBanner", + action: 'banner_create', + target: 'WebsiteBanner', targetId: banner.id, after: { title: banner.title }, - }); - return actionOk({ id: banner.id }); + }) + return actionOk({ id: banner.id }) }, -); +) -const updateBannerInput = bannerSchema.partial().extend({ id: z.coerce.number().int().positive() }); +const updateBannerInput = bannerSchema.partial().extend({ id: z.coerce.number().int().positive() }) export const updateBanner = adminAction( { permission: PERMS.BANNERS_EDIT, schema: updateBannerInput }, async (ctx) => { - const { id, ...data } = ctx.data; - const existing = await prisma.websiteBanner.findUnique({ where: { id } }); - if (!existing) throw new ActionError("Banner not found"); - await prisma.websiteBanner.update({ where: { id }, data }); + const { id, ...data } = ctx.data + const existing = await prisma.websiteBanner.findUnique({ where: { id } }) + if (!existing) throw new ActionError('Banner not found') + await prisma.websiteBanner.update({ where: { id }, data }) logAudit({ userId: ctx.session.user.id, - action: "banner_update", - target: "WebsiteBanner", + action: 'banner_update', + target: 'WebsiteBanner', targetId: id, - }); - return actionOk({ id }); + }) + return actionOk({ id }) }, -); +) -const deleteBannerInput = z.object({ id: z.coerce.number().int().positive() }); +const deleteBannerInput = z.object({ id: z.coerce.number().int().positive() }) export const deleteBanner = adminAction( { permission: PERMS.BANNERS_EDIT, schema: deleteBannerInput }, async (ctx) => { - await prisma.websiteBanner.delete({ where: { id: ctx.data.id } }); + await prisma.websiteBanner.delete({ where: { id: ctx.data.id } }) logAudit({ userId: ctx.session.user.id, - action: "banner_delete", - target: "WebsiteBanner", + action: 'banner_delete', + target: 'WebsiteBanner', targetId: ctx.data.id, - }); - return actionOk(); + }) + return actionOk() }, -); +) diff --git a/src/actions/bulk-users.ts b/src/actions/bulk-users.ts index d3402a42..331b343a 100644 --- a/src/actions/bulk-users.ts +++ b/src/actions/bulk-users.ts @@ -7,11 +7,7 @@ import { rcon } from "@/lib/services/rcon"; import { logStaffActivity } from "@/lib/services/staff-activity"; import type { ActionResult } from "@/lib/safe-action-shared"; -export async function bulkUnban({ - userIds, -}: { - userIds: number[]; -}): Promise> { +export async function bulkUnban({ userIds }: { userIds: number[] }): Promise> { const staff = await requireStaff(); const result = await prisma.ban.deleteMany({ where: { userId: { in: userIds } } }); await logStaffActivity({ @@ -23,15 +19,7 @@ export async function bulkUnban({ return { ok: true as const, data: { unbanned: result.count, total: userIds.length } }; } -export async function bulkBan({ - userIds, - reason, - duration, -}: { - userIds: number[]; - reason: string; - duration: number; -}): Promise> { +export async function bulkBan({ userIds, reason, duration }: { userIds: number[]; reason: string; duration: number }): Promise> { const staff = await requireStaff(); const now = Math.floor(Date.now() / 1000); let banned = 0; @@ -65,17 +53,7 @@ export async function bulkBan({ return { ok: true as const, data: { banned } }; } -export async function bulkGiveCurrency({ - userIds, - amount, - type, -}: { - userIds: number[]; - amount: number; - type: "credits" | "pixels" | "points"; -}): Promise< - ActionResult<{ given: number; total: number; failedIds: Array<{ userId: number; reason: string }> }> -> { +export async function bulkGiveCurrency({ userIds, amount, type }: { userIds: number[]; amount: number; type: "credits" | "pixels" | "points" }): Promise }>> { const staff = await requireStaff(); let given = 0; const failedIds: Array<{ userId: number; reason: string }> = []; @@ -115,15 +93,7 @@ export async function bulkGiveCurrency({ return { ok: true as const, data: { given, total: userIds.length, failedIds } }; } -export async function bulkGiveBadge({ - userIds, - badgeCode, -}: { - userIds: number[]; - badgeCode: string; -}): Promise< - ActionResult<{ given: number; total: number; failedIds: Array<{ userId: number; reason: string }> }> -> { +export async function bulkGiveBadge({ userIds, badgeCode }: { userIds: number[]; badgeCode: string }): Promise }>> { const staff = await requireStaff(); let given = 0; const failedIds: Array<{ userId: number; reason: string }> = []; diff --git a/src/actions/catalog-bc.ts b/src/actions/catalog-bc.ts index a458cddc..442f106f 100644 --- a/src/actions/catalog-bc.ts +++ b/src/actions/catalog-bc.ts @@ -33,16 +33,7 @@ export async function deleteBcItem({ id }: { id: number }) { revalidatePath("/admin/catalog/builder-club"); } -export async function updateBcItem({ - id, - ...data -}: { - id: number; - itemIds?: string; - catalogName?: string; - orderNumber?: number; - extradata?: string; -}) { +export async function updateBcItem({ id, ...data }: { id: number; itemIds?: string; catalogName?: string; orderNumber?: number; extradata?: string }) { const staff = await requireStaff(); await prisma.catalogItemsBc.update({ where: { id }, data: data as any }); await logStaffActivity({ @@ -55,16 +46,7 @@ export async function updateBcItem({ revalidatePath("/admin/catalog/builder-club"); } -export async function createBcItem({ - pageId, - ...data -}: { - pageId: number; - itemIds: string; - catalogName: string; - orderNumber: number; - extradata: string; -}) { +export async function createBcItem({ pageId, ...data }: { pageId: number; itemIds: string; catalogName: string; orderNumber: number; extradata: string }) { const staff = await requireStaff(); const created = await prisma.catalogItemsBc.create({ data: { pageId, ...data }, @@ -81,10 +63,7 @@ export async function createBcItem({ export async function toggleBcPage({ id, field }: { id: number; field: "enabled" | "visible" }) { await requireStaff(); - const page = await prisma.catalogPagesBc.findUnique({ - where: { id }, - select: { enabled: true, visible: true }, - }); + const page = await prisma.catalogPagesBc.findUnique({ where: { id }, select: { enabled: true, visible: true } }); if (!page) return; await prisma.catalogPagesBc.update({ where: { id }, diff --git a/src/actions/catalog-items.ts b/src/actions/catalog-items.ts index 71242215..94d6b880 100644 --- a/src/actions/catalog-items.ts +++ b/src/actions/catalog-items.ts @@ -62,11 +62,7 @@ export async function moveCatalogItems({ ids, targetPageId }: { ids: number[]; t return { ok: true as const, data: {} }; } -export async function reorderCatalogItems({ - orders, -}: { - orders: Array<{ id: number; orderNumber: number }>; -}) { +export async function reorderCatalogItems({ orders }: { orders: Array<{ id: number; orderNumber: number }> }) { await requireStaff(); for (const { id, orderNumber } of orders) { await prisma.catalogItems.update({ where: { id }, data: { orderNumber } }); @@ -76,15 +72,7 @@ export async function reorderCatalogItems({ return { ok: true as const, data: {} }; } -export async function updateCatalogItem({ - id, - catalogFields, - baseItem, -}: { - id: number; - catalogFields: Record; - baseItem?: { id: number; fields: Record }; -}) { +export async function updateCatalogItem({ id, catalogFields, baseItem }: { id: number; catalogFields: Record; baseItem?: { id: number; fields: Record } }) { const staff = await requireStaff(); await prisma.catalogItems.update({ where: { id }, data: catalogFields as any }); if (baseItem) { @@ -102,22 +90,15 @@ export async function updateCatalogItem({ return { ok: true as const, data: {} }; } -export async function translateCatalogItems({ - items, -}: { - items: Array<{ id: number; publicName: string; description: string }>; -}) { +export async function translateCatalogItems({ items }: { items: Array<{ id: number; publicName: string; description: string }> }) { await requireStaff(); let namesUpdated = 0; let descriptionsUpdated = 0; let furniDataUpdated = 0; - const furniDataInserted = 0; + let furniDataInserted = 0; for (const item of items) { - const existing = await prisma.catalogItems.findUnique({ - where: { id: item.id }, - select: { catalogName: true }, - }); + const existing = await prisma.catalogItems.findUnique({ where: { id: item.id }, select: { catalogName: true } }); if (!existing) continue; if (item.publicName && item.publicName !== existing.catalogName) { @@ -146,14 +127,5 @@ export async function translateCatalogItems({ await rcon.updateCatalog(); revalidatePath("/admin/catalog"); - return { - ok: true as const, - data: { - namesUpdated, - descriptionsUpdated, - furniDataUpdated, - furniDataInserted: 0, - updated: items.length, - }, - }; + return { ok: true as const, data: { namesUpdated, descriptionsUpdated, furniDataUpdated, furniDataInserted: 0, updated: items.length } }; } diff --git a/src/actions/catalog.ts b/src/actions/catalog.ts index 032d229d..b54c431b 100644 --- a/src/actions/catalog.ts +++ b/src/actions/catalog.ts @@ -7,10 +7,7 @@ import { rcon } from "@/lib/services/rcon"; import { logStaffActivity } from "@/lib/services/staff-activity"; import type { ActionResult } from "@/lib/safe-action-shared"; -export async function updateCatalogPage({ - id, - ...fields -}: { id: number } & Record): Promise { +export async function updateCatalogPage({ id, ...fields }: { id: number } & Record): Promise { const staff = await requireStaff(); await prisma.catalogPages.update({ where: { id }, data: fields as any }); await rcon.updateCatalog(); @@ -40,18 +37,9 @@ export async function deleteCatalogPage({ id }: { id: number }) { return { ok: true as const, data: {} }; } -export async function toggleCatalogPage({ - id, - action, -}: { - id: number; - action: "toggleEnabled" | "toggleVisible"; -}) { +export async function toggleCatalogPage({ id, action }: { id: number; action: "toggleEnabled" | "toggleVisible" }) { await requireStaff(); - const page = await prisma.catalogPages.findUnique({ - where: { id }, - select: { enabled: true, visible: true }, - }); + const page = await prisma.catalogPages.findUnique({ where: { id }, select: { enabled: true, visible: true } }); if (!page) return { ok: false as const, error: "Catalog page not found" }; const field = action === "toggleEnabled" ? "enabled" : "visible"; const current = action === "toggleEnabled" ? page.enabled : page.visible; @@ -63,17 +51,7 @@ export async function toggleCatalogPage({ return { ok: true as const, data: {} }; } -export async function createCatalogPage(input: { - caption: string; - parentId: number; - pageLayout?: string; - iconImage?: number; - iconColor?: number; - enabled?: "0" | "1"; - visible?: "0" | "1"; - minRank?: number; - orderNum?: number; -}): Promise> { +export async function createCatalogPage(input: { caption: string; parentId: number; pageLayout?: string; iconImage?: number; iconColor?: number; enabled?: "0" | "1"; visible?: "0" | "1"; minRank?: number; orderNum?: number }): Promise> { const staff = await requireStaff(); const created = await prisma.catalogPages.create({ data: { @@ -105,7 +83,11 @@ export async function createCatalogPage(input: { return { ok: true as const, data: { id: created.id } }; } -export async function reorderTreePage(input: { pageId: number; newParentId?: number; newOrderNum: number }) { +export async function reorderTreePage(input: { + pageId: number; + newParentId?: number; + newOrderNum: number; +}) { await requireStaff(); await prisma.catalogPages.update({ where: { id: input.pageId }, diff --git a/src/actions/emulator.ts b/src/actions/emulator.ts index 94181da6..7d4dcda3 100644 --- a/src/actions/emulator.ts +++ b/src/actions/emulator.ts @@ -1,39 +1,39 @@ -"use server"; +'use server' -import { z } from "zod"; -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { actionOk } from "@/lib/safe-action-shared"; -import { logAudit } from "@/lib/services/audit"; -import { rcon } from "@/lib/services/rcon"; +import { z } from 'zod' +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { actionOk } from '@/lib/safe-action-shared' +import { logAudit } from '@/lib/services/audit' +import { rcon } from '@/lib/services/rcon' const saveEmulatorSettingsSchema = z.object({ settings: z.record(z.string(), z.string()), -}); +}) export const saveEmulatorSettings = adminAction( { permission: PERMS.SETTINGS_EDIT, schema: saveEmulatorSettingsSchema }, async (ctx) => { - const entries = Object.entries(ctx.data.settings); + const entries = Object.entries(ctx.data.settings) for (const [key, value] of entries) { await prisma.emulatorSettings.upsert({ where: { key }, update: { value: String(value) }, create: { key, value: String(value) }, - }); + }) } - await rcon.updateConfig(); + await rcon.updateConfig() logAudit({ userId: ctx.session.user.id, - action: "emulator_settings_update", - target: "EmulatorSettings", + action: 'emulator_settings_update', + target: 'EmulatorSettings', after: ctx.data.settings, - }); + }) - return actionOk(); + return actionOk() }, -); +) diff --git a/src/actions/events.ts b/src/actions/events.ts index 3bcdbcbe..c6d832ab 100644 --- a/src/actions/events.ts +++ b/src/actions/events.ts @@ -1,18 +1,18 @@ -"use server"; +'use server' -import { z } from "zod"; -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; -import { logAudit } from "@/lib/services/audit"; +import { z } from 'zod' +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { logAudit } from '@/lib/services/audit' import { createEventSchema, eventPrizeSchema, eventTypeSchema, eventWinnerSchema, updateEventSchema, -} from "@/lib/validators/event"; +} from '@/lib/validators/event' // ── Event Types ───────────────────────────────────────────────────── @@ -21,63 +21,63 @@ export const createEventType = adminAction( async (ctx) => { const eventType = await prisma.websiteEventType.create({ data: ctx.data, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "event_type_create", - target: "WebsiteEventType", + action: 'event_type_create', + target: 'WebsiteEventType', targetId: eventType.id, after: { name: eventType.name }, - }); - return actionOk({ id: eventType.id }); + }) + return actionOk({ id: eventType.id }) }, -); +) const updateEventTypeInput = eventTypeSchema.partial().extend({ id: z.coerce.number().int().positive(), -}); +}) export const updateEventType = adminAction( { permission: PERMS.EVENTS_EDIT, schema: updateEventTypeInput }, async (ctx) => { - const { id, ...data } = ctx.data; - const existing = await prisma.websiteEventType.findUnique({ where: { id } }); - if (!existing) throw new ActionError("Event type not found"); + const { id, ...data } = ctx.data + const existing = await prisma.websiteEventType.findUnique({ where: { id } }) + if (!existing) throw new ActionError('Event type not found') - await prisma.websiteEventType.update({ where: { id }, data }); + await prisma.websiteEventType.update({ where: { id }, data }) logAudit({ userId: ctx.session.user.id, - action: "event_type_update", - target: "WebsiteEventType", + action: 'event_type_update', + target: 'WebsiteEventType', targetId: id, before: { name: existing.name }, after: data, - }); - return actionOk({ id }); + }) + return actionOk({ id }) }, -); +) const deleteEventTypeInput = z.object({ id: z.coerce.number().int().positive(), -}); +}) export const deleteEventType = adminAction( { permission: PERMS.EVENTS_EDIT, schema: deleteEventTypeInput }, async (ctx) => { - const existing = await prisma.websiteEventType.findUnique({ where: { id: ctx.data.id } }); - if (!existing) throw new ActionError("Event type not found"); + const existing = await prisma.websiteEventType.findUnique({ where: { id: ctx.data.id } }) + if (!existing) throw new ActionError('Event type not found') - await prisma.websiteEventType.delete({ where: { id: ctx.data.id } }); + await prisma.websiteEventType.delete({ where: { id: ctx.data.id } }) logAudit({ userId: ctx.session.user.id, - action: "event_type_delete", - target: "WebsiteEventType", + action: 'event_type_delete', + target: 'WebsiteEventType', targetId: ctx.data.id, before: { name: existing.name }, - }); - return actionOk(); + }) + return actionOk() }, -); +) // ── Events ────────────────────────────────────────────────────────── @@ -89,97 +89,97 @@ export const createEvent = adminAction( ...ctx.data, hostUserId: Number(ctx.session.user.id), }, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "event_create", - target: "WebsiteEvent", + action: 'event_create', + target: 'WebsiteEvent', targetId: event.id, after: { title: event.title }, - }); - return actionOk({ id: event.id }); + }) + return actionOk({ id: event.id }) }, -); +) const updateEventInput = updateEventSchema.extend({ id: z.coerce.number().int().positive(), -}); +}) export const updateEvent = adminAction( { permission: PERMS.EVENTS_EDIT, schema: updateEventInput }, async (ctx) => { - const { id, ...data } = ctx.data; - const existing = await prisma.websiteEvent.findUnique({ where: { id } }); - if (!existing) throw new ActionError("Event not found"); + const { id, ...data } = ctx.data + const existing = await prisma.websiteEvent.findUnique({ where: { id } }) + if (!existing) throw new ActionError('Event not found') - await prisma.websiteEvent.update({ where: { id }, data }); + await prisma.websiteEvent.update({ where: { id }, data }) logAudit({ userId: ctx.session.user.id, - action: "event_update", - target: "WebsiteEvent", + action: 'event_update', + target: 'WebsiteEvent', targetId: id, before: { title: existing.title, status: existing.status }, after: data, - }); - return actionOk({ id }); + }) + return actionOk({ id }) }, -); +) const deleteEventInput = z.object({ id: z.coerce.number().int().positive(), -}); +}) export const deleteEvent = adminAction( { permission: PERMS.EVENTS_EDIT, schema: deleteEventInput }, async (ctx) => { - const existing = await prisma.websiteEvent.findUnique({ where: { id: ctx.data.id } }); - if (!existing) throw new ActionError("Event not found"); + const existing = await prisma.websiteEvent.findUnique({ where: { id: ctx.data.id } }) + if (!existing) throw new ActionError('Event not found') - await prisma.websiteEvent.delete({ where: { id: ctx.data.id } }); + await prisma.websiteEvent.delete({ where: { id: ctx.data.id } }) logAudit({ userId: ctx.session.user.id, - action: "event_delete", - target: "WebsiteEvent", + action: 'event_delete', + target: 'WebsiteEvent', targetId: ctx.data.id, before: { title: existing.title }, - }); - return actionOk(); + }) + return actionOk() }, -); +) // ── Prizes ────────────────────────────────────────────────────────── export const addEventPrize = adminAction( { permission: PERMS.EVENTS_EDIT, schema: eventPrizeSchema }, async (ctx) => { - const prize = await prisma.websiteEventPrize.create({ data: ctx.data }); - return actionOk({ id: prize.id }); + const prize = await prisma.websiteEventPrize.create({ data: ctx.data }) + return actionOk({ id: prize.id }) }, -); +) -const deletePrizeInput = z.object({ id: z.coerce.number().int().positive() }); +const deletePrizeInput = z.object({ id: z.coerce.number().int().positive() }) export const deleteEventPrize = adminAction( { permission: PERMS.EVENTS_EDIT, schema: deletePrizeInput }, async (ctx) => { - await prisma.websiteEventPrize.delete({ where: { id: ctx.data.id } }); - return actionOk(); + await prisma.websiteEventPrize.delete({ where: { id: ctx.data.id } }) + return actionOk() }, -); +) // ── Winners ───────────────────────────────────────────────────────── export const addEventWinner = adminAction( { permission: PERMS.EVENTS_EDIT, schema: eventWinnerSchema }, async (ctx) => { - const winner = await prisma.websiteEventWinner.create({ data: ctx.data }); + const winner = await prisma.websiteEventWinner.create({ data: ctx.data }) logAudit({ userId: ctx.session.user.id, - action: "event_winner_add", - target: "WebsiteEventWinner", + action: 'event_winner_add', + target: 'WebsiteEventWinner', targetId: winner.id, after: { eventId: ctx.data.eventId, userId: ctx.data.userId, position: ctx.data.position }, - }); - return actionOk({ id: winner.id }); + }) + return actionOk({ id: winner.id }) }, -); +) diff --git a/src/actions/import-badges.ts b/src/actions/import-badges.ts index 7d9aed58..890feaae 100644 --- a/src/actions/import-badges.ts +++ b/src/actions/import-badges.ts @@ -3,27 +3,13 @@ import { requireStaff } from "@/lib/admin/guard"; import { prisma } from "@/lib/prisma"; -export async function importBadgeFromRemote({ - code, - name, - description, -}: { - code: string; - name: string; - description: string; -}) { +export async function importBadgeFromRemote({ code, name, description }: { code: string; name: string; description: string }) { await requireStaff(); try { await prisma.websiteBadges.upsert({ where: { badgeKey: code }, update: { badgeName: name, badgeDescription: description, updatedAt: new Date() }, - create: { - badgeKey: code, - badgeName: name, - badgeDescription: description, - createdAt: new Date(), - updatedAt: new Date(), - }, + create: { badgeKey: code, badgeName: name, badgeDescription: description, createdAt: new Date(), updatedAt: new Date() }, }); return { ok: true as const }; } catch { diff --git a/src/actions/import-furni.ts b/src/actions/import-furni.ts index 02c91196..5f2a680a 100644 --- a/src/actions/import-furni.ts +++ b/src/actions/import-furni.ts @@ -1,20 +1,19 @@ -"use server"; +'use server' -import { z } from "zod"; -import { PERMS } from "@/lib/permissions"; -import { adminAction } from "@/lib/safe-action"; -import { actionOk } from "@/lib/safe-action-shared"; -import { cleanupConvertedSwfs, deleteImportedItem } from "@/lib/services/furni-import"; +import { z } from 'zod' +import { PERMS } from '@/lib/permissions' +import { adminAction } from '@/lib/safe-action' +import { actionOk } from '@/lib/safe-action-shared' +import { cleanupConvertedSwfs, deleteImportedItem } from '@/lib/services/furni-import' export const cleanSwfFiles = adminAction({ permission: PERMS.ASSETS_IMPORT }, async () => { - const result = await cleanupConvertedSwfs(); - return actionOk(result as unknown as Record); -}); + const result = await cleanupConvertedSwfs() + return actionOk(result as unknown as Record) +}) -const deleteSchema = z.object({ classname: z.string().trim().min(1) }); +const deleteSchema = z.object({ classname: z.string().trim().min(1) }) export const deleteImportedFurni = adminAction( { permission: PERMS.ASSETS_IMPORT, schema: deleteSchema }, - async (ctx) => - actionOk((await deleteImportedItem(ctx.data.classname)) as unknown as Record), -); + async (ctx) => actionOk((await deleteImportedItem(ctx.data.classname)) as unknown as Record), +) diff --git a/src/actions/moderation.ts b/src/actions/moderation.ts index 7564f1bf..b95f21c6 100644 --- a/src/actions/moderation.ts +++ b/src/actions/moderation.ts @@ -1,67 +1,67 @@ -"use server"; +'use server' -import { z } from "zod"; -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; -import { logAudit } from "@/lib/services/audit"; -import { rcon } from "@/lib/services/rcon"; +import { z } from 'zod' +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { logAudit } from '@/lib/services/audit' +import { rcon } from '@/lib/services/rcon' // ── CFH Ticket Actions ────────────────────────────────────────────── -const cfhIdSchema = z.object({ ticketId: z.coerce.number().int().positive() }); +const cfhIdSchema = z.object({ ticketId: z.coerce.number().int().positive() }) export const assignCfhTicket = adminAction( { permission: PERMS.MODERATION_EDIT, schema: cfhIdSchema }, async (ctx) => { - const ticket = await prisma.supportTickets.findUnique({ where: { id: ctx.data.ticketId } }); - if (!ticket) throw new ActionError("Ticket not found"); + const ticket = await prisma.supportTickets.findUnique({ where: { id: ctx.data.ticketId } }) + if (!ticket) throw new ActionError('Ticket not found') await prisma.supportTickets.update({ where: { id: ctx.data.ticketId }, data: { modId: ctx.session.user.id, state: 1 }, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "cfh_assign", - target: "support_tickets", + action: 'cfh_assign', + target: 'support_tickets', targetId: ctx.data.ticketId, - }); + }) - return actionOk(); + return actionOk() }, -); +) const cfhStateSchema = z.object({ ticketId: z.coerce.number().int().positive(), state: z.coerce.number().int().min(0).max(3), -}); +}) export const updateCfhState = adminAction( { permission: PERMS.MODERATION_EDIT, schema: cfhStateSchema }, async (ctx) => { - const ticket = await prisma.supportTickets.findUnique({ where: { id: ctx.data.ticketId } }); - if (!ticket) throw new ActionError("Ticket not found"); + const ticket = await prisma.supportTickets.findUnique({ where: { id: ctx.data.ticketId } }) + if (!ticket) throw new ActionError('Ticket not found') await prisma.supportTickets.update({ where: { id: ctx.data.ticketId }, data: { state: ctx.data.state, modId: ctx.session.user.id }, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "cfh_state_change", - target: "support_tickets", + action: 'cfh_state_change', + target: 'support_tickets', targetId: ctx.data.ticketId, before: { state: ticket.state }, after: { state: ctx.data.state }, - }); + }) - return actionOk(); + return actionOk() }, -); +) export const closeCfhTicket = adminAction( { permission: PERMS.MODERATION_EDIT, schema: cfhIdSchema }, @@ -69,138 +69,138 @@ export const closeCfhTicket = adminAction( await prisma.supportTickets.update({ where: { id: ctx.data.ticketId }, data: { state: 2, modId: ctx.session.user.id }, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "cfh_close", - target: "support_tickets", + action: 'cfh_close', + target: 'support_tickets', targetId: ctx.data.ticketId, - }); + }) - return actionOk(); + return actionOk() }, -); +) // ── Quick Mod Actions ──────────────────────────────────────────────── -const userIdSchema = z.object({ userId: z.coerce.number().int().positive() }); +const userIdSchema = z.object({ userId: z.coerce.number().int().positive() }) export const quickKick = adminAction( { permission: PERMS.MODERATION_EDIT, schema: userIdSchema }, async (ctx) => { - await rcon.disconnectUser(ctx.data.userId); + await rcon.disconnectUser(ctx.data.userId) logAudit({ userId: ctx.session.user.id, - action: "mod_kick", - target: "User", + action: 'mod_kick', + target: 'User', targetId: ctx.data.userId, - }); + }) - return actionOk(); + return actionOk() }, -); +) const muteSchema = z.object({ userId: z.coerce.number().int().positive(), duration: z.coerce.number().int().min(0).max(525600), // max 1 year in minutes -}); +}) export const quickMute = adminAction( { permission: PERMS.MODERATION_EDIT, schema: muteSchema }, async (ctx) => { - await rcon.muteUser(ctx.data.userId, ctx.data.duration); + await rcon.muteUser(ctx.data.userId, ctx.data.duration) logAudit({ userId: ctx.session.user.id, - action: "mod_mute", - target: "User", + action: 'mod_mute', + target: 'User', targetId: ctx.data.userId, after: { duration: ctx.data.duration }, - }); + }) - return actionOk(); + return actionOk() }, -); +) export const quickUnmute = adminAction( { permission: PERMS.MODERATION_EDIT, schema: userIdSchema }, async (ctx) => { - await rcon.unmuteUser(ctx.data.userId); + await rcon.unmuteUser(ctx.data.userId) logAudit({ userId: ctx.session.user.id, - action: "mod_unmute", - target: "User", + action: 'mod_unmute', + target: 'User', targetId: ctx.data.userId, - }); + }) - return actionOk(); + return actionOk() }, -); +) const alertSchema = z.object({ userId: z.coerce.number().int().positive(), message: z.string().min(1).max(500), -}); +}) export const quickAlert = adminAction( { permission: PERMS.MODERATION_EDIT, schema: alertSchema }, async (ctx) => { - await rcon.alertUser(ctx.data.userId, ctx.data.message); + await rcon.alertUser(ctx.data.userId, ctx.data.message) logAudit({ userId: ctx.session.user.id, - action: "mod_alert", - target: "User", + action: 'mod_alert', + target: 'User', targetId: ctx.data.userId, after: { message: ctx.data.message }, - }); + }) - return actionOk(); + return actionOk() }, -); +) -const roomIdSchema = z.object({ roomId: z.coerce.number().int().positive() }); +const roomIdSchema = z.object({ roomId: z.coerce.number().int().positive() }) export const quickRoomKick = adminAction( { permission: PERMS.MODERATION_EDIT, schema: roomIdSchema }, async (ctx) => { - await rcon.kickAll(ctx.data.roomId); + await rcon.kickAll(ctx.data.roomId) logAudit({ userId: ctx.session.user.id, - action: "mod_room_kick", - target: "Room", + action: 'mod_room_kick', + target: 'Room', targetId: ctx.data.roomId, - }); + }) - return actionOk(); + return actionOk() }, -); +) const broadcastSchema = z.object({ message: z.string().min(1).max(500), - type: z.enum(["hotel", "staff"]), -}); + type: z.enum(['hotel', 'staff']), +}) export const broadcastAlert = adminAction( { permission: PERMS.MODERATION_EDIT, schema: broadcastSchema }, async (ctx) => { - if (ctx.data.type === "hotel") { - await rcon.hotelAlert(ctx.data.message); + if (ctx.data.type === 'hotel') { + await rcon.hotelAlert(ctx.data.message) } else { - await rcon.staffAlert(ctx.data.message); + await rcon.staffAlert(ctx.data.message) } logAudit({ userId: ctx.session.user.id, action: `mod_broadcast_${ctx.data.type}`, - target: "broadcast", + target: 'broadcast', after: { message: ctx.data.message }, - }); + }) - return actionOk(); + return actionOk() }, -); +) diff --git a/src/actions/permissions.ts b/src/actions/permissions.ts index c5c4c3c8..58c153db 100644 --- a/src/actions/permissions.ts +++ b/src/actions/permissions.ts @@ -1,140 +1,102 @@ -"use server"; +'use server' -import { revalidateTag } from "next/cache"; -import { z } from "zod"; -import { PERMS } from "@/lib/permission-slugs"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; -import { createEmulatorRank, deleteEmulatorRank, updateEmulatorRank } from "@/lib/services/permission-ranks"; -import { rcon } from "@/lib/services/rcon"; -import { logStaffActivity } from "@/lib/services/staff-activity"; +import { revalidateTag } from 'next/cache' +import { z } from 'zod' +import { PERMS } from '@/lib/permission-slugs' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { createEmulatorRank, deleteEmulatorRank, updateEmulatorRank } from '@/lib/services/permission-ranks' +import { rcon } from '@/lib/services/rcon' +import { logStaffActivity } from '@/lib/services/staff-activity' const createRankSchema = z.object({ rank_name: z.string().trim().min(1).max(25), level: z.coerce.number().int().min(1), -}); +}) export const createRank = adminAction( { schema: createRankSchema, permission: PERMS.PERMISSIONS_MANAGE }, async (ctx) => { - const id = await createEmulatorRank(prisma, ctx.data); + const id = await createEmulatorRank(prisma, ctx.data) await prisma.aclRole.upsert({ where: { slug: `rank_${id}` }, - create: { - slug: `rank_${id}`, - title: ctx.data.rank_name, - description: "CMS role synchronized from permission_ranks", - }, + create: { slug: `rank_${id}`, title: ctx.data.rank_name, description: 'CMS role synchronized from permission_ranks' }, update: { title: ctx.data.rank_name }, - }); - await logStaffActivity({ - staffId: ctx.session.user.id, - action: "rank_create", - description: `Created rank #${id}`, - targetType: "rank", - targetId: id, - }); - await rcon.send("updatepermissions"); - revalidateTag("permissions", { expire: 0 }); - return actionOk({ id }); + }) + await logStaffActivity({ staffId: ctx.session.user.id, action: 'rank_create', description: `Created rank #${id}`, targetType: 'rank', targetId: id }) + await rcon.send('updatepermissions') + revalidateTag('permissions', { expire: 0 }) + return actionOk({ id }) }, -); +) -const deleteRankSchema = z.object({ id: z.coerce.number().int().positive() }); +const deleteRankSchema = z.object({ id: z.coerce.number().int().positive() }) export const deleteRank = adminAction( { schema: deleteRankSchema, permission: PERMS.PERMISSIONS_MANAGE }, async (ctx) => { - const users = await prisma.user.count({ where: { rank: ctx.data.id } }); - if (users > 0) throw new ActionError(`Cannot delete: ${users} users have this rank`); - const role = await prisma.aclRole.findFirst({ where: { slug: `rank_${ctx.data.id}` } }); - await deleteEmulatorRank(prisma, ctx.data.id); + const users = await prisma.user.count({ where: { rank: ctx.data.id } }) + if (users > 0) throw new ActionError(`Cannot delete: ${users} users have this rank`) + const role = await prisma.aclRole.findFirst({ where: { slug: `rank_${ctx.data.id}` } }) + await deleteEmulatorRank(prisma, ctx.data.id) if (role) { await prisma.$transaction([ - prisma.aclModelPermission.deleteMany({ where: { modelId: role.id, modelType: "Role" } }), + prisma.aclModelPermission.deleteMany({ where: { modelId: role.id, modelType: 'Role' } }), prisma.aclModelRole.deleteMany({ where: { roleId: role.id } }), prisma.aclRole.delete({ where: { id: role.id } }), - ]); + ]) } - await logStaffActivity({ - staffId: ctx.session.user.id, - action: "rank_delete", - description: `Deleted rank #${ctx.data.id}`, - targetType: "rank", - targetId: ctx.data.id, - }); - await rcon.send("updatepermissions"); - revalidateTag("permissions", { expire: 0 }); - return actionOk(); + await logStaffActivity({ staffId: ctx.session.user.id, action: 'rank_delete', description: `Deleted rank #${ctx.data.id}`, targetType: 'rank', targetId: ctx.data.id }) + await rcon.send('updatepermissions') + revalidateTag('permissions', { expire: 0 }) + return actionOk() }, -); +) const saveRankSchema = z.object({ id: z.coerce.number().int().positive(), fields: z.record(z.string(), z.union([z.string(), z.number()])), -}); +}) export const saveRank = adminAction( { schema: saveRankSchema, permission: PERMS.PERMISSIONS_MANAGE }, async (ctx) => { - await updateEmulatorRank(prisma, ctx.data.id, ctx.data.fields); - if (typeof ctx.data.fields.rank_name === "string") { - await prisma.aclRole.updateMany({ - where: { slug: `rank_${ctx.data.id}` }, - data: { title: ctx.data.fields.rank_name }, - }); + await updateEmulatorRank(prisma, ctx.data.id, ctx.data.fields) + if (typeof ctx.data.fields.rank_name === 'string') { + await prisma.aclRole.updateMany({ where: { slug: `rank_${ctx.data.id}` }, data: { title: ctx.data.fields.rank_name } }) } - await logStaffActivity({ - staffId: ctx.session.user.id, - action: "rank_update", - description: `Updated rank #${ctx.data.id}`, - targetType: "rank", - targetId: ctx.data.id, - }); - await rcon.send("updatepermissions"); - revalidateTag("permissions", { expire: 0 }); - return actionOk(); + await logStaffActivity({ staffId: ctx.session.user.id, action: 'rank_update', description: `Updated rank #${ctx.data.id}`, targetType: 'rank', targetId: ctx.data.id }) + await rcon.send('updatepermissions') + revalidateTag('permissions', { expire: 0 }) + return actionOk() }, -); +) const setCmsPermsSchema = z.object({ roleId: z.coerce.number().int().positive(), permissionSlugs: z.array(z.string().trim().min(1)).max(500), -}); +}) export const setCmsPermissions = adminAction( { schema: setCmsPermsSchema, permission: PERMS.PERMISSIONS_MANAGE }, async (ctx) => { - const role = await prisma.aclRole.findUnique({ - where: { id: ctx.data.roleId }, - select: { id: true, slug: true }, - }); - if (!role) throw new ActionError("Role not found"); + const role = await prisma.aclRole.findUnique({ where: { id: ctx.data.roleId }, select: { id: true, slug: true } }) + if (!role) throw new ActionError('Role not found') const permissions = await prisma.aclPermission.findMany({ where: { slug: { in: ctx.data.permissionSlugs } }, select: { id: true }, - }); + }) await prisma.$transaction(async (tx) => { - await tx.aclModelPermission.deleteMany({ where: { modelId: role.id, modelType: "Role" } }); + await tx.aclModelPermission.deleteMany({ where: { modelId: role.id, modelType: 'Role' } }) if (permissions.length) { await tx.aclModelPermission.createMany({ - data: permissions.map((permission) => ({ - modelId: role.id, - modelType: "Role", - permissionId: permission.id, - })), - }); + data: permissions.map((permission) => ({ modelId: role.id, modelType: 'Role', permissionId: permission.id })), + }) } - }); - await logStaffActivity({ - staffId: ctx.session.user.id, - action: "acl_role_permissions_update", - description: `Updated ${permissions.length} permissions for ${role.slug}`, - targetType: "acl_role", - targetId: role.id, - }); - revalidateTag("permissions", { expire: 0 }); - return actionOk(); + }) + await logStaffActivity({ staffId: ctx.session.user.id, action: 'acl_role_permissions_update', description: `Updated ${permissions.length} permissions for ${role.slug}`, targetType: 'acl_role', targetId: role.id }) + revalidateTag('permissions', { expire: 0 }) + return actionOk() }, -); +) diff --git a/src/actions/polls.ts b/src/actions/polls.ts index 928da045..aa16a06a 100644 --- a/src/actions/polls.ts +++ b/src/actions/polls.ts @@ -1,107 +1,107 @@ -"use server"; +'use server' -import { z } from "zod"; -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; -import { logAudit } from "@/lib/services/audit"; -import { createPollSchema, pollQuestionSchema, updatePollSchema } from "@/lib/validators/poll"; +import { z } from 'zod' +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { logAudit } from '@/lib/services/audit' +import { createPollSchema, pollQuestionSchema, updatePollSchema } from '@/lib/validators/poll' // ── Polls ─────────────────────────────────────────────────────────── export const createPoll = adminAction( { permission: PERMS.POLLS_EDIT, schema: createPollSchema }, async (ctx) => { - const poll = await prisma.websitePoll.create({ data: ctx.data }); + const poll = await prisma.websitePoll.create({ data: ctx.data }) logAudit({ userId: ctx.session.user.id, - action: "poll_create", - target: "WebsitePoll", + action: 'poll_create', + target: 'WebsitePoll', targetId: poll.id, after: { title: poll.title }, - }); - return actionOk({ id: poll.id }); + }) + return actionOk({ id: poll.id }) }, -); +) const updatePollInput = updatePollSchema.extend({ id: z.coerce.number().int().positive(), -}); +}) export const updatePoll = adminAction( { permission: PERMS.POLLS_EDIT, schema: updatePollInput }, async (ctx) => { - const { id, ...data } = ctx.data; - const existing = await prisma.websitePoll.findUnique({ where: { id } }); - if (!existing) throw new ActionError("Poll not found"); + const { id, ...data } = ctx.data + const existing = await prisma.websitePoll.findUnique({ where: { id } }) + if (!existing) throw new ActionError('Poll not found') - await prisma.websitePoll.update({ where: { id }, data }); + await prisma.websitePoll.update({ where: { id }, data }) logAudit({ userId: ctx.session.user.id, - action: "poll_update", - target: "WebsitePoll", + action: 'poll_update', + target: 'WebsitePoll', targetId: id, before: { title: existing.title, status: existing.status }, after: data, - }); - return actionOk({ id }); + }) + return actionOk({ id }) }, -); +) const deletePollInput = z.object({ id: z.coerce.number().int().positive(), -}); +}) export const deletePoll = adminAction( { permission: PERMS.POLLS_EDIT, schema: deletePollInput }, async (ctx) => { - const existing = await prisma.websitePoll.findUnique({ where: { id: ctx.data.id } }); - if (!existing) throw new ActionError("Poll not found"); + const existing = await prisma.websitePoll.findUnique({ where: { id: ctx.data.id } }) + if (!existing) throw new ActionError('Poll not found') - await prisma.websitePoll.delete({ where: { id: ctx.data.id } }); + await prisma.websitePoll.delete({ where: { id: ctx.data.id } }) logAudit({ userId: ctx.session.user.id, - action: "poll_delete", - target: "WebsitePoll", + action: 'poll_delete', + target: 'WebsitePoll', targetId: ctx.data.id, before: { title: existing.title }, - }); - return actionOk(); + }) + return actionOk() }, -); +) // ── Questions ─────────────────────────────────────────────────────── export const addPollQuestion = adminAction( { permission: PERMS.POLLS_EDIT, schema: pollQuestionSchema }, async (ctx) => { - const question = await prisma.websitePollQuestion.create({ data: ctx.data }); - return actionOk({ id: question.id }); + const question = await prisma.websitePollQuestion.create({ data: ctx.data }) + return actionOk({ id: question.id }) }, -); +) const updateQuestionInput = pollQuestionSchema.partial().extend({ id: z.coerce.number().int().positive(), -}); +}) export const updatePollQuestion = adminAction( { permission: PERMS.POLLS_EDIT, schema: updateQuestionInput }, async (ctx) => { - const { id, ...data } = ctx.data; - await prisma.websitePollQuestion.update({ where: { id }, data }); - return actionOk({ id }); + const { id, ...data } = ctx.data + await prisma.websitePollQuestion.update({ where: { id }, data }) + return actionOk({ id }) }, -); +) const deleteQuestionInput = z.object({ id: z.coerce.number().int().positive(), -}); +}) export const deletePollQuestion = adminAction( { permission: PERMS.POLLS_EDIT, schema: deleteQuestionInput }, async (ctx) => { - await prisma.websitePollQuestion.delete({ where: { id: ctx.data.id } }); - return actionOk(); + await prisma.websitePollQuestion.delete({ where: { id: ctx.data.id } }) + return actionOk() }, -); +) diff --git a/src/actions/prefixes.ts b/src/actions/prefixes.ts index 2814740c..640eca7d 100644 --- a/src/actions/prefixes.ts +++ b/src/actions/prefixes.ts @@ -1,10 +1,10 @@ -"use server"; +'use server' -import { z } from "zod"; -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { z } from 'zod' +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' // Models custom_prefixes / custom_prefix_blacklist / custom_prefix_settings // are not represented in prisma/schema.prisma yet — we use raw queries with @@ -19,26 +19,26 @@ const createPrefixSchema = z.object({ icon: z.string().optional(), effect: z.string().optional(), active: z.coerce.number().int().min(0).max(1).default(1), -}); +}) export const createPrefix = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: createPrefixSchema }, async (ctx) => { - const { username, text, color, icon, effect, active } = ctx.data; + const { username, text, color, icon, effect, active } = ctx.data const users = await prisma.$queryRaw<{ id: number }[]>` SELECT id FROM users WHERE username = ${username} LIMIT 1 - `; - if (users.length === 0) throw new ActionError("User not found"); + ` + if (users.length === 0) throw new ActionError('User not found') await prisma.$executeRaw` INSERT INTO custom_prefixes (user_id, text, color, icon, effect, active) - VALUES (${users[0].id}, ${text}, ${color}, ${icon || ""}, ${effect || ""}, ${active}) - `; + VALUES (${users[0].id}, ${text}, ${color}, ${icon || ''}, ${effect || ''}, ${active}) + ` - return actionOk(); + return actionOk() }, -); +) // ── Update prefix ─────────────────────────────────────────────────── @@ -49,94 +49,94 @@ const updatePrefixSchema = z.object({ icon: z.string().optional(), effect: z.string().optional(), active: z.coerce.number().int().min(0).max(1).optional(), -}); +}) export const updatePrefix = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: updatePrefixSchema }, async (ctx) => { - const { id, text, color, icon, effect, active } = ctx.data; + const { id, text, color, icon, effect, active } = ctx.data await prisma.$executeRaw` UPDATE custom_prefixes - SET text = ${text}, color = ${color}, icon = ${icon || ""}, effect = ${effect || ""}, active = ${active ?? 1} + SET text = ${text}, color = ${color}, icon = ${icon || ''}, effect = ${effect || ''}, active = ${active ?? 1} WHERE id = ${id} - `; + ` - return actionOk(); + return actionOk() }, -); +) // ── Delete prefix ─────────────────────────────────────────────────── const deletePrefixSchema = z.object({ id: z.coerce.number().int().positive(), -}); +}) export const deletePrefix = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: deletePrefixSchema }, async (ctx) => { - await prisma.$executeRaw`DELETE FROM custom_prefixes WHERE id = ${ctx.data.id}`; - return actionOk(); + await prisma.$executeRaw`DELETE FROM custom_prefixes WHERE id = ${ctx.data.id}` + return actionOk() }, -); +) // ── Add blacklist word ────────────────────────────────────────────── const addBlacklistWordSchema = z.object({ word: z.string().min(1).max(100), -}); +}) export const addBlacklistWord = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: addBlacklistWordSchema }, async (ctx) => { await prisma.$executeRaw` INSERT INTO custom_prefix_blacklist (word) VALUES (${ctx.data.word.trim()}) - `; - return actionOk(); + ` + return actionOk() }, -); +) // ── Remove blacklist word ─────────────────────────────────────────── const removeBlacklistWordSchema = z.object({ id: z.coerce.number().int().positive(), -}); +}) export const removeBlacklistWord = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: removeBlacklistWordSchema }, async (ctx) => { - await prisma.$executeRaw`DELETE FROM custom_prefix_blacklist WHERE id = ${ctx.data.id}`; - return actionOk(); + await prisma.$executeRaw`DELETE FROM custom_prefix_blacklist WHERE id = ${ctx.data.id}` + return actionOk() }, -); +) // ── Update prefix settings ────────────────────────────────────────── const SETTINGS_WHITELIST = new Set([ - "enabled", - "max_length", - "min_rank", - "allow_colors", - "allow_bold", - "allow_italic", - "default_color", -]); + 'enabled', + 'max_length', + 'min_rank', + 'allow_colors', + 'allow_bold', + 'allow_italic', + 'default_color', +]) const updatePrefixSettingsSchema = z.object({ settings: z.record(z.string(), z.string()), -}); +}) export const updatePrefixSettings = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: updatePrefixSettingsSchema }, async (ctx) => { for (const [key, value] of Object.entries(ctx.data.settings)) { - if (!SETTINGS_WHITELIST.has(key)) continue; + if (!SETTINGS_WHITELIST.has(key)) continue await prisma.$executeRaw` INSERT INTO custom_prefix_settings (\`key\`, \`value\`) VALUES (${key}, ${value}) ON DUPLICATE KEY UPDATE \`value\` = ${value} - `; + ` } - return actionOk(); + return actionOk() }, -); +) diff --git a/src/actions/rooms.ts b/src/actions/rooms.ts index a4fb121b..b0779bee 100644 --- a/src/actions/rooms.ts +++ b/src/actions/rooms.ts @@ -71,16 +71,7 @@ export async function deleteRoom({ id }: { id: number }) { revalidatePath("/admin/rooms"); } -export async function updateRoom({ - id, - ...data -}: { - id: number; - name?: string; - description?: string; - state?: string; - usersMax?: number; -}) { +export async function updateRoom({ id, ...data }: { id: number; name?: string; description?: string; state?: string; usersMax?: number }) { const staff = await requireStaff(); await prisma.rooms.update({ where: { id }, data: data as any }); await logStaffActivity({ diff --git a/src/actions/soundtracks.ts b/src/actions/soundtracks.ts index 9649c182..a9772671 100644 --- a/src/actions/soundtracks.ts +++ b/src/actions/soundtracks.ts @@ -10,19 +10,7 @@ export async function deleteSoundtrack({ id }: { id: number }) { revalidatePath("/admin/sounds"); } -export async function updateSoundtrack({ - id, - name, - author, - track, - length, -}: { - id: number; - name: string; - author: string; - track: string; - length: number; -}) { +export async function updateSoundtrack({ id, name, author, track, length }: { id: number; name: string; author: string; track: string; length: number }) { await requireStaff(); await prisma.soundtracks.update({ where: { id }, diff --git a/src/actions/ticket-templates.ts b/src/actions/ticket-templates.ts index 52bf9a83..1e290b23 100644 --- a/src/actions/ticket-templates.ts +++ b/src/actions/ticket-templates.ts @@ -1,45 +1,47 @@ -"use server"; +'use server' -import { z } from "zod"; -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { z } from 'zod' +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' const templateSchema = z.object({ title: z.string().min(1).max(255), content: z.string().min(1), - category: z.string().max(50).optional().default("general"), + category: z.string().max(50).optional().default('general'), sortOrder: z.coerce.number().int().min(0).default(0), -}); +}) export const createTemplate = adminAction( { permission: PERMS.TICKETS_EDIT, schema: templateSchema }, async (ctx) => { - const tpl = await prisma.websiteTicketTemplate.create({ data: ctx.data }); - return actionOk({ id: tpl.id }); + const tpl = await prisma.websiteTicketTemplate.create({ data: ctx.data }) + return actionOk({ id: tpl.id }) }, -); +) -const updateTemplateInput = templateSchema.partial().extend({ id: z.coerce.number().int().positive() }); +const updateTemplateInput = templateSchema + .partial() + .extend({ id: z.coerce.number().int().positive() }) export const updateTemplate = adminAction( { permission: PERMS.TICKETS_EDIT, schema: updateTemplateInput }, async (ctx) => { - const { id, ...data } = ctx.data; - const existing = await prisma.websiteTicketTemplate.findUnique({ where: { id } }); - if (!existing) throw new ActionError("Template not found"); - await prisma.websiteTicketTemplate.update({ where: { id }, data }); - return actionOk({ id }); + const { id, ...data } = ctx.data + const existing = await prisma.websiteTicketTemplate.findUnique({ where: { id } }) + if (!existing) throw new ActionError('Template not found') + await prisma.websiteTicketTemplate.update({ where: { id }, data }) + return actionOk({ id }) }, -); +) -const deleteTemplateInput = z.object({ id: z.coerce.number().int().positive() }); +const deleteTemplateInput = z.object({ id: z.coerce.number().int().positive() }) export const deleteTemplate = adminAction( { permission: PERMS.TICKETS_EDIT, schema: deleteTemplateInput }, async (ctx) => { - await prisma.websiteTicketTemplate.delete({ where: { id: ctx.data.id } }); - return actionOk(); + await prisma.websiteTicketTemplate.delete({ where: { id: ctx.data.id } }) + return actionOk() }, -); +) diff --git a/src/actions/tickets.ts b/src/actions/tickets.ts index b3b46e9d..9c5ad45a 100644 --- a/src/actions/tickets.ts +++ b/src/actions/tickets.ts @@ -1,18 +1,18 @@ -"use server"; +'use server' -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction, authAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; -import { logAudit } from "@/lib/services/audit"; -import { notify } from "@/lib/services/webhook"; +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction, authAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { logAudit } from '@/lib/services/audit' +import { notify } from '@/lib/services/webhook' import { assignTicketSchema, createTicketSchema, replyTicketSchema, updateTicketPrioritySchema, updateTicketStatusSchema, -} from "@/lib/validators/ticket"; +} from '@/lib/validators/ticket' // ── User actions (authenticated, no admin perms needed) ────────────── @@ -23,7 +23,7 @@ export const createTicket = authAction({ schema: createTicketSchema }, async (ct category: ctx.data.category, creatorId: ctx.session.user.id, }, - }); + }) // Create the first message await prisma.websiteTicketMessage.create({ @@ -33,26 +33,26 @@ export const createTicket = authAction({ schema: createTicketSchema }, async (ct message: ctx.data.message, isStaff: 0, }, - }); + }) notify({ - action: "ticket_create", + action: 'ticket_create', actor: ctx.session.user.username, target: `#${ticket.id} - ${ticket.subject}`, details: `Category: ${ticket.category}`, - }); + }) - return actionOk({ id: ticket.id }); -}); + return actionOk({ id: ticket.id }) +}) export const userReplyTicket = authAction({ schema: replyTicketSchema }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }); + }) - if (!ticket) throw new ActionError("Ticket not found"); - if (ticket.creatorId !== ctx.session.user.id) throw new ActionError("Unauthorized"); - if (ticket.status === "closed") throw new ActionError("Ticket is closed"); + if (!ticket) throw new ActionError('Ticket not found') + if (ticket.creatorId !== ctx.session.user.id) throw new ActionError('Unauthorized') + if (ticket.status === 'closed') throw new ActionError('Ticket is closed') await prisma.websiteTicketMessage.create({ data: { @@ -61,38 +61,38 @@ export const userReplyTicket = authAction({ schema: replyTicketSchema }, async ( message: ctx.data.message, isStaff: 0, }, - }); + }) // If ticket was in "waiting" (waiting for user), move back to open - if (ticket.status === "waiting") { + if (ticket.status === 'waiting') { await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, - data: { status: "open" }, - }); + data: { status: 'open' }, + }) } - return actionOk(); -}); + return actionOk() +}) export const closeTicketByUser = authAction( { schema: replyTicketSchema.pick({ ticketId: true }) }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }); + }) - if (!ticket) throw new ActionError("Ticket not found"); - if (ticket.creatorId !== ctx.session.user.id) throw new ActionError("Unauthorized"); - if (ticket.status === "closed") throw new ActionError("Ticket is already closed"); + if (!ticket) throw new ActionError('Ticket not found') + if (ticket.creatorId !== ctx.session.user.id) throw new ActionError('Unauthorized') + if (ticket.status === 'closed') throw new ActionError('Ticket is already closed') await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, - data: { status: "closed", closedAt: new Date() }, - }); + data: { status: 'closed', closedAt: new Date() }, + }) - return actionOk(); + return actionOk() }, -); +) // ── Admin actions ──────────────────────────────────────────────────── @@ -101,9 +101,9 @@ export const adminReplyTicket = adminAction( async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }); + }) - if (!ticket) throw new ActionError("Ticket not found"); + if (!ticket) throw new ActionError('Ticket not found') await prisma.websiteTicketMessage.create({ data: { @@ -112,118 +112,118 @@ export const adminReplyTicket = adminAction( message: ctx.data.message, isStaff: 1, }, - }); + }) // Auto-assign if not assigned yet - const updates: Record = { status: "waiting" }; + const updates: Record = { status: 'waiting' } if (!ticket.assigneeId) { - updates.assigneeId = ctx.session.user.id; + updates.assigneeId = ctx.session.user.id } await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, data: updates, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "ticket_reply", - target: "WebsiteTicket", + action: 'ticket_reply', + target: 'WebsiteTicket', targetId: ctx.data.ticketId, - }); + }) - return actionOk(); + return actionOk() }, -); +) export const updateTicketStatus = adminAction( { permission: PERMS.TICKETS_EDIT, schema: updateTicketStatusSchema }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }); + }) - if (!ticket) throw new ActionError("Ticket not found"); + if (!ticket) throw new ActionError('Ticket not found') - const data: Record = { status: ctx.data.status }; - if (ctx.data.status === "closed") { - data.closedAt = new Date(); + const data: Record = { status: ctx.data.status } + if (ctx.data.status === 'closed') { + data.closedAt = new Date() } - if (ctx.data.status === "in_progress" && !ticket.assigneeId) { - data.assigneeId = ctx.session.user.id; + if (ctx.data.status === 'in_progress' && !ticket.assigneeId) { + data.assigneeId = ctx.session.user.id } await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, data, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "ticket_status_change", - target: "WebsiteTicket", + action: 'ticket_status_change', + target: 'WebsiteTicket', targetId: ctx.data.ticketId, before: { status: ticket.status }, after: { status: ctx.data.status }, - }); + }) - return actionOk(); + return actionOk() }, -); +) export const assignTicket = adminAction( { permission: PERMS.TICKETS_EDIT, schema: assignTicketSchema }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }); + }) - if (!ticket) throw new ActionError("Ticket not found"); + if (!ticket) throw new ActionError('Ticket not found') await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, data: { assigneeId: ctx.data.assigneeId, - status: ctx.data.assigneeId ? "in_progress" : "open", + status: ctx.data.assigneeId ? 'in_progress' : 'open', }, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "ticket_assign", - target: "WebsiteTicket", + action: 'ticket_assign', + target: 'WebsiteTicket', targetId: ctx.data.ticketId, before: { assigneeId: ticket.assigneeId }, after: { assigneeId: ctx.data.assigneeId }, - }); + }) - return actionOk(); + return actionOk() }, -); +) export const updateTicketPriority = adminAction( { permission: PERMS.TICKETS_EDIT, schema: updateTicketPrioritySchema }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }); + }) - if (!ticket) throw new ActionError("Ticket not found"); + if (!ticket) throw new ActionError('Ticket not found') await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, data: { priority: ctx.data.priority }, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "ticket_priority_change", - target: "WebsiteTicket", + action: 'ticket_priority_change', + target: 'WebsiteTicket', targetId: ctx.data.ticketId, before: { priority: ticket.priority }, after: { priority: ctx.data.priority }, - }); + }) - return actionOk(); + return actionOk() }, -); +) diff --git a/src/actions/translations.ts b/src/actions/translations.ts index 9f15d916..fa0d0b5c 100644 --- a/src/actions/translations.ts +++ b/src/actions/translations.ts @@ -1,73 +1,76 @@ -"use server"; +'use server' -import fs from "node:fs/promises"; -import path from "node:path"; -import JSON5 from "json5"; -import { z } from "zod"; -import { CLIENT_TRANSLATION_FILES, getClientTranslationFile } from "@/lib/client-translation-files"; -import { patchJson5 } from "@/lib/json5-patch"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import fs from 'node:fs/promises' +import path from 'node:path' +import JSON5 from 'json5' +import { z } from 'zod' +import { CLIENT_TRANSLATION_FILES, getClientTranslationFile } from '@/lib/client-translation-files' +import { patchJson5 } from '@/lib/json5-patch' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' const saveTranslationsSchema = z.object({ - locale: z.enum(["en", "it"]), + locale: z.enum(['en', 'it']), data: z.record(z.string(), z.unknown()), -}); +}) export const saveTranslations = adminAction({ schema: saveTranslationsSchema }, async (ctx) => { - if (ctx.session.user.rank < 7) throw new ActionError("Forbidden"); + if (ctx.session.user.rank < 7) throw new ActionError('Forbidden') - const filePath = path.join(process.cwd(), "messages", `${ctx.data.locale}.json`); - await fs.writeFile(filePath, JSON.stringify(ctx.data.data, null, 2), "utf-8"); + const filePath = path.join(process.cwd(), 'messages', `${ctx.data.locale}.json`) + await fs.writeFile(filePath, JSON.stringify(ctx.data.data, null, 2), 'utf-8') - return actionOk(); -}); + return actionOk() +}) const saveClientTranslationsSchema = z.object({ fileId: z.enum(CLIENT_TRANSLATION_FILES.map((f) => f.id) as [string, ...string[]]), data: z.record(z.string(), z.string()), -}); +}) -export const saveClientTranslations = adminAction({ schema: saveClientTranslationsSchema }, async (ctx) => { - if (ctx.session.user.rank < 7) throw new ActionError("Forbidden"); +export const saveClientTranslations = adminAction( + { schema: saveClientTranslationsSchema }, + async (ctx) => { + if (ctx.session.user.rank < 7) throw new ActionError('Forbidden') - const file = getClientTranslationFile(ctx.data.fileId); - if (!file) throw new ActionError("Unknown file"); - if (file.readOnly) throw new ActionError("File is read-only"); + const file = getClientTranslationFile(ctx.data.fileId) + if (!file) throw new ActionError('Unknown file') + if (file.readOnly) throw new ActionError('File is read-only') - // file.relPath comes from CLIENT_TRANSLATION_FILES (closed enum) but - // Turbopack's static tracer can't prove that — without the hint it - // pulls the entire project into the NFT list. - const absPath = path.join(/*turbopackIgnore: true*/ process.cwd(), file.relPath); - const raw = await fs.readFile(absPath, "utf-8"); + // file.relPath comes from CLIENT_TRANSLATION_FILES (closed enum) but + // Turbopack's static tracer can't prove that — without the hint it + // pulls the entire project into the NFT list. + const absPath = path.join(/*turbopackIgnore: true*/ process.cwd(), file.relPath) + const raw = await fs.readFile(absPath, 'utf-8') - if (file.format === "json") { - // Plain JSON — no comments to preserve, just round-trip. - await fs.writeFile(absPath, JSON.stringify(ctx.data.data, null, 4), "utf-8"); - return actionOk({ commentsLost: false, unpatchedKeys: [] as string[] }); - } - - // JSON5: surgical line-level patch keeps headers and section comments - // intact. Falls back to a full re-serialization (which DOES drop comments) - // only when an edited key cannot be located via the patch contract. - const original: Record = {}; - const parsed = JSON5.parse(raw); - if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { - for (const [k, v] of Object.entries(parsed)) { - original[k] = v == null ? "" : String(v); + if (file.format === 'json') { + // Plain JSON — no comments to preserve, just round-trip. + await fs.writeFile(absPath, JSON.stringify(ctx.data.data, null, 4), 'utf-8') + return actionOk({ commentsLost: false, unpatchedKeys: [] as string[] }) } - } - const { content, unpatchedKeys } = patchJson5(raw, original, ctx.data.data); + // JSON5: surgical line-level patch keeps headers and section comments + // intact. Falls back to a full re-serialization (which DOES drop comments) + // only when an edited key cannot be located via the patch contract. + const original: Record = {} + const parsed = JSON5.parse(raw) + if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) { + for (const [k, v] of Object.entries(parsed)) { + original[k] = v == null ? '' : String(v) + } + } - if (unpatchedKeys.length === 0) { - await fs.writeFile(absPath, content, "utf-8"); - return actionOk({ commentsLost: false, unpatchedKeys }); - } + const { content, unpatchedKeys } = patchJson5(raw, original, ctx.data.data) - // At least one key could not be patched surgically (e.g. unusual - // formatting or a brand-new key). Fall back to a full re-serialization - // and warn the caller that comments were lost. - await fs.writeFile(absPath, JSON5.stringify(ctx.data.data, null, 4), "utf-8"); - return actionOk({ commentsLost: true, unpatchedKeys }); -}); + if (unpatchedKeys.length === 0) { + await fs.writeFile(absPath, content, 'utf-8') + return actionOk({ commentsLost: false, unpatchedKeys }) + } + + // At least one key could not be patched surgically (e.g. unusual + // formatting or a brand-new key). Fall back to a full re-serialization + // and warn the caller that comments were lost. + await fs.writeFile(absPath, JSON5.stringify(ctx.data.data, null, 4), 'utf-8') + return actionOk({ commentsLost: true, unpatchedKeys }) + }, +) diff --git a/src/actions/users.ts b/src/actions/users.ts index aed67c5a..1ef75f3f 100644 --- a/src/actions/users.ts +++ b/src/actions/users.ts @@ -1,31 +1,36 @@ -"use server"; +'use server' -import crypto from "node:crypto"; -import { hash } from "bcryptjs"; -import { z } from "zod"; -import { Prisma } from "@/generated/prisma/client"; -import { PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { ActionError, actionOk } from "@/lib/safe-action-shared"; -import { logAudit } from "@/lib/services/audit"; -import { rcon } from "@/lib/services/rcon"; -import { notify } from "@/lib/services/webhook"; -import { banUserSchema, createUserSchema, giveBadgeSchema, updateUserSchema } from "@/lib/validators/user"; +import crypto from 'node:crypto' +import { hash } from 'bcryptjs' +import { z } from 'zod' +import { Prisma } from '@/generated/prisma/client' +import { PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { logAudit } from '@/lib/services/audit' +import { rcon } from '@/lib/services/rcon' +import { notify } from '@/lib/services/webhook' +import { + banUserSchema, + createUserSchema, + giveBadgeSchema, + updateUserSchema, +} from '@/lib/validators/user' -const DEFAULT_LOOK = "hr-115-42.hd-195-19.ch-3030-82.lg-275-1408.fa-1201.ca-1804-64"; +const DEFAULT_LOOK = 'hr-115-42.hd-195-19.ch-3030-82.lg-275-1408.fa-1201.ca-1804-64' export const createUser = adminAction( { permission: PERMS.USERS_EDIT, schema: createUserSchema }, async (ctx) => { - const { username, mail, password, rank, motto } = ctx.data; + const { username, mail, password, rank, motto } = ctx.data if (rank >= ctx.session.user.rank && ctx.session.user.rank < 7) { - throw new ActionError("Cannot assign rank equal or higher than your own"); + throw new ActionError('Cannot assign rank equal or higher than your own') } - const hashedPassword = await hash(password, 12); - const now = Math.floor(Date.now() / 1000); + const hashedPassword = await hash(password, 12) + const now = Math.floor(Date.now() / 1000) try { const user = await prisma.$transaction(async (tx) => { @@ -40,211 +45,221 @@ export const createUser = adminAction( credits: 5000, pixels: 5000, accountCreated: now, - ipRegister: "0.0.0.0", - ipCurrent: "0.0.0.0", + ipRegister: '0.0.0.0', + ipCurrent: '0.0.0.0', }, - }); + }) - await tx.usersSettings.create({ data: { userId: created.id } }); + await tx.usersSettings.create({ data: { userId: created.id } }) await tx.usersCurrency.createMany({ data: [ { userId: created.id, type: 0, amount: 5000 }, { userId: created.id, type: 5, amount: 5000 }, ], - }); + }) - return created; - }); + return created + }) logAudit({ userId: ctx.session.user.id, - action: "user_create", - target: "User", + action: 'user_create', + target: 'User', targetId: user.id, after: { username, mail, rank }, - }); + }) notify({ - action: "user_edit", + action: 'user_edit', actor: ctx.session.user.username, target: username, targetId: user.id, - details: "Account created by admin", - }); + details: 'Account created by admin', + }) - return actionOk({ id: user.id, username: user.username }); + return actionOk({ id: user.id, username: user.username }) } catch (err) { - if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === "P2002") { - const target = (err.meta?.target as string[]) ?? []; - if (target.includes("username")) throw new ActionError("Username already taken"); - if (target.includes("mail")) throw new ActionError("Email already registered"); - throw new ActionError("Username or email already in use"); + if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === 'P2002') { + const target = (err.meta?.target as string[]) ?? [] + if (target.includes('username')) throw new ActionError('Username already taken') + if (target.includes('mail')) throw new ActionError('Email already registered') + throw new ActionError('Username or email already in use') } - throw err; + throw err } }, -); +) const updateUserInput = updateUserSchema.extend({ id: z.coerce.number().int().positive(), -}); +}) export const updateUser = adminAction( { permission: PERMS.USERS_EDIT, schema: updateUserInput }, async (ctx) => { - const { id, diamonds, duckets, ...userData } = ctx.data; + const { id, diamonds, duckets, ...userData } = ctx.data - const targetUser = await guardRank(id, ctx.session.user.rank); + const targetUser = await guardRank(id, ctx.session.user.rank) - if (userData.rank !== undefined && userData.rank >= ctx.session.user.rank && ctx.session.user.rank < 7) { - throw new ActionError("Cannot assign rank equal or higher than your own"); + if ( + userData.rank !== undefined && + userData.rank >= ctx.session.user.rank && + ctx.session.user.rank < 7 + ) { + throw new ActionError('Cannot assign rank equal or higher than your own') } - await prisma.user.update({ where: { id }, data: userData }); + await prisma.user.update({ where: { id }, data: userData }) if (diamonds !== undefined) { await prisma.usersCurrency.upsert({ where: { userId_type: { userId: id, type: 5 } }, update: { amount: diamonds }, create: { userId: id, type: 5, amount: diamonds }, - }); + }) } if (duckets !== undefined) { await prisma.usersCurrency.upsert({ where: { userId_type: { userId: id, type: 0 } }, update: { amount: duckets }, create: { userId: id, type: 0, amount: duckets }, - }); + }) } logAudit({ userId: ctx.session.user.id, - action: "user_edit", - target: "User", + action: 'user_edit', + target: 'User', targetId: id, before: { username: targetUser.username, mail: targetUser.mail, rank: targetUser.rank }, after: userData, - }); + }) notify({ - action: "user_edit", + action: 'user_edit', actor: ctx.session.user.username, target: targetUser.username, targetId: id, - }); + }) - return actionOk(); + return actionOk() }, -); +) -const banInput = banUserSchema.extend({}); +const banInput = banUserSchema.extend({}) -export const banUser = adminAction({ permission: PERMS.USERS_BAN, schema: banInput }, async (ctx) => { - const { userId, reason, duration, type, ip } = ctx.data; +export const banUser = adminAction( + { permission: PERMS.USERS_BAN, schema: banInput }, + async (ctx) => { + const { userId, reason, duration, type, ip } = ctx.data - const targetUser = await guardRank(userId, ctx.session.user.rank); + const targetUser = await guardRank(userId, ctx.session.user.rank) - const now = Math.floor(Date.now() / 1000); - const banExpire = duration > 0 ? now + duration * 3600 : 0; + const now = Math.floor(Date.now() / 1000) + const banExpire = duration > 0 ? now + duration * 3600 : 0 - await prisma.ban.create({ - data: { - userId, - userStaffId: ctx.session.user.id, - timestamp: now, - banExpire, - banReason: reason, - type: type || "account", - ip: ip || "", - machineId: "", - }, - }); + await prisma.ban.create({ + data: { + userId, + userStaffId: ctx.session.user.id, + timestamp: now, + banExpire, + banReason: reason, + type: type || 'account', + ip: ip || '', + machineId: '', + }, + }) - await rcon.disconnectUser(userId); + await rcon.disconnectUser(userId) - logAudit({ - userId: ctx.session.user.id, - action: "ban", - target: "User", - targetId: userId, - after: { reason, type, duration }, - }); + logAudit({ + userId: ctx.session.user.id, + action: 'ban', + target: 'User', + targetId: userId, + after: { reason, type, duration }, + }) - notify({ - action: "ban", - actor: ctx.session.user.username, - target: targetUser.username, - details: reason, - }); + notify({ + action: 'ban', + actor: ctx.session.user.username, + target: targetUser.username, + details: reason, + }) - return actionOk(); -}); + return actionOk() + }, +) -const unbanInput = z.object({ userId: z.coerce.number().int().positive() }); +const unbanInput = z.object({ userId: z.coerce.number().int().positive() }) -export const unbanUser = adminAction({ permission: PERMS.USERS_BAN, schema: unbanInput }, async (ctx) => { - const { userId } = ctx.data; +export const unbanUser = adminAction( + { permission: PERMS.USERS_BAN, schema: unbanInput }, + async (ctx) => { + const { userId } = ctx.data - const targetUser = await guardRank(userId, ctx.session.user.rank); + const targetUser = await guardRank(userId, ctx.session.user.rank) - await prisma.ban.deleteMany({ where: { userId } }); + await prisma.ban.deleteMany({ where: { userId } }) - logAudit({ - userId: ctx.session.user.id, - action: "unban", - target: "User", - targetId: userId, - }); + logAudit({ + userId: ctx.session.user.id, + action: 'unban', + target: 'User', + targetId: userId, + }) - notify({ - action: "unban", - actor: ctx.session.user.username, - target: targetUser.username, - }); + notify({ + action: 'unban', + actor: ctx.session.user.username, + target: targetUser.username, + }) - return actionOk(); -}); + return actionOk() + }, +) export const giveBadge = adminAction( { permission: PERMS.USERS_EDIT, schema: giveBadgeSchema }, async (ctx) => { - const { userId, badgeCode } = ctx.data; + const { userId, badgeCode } = ctx.data - await guardRank(userId, ctx.session.user.rank); + await guardRank(userId, ctx.session.user.rank) - const existing = await prisma.usersBadges.findFirst({ where: { userId, badgeCode } }); - if (existing) throw new ActionError("Badge already assigned"); + const existing = await prisma.usersBadges.findFirst({ where: { userId, badgeCode } }) + if (existing) throw new ActionError('Badge already assigned') - await prisma.usersBadges.create({ data: { userId, badgeCode } }); - await rcon.giveBadge(userId, badgeCode); + await prisma.usersBadges.create({ data: { userId, badgeCode } }) + await rcon.giveBadge(userId, badgeCode) - return actionOk(); + return actionOk() }, -); +) // ── Remove Badge ──────────────────────────────────────────────────── const removeBadgeSchema = z.object({ userId: z.coerce.number().int().positive(), badgeCode: z.string().min(1), -}); +}) export const removeBadge = adminAction( { permission: PERMS.USERS_EDIT, schema: removeBadgeSchema }, async (ctx) => { - const { userId, badgeCode } = ctx.data; + const { userId, badgeCode } = ctx.data - await guardRank(userId, ctx.session.user.rank); + await guardRank(userId, ctx.session.user.rank) - const existing = await prisma.usersBadges.findFirst({ where: { userId, badgeCode } }); - if (!existing) throw new ActionError("Badge not found"); + const existing = await prisma.usersBadges.findFirst({ where: { userId, badgeCode } }) + if (!existing) throw new ActionError('Badge not found') - await prisma.usersBadges.delete({ where: { id: existing.id } }); - await rcon.removeBadge(userId, badgeCode); + await prisma.usersBadges.delete({ where: { id: existing.id } }) + await rcon.removeBadge(userId, badgeCode) - return actionOk(); + return actionOk() }, -); +) // ── Rank guard helper ─────────────────────────────────────────────── @@ -252,163 +267,169 @@ async function guardRank(targetUserId: number, sessionRank: number) { const target = await prisma.user.findUnique({ where: { id: targetUserId }, select: { username: true, rank: true, mail: true }, - }); - if (!target) throw new ActionError("User not found"); + }) + if (!target) throw new ActionError('User not found') if (target.rank >= sessionRank && sessionRank < 7) { - throw new ActionError("Cannot modify user with equal or higher rank"); + throw new ActionError('Cannot modify user with equal or higher rank') } - return target; + return target } // ── Reset Password ────────────────────────────────────────────────── const resetPasswordSchema = z.object({ userId: z.coerce.number().int().positive(), -}); +}) export const resetPassword = adminAction( { permission: PERMS.USERS_RESET_PASSWORD, schema: resetPasswordSchema }, async (ctx) => { - const target = await guardRank(ctx.data.userId, ctx.session.user.rank); + const target = await guardRank(ctx.data.userId, ctx.session.user.rank) - const newPassword = crypto.randomBytes(12).toString("base64url").slice(0, 16); - const hashed = await hash(newPassword, 10); + const newPassword = crypto.randomBytes(12).toString('base64url').slice(0, 16) + const hashed = await hash(newPassword, 10) await prisma.user.update({ where: { id: ctx.data.userId }, data: { password: hashed }, - }); + }) logAudit({ userId: ctx.session.user.id, - action: "reset_password", - target: "User", + action: 'reset_password', + target: 'User', targetId: ctx.data.userId, - }); + }) notify({ - action: "user_edit", + action: 'user_edit', actor: ctx.session.user.username, target: target.username, - details: "Password reset", - }); + details: 'Password reset', + }) - return actionOk({ newPassword }); + return actionOk({ newPassword }) }, -); +) // ── Disconnect User ───────────────────────────────────────────────── const disconnectSchema = z.object({ userId: z.coerce.number().int().positive(), -}); +}) export const disconnectUser = adminAction( { permission: PERMS.USERS_EDIT, schema: disconnectSchema }, async (ctx) => { - const target = await guardRank(ctx.data.userId, ctx.session.user.rank); - const success = await rcon.disconnectUser(ctx.data.userId); - if (!success) throw new ActionError("Failed to disconnect. Is the emulator running?"); + const target = await guardRank(ctx.data.userId, ctx.session.user.rank) + const success = await rcon.disconnectUser(ctx.data.userId) + if (!success) throw new ActionError('Failed to disconnect. Is the emulator running?') logAudit({ userId: ctx.session.user.id, - action: "user_disconnect", - target: "User", + action: 'user_disconnect', + target: 'User', targetId: ctx.data.userId, - }); + }) notify({ - action: "disconnect", + action: 'disconnect', actor: ctx.session.user.username, target: target.username, - }); + }) - return actionOk(); + return actionOk() }, -); +) // ── Alert User (in-game message) ──────────────────────────────────── const alertUserSchema = z.object({ userId: z.coerce.number().int().positive(), message: z.string().min(1).max(500), -}); +}) export const alertUser = adminAction( { permission: PERMS.USERS_EDIT, schema: alertUserSchema }, async (ctx) => { - const success = await rcon.alertUser(ctx.data.userId, ctx.data.message); - if (!success) throw new ActionError("Failed to send alert. Is the emulator running?"); - return actionOk(); + const success = await rcon.alertUser(ctx.data.userId, ctx.data.message) + if (!success) throw new ActionError('Failed to send alert. Is the emulator running?') + return actionOk() }, -); +) // ── Mute User ─────────────────────────────────────────────────────── const muteSchema = z.object({ userId: z.coerce.number().int().positive(), duration: z.coerce.number().int().min(0).default(0), -}); +}) -export const muteUser = adminAction({ permission: PERMS.USERS_EDIT, schema: muteSchema }, async (ctx) => { - const _target = await guardRank(ctx.data.userId, ctx.session.user.rank); - const success = await rcon.muteUser(ctx.data.userId, ctx.data.duration); - if (!success) throw new ActionError("Failed to mute. Is the emulator running?"); +export const muteUser = adminAction( + { permission: PERMS.USERS_EDIT, schema: muteSchema }, + async (ctx) => { + const _target = await guardRank(ctx.data.userId, ctx.session.user.rank) + const success = await rcon.muteUser(ctx.data.userId, ctx.data.duration) + if (!success) throw new ActionError('Failed to mute. Is the emulator running?') - logAudit({ - userId: ctx.session.user.id, - action: "user_mute", - target: "User", - targetId: ctx.data.userId, - after: { duration: ctx.data.duration }, - }); + logAudit({ + userId: ctx.session.user.id, + action: 'user_mute', + target: 'User', + targetId: ctx.data.userId, + after: { duration: ctx.data.duration }, + }) - return actionOk(); -}); + return actionOk() + }, +) // ── Unmute User ───────────────────────────────────────────────────── const unmuteSchema = z.object({ userId: z.coerce.number().int().positive(), -}); +}) -export const unmuteUser = adminAction({ permission: PERMS.USERS_EDIT, schema: unmuteSchema }, async (ctx) => { - await guardRank(ctx.data.userId, ctx.session.user.rank); - const success = await rcon.unmuteUser(ctx.data.userId); - if (!success) throw new ActionError("Failed to unmute. Is the emulator running?"); +export const unmuteUser = adminAction( + { permission: PERMS.USERS_EDIT, schema: unmuteSchema }, + async (ctx) => { + await guardRank(ctx.data.userId, ctx.session.user.rank) + const success = await rcon.unmuteUser(ctx.data.userId) + if (!success) throw new ActionError('Failed to unmute. Is the emulator running?') - logAudit({ - userId: ctx.session.user.id, - action: "user_unmute", - target: "User", - targetId: ctx.data.userId, - }); + logAudit({ + userId: ctx.session.user.id, + action: 'user_unmute', + target: 'User', + targetId: ctx.data.userId, + }) - return actionOk(); -}); + return actionOk() + }, +) // ── Send Credits via RCON ─────────────────────────────────────────── const sendCreditsSchema = z.object({ userId: z.coerce.number().int().positive(), amount: z.coerce.number().int().min(1).max(1000000), -}); +}) export const sendCredits = adminAction( { permission: PERMS.USERS_EDIT, schema: sendCreditsSchema }, async (ctx) => { - const _target = await guardRank(ctx.data.userId, ctx.session.user.rank); - const success = await rcon.giveCredits(ctx.data.userId, ctx.data.amount); - if (!success) throw new ActionError("Failed to send credits. Is the emulator running?"); + const _target = await guardRank(ctx.data.userId, ctx.session.user.rank) + const success = await rcon.giveCredits(ctx.data.userId, ctx.data.amount) + if (!success) throw new ActionError('Failed to send credits. Is the emulator running?') logAudit({ userId: ctx.session.user.id, - action: "user_send_credits", - target: "User", + action: 'user_send_credits', + target: 'User', targetId: ctx.data.userId, after: { amount: ctx.data.amount }, - }); + }) - return actionOk(); + return actionOk() }, -); +) diff --git a/src/actions/watch.ts b/src/actions/watch.ts index 42eb1f62..f9668acb 100644 --- a/src/actions/watch.ts +++ b/src/actions/watch.ts @@ -1,16 +1,16 @@ -"use server"; +'use server' -import { revalidateTag } from "next/cache"; -import { z } from "zod"; -import { PERMS } from "@/lib/permission-slugs"; -import { prisma } from "@/lib/prisma"; -import { adminAction } from "@/lib/safe-action"; -import { actionOk } from "@/lib/safe-action-shared"; +import { revalidateTag } from 'next/cache' +import { z } from 'zod' +import { PERMS } from '@/lib/permission-slugs' +import { prisma } from '@/lib/prisma' +import { adminAction } from '@/lib/safe-action' +import { actionOk } from '@/lib/safe-action-shared' const toggleWatchSchema = z.object({ targetUserId: z.coerce.number().int().positive(), reason: z.string().max(255).optional(), -}); +}) /** * Toggle a watch entry for the calling staff on the given target user. @@ -21,23 +21,23 @@ const toggleWatchSchema = z.object({ export const toggleUserWatch = adminAction( { permission: PERMS.USERS_VIEW, schema: toggleWatchSchema }, async (ctx) => { - const staffId = ctx.session.user.id; - const { targetUserId, reason } = ctx.data; + const staffId = ctx.session.user.id + const { targetUserId, reason } = ctx.data const existing = await prisma.userWatch.findUnique({ where: { staffId_targetUserId: { staffId, targetUserId } }, - }); + }) if (existing) { - await prisma.userWatch.delete({ where: { id: existing.id } }); - revalidateTag(`user-watch:${staffId}`, { expire: 0 }); - return actionOk({ watching: false }); + await prisma.userWatch.delete({ where: { id: existing.id } }) + revalidateTag(`user-watch:${staffId}`, { expire: 0 }) + return actionOk({ watching: false }) } await prisma.userWatch.create({ - data: { staffId, targetUserId, reason: reason ?? "" }, - }); - revalidateTag(`user-watch:${staffId}`, { expire: 0 }); - return actionOk({ watching: true }); + data: { staffId, targetUserId, reason: reason ?? '' }, + }) + revalidateTag(`user-watch:${staffId}`, { expire: 0 }) + return actionOk({ watching: true }) }, -); +) diff --git a/src/app/admin/analytics/activity/page.tsx b/src/app/admin/analytics/activity/page.tsx index 376ee137..32402e67 100644 --- a/src/app/admin/analytics/activity/page.tsx +++ b/src/app/admin/analytics/activity/page.tsx @@ -1,17 +1,17 @@ -import { MessageSquare, Shield, Terminal, Users } from "lucide-react"; -import { redirect } from "next/navigation"; -import { StatsCard } from "@/components/admin/stats-card"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; +import { MessageSquare, Shield, Terminal, Users } from 'lucide-react' +import { redirect } from 'next/navigation' +import { StatsCard } from '@/components/admin/stats-card' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' async function getActivityData() { - const now = Math.floor(Date.now() / 1000); - const todayStart = now - (now % 86400); - const weekAgo = now - 7 * 86400; + const now = Math.floor(Date.now() / 1000) + const todayStart = now - (now % 86400) + const weekAgo = now - 7 * 86400 // Daily activity breakdown — 4 GROUP BY queries instead of 28 sequential queries - const rangeStart = todayStart - 6 * 86400; + const rangeStart = todayStart - 6 * 86400 const [chatRows, cmdRows, banRows, regRows] = await Promise.all([ prisma.$queryRaw<{ day_bucket: bigint; count: bigint }[]>` SELECT FLOOR(timestamp / 86400) AS day_bucket, COUNT(*) AS count @@ -25,61 +25,57 @@ async function getActivityData() { prisma.$queryRaw<{ day_bucket: bigint; count: bigint }[]>` SELECT FLOOR(account_created / 86400) AS day_bucket, COUNT(*) AS count FROM users WHERE account_created >= ${rangeStart} GROUP BY day_bucket`, - ]); + ]) const toMap = (rows: { day_bucket: bigint; count: bigint }[]) => - new Map(rows.map((r) => [Number(r.day_bucket), Number(r.count)])); - const chatMap = toMap(chatRows); - const cmdMap = toMap(cmdRows); - const banMap = toMap(banRows); - const regMap = toMap(regRows); + new Map(rows.map((r) => [Number(r.day_bucket), Number(r.count)])) + const chatMap = toMap(chatRows) + const cmdMap = toMap(cmdRows) + const banMap = toMap(banRows) + const regMap = toMap(regRows) - const dailyData = []; + const dailyData = [] for (let i = 6; i >= 0; i--) { - const dayStart = todayStart - i * 86400; - const bucket = Math.floor(dayStart / 86400); - const date = new Date(dayStart * 1000); + const dayStart = todayStart - i * 86400 + const bucket = Math.floor(dayStart / 86400) + const date = new Date(dayStart * 1000) dailyData.push({ - label: date.toLocaleDateString("en", { weekday: "short", month: "short", day: "numeric" }), + label: date.toLocaleDateString('en', { weekday: 'short', month: 'short', day: 'numeric' }), chats: chatMap.get(bucket) ?? 0, commands: cmdMap.get(bucket) ?? 0, bans: banMap.get(bucket) ?? 0, registrations: regMap.get(bucket) ?? 0, - }); + }) } // Totals const [weekChatRows, weekCommandRows, weekBans, weekRegistrations] = await Promise.all([ - prisma.$queryRaw< - { count: bigint }[] - >`SELECT COUNT(*) AS count FROM chatlogs_room WHERE timestamp >= ${weekAgo}`, - prisma.$queryRaw< - { count: bigint }[] - >`SELECT COUNT(*) AS count FROM commandlogs WHERE timestamp >= ${weekAgo}`, + prisma.$queryRaw<{ count: bigint }[]>`SELECT COUNT(*) AS count FROM chatlogs_room WHERE timestamp >= ${weekAgo}`, + prisma.$queryRaw<{ count: bigint }[]>`SELECT COUNT(*) AS count FROM commandlogs WHERE timestamp >= ${weekAgo}`, prisma.ban.count({ where: { timestamp: { gte: weekAgo } } }), prisma.user.count({ where: { accountCreated: { gte: weekAgo } } }), - ]); - const weekChats = Number(weekChatRows[0]?.count ?? 0); - const weekCommands = Number(weekCommandRows[0]?.count ?? 0); + ]) + const weekChats = Number(weekChatRows[0]?.count ?? 0) + const weekCommands = Number(weekCommandRows[0]?.count ?? 0) // Most active users (by chat messages) const topChatters = await prisma.$queryRaw<{ userId: number; messages: bigint }[]>` SELECT user_from_id AS userId, COUNT(*) AS messages FROM chatlogs_room WHERE timestamp >= ${weekAgo} GROUP BY user_from_id ORDER BY messages DESC LIMIT 10 - `; + ` - const userIds = topChatters.map((c) => c.userId); + const userIds = topChatters.map((c) => c.userId) const users = await prisma.user.findMany({ where: { id: { in: userIds } }, select: { id: true, username: true }, - }); - const userMap = new Map(users.map((u) => [u.id, u.username])); + }) + const userMap = new Map(users.map((u) => [u.id, u.username])) const topChattersWithNames = topChatters.map((c) => ({ userId: c.userId, username: userMap.get(c.userId) ?? `User #${c.userId}`, messages: Number(c.messages), - })); + })) return { dailyData, @@ -88,16 +84,16 @@ async function getActivityData() { weekBans, weekRegistrations, topChatters: topChattersWithNames, - }; + } } export default async function ActivityPage() { - const { session, permissions } = await getAdminContext(); + const { session, permissions } = await getAdminContext() if (!canAccess(permissions, PERMS.ANALYTICS_VIEW, session.user.rank)) { - redirect("/admin"); + redirect('/admin') } - const data = await getActivityData(); + const data = await getActivityData() return (
@@ -178,7 +174,10 @@ export default async function ActivityPage() { ) : (
{data.topChatters.map((user, i) => ( -
+
{i + 1} @@ -194,5 +193,5 @@ export default async function ActivityPage() {
- ); + ) } diff --git a/src/app/admin/analytics/economy/page.tsx b/src/app/admin/analytics/economy/page.tsx index 59f95eb5..61e45368 100644 --- a/src/app/admin/analytics/economy/page.tsx +++ b/src/app/admin/analytics/economy/page.tsx @@ -1,47 +1,47 @@ -import { ArrowLeftRight, Coins, TrendingDown, TrendingUp } from "lucide-react"; -import dynamic from "next/dynamic"; -import { redirect } from "next/navigation"; -import { StatsCard } from "@/components/admin/stats-card"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Skeleton } from "@/components/ui/skeleton"; -import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; +import { ArrowLeftRight, Coins, TrendingDown, TrendingUp } from 'lucide-react' +import dynamic from 'next/dynamic' +import { redirect } from 'next/navigation' +import { StatsCard } from '@/components/admin/stats-card' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { Skeleton } from '@/components/ui/skeleton' +import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' const RevenueChart = dynamic( - () => import("@/components/admin/revenue-chart").then((m) => ({ default: m.RevenueChart })), + () => import('@/components/admin/revenue-chart').then((m) => ({ default: m.RevenueChart })), { loading: () => }, -); +) async function getEconomyData() { - const now = Math.floor(Date.now() / 1000); - const todayStart = now - (now % 86400); - const weekAgo = now - 7 * 86400; + const now = Math.floor(Date.now() / 1000) + const todayStart = now - (now % 86400) + const weekAgo = now - 7 * 86400 // Total currency in circulation — parallel instead of sequential const [creditsAgg, pixelsAgg, pointsAgg] = await Promise.all([ prisma.user.aggregate({ _sum: { credits: true } }), prisma.user.aggregate({ _sum: { pixels: true } }), prisma.user.aggregate({ _sum: { points: true } }), - ]); - const totalCredits = creditsAgg._sum.credits ?? 0; - const totalPixels = pixelsAgg._sum.pixels ?? 0; - const totalPoints = pointsAgg._sum.points ?? 0; + ]) + const totalCredits = creditsAgg._sum.credits ?? 0 + const totalPixels = pixelsAgg._sum.pixels ?? 0 + const totalPoints = pointsAgg._sum.points ?? 0 // Shop revenue (7 days) const shopRevenue = await prisma.logsShopPurchases.aggregate({ where: { timestamp: { gte: weekAgo } }, _sum: { costCredits: true, costPoints: true }, _count: true, - }); + }) // Marketplace stats - const marketplaceActive = await prisma.marketplaceItems.count({ where: { state: 1 } }); + const marketplaceActive = await prisma.marketplaceItems.count({ where: { state: 1 } }) const marketplaceSold = await prisma.marketplaceItems.count({ where: { state: 2, soldTimestamp: { gte: weekAgo } }, - }); + }) // Revenue chart (7 days) — single GROUP BY query instead of 7 sequential queries - const rangeStart = todayStart - 6 * 86400; + const rangeStart = todayStart - 6 * 86400 const revRows = await prisma.$queryRaw<{ day_bucket: bigint; credits: number; points: number }[]>` SELECT FLOOR(timestamp / 86400) AS day_bucket, COALESCE(SUM(cost_credits), 0) AS credits, @@ -49,55 +49,60 @@ async function getEconomyData() { FROM logs_shop_purchases WHERE timestamp >= ${rangeStart} GROUP BY day_bucket ORDER BY day_bucket - `; + ` const revMap = new Map( - revRows.map((r) => [Number(r.day_bucket), { credits: Number(r.credits), points: Number(r.points) }]), - ); - const revenueData = []; + revRows.map((r) => [ + Number(r.day_bucket), + { credits: Number(r.credits), points: Number(r.points) }, + ]), + ) + const revenueData = [] for (let i = 6; i >= 0; i--) { - const dayStart = todayStart - i * 86400; - const bucket = Math.floor(dayStart / 86400); - const date = new Date(dayStart * 1000); - const entry = revMap.get(bucket); + const dayStart = todayStart - i * 86400 + const bucket = Math.floor(dayStart / 86400) + const date = new Date(dayStart * 1000) + const entry = revMap.get(bucket) revenueData.push({ - label: date.toLocaleDateString("en", { weekday: "short" }), + label: date.toLocaleDateString('en', { weekday: 'short' }), credits: entry?.credits ?? 0, points: entry?.points ?? 0, - }); + }) } // Trades (7 days) const weekTrades = await prisma.roomTradeLog.count({ where: { timestamp: { gte: weekAgo } }, - }); + }) return { totalCredits, totalPixels, totalPoints, - shopPurchases: typeof shopRevenue._count === "number" ? shopRevenue._count : 0, + shopPurchases: typeof shopRevenue._count === 'number' ? shopRevenue._count : 0, shopCreditsSpent: shopRevenue._sum?.costCredits ?? 0, shopPointsSpent: shopRevenue._sum?.costPoints ?? 0, marketplaceActive, marketplaceSold, weekTrades, revenueData, - }; + } } export default async function EconomyPage() { - const { session, permissions } = await getAdminContext(); + const { session, permissions } = await getAdminContext() if (!canAccess(permissions, PERMS.ANALYTICS_VIEW, session.user.rank)) { - redirect("/admin"); + redirect('/admin') } - const data = await getEconomyData(); + const data = await getEconomyData() return (

Economy

-

Currency circulation, shop revenue and marketplace activity

+

+ Currency circulation, shop revenue and marketplace activity +

@@ -191,5 +196,5 @@ export default async function EconomyPage() {
- ); + ) } diff --git a/src/app/admin/analytics/page.tsx b/src/app/admin/analytics/page.tsx index d8680b11..4b6452eb 100644 --- a/src/app/admin/analytics/page.tsx +++ b/src/app/admin/analytics/page.tsx @@ -1,27 +1,28 @@ -import { ArrowLeftRight, Clock, DoorOpen, MessageSquare, TrendingUp, Users } from "lucide-react"; -import dynamic from "next/dynamic"; -import { redirect } from "next/navigation"; -import { StatsCard } from "@/components/admin/stats-card"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Skeleton } from "@/components/ui/skeleton"; -import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; +import { ArrowLeftRight, Clock, DoorOpen, MessageSquare, TrendingUp, Users } from 'lucide-react' +import dynamic from 'next/dynamic' +import { redirect } from 'next/navigation' +import { StatsCard } from '@/components/admin/stats-card' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { Skeleton } from '@/components/ui/skeleton' +import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' const DashboardChart = dynamic( - () => import("@/components/admin/dashboard-chart").then((m) => ({ default: m.DashboardChart })), + () => import('@/components/admin/dashboard-chart').then((m) => ({ default: m.DashboardChart })), { loading: () => }, -); +) const PeakHoursHeatmap = dynamic( - () => import("@/components/admin/peak-hours-heatmap").then((m) => ({ default: m.PeakHoursHeatmap })), + () => + import('@/components/admin/peak-hours-heatmap').then((m) => ({ default: m.PeakHoursHeatmap })), { loading: () => }, -); +) async function getAnalyticsData() { - const now = Math.floor(Date.now() / 1000); - const todayStart = now - (now % 86400); - const weekAgo = now - 7 * 86400; - const monthAgo = now - 30 * 86400; + const now = Math.floor(Date.now() / 1000) + const todayStart = now - (now % 86400) + const weekAgo = now - 7 * 86400 + const monthAgo = now - 30 * 86400 const [ totalUsers, @@ -35,17 +36,15 @@ async function getAnalyticsData() { weekBans, ] = await Promise.all([ prisma.user.count(), - prisma.user.count({ where: { online: "1" } }), + prisma.user.count({ where: { online: '1' } }), prisma.user.count({ where: { accountCreated: { gte: weekAgo } } }), prisma.user.count({ where: { accountCreated: { gte: monthAgo } } }), prisma.rooms.count(), prisma.rooms.count({ where: { users: { gt: 0 } } }), - prisma.$queryRaw< - { count: bigint }[] - >`SELECT COUNT(*) AS count FROM chatlogs_room WHERE timestamp >= ${weekAgo}`, + prisma.$queryRaw<{ count: bigint }[]>`SELECT COUNT(*) AS count FROM chatlogs_room WHERE timestamp >= ${weekAgo}`, prisma.roomTradeLog.count({ where: { timestamp: { gte: weekAgo } } }), prisma.ban.count({ where: { timestamp: { gte: weekAgo } } }), - ]); + ]) // Registration chart (30 days) — single GROUP BY query instead of 30 sequential queries const regRows = await prisma.$queryRaw<{ day_bucket: bigint; count: bigint }[]>` @@ -53,17 +52,17 @@ async function getAnalyticsData() { FROM users WHERE account_created >= ${monthAgo} GROUP BY day_bucket ORDER BY day_bucket - `; - const regCountMap = new Map(regRows.map((r) => [Number(r.day_bucket), Number(r.count)])); - const registrationChart = []; + ` + const regCountMap = new Map(regRows.map((r) => [Number(r.day_bucket), Number(r.count)])) + const registrationChart = [] for (let i = 29; i >= 0; i--) { - const dayStart = todayStart - i * 86400; - const bucket = Math.floor(dayStart / 86400); - const date = new Date(dayStart * 1000); + const dayStart = todayStart - i * 86400 + const bucket = Math.floor(dayStart / 86400) + const date = new Date(dayStart * 1000) registrationChart.push({ - label: date.toLocaleDateString("en", { month: "short", day: "numeric" }), + label: date.toLocaleDateString('en', { month: 'short', day: 'numeric' }), value: regCountMap.get(bucket) ?? 0, - }); + }) } // Peak hours — single GROUP BY query instead of fetching all user rows @@ -74,13 +73,13 @@ async function getAnalyticsData() { FROM users WHERE last_online >= ${weekAgo} GROUP BY d, h - `; - const grid: number[][] = Array.from({ length: 7 }, () => Array(24).fill(0)); - let max = 0; + ` + const grid: number[][] = Array.from({ length: 7 }, () => Array(24).fill(0)) + let max = 0 for (const r of peakRows) { - const count = Number(r.c); - grid[r.d][r.h] = count; - if (count > max) max = count; + const count = Number(r.c) + grid[r.d][r.h] = count + if (count > max) max = count } return { @@ -95,16 +94,16 @@ async function getAnalyticsData() { weekBans, registrationChart, peakHours: { grid, max }, - }; + } } export default async function AnalyticsPage() { - const { session, permissions } = await getAdminContext(); + const { session, permissions } = await getAdminContext() if (!canAccess(permissions, PERMS.ANALYTICS_VIEW, session.user.rank)) { - redirect("/admin"); + redirect('/admin') } - const data = await getAnalyticsData(); + const data = await getAnalyticsData() return (
@@ -188,5 +187,5 @@ export default async function AnalyticsPage() {
- ); + ) } diff --git a/src/app/admin/articles/[id]/page.tsx b/src/app/admin/articles/[id]/page.tsx index 4a4d0be2..7f2f4a83 100644 --- a/src/app/admin/articles/[id]/page.tsx +++ b/src/app/admin/articles/[id]/page.tsx @@ -39,11 +39,7 @@ export default async function EditArticle({

- {error ? ( -

- Error: {error} -

- ) : null} + {error ?

Error: {error}

: null} { "use server"; diff --git a/src/app/admin/articles/new/page.tsx b/src/app/admin/articles/new/page.tsx index 9acd1567..0e6896d1 100644 --- a/src/app/admin/articles/new/page.tsx +++ b/src/app/admin/articles/new/page.tsx @@ -21,11 +21,7 @@ export default async function NewArticle({ searchParams }: { searchParams: Promi

- {error ? ( -

- Error: {error} -

- ) : null} + {error ?

Error: {error}

: null} ); diff --git a/src/app/admin/articles/page.tsx b/src/app/admin/articles/page.tsx index c987311f..ec6fff91 100644 --- a/src/app/admin/articles/page.tsx +++ b/src/app/admin/articles/page.tsx @@ -35,11 +35,7 @@ export default async function AdminArticles({ searchParams }: { searchParams: Pr - {error ? ( -

- Error: {error} -

- ) : null} + {error ?

Error: {error}

: null}
diff --git a/src/app/admin/banners/banners-manager.tsx b/src/app/admin/banners/banners-manager.tsx index 8373bb78..39f0019b 100644 --- a/src/app/admin/banners/banners-manager.tsx +++ b/src/app/admin/banners/banners-manager.tsx @@ -1,64 +1,64 @@ -"use client"; +'use client' -import { Pencil, Plus, Trash2 } from "lucide-react"; -import { useState } from "react"; -import { createBanner, deleteBanner, updateBanner } from "@/actions/banners"; -import { Badge } from "@/components/ui/badge"; -import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { DateTimePicker } from "@/components/ui/date-time-picker"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { Switch } from "@/components/ui/switch"; -import { useServerAction } from "@/hooks/use-server-action"; +import { Pencil, Plus, Trash2 } from 'lucide-react' +import { useState } from 'react' +import { createBanner, deleteBanner, updateBanner } from '@/actions/banners' +import { Badge } from '@/components/ui/badge' +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { DateTimePicker } from '@/components/ui/date-time-picker' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' +import { Switch } from '@/components/ui/switch' +import { useServerAction } from '@/hooks/use-server-action' interface Banner { - id: number; - title: string; - subtitle: string; - image: string; - link: string; - color: string; - isActive: number; - sortOrder: number; - startDate: string | null; - endDate: string | null; + id: number + title: string + subtitle: string + image: string + link: string + color: string + isActive: number + sortOrder: number + startDate: string | null + endDate: string | null } interface Props { - banners: Banner[]; + banners: Banner[] } export function BannersManager({ banners }: Props) { - const { run, isPending } = useServerAction(); - const [showForm, setShowForm] = useState(false); - const [editingId, setEditingId] = useState(null); + const { run, isPending } = useServerAction() + const [showForm, setShowForm] = useState(false) + const [editingId, setEditingId] = useState(null) const [form, setForm] = useState({ - title: "", - subtitle: "", - image: "", - link: "", - color: "", + title: '', + subtitle: '', + image: '', + link: '', + color: '', isActive: 1, sortOrder: 0, - startDate: "" as string | null, - endDate: "" as string | null, - }); + startDate: '' as string | null, + endDate: '' as string | null, + }) function resetForm() { setForm({ - title: "", - subtitle: "", - image: "", - link: "", - color: "", + title: '', + subtitle: '', + image: '', + link: '', + color: '', isActive: 1, sortOrder: 0, - startDate: "", - endDate: "", - }); - setEditingId(null); - setShowForm(false); + startDate: '', + endDate: '', + }) + setEditingId(null) + setShowForm(false) } function handleEdit(b: Banner) { @@ -72,20 +72,20 @@ export function BannersManager({ banners }: Props) { sortOrder: b.sortOrder, startDate: b.startDate, endDate: b.endDate, - }); - setEditingId(b.id); - setShowForm(true); + }) + setEditingId(b.id) + setShowForm(true) } function handleSubmit(e: React.FormEvent) { - e.preventDefault(); - const data = { ...form, startDate: form.startDate || null, endDate: form.endDate || null }; + e.preventDefault() + const data = { ...form, startDate: form.startDate || null, endDate: form.endDate || null } if (editingId) { - run(() => updateBanner({ id: editingId, ...data }), { successMessage: "Banner updated!" }); + run(() => updateBanner({ id: editingId, ...data }), { successMessage: 'Banner updated!' }) } else { - run(() => createBanner(data), { successMessage: "Banner created!" }); + run(() => createBanner(data), { successMessage: 'Banner created!' }) } - resetForm(); + resetForm() } return ( @@ -93,8 +93,8 @@ export function BannersManager({ banners }: Props) {
- setForm({ ...form, link: e.target.value })} /> + setForm({ ...form, link: e.target.value })} + />
@@ -144,7 +147,7 @@ export function BannersManager({ banners }: Props) { setForm({ ...form, color: e.target.value })} />
@@ -188,7 +191,7 @@ export function BannersManager({ banners }: Props) { Cancel @@ -203,7 +206,10 @@ export function BannersManager({ banners }: Props) { {banners.map((b) => ( {b.image && ( -
+
)}
@@ -211,14 +217,19 @@ export function BannersManager({ banners }: Props) {

{b.title}

{b.subtitle &&

{b.subtitle}

}
- - {b.isActive ? "Active" : "Inactive"} + + {b.isActive ? 'Active' : 'Inactive'} {b.startDate && Scheduled}
-
- ); + ) } diff --git a/src/app/admin/banners/page.tsx b/src/app/admin/banners/page.tsx index 7fc6acda..f45bc7b6 100644 --- a/src/app/admin/banners/page.tsx +++ b/src/app/admin/banners/page.tsx @@ -1,17 +1,17 @@ -import { redirect } from "next/navigation"; -import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; -import { prisma } from "@/lib/prisma"; -import { BannersManager } from "./banners-manager"; +import { redirect } from 'next/navigation' +import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' +import { prisma } from '@/lib/prisma' +import { BannersManager } from './banners-manager' export default async function BannersPage() { - const { session, permissions } = await getAdminContext(); + const { session, permissions } = await getAdminContext() if (!canAccess(permissions, PERMS.BANNERS_VIEW, session.user.rank)) { - redirect("/admin"); + redirect('/admin') } const banners = await prisma.websiteBanner.findMany({ - orderBy: { sortOrder: "asc" }, - }); + orderBy: { sortOrder: 'asc' }, + }) return (
@@ -21,5 +21,5 @@ export default async function BannersPage() {
- ); + ) } diff --git a/src/app/admin/catalog/[id]/catalog-detail-tabs.tsx b/src/app/admin/catalog/[id]/catalog-detail-tabs.tsx index ab6fbe2f..00a69a0a 100644 --- a/src/app/admin/catalog/[id]/catalog-detail-tabs.tsx +++ b/src/app/admin/catalog/[id]/catalog-detail-tabs.tsx @@ -1,54 +1,54 @@ -"use client"; +'use client' -import { Languages, Package, Settings } from "lucide-react"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import type { CatalogItemData } from "./catalog-items-table"; -import { CatalogItemsTable } from "./catalog-items-table"; -import { CatalogPageForm } from "./catalog-page-form"; -import { CatalogTranslateTab } from "./catalog-translate-tab"; +import { Languages, Package, Settings } from 'lucide-react' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import type { CatalogItemData } from './catalog-items-table' +import { CatalogItemsTable } from './catalog-items-table' +import { CatalogPageForm } from './catalog-page-form' +import { CatalogTranslateTab } from './catalog-translate-tab' interface CatalogPageData { - id: number; - caption: string; - parentId: number; - pageLayout: string; - enabled: string; - visible: string; - minRank: number; - clubOnly: string; - orderNum: number; - iconImage: number; - iconColor: number; - pageHeadline: string; - pageTeaser: string; - pageSpecial: string | null; - pageText1: string | null; - pageText2: string | null; - pageTextDetails: string | null; - pageTextTeaser: string | null; + id: number + caption: string + parentId: number + pageLayout: string + enabled: string + visible: string + minRank: number + clubOnly: string + orderNum: number + iconImage: number + iconColor: number + pageHeadline: string + pageTeaser: string + pageSpecial: string | null + pageText1: string | null + pageText2: string | null + pageTextDetails: string | null + pageTextTeaser: string | null } interface BaseItemData { - id: number; - publicName: string; - itemName: string; - spriteId: number; - type: string; + id: number + publicName: string + itemName: string + spriteId: number + type: string } interface CatalogDetailTabsProps { - catalogPage: CatalogPageData; - items: CatalogItemData[]; - baseItems: BaseItemData[]; - catalogNameMap: Record; - childPages: { id: number; caption: string; enabled: string }[]; - pageId: number; - canEdit: boolean; - furniDataIdList: number[]; - furniDescriptionMap: Record; - furniRevisionMap: Record; - allPages: { id: number; caption: string }[]; - interactionTypes: string[]; + catalogPage: CatalogPageData + items: CatalogItemData[] + baseItems: BaseItemData[] + catalogNameMap: Record + childPages: { id: number; caption: string; enabled: string }[] + pageId: number + canEdit: boolean + furniDataIdList: number[] + furniDescriptionMap: Record + furniRevisionMap: Record + allPages: { id: number; caption: string }[] + interactionTypes: string[] } export function CatalogDetailTabs({ @@ -78,15 +78,14 @@ export function CatalogDetailTabs({ - Translate ({baseItems.length}) - {(() => { - const furniSet = new Set(furniDataIdList); - const missing = baseItems.filter((b) => !furniSet.has(b.id)).length; + Translate ({baseItems.length}){(() => { + const furniSet = new Set(furniDataIdList) + const missing = baseItems.filter((b) => !furniSet.has(b.id)).length return missing > 0 ? ( - + {missing} - ) : null; + ) : null })()} @@ -123,5 +122,5 @@ export function CatalogDetailTabs({ /> - ); + ) } diff --git a/src/app/admin/catalog/[id]/catalog-items-table.tsx b/src/app/admin/catalog/[id]/catalog-items-table.tsx index 3f6e3b2d..c3a80fa3 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table.tsx +++ b/src/app/admin/catalog/[id]/catalog-items-table.tsx @@ -2,6 +2,6 @@ * Re-export barrel for backward compatibility. * Implementation moved to ./catalog-items-table/ directory. */ -export { CatalogItemsTable } from "./catalog-items-table/catalog-items-table"; -export { FurniIcon } from "./catalog-items-table/furni-icon"; -export type { BaseItemData, CatalogItemData } from "./catalog-items-table/types"; +export { CatalogItemsTable } from './catalog-items-table/catalog-items-table' +export { FurniIcon } from './catalog-items-table/furni-icon' +export type { BaseItemData, CatalogItemData } from './catalog-items-table/types' diff --git a/src/app/admin/catalog/[id]/catalog-items-table/catalog-items-table.tsx b/src/app/admin/catalog/[id]/catalog-items-table/catalog-items-table.tsx index f7c38e62..bed97222 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/catalog-items-table.tsx +++ b/src/app/admin/catalog/[id]/catalog-items-table/catalog-items-table.tsx @@ -1,4 +1,4 @@ -"use client"; +'use client' import { closestCenter, @@ -9,9 +9,14 @@ import { PointerSensor, useSensor, useSensors, -} from "@dnd-kit/core"; -import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable"; -import { CSS } from "@dnd-kit/utilities"; +} from '@dnd-kit/core' +import { + arrayMove, + SortableContext, + useSortable, + verticalListSortingStrategy, +} from '@dnd-kit/sortable' +import { CSS } from '@dnd-kit/utilities' import { ArrowRightLeft, Copy, @@ -28,40 +33,59 @@ import { Search, Trash2, X, -} from "lucide-react"; -import { useRouter } from "next/navigation"; -import { useCallback, useEffect, useMemo, useState } from "react"; -import { toast } from "sonner"; +} from 'lucide-react' +import { useRouter } from 'next/navigation' +import { useCallback, useEffect, useMemo, useState } from 'react' +import { toast } from 'sonner' import { createCatalogItem, deleteCatalogItems, moveCatalogItems, reorderCatalogItems, updateCatalogItem, -} from "@/actions/catalog-items"; -import { BulkImportItems } from "@/components/admin/catalog/bulk-import-items"; -import { ItemsShopPreview } from "@/components/admin/catalog/items-shop-preview"; -import { QuickAddFurni } from "@/components/admin/catalog/quick-add-furni"; -import { Badge } from "@/components/ui/badge"; -import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Checkbox } from "@/components/ui/checkbox"; -import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { useServerAction } from "@/hooks/use-server-action"; -import { getSuggestions, recordMove } from "@/lib/move-suggestions"; -import { cn } from "@/lib/utils"; -import { InteractionTypeCombobox, MovePageCombobox, ToggleField } from "./field-helpers"; -import { FurniIcon } from "./furni-icon"; -import { SongPicker } from "./song-picker"; -import type { BaseItemData, CatalogItemData, InlineEdit } from "./types"; -import { DEFAULT_NEW_ITEM, getPointsLabel, POINTS_TYPES } from "./types"; +} from '@/actions/catalog-items' +import { BulkImportItems } from '@/components/admin/catalog/bulk-import-items' +import { ItemsShopPreview } from '@/components/admin/catalog/items-shop-preview' +import { QuickAddFurni } from '@/components/admin/catalog/quick-add-furni' +import { Badge } from '@/components/ui/badge' +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { Checkbox } from '@/components/ui/checkbox' +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select' +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { useServerAction } from '@/hooks/use-server-action' +import { getSuggestions, recordMove } from '@/lib/move-suggestions' +import { cn } from '@/lib/utils' +import { InteractionTypeCombobox, MovePageCombobox, ToggleField } from './field-helpers' +import { FurniIcon } from './furni-icon' +import { SongPicker } from './song-picker' +import type { BaseItemData, CatalogItemData, InlineEdit } from './types' +import { DEFAULT_NEW_ITEM, getPointsLabel, POINTS_TYPES } from './types' -export type { BaseItemData, CatalogItemData }; +export type { BaseItemData, CatalogItemData } // ── Sortable row wrapper (dnd-kit) ───────────────────────────── function SortableRow({ @@ -69,22 +93,22 @@ function SortableRow({ className, children, }: { - id: number; - className?: string; - children: (props: { dragHandleProps: React.HTMLAttributes }) => React.ReactNode; + id: number + className?: string + children: (props: { dragHandleProps: React.HTMLAttributes }) => React.ReactNode }) { const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id, - }); + }) const style: React.CSSProperties = { transform: CSS.Transform.toString(transform), transition, opacity: isDragging ? 0.35 : 1, - }; + } const dragHandleProps = { ...attributes, ...listeners, - } as unknown as React.HTMLAttributes; + } as unknown as React.HTMLAttributes return ( } @@ -93,17 +117,17 @@ function SortableRow({ > {children({ dragHandleProps })} - ); + ) } interface CatalogItemsTableProps { - items: CatalogItemData[]; - pageId: number; - pageLayout: string; - canEdit: boolean; - interactionTypes: string[]; - furniRevisionMap: Record; - allPages: { id: number; caption: string }[]; + items: CatalogItemData[] + pageId: number + pageLayout: string + canEdit: boolean + interactionTypes: string[] + furniRevisionMap: Record + allPages: { id: number; caption: string }[] } export function CatalogItemsTable({ @@ -115,24 +139,24 @@ export function CatalogItemsTable({ furniRevisionMap, allPages, }: CatalogItemsTableProps) { - const router = useRouter(); - const { run, isPending } = useServerAction(); - const [addOpen, setAddOpen] = useState(false); - const [editingItem, setEditingItem] = useState(null); - const [editingBase, setEditingBase] = useState(null); - const [savingItemId, setSavingItemId] = useState(null); + const router = useRouter() + const { run, isPending } = useServerAction() + const [addOpen, setAddOpen] = useState(false) + const [editingItem, setEditingItem] = useState(null) + const [editingBase, setEditingBase] = useState(null) + const [savingItemId, setSavingItemId] = useState(null) - const [newItem, setNewItem] = useState({ ...DEFAULT_NEW_ITEM }); + const [newItem, setNewItem] = useState({ ...DEFAULT_NEW_ITEM }) // ── View mode (table / grid) ──────────────────────────────────── - const [viewMode, setViewMode] = useState<"table" | "grid">("table"); + const [viewMode, setViewMode] = useState<'table' | 'grid'>('table') // ── Search / Filter ───────────────────────────────────────────── - const [searchQuery, setSearchQuery] = useState(""); + const [searchQuery, setSearchQuery] = useState('') const filteredItems = useMemo(() => { - if (!searchQuery.trim()) return items; - const q = searchQuery.toLowerCase(); + if (!searchQuery.trim()) return items + const q = searchQuery.toLowerCase() return items.filter( (item) => item.catalogName.toLowerCase().includes(q) || @@ -140,47 +164,47 @@ export function CatalogItemsTable({ item.baseName.toLowerCase().includes(q) || item.itemIds.includes(q) || String(item.id).includes(q), - ); - }, [items, searchQuery]); + ) + }, [items, searchQuery]) // ── Move items dialog ─────────────────────────────────────────── - const [moveOpen, setMoveOpen] = useState(false); - const [moveTargetPageId, setMoveTargetPageId] = useState(null); + const [moveOpen, setMoveOpen] = useState(false) + const [moveTargetPageId, setMoveTargetPageId] = useState(null) // ── Bulk price dialog ─────────────────────────────────────────── - const [bulkPriceOpen, setBulkPriceOpen] = useState(false); - const [bulkPriceField, setBulkPriceField] = useState<"costCredits" | "costPoints">("costCredits"); - const [bulkPriceMode, setBulkPriceMode] = useState<"set" | "add" | "percent">("set"); - const [bulkPriceValue, setBulkPriceValue] = useState(0); + const [bulkPriceOpen, setBulkPriceOpen] = useState(false) + const [bulkPriceField, setBulkPriceField] = useState<'costCredits' | 'costPoints'>('costCredits') + const [bulkPriceMode, setBulkPriceMode] = useState<'set' | 'add' | 'percent'>('set') + const [bulkPriceValue, setBulkPriceValue] = useState(0) // ── Drag & Drop (dnd-kit) ─────────────────────────────────────── - const [activeDragId, setActiveDragId] = useState(null); - const [itemOrder, setItemOrder] = useState(items.map((i) => i.id)); - const dndSensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 8 } })); + const [activeDragId, setActiveDragId] = useState(null) + const [itemOrder, setItemOrder] = useState(items.map((i) => i.id)) + const dndSensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 8 } })) const orderedFilteredItems = useMemo(() => { - if (searchQuery.trim()) return filteredItems; - const orderMap = new Map(itemOrder.map((id, idx) => [id, idx])); - return [...filteredItems].sort((a, b) => (orderMap.get(a.id) ?? 0) - (orderMap.get(b.id) ?? 0)); - }, [filteredItems, itemOrder, searchQuery]); + if (searchQuery.trim()) return filteredItems + const orderMap = new Map(itemOrder.map((id, idx) => [id, idx])) + return [...filteredItems].sort((a, b) => (orderMap.get(a.id) ?? 0) - (orderMap.get(b.id) ?? 0)) + }, [filteredItems, itemOrder, searchQuery]) // ── Selection ──────────────────────────────────────────────────── - const [selected, setSelected] = useState>(new Set()); + const [selected, setSelected] = useState>(new Set()) const toggleOne = useCallback((id: number) => { setSelected((prev) => { - const next = new Set(prev); - if (next.has(id)) next.delete(id); - else next.add(id); - return next; - }); - }, []); + const next = new Set(prev) + if (next.has(id)) next.delete(id) + else next.add(id) + return next + }) + }, []) const toggleAll = useCallback(() => { setSelected((prev) => prev.size === filteredItems.length ? new Set() : new Set(filteredItems.map((i) => i.id)), - ); - }, [filteredItems]); + ) + }, [filteredItems]) // ── Inline edits ───────────────────────────────────────────────── const [inlineEdits, setInlineEdits] = useState>( @@ -195,65 +219,65 @@ export function CatalogItemsTable({ }, ]), ), - ); + ) function updateInline(id: number, key: keyof InlineEdit, value: string | number) { setInlineEdits((prev) => ({ ...prev, [id]: { ...prev[id], [key]: value }, - })); + })) } const isItemModified = useCallback( (item: CatalogItemData) => { - const edit = inlineEdits[item.id]; - if (!edit) return false; + const edit = inlineEdits[item.id] + if (!edit) return false return ( edit.costCredits !== item.costCredits || edit.costPoints !== item.costPoints || edit.pointsType !== item.pointsType || edit.amount !== item.amount - ); + ) }, [inlineEdits], - ); + ) - const modifiedItems = useMemo(() => items.filter(isItemModified), [items, isItemModified]); + const modifiedItems = useMemo(() => items.filter(isItemModified), [items, isItemModified]) const hasOrderChanges = useMemo(() => { - const originalOrder = items.map((i) => i.id); - return itemOrder.some((id, idx) => id !== originalOrder[idx]); - }, [items, itemOrder]); + const originalOrder = items.map((i) => i.id) + return itemOrder.some((id, idx) => id !== originalOrder[idx]) + }, [items, itemOrder]) - const hasUnsavedChanges = modifiedItems.length > 0 || hasOrderChanges; + const hasUnsavedChanges = modifiedItems.length > 0 || hasOrderChanges // Warn before navigating away with unsaved changes useEffect(() => { - if (!hasUnsavedChanges) return; + if (!hasUnsavedChanges) return function onBeforeUnload(e: BeforeUnloadEvent) { - e.preventDefault(); + e.preventDefault() } - window.addEventListener("beforeunload", onBeforeUnload); - return () => window.removeEventListener("beforeunload", onBeforeUnload); - }, [hasUnsavedChanges]); + window.addEventListener('beforeunload', onBeforeUnload) + return () => window.removeEventListener('beforeunload', onBeforeUnload) + }, [hasUnsavedChanges]) // Ctrl+S / Cmd+S to save modified items useEffect(() => { - if (!canEdit) return; + if (!canEdit) return function onKeyDown(e: KeyboardEvent) { - if ((e.metaKey || e.ctrlKey) && e.key === "s") { - e.preventDefault(); - if (modifiedItems.length > 0) handleSaveAllModified(); - else if (hasOrderChanges) handleSaveOrder(); + if ((e.metaKey || e.ctrlKey) && e.key === 's') { + e.preventDefault() + if (modifiedItems.length > 0) handleSaveAllModified() + else if (hasOrderChanges) handleSaveOrder() } } - document.addEventListener("keydown", onKeyDown); - return () => document.removeEventListener("keydown", onKeyDown); - }); + document.addEventListener('keydown', onKeyDown) + return () => document.removeEventListener('keydown', onKeyDown) + }) function resetInlineEdit(id: number) { - const item = items.find((i) => i.id === id); - if (!item) return; + const item = items.find((i) => i.id === id) + if (!item) return setInlineEdits((prev) => ({ ...prev, [id]: { @@ -262,7 +286,7 @@ export function CatalogItemsTable({ pointsType: item.pointsType, amount: item.amount, }, - })); + })) } function resetAllEdits() { @@ -278,20 +302,20 @@ export function CatalogItemsTable({ }, ]), ), - ); + ) } // ── Open edit dialog ─────────────────────────────────────────── function openEditDialog(item: CatalogItemData) { - setEditingItem({ ...item }); - setEditingBase(item.baseItem ? { ...item.baseItem } : null); + setEditingItem({ ...item }) + setEditingBase(item.baseItem ? { ...item.baseItem } : null) } // ── Save single item inline ────────────────────────────────────── async function handleSaveOne(item: CatalogItemData) { - const edit = inlineEdits[item.id]; - if (!edit) return; - setSavingItemId(item.id); + const edit = inlineEdits[item.id] + if (!edit) return + setSavingItemId(item.id) run( () => @@ -317,25 +341,25 @@ export function CatalogItemsTable({ successMessage: `Item #${item.id} saved.`, errorMessage: `Failed to save item #${item.id}.`, onSuccess: () => { - setSavingItemId(null); - router.refresh(); + setSavingItemId(null) + router.refresh() }, }, - ); + ) } // ── Save all modified items ────────────────────────────────────── async function handleSaveAllModified() { - if (modifiedItems.length === 0) return; + if (modifiedItems.length === 0) return run( async () => { - let savedCount = 0; - let failedCount = 0; + let savedCount = 0 + let failedCount = 0 for (const item of modifiedItems) { - const edit = inlineEdits[item.id]; - if (!edit) continue; + const edit = inlineEdits[item.id] + if (!edit) continue const result = await updateCatalogItem({ id: item.id, @@ -354,137 +378,137 @@ export function CatalogItemsTable({ clubOnly: item.clubOnly, extradata: item.extradata, }, - }); + }) - if (result.ok) savedCount++; - else failedCount++; + if (result.ok) savedCount++ + else failedCount++ } if (failedCount > 0) { - return { ok: false as const, error: `Saved ${savedCount}, failed ${failedCount}.` }; + return { ok: false as const, error: `Saved ${savedCount}, failed ${failedCount}.` } } - return { ok: true as const, data: { savedCount } }; + return { ok: true as const, data: { savedCount } } }, { successMessage: `Saved ${modifiedItems.length} item(s).`, - errorMessage: "Failed to save items.", + errorMessage: 'Failed to save items.', }, - ); + ) } // ── Bulk delete selected ───────────────────────────────────────── async function handleBulkDelete() { - if (selected.size === 0) return; - if (!confirm(`Delete ${selected.size} selected item(s)?`)) return; + if (selected.size === 0) return + if (!confirm(`Delete ${selected.size} selected item(s)?`)) return run(() => deleteCatalogItems({ ids: [...selected] }), { successMessage: `Deleted ${selected.size} item(s).`, - errorMessage: "Failed to delete items.", + errorMessage: 'Failed to delete items.', onSuccess: () => { - setSelected(new Set()); - router.refresh(); + setSelected(new Set()) + router.refresh() }, - }); + }) } // ── Move selected items to another page ───────────────────────── async function handleMoveItems() { - if (selected.size === 0 || !moveTargetPageId) return; + if (selected.size === 0 || !moveTargetPageId) return // Record move patterns for all selected items for (const id of selected) { - const item = items.find((i) => i.id === id); + const item = items.find((i) => i.id === id) if (item) { recordMove({ interactionType: item.baseItem?.interactionType, itemName: item.baseItemName, targetPageId: moveTargetPageId, - }); + }) } } run(() => moveCatalogItems({ ids: [...selected], targetPageId: moveTargetPageId }), { successMessage: `Moved ${selected.size} item(s) to page #${moveTargetPageId}.`, - errorMessage: "Failed to move items.", + errorMessage: 'Failed to move items.', onSuccess: () => { - setSelected(new Set()); - setMoveOpen(false); - setMoveTargetPageId(null); - router.refresh(); + setSelected(new Set()) + setMoveOpen(false) + setMoveTargetPageId(null) + router.refresh() }, - }); + }) } // ── Apply bulk price update to inline edits ──────────────────── function applyBulkPrice() { - const targetIds = selected.size > 0 ? selected : new Set(filteredItems.map((i) => i.id)); + const targetIds = selected.size > 0 ? selected : new Set(filteredItems.map((i) => i.id)) setInlineEdits((prev) => { - const next = { ...prev }; + const next = { ...prev } for (const id of targetIds) { - const edit = next[id]; - if (!edit) continue; - const currentVal = edit[bulkPriceField]; - let newVal: number; - if (bulkPriceMode === "set") { - newVal = bulkPriceValue; - } else if (bulkPriceMode === "add") { - newVal = currentVal + bulkPriceValue; + const edit = next[id] + if (!edit) continue + const currentVal = edit[bulkPriceField] + let newVal: number + if (bulkPriceMode === 'set') { + newVal = bulkPriceValue + } else if (bulkPriceMode === 'add') { + newVal = currentVal + bulkPriceValue } else { - newVal = Math.round(currentVal * (1 + bulkPriceValue / 100)); + newVal = Math.round(currentVal * (1 + bulkPriceValue / 100)) } - next[id] = { ...edit, [bulkPriceField]: Math.max(0, newVal) }; + next[id] = { ...edit, [bulkPriceField]: Math.max(0, newVal) } } - return next; - }); - setBulkPriceOpen(false); - toast.success(`Price update applied to ${targetIds.size} item(s). Save to persist.`); + return next + }) + setBulkPriceOpen(false) + toast.success(`Price update applied to ${targetIds.size} item(s). Save to persist.`) } // ── Drag & Drop handlers (dnd-kit) ────────────────────────────── const handleDragStart = useCallback((event: DragStartEvent) => { - setActiveDragId(Number(event.active.id)); - }, []); + setActiveDragId(Number(event.active.id)) + }, []) const handleDragEnd = useCallback((event: DragEndEvent) => { - const { active, over } = event; - setActiveDragId(null); - if (!over || active.id === over.id) return; + const { active, over } = event + setActiveDragId(null) + if (!over || active.id === over.id) return setItemOrder((prev) => { - const fromIdx = prev.indexOf(Number(active.id)); - const toIdx = prev.indexOf(Number(over.id)); - if (fromIdx === -1 || toIdx === -1) return prev; - return arrayMove(prev, fromIdx, toIdx); - }); - }, []); + const fromIdx = prev.indexOf(Number(active.id)) + const toIdx = prev.indexOf(Number(over.id)) + if (fromIdx === -1 || toIdx === -1) return prev + return arrayMove(prev, fromIdx, toIdx) + }) + }, []) const handleDragCancel = useCallback(() => { - setActiveDragId(null); - }, []); + setActiveDragId(null) + }, []) async function handleSaveOrder() { - const orders = itemOrder.map((id, idx) => ({ id, orderNumber: idx + 1 })); + const orders = itemOrder.map((id, idx) => ({ id, orderNumber: idx + 1 })) run(() => reorderCatalogItems({ orders }), { - successMessage: "Item order saved.", - errorMessage: "Failed to save order.", - }); + successMessage: 'Item order saved.', + errorMessage: 'Failed to save order.', + }) } function resetOrder() { - setItemOrder(items.map((i) => i.id)); + setItemOrder(items.map((i) => i.id)) } // Helper to get furni revision info for an item function getFurniInfo(item: CatalogItemData) { const firstBaseId = item.itemIds - .split(";") + .split(';') .map(Number) - .find((n) => n > 0); - if (!firstBaseId) return { classname: item.baseItemName, revision: 0 }; - const furni = furniRevisionMap[firstBaseId]; + .find((n) => n > 0) + if (!firstBaseId) return { classname: item.baseItemName, revision: 0 } + const furni = furniRevisionMap[firstBaseId] return furni ? { classname: furni.classname || item.baseItemName, revision: furni.revision } - : { classname: item.baseItemName, revision: 0 }; + : { classname: item.baseItemName, revision: 0 } } // ── Original CRUD handlers ─────────────────────────────────────── @@ -494,62 +518,62 @@ export function CatalogItemsTable({ createCatalogItem({ ...newItem, pageId, - haveOffer: newItem.haveOffer as "0" | "1", - clubOnly: newItem.clubOnly as "0" | "1", + haveOffer: newItem.haveOffer as '0' | '1', + clubOnly: newItem.clubOnly as '0' | '1', }), { - successMessage: "Item added.", - errorMessage: "Failed to add item", + successMessage: 'Item added.', + errorMessage: 'Failed to add item', onSuccess: () => { - setAddOpen(false); - setNewItem({ ...DEFAULT_NEW_ITEM }); - router.refresh(); + setAddOpen(false) + setNewItem({ ...DEFAULT_NEW_ITEM }) + router.refresh() }, }, - ); + ) } async function handleDeleteItem(id: number) { - if (!confirm("Delete this catalog item?")) return; + if (!confirm('Delete this catalog item?')) return run(() => deleteCatalogItems({ ids: [id] }), { - successMessage: "Item deleted.", - errorMessage: "Failed to delete item.", - }); + successMessage: 'Item deleted.', + errorMessage: 'Failed to delete item.', + }) } // ── Move single item to another page ───────────────────────── - const [moveOneId, setMoveOneId] = useState(null); - const [moveOneTarget, setMoveOneTarget] = useState(null); + const [moveOneId, setMoveOneId] = useState(null) + const [moveOneTarget, setMoveOneTarget] = useState(null) // Get the item being moved for suggestions - const moveOneItem = moveOneId ? items.find((i) => i.id === moveOneId) : null; + const moveOneItem = moveOneId ? items.find((i) => i.id === moveOneId) : null const moveOneSuggestions = useMemo(() => { - if (!moveOneItem) return []; + if (!moveOneItem) return [] return getSuggestions({ interactionType: moveOneItem.baseItem?.interactionType, itemName: moveOneItem.baseItemName, - }); - }, [moveOneItem]); + }) + }, [moveOneItem]) async function handleMoveSingleItem() { - if (!moveOneId || !moveOneTarget) return; + if (!moveOneId || !moveOneTarget) return // Record for learning before moving if (moveOneItem) { recordMove({ interactionType: moveOneItem.baseItem?.interactionType, itemName: moveOneItem.baseItemName, targetPageId: moveOneTarget, - }); + }) } run(() => moveCatalogItems({ ids: [moveOneId], targetPageId: moveOneTarget }), { successMessage: `Item #${moveOneId} moved to page #${moveOneTarget}.`, - errorMessage: "Failed to move item.", + errorMessage: 'Failed to move item.', onSuccess: () => { - setMoveOneId(null); - setMoveOneTarget(null); - router.refresh(); + setMoveOneId(null) + setMoveOneTarget(null) + router.refresh() }, - }); + }) } async function handleDuplicateItem(item: CatalogItemData) { @@ -568,19 +592,19 @@ export function CatalogItemsTable({ orderNumber: item.orderNumber + 1, offerId: item.offerId, songId: item.songId, - haveOffer: item.haveOffer as "0" | "1", - clubOnly: item.clubOnly as "0" | "1", + haveOffer: item.haveOffer as '0' | '1', + clubOnly: item.clubOnly as '0' | '1', extradata: item.extradata, }), { successMessage: `Item #${item.id} duplicated.`, - errorMessage: "Failed to duplicate item.", + errorMessage: 'Failed to duplicate item.', }, - ); + ) } async function handleUpdateItem() { - if (!editingItem) return; + if (!editingItem) return run( () => updateCatalogItem({ @@ -612,14 +636,14 @@ export function CatalogItemsTable({ }), { successMessage: `Item #${editingItem.id} updated.`, - errorMessage: "Failed to update item", + errorMessage: 'Failed to update item', onSuccess: () => { - setEditingItem(null); - setEditingBase(null); - router.refresh(); + setEditingItem(null) + setEditingBase(null) + router.refresh() }, }, - ); + ) } // ── Add Item Form Fields (for "Add" dialog) ─────────────────── @@ -627,18 +651,21 @@ export function CatalogItemsTable({ data, onChange, }: { - data: typeof DEFAULT_NEW_ITEM; - onChange: (key: string, value: string | number) => void; + data: typeof DEFAULT_NEW_ITEM + onChange: (key: string, value: string | number) => void }) { return (
- onChange("catalogName", e.target.value)} /> + onChange('catalogName', e.target.value)} + />
- onChange("itemIds", e.target.value)} /> + onChange('itemIds', e.target.value)} />
@@ -647,7 +674,7 @@ export function CatalogItemsTable({ onChange("costCredits", parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange('costCredits', parseInt(e.target.value, 10) || 0)} />
@@ -655,14 +682,14 @@ export function CatalogItemsTable({ onChange("costPoints", parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange('costPoints', parseInt(e.target.value, 10) || 0)} />
onChange("amount", parseInt(e.target.value, 10) || 1)} + onChange={(e) => onChange('amount', parseInt(e.target.value, 10) || 1)} />
@@ -692,7 +719,7 @@ export function CatalogItemsTable({ onChange("orderNumber", parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange('orderNumber', parseInt(e.target.value, 10) || 0)} />
@@ -700,7 +727,7 @@ export function CatalogItemsTable({ onChange("offerId", parseInt(e.target.value, 10))} + onChange={(e) => onChange('offerId', parseInt(e.target.value, 10))} />
@@ -711,7 +738,7 @@ export function CatalogItemsTable({ onChange("limitedSells", parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange('limitedSells', parseInt(e.target.value, 10) || 0)} />
@@ -719,7 +746,7 @@ export function CatalogItemsTable({ onChange("limitedStack", parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange('limitedStack', parseInt(e.target.value, 10) || 0)} />
@@ -727,7 +754,7 @@ export function CatalogItemsTable({
- onChange('haveOffer', v)}> @@ -739,7 +766,7 @@ export function CatalogItemsTable({
- onChange('clubOnly', v)}> @@ -755,12 +782,12 @@ export function CatalogItemsTable({ onChange("extradata", e.target.value)} + onChange={(e) => onChange('extradata', e.target.value)} placeholder="Optional extra data" />
- ); + ) } return ( @@ -785,12 +812,12 @@ export function CatalogItemsTable({
- @@ -858,7 +890,12 @@ export function CatalogItemsTable({ )} {modifiedItems.length > 0 && ( <> - @@ -909,10 +946,11 @@ export function CatalogItemsTable({
You have unsaved changes ( - {modifiedItems.length > 0 ? `${modifiedItems.length} item(s) modified` : ""} - {modifiedItems.length > 0 && hasOrderChanges ? ", " : ""} - {hasOrderChanges ? "order changed" : ""}). Press{" "} - Ctrl+S to save. + {modifiedItems.length > 0 ? `${modifiedItems.length} item(s) modified` : ''} + {modifiedItems.length > 0 && hasOrderChanges ? ', ' : ''} + {hasOrderChanges ? 'order changed' : ''}). Press{' '} + Ctrl+S to + save.
)} @@ -931,7 +969,7 @@ export function CatalogItemsTable({ @@ -954,7 +992,7 @@ export function CatalogItemsTable({

No items match "{searchQuery}".

- ) : viewMode === "grid" ? ( + ) : viewMode === 'grid' ? ( 0 && selected.size === filteredItems.length} + checked={ + filteredItems.length > 0 && selected.size === filteredItems.length + } onCheckedChange={toggleAll} aria-label="Select all" /> @@ -1001,20 +1041,17 @@ export function CatalogItemsTable({ > {orderedFilteredItems.map((item) => { - const pts = getPointsLabel(item.pointsType); - const edit = inlineEdits[item.id]; - const modified = isItemModified(item); - const isSaving = savingItemId === item.id; - const furniInfo = getFurniInfo(item); - const sortableDisabled = !canEdit || !!searchQuery; + const pts = getPointsLabel(item.pointsType) + const edit = inlineEdits[item.id] + const modified = isItemModified(item) + const isSaving = savingItemId === item.id + const furniInfo = getFurniInfo(item) + const sortableDisabled = !canEdit || !!searchQuery return ( {({ dragHandleProps }) => ( <> @@ -1043,7 +1080,10 @@ export function CatalogItemsTable({ )} - + {item.id} @@ -1053,7 +1093,7 @@ export function CatalogItemsTable({ {item.itemIds} - {item.baseItemName || "-"} + {item.baseItemName || '-'} {canEdit ? ( @@ -1064,7 +1104,7 @@ export function CatalogItemsTable({ onChange={(e) => updateInline( item.id, - "costCredits", + 'costCredits', parseInt(e.target.value, 10) || 0, ) } @@ -1076,23 +1116,27 @@ export function CatalogItemsTable({ type="number" value={edit?.costPoints ?? item.costPoints} onChange={(e) => - updateInline(item.id, "costPoints", parseInt(e.target.value, 10) || 0) + updateInline( + item.id, + 'costPoints', + parseInt(e.target.value, 10) || 0, + ) } className="h-8 text-xs w-16" title="Points" /> - {pts.label.charAt(0)} + + {pts.label.charAt(0)} +
) : (
{item.costCredits > 0 && ( - - {item.costCredits}c{" "} - + {item.costCredits}c )} {item.costPoints > 0 && ( - {item.costPoints} {pts.label}{" "} + {item.costPoints} {pts.label}{' '} )} {item.costCredits === 0 && item.costPoints === 0 && ( @@ -1107,7 +1151,11 @@ export function CatalogItemsTable({ type="number" value={edit?.amount ?? item.amount} onChange={(e) => - updateInline(item.id, "amount", parseInt(e.target.value, 10) || 1) + updateInline( + item.id, + 'amount', + parseInt(e.target.value, 10) || 1, + ) } className="h-8 text-xs w-16" /> @@ -1118,17 +1166,17 @@ export function CatalogItemsTable({
- {item.haveOffer === "1" ? "Offer" : "No Offer"} + {item.haveOffer === '1' ? 'Offer' : 'No Offer'} {item.limitedStack > 0 && ( LTD {item.limitedSells}/{item.limitedStack} )} - {item.clubOnly === "1" && ( + {item.clubOnly === '1' && ( HC @@ -1210,7 +1258,7 @@ export function CatalogItemsTable({ )} - ); + ) })} @@ -1219,9 +1267,9 @@ export function CatalogItemsTable({ {activeDragId !== null && (() => { - const dragged = items.find((i) => i.id === activeDragId); - if (!dragged) return null; - const info = getFurniInfo(dragged); + const dragged = items.find((i) => i.id === activeDragId) + if (!dragged) return null + const info = getFurniInfo(dragged) return (
@@ -1232,7 +1280,7 @@ export function CatalogItemsTable({

#{dragged.id}

- ); + ) })()} @@ -1244,8 +1292,8 @@ export function CatalogItemsTable({ open={!!editingItem} onOpenChange={(open) => { if (!open) { - setEditingItem(null); - setEditingBase(null); + setEditingItem(null) + setEditingBase(null) } }} > @@ -1259,7 +1307,9 @@ export function CatalogItemsTable({
- {editingItem.catalogName || unnamed} + {editingItem.catalogName || ( + unnamed + )}
@@ -1277,7 +1327,9 @@ export function CatalogItemsTable({ Furniture Settings - {!editingBase && (N/A)} + {!editingBase && ( + (N/A) + )} @@ -1290,7 +1342,9 @@ export function CatalogItemsTable({ type="number" value={editingItem.costCredits} onChange={(e) => - setEditingItem((p) => p && { ...p, costCredits: parseInt(e.target.value, 10) || 0 }) + setEditingItem( + (p) => p && { ...p, costCredits: parseInt(e.target.value, 10) || 0 }, + ) } />
@@ -1300,7 +1354,9 @@ export function CatalogItemsTable({ type="number" value={editingItem.costPoints} onChange={(e) => - setEditingItem((p) => p && { ...p, costPoints: parseInt(e.target.value, 10) || 0 }) + setEditingItem( + (p) => p && { ...p, costPoints: parseInt(e.target.value, 10) || 0 }, + ) } />
@@ -1333,7 +1389,9 @@ export function CatalogItemsTable({ type="number" value={editingItem.amount} onChange={(e) => - setEditingItem((p) => p && { ...p, amount: parseInt(e.target.value, 10) || 1 }) + setEditingItem( + (p) => p && { ...p, amount: parseInt(e.target.value, 10) || 1 }, + ) } /> @@ -1343,7 +1401,9 @@ export function CatalogItemsTable({ type="number" value={editingItem.orderNumber} onChange={(e) => - setEditingItem((p) => p && { ...p, orderNumber: parseInt(e.target.value, 10) || 0 }) + setEditingItem( + (p) => p && { ...p, orderNumber: parseInt(e.target.value, 10) || 0 }, + ) } /> @@ -1353,7 +1413,9 @@ export function CatalogItemsTable({ type="number" value={editingItem.offerId} onChange={(e) => - setEditingItem((p) => p && { ...p, offerId: parseInt(e.target.value, 10) }) + setEditingItem( + (p) => p && { ...p, offerId: parseInt(e.target.value, 10) }, + ) } /> @@ -1423,7 +1485,9 @@ export function CatalogItemsTable({ setEditingItem((p) => p && { ...p, extradata: e.target.value })} + onChange={(e) => + setEditingItem((p) => p && { ...p, extradata: e.target.value }) + } placeholder="Optional extra data" /> @@ -1435,7 +1499,7 @@ export function CatalogItemsTable({ onChange={(id) => setEditingItem((p) => p && { ...p, songId: id })} />

- Select a soundtrack to play when this item is used in-game. Uploaded from{" "} + Select a soundtrack to play when this item is used in-game. Uploaded from{' '} /admin/sounds.

@@ -1503,7 +1567,9 @@ export function CatalogItemsTable({ type="number" value={editingBase.width} onChange={(e) => - setEditingBase((p) => p && { ...p, width: parseInt(e.target.value, 10) || 0 }) + setEditingBase( + (p) => p && { ...p, width: parseInt(e.target.value, 10) || 0 }, + ) } /> @@ -1513,7 +1579,9 @@ export function CatalogItemsTable({ type="number" value={editingBase.length} onChange={(e) => - setEditingBase((p) => p && { ...p, length: parseInt(e.target.value, 10) || 0 }) + setEditingBase( + (p) => p && { ...p, length: parseInt(e.target.value, 10) || 0 }, + ) } /> @@ -1543,7 +1611,9 @@ export function CatalogItemsTable({ setEditingBase((p) => p && { ...p, interactionType: v })} + onChange={(v) => + setEditingBase((p) => p && { ...p, interactionType: v }) + } types={interactionTypes} /> @@ -1575,37 +1645,51 @@ export function CatalogItemsTable({ setEditingBase((p) => p && { ...p, allowStack: v ? 1 : 0 })} + onChange={(v) => + setEditingBase((p) => p && { ...p, allowStack: v ? 1 : 0 }) + } /> setEditingBase((p) => p && { ...p, allowSit: v ? 1 : 0 })} + onChange={(v) => + setEditingBase((p) => p && { ...p, allowSit: v ? 1 : 0 }) + } /> setEditingBase((p) => p && { ...p, allowLay: v ? 1 : 0 })} + onChange={(v) => + setEditingBase((p) => p && { ...p, allowLay: v ? 1 : 0 }) + } /> setEditingBase((p) => p && { ...p, allowWalk: v ? 1 : 0 })} + onChange={(v) => + setEditingBase((p) => p && { ...p, allowWalk: v ? 1 : 0 }) + } /> setEditingBase((p) => p && { ...p, allowGift: v ? 1 : 0 })} + onChange={(v) => + setEditingBase((p) => p && { ...p, allowGift: v ? 1 : 0 }) + } /> setEditingBase((p) => p && { ...p, allowTrade: v ? 1 : 0 })} + onChange={(v) => + setEditingBase((p) => p && { ...p, allowTrade: v ? 1 : 0 }) + } /> setEditingBase((p) => p && { ...p, allowRecycle: v ? 1 : 0 })} + onChange={(v) => + setEditingBase((p) => p && { ...p, allowRecycle: v ? 1 : 0 }) + } /> setEditingBase( - (p) => p && { ...p, effectIdMale: parseInt(e.target.value, 10) || 0 }, + (p) => + p && { ...p, effectIdMale: parseInt(e.target.value, 10) || 0 }, ) } /> @@ -1711,8 +1796,8 @@ export function CatalogItemsTable({ @@ -92,15 +92,15 @@ export function InteractionTypeCombobox({ type="button" className="w-full px-2 py-1.5 text-left text-sm hover:bg-accent rounded" onClick={() => { - onChange(inputValue.trim()); - setOpen(false); - setInputValue(""); + onChange(inputValue.trim()) + setOpen(false) + setInputValue('') }} > Use "{inputValue.trim()}" ) : ( - "No types found." + 'No types found.' )} @@ -109,12 +109,14 @@ export function InteractionTypeCombobox({ key={t} value={t} onSelect={() => { - onChange(t); - setOpen(false); - setInputValue(""); + onChange(t) + setOpen(false) + setInputValue('') }} > - + {t} ))} @@ -123,7 +125,7 @@ export function InteractionTypeCombobox({ - ); + ) } // ── Move Page Combobox with smart suggestions ───────────────── @@ -135,32 +137,35 @@ export function MovePageCombobox({ currentPageId, suggestedPageIds, }: { - value: number | null; - onChange: (id: number | null) => void; - pages: { id: number; caption: string }[]; - currentPageId: number; + value: number | null + onChange: (id: number | null) => void + pages: { id: number; caption: string }[] + currentPageId: number /** Page IDs to show first as suggestions (from move-suggestions.ts) */ - suggestedPageIds?: number[]; + suggestedPageIds?: number[] }) { - const [open, setOpen] = useState(false); + const [open, setOpen] = useState(false) - const options = useMemo(() => pages.filter((p) => p.id !== currentPageId), [pages, currentPageId]); + const options = useMemo(() => pages.filter((p) => p.id !== currentPageId), [pages, currentPageId]) - const selectedPage = value ? pages.find((p) => p.id === value) : null; + const selectedPage = value ? pages.find((p) => p.id === value) : null // Build suggested pages list const suggested = useMemo(() => { - if (!suggestedPageIds?.length) return []; - const pageMap = new Map(options.map((p) => [p.id, p])); + if (!suggestedPageIds?.length) return [] + const pageMap = new Map(options.map((p) => [p.id, p])) return suggestedPageIds.map((id) => pageMap.get(id)).filter(Boolean) as { - id: number; - caption: string; - }[]; - }, [suggestedPageIds, options]); + id: number + caption: string + }[] + }, [suggestedPageIds, options]) // Non-suggested pages (exclude those already in suggestions) - const suggestedSet = useMemo(() => new Set(suggested.map((s) => s.id)), [suggested]); - const remaining = useMemo(() => options.filter((p) => !suggestedSet.has(p.id)), [options, suggestedSet]); + const suggestedSet = useMemo(() => new Set(suggested.map((s) => s.id)), [suggested]) + const remaining = useMemo( + () => options.filter((p) => !suggestedSet.has(p.id)), + [options, suggestedSet], + ) return ( @@ -173,7 +178,9 @@ export function MovePageCombobox({ > {selectedPage ? ( - #{selectedPage.id} + + #{selectedPage.id} + {selectedPage.caption} ) : ( @@ -196,13 +203,20 @@ export function MovePageCombobox({ key={`s-${page.id}`} value={`${page.id} ${page.caption}`} onSelect={() => { - onChange(page.id); - setOpen(false); + onChange(page.id) + setOpen(false) }} > - + - #{page.id} + + #{page.id} + {page.caption} ))} @@ -210,17 +224,19 @@ export function MovePageCombobox({ )} {/* All pages */} - 0 ? "All pages" : undefined}> + 0 ? 'All pages' : undefined}> {remaining.map((page) => ( { - onChange(page.id); - setOpen(false); + onChange(page.id) + setOpen(false) }} > - + #{page.id} {page.caption} @@ -230,5 +246,5 @@ export function MovePageCombobox({ - ); + ) } diff --git a/src/app/admin/catalog/[id]/catalog-items-table/furni-icon.tsx b/src/app/admin/catalog/[id]/catalog-items-table/furni-icon.tsx index 343f7b08..1c0dd9bb 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/furni-icon.tsx +++ b/src/app/admin/catalog/[id]/catalog-items-table/furni-icon.tsx @@ -1,7 +1,7 @@ -"use client"; +'use client' -import { Image as ImageIcon } from "lucide-react"; -import { getHabboCdnIconUrl, getLocalIconUrl } from "@/lib/furni/classname"; +import { Image as ImageIcon } from 'lucide-react' +import { getHabboCdnIconUrl, getLocalIconUrl } from '@/lib/furni/classname' export function FurniIcon({ classname, revision }: { classname: string; revision: number }) { if (!classname) { @@ -9,34 +9,34 @@ export function FurniIcon({ classname, revision }: { classname: string; revision
- ); + ) } - const localUrl = getLocalIconUrl(classname); + const localUrl = getLocalIconUrl(classname) function handleError(e: React.SyntheticEvent) { - const img = e.target as HTMLImageElement; - const stage = img.dataset.fallback; + const img = e.target as HTMLImageElement + const stage = img.dataset.fallback if (!stage && revision > 0) { - img.dataset.fallback = "cdn"; - img.src = getHabboCdnIconUrl(classname, revision); + img.dataset.fallback = 'cdn' + img.src = getHabboCdnIconUrl(classname, revision) } else { - img.dataset.fallback = "none"; - img.style.opacity = "0"; + img.dataset.fallback = 'none' + img.style.opacity = '0' } } return (
- { } + {/* eslint-disable-next-line @next/next/no-img-element */} {classname}
- ); + ) } diff --git a/src/app/admin/catalog/[id]/catalog-items-table/index.ts b/src/app/admin/catalog/[id]/catalog-items-table/index.ts index f9e39c92..ad35d6ff 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/index.ts +++ b/src/app/admin/catalog/[id]/catalog-items-table/index.ts @@ -1,4 +1,4 @@ -export { CatalogItemsTable } from "./catalog-items-table"; -export { FurniIcon } from "./furni-icon"; -export type { BaseItemData, CatalogItemData, InlineEdit } from "./types"; -export { DEFAULT_NEW_ITEM, getPointsLabel, POINTS_TYPES } from "./types"; +export { CatalogItemsTable } from './catalog-items-table' +export { FurniIcon } from './furni-icon' +export type { BaseItemData, CatalogItemData, InlineEdit } from './types' +export { DEFAULT_NEW_ITEM, getPointsLabel, POINTS_TYPES } from './types' diff --git a/src/app/admin/catalog/[id]/catalog-items-table/song-picker.tsx b/src/app/admin/catalog/[id]/catalog-items-table/song-picker.tsx index defa656c..5d0eca70 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/song-picker.tsx +++ b/src/app/admin/catalog/[id]/catalog-items-table/song-picker.tsx @@ -1,53 +1,59 @@ -"use client"; +'use client' -import { Loader2, Music } from "lucide-react"; -import { useEffect, useState } from "react"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { Loader2, Music } from 'lucide-react' +import { useEffect, useState } from 'react' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select' import { getCachedSongPickerOptions, loadSongPickerOptions, type SoundtrackOption, -} from "@/lib/client-cache/song-picker-cache"; +} from '@/lib/client-cache/song-picker-cache' // Re-export so existing `import { invalidateSongPickerCache } from '.../song-picker'` // callsites keep working. New code should import from the lib module directly. -export { invalidateSongPickerCache } from "@/lib/client-cache/song-picker-cache"; +export { invalidateSongPickerCache } from '@/lib/client-cache/song-picker-cache' interface Props { - value: number; - onChange: (id: number) => void; - disabled?: boolean; + value: number + onChange: (id: number) => void + disabled?: boolean } function formatLength(seconds: number): string { - if (!seconds || seconds <= 0) return ""; - const m = Math.floor(seconds / 60); - const s = seconds % 60; - return `${m}:${String(s).padStart(2, "0")}`; + if (!seconds || seconds <= 0) return '' + const m = Math.floor(seconds / 60) + const s = seconds % 60 + return `${m}:${String(s).padStart(2, '0')}` } export function SongPicker({ value, onChange, disabled }: Props) { - const initial = getCachedSongPickerOptions(); - const [options, setOptions] = useState(initial ?? []); - const [loading, setLoading] = useState(!initial); + const initial = getCachedSongPickerOptions() + const [options, setOptions] = useState(initial ?? []) + const [loading, setLoading] = useState(!initial) useEffect(() => { - if (getCachedSongPickerOptions()) return; - let cancelled = false; + if (getCachedSongPickerOptions()) return + let cancelled = false loadSongPickerOptions() .then((items) => { - if (!cancelled) setOptions(items); + if (!cancelled) setOptions(items) }) .catch(() => { - if (!cancelled) setOptions([]); + if (!cancelled) setOptions([]) }) .finally(() => { - if (!cancelled) setLoading(false); - }); + if (!cancelled) setLoading(false) + }) return () => { - cancelled = true; - }; - }, []); + cancelled = true + } + }, []) return ( - ); + ) } diff --git a/src/app/admin/catalog/[id]/catalog-items-table/types.ts b/src/app/admin/catalog/[id]/catalog-items-table/types.ts index d69b70ec..907820fe 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/types.ts +++ b/src/app/admin/catalog/[id]/catalog-items-table/types.ts @@ -1,71 +1,71 @@ export interface BaseItemData { - id: number; - spriteId: number; - publicName: string; - itemName: string; - type: string; - width: number; - length: number; - stackHeight: number; - allowStack: number; - allowSit: number; - allowLay: number; - allowWalk: number; - allowGift: number; - allowTrade: number; - allowRecycle: number; - allowMarketplaceSell: number; - allowInventoryStack: number; - interactionType: string; - interactionModesCount: number; - vendingIds: string; - customparams: string; - effectIdMale: number; - effectIdFemale: number; - clothingOnWalk: string; + id: number + spriteId: number + publicName: string + itemName: string + type: string + width: number + length: number + stackHeight: number + allowStack: number + allowSit: number + allowLay: number + allowWalk: number + allowGift: number + allowTrade: number + allowRecycle: number + allowMarketplaceSell: number + allowInventoryStack: number + interactionType: string + interactionModesCount: number + vendingIds: string + customparams: string + effectIdMale: number + effectIdFemale: number + clothingOnWalk: string } export interface CatalogItemData { - id: number; - catalogName: string; - itemIds: string; - costCredits: number; - costPoints: number; - pointsType: number; - amount: number; - limitedSells: number; - limitedStack: number; - orderNumber: number; - offerId: number; - songId: number; - haveOffer: string; - clubOnly: string; - extradata: string; - baseName: string; - baseItemName: string; - spriteId: number; - baseItem: BaseItemData | null; + id: number + catalogName: string + itemIds: string + costCredits: number + costPoints: number + pointsType: number + amount: number + limitedSells: number + limitedStack: number + orderNumber: number + offerId: number + songId: number + haveOffer: string + clubOnly: string + extradata: string + baseName: string + baseItemName: string + spriteId: number + baseItem: BaseItemData | null } export interface InlineEdit { - costCredits: number; - costPoints: number; - pointsType: number; - amount: number; + costCredits: number + costPoints: number + pointsType: number + amount: number } export const POINTS_TYPES: Record = { - 0: { label: "Duckets", color: "text-[var(--admin-info)]" }, - 5: { label: "Diamonds", color: "text-[var(--admin-accent-text)]" }, - 101: { label: "Snowflakes", color: "text-[var(--admin-info)]" }, - 103: { label: "Hearts", color: "text-[var(--admin-error)]" }, - 104: { label: "Stars", color: "text-[var(--admin-warning)]" }, - 105: { label: "Shells", color: "text-[var(--admin-warning)]" }, -}; + 0: { label: 'Duckets', color: 'text-[var(--admin-info)]' }, + 5: { label: 'Diamonds', color: 'text-[var(--admin-accent-text)]' }, + 101: { label: 'Snowflakes', color: 'text-[var(--admin-info)]' }, + 103: { label: 'Hearts', color: 'text-[var(--admin-error)]' }, + 104: { label: 'Stars', color: 'text-[var(--admin-warning)]' }, + 105: { label: 'Shells', color: 'text-[var(--admin-warning)]' }, +} export const DEFAULT_NEW_ITEM = { - catalogName: "", - itemIds: "0", + catalogName: '', + itemIds: '0', costCredits: 0, costPoints: 0, pointsType: 0, @@ -75,11 +75,11 @@ export const DEFAULT_NEW_ITEM = { orderNumber: 1, offerId: -1, songId: 0, - haveOffer: "1", - clubOnly: "0", - extradata: "", -}; + haveOffer: '1', + clubOnly: '0', + extradata: '', +} export function getPointsLabel(type: number) { - return POINTS_TYPES[type] || { label: `Type ${type}`, color: "theme-text-muted" }; + return POINTS_TYPES[type] || { label: `Type ${type}`, color: 'theme-text-muted' } } diff --git a/src/app/admin/catalog/[id]/catalog-page-form.tsx b/src/app/admin/catalog/[id]/catalog-page-form.tsx index a3197a09..a3e6a091 100644 --- a/src/app/admin/catalog/[id]/catalog-page-form.tsx +++ b/src/app/admin/catalog/[id]/catalog-page-form.tsx @@ -1,4 +1,4 @@ -"use client"; +'use client' import { Check, @@ -11,17 +11,17 @@ import { Save, Settings, Trash2, -} from "lucide-react"; -import Link from "next/link"; -import { useEffect, useRef, useState } from "react"; -import { deleteCatalogPage, updateCatalogPage } from "@/actions/catalog"; -import { CatalogImagePicker } from "@/components/admin/catalog/catalog-image-picker"; -import { IconPicker } from "@/components/admin/catalog/icon-picker"; -import { ImagePreview } from "@/components/admin/catalog-manager/image-preview"; -import { CatalogIcon, LAYOUT_COLORS } from "@/components/admin/catalog-tree"; -import { Badge } from "@/components/ui/badge"; -import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +} from 'lucide-react' +import Link from 'next/link' +import { useEffect, useRef, useState } from 'react' +import { deleteCatalogPage, updateCatalogPage } from '@/actions/catalog' +import { CatalogImagePicker } from '@/components/admin/catalog/catalog-image-picker' +import { IconPicker } from '@/components/admin/catalog/icon-picker' +import { ImagePreview } from '@/components/admin/catalog-manager/image-preview' +import { CatalogIcon, LAYOUT_COLORS } from '@/components/admin/catalog-tree' +import { Badge } from '@/components/ui/badge' +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Command, CommandEmpty, @@ -29,109 +29,120 @@ import { CommandInput, CommandItem, CommandList, -} from "@/components/ui/command"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { Switch } from "@/components/ui/switch"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { Textarea } from "@/components/ui/textarea"; -import { useServerAction } from "@/hooks/use-server-action"; -import { CATALOG_LAYOUTS, type CatalogLayout, LAYOUT_DESCRIPTIONS } from "@/lib/catalog-layouts"; -import { cn } from "@/lib/utils"; +} from '@/components/ui/command' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' +import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select' +import { Switch } from '@/components/ui/switch' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { Textarea } from '@/components/ui/textarea' +import { useServerAction } from '@/hooks/use-server-action' +import { CATALOG_LAYOUTS, type CatalogLayout, LAYOUT_DESCRIPTIONS } from '@/lib/catalog-layouts' +import { cn } from '@/lib/utils' interface CatalogPageData { - id: number; - caption: string; - parentId: number; - pageLayout: string; - enabled: string; - visible: string; - minRank: number; - clubOnly: string; - orderNum: number; - iconImage: number; - iconColor: number; - pageHeadline: string; - pageTeaser: string; - pageSpecial: string | null; - pageText1: string | null; - pageText2: string | null; - pageTextDetails: string | null; - pageTextTeaser: string | null; + id: number + caption: string + parentId: number + pageLayout: string + enabled: string + visible: string + minRank: number + clubOnly: string + orderNum: number + iconImage: number + iconColor: number + pageHeadline: string + pageTeaser: string + pageSpecial: string | null + pageText1: string | null + pageText2: string | null + pageTextDetails: string | null + pageTextTeaser: string | null } interface CatalogPageFormProps { - catalogPage: CatalogPageData; - childPages: { id: number; caption: string; enabled: string }[]; - canEdit: boolean; - allPages: { id: number; caption: string }[]; + catalogPage: CatalogPageData + childPages: { id: number; caption: string; enabled: string }[] + canEdit: boolean + allPages: { id: number; caption: string }[] } -export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: CatalogPageFormProps) { - const { isPending, run } = useServerAction(); - const formRef = useRef(null); +export function CatalogPageForm({ + catalogPage, + childPages, + canEdit, + allPages, +}: CatalogPageFormProps) { + const { isPending, run } = useServerAction() + const formRef = useRef(null) const [form, setForm] = useState({ caption: catalogPage.caption, parentId: catalogPage.parentId, pageLayout: catalogPage.pageLayout, - enabled: catalogPage.enabled as "0" | "1", - visible: catalogPage.visible as "0" | "1", + enabled: catalogPage.enabled as '0' | '1', + visible: catalogPage.visible as '0' | '1', minRank: catalogPage.minRank, - clubOnly: catalogPage.clubOnly as "0" | "1", + clubOnly: catalogPage.clubOnly as '0' | '1', orderNum: catalogPage.orderNum, iconImage: catalogPage.iconImage, iconColor: catalogPage.iconColor, pageHeadline: catalogPage.pageHeadline, pageTeaser: catalogPage.pageTeaser, - pageSpecial: catalogPage.pageSpecial || "", - pageText1: catalogPage.pageText1 || "", - pageText2: catalogPage.pageText2 || "", - pageTextDetails: catalogPage.pageTextDetails || "", - pageTextTeaser: catalogPage.pageTextTeaser || "", - }); + pageSpecial: catalogPage.pageSpecial || '', + pageText1: catalogPage.pageText1 || '', + pageText2: catalogPage.pageText2 || '', + pageTextDetails: catalogPage.pageTextDetails || '', + pageTextTeaser: catalogPage.pageTextTeaser || '', + }) // Ctrl+S / Cmd+S to save useEffect(() => { - if (!canEdit) return; + if (!canEdit) return function onKeyDown(e: KeyboardEvent) { - if ((e.metaKey || e.ctrlKey) && e.key === "s") { - e.preventDefault(); - formRef.current?.requestSubmit(); + if ((e.metaKey || e.ctrlKey) && e.key === 's') { + e.preventDefault() + formRef.current?.requestSubmit() } } - document.addEventListener("keydown", onKeyDown); - return () => document.removeEventListener("keydown", onKeyDown); - }, [canEdit]); + document.addEventListener('keydown', onKeyDown) + return () => document.removeEventListener('keydown', onKeyDown) + }, [canEdit]) function update(key: K, value: (typeof form)[K]) { - setForm((prev) => ({ ...prev, [key]: value })); + setForm((prev) => ({ ...prev, [key]: value })) } function handleSubmit(e: React.FormEvent) { - e.preventDefault(); + e.preventDefault() run(() => updateCatalogPage({ id: catalogPage.id, ...form }), { - successMessage: "Page updated and catalog synced.", - errorMessage: "Failed to update.", - }); + successMessage: 'Page updated and catalog synced.', + errorMessage: 'Failed to update.', + }) } function handleDelete() { - const childCount = childPages.length; + const childCount = childPages.length const msg = childCount > 0 ? `Delete this catalog page? Its ${childCount} child page(s) will be moved to root. All items in this page will be deleted.` - : "Delete this catalog page and all its items?"; - if (!confirm(msg)) return; + : 'Delete this catalog page and all its items?' + if (!confirm(msg)) return run(() => deleteCatalogPage({ id: catalogPage.id }), { - successMessage: "Page deleted.", - redirectTo: "/admin/catalog", - }); + successMessage: 'Page deleted.', + redirectTo: '/admin/catalog', + }) } - const layoutColorClass = LAYOUT_COLORS[form.pageLayout] || "bg-muted text-muted-foreground"; + const layoutColorClass = LAYOUT_COLORS[form.pageLayout] || 'bg-muted text-muted-foreground' return (
@@ -164,7 +175,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: update("caption", e.target.value)} + onChange={(e) => update('caption', e.target.value)} disabled={!canEdit} /> @@ -172,7 +183,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: update("parentId", id)} + onChange={(id) => update('parentId', id)} pages={allPages} currentPageId={catalogPage.id} disabled={!canEdit} @@ -184,11 +195,11 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: update("pageLayout", v)} + onChange={(v) => update('pageLayout', v)} disabled={!canEdit} />

- {LAYOUT_DESCRIPTIONS[form.pageLayout as CatalogLayout] ?? "Custom layout"} + {LAYOUT_DESCRIPTIONS[form.pageLayout as CatalogLayout] ?? 'Custom layout'}

@@ -199,7 +210,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: id="orderNum" type="number" value={form.orderNum} - onChange={(e) => update("orderNum", parseInt(e.target.value, 10) || 0)} + onChange={(e) => update('orderNum', parseInt(e.target.value, 10) || 0)} disabled={!canEdit} /> @@ -211,7 +222,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: min={1} max={100} value={form.minRank} - onChange={(e) => update("minRank", parseInt(e.target.value, 10) || 1)} + onChange={(e) => update('minRank', parseInt(e.target.value, 10) || 1)} disabled={!canEdit} /> @@ -224,7 +235,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: update("pageHeadline", v)} + onChange={(v) => update('pageHeadline', v)} type="header" label="Headline image" disabled={!canEdit} @@ -235,7 +246,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: update("pageTeaser", v)} + onChange={(v) => update('pageTeaser', v)} type="teaser" label="Teaser image" disabled={!canEdit} @@ -247,7 +258,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: id="pageText1" label="Text 1" value={form.pageText1} - onChange={(v) => update("pageText1", v)} + onChange={(v) => update('pageText1', v)} disabled={!canEdit} rows={4} max={5000} @@ -256,7 +267,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: id="pageText2" label="Text 2" value={form.pageText2} - onChange={(v) => update("pageText2", v)} + onChange={(v) => update('pageText2', v)} disabled={!canEdit} rows={4} max={5000} @@ -267,7 +278,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: id="pageTextDetails" label="Details" value={form.pageTextDetails} - onChange={(v) => update("pageTextDetails", v)} + onChange={(v) => update('pageTextDetails', v)} disabled={!canEdit} rows={3} max={5000} @@ -276,7 +287,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: id="pageTextTeaser" label="Text Teaser" value={form.pageTextTeaser} - onChange={(v) => update("pageTextTeaser", v)} + onChange={(v) => update('pageTextTeaser', v)} disabled={!canEdit} rows={3} max={5000} @@ -286,7 +297,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: id="pageSpecial" label="Special" value={form.pageSpecial} - onChange={(v) => update("pageSpecial", v)} + onChange={(v) => update('pageSpecial', v)} disabled={!canEdit} rows={2} max={2048} @@ -300,7 +311,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }:
update("iconImage", id)} + onChange={(id) => update('iconImage', id)} disabled={!canEdit} />

@@ -317,11 +328,12 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: min={0} className="w-32" value={form.iconColor} - onChange={(e) => update("iconColor", parseInt(e.target.value, 10) || 0)} + onChange={(e) => update('iconColor', parseInt(e.target.value, 10) || 0)} disabled={!canEdit} />

- Legacy tint value. Leave at default unless you need to match a specific theme. + Legacy tint value. Leave at default unless you need to match a specific + theme.

@@ -349,10 +361,12 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: > {child.caption} - #{child.id} + + #{child.id} + - - {child.enabled === "1" ? "Enabled" : "Disabled"} + + {child.enabled === '1' ? 'Enabled' : 'Disabled'} ))} @@ -375,8 +389,13 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }:
-

{form.caption || "Untitled"}

- +

{form.caption || 'Untitled'}

+ {form.pageLayout}
@@ -388,24 +407,24 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: id="tg-enabled" label="Enabled" description="Active in the catalog" - checked={form.enabled === "1"} - onChange={(v) => update("enabled", v ? "1" : "0")} + checked={form.enabled === '1'} + onChange={(v) => update('enabled', v ? '1' : '0')} disabled={!canEdit} /> update("visible", v ? "1" : "0")} + checked={form.visible === '1'} + onChange={(v) => update('visible', v ? '1' : '0')} disabled={!canEdit} /> update("clubOnly", v ? "1" : "0")} + checked={form.clubOnly === '1'} + onChange={(v) => update('clubOnly', v ? '1' : '0')} disabled={!canEdit} /> @@ -452,7 +471,7 @@ export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: - ); + ) } // ── Toggle row ───────────────────────────────────────────────── @@ -465,12 +484,12 @@ function ToggleRow({ onChange, disabled, }: { - id: string; - label: string; - description: string; - checked: boolean; - onChange: (v: boolean) => void; - disabled?: boolean; + id: string + label: string + description: string + checked: boolean + onChange: (v: boolean) => void + disabled?: boolean }) { return (
@@ -482,7 +501,7 @@ function ToggleRow({
- ); + ) } // ── Text field with counter ──────────────────────────────────── @@ -495,12 +514,12 @@ function _TextField({ disabled, max, }: { - id: string; - label: string; - value: string; - onChange: (v: string) => void; - disabled?: boolean; - max?: number; + id: string + label: string + value: string + onChange: (v: string) => void + disabled?: boolean + max?: number }) { return (
@@ -520,7 +539,7 @@ function _TextField({ maxLength={max} />
- ); + ) } function TextareaField({ @@ -532,13 +551,13 @@ function TextareaField({ rows = 3, max, }: { - id: string; - label: string; - value: string; - onChange: (v: string) => void; - disabled?: boolean; - rows?: number; - max?: number; + id: string + label: string + value: string + onChange: (v: string) => void + disabled?: boolean + rows?: number + max?: number }) { return (
@@ -559,7 +578,7 @@ function TextareaField({ maxLength={max} />
- ); + ) } // ── Layout select with color swatch ──────────────────────────── @@ -569,9 +588,9 @@ function LayoutSelect({ onChange, disabled, }: { - value: string; - onChange: (v: string) => void; - disabled?: boolean; + value: string + onChange: (v: string) => void + disabled?: boolean }) { return ( - ); + ) } // ── Parent page combobox with search ──────────────────────────── @@ -604,16 +623,16 @@ function ParentCombobox({ currentPageId, disabled, }: { - value: number; - onChange: (id: number) => void; - pages: { id: number; caption: string }[]; - currentPageId: number; - disabled?: boolean; + value: number + onChange: (id: number) => void + pages: { id: number; caption: string }[] + currentPageId: number + disabled?: boolean }) { - const [open, setOpen] = useState(false); + const [open, setOpen] = useState(false) - const options = pages.filter((p) => p.id !== currentPageId); - const selected = value === -1 ? { id: -1, caption: "Root" } : pages.find((p) => p.id === value); + const options = pages.filter((p) => p.id !== currentPageId) + const selected = value === -1 ? { id: -1, caption: 'Root' } : pages.find((p) => p.id === value) return ( @@ -629,7 +648,7 @@ function ParentCombobox({ {selected ? ( - {selected.id === -1 ? "—" : `#${selected.id}`} + {selected.id === -1 ? '—' : `#${selected.id}`} {selected.caption} @@ -648,11 +667,11 @@ function ParentCombobox({ { - onChange(-1); - setOpen(false); + onChange(-1) + setOpen(false) }} > - + — Root @@ -661,11 +680,13 @@ function ParentCombobox({ key={page.id} value={`${page.id} ${page.caption}`} onSelect={() => { - onChange(page.id); - setOpen(false); + onChange(page.id) + setOpen(false) }} > - + #{page.id} {page.caption} @@ -675,5 +696,5 @@ function ParentCombobox({ - ); + ) } diff --git a/src/app/admin/catalog/[id]/catalog-translate-tab.tsx b/src/app/admin/catalog/[id]/catalog-translate-tab.tsx index 8065346b..f01ea9ee 100644 --- a/src/app/admin/catalog/[id]/catalog-translate-tab.tsx +++ b/src/app/admin/catalog/[id]/catalog-translate-tab.tsx @@ -1,4 +1,4 @@ -"use client"; +'use client' import { AlertTriangle, @@ -11,39 +11,46 @@ import { Save, ShoppingCart, Sparkles, -} from "lucide-react"; -import { useRouter } from "next/navigation"; -import { useCallback, useMemo, useState } from "react"; -import { toast } from "sonner"; -import { translateCatalogItems } from "@/actions/catalog-items"; -import { Badge } from "@/components/ui/badge"; -import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Checkbox } from "@/components/ui/checkbox"; -import { Input } from "@/components/ui/input"; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; -import { useServerAction } from "@/hooks/use-server-action"; -import { FurniIcon } from "./catalog-items-table"; +} from 'lucide-react' +import { useRouter } from 'next/navigation' +import { useCallback, useMemo, useState } from 'react' +import { toast } from 'sonner' +import { translateCatalogItems } from '@/actions/catalog-items' +import { Badge } from '@/components/ui/badge' +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { Checkbox } from '@/components/ui/checkbox' +import { Input } from '@/components/ui/input' +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table' +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' +import { useServerAction } from '@/hooks/use-server-action' +import { FurniIcon } from './catalog-items-table' interface BaseItemForTranslation { - id: number; - publicName: string; - itemName: string; - spriteId: number; - type: string; + id: number + publicName: string + itemName: string + spriteId: number + type: string } interface CatalogTranslateTabProps { - baseItems: BaseItemForTranslation[]; - catalogNameMap: Record; - canEdit: boolean; - furniDataIdList: number[]; - furniDescriptionMap: Record; - furniRevisionMap?: Record; + baseItems: BaseItemForTranslation[] + catalogNameMap: Record + canEdit: boolean + furniDataIdList: number[] + furniDescriptionMap: Record + furniRevisionMap?: Record } -type FilterMode = "all" | "missing" | "modified"; +type FilterMode = 'all' | 'missing' | 'modified' export function CatalogTranslateTab({ baseItems, @@ -53,164 +60,164 @@ export function CatalogTranslateTab({ furniDescriptionMap, furniRevisionMap = {}, }: CatalogTranslateTabProps) { - const router = useRouter(); - const { run, isPending } = useServerAction(); - const [isSuggesting, setIsSuggesting] = useState(false); - const [filterMode, setFilterMode] = useState("all"); + const router = useRouter() + const { run, isPending } = useServerAction() + const [isSuggesting, setIsSuggesting] = useState(false) + const [filterMode, setFilterMode] = useState('all') - const furniDataIdSet = useMemo(() => new Set(furniDataIdList), [furniDataIdList]); - const [selected, setSelected] = useState>(new Set()); + const furniDataIdSet = useMemo(() => new Set(furniDataIdList), [furniDataIdList]) + const [selected, setSelected] = useState>(new Set()) // ── Editable state: names + descriptions ───────────────────────── const [editedNames, setEditedNames] = useState>( Object.fromEntries(baseItems.map((item) => [item.id, item.publicName])), - ); + ) const [editedDescs, setEditedDescs] = useState>( - Object.fromEntries(baseItems.map((item) => [item.id, furniDescriptionMap[item.id] ?? ""])), - ); + Object.fromEntries(baseItems.map((item) => [item.id, furniDescriptionMap[item.id] ?? ''])), + ) // Track which items have name or description changes const isNameChanged = useCallback( (item: BaseItemForTranslation) => editedNames[item.id] !== item.publicName, [editedNames], - ); + ) const isDescChanged = useCallback( - (item: BaseItemForTranslation) => editedDescs[item.id] !== (furniDescriptionMap[item.id] ?? ""), + (item: BaseItemForTranslation) => editedDescs[item.id] !== (furniDescriptionMap[item.id] ?? ''), [editedDescs, furniDescriptionMap], - ); + ) const changedItems = useMemo( () => baseItems.filter((item) => isNameChanged(item) || isDescChanged(item)), [baseItems, isNameChanged, isDescChanged], - ); + ) const missingItems = useMemo( () => baseItems.filter((item) => !furniDataIdSet.has(item.id)), [baseItems, furniDataIdSet], - ); + ) const filteredItems = useMemo(() => { switch (filterMode) { - case "missing": - return baseItems.filter((item) => !furniDataIdSet.has(item.id)); - case "modified": - return baseItems.filter((item) => isNameChanged(item) || isDescChanged(item)); + case 'missing': + return baseItems.filter((item) => !furniDataIdSet.has(item.id)) + case 'modified': + return baseItems.filter((item) => isNameChanged(item) || isDescChanged(item)) default: - return baseItems; + return baseItems } - }, [baseItems, filterMode, furniDataIdSet, isNameChanged, isDescChanged]); + }, [baseItems, filterMode, furniDataIdSet, isNameChanged, isDescChanged]) const toggleOne = useCallback((id: number) => { setSelected((prev) => { - const next = new Set(prev); - if (next.has(id)) next.delete(id); - else next.add(id); - return next; - }); - }, []); + const next = new Set(prev) + if (next.has(id)) next.delete(id) + else next.add(id) + return next + }) + }, []) const toggleAll = useCallback(() => { setSelected((prev) => prev.size === filteredItems.length ? new Set() : new Set(filteredItems.map((i) => i.id)), - ); - }, [filteredItems]); + ) + }, [filteredItems]) // Items to act on: selected ones if any, otherwise all const targetItems = useMemo(() => { - if (selected.size === 0) return baseItems; - return baseItems.filter((i) => selected.has(i.id)); - }, [baseItems, selected]); + if (selected.size === 0) return baseItems + return baseItems.filter((i) => selected.has(i.id)) + }, [baseItems, selected]) function handleNameChange(id: number, value: string) { - setEditedNames((prev) => ({ ...prev, [id]: value })); + setEditedNames((prev) => ({ ...prev, [id]: value })) } function handleDescChange(id: number, value: string) { - setEditedDescs((prev) => ({ ...prev, [id]: value })); + setEditedDescs((prev) => ({ ...prev, [id]: value })) } function handleReset() { - setEditedNames(Object.fromEntries(baseItems.map((item) => [item.id, item.publicName]))); + setEditedNames(Object.fromEntries(baseItems.map((item) => [item.id, item.publicName]))) setEditedDescs( - Object.fromEntries(baseItems.map((item) => [item.id, furniDescriptionMap[item.id] ?? ""])), - ); + Object.fromEntries(baseItems.map((item) => [item.id, furniDescriptionMap[item.id] ?? ''])), + ) } async function handleSuggestFromHabboFurni() { - if (targetItems.length === 0) return; - setIsSuggesting(true); + if (targetItems.length === 0) return + setIsSuggesting(true) try { // Collect classnames from selected items (or all if none selected) - const classnames = targetItems.map((item) => item.itemName).filter(Boolean); + const classnames = targetItems.map((item) => item.itemName).filter(Boolean) if (classnames.length === 0) { - toast.info("No classnames found to look up."); - setIsSuggesting(false); - return; + toast.info('No classnames found to look up.') + setIsSuggesting(false) + return } // Batch in chunks of 50 to avoid too-long URLs - const CHUNK_SIZE = 50; - const allSuggestions: Record = {}; + const CHUNK_SIZE = 50 + const allSuggestions: Record = {} for (let i = 0; i < classnames.length; i += CHUNK_SIZE) { - const chunk = classnames.slice(i, i + CHUNK_SIZE); + const chunk = classnames.slice(i, i + CHUNK_SIZE) const res = await fetch( - `/api/admin/catalog/suggest?classnames=${encodeURIComponent(chunk.join(","))}`, - ); + `/api/admin/catalog/suggest?classnames=${encodeURIComponent(chunk.join(','))}`, + ) if (res.ok) { - const data = await res.json(); - Object.assign(allSuggestions, data.suggestions || {}); + const data = await res.json() + Object.assign(allSuggestions, data.suggestions || {}) } } // Apply suggestions to items that have a match (names + descriptions) - let nameCount = 0; - let descCount = 0; - const newNames = { ...editedNames }; - const newDescs = { ...editedDescs }; + let nameCount = 0 + let descCount = 0 + const newNames = { ...editedNames } + const newDescs = { ...editedDescs } for (const item of targetItems) { - const suggestion = allSuggestions[item.itemName]; - if (!suggestion) continue; + const suggestion = allSuggestions[item.itemName] + if (!suggestion) continue if (suggestion.name && suggestion.name !== item.publicName) { - newNames[item.id] = suggestion.name; - nameCount++; + newNames[item.id] = suggestion.name + nameCount++ } - const currentDesc = furniDescriptionMap[item.id] ?? ""; + const currentDesc = furniDescriptionMap[item.id] ?? '' if (suggestion.description && suggestion.description !== currentDesc) { - newDescs[item.id] = suggestion.description; - descCount++; + newDescs[item.id] = suggestion.description + descCount++ } } - setEditedNames(newNames); - setEditedDescs(newDescs); + setEditedNames(newNames) + setEditedDescs(newDescs) - const total = nameCount + descCount; + const total = nameCount + descCount if (total > 0) { - const parts = []; - if (nameCount > 0) parts.push(`${nameCount} name(s)`); - if (descCount > 0) parts.push(`${descCount} description(s)`); - toast.success(`HabboFurni: ${parts.join(" + ")} suggested from habbo.it. Review and save.`); + const parts = [] + if (nameCount > 0) parts.push(`${nameCount} name(s)`) + if (descCount > 0) parts.push(`${descCount} description(s)`) + toast.success(`HabboFurni: ${parts.join(' + ')} suggested from habbo.it. Review and save.`) } else { toast.info( `HabboFurni: No new suggestions found (${Object.keys(allSuggestions).length} looked up, all already match).`, - ); + ) } } catch (err) { - toast.error(`HabboFurni error: ${(err as Error).message}`); + toast.error(`HabboFurni error: ${(err as Error).message}`) } finally { - setIsSuggesting(false); + setIsSuggesting(false) } } async function handleSaveAll() { - if (changedItems.length === 0) return; + if (changedItems.length === 0) return run( () => @@ -222,26 +229,26 @@ export function CatalogTranslateTab({ })), }), { - successMessage: "Translations saved.", - errorMessage: "Failed to save translations.", + successMessage: 'Translations saved.', + errorMessage: 'Failed to save translations.', onSuccess: (data) => { - const d = data as Record; - const parts = []; + const d = data as Record + const parts = [] if (d.namesUpdated && (d.namesUpdated as number) > 0) - parts.push(`${d.namesUpdated} name(s) updated`); + parts.push(`${d.namesUpdated} name(s) updated`) if (d.descriptionsUpdated && (d.descriptionsUpdated as number) > 0) - parts.push(`${d.descriptionsUpdated} description(s) updated`); - if (parts.length === 0) parts.push(`${d.updated ?? 0} item(s) processed`); - if (d.furniDataUpdated) parts.push("FurnitureData.json synced"); + parts.push(`${d.descriptionsUpdated} description(s) updated`) + if (parts.length === 0) parts.push(`${d.updated ?? 0} item(s) processed`) + if (d.furniDataUpdated) parts.push('FurnitureData.json synced') if (d.furniDataInserted && (d.furniDataInserted as number) > 0) { - parts.push(`${d.furniDataInserted} new item(s) added to FurnitureData.json`); + parts.push(`${d.furniDataInserted} new item(s) added to FurnitureData.json`) } - parts.push("emulator cache refreshed"); - toast.success(`${parts.join(" · ")}.`); - router.refresh(); + parts.push('emulator cache refreshed') + toast.success(`${parts.join(' · ')}.`) + router.refresh() }, }, - ); + ) } return ( @@ -267,7 +274,8 @@ export function CatalogTranslateTab({
- {missingItems.length} item(s) missing from FurnitureData.json — will be auto-inserted on save + {missingItems.length} item(s) missing from FurnitureData.json — will be + auto-inserted on save
)} @@ -286,7 +294,7 @@ export function CatalogTranslateTab({ ) : ( )} - Suggest IT{selected.size > 0 ? ` (${selected.size})` : ""} + Suggest IT{selected.size > 0 ? ` (${selected.size})` : ''} -