From da018a070d1fc06909596930f426a934af46a672 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Fri, 23 Jan 2026 10:32:02 +0100 Subject: [PATCH] Neuere Version --- .dockerignore | 16 - .github/copilot-instructions.md | 112 - .gitignore | 24 + DOCKER.md | 101 - Dockerfile | 18 - README.md | 73 + bun.lockb | Bin 0 -> 245395 bytes components.json | 20 + docker-compose.yml | 17 - eslint.config.js | 26 + index.html | 78 +- nginx.conf | 28 - package-lock.json | 6692 +++++++++++++++++++++++++ package.json | 89 + planning.html | 721 --- planning.js | 799 --- postcss.config.js | 6 + public/favicon.ico | Bin 0 -> 20373 bytes public/placeholder.svg | 1 + public/robots.txt | 14 + script.js | 227 - src/App.css | 42 + src/App.tsx | 32 + src/components/FieldSettings.tsx | 49 + src/components/Header.tsx | 61 + src/components/MatchScoreInput.tsx | 108 + src/components/NavLink.tsx | 28 + src/components/ScoreboardModal.tsx | 208 + src/components/TeamForm.tsx | 115 + src/components/TeamList.tsx | 78 + src/components/TournamentView.tsx | 189 + src/components/ui/accordion.tsx | 52 + src/components/ui/alert-dialog.tsx | 104 + src/components/ui/alert.tsx | 43 + src/components/ui/aspect-ratio.tsx | 5 + src/components/ui/avatar.tsx | 38 + src/components/ui/badge.tsx | 29 + src/components/ui/breadcrumb.tsx | 90 + src/components/ui/button.tsx | 47 + src/components/ui/calendar.tsx | 54 + src/components/ui/card.tsx | 43 + src/components/ui/carousel.tsx | 224 + src/components/ui/chart.tsx | 303 ++ src/components/ui/checkbox.tsx | 26 + src/components/ui/collapsible.tsx | 9 + src/components/ui/command.tsx | 132 + src/components/ui/context-menu.tsx | 178 + src/components/ui/dialog.tsx | 95 + src/components/ui/drawer.tsx | 87 + src/components/ui/dropdown-menu.tsx | 179 + src/components/ui/form.tsx | 129 + src/components/ui/hover-card.tsx | 27 + src/components/ui/input-otp.tsx | 61 + src/components/ui/input.tsx | 22 + src/components/ui/label.tsx | 17 + src/components/ui/menubar.tsx | 207 + src/components/ui/navigation-menu.tsx | 120 + src/components/ui/pagination.tsx | 81 + src/components/ui/popover.tsx | 29 + src/components/ui/progress.tsx | 23 + src/components/ui/radio-group.tsx | 36 + src/components/ui/resizable.tsx | 37 + src/components/ui/scroll-area.tsx | 38 + src/components/ui/select.tsx | 143 + src/components/ui/separator.tsx | 20 + src/components/ui/sheet.tsx | 107 + src/components/ui/sidebar.tsx | 637 +++ src/components/ui/skeleton.tsx | 7 + src/components/ui/slider.tsx | 23 + src/components/ui/sonner.tsx | 27 + src/components/ui/switch.tsx | 27 + src/components/ui/table.tsx | 72 + src/components/ui/tabs.tsx | 53 + src/components/ui/textarea.tsx | 21 + src/components/ui/toast.tsx | 111 + src/components/ui/toaster.tsx | 24 + src/components/ui/toggle-group.tsx | 49 + src/components/ui/toggle.tsx | 37 + src/components/ui/tooltip.tsx | 28 + src/components/ui/use-toast.ts | 3 + src/context/TournamentContext.tsx | 166 + src/hooks/use-mobile.tsx | 19 + src/hooks/use-toast.ts | 186 + src/index.css | 125 + src/lib/utils.ts | 6 + src/main.tsx | 5 + src/pages/Index.tsx | 49 + src/pages/NotFound.tsx | 24 + src/pages/Tournament.tsx | 15 + src/test/example.test.ts | 7 + src/test/setup.ts | 15 + src/types/tournament.ts | 50 + src/utils/tournamentUtils.ts | 73 + src/vite-env.d.ts | 1 + styles.css | 300 -- tailwind.config.ts | 107 + tsconfig.app.json | 31 + tsconfig.json | 16 + tsconfig.node.json | 22 + vite.config.ts | 23 + vitest.config.ts | 16 + 101 files changed, 12784 insertions(+), 2398 deletions(-) delete mode 100644 .dockerignore delete mode 100644 .github/copilot-instructions.md create mode 100644 .gitignore delete mode 100644 DOCKER.md delete mode 100644 Dockerfile create mode 100644 README.md create mode 100644 bun.lockb create mode 100644 components.json delete mode 100644 docker-compose.yml create mode 100644 eslint.config.js delete mode 100644 nginx.conf create mode 100644 package-lock.json create mode 100644 package.json delete mode 100644 planning.html delete mode 100644 planning.js create mode 100644 postcss.config.js create mode 100644 public/favicon.ico create mode 100644 public/placeholder.svg create mode 100644 public/robots.txt delete mode 100644 script.js create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/components/FieldSettings.tsx create mode 100644 src/components/Header.tsx create mode 100644 src/components/MatchScoreInput.tsx create mode 100644 src/components/NavLink.tsx create mode 100644 src/components/ScoreboardModal.tsx create mode 100644 src/components/TeamForm.tsx create mode 100644 src/components/TeamList.tsx create mode 100644 src/components/TournamentView.tsx create mode 100644 src/components/ui/accordion.tsx create mode 100644 src/components/ui/alert-dialog.tsx create mode 100644 src/components/ui/alert.tsx create mode 100644 src/components/ui/aspect-ratio.tsx create mode 100644 src/components/ui/avatar.tsx create mode 100644 src/components/ui/badge.tsx create mode 100644 src/components/ui/breadcrumb.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/calendar.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/carousel.tsx create mode 100644 src/components/ui/chart.tsx create mode 100644 src/components/ui/checkbox.tsx create mode 100644 src/components/ui/collapsible.tsx create mode 100644 src/components/ui/command.tsx create mode 100644 src/components/ui/context-menu.tsx create mode 100644 src/components/ui/dialog.tsx create mode 100644 src/components/ui/drawer.tsx create mode 100644 src/components/ui/dropdown-menu.tsx create mode 100644 src/components/ui/form.tsx create mode 100644 src/components/ui/hover-card.tsx create mode 100644 src/components/ui/input-otp.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/menubar.tsx create mode 100644 src/components/ui/navigation-menu.tsx create mode 100644 src/components/ui/pagination.tsx create mode 100644 src/components/ui/popover.tsx create mode 100644 src/components/ui/progress.tsx create mode 100644 src/components/ui/radio-group.tsx create mode 100644 src/components/ui/resizable.tsx create mode 100644 src/components/ui/scroll-area.tsx create mode 100644 src/components/ui/select.tsx create mode 100644 src/components/ui/separator.tsx create mode 100644 src/components/ui/sheet.tsx create mode 100644 src/components/ui/sidebar.tsx create mode 100644 src/components/ui/skeleton.tsx create mode 100644 src/components/ui/slider.tsx create mode 100644 src/components/ui/sonner.tsx create mode 100644 src/components/ui/switch.tsx create mode 100644 src/components/ui/table.tsx create mode 100644 src/components/ui/tabs.tsx create mode 100644 src/components/ui/textarea.tsx create mode 100644 src/components/ui/toast.tsx create mode 100644 src/components/ui/toaster.tsx create mode 100644 src/components/ui/toggle-group.tsx create mode 100644 src/components/ui/toggle.tsx create mode 100644 src/components/ui/tooltip.tsx create mode 100644 src/components/ui/use-toast.ts create mode 100644 src/context/TournamentContext.tsx create mode 100644 src/hooks/use-mobile.tsx create mode 100644 src/hooks/use-toast.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/Index.tsx create mode 100644 src/pages/NotFound.tsx create mode 100644 src/pages/Tournament.tsx create mode 100644 src/test/example.test.ts create mode 100644 src/test/setup.ts create mode 100644 src/types/tournament.ts create mode 100644 src/utils/tournamentUtils.ts create mode 100644 src/vite-env.d.ts delete mode 100644 styles.css create mode 100644 tailwind.config.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts create mode 100644 vitest.config.ts diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 51251d5..0000000 --- a/.dockerignore +++ /dev/null @@ -1,16 +0,0 @@ -# Git -.git -.gitignore -.github - -# Docker -Dockerfile -docker-compose.yml -.dockerignore - -# IDE -.vscode -.idea - -# Dokumentation (optional - auskommentieren falls benötigt) -# README.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index fa972bf..0000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,112 +0,0 @@ -# Copilot Instructions for Turnierplaner - -## Project Overview - -**Turnierplaner** (Tournament Planner) is a German-language, client-side volleyball tournament management app for the "NVJ" organization. It handles team registration, round-robin rotation logic, live scoring, and leaderboards for two leagues: "Bundesliga" and "Champions League". - -### Tech Stack -- **Frontend**: Vanilla HTML, CSS, JavaScript (ES6+) -- **Persistence**: LocalStorage for all data (no backend) -- **UI Pattern**: Multi-page app with shared state via localStorage -- **Build**: None - runs directly in browser via file:// or static server - -## Architecture & Key Components - -### Two-Page Structure -1. **[index.html](index.html)** + [script.js](script.js): Team entry interface - - Add/remove teams with name, club, and motto fields - - Set field count (used to calculate fields per league) - - Export/import tournament configuration as JSON - - Navigate to planning view with "Weiter →" - -2. **[planning.html](planning.html)** + [planning.js](planning.js): Live tournament management - - Display current round matchups on fields (grid layout: field number | team 1 | team 2) - - Show waiting teams below the playing fields - - Live score input per match with automatic point calculation - - Round rotation system with "Nächste Runde" button - - Timer with custom input (MM:SS or seconds) - - Modals for: Points History, Scoreboard (rankings), Reset confirmation - -### Data Flow & State Management - -**Three localStorage Keys** ([planning.js](planning.js#L1-L3)): -- `turnierplaner_data`: Teams + field count (shared between pages) -- `turnierplaner_rotation`: Current round number + team order per league -- `turnierplaner_scores`: Match results keyed by `"league:fieldNum"` - -**Critical Logic**: Field allocation in [planning.js](planning.js#L63-L76) -```javascript -// fieldCount = number of physical fields (from user input) -// Each field has 2 halves, so max playing teams = fieldCount * 2 -const maxPlayingTeams = fieldCount * 2; -const playingTeamsCount = Math.min(teams.length, maxPlayingTeams); -const fieldsPerLeague = Math.ceil(playingTeamsCount / 2); -``` - -**Round Rotation** ([planning.js](planning.js#L574-L611)): Three rotation strategies based on waiting team count: -- **Fall 1** (0 waiting, teams === fieldCount * 2): Team at index 0 stays, team at index 1 moves to end -- **Fall 2** (1 waiting, teams === fieldCount * 2 + 1): All rotate by 1, first team goes to end -- **Fall 3** (2+ waiting, teams > fieldCount * 2 + 1): Swap playing/waiting blocks entirely - -**Point Calculation** ([planning.js](planning.js#L544-L565)): Winner gets `|score1 - score2| + 2`, loser gets `-|score1 - score2|`, tie = 0 - -## Development Workflows - -### Running Locally -```bash -# No build step - open directly in browser -start index.html # Windows -# Or use a local server for better CORS handling -npx serve . -``` - -### Testing Changes -1. Open browser DevTools → Application → Local Storage -2. Clear `turnierplaner_*` keys to reset state -3. Use Export/Import JSON to preserve test data - -### Debugging Rotation Logic -Add breakpoints in [planning.js](planning.js#L574) `rotateLeague()`. Check `rotationState.teamOrder` vs actual team indices. - -## Code Conventions & Patterns - -### Naming & Structure -- German UI text (labels, buttons, alerts), English code (variables, functions) -- Global functions (no modules): `onclick="functionName()"` in HTML -- Modal pattern: `open{Name}Modal()` / `close{Name}Modal()` with `display: block/none` -- Auto-save: Input event listeners trigger `saveData()` ([script.js](script.js#L94-L99)) - -### Score Input Pattern ([planning.js](planning.js#L116-L120)) -```javascript -// Inline onchange in field card HTML -onchange="updateMatchScore('bundesliga', 1, this.value, otherInput.value)" -``` - -### XSS Prevention -Use `escapeHtml()` ([script.js](script.js#L203-L210)) for user input in team names/clubs/mottos - -### Mobile-First CSS ([styles.css](styles.css)) -- `viewport-fit=cover` for iOS safe areas -- Touch-optimized: `min-height: 44px`, `touch-action: manipulation` -- Responsive grid: `grid-template-columns: 1fr 1fr` → `1fr` on mobile - -## Integration Points & Dependencies - -### External Dependencies -None - pure vanilla JavaScript - -### Browser APIs -- **LocalStorage**: All persistence ([script.js](script.js#L1), [planning.js](planning.js#L1-L3)) -- **File API**: JSON import via `` ([script.js](script.js#L180-L200)) -- **Blob API**: JSON export download ([script.js](script.js#L166-L177)) - -### Cross-Page Communication -Exclusively via localStorage keys. [index.html](index.html) writes `turnierplaner_data`, [planning.html](planning.html) reads it on load ([planning.js](planning.js#L12-L14)). - -## Important Gotchas - -1. **Field Count Logic**: `fieldCount` from user input = physical fields. Each field has 2 halves, so max `playingTeamsCount = fieldCount * 2` -2. **Field Numbering Offset**: Champions League fields start after Bundesliga fields ([planning.js](planning.js#L65-L69)) -3. **Round State Mismatch**: If `rotationState` deleted but `matchScores` exists, scores reference wrong teams -4. **Timer Doesn't Persist**: Timer state (`timerSeconds`, `isRunning`) not saved to localStorage -5. **Deletion Side Effects**: Deleting teams in [index.html](index.html) doesn't invalidate [planning.html](planning.html) rotation state diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# 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? diff --git a/DOCKER.md b/DOCKER.md deleted file mode 100644 index 5a3f027..0000000 --- a/DOCKER.md +++ /dev/null @@ -1,101 +0,0 @@ -# Turnierplaner - Docker Deployment - -## Docker Setup - -Die Anwendung ist als statischer Container mit nginx konfiguriert. - -### Voraussetzungen -- Docker Desktop für Windows installiert und gestartet -- Docker Compose (ist in Docker Desktop enthalten) - -### Anwendung starten - -**Option 1: Mit Docker Compose (empfohlen)** -```powershell -# Container bauen und starten -docker-compose up -d - -# Logs anzeigen -docker-compose logs -f - -# Container stoppen -docker-compose down -``` - -**Option 2: Mit Docker direkt** -```powershell -# Image bauen -docker build -t turnierplaner:latest . - -# Container starten -docker run -d -p 8080:80 --name turnierplaner turnierplaner:latest - -# Container stoppen -docker stop turnierplaner -docker rm turnierplaner -``` - -### Anwendung aufrufen - -Nach dem Start ist die Anwendung erreichbar unter: -- **http://localhost:8080** - -### Nützliche Befehle - -```powershell -# Container Status prüfen -docker ps - -# Container Logs anzeigen -docker logs turnierplaner - -# In Container einsteigen (für Debugging) -docker exec -it turnierplaner sh - -# Image neu bauen (nach Änderungen) -docker-compose build -docker-compose up -d - -# Alle Container/Images aufräumen -docker-compose down -docker system prune -a -``` - -### Port ändern - -Falls Port 8080 bereits belegt ist, ändere in [docker-compose.yml](docker-compose.yml): -```yaml -ports: - - "3000:80" # Statt 8080 -``` - -### Daten-Persistenz - -Die Anwendung speichert alle Daten im Browser LocalStorage. Die Daten bleiben auch nach Container-Neustart erhalten, solange du denselben Browser verwendest. - -### Troubleshooting - -**Port bereits belegt:** -```powershell -# Prüfe welcher Prozess Port 8080 nutzt -netstat -ano | findstr :8080 - -# Stoppe den Prozess oder ändere den Port in docker-compose.yml -``` - -**Container startet nicht:** -```powershell -# Prüfe Logs -docker logs turnierplaner - -# Prüfe ob Docker Desktop läuft -docker ps -``` - -**Nach Code-Änderungen:** -```powershell -# Container stoppen und neu bauen -docker-compose down -docker-compose build --no-cache -docker-compose up -d -``` diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 83545e1..0000000 --- a/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -# Multi-stage build für minimales Image -FROM nginx:alpine - -# Kopiere alle statischen Dateien -COPY index.html /usr/share/nginx/html/ -COPY planning.html /usr/share/nginx/html/ -COPY script.js /usr/share/nginx/html/ -COPY planning.js /usr/share/nginx/html/ -COPY styles.css /usr/share/nginx/html/ - -# Kopiere nginx Konfiguration -COPY nginx.conf /etc/nginx/conf.d/default.conf - -# Exponiere Port 80 -EXPOSE 80 - -# nginx läuft automatisch im Vordergrund -CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..70b7c82 --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# Welcome to your Lovable project + +## Project info + +**URL**: https://lovable.dev/projects/REPLACE_WITH_PROJECT_ID + +## How can I edit this code? + +There are several ways of editing your application. + +**Use Lovable** + +Simply visit the [Lovable Project](https://lovable.dev/projects/REPLACE_WITH_PROJECT_ID) and start prompting. + +Changes made via Lovable will be committed automatically to this repo. + +**Use your preferred IDE** + +If you want to work locally using your own IDE, you can clone this repo and push changes. Pushed changes will also be reflected in Lovable. + +The only requirement is having Node.js & npm installed - [install with nvm](https://github.com/nvm-sh/nvm#installing-and-updating) + +Follow these steps: + +```sh +# Step 1: Clone the repository using the project's Git URL. +git clone + +# Step 2: Navigate to the project directory. +cd + +# Step 3: Install the necessary dependencies. +npm i + +# Step 4: Start the development server with auto-reloading and an instant preview. +npm run dev +``` + +**Edit a file directly in GitHub** + +- Navigate to the desired file(s). +- Click the "Edit" button (pencil icon) at the top right of the file view. +- Make your changes and commit the changes. + +**Use GitHub Codespaces** + +- Navigate to the main page of your repository. +- Click on the "Code" button (green button) near the top right. +- Select the "Codespaces" tab. +- Click on "New codespace" to launch a new Codespace environment. +- Edit files directly within the Codespace and commit and push your changes once you're done. + +## What technologies are used for this project? + +This project is built with: + +- Vite +- TypeScript +- React +- shadcn-ui +- Tailwind CSS + +## How can I deploy this project? + +Simply open [Lovable](https://lovable.dev/projects/REPLACE_WITH_PROJECT_ID) and click on Share -> Publish. + +## Can I connect a custom domain to my Lovable project? + +Yes, you can! + +To connect a domain, navigate to Project > Settings > Domains and click Connect Domain. + +Read more here: [Setting up a custom domain](https://docs.lovable.dev/features/custom-domain#custom-domain) diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..5d9d33a3bf4f45fa099e2aa3014149e034981149 GIT binary patch literal 245395 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 aG(|+$-_n1#f877;&wmep + - - - - Turnierplaner - Team-Eingabe - - - -
-

🏐 NVJ Turnierplaner

+ + + + NVJ Turnierplaner – Volleyball-Turniere organisieren + + -
-
- - -
-
+ + + + -
- -
-
-
-

Bundesliga

-
0 Teams
-
- -
-
-
Keine Teams hinzugefügt. Klicke auf + um zu beginnen!
-
-
+ + + + - -
-
-
-

Champions League

-
0 Teams
-
- -
-
-
Keine Teams hinzugefügt. Klicke auf + um zu beginnen!
-
-
-
- -
-
- - - -
- -
- -
-
- - - + +
+ + diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index 3279755..0000000 --- a/nginx.conf +++ /dev/null @@ -1,28 +0,0 @@ -server { - listen 80; - server_name localhost; - - root /usr/share/nginx/html; - index index.html; - - # Gzip Kompression für bessere Performance - gzip on; - gzip_types text/css application/javascript application/json; - gzip_min_length 1000; - - location / { - try_files $uri $uri/ /index.html; - } - - # Cache-Control Header für statische Assets - location ~* \.(js|css)$ { - expires 1d; - add_header Cache-Control "public, immutable"; - } - - # Keine Cache für HTML-Dateien - location ~* \.(html)$ { - expires -1; - add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; - } -} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e1e8e54 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6692 @@ +{ + "name": "vite_react_shadcn_ts", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vite_react_shadcn_ts", + "version": "0.0.0", + "dependencies": { + "@hookform/resolvers": "^3.10.0", + "@radix-ui/react-accordion": "^1.2.11", + "@radix-ui/react-alert-dialog": "^1.1.14", + "@radix-ui/react-aspect-ratio": "^1.1.7", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.2", + "@radix-ui/react-collapsible": "^1.1.11", + "@radix-ui/react-context-menu": "^2.2.15", + "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", + "@radix-ui/react-hover-card": "^1.1.14", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-menubar": "^1.1.15", + "@radix-ui/react-navigation-menu": "^1.2.13", + "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-progress": "^1.1.7", + "@radix-ui/react-radio-group": "^1.3.7", + "@radix-ui/react-scroll-area": "^1.2.9", + "@radix-ui/react-select": "^2.2.5", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.5", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.5", + "@radix-ui/react-tabs": "^1.1.12", + "@radix-ui/react-toast": "^1.2.14", + "@radix-ui/react-toggle": "^1.1.9", + "@radix-ui/react-toggle-group": "^1.1.10", + "@radix-ui/react-tooltip": "^1.2.7", + "@tanstack/react-query": "^5.83.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^3.6.0", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.462.0", + "next-themes": "^0.3.0", + "react": "^18.3.1", + "react-day-picker": "^8.10.1", + "react-dom": "^18.3.1", + "react-hook-form": "^7.61.1", + "react-resizable-panels": "^2.1.9", + "react-router-dom": "^6.30.1", + "recharts": "^2.15.4", + "sonner": "^1.7.4", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "vaul": "^0.9.9", + "zod": "^3.25.76" + }, + "devDependencies": { + "@eslint/js": "^9.32.0", + "@tailwindcss/typography": "^0.5.16", + "@types/node": "^22.16.5", + "@types/react": "^18.3.23", + "@types/react-dom": "^18.3.7", + "@vitejs/plugin-react-swc": "^3.11.0", + "autoprefixer": "^10.4.21", + "eslint": "^9.32.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^15.15.0", + "lovable-tagger": "^1.1.13", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.17", + "typescript": "^5.8.3", + "typescript-eslint": "^8.38.0", + "vite": "^5.4.19" + } + }, + "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/@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "license": "MIT", + "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-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "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-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "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.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", + "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz", + "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.2", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.4.tgz", + "integrity": "sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.2" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@hookform/resolvers": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.10.0.tgz", + "integrity": "sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==", + "license": "MIT", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", + "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz", + "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collapsible": "1.1.11", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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-alert-dialog": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.14.tgz", + "integrity": "sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.14", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "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-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "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-aspect-ratio": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", + "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "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-avatar": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", + "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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-checkbox": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.2.tgz", + "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "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-collapsible": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz", + "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "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-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "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.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "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-menu": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.15.tgz", + "integrity": "sha512-UsQUMjcYTsBjTSXw0P3GO0werEQvUY2plgRQuKoCTtkNr45q1DiL51j4m7gxhABzZ0BadoXNsIbg7F3KwiUBbw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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-dialog": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", + "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "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.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", + "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "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.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz", + "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", + "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", + "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.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "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-hover-card": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.14.tgz", + "integrity": "sha512-CPYZ24Mhirm+g6D8jArmLzjYu4Eyg3TTUHswR26QgzXBHBe64BO/RHOJKzmF/Dxb4y4f9PKyJdwm/O/AhNkb+Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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-label": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "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-menu": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz", + "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "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-menubar": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.15.tgz", + "integrity": "sha512-Z71C7LGD+YDYo3TV81paUs8f3Zbmkvg6VLRQpKYfzioOE6n7fOhA3ApK/V/2Odolxjoc4ENk8AYCjohCNayd5A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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-navigation-menu": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.13.tgz", + "integrity": "sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "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-popover": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz", + "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "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.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz", + "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "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-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", + "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "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-progress": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", + "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3" + }, + "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-radio-group": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.7.tgz", + "integrity": "sha512-9w5XhD0KPOrm92OTTE0SysH3sYzHsSTHNvZgUBo/VZ80VdYyB5RneDbc0dKpURS24IxkoFRu/hI0i4XyfFwY6g==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "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.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz", + "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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-scroll-area": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz", + "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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-select": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.5.tgz", + "integrity": "sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "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-separator": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "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-slider": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.5.tgz", + "integrity": "sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "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.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "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.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz", + "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "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-tabs": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz", + "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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-toast": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.14.tgz", + "integrity": "sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "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-toggle": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.9.tgz", + "integrity": "sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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-toggle-group": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.10.tgz", + "integrity": "sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-toggle": "1.1.9", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "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.2.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz", + "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "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.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "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-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.5.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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "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.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@remix-run/router": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz", + "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/core": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.2.tgz", + "integrity": "sha512-YWqn+0IKXDhqVLKoac4v2tV6hJqB/wOh8/Br8zjqeqBkKa77Qb0Kw2i7LOFzjFNZbZaPH6AlMGlBwNrxaauaAg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.23" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.13.2", + "@swc/core-darwin-x64": "1.13.2", + "@swc/core-linux-arm-gnueabihf": "1.13.2", + "@swc/core-linux-arm64-gnu": "1.13.2", + "@swc/core-linux-arm64-musl": "1.13.2", + "@swc/core-linux-x64-gnu": "1.13.2", + "@swc/core-linux-x64-musl": "1.13.2", + "@swc/core-win32-arm64-msvc": "1.13.2", + "@swc/core-win32-ia32-msvc": "1.13.2", + "@swc/core-win32-x64-msvc": "1.13.2" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.2.tgz", + "integrity": "sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.2.tgz", + "integrity": "sha512-Lb9EZi7X2XDAVmuUlBm2UvVAgSCbD3qKqDCxSI4jEOddzVOpNCnyZ/xEampdngUIyDDhhJLYU9duC+Mcsv5Y+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.2.tgz", + "integrity": "sha512-9TDe/92ee1x57x+0OqL1huG4BeljVx0nWW4QOOxp8CCK67Rpc/HHl2wciJ0Kl9Dxf2NvpNtkPvqj9+BUmM9WVA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.2.tgz", + "integrity": "sha512-KJUSl56DBk7AWMAIEcU83zl5mg3vlQYhLELhjwRFkGFMvghQvdqQ3zFOYa4TexKA7noBZa3C8fb24rI5sw9Exg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.2.tgz", + "integrity": "sha512-teU27iG1oyWpNh9CzcGQ48ClDRt/RCem7mYO7ehd2FY102UeTws2+OzLESS1TS1tEZipq/5xwx3FzbVgiolCiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.2.tgz", + "integrity": "sha512-dRPsyPyqpLD0HMRCRpYALIh4kdOir8pPg4AhNQZLehKowigRd30RcLXGNVZcc31Ua8CiPI4QSgjOIxK+EQe4LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.2.tgz", + "integrity": "sha512-CCxETW+KkYEQDqz1SYC15YIWYheqFC+PJVOW76Maa/8yu8Biw+HTAcblKf2isrlUtK8RvrQN94v3UXkC2NzCEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.2.tgz", + "integrity": "sha512-Wv/QTA6PjyRLlmKcN6AmSI4jwSMRl0VTLGs57PHTqYRwwfwd7y4s2fIPJVBNbAlXd795dOEP6d/bGSQSyhOX3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.2.tgz", + "integrity": "sha512-PuCdtNynEkUNbUXX/wsyUC+t4mamIU5y00lT5vJcAvco3/r16Iaxl5UCzhXYaWZSNVZMzPp9qN8NlSL8M5pPxw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.2.tgz", + "integrity": "sha512-qlmMkFZJus8cYuBURx1a3YAG2G7IW44i+FEYV5/32ylKkzGNAr9tDJSA53XNnNXkAB5EXSPsOz7bn5C3JlEtdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz", + "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", + "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.83.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.83.0.tgz", + "integrity": "sha512-0M8dA+amXUkyz5cVUm/B+zSk3xkQAcuXuz5/Q/LveT4ots2rBpPTZOzd7yJa2Utsf8D2Upl5KyjhHRY+9lB/XA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.83.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.83.0.tgz", + "integrity": "sha512-/XGYhZ3foc5H0VM2jLSD/NyBRIOK4q9kfeml4+0x2DlL6xVuAcVEW+hTlTapAmejObg0i3eNqhkr2dT+eciwoQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.83.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "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.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", + "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "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.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.38.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "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.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", + "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.27", + "@swc/core": "^1.12.11" + }, + "peerDependencies": { + "vite": "^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-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.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "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.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/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.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "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.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "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/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "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": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "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.192", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.192.tgz", + "integrity": "sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==", + "dev": true, + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-react": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", + "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", + "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "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.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "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/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.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "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.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "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.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/input-otp": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", + "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "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/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/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/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": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "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.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "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/lovable-tagger": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/lovable-tagger/-/lovable-tagger-1.1.13.tgz", + "integrity": "sha512-RBEYDxao7Xf8ya29L0cd+ocE7Gs80xPOIOwwck65Hoie8YDKViuXi3UYV14DoNWIvaJ7WVPf7SG3cc844nFqGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "tailwindcss": "^3.4.17" + }, + "peerDependencies": { + "vite": ">=5.0.0 <8.0.0" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/lovable-tagger/node_modules/esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, + "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/lucide-react": { + "version": "0.462.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.462.0.tgz", + "integrity": "sha512-NTL7EbAao9IFtuSivSZgrAh4fZd09Lr+6MTkqIxuHaH2nnYiYIzXPo06cOxHg9wKLdj6LL8TByG4qpePqwgx/g==", + "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.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/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.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-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/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.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/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-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-day-picker": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", + "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.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-hook-form": { + "version": "7.61.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.1.tgz", + "integrity": "sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "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-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-resizable-panels": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", + "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/react-router": { + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz", + "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz", + "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.0", + "react-router": "6.30.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "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 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "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.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "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 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.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/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.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "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.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "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.7.4", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz", + "integrity": "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "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.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.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/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": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/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.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "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.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "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/vaul": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/vaul/-/vaul-0.9.9.tgz", + "integrity": "sha512-7afKg48srluhZwIkaU+lgGtFCUsYBSGOl8vcc8N/M3YQlZFlynHD15AE+pwrYdc826o7nrIND4lL9Y6b9WWZZQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "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.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "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/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" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..04b2365 --- /dev/null +++ b/package.json @@ -0,0 +1,89 @@ +{ + "name": "vite_react_shadcn_ts", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "build:dev": "vite build --mode development", + "lint": "eslint .", + "preview": "vite preview", + "test": "vitest run", + "test:watch": "vitest" + }, + "dependencies": { + "@hookform/resolvers": "^3.10.0", + "@radix-ui/react-accordion": "^1.2.11", + "@radix-ui/react-alert-dialog": "^1.1.14", + "@radix-ui/react-aspect-ratio": "^1.1.7", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.2", + "@radix-ui/react-collapsible": "^1.1.11", + "@radix-ui/react-context-menu": "^2.2.15", + "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", + "@radix-ui/react-hover-card": "^1.1.14", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-menubar": "^1.1.15", + "@radix-ui/react-navigation-menu": "^1.2.13", + "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-progress": "^1.1.7", + "@radix-ui/react-radio-group": "^1.3.7", + "@radix-ui/react-scroll-area": "^1.2.9", + "@radix-ui/react-select": "^2.2.5", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.5", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.5", + "@radix-ui/react-tabs": "^1.1.12", + "@radix-ui/react-toast": "^1.2.14", + "@radix-ui/react-toggle": "^1.1.9", + "@radix-ui/react-toggle-group": "^1.1.10", + "@radix-ui/react-tooltip": "^1.2.7", + "@tanstack/react-query": "^5.83.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^3.6.0", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.462.0", + "next-themes": "^0.3.0", + "react": "^18.3.1", + "react-day-picker": "^8.10.1", + "react-dom": "^18.3.1", + "react-hook-form": "^7.61.1", + "react-resizable-panels": "^2.1.9", + "react-router-dom": "^6.30.1", + "recharts": "^2.15.4", + "sonner": "^1.7.4", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "vaul": "^0.9.9", + "zod": "^3.25.76" + }, + "devDependencies": { + "@eslint/js": "^9.32.0", + "@testing-library/jest-dom": "^6.6.0", + "@testing-library/react": "^16.0.0", + "@tailwindcss/typography": "^0.5.16", + "@types/node": "^22.16.5", + "@types/react": "^18.3.23", + "@types/react-dom": "^18.3.7", + "@vitejs/plugin-react-swc": "^3.11.0", + "autoprefixer": "^10.4.21", + "eslint": "^9.32.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^15.15.0", + "jsdom": "^20.0.3", + "lovable-tagger": "^1.1.13", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.17", + "typescript": "^5.8.3", + "typescript-eslint": "^8.38.0", + "vite": "^5.4.19", + "vitest": "^3.2.4" + } +} diff --git a/planning.html b/planning.html deleted file mode 100644 index 044eddb..0000000 --- a/planning.html +++ /dev/null @@ -1,721 +0,0 @@ - - - - - - Turnierplaner - Planung - - - - -
-
- -

🏐 Turnierplanung

-
- - - -
- -
-
-

Bundesliga

-
-
-
-
-
Wartende Teams:
-
-
-
-
- - -
-
-

Champions League

-
-
-
-
-
Wartende Teams:
-
-
-
-
-
-
- - - - - - - - - - - - - - - - diff --git a/planning.js b/planning.js deleted file mode 100644 index e82e591..0000000 --- a/planning.js +++ /dev/null @@ -1,799 +0,0 @@ -const STORAGE_KEY = 'turnierplaner_data'; -const ROTATION_STATE_KEY = 'turnierplaner_rotation'; -const SCORES_KEY = 'turnierplaner_scores'; -let timerInterval = null; -let timerSeconds = 0; -let isRunning = false; -let allTeams = []; -let fieldCount = 0; // Anzahl der physischen Felder (jedes Feld hat 2 Feldhälften) -let rotationState = {}; -let matchScores = {}; // { "league:fieldNum": {team1Score, team2Score}, ... } - -document.addEventListener('DOMContentLoaded', () => { - loadTournamentData(); - setupTimerInput(); - loadMatchScores(); -}); - -function loadTournamentData() { - const stored = localStorage.getItem(STORAGE_KEY); - if (!stored) { - console.warn('Keine Turnierdaten gefunden'); - return; - } - - const data = JSON.parse(stored); - allTeams = data; - fieldCount = parseInt(data.fieldCount) || 0; - - // Lade oder initialisiere Rotations-State - loadRotationState(data); - - // Populate fields mit aktuellem State - displayCurrentRound(); -} - -function loadRotationState(data) { - const stored = localStorage.getItem(ROTATION_STATE_KEY); - - if (stored) { - rotationState = JSON.parse(stored); - } else { - // Initialisiere mit Startzustand - rotationState = { - bundesliga: { - round: 0, - teamOrder: data.bundesliga.map((t, i) => i) - }, - champions: { - round: 0, - teamOrder: data.champions.map((t, i) => i) - } - }; - saveRotationState(); - } -} - -function saveRotationState() { - localStorage.setItem(ROTATION_STATE_KEY, JSON.stringify(rotationState)); -} - -function displayCurrentRound() { - displayLeagueRound('bundesliga', allTeams.bundesliga); - displayLeagueRound('champions', allTeams.champions); -} - -function displayLeagueRound(league, teams) { - // Jedes Feld hat 2 Feldhälften, also maximal fieldCount * 2 Teams können gleichzeitig spielen - const maxPlayingTeams = fieldCount * 2; - const playingTeamsCount = Math.min(teams.length, maxPlayingTeams); - const fieldsPerLeague = Math.ceil(playingTeamsCount / 2); // Anzahl Felder für diese Liga - const state = rotationState[league]; - - // Bestimme Offset für Feldnummern - Champions League beginnt nach Bundesliga - let fieldNumberOffset = 0; - if (league === 'champions') { - const bundesligaPlayingTeams = Math.min(allTeams.bundesliga.length, fieldCount * 2); - fieldNumberOffset = Math.ceil(bundesligaPlayingTeams / 2); - } - - // Aktualisiere Felder basierend auf teamOrder - const container = document.getElementById(`${league}-fields`); - container.innerHTML = ''; - - for (let i = 0; i < fieldsPerLeague; i++) { - // Info-Box für Feldnummer (nur Label) - const fieldInfoBox = document.createElement('div'); - fieldInfoBox.className = 'field-info-box'; - const fieldNum = fieldNumberOffset + i + 1; - fieldInfoBox.innerHTML = `
Feld ${fieldNum}:
`; - container.appendChild(fieldInfoBox); - - // Team 1 (mittlere Spalte) mit Score-Input - const team1Index = state.teamOrder[i * 2]; - const team1 = teams[team1Index] || {}; - const fieldCard1 = document.createElement('div'); - fieldCard1.className = 'field-card'; - const scoreKey = getScoreKey(league, fieldNum); - const existingScore = matchScores[scoreKey] || { team1Score: '', team2Score: '' }; - fieldCard1.innerHTML = ` -
-
${team1.name || '-'}
- -
- `; - fieldCard1.id = `score-${league}-${fieldNum}-t1-card`; - container.appendChild(fieldCard1); - - // Team 2 (rechte Spalte) mit Score-Input - const team2Index = state.teamOrder[i * 2 + 1]; - const team2 = teams[team2Index] || {}; - const fieldCard2 = document.createElement('div'); - fieldCard2.className = 'field-card'; - fieldCard2.innerHTML = ` -
- -
${team2.name || '-'}
-
- `; - container.appendChild(fieldCard2); - } - - // Aktualisiere wartende Teams - updateWaitingTeams(league, teams, fieldsPerLeague, state.teamOrder); -} - -function updateWaitingTeams(league, teams, fieldsPerLeague, teamOrder) { - const container = document.getElementById(`${league}-waiting`); - container.innerHTML = ''; - - // Anzahl der spielenden Teams = fieldsPerLeague * 2 (2 Teams pro Feld) - const playingTeamsCount = fieldsPerLeague * 2; - const waitingIndices = teamOrder.slice(playingTeamsCount); - - if (waitingIndices.length === 0) { - container.innerHTML = '
Alle Teams spielen
'; - } else { - waitingIndices.forEach(teamIndex => { - const team = teams[teamIndex]; - const badge = document.createElement('div'); - badge.className = 'waiting-team-badge'; - badge.textContent = team.name; - badge.title = `${team.club || ''} - ${team.motto || ''}`; - container.appendChild(badge); - }); - } -} - -function populateFields(league, teams, fieldCount) { - const container = document.getElementById(`${league}-fields`); - const totalFields = parseInt(fieldCount); - const fieldsPerLeague = Math.ceil(totalFields / 2); - - container.innerHTML = ''; - - for (let i = 1; i <= fieldsPerLeague; i++) { - const fieldCard = document.createElement('div'); - fieldCard.className = 'field-card'; - - // Zuweisung von Teams zu Feldern (Round-Robin) - const teamIndex = (i - 1) % teams.length; - const team = teams[teamIndex] || {}; - - fieldCard.innerHTML = ` -
Feld ${i}
-
${team.name || '-'}
- `; - - fieldCard.setAttribute('data-field', i); - fieldCard.setAttribute('data-league', league); - fieldCard.setAttribute('data-team', team.name || ''); - - container.appendChild(fieldCard); - } -} - -function populateWaitingTeams(league, teams, fieldCount) { - const container = document.getElementById(`${league}-waiting`); - const totalFields = parseInt(fieldCount); - const fieldsPerLeague = Math.ceil(totalFields / 2); - - container.innerHTML = ''; - - // Teams die auf Feldern spielen - const playingTeamIndices = new Set(); - for (let i = 0; i < fieldsPerLeague; i++) { - playingTeamIndices.add(i % teams.length); - } - - // Wartende Teams sind alle Teams, die nicht gerade spielen - const waitingTeams = teams.filter((team, index) => !playingTeamIndices.has(index)); - - if (waitingTeams.length === 0) { - container.innerHTML = '
Alle Teams spielen
'; - } else { - waitingTeams.forEach(team => { - const badge = document.createElement('div'); - badge.className = 'waiting-team-badge'; - badge.textContent = team.name; - badge.title = `${team.club || ''} - ${team.motto || ''}`; - container.appendChild(badge); - }); - } -} - -// Timer Functions -function setupTimerInput() { - const timerInput = document.getElementById('timerInput'); - timerInput.addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - const value = timerInput.value.trim(); - if (value) { - parseAndSetTimer(value); - timerInput.value = ''; - timerInput.blur(); // Remove focus after input - } - } - }); -} - -function parseAndSetTimer(timeStr) { - let seconds = 0; - - if (timeStr.includes(':')) { - // Parse MM:SS format - const parts = timeStr.split(':'); - if (parts.length === 2) { - const minutes = parseInt(parts[0]) || 0; - seconds = parseInt(parts[1]) || 0; - seconds = minutes * 60 + seconds; - } - } else { - // Parse as just seconds - seconds = parseInt(timeStr) || 0; - } - - if (seconds > 0) { - // Stop current timer if running - if (isRunning) { - pauseTimer(); - } - - timerSeconds = seconds; - updateTimerDisplay(); - - // Start timer automatically - startTimer(); - } -} - -function toggleTimer() { - if (isRunning) { - pauseTimer(); - } else { - startTimer(); - } -} - -function startTimer() { - if (isRunning) return; - - isRunning = true; - const btn = document.getElementById('timerBtn'); - btn.textContent = 'Pause'; - - timerInterval = setInterval(() => { - if (timerSeconds > 0) { - timerSeconds--; - updateTimerDisplay(); - } else { - pauseTimer(); - } - }, 1000); -} - -function pauseTimer() { - if (!isRunning) return; - - isRunning = false; - const btn = document.getElementById('timerBtn'); - btn.textContent = 'Start'; - - if (timerInterval) { - clearInterval(timerInterval); - timerInterval = null; - } -} - -function updateTimerDisplay() { - const minutes = Math.floor(timerSeconds / 60); - const seconds = timerSeconds % 60; - - const display = `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`; - document.getElementById('timerDisplay').textContent = display; -} - -// Modal Functions -function openPointsModal() { - document.getElementById('pointsModal').style.display = 'block'; -} - -function closePointsModal() { - document.getElementById('pointsModal').style.display = 'none'; -} - -function openResultsModal() { - document.getElementById('resultsModal').style.display = 'block'; -} - -function closeResultsModal() { - document.getElementById('resultsModal').style.display = 'none'; -} - -function savePoints(event) { - event.preventDefault(); - - const field = document.getElementById('pointsField').value; - const team = document.getElementById('pointsTeam').value; - const points = document.getElementById('pointsValue').value; - - if (!field || !points) { - alert('Bitte alle Felder ausfüllen'); - return; - } - - // TODO: Punkte speichern (z.B. in localStorage oder an Server) - console.log('Punkte gespeichert:', { field, team, points }); - alert(`✅ Punkte für ${team} gespeichert!`); - - // Reset form - document.getElementById('pointsField').value = ''; - document.getElementById('pointsTeam').value = ''; - document.getElementById('pointsValue').value = ''; - - closePointsModal(); -} - -function saveResults(event) { - event.preventDefault(); - - const field = document.getElementById('resultsField').value; - const team = document.getElementById('resultsTeam').value; - const sets = document.getElementById('resultsSets').value; - const opponent = document.getElementById('resultsOpponent').value; - - if (!field || !sets) { - alert('Bitte alle Pflichtfelder ausfüllen'); - return; - } - - // TODO: Ergebnisse speichern (z.B. in localStorage oder an Server) - console.log('Ergebnis gespeichert:', { field, team, sets, opponent }); - alert(`✅ Ergebnis für ${team} gespeichert!`); - - // Reset form - document.getElementById('resultsField').value = ''; - document.getElementById('resultsTeam').value = ''; - document.getElementById('resultsSets').value = ''; - document.getElementById('resultsOpponent').value = ''; - - closeResultsModal(); -} - -// Close modal when clicking outside -window.addEventListener('click', (event) => { - const pointsModal = document.getElementById('pointsModal'); - const resultsModal = document.getElementById('resultsModal'); - - if (event.target === pointsModal) { - closePointsModal(); - } - if (event.target === resultsModal) { - closeResultsModal(); - } -}); - -function goBack() { - // Stop timer before navigating - if (isRunning) { - pauseTimer(); - } - window.location.href = 'index.html'; -} - -// Rotation Logic -function nextRound() { - // Inkrementiere Runden-Nummer - rotationState.bundesliga.round++; - rotationState.champions.round++; - - // Leere die Scores für die neue Runde - matchScores = {}; - saveMatchScores(); - - rotateLeague('bundesliga', allTeams.bundesliga); - rotateLeague('champions', allTeams.champions); - saveRotationState(); - displayCurrentRound(); - console.log('Nächste Runde!', rotationState); -} - -function rotateLeague(league, teams) { - // Jedes Feld hat 2 Feldhälften - maximale spielende Teams = fieldCount * 2 - const maxPlayingTeams = fieldCount * 2; - const playingTeamsCount = Math.min(teams.length, maxPlayingTeams); - const state = rotationState[league]; - - const totalTeams = teams.length; - const waitingCount = totalTeams - playingTeamsCount; - - // Fall 1: Keine wartenden Teams (Anzahl Teams = fieldCount * 2) - // Team 1 bleibt stehen, alle anderen rotieren um 1 Position weiter - if (waitingCount === 0) { - // [0, 1, 2, 3, 4, 5] -> [0, 2, 3, 4, 5, 1] - // Team an Index 0 bleibt, Team an Index 1 geht ans Ende, Rest rückt auf - if (state.teamOrder.length > 1) { - const secondTeam = state.teamOrder.splice(1, 1)[0]; - state.teamOrder.push(secondTeam); - } - console.log(`${league} Fall 1: Team ${teams[state.teamOrder[0]].name} bleibt stehen, andere rotieren`); - } - // Fall 2: Genau 1 wartendes Team (Anzahl Teams = fieldCount * 2 + 1) - // Alle rotieren um 1 Position, wartendes Team kommt aufs Randfeld - else if (waitingCount === 1) { - // [0, 1, 2, 3, 4, 5, 6(wartend)] -> [1, 2, 3, 4, 5, 6, 0] - // Einfach erstes Team ans Ende verschieben - const first = state.teamOrder.shift(); - state.teamOrder.push(first); - console.log(`${league} Fall 2: Team ${teams[first].name} geht warten, Team ${teams[state.teamOrder[playingTeamsCount - 1]].name} kommt ins Spiel`); - } - // Fall 3: Mehrere wartende Teams (Anzahl Teams > fieldCount * 2 + 1) - // Alle wartenden sollen spielen, max 1 Runde Pause - else { - // [0, 1, 2, 3(spielend), 4, 5, 6, 7(wartend)] -> [4, 5, 6, 7(jetzt spielend), 0, 1, 2, 3(jetzt wartend)] - // Wartende Teams kommen nach vorne, spielende Teams gehen warten - const playingTeams = state.teamOrder.slice(0, playingTeamsCount); - const waitingTeams = state.teamOrder.slice(playingTeamsCount); - - state.teamOrder = [...waitingTeams, ...playingTeams]; - console.log(`${league} Fall 3: Wartende Teams spielen jetzt, spielende Teams warten`); - } -} - -// ===== SCORE & PUNKTE-SYSTEM ===== - -function loadMatchScores() { - const stored = localStorage.getItem(SCORES_KEY); - if (stored) { - matchScores = JSON.parse(stored); - } else { - matchScores = {}; - } -} - -function saveMatchScores() { - localStorage.setItem(SCORES_KEY, JSON.stringify(matchScores)); -} - -function getScoreKey(league, fieldNum) { - return `${league}:${fieldNum}`; -} - -function updateMatchScore(league, fieldNum, team1Score, team2Score) { - const key = getScoreKey(league, fieldNum); - matchScores[key] = { - round: rotationState[league].round, - team1Score: parseInt(team1Score) || 0, - team2Score: parseInt(team2Score) || 0 - }; - saveMatchScores(); -} - -function calculatePoints(team1Score, team2Score) { - // Berechnet Punkte für Team 1 und Team 2 basierend auf Spielstand - const diff = Math.abs(team1Score - team2Score); - - if (team1Score > team2Score) { - // Team 1 gewinnt - return { - team1Points: diff + 2, - team2Points: -diff - }; - } else if (team2Score > team1Score) { - // Team 2 gewinnt - return { - team1Points: -diff, - team2Points: diff + 2 - }; - } else { - // Unentschieden - return { - team1Points: 0, - team2Points: 0 - }; - } -} - -function getTeamPointsHistory() { - // Erstellt eine Punkte-Historie für alle Teams in beiden Ligen - const history = { - bundesliga: {}, - champions: {} - }; - - // Initialisiere leere Arrays für jedes Team - allTeams.bundesliga.forEach((team, idx) => { - history.bundesliga[idx] = []; - }); - allTeams.champions.forEach((team, idx) => { - history.champions[idx] = []; - }); - - // Gehe durch alle gespeicherten Scores - Object.keys(matchScores).forEach(key => { - const [league, fieldNum] = key.split(':'); - const score = matchScores[key]; - const fieldNumInt = parseInt(fieldNum); - - const state = rotationState[league]; - const teamsInLeague = league === 'bundesliga' ? allTeams.bundesliga : allTeams.champions; - - // Berechne fieldsPerLeague basierend auf fieldCount - const maxPlayingTeams = fieldCount * 2; - const playingTeamsCount = Math.min(teamsInLeague.length, maxPlayingTeams); - const fieldsPerLeague = Math.ceil(playingTeamsCount / 2); - - // Bestimme Offset für Feldnummern - const bundesligaPlayingTeams = Math.min(allTeams.bundesliga.length, fieldCount * 2); - const bundesligaFields = Math.ceil(bundesligaPlayingTeams / 2); - const fieldOffset = league === 'bundesliga' ? 0 : bundesligaFields; - const i = fieldNumInt - fieldOffset - 1; - - if (i >= 0 && i < fieldsPerLeague && state && state.teamOrder) { - const team1Index = state.teamOrder[i * 2]; - const team2Index = state.teamOrder[i * 2 + 1]; - - if (team1Index !== undefined && team2Index !== undefined) { - const points = calculatePoints(score.team1Score, score.team2Score); - - if (!history[league][team1Index][score.round]) { - history[league][team1Index][score.round] = 0; - } - if (!history[league][team2Index][score.round]) { - history[league][team2Index][score.round] = 0; - } - - history[league][team1Index][score.round] = points.team1Points; - history[league][team2Index][score.round] = points.team2Points; - } - } - }); - - return history; -} - -// ===== MODAL FUNCTIONS ===== - -function openPointsModal() { - const history = getTeamPointsHistory(); - const content = document.getElementById('pointsDisplayContent'); - content.innerHTML = ''; - - // Bundesliga - if (allTeams.bundesliga.length > 0) { - content.appendChild(createLeaguePointsSection('bundesliga', 'Bundesliga', allTeams.bundesliga, history.bundesliga)); - } - - // Champions League - if (allTeams.champions.length > 0) { - content.appendChild(createLeaguePointsSection('champions', 'Champions League', allTeams.champions, history.champions)); - } - - document.getElementById('pointsModal').style.display = 'block'; -} - -function createLeaguePointsSection(leagueId, leagueName, teams, history) { - const section = document.createElement('div'); - section.className = 'league-points-section'; - - // Header - const header = document.createElement('div'); - header.className = 'league-points-header'; - header.innerHTML = leagueName; - section.appendChild(header); - - // Table - const table = document.createElement('table'); - table.className = 'points-table'; - - // Berechne maximale Runde - let maxRound = 0; - Object.keys(history).forEach(teamId => { - if (history[teamId] && history[teamId].length) { - maxRound = Math.max(maxRound, history[teamId].length - 1); - } - }); - - // Header Row - const headerRow = document.createElement('tr'); - headerRow.innerHTML = 'Team'; - for (let r = 0; r <= maxRound; r++) { - const th = document.createElement('th'); - th.innerHTML = `Runde ${r + 1}`; - headerRow.appendChild(th); - } - const totalTh = document.createElement('th'); - totalTh.innerHTML = 'Gesamt'; - headerRow.appendChild(totalTh); - table.appendChild(headerRow); - - // Team Rows - teams.forEach((team, teamIdx) => { - const row = document.createElement('tr'); - - // Team Name - const nameCell = document.createElement('td'); - nameCell.style.textAlign = 'left'; - nameCell.style.fontWeight = '500'; - nameCell.innerHTML = team.name; - row.appendChild(nameCell); - - // Points per round - let totalPoints = 0; - const teamHistory = history[teamIdx] || []; - - for (let r = 0; r <= maxRound; r++) { - const cell = document.createElement('td'); - const points = teamHistory[r] !== undefined ? teamHistory[r] : '-'; - - if (points !== '-') { - totalPoints += points; - const pointsDiv = document.createElement('div'); - pointsDiv.className = 'points-value'; - - if (points > 0) { - pointsDiv.classList.add('positive'); - pointsDiv.innerHTML = `+${points}`; - } else if (points < 0) { - pointsDiv.classList.add('negative'); - pointsDiv.innerHTML = `${points}`; - } else { - pointsDiv.classList.add('neutral'); - pointsDiv.innerHTML = '0'; - } - cell.appendChild(pointsDiv); - } else { - cell.innerHTML = '-'; - } - row.appendChild(cell); - } - - // Total Points - const totalCell = document.createElement('td'); - const totalDiv = document.createElement('div'); - totalDiv.className = 'points-value points-total'; - totalDiv.innerHTML = totalPoints > 0 ? `+${totalPoints}` : `${totalPoints}`; - totalCell.appendChild(totalDiv); - row.appendChild(totalCell); - - table.appendChild(row); - }); - - section.appendChild(table); - return section; -} - -function closePointsModal() { - document.getElementById('pointsModal').style.display = 'none'; -} - -function openScoreboard() { - const history = getTeamPointsHistory(); - const content = document.getElementById('scoreboardContent'); - content.innerHTML = ''; - - // Erstelle Daten für beide Ligen mit Gesamtpunkten - const leaguesData = [ - { id: 'bundesliga', name: 'Bundesliga', teams: allTeams.bundesliga, history: history.bundesliga }, - { id: 'champions', name: 'Champions League', teams: allTeams.champions, history: history.champions } - ]; - - leaguesData.forEach(league => { - if (league.teams.length > 0) { - // Berechne Gesamtpunkte für jedes Team - const teamScores = league.teams.map((team, idx) => { - const teamHistory = league.history[idx] || []; - const totalPoints = teamHistory.reduce((sum, pts) => sum + (pts || 0), 0); - return { idx, name: team.name, points: totalPoints }; - }); - - // Sortiere absteigend nach Punkten - teamScores.sort((a, b) => b.points - a.points); - - // Erstelle die Liga-Section - const section = document.createElement('div'); - section.className = 'scoreboard-league'; - - const header = document.createElement('div'); - header.className = 'scoreboard-league-header'; - header.innerHTML = league.name; - section.appendChild(header); - - const list = document.createElement('ul'); - list.className = 'scoreboard-list'; - - teamScores.forEach((score, rank) => { - const item = document.createElement('li'); - item.className = 'scoreboard-item'; - - const rankDiv = document.createElement('div'); - rankDiv.className = 'scoreboard-rank'; - rankDiv.innerHTML = `${rank + 1}.`; - item.appendChild(rankDiv); - - const nameDiv = document.createElement('div'); - nameDiv.className = 'scoreboard-team-name'; - nameDiv.innerHTML = score.name; - item.appendChild(nameDiv); - - const pointsDiv = document.createElement('div'); - pointsDiv.className = 'scoreboard-points'; - if (score.points > 0) { - pointsDiv.classList.add('positive'); - pointsDiv.innerHTML = `+${score.points}`; - } else if (score.points < 0) { - pointsDiv.classList.add('negative'); - pointsDiv.innerHTML = `${score.points}`; - } else { - pointsDiv.innerHTML = '0'; - } - item.appendChild(pointsDiv); - - list.appendChild(item); - }); - - section.appendChild(list); - content.appendChild(section); - } - }); - - document.getElementById('scoreboardModal').style.display = 'block'; -} - -function closeScoreboard() { - document.getElementById('scoreboardModal').style.display = 'none'; -} - -function confirmReset() { - document.getElementById('resetConfirmModal').style.display = 'block'; -} - -function closeResetConfirm() { - document.getElementById('resetConfirmModal').style.display = 'none'; -} - -function performReset() { - // Lade die Rohdaten (Teams, Feldanzahl) - const stored = localStorage.getItem(STORAGE_KEY); - if (!stored) return; - - const data = JSON.parse(stored); - - // Setze Rotationsstates zurück auf Anfangszustand - rotationState = { - bundesliga: { - round: 0, - teamOrder: data.bundesliga.map((t, i) => i) - }, - champions: { - round: 0, - teamOrder: data.champions.map((t, i) => i) - } - }; - - // Leere alle Scores - matchScores = {}; - - // Speichere zurückgesetzte States - saveRotationState(); - saveMatchScores(); - - // Aktualisiere die UI - displayCurrentRound(); - - // Schließe das Modal - closeResetConfirm(); - - alert('✅ Turnier wurde zurückgesetzt! Alle Runden und Scores wurden gelöscht.'); -} - -function openResultsModal() { - document.getElementById('resultsModal').style.display = 'block'; -} - -function closeResultsModal() { - document.getElementById('resultsModal').style.display = 'none'; -} \ No newline at end of file diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2aa7205 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3c01d69713f9c184e92b74f5799e6dff2f500825 GIT binary patch literal 20373 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 literal 0 HcmV?d00001 diff --git a/public/placeholder.svg b/public/placeholder.svg new file mode 100644 index 0000000..e763910 --- /dev/null +++ b/public/placeholder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..6018e70 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,14 @@ +User-agent: Googlebot +Allow: / + +User-agent: Bingbot +Allow: / + +User-agent: Twitterbot +Allow: / + +User-agent: facebookexternalhit +Allow: / + +User-agent: * +Allow: / diff --git a/script.js b/script.js deleted file mode 100644 index 48c549a..0000000 --- a/script.js +++ /dev/null @@ -1,227 +0,0 @@ -const STORAGE_KEY = 'turnierplaner_data'; - -// Daten laden beim Start -document.addEventListener('DOMContentLoaded', () => { - loadData(); -}); - -function addTeam(league) { - const list = document.getElementById(`${league}-list`); - - // Leere-Nachricht entfernen wenn vorhanden - const emptyMsg = list.querySelector('.empty-message'); - if (emptyMsg) { - emptyMsg.remove(); - } - - const teamEntry = document.createElement('div'); - teamEntry.className = 'team-entry'; - teamEntry.innerHTML = ` -
- - - -
- - `; - - list.appendChild(teamEntry); - updateTeamCount(league); - saveData(); - - // Focus auf das erste Input-Feld - teamEntry.querySelector('.team-name').focus(); -} - -function deleteTeam(button) { - const teamEntry = button.parentElement; - const list = teamEntry.parentElement; - - teamEntry.remove(); - - // Bestimme welche Liga - const league = list.id.replace('-list', ''); - updateTeamCount(league); - saveData(); - - // Zeige Leere-Nachricht wenn keine Teams mehr - if (list.children.length === 0) { - const emptyMsg = document.createElement('div'); - emptyMsg.className = 'empty-message'; - emptyMsg.textContent = 'Keine Teams hinzugefügt. Klicke auf + um zu beginnen!'; - list.appendChild(emptyMsg); - } -} - -function saveData() { - const data = { - fieldCount: document.getElementById('fieldCount').value, - bundesliga: getTeamsFromList('bundesliga'), - champions: getTeamsFromList('champions') - }; - localStorage.setItem(STORAGE_KEY, JSON.stringify(data)); -} - -function getTeamsFromList(league) { - const list = document.getElementById(`${league}-list`); - const teams = []; - list.querySelectorAll('.team-entry').forEach(entry => { - teams.push({ - name: entry.querySelector('.team-name').value, - club: entry.querySelector('.team-club').value, - motto: entry.querySelector('.team-motto').value - }); - }); - return teams; -} - -function loadData() { - const stored = localStorage.getItem(STORAGE_KEY); - if (!stored) return; - - const data = JSON.parse(stored); - - // Lade Feldanzahl - document.getElementById('fieldCount').value = data.fieldCount || 1; - - // Lade Teams - loadTeamsToList('bundesliga', data.bundesliga || []); - loadTeamsToList('champions', data.champions || []); - - // Event listener für Auto-Save - document.getElementById('fieldCount').addEventListener('change', saveData); - document.addEventListener('input', (e) => { - if (e.target.classList.contains('team-name') || - e.target.classList.contains('team-club') || - e.target.classList.contains('team-motto')) { - saveData(); - } - }); - - // Update Team-Anzahl - updateTeamCount('bundesliga'); - updateTeamCount('champions'); -} - -function loadTeamsToList(league, teams) { - const list = document.getElementById(`${league}-list`); - list.innerHTML = ''; - - if (teams.length === 0) { - const emptyMsg = document.createElement('div'); - emptyMsg.className = 'empty-message'; - emptyMsg.textContent = 'Keine Teams hinzugefügt. Klicke auf + um zu beginnen!'; - list.appendChild(emptyMsg); - return; - } - - teams.forEach(team => { - const teamEntry = document.createElement('div'); - teamEntry.className = 'team-entry'; - teamEntry.innerHTML = ` -
- - - -
- - `; - list.appendChild(teamEntry); - }); - - // Event listener für Auto-Save - document.addEventListener('input', (e) => { - if (e.target.classList.contains('team-name') || - e.target.classList.contains('team-club') || - e.target.classList.contains('team-motto')) { - saveData(); - } - }); - - // Update Team-Anzahl - updateTeamCount(league); -} - -function updateTeamCount(league) { - const list = document.getElementById(`${league}-list`); - const countElement = document.getElementById(`${league}-count`); - const teamCount = list.querySelectorAll('.team-entry').length; - const teamText = teamCount === 1 ? 'Team' : 'Teams'; - countElement.textContent = `${teamCount} ${teamText}`; -} - -function exportData() { - const data = { - fieldCount: document.getElementById('fieldCount').value, - bundesliga: getTeamsFromList('bundesliga'), - champions: getTeamsFromList('champions') - }; - - const outputDiv = document.getElementById('export-output'); - outputDiv.textContent = JSON.stringify(data, null, 2); - outputDiv.style.display = 'block'; - - // Download als JSON-Datei - const jsonString = JSON.stringify(data, null, 2); - const blob = new Blob([jsonString], { type: 'application/json' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = `turnierplaner_${new Date().toISOString().split('T')[0]}.json`; - a.click(); - URL.revokeObjectURL(url); -} - -function importData() { - document.getElementById('import-file').click(); -} - -function handleFileImport(event) { - const file = event.target.files[0]; - if (!file) return; - - const reader = new FileReader(); - reader.onload = (e) => { - try { - const data = JSON.parse(e.target.result); - - document.getElementById('fieldCount').value = data.fieldCount || 1; - loadTeamsToList('bundesliga', data.bundesliga || []); - loadTeamsToList('champions', data.champions || []); - - saveData(); - alert('✅ Daten erfolgreich importiert!'); - } catch (error) { - alert('❌ Fehler beim Importieren der Datei: ' + error.message); - } - }; - reader.readAsText(file); - - // Reset file input - event.target.value = ''; -} - -function escapeHtml(text) { - const map = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - return text.replace(/[&<>"']/g, m => map[m]); -} - -function navigateToPlanning() { - const data = { - fieldCount: document.getElementById('fieldCount').value, - bundesliga: getTeamsFromList('bundesliga'), - champions: getTeamsFromList('champions') - }; - - // Speichere in localStorage falls noch nicht gespeichert - localStorage.setItem(STORAGE_KEY, JSON.stringify(data)); - - // Navigiere zur Planungsseite - window.location.href = 'planning.html'; -} diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..dde0682 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,32 @@ +import { Toaster } from "@/components/ui/toaster"; +import { Toaster as Sonner } from "@/components/ui/sonner"; +import { TooltipProvider } from "@/components/ui/tooltip"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { BrowserRouter, Routes, Route } from "react-router-dom"; +import { TournamentProvider } from "@/context/TournamentContext"; +import Index from "./pages/Index"; +import Tournament from "./pages/Tournament"; +import NotFound from "./pages/NotFound"; + +const queryClient = new QueryClient(); + +const App = () => ( + + + + + + + + } /> + } /> + {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} + } /> + + + + + +); + +export default App; diff --git a/src/components/FieldSettings.tsx b/src/components/FieldSettings.tsx new file mode 100644 index 0000000..9f21b8e --- /dev/null +++ b/src/components/FieldSettings.tsx @@ -0,0 +1,49 @@ +import { useTournament } from '@/context/TournamentContext'; +import { Button } from '@/components/ui/button'; +import { Minus, Plus, LayoutGrid } from 'lucide-react'; + +export const FieldSettings = () => { + const { fieldCount, setFieldCount } = useTournament(); + + return ( +
+
+
+ +
+
+

Spielfelder

+

Anzahl verfügbarer Felder

+
+
+ +
+ + +
+ {fieldCount} +

+ {fieldCount === 1 ? 'Feld' : 'Felder'} +

+
+ + +
+
+ ); +}; diff --git a/src/components/Header.tsx b/src/components/Header.tsx new file mode 100644 index 0000000..59bd0db --- /dev/null +++ b/src/components/Header.tsx @@ -0,0 +1,61 @@ +import { Link, useLocation } from 'react-router-dom'; +import { useTournament } from '@/context/TournamentContext'; +import { Button } from '@/components/ui/button'; +import { ArrowRight, ArrowLeft, RotateCcw } from 'lucide-react'; + +export const Header = () => { + const location = useLocation(); + const { teams, resetTournament } = useTournament(); + const isHome = location.pathname === '/'; + + return ( +
+
+ +
+ NVJ +
+ Turnierplaner + + +
+ {!isHome && ( + + )} + + {isHome ? ( + + ) : ( + + )} +
+
+
+ ); +}; diff --git a/src/components/MatchScoreInput.tsx b/src/components/MatchScoreInput.tsx new file mode 100644 index 0000000..a8b58c3 --- /dev/null +++ b/src/components/MatchScoreInput.tsx @@ -0,0 +1,108 @@ +import { useState } from 'react'; +import { Match } from '@/types/tournament'; +import { useTournament } from '@/context/TournamentContext'; +import { Input } from '@/components/ui/input'; +import { Button } from '@/components/ui/button'; +import { Check } from 'lucide-react'; + +interface MatchScoreInputProps { + match: Match; +} + +export const MatchScoreInput = ({ match }: MatchScoreInputProps) => { + const { updateMatchResult } = useTournament(); + const [scoreA, setScoreA] = useState(match.result?.scoreA?.toString() ?? ''); + const [scoreB, setScoreB] = useState(match.result?.scoreB?.toString() ?? ''); + + const handleSaveResult = () => { + const numA = parseInt(scoreA) || 0; + const numB = parseInt(scoreB) || 0; + updateMatchResult(match.id, numA, numB); + }; + + const isChampions = match.league === 'champions'; + const hasResult = match.result !== undefined; + const canSave = scoreA !== '' && scoreB !== ''; + + return ( +
+
+ + Feld {match.fieldNumber} + + {hasResult && ( + + + Gespeichert + + )} +
+ +
+
+
+

{match.teamA.name}

+

{match.teamA.club}

+
+ setScoreA(e.target.value)} + className="w-16 h-12 text-center text-lg font-bold rounded-xl" + placeholder="0" + /> +
+ +
+
+ VS +
+
+ +
+
+

{match.teamB.name}

+

{match.teamB.club}

+
+ setScoreB(e.target.value)} + className="w-16 h-12 text-center text-lg font-bold rounded-xl" + placeholder="0" + /> +
+
+ + + + {hasResult && match.result && ( +
+
+ = 0 ? 'text-field font-medium' : 'text-destructive'}> + {match.result.pointsA >= 0 ? '+' : ''}{match.result.pointsA} Pkt + + = 0 ? 'text-field font-medium' : 'text-destructive'}> + {match.result.pointsB >= 0 ? '+' : ''}{match.result.pointsB} Pkt + +
+
+ )} +
+ ); +}; diff --git a/src/components/NavLink.tsx b/src/components/NavLink.tsx new file mode 100644 index 0000000..a561a95 --- /dev/null +++ b/src/components/NavLink.tsx @@ -0,0 +1,28 @@ +import { NavLink as RouterNavLink, NavLinkProps } from "react-router-dom"; +import { forwardRef } from "react"; +import { cn } from "@/lib/utils"; + +interface NavLinkCompatProps extends Omit { + className?: string; + activeClassName?: string; + pendingClassName?: string; +} + +const NavLink = forwardRef( + ({ className, activeClassName, pendingClassName, to, ...props }, ref) => { + return ( + + cn(className, isActive && activeClassName, isPending && pendingClassName) + } + {...props} + /> + ); + }, +); + +NavLink.displayName = "NavLink"; + +export { NavLink }; diff --git a/src/components/ScoreboardModal.tsx b/src/components/ScoreboardModal.tsx new file mode 100644 index 0000000..17e5052 --- /dev/null +++ b/src/components/ScoreboardModal.tsx @@ -0,0 +1,208 @@ +import { useState } from 'react'; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; +import { Button } from '@/components/ui/button'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { useTournament } from '@/context/TournamentContext'; +import { Trophy, Star, BarChart3, TrendingUp, TrendingDown, Minus } from 'lucide-react'; +import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts'; + +const CHART_COLORS = [ + 'hsl(211, 100%, 50%)', + 'hsl(0, 72%, 51%)', + 'hsl(142, 71%, 45%)', + 'hsl(45, 93%, 47%)', + 'hsl(280, 65%, 60%)', + 'hsl(180, 65%, 45%)', + 'hsl(320, 65%, 52%)', + 'hsl(30, 80%, 55%)', +]; + +export const ScoreboardModal = () => { + const { getTeamScores, rounds } = useTournament(); + const [open, setOpen] = useState(false); + + const bundesligaScores = getTeamScores('bundesliga'); + const championsScores = getTeamScores('champions'); + + const createChartData = (league: 'bundesliga' | 'champions') => { + const scores = league === 'bundesliga' ? bundesligaScores : championsScores; + + if (rounds.length === 0) return []; + + const data = []; + + // Add starting point + const startPoint: Record = { round: 'Start' }; + scores.forEach((s) => { + startPoint[s.team.name] = 0; + }); + data.push(startPoint); + + // Add each round + for (let i = 0; i < rounds.length; i++) { + const point: Record = { round: `Runde ${i + 1}` }; + scores.forEach((s) => { + const cumulativePoints = s.pointsHistory.slice(0, i + 1).reduce((a, b) => a + b, 0); + point[s.team.name] = cumulativePoints; + }); + data.push(point); + } + + return data; + }; + + const renderScoreTable = (league: 'bundesliga' | 'champions') => { + const scores = league === 'bundesliga' ? bundesligaScores : championsScores; + const Icon = league === 'bundesliga' ? Trophy : Star; + const badgeClass = league === 'bundesliga' ? 'bg-bundesliga/10 text-bundesliga' : 'bg-champions/20 text-champions-foreground'; + + if (scores.length === 0) { + return ( +
+ Keine Teams in dieser Liga +
+ ); + } + + return ( +
+
+ + + + + + + + + + + + {scores.map((score, index) => { + const lastRoundPoints = score.pointsHistory[score.pointsHistory.length - 1] ?? 0; + return ( + + + + + + + + ); + })} + +
#TeamSpielePunkteTrend
+ + {index + 1} + + +

{score.team.name}

+

{score.team.club}

+
+ {score.matchesPlayed} + + 0 ? 'text-field' : + score.totalPoints < 0 ? 'text-destructive' : + 'text-foreground' + }`}> + {score.totalPoints > 0 ? '+' : ''}{score.totalPoints} + + +
+ {lastRoundPoints > 0 ? ( + + ) : lastRoundPoints < 0 ? ( + + ) : ( + + )} +
+
+
+ + {rounds.length > 0 && ( +
+

Punkteverlauf

+
+ + + + + + + + {scores.map((score, index) => ( + + ))} + + +
+
+ )} +
+ ); + }; + + return ( + + + + + + + Scoreboard + + + + + + + Bundesliga + + + + Champions League + + + + {renderScoreTable('bundesliga')} + + + {renderScoreTable('champions')} + + + + + ); +}; diff --git a/src/components/TeamForm.tsx b/src/components/TeamForm.tsx new file mode 100644 index 0000000..f42bd64 --- /dev/null +++ b/src/components/TeamForm.tsx @@ -0,0 +1,115 @@ +import { useState } from 'react'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { useTournament } from '@/context/TournamentContext'; +import { League } from '@/types/tournament'; +import { Plus } from 'lucide-react'; + +export const TeamForm = () => { + const { addTeam } = useTournament(); + const [name, setName] = useState(''); + const [club, setClub] = useState(''); + const [battleCry, setBattleCry] = useState(''); + const [league, setLeague] = useState('bundesliga'); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (!name.trim() || !club.trim()) return; + + addTeam({ + name: name.trim(), + club: club.trim(), + battleCry: battleCry.trim(), + league, + }); + + setName(''); + setClub(''); + setBattleCry(''); + }; + + return ( +
+

Neues Team

+ +
+
+ + setName(e.target.value)} + placeholder="z.B. Die Netzroller" + className="h-11 rounded-xl border-border/60 bg-secondary/50 focus:bg-card transition-colors" + /> +
+ +
+ + setClub(e.target.value)} + placeholder="z.B. VfB Stuttgart" + className="h-11 rounded-xl border-border/60 bg-secondary/50 focus:bg-card transition-colors" + /> +
+ +
+ + setBattleCry(e.target.value)} + placeholder="z.B. Volle Power!" + className="h-11 rounded-xl border-border/60 bg-secondary/50 focus:bg-card transition-colors" + /> +
+ +
+ +
+ + +
+
+
+ + +
+ ); +}; diff --git a/src/components/TeamList.tsx b/src/components/TeamList.tsx new file mode 100644 index 0000000..3342f5a --- /dev/null +++ b/src/components/TeamList.tsx @@ -0,0 +1,78 @@ +import { useTournament } from '@/context/TournamentContext'; +import { League } from '@/types/tournament'; +import { X, Trophy, Star } from 'lucide-react'; + +interface TeamListProps { + league: League; +} + +export const TeamList = ({ league }: TeamListProps) => { + const { teams, removeTeam } = useTournament(); + const filteredTeams = teams.filter((team) => team.league === league); + + const leagueConfig = { + bundesliga: { + title: 'Bundesliga', + icon: Trophy, + emptyText: 'Noch keine Teams in der Bundesliga', + badgeClass: 'bg-bundesliga/10 text-bundesliga', + borderClass: 'border-l-bundesliga', + }, + champions: { + title: 'Champions League', + icon: Star, + emptyText: 'Noch keine Teams in der Champions League', + badgeClass: 'bg-champions/20 text-champions-foreground', + borderClass: 'border-l-champions', + }, + }; + + const config = leagueConfig[league]; + const Icon = config.icon; + + return ( +
+
+
+ +
+
+

{config.title}

+

{filteredTeams.length} Teams

+
+
+ + {filteredTeams.length === 0 ? ( +

+ {config.emptyText} +

+ ) : ( +
+ {filteredTeams.map((team) => ( +
+ + +
+

{team.name}

+

{team.club}

+ {team.battleCry && ( +

+ „{team.battleCry}" +

+ )} +
+
+ ))} +
+ )} +
+ ); +}; diff --git a/src/components/TournamentView.tsx b/src/components/TournamentView.tsx new file mode 100644 index 0000000..25c4405 --- /dev/null +++ b/src/components/TournamentView.tsx @@ -0,0 +1,189 @@ +import { useTournament } from '@/context/TournamentContext'; +import { Match, Team, League } from '@/types/tournament'; +import { Trophy, Star, Clock, Play, CheckCircle, AlertCircle } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { MatchScoreInput } from '@/components/MatchScoreInput'; +import { ScoreboardModal } from '@/components/ScoreboardModal'; + +const WaitingTeam = ({ team }: { team: Team }) => ( +
+ +
+

{team.name}

+

{team.club}

+
+
+); + +const LeagueSection = ({ + title, + icon: Icon, + matches, + waiting, + badgeClass, +}: { + title: string; + icon: typeof Trophy; + matches: Match[]; + waiting: Team[]; + badgeClass: string; +}) => { + const matchesWithResults = matches.filter((m) => m.result); + + return ( +
+
+
+ +
+
+

{title}

+

+ {matchesWithResults.length}/{matches.length} Spiele eingetragen +

+
+
+ + {matches.length === 0 ? ( +
+

+ Mindestens 2 Teams benötigt für Spiele +

+
+ ) : ( +
+ {matches.map((match) => ( + + ))} +
+ )} + + {waiting.length > 0 && ( +
+

+ + Wartepositionen ({waiting.length}) +

+
+ {waiting.map((team) => ( + + ))} +
+
+ )} +
+ ); +}; + +export const TournamentView = () => { + const { teams, fieldCount, currentRound, rounds, startNewRound, completeCurrentRound } = useTournament(); + + const bundesligaMatches = currentRound?.matches.filter((m) => m.league === 'bundesliga') ?? []; + const championsMatches = currentRound?.matches.filter((m) => m.league === 'champions') ?? []; + const bundesligaWaiting = currentRound?.bundesligaWaiting ?? []; + const championsWaiting = currentRound?.championsWaiting ?? []; + + const allMatchesHaveResults = currentRound?.matches.every((m) => m.result) ?? false; + const hasEnoughTeams = teams.length >= 2; + + const completedRounds = rounds.filter((r) => r.completed); + + return ( +
+
+
+

Turnierübersicht

+

+ {completedRounds.length} {completedRounds.length === 1 ? 'Runde' : 'Runden'} abgeschlossen + {currentRound && ` • Runde ${currentRound.roundNumber} aktiv`} +

+
+
+ + {!currentRound ? ( + + ) : ( + + )} +
+
+ + {!currentRound && !hasEnoughTeams && ( +
+ +
+

Noch nicht genug Teams

+

+ Füge mindestens 2 Teams hinzu, um das Turnier zu starten. +

+
+
+ )} + + {!currentRound && hasEnoughTeams && rounds.length === 0 && ( +
+ +
+

Bereit zum Start

+

+ {teams.length} Teams und {fieldCount} Felder sind konfiguriert. Klicke auf "Turnier starten". +

+
+
+ )} + + {!currentRound && rounds.length > 0 && ( +
+ +
+

Runde {rounds.length} abgeschlossen

+

+ Starte eine neue Runde oder schau dir das Scoreboard an. +

+
+
+ )} + + {currentRound && ( + <> +
+

+ Runde {currentRound.roundNumber} – + Trage die Ergebnisse für alle Spiele ein +

+
+ + + + + + )} +
+ ); +}; diff --git a/src/components/ui/accordion.tsx b/src/components/ui/accordion.tsx new file mode 100644 index 0000000..1e7878c --- /dev/null +++ b/src/components/ui/accordion.tsx @@ -0,0 +1,52 @@ +import * as React from "react"; +import * as AccordionPrimitive from "@radix-ui/react-accordion"; +import { ChevronDown } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +const Accordion = AccordionPrimitive.Root; + +const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AccordionItem.displayName = "AccordionItem"; + +const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + svg]:rotate-180", + className, + )} + {...props} + > + {children} + + + +)); +AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName; + +const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + +
{children}
+
+)); + +AccordionContent.displayName = AccordionPrimitive.Content.displayName; + +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }; diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx new file mode 100644 index 0000000..6dfbfb4 --- /dev/null +++ b/src/components/ui/alert-dialog.tsx @@ -0,0 +1,104 @@ +import * as React from "react"; +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"; + +import { cn } from "@/lib/utils"; +import { buttonVariants } from "@/components/ui/button"; + +const AlertDialog = AlertDialogPrimitive.Root; + +const AlertDialogTrigger = AlertDialogPrimitive.Trigger; + +const AlertDialogPortal = AlertDialogPrimitive.Portal; + +const AlertDialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName; + +const AlertDialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + +)); +AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName; + +const AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes) => ( +
+); +AlertDialogHeader.displayName = "AlertDialogHeader"; + +const AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes) => ( +
+); +AlertDialogFooter.displayName = "AlertDialogFooter"; + +const AlertDialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName; + +const AlertDialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName; + +const AlertDialogAction = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName; + +const AlertDialogCancel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName; + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +}; diff --git a/src/components/ui/alert.tsx b/src/components/ui/alert.tsx new file mode 100644 index 0000000..2efc3c8 --- /dev/null +++ b/src/components/ui/alert.tsx @@ -0,0 +1,43 @@ +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 p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", + { + 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>( + ({ className, ...props }, ref) => ( +
+ ), +); +AlertTitle.displayName = "AlertTitle"; + +const AlertDescription = React.forwardRef>( + ({ className, ...props }, ref) => ( +
+ ), +); +AlertDescription.displayName = "AlertDescription"; + +export { Alert, AlertTitle, AlertDescription }; diff --git a/src/components/ui/aspect-ratio.tsx b/src/components/ui/aspect-ratio.tsx new file mode 100644 index 0000000..c9e6f4b --- /dev/null +++ b/src/components/ui/aspect-ratio.tsx @@ -0,0 +1,5 @@ +import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"; + +const AspectRatio = AspectRatioPrimitive.Root; + +export { AspectRatio }; diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx new file mode 100644 index 0000000..68d21bb --- /dev/null +++ b/src/components/ui/avatar.tsx @@ -0,0 +1,38 @@ +import * as React from "react"; +import * as AvatarPrimitive from "@radix-ui/react-avatar"; + +import { cn } from "@/lib/utils"; + +const Avatar = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +Avatar.displayName = AvatarPrimitive.Root.displayName; + +const AvatarImage = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AvatarImage.displayName = AvatarPrimitive.Image.displayName; + +const AvatarFallback = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx new file mode 100644 index 0000000..0853c44 --- /dev/null +++ b/src/components/ui/badge.tsx @@ -0,0 +1,29 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export interface BadgeProps extends React.HTMLAttributes, VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return
; +} + +export { Badge, badgeVariants }; diff --git a/src/components/ui/breadcrumb.tsx b/src/components/ui/breadcrumb.tsx new file mode 100644 index 0000000..ca91ff5 --- /dev/null +++ b/src/components/ui/breadcrumb.tsx @@ -0,0 +1,90 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { ChevronRight, MoreHorizontal } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +const Breadcrumb = React.forwardRef< + HTMLElement, + React.ComponentPropsWithoutRef<"nav"> & { + separator?: React.ReactNode; + } +>(({ ...props }, ref) =>