From d1ad5333521d960e6545916d5a3177d3bdb25687 Mon Sep 17 00:00:00 2001 From: Piyush Agarwal Date: Thu, 7 Nov 2024 11:47:30 +0530 Subject: [PATCH] Klimate App --- .gitignore | 25 + README.md | 50 + components.json | 20 + eslint.config.js | 28 + index.html | 13 + package-lock.json | 6026 ++++++++++++++++++++++++++ package.json | 53 + postcss.config.js | 6 + public/logo.png | Bin 0 -> 85574 bytes public/logo2.png | Bin 0 -> 21952 bytes public/vite.svg | 1 + src/App.css | 0 src/App.tsx | 40 + src/api/config.ts | 9 + src/api/types.ts | 60 + src/api/weather.ts | 67 + src/components/city-search.tsx | 168 + src/components/current-weather.tsx | 98 + src/components/favorite-button.tsx | 43 + src/components/favorite-cities.tsx | 109 + src/components/header.tsx | 27 + src/components/hourly-temprature.tsx | 107 + src/components/layout.tsx | 18 + src/components/loading-skeleton.tsx | 18 + src/components/theme-toggle.tsx | 23 + src/components/ui/alert.tsx | 59 + src/components/ui/button.tsx | 57 + src/components/ui/card.tsx | 76 + src/components/ui/command.tsx | 153 + src/components/ui/dialog.tsx | 122 + src/components/ui/scroll-area.tsx | 46 + src/components/ui/skeleton.tsx | 15 + src/components/ui/sonner.tsx | 29 + src/components/ui/tooltip.tsx | 30 + src/components/weather-details.tsx | 78 + src/components/weather-forecast.tsx | 100 + src/context/theme-provider.tsx | 73 + src/hooks/use-favorite.ts | 70 + src/hooks/use-geolocation.ts | 81 + src/hooks/use-local-storage.ts | 23 + src/hooks/use-search-history.ts | 67 + src/hooks/use-weather.ts | 44 + src/index.css | 67 + src/lib/utils.ts | 6 + src/main.tsx | 10 + src/pages/city-page.tsx | 61 + src/pages/weather-dashboard.tsx | 132 + src/vite-env.d.ts | 1 + tailwind.config.js | 57 + tsconfig.app.json | 31 + tsconfig.json | 17 + tsconfig.node.json | 24 + vite.config.ts | 12 + 53 files changed, 8550 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 components.json create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/logo.png create mode 100644 public/logo2.png create mode 100644 public/vite.svg create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/api/config.ts create mode 100644 src/api/types.ts create mode 100644 src/api/weather.ts create mode 100644 src/components/city-search.tsx create mode 100644 src/components/current-weather.tsx create mode 100644 src/components/favorite-button.tsx create mode 100644 src/components/favorite-cities.tsx create mode 100644 src/components/header.tsx create mode 100644 src/components/hourly-temprature.tsx create mode 100644 src/components/layout.tsx create mode 100644 src/components/loading-skeleton.tsx create mode 100644 src/components/theme-toggle.tsx create mode 100644 src/components/ui/alert.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/command.tsx create mode 100644 src/components/ui/dialog.tsx create mode 100644 src/components/ui/scroll-area.tsx create mode 100644 src/components/ui/skeleton.tsx create mode 100644 src/components/ui/sonner.tsx create mode 100644 src/components/ui/tooltip.tsx create mode 100644 src/components/weather-details.tsx create mode 100644 src/components/weather-forecast.tsx create mode 100644 src/context/theme-provider.tsx create mode 100644 src/hooks/use-favorite.ts create mode 100644 src/hooks/use-geolocation.ts create mode 100644 src/hooks/use-local-storage.ts create mode 100644 src/hooks/use-search-history.ts create mode 100644 src/hooks/use-weather.ts create mode 100644 src/index.css create mode 100644 src/lib/utils.ts create mode 100644 src/main.tsx create mode 100644 src/pages/city-page.tsx create mode 100644 src/pages/weather-dashboard.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tailwind.config.js create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1cac559 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.env \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..74872fd --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/components.json b/components.json new file mode 100644 index 0000000..76d1f60 --- /dev/null +++ b/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..092408a --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/index.html b/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..29da720 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6026 @@ +{ + "name": "weather-app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "weather-app", + "version": "0.0.0", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-dropdown-menu": "^2.1.2", + "@radix-ui/react-icons": "^1.3.1", + "@radix-ui/react-scroll-area": "^1.2.0", + "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-switch": "^1.1.1", + "@radix-ui/react-tooltip": "^1.1.3", + "@tanstack/react-query": "^5.59.16", + "@tanstack/react-query-devtools": "^5.59.16", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "date-fns": "^4.1.0", + "lucide-react": "^0.454.0", + "next-themes": "^0.3.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.27.0", + "recharts": "^2.13.3", + "sonner": "^1.5.0", + "tailwind-merge": "^2.5.4", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@types/node": "^22.8.6", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "autoprefixer": "^10.4.20", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.14", + "typescript": "~5.6.2", + "typescript-eslint": "^8.11.0", + "vite": "^5.4.10" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "license": "MIT" + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.0.tgz", + "integrity": "sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", + "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", + "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz", + "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-menu": "2.1.2", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.1.tgz", + "integrity": "sha512-QvYompk0X+8Yjlo/Fv4McrzxohDdM5GgLHyQcPpcsPvlOSXCGFjdbuyGL5dzRbg0GpknAjQJJZzdiRK7iWVuFQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x || ^19.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz", + "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", + "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.0.tgz", + "integrity": "sha512-q2jMBdsJ9zB7QG6ngQNzNwlvxLQqONyL58QbEGwuyRZZb/ARQwk3uQVbCF7GvQVOtV6EU/pDxAw3zRzJZI3rpQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz", + "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.3.tgz", + "integrity": "sha512-Z4w1FIS0BqVFI2c1jZvb/uDVJijJjJ2ZMuPV81oVgTZ7g3BZxobplnMVvXtFWgtozdvYJ+MFWtwkM5S2HnAong==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", + "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@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": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" + }, + "node_modules/@remix-run/router": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz", + "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", + "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", + "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", + "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", + "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", + "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", + "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", + "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", + "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", + "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", + "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", + "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", + "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", + "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", + "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", + "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", + "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", + "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", + "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tanstack/query-core": { + "version": "5.59.16", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.16.tgz", + "integrity": "sha512-crHn+G3ltqb5JG0oUv6q+PMz1m1YkjpASrXTU+sYWW9pLk0t2GybUHNRqYPZWhxgjPaVGC4yp92gSFEJgYEsPw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-devtools": { + "version": "5.58.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.58.0.tgz", + "integrity": "sha512-iFdQEFXaYYxqgrv63ots+65FGI+tNp5ZS5PdMU1DWisxk3fez5HG3FyVlbUva+RdYS5hSLbxZ9aw3yEs97GNTw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.59.16", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.59.16.tgz", + "integrity": "sha512-MuyWheG47h6ERd4PKQ6V8gDyBu3ThNG22e1fRVwvq6ap3EqsFhyuxCAwhNP/03m/mLg+DAb0upgbPaX6VB+CkQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.59.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "5.59.16", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.59.16.tgz", + "integrity": "sha512-Dejo39QBXmDqXZ3vdrk7vHDvs7TvL573/AX2NveMBmRAufAPYuE3oWSKP/gGqkDfEqyr4CmldOj+v9cKskUchQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-devtools": "5.58.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.59.16", + "react": "^18 || ^19" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.8.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.6.tgz", + "integrity": "sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.8" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.12.2", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001676", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz", + "integrity": "sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.0.tgz", + "integrity": "sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "1.0.5", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/cmdk/node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.50", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz", + "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "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" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", + "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.14.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", + "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", + "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.454.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.454.0.tgz", + "integrity": "sha512-hw7zMDwykCLnEzgncEEjHeA6+45aeEzRYuKHuyRSOPkhko+J3ySGjGIzu+mmMfDFG1vazHepMaYFYHbTFAZAAQ==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next-themes": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz", + "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18", + "react-dom": "^16.8 || ^17 || ^18" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz", + "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.20.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz", + "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.20.0", + "react-router": "6.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-smooth": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", + "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recharts": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.13.3.tgz", + "integrity": "sha512-YDZ9dOfK9t3ycwxgKbrnDlRC4BHdjlY73fet3a0C1+qGMjXVZe6+VXmpOIIhzkje5MMEL8AN4hLIe4AMskBzlA==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.0", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz", + "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.24.3", + "@rollup/rollup-android-arm64": "4.24.3", + "@rollup/rollup-darwin-arm64": "4.24.3", + "@rollup/rollup-darwin-x64": "4.24.3", + "@rollup/rollup-freebsd-arm64": "4.24.3", + "@rollup/rollup-freebsd-x64": "4.24.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", + "@rollup/rollup-linux-arm-musleabihf": "4.24.3", + "@rollup/rollup-linux-arm64-gnu": "4.24.3", + "@rollup/rollup-linux-arm64-musl": "4.24.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", + "@rollup/rollup-linux-riscv64-gnu": "4.24.3", + "@rollup/rollup-linux-s390x-gnu": "4.24.3", + "@rollup/rollup-linux-x64-gnu": "4.24.3", + "@rollup/rollup-linux-x64-musl": "4.24.3", + "@rollup/rollup-win32-arm64-msvc": "4.24.3", + "@rollup/rollup-win32-ia32-msvc": "4.24.3", + "@rollup/rollup-win32-x64-msvc": "4.24.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sonner": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.5.0.tgz", + "integrity": "sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", + "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.12.2.tgz", + "integrity": "sha512-UbuVUWSrHVR03q9CWx+JDHeO6B/Hr9p4U5lRH++5tq/EbFq1faYZe50ZSBePptgfIKLEti0aPQ3hFgnPVcd8ZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.12.2", + "@typescript-eslint/parser": "8.12.2", + "@typescript-eslint/utils": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..6ea5abf --- /dev/null +++ b/package.json @@ -0,0 +1,53 @@ +{ + "name": "weather-app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-dropdown-menu": "^2.1.2", + "@radix-ui/react-icons": "^1.3.1", + "@radix-ui/react-scroll-area": "^1.2.0", + "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-switch": "^1.1.1", + "@radix-ui/react-tooltip": "^1.1.3", + "@tanstack/react-query": "^5.59.16", + "@tanstack/react-query-devtools": "^5.59.16", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "date-fns": "^4.1.0", + "lucide-react": "^0.454.0", + "next-themes": "^0.3.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.27.0", + "recharts": "^2.13.3", + "sonner": "^1.5.0", + "tailwind-merge": "^2.5.4", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@types/node": "^22.8.6", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "autoprefixer": "^10.4.20", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.14", + "typescript": "~5.6.2", + "typescript-eslint": "^8.11.0", + "vite": "^5.4.10" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3cfc19befddbc03d01ccb619e51a061fa049b99a GIT binary patch literal 85574 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 U)!?p1WXb^Mit==NoO#Eg+)* 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 literal 0 HcmV?d00001 diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..e69de29 diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..ce92611 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,40 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { Toaster } from "./components/ui/sonner"; +import { WeatherDashboard } from "./pages/weather-dashboard"; +import { Layout } from "./components/layout"; +import { ThemeProvider } from "./context/theme-provider"; +import { BrowserRouter, Route, Routes } from "react-router-dom"; +import { CityPage } from "./pages/city-page"; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: 5 * 60 * 1000, // 5 minutes + gcTime: 10 * 60 * 1000, // 10 minutes + retry: false, + refetchOnWindowFocus: false, + }, + }, +}); + +function App() { + return ( + + + + + + } /> + } /> + + + + + + + + ); +} + +export default App; diff --git a/src/api/config.ts b/src/api/config.ts new file mode 100644 index 0000000..9b3764f --- /dev/null +++ b/src/api/config.ts @@ -0,0 +1,9 @@ +export const API_CONFIG = { + BASE_URL: "https://api.openweathermap.org/data/2.5", + GEO: "https://api.openweathermap.org/geo/1.0", + API_KEY: import.meta.env.VITE_OPENWEATHER_API_KEY, + DEFAULT_PARAMS: { + units: "metric", + appid: import.meta.env.VITE_OPENWEATHER_API_KEY, + }, +}; diff --git a/src/api/types.ts b/src/api/types.ts new file mode 100644 index 0000000..2eed5a0 --- /dev/null +++ b/src/api/types.ts @@ -0,0 +1,60 @@ +export interface Coordinates { + lat: number; + lon: number; +} + +export interface GeocodingResponse { + name: string; + local_names?: Record; + lat: number; + lon: number; + country: string; + state?: string; +} + +export interface WeatherCondition { + id: number; + main: string; + description: string; + icon: string; +} + +export interface WeatherData { + coord: Coordinates; + weather: WeatherCondition[]; + main: { + temp: number; + feels_like: number; + temp_min: number; + temp_max: number; + pressure: number; + humidity: number; + }; + wind: { + speed: number; + deg: number; + }; + sys: { + sunrise: number; + sunset: number; + country: string; + }; + name: string; + dt: number; +} + +export interface ForecastData { + list: Array<{ + dt: number; + main: WeatherData["main"]; + weather: WeatherData["weather"]; + wind: WeatherData["wind"]; + dt_txt: string; + }>; + city: { + name: string; + country: string; + sunrise: number; + sunset: number; + }; +} diff --git a/src/api/weather.ts b/src/api/weather.ts new file mode 100644 index 0000000..58affe9 --- /dev/null +++ b/src/api/weather.ts @@ -0,0 +1,67 @@ +import { API_CONFIG } from "./config"; +import type { + WeatherData, + ForecastData, + GeocodingResponse, + Coordinates, +} from "./types"; + +class WeatherAPI { + private createUrl(endpoint: string, params: Record) { + const searchParams = new URLSearchParams({ + appid: API_CONFIG.API_KEY, + ...params, + }); + return `${endpoint}?${searchParams.toString()}`; + } + + private async fetchData(url: string): Promise { + const response = await fetch(url); + + if (!response.ok) { + throw new Error(`Weather API Error: ${response.statusText}`); + } + + return response.json(); + } + + async getCurrentWeather({ lat, lon }: Coordinates): Promise { + const url = this.createUrl(`${API_CONFIG.BASE_URL}/weather`, { + lat: lat.toString(), + lon: lon.toString(), + units: "metric", + }); + return this.fetchData(url); + } + + async getForecast({ lat, lon }: Coordinates): Promise { + const url = this.createUrl(`${API_CONFIG.BASE_URL}/forecast`, { + lat: lat.toString(), + lon: lon.toString(), + units: "metric", + }); + return this.fetchData(url); + } + + async reverseGeocode({ + lat, + lon, + }: Coordinates): Promise { + const url = this.createUrl(`${API_CONFIG.GEO}/reverse`, { + lat: lat.toString(), + lon: lon.toString(), + limit: "1", + }); + return this.fetchData(url); + } + + async searchLocations(query: string): Promise { + const url = this.createUrl(`${API_CONFIG.GEO}/direct`, { + q: query, + limit: "5", + }); + return this.fetchData(url); + } +} + +export const weatherAPI = new WeatherAPI(); diff --git a/src/components/city-search.tsx b/src/components/city-search.tsx new file mode 100644 index 0000000..504a23d --- /dev/null +++ b/src/components/city-search.tsx @@ -0,0 +1,168 @@ +import { useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { format } from "date-fns"; +import { Search, Loader2, Clock, Star, XCircle } from "lucide-react"; +import { useLocationSearch } from "@/hooks/use-weather"; +import { useSearchHistory } from "@/hooks/use-search-history"; +import { + Command, + CommandDialog, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + CommandSeparator, +} from "@/components/ui/command"; +import { Button } from "@/components/ui/button"; +import { useFavorites } from "@/hooks/use-favorite"; + +export function CitySearch() { + const [open, setOpen] = useState(false); + const [query, setQuery] = useState(""); + const navigate = useNavigate(); + + const { data: locations, isLoading } = useLocationSearch(query); + const { favorites } = useFavorites(); + const { history, clearHistory, addToHistory } = useSearchHistory(); + + const handleSelect = (cityData: string) => { + const [lat, lon, name, country] = cityData.split("|"); + + // Add to search history + addToHistory.mutate({ + query, + name, + lat: parseFloat(lat), + lon: parseFloat(lon), + country, + }); + + setOpen(false); + navigate(`/city/${name}?lat=${lat}&lon=${lon}`); + }; + + return ( + <> + + + + + + {query.length > 2 && !isLoading && ( + No cities found. + )} + + {/* Favorites Section */} + {favorites.length > 0 && ( + + {favorites.map((city) => ( + + + {city.name} + {city.state && ( + + , {city.state} + + )} + + , {city.country} + + + ))} + + )} + + {/* Search History Section */} + {history.length > 0 && ( + <> + + +
+

+ Recent Searches +

+ +
+ {history.map((item) => ( + + + {item.name} + {item.state && ( + + , {item.state} + + )} + + , {item.country} + + + {format(item.searchedAt, "MMM d, h:mm a")} + + + ))} +
+ + )} + + {/* Search Results */} + + {locations && locations.length > 0 && ( + + {isLoading && ( +
+ +
+ )} + {locations?.map((location) => ( + + + {location.name} + {location.state && ( + + , {location.state} + + )} + + , {location.country} + + + ))} +
+ )} +
+
+
+ + ); +} diff --git a/src/components/current-weather.tsx b/src/components/current-weather.tsx new file mode 100644 index 0000000..2b7c2d8 --- /dev/null +++ b/src/components/current-weather.tsx @@ -0,0 +1,98 @@ +import { Card, CardContent } from "./ui/card"; +import { ArrowDown, ArrowUp, Droplets, Wind } from "lucide-react"; +import type { WeatherData, GeocodingResponse } from "@/api/types"; + +interface CurrentWeatherProps { + data: WeatherData; + locationName?: GeocodingResponse; +} + +export function CurrentWeather({ data, locationName }: CurrentWeatherProps) { + const { + weather: [currentWeather], + main: { temp, feels_like, temp_min, temp_max, humidity }, + wind: { speed }, + } = data; + + // Format temperature + const formatTemp = (temp: number) => `${Math.round(temp)}°`; + + return ( + + +
+
+
+
+

+ {locationName?.name} +

+ {locationName?.state && ( + + , {locationName.state} + + )} +
+

+ {locationName?.country} +

+
+ +
+

+ {formatTemp(temp)} +

+
+

+ Feels like {formatTemp(feels_like)} +

+
+ + + {formatTemp(temp_min)} + + + + {formatTemp(temp_max)} + +
+
+
+ +
+
+ +
+

Humidity

+

{humidity}%

+
+
+
+ +
+

Wind Speed

+

{speed} m/s

+
+
+
+
+ +
+
+ {currentWeather.description} +
+

+ {currentWeather.description} +

+
+
+
+
+
+
+ ); +} diff --git a/src/components/favorite-button.tsx b/src/components/favorite-button.tsx new file mode 100644 index 0000000..fe4277a --- /dev/null +++ b/src/components/favorite-button.tsx @@ -0,0 +1,43 @@ +// src/components/weather/favorite-button.tsx +import { Star } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import type { WeatherData } from "@/api/types"; +import { useFavorites } from "@/hooks/use-favorite"; +import { toast } from "sonner"; + +interface FavoriteButtonProps { + data: WeatherData; +} + +export function FavoriteButton({ data }: FavoriteButtonProps) { + const { addFavorite, removeFavorite, isFavorite } = useFavorites(); + const isCurrentlyFavorite = isFavorite(data.coord.lat, data.coord.lon); + + const handleToggleFavorite = () => { + if (isCurrentlyFavorite) { + removeFavorite.mutate(`${data.coord.lat}-${data.coord.lon}`); + toast.error(`Removed ${data.name} from Favorites`); + } else { + addFavorite.mutate({ + name: data.name, + lat: data.coord.lat, + lon: data.coord.lon, + country: data.sys.country, + }); + toast.success(`Added ${data.name} to Favorites`); + } + }; + + return ( + + ); +} diff --git a/src/components/favorite-cities.tsx b/src/components/favorite-cities.tsx new file mode 100644 index 0000000..f2a50ac --- /dev/null +++ b/src/components/favorite-cities.tsx @@ -0,0 +1,109 @@ +// src/components/weather/favorite-cities.tsx +import { useNavigate } from "react-router-dom"; +import { useWeatherQuery } from "@/hooks/use-weather"; +import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; +import { X, Loader2 } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { useFavorites } from "@/hooks/use-favorite"; +import { toast } from "sonner"; + +interface FavoriteCityTabletProps { + id: string; + name: string; + lat: number; + lon: number; + onRemove: (id: string) => void; +} + +function FavoriteCityTablet({ + id, + name, + lat, + lon, + onRemove, +}: FavoriteCityTabletProps) { + const navigate = useNavigate(); + const { data: weather, isLoading } = useWeatherQuery({ lat, lon }); + + const handleClick = () => { + navigate(`/city/${name}?lat=${lat}&lon=${lon}`); + }; + + return ( +
+ + + {isLoading ? ( +
+ +
+ ) : weather ? ( + <> +
+ {weather.weather[0].description} +
+

{name}

+

+ {weather.sys.country} +

+
+
+
+

+ {Math.round(weather.main.temp)}° +

+

+ {weather.weather[0].description} +

+
+ + ) : null} +
+ ); +} + +export function FavoriteCities() { + const { favorites, removeFavorite } = useFavorites(); + + if (!favorites.length) { + return null; + } + + return ( + <> +

Favorites

+ +
+ {favorites.map((city) => ( + removeFavorite.mutate(city.id)} + /> + ))} +
+ +
+ + ); +} diff --git a/src/components/header.tsx b/src/components/header.tsx new file mode 100644 index 0000000..4b4e720 --- /dev/null +++ b/src/components/header.tsx @@ -0,0 +1,27 @@ +import { Link } from "react-router-dom"; +import { CitySearch } from "./city-search"; +import { ThemeToggle } from "./theme-toggle"; +import { useTheme } from "@/context/theme-provider"; + +export function Header() { + const { theme } = useTheme(); + + return ( +
+
+ + Klimate logo + + +
+ + +
+
+
+ ); +} diff --git a/src/components/hourly-temprature.tsx b/src/components/hourly-temprature.tsx new file mode 100644 index 0000000..9e4f59b --- /dev/null +++ b/src/components/hourly-temprature.tsx @@ -0,0 +1,107 @@ +import { Card, CardContent, CardHeader, CardTitle } from "./ui/card"; +import { + LineChart, + Line, + XAxis, + YAxis, + Tooltip, + ResponsiveContainer, +} from "recharts"; +import { format } from "date-fns"; +import type { ForecastData } from "@/api/types"; + +interface HourlyTemperatureProps { + data: ForecastData; +} + +interface ChartData { + time: string; + temp: number; + feels_like: number; +} + +export function HourlyTemperature({ data }: HourlyTemperatureProps) { + // Get today's forecast data and format for chart + + const chartData: ChartData[] = data.list + .slice(0, 8) // Get next 24 hours (3-hour intervals) + .map((item) => ({ + time: format(new Date(item.dt * 1000), "ha"), + temp: Math.round(item.main.temp), + feels_like: Math.round(item.main.feels_like), + })); + + return ( + + + Today's Temperature + + +
+ + + + `${value}°`} + /> + { + if (active && payload && payload.length) { + return ( +
+
+
+ + Temperature + + + {payload[0].value}° + +
+
+ + Feels Like + + + {payload[1].value}° + +
+
+
+ ); + } + return null; + }} + /> + + +
+
+
+
+
+ ); +} diff --git a/src/components/layout.tsx b/src/components/layout.tsx new file mode 100644 index 0000000..d562099 --- /dev/null +++ b/src/components/layout.tsx @@ -0,0 +1,18 @@ +import type { PropsWithChildren } from "react"; +import { Header } from "./header"; + +export function Layout({ children }: PropsWithChildren) { + return ( +
+
+
+ {children} +
+
+
+

Made with 💗 by RoadsideCoder

+
+
+
+ ); +} diff --git a/src/components/loading-skeleton.tsx b/src/components/loading-skeleton.tsx new file mode 100644 index 0000000..a19d0e3 --- /dev/null +++ b/src/components/loading-skeleton.tsx @@ -0,0 +1,18 @@ +import { Skeleton } from "./ui/skeleton"; + +function WeatherSkeleton() { + return ( +
+
+ + +
+ + +
+
+
+ ); +} + +export default WeatherSkeleton; diff --git a/src/components/theme-toggle.tsx b/src/components/theme-toggle.tsx new file mode 100644 index 0000000..62494fc --- /dev/null +++ b/src/components/theme-toggle.tsx @@ -0,0 +1,23 @@ +import { Moon, Sun } from "lucide-react"; +import { useTheme } from "@/context/theme-provider"; + +export function ThemeToggle() { + const { theme, setTheme } = useTheme(); + const isDark = theme === "dark"; + + return ( +
setTheme(isDark ? "light" : "dark")} + className={`flex items-center cursor-pointer transition-transform duration-500 ${ + isDark ? "rotate-180" : "rotate-0" + }`} + > + {isDark ? ( + + ) : ( + + )} + Toggle theme +
+ ); +} diff --git a/src/components/ui/alert.tsx b/src/components/ui/alert.tsx new file mode 100644 index 0000000..5afd41d --- /dev/null +++ b/src/components/ui/alert.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7", + { + variants: { + variant: { + default: "bg-background text-foreground", + destructive: + "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +const Alert = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes & VariantProps +>(({ className, variant, ...props }, ref) => ( +
+)) +Alert.displayName = "Alert" + +const AlertTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertTitle.displayName = "AlertTitle" + +const AlertDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertDescription.displayName = "AlertDescription" + +export { Alert, AlertTitle, AlertDescription } diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..65d4fcd --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..77e9fb7 --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,76 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx new file mode 100644 index 0000000..1d1d9fd --- /dev/null +++ b/src/components/ui/command.tsx @@ -0,0 +1,153 @@ +import * as React from "react" +import { type DialogProps } from "@radix-ui/react-dialog" +import { MagnifyingGlassIcon } from "@radix-ui/react-icons" +import { Command as CommandPrimitive } from "cmdk" + +import { cn } from "@/lib/utils" +import { Dialog, DialogContent } from "@/components/ui/dialog" + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Command.displayName = CommandPrimitive.displayName + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + + + + {children} + + + + ) +} + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)) + +CommandInput.displayName = CommandPrimitive.Input.displayName + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandList.displayName = CommandPrimitive.List.displayName + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)) + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandGroup.displayName = CommandPrimitive.Group.displayName + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +CommandSeparator.displayName = CommandPrimitive.Separator.displayName + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandItem.displayName = CommandPrimitive.Item.displayName + +const CommandShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +CommandShortcut.displayName = "CommandShortcut" + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +} diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx new file mode 100644 index 0000000..95b0d38 --- /dev/null +++ b/src/components/ui/dialog.tsx @@ -0,0 +1,122 @@ +"use client" + +import * as React from "react" +import * as DialogPrimitive from "@radix-ui/react-dialog" +import { Cross2Icon } from "@radix-ui/react-icons" + +import { cn } from "@/lib/utils" + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = DialogPrimitive.Portal + +const DialogClose = DialogPrimitive.Close + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogHeader.displayName = "DialogHeader" + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogFooter.displayName = "DialogFooter" + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogTrigger, + DialogClose, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/src/components/ui/scroll-area.tsx b/src/components/ui/scroll-area.tsx new file mode 100644 index 0000000..cf253cf --- /dev/null +++ b/src/components/ui/scroll-area.tsx @@ -0,0 +1,46 @@ +import * as React from "react" +import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area" + +import { cn } from "@/lib/utils" + +const ScrollArea = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + {children} + + + + +)) +ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName + +const ScrollBar = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, orientation = "vertical", ...props }, ref) => ( + + + +)) +ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName + +export { ScrollArea, ScrollBar } diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 0000000..d7e45f7 --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "@/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export { Skeleton } diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx new file mode 100644 index 0000000..1128edf --- /dev/null +++ b/src/components/ui/sonner.tsx @@ -0,0 +1,29 @@ +import { useTheme } from "next-themes" +import { Toaster as Sonner } from "sonner" + +type ToasterProps = React.ComponentProps + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx new file mode 100644 index 0000000..218d183 --- /dev/null +++ b/src/components/ui/tooltip.tsx @@ -0,0 +1,30 @@ +import * as React from "react" +import * as TooltipPrimitive from "@radix-ui/react-tooltip" + +import { cn } from "@/lib/utils" + +const TooltipProvider = TooltipPrimitive.Provider + +const Tooltip = TooltipPrimitive.Root + +const TooltipTrigger = TooltipPrimitive.Trigger + +const TooltipContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +TooltipContent.displayName = TooltipPrimitive.Content.displayName + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } diff --git a/src/components/weather-details.tsx b/src/components/weather-details.tsx new file mode 100644 index 0000000..b760799 --- /dev/null +++ b/src/components/weather-details.tsx @@ -0,0 +1,78 @@ +import { Card, CardContent, CardHeader, CardTitle } from "./ui/card"; +import { Sunrise, Sunset, Compass, Gauge } from "lucide-react"; +import { format } from "date-fns"; +import type { WeatherData } from "@/api/types"; + +interface WeatherDetailsProps { + data: WeatherData; +} + +export function WeatherDetails({ data }: WeatherDetailsProps) { + const { wind, main, sys } = data; + + // Format time using date-fns + const formatTime = (timestamp: number) => { + return format(new Date(timestamp * 1000), "h:mm a"); + }; + + // Convert wind degree to direction + const getWindDirection = (degree: number) => { + const directions = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]; + const index = + Math.round(((degree %= 360) < 0 ? degree + 360 : degree) / 45) % 8; + return directions[index]; + }; + + const details = [ + { + title: "Sunrise", + value: formatTime(sys.sunrise), + icon: Sunrise, + color: "text-orange-500", + }, + { + title: "Sunset", + value: formatTime(sys.sunset), + icon: Sunset, + color: "text-blue-500", + }, + { + title: "Wind Direction", + value: `${getWindDirection(wind.deg)} (${wind.deg}°)`, + icon: Compass, + color: "text-green-500", + }, + { + title: "Pressure", + value: `${main.pressure} hPa`, + icon: Gauge, + color: "text-purple-500", + }, + ]; + + return ( + + + Weather Details + + +
+ {details.map((detail) => ( +
+ +
+

+ {detail.title} +

+

{detail.value}

+
+
+ ))} +
+
+
+ ); +} diff --git a/src/components/weather-forecast.tsx b/src/components/weather-forecast.tsx new file mode 100644 index 0000000..eb7b19e --- /dev/null +++ b/src/components/weather-forecast.tsx @@ -0,0 +1,100 @@ +import { Card, CardContent, CardHeader, CardTitle } from "./ui/card"; +import { ArrowDown, ArrowUp, Droplets, Wind } from "lucide-react"; +import { format } from "date-fns"; +import type { ForecastData } from "@/api/types"; + +interface WeatherForecastProps { + data: ForecastData; +} + +interface DailyForecast { + date: number; + temp_min: number; + temp_max: number; + humidity: number; + wind: number; + weather: { + id: number; + main: string; + description: string; + icon: string; + }; +} + +export function WeatherForecast({ data }: WeatherForecastProps) { + // Group forecast by day and get daily min/max + const dailyForecasts = data.list.reduce((acc, forecast) => { + const date = format(new Date(forecast.dt * 1000), "yyyy-MM-dd"); + + if (!acc[date]) { + acc[date] = { + temp_min: forecast.main.temp_min, + temp_max: forecast.main.temp_max, + humidity: forecast.main.humidity, + wind: forecast.wind.speed, + weather: forecast.weather[0], + date: forecast.dt, + }; + } else { + acc[date].temp_min = Math.min(acc[date].temp_min, forecast.main.temp_min); + acc[date].temp_max = Math.max(acc[date].temp_max, forecast.main.temp_max); + } + + return acc; + }, {} as Record); + + // Get next 5 days + const nextDays = Object.values(dailyForecasts).slice(1, 6); + + // Format temperature + const formatTemp = (temp: number) => `${Math.round(temp)}°`; + + return ( + + + 5-Day Forecast + + +
+ {nextDays.map((day) => ( +
+
+

+ {format(new Date(day.date * 1000), "EEE, MMM d")} +

+

+ {day.weather.description} +

+
+ +
+ + + {formatTemp(day.temp_min)} + + + + {formatTemp(day.temp_max)} + +
+ +
+ + + {day.humidity}% + + + + {day.wind}m/s + +
+
+ ))} +
+
+
+ ); +} diff --git a/src/context/theme-provider.tsx b/src/context/theme-provider.tsx new file mode 100644 index 0000000..7b9eeb2 --- /dev/null +++ b/src/context/theme-provider.tsx @@ -0,0 +1,73 @@ +import { createContext, useContext, useEffect, useState } from "react"; + +type Theme = "dark" | "light" | "system"; + +type ThemeProviderProps = { + children: React.ReactNode; + defaultTheme?: Theme; + storageKey?: string; +}; + +type ThemeProviderState = { + theme: Theme; + setTheme: (theme: Theme) => void; +}; + +const initialState: ThemeProviderState = { + theme: "system", + setTheme: () => null, +}; + +const ThemeProviderContext = createContext(initialState); + +export function ThemeProvider({ + children, + defaultTheme = "system", + storageKey = "vite-ui-theme", + ...props +}: ThemeProviderProps) { + const [theme, setTheme] = useState( + () => (localStorage.getItem(storageKey) as Theme) || defaultTheme + ); + + useEffect(() => { + const root = window.document.documentElement; + + root.classList.remove("light", "dark"); + + if (theme === "system") { + const systemTheme = window.matchMedia("(prefers-color-scheme: dark)") + .matches + ? "dark" + : "light"; + + root.classList.add(systemTheme); + return; + } + + root.classList.add(theme); + }, [theme]); + + const value = { + theme, + setTheme: (theme: Theme) => { + localStorage.setItem(storageKey, theme); + setTheme(theme); + }, + }; + + return ( + + {children} + + ); +} + +export const useTheme = () => { + const context = useContext(ThemeProviderContext); + + if (context === undefined) + throw new Error("useTheme must be used within a ThemeProvider"); + + return context; +}; diff --git a/src/hooks/use-favorite.ts b/src/hooks/use-favorite.ts new file mode 100644 index 0000000..2435f26 --- /dev/null +++ b/src/hooks/use-favorite.ts @@ -0,0 +1,70 @@ +// src/hooks/use-favorites.ts +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { useLocalStorage } from "./use-local-storage"; + +export interface FavoriteCity { + id: string; + name: string; + lat: number; + lon: number; + country: string; + state?: string; + addedAt: number; +} + +export function useFavorites() { + const [favorites, setFavorites] = useLocalStorage( + "favorites", + [] + ); + const queryClient = useQueryClient(); + + const favoritesQuery = useQuery({ + queryKey: ["favorites"], + queryFn: () => favorites, + initialData: favorites, + staleTime: Infinity, // Since we're managing the data in localStorage + }); + + const addFavorite = useMutation({ + mutationFn: async (city: Omit) => { + const newFavorite: FavoriteCity = { + ...city, + id: `${city.lat}-${city.lon}`, + addedAt: Date.now(), + }; + + // Prevent duplicates + const exists = favorites.some((fav) => fav.id === newFavorite.id); + if (exists) return favorites; + + const newFavorites = [...favorites, newFavorite]; + setFavorites(newFavorites); + return newFavorites; + }, + onSuccess: () => { + // Invalidate and refetch + queryClient.invalidateQueries({ queryKey: ["favorites"] }); + }, + }); + + const removeFavorite = useMutation({ + mutationFn: async (cityId: string) => { + const newFavorites = favorites.filter((city) => city.id !== cityId); + setFavorites(newFavorites); + return newFavorites; + }, + onSuccess: () => { + // Invalidate and refetch + queryClient.invalidateQueries({ queryKey: ["favorites"] }); + }, + }); + + return { + favorites: favoritesQuery.data, + addFavorite, + removeFavorite, + isFavorite: (lat: number, lon: number) => + favorites.some((city) => city.lat === lat && city.lon === lon), + }; +} diff --git a/src/hooks/use-geolocation.ts b/src/hooks/use-geolocation.ts new file mode 100644 index 0000000..4390c7f --- /dev/null +++ b/src/hooks/use-geolocation.ts @@ -0,0 +1,81 @@ +import { useState, useEffect } from "react"; +import type { Coordinates } from "@/api/types"; + +interface GeolocationState { + coordinates: Coordinates | null; + error: string | null; + isLoading: boolean; +} + +export function useGeolocation() { + const [locationData, setLocationData] = useState({ + coordinates: null, + error: null, + isLoading: true, + }); + + const getLocation = () => { + setLocationData((prev) => ({ ...prev, isLoading: true, error: null })); + + if (!navigator.geolocation) { + setLocationData({ + coordinates: null, + error: "Geolocation is not supported by your browser", + isLoading: false, + }); + return; + } + + navigator.geolocation.getCurrentPosition( + (position) => { + setLocationData({ + coordinates: { + lat: position.coords.latitude, + lon: position.coords.longitude, + }, + error: null, + isLoading: false, + }); + }, + (error) => { + let errorMessage: string; + + switch (error.code) { + case error.PERMISSION_DENIED: + errorMessage = + "Location permission denied. Please enable location access."; + break; + case error.POSITION_UNAVAILABLE: + errorMessage = "Location information is unavailable."; + break; + case error.TIMEOUT: + errorMessage = "Location request timed out."; + break; + default: + errorMessage = "An unknown error occurred."; + } + + setLocationData({ + coordinates: null, + error: errorMessage, + isLoading: false, + }); + }, + { + enableHighAccuracy: true, + timeout: 5000, + maximumAge: 0, + } + ); + }; + + // Get location on component mount + useEffect(() => { + getLocation(); + }, []); + + return { + ...locationData, + getLocation, // Expose method to manually refresh location + }; +} diff --git a/src/hooks/use-local-storage.ts b/src/hooks/use-local-storage.ts new file mode 100644 index 0000000..ee97432 --- /dev/null +++ b/src/hooks/use-local-storage.ts @@ -0,0 +1,23 @@ +import { useEffect, useState } from "react"; + +export function useLocalStorage(key: string, initialValue: T) { + const [storedValue, setStoredValue] = useState(() => { + try { + const item = window.localStorage.getItem(key); + return item ? JSON.parse(item) : initialValue; + } catch (error) { + console.error(error); + return initialValue; + } + }); + + useEffect(() => { + try { + window.localStorage.setItem(key, JSON.stringify(storedValue)); + } catch (error) { + console.error(error); + } + }, [key, storedValue]); + + return [storedValue, setStoredValue] as const; +} diff --git a/src/hooks/use-search-history.ts b/src/hooks/use-search-history.ts new file mode 100644 index 0000000..387ad2e --- /dev/null +++ b/src/hooks/use-search-history.ts @@ -0,0 +1,67 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { useLocalStorage } from "./use-local-storage"; + +interface SearchHistoryItem { + id: string; + query: string; + lat: number; + lon: number; + name: string; + country: string; + state?: string; + searchedAt: number; +} + +export function useSearchHistory() { + const [history, setHistory] = useLocalStorage( + "search-history", + [] + ); + const queryClient = useQueryClient(); + + const historyQuery = useQuery({ + queryKey: ["search-history"], + queryFn: () => history, + initialData: history, + }); + + const addToHistory = useMutation({ + mutationFn: async ( + search: Omit + ) => { + const newSearch: SearchHistoryItem = { + ...search, + id: `${search.lat}-${search.lon}-${Date.now()}`, + searchedAt: Date.now(), + }; + + // Remove duplicates and keep only last 10 searches + const filteredHistory = history.filter( + (item) => !(item.lat === search.lat && item.lon === search.lon) + ); + const newHistory = [newSearch, ...filteredHistory].slice(0, 10); + + setHistory(newHistory); + return newHistory; + }, + onSuccess: (newHistory) => { + queryClient.setQueryData(["search-history"], newHistory); + }, + }); + + const clearHistory = useMutation({ + mutationFn: async () => { + setHistory([]); + return []; + }, + onSuccess: () => { + queryClient.setQueryData(["search-history"], []); + }, + }); + + return { + history: historyQuery.data ?? [], + addToHistory, + clearHistory, + }; +} diff --git a/src/hooks/use-weather.ts b/src/hooks/use-weather.ts new file mode 100644 index 0000000..c32a703 --- /dev/null +++ b/src/hooks/use-weather.ts @@ -0,0 +1,44 @@ +import { useQuery } from "@tanstack/react-query"; +import { weatherAPI } from "@/api/weather"; +import type { Coordinates } from "@/api/types"; + +export const WEATHER_KEYS = { + weather: (coords: Coordinates) => ["weather", coords] as const, + forecast: (coords: Coordinates) => ["forecast", coords] as const, + location: (coords: Coordinates) => ["location", coords] as const, + search: (query: string) => ["location-search", query] as const, +} as const; + +export function useWeatherQuery(coordinates: Coordinates | null) { + return useQuery({ + queryKey: WEATHER_KEYS.weather(coordinates ?? { lat: 0, lon: 0 }), + queryFn: () => + coordinates ? weatherAPI.getCurrentWeather(coordinates) : null, + enabled: !!coordinates, + }); +} + +export function useForecastQuery(coordinates: Coordinates | null) { + return useQuery({ + queryKey: WEATHER_KEYS.forecast(coordinates ?? { lat: 0, lon: 0 }), + queryFn: () => (coordinates ? weatherAPI.getForecast(coordinates) : null), + enabled: !!coordinates, + }); +} + +export function useReverseGeocodeQuery(coordinates: Coordinates | null) { + return useQuery({ + queryKey: WEATHER_KEYS.location(coordinates ?? { lat: 0, lon: 0 }), + queryFn: () => + coordinates ? weatherAPI.reverseGeocode(coordinates) : null, + enabled: !!coordinates, + }); +} + +export function useLocationSearch(query: string) { + return useQuery({ + queryKey: WEATHER_KEYS.search(query), + queryFn: () => weatherAPI.searchLocations(query), + enabled: query.length >= 3, + }); +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..0b571ec --- /dev/null +++ b/src/index.css @@ -0,0 +1,67 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 0% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + } + .dark { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + --ring: 0 0% 83.1%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/pages/city-page.tsx b/src/pages/city-page.tsx new file mode 100644 index 0000000..d69b012 --- /dev/null +++ b/src/pages/city-page.tsx @@ -0,0 +1,61 @@ +import { useParams, useSearchParams } from "react-router-dom"; +import { useWeatherQuery, useForecastQuery } from "@/hooks/use-weather"; +import { Alert, AlertDescription } from "@/components/ui/alert"; +import { AlertTriangle } from "lucide-react"; +import { CurrentWeather } from "../components/current-weather"; +import { HourlyTemperature } from "../components/hourly-temprature"; +import { WeatherDetails } from "../components/weather-details"; +import { WeatherForecast } from "../components/weather-forecast"; +import WeatherSkeleton from "../components/loading-skeleton"; +import { FavoriteButton } from "@/components/favorite-button"; + +export function CityPage() { + const [searchParams] = useSearchParams(); + const params = useParams(); + const lat = parseFloat(searchParams.get("lat") || "0"); + const lon = parseFloat(searchParams.get("lon") || "0"); + + const coordinates = { lat, lon }; + + const weatherQuery = useWeatherQuery(coordinates); + const forecastQuery = useForecastQuery(coordinates); + + if (weatherQuery.error || forecastQuery.error) { + return ( + + + + Failed to load weather data. Please try again. + + + ); + } + + if (!weatherQuery.data || !forecastQuery.data || !params.cityName) { + return ; + } + + return ( +
+
+

+ {params.cityName}, {weatherQuery.data.sys.country} +

+
+ +
+
+ +
+ + +
+ + +
+
+
+ ); +} diff --git a/src/pages/weather-dashboard.tsx b/src/pages/weather-dashboard.tsx new file mode 100644 index 0000000..3d99f6b --- /dev/null +++ b/src/pages/weather-dashboard.tsx @@ -0,0 +1,132 @@ +import { + useForecastQuery, + useReverseGeocodeQuery, + useWeatherQuery, +} from "@/hooks/use-weather"; +import { CurrentWeather } from "../components/current-weather"; +import { Alert, AlertDescription, AlertTitle } from "../components/ui/alert"; +import { Button } from "../components/ui/button"; +import { MapPin, AlertTriangle, RefreshCw } from "lucide-react"; +import { useGeolocation } from "@/hooks/use-geolocation"; +import { WeatherDetails } from "../components/weather-details"; +import { WeatherForecast } from "../components/weather-forecast"; +import { HourlyTemperature } from "../components/hourly-temprature"; +import WeatherSkeleton from "../components/loading-skeleton"; +import { FavoriteCities } from "@/components/favorite-cities"; + +export function WeatherDashboard() { + const { + coordinates, + error: locationError, + isLoading: locationLoading, + getLocation, + } = useGeolocation(); + + const weatherQuery = useWeatherQuery(coordinates); + const forecastQuery = useForecastQuery(coordinates); + const locationQuery = useReverseGeocodeQuery(coordinates); + + // Function to refresh all data + const handleRefresh = () => { + getLocation(); + if (coordinates) { + weatherQuery.refetch(); + forecastQuery.refetch(); + locationQuery.refetch(); + } + }; + + if (locationLoading) { + return ; + } + + if (locationError) { + return ( + + + Location Error + +

{locationError}

+ +
+
+ ); + } + + if (!coordinates) { + return ( + + + Location Required + +

Please enable location access to see your local weather.

+ +
+
+ ); + } + + const locationName = locationQuery.data?.[0]; + + if (weatherQuery.error || forecastQuery.error) { + return ( + + + Error + +

Failed to fetch weather data. Please try again.

+ +
+
+ ); + } + + if (!weatherQuery.data || !forecastQuery.data) { + return ; + } + + return ( +
+ +
+

My Location

+ +
+ +
+
+ + +
+ +
+ + +
+
+
+ ); +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..e095f2e --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,57 @@ +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: ["class"], + content: ["./index.html", "./src/**/*.{ts,tsx,js,jsx}"], + theme: { + extend: { + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + } + } + } + }, + plugins: [require("tailwindcss-animate")], +}; diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..92af9f9 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1e17393 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..abcd7f0 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..cf45b55 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,12 @@ +import path from "path"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; + +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +});