From b8068d1a52f31d22d438ead8efa9329ce541ecae Mon Sep 17 00:00:00 2001 From: priyanshuvish Date: Thu, 18 Sep 2025 15:03:41 +0530 Subject: [PATCH] first commit --- .gitignore | 32 + README.md | 11 + index.html | 15 + package-lock.json | 4248 +++++++++++++++++ package.json | 64 + postcss.config.mjs | 5 + src/App.tsx | 458 ++ src/Attributions.md | 3 + ...17f89f308e91a12011ae1dc4ea7b32cda951d8.png | Bin 0 -> 34274 bytes ...850ec33f7da20cadeecc91695cda7ad837415e.png | Bin 0 -> 34519 bytes src/components/BookingManagementPage.tsx | 272 ++ src/components/CalendarView.tsx | 369 ++ src/components/CustomerDetailView.tsx | 180 + src/components/Dashboard.tsx | 631 +++ src/components/Header.tsx | 204 + src/components/NotificationsPage.tsx | 330 ++ src/components/RecurringBlockPage.tsx | 439 ++ src/components/RedemptionModal.tsx | 240 + src/components/RedemptionsPage.tsx | 427 ++ src/components/Sidebar.tsx | 225 + src/components/SlotDetailPanel.tsx | 419 ++ src/components/StaffManagementPage.tsx | 636 +++ src/components/SupportPage.tsx | 170 + src/components/figma/ImageWithFallback.tsx | 27 + src/components/ui/accordion.tsx | 66 + src/components/ui/alert-dialog.tsx | 157 + src/components/ui/alert.tsx | 66 + src/components/ui/aspect-ratio.tsx | 11 + src/components/ui/avatar.tsx | 53 + src/components/ui/badge.tsx | 46 + src/components/ui/breadcrumb.tsx | 109 + src/components/ui/button.tsx | 58 + src/components/ui/calendar.tsx | 75 + src/components/ui/card.tsx | 92 + src/components/ui/carousel.tsx | 241 + src/components/ui/chart.tsx | 353 ++ src/components/ui/checkbox.tsx | 32 + src/components/ui/collapsible.tsx | 33 + src/components/ui/command.tsx | 177 + src/components/ui/context-menu.tsx | 252 + src/components/ui/dialog.tsx | 135 + src/components/ui/drawer.tsx | 132 + src/components/ui/dropdown-menu.tsx | 257 + src/components/ui/form.tsx | 168 + src/components/ui/hover-card.tsx | 44 + src/components/ui/input-otp.tsx | 77 + src/components/ui/input.tsx | 21 + src/components/ui/label.tsx | 24 + src/components/ui/menubar.tsx | 276 ++ src/components/ui/navigation-menu.tsx | 168 + src/components/ui/pagination.tsx | 127 + src/components/ui/popover.tsx | 48 + src/components/ui/progress.tsx | 31 + src/components/ui/radio-group.tsx | 45 + src/components/ui/resizable.tsx | 56 + src/components/ui/scroll-area.tsx | 58 + src/components/ui/select.tsx | 189 + src/components/ui/separator.tsx | 28 + src/components/ui/sheet.tsx | 139 + src/components/ui/sidebar.tsx | 726 +++ src/components/ui/skeleton.tsx | 13 + src/components/ui/slider.tsx | 63 + src/components/ui/sonner.tsx | 25 + src/components/ui/switch.tsx | 31 + src/components/ui/table.tsx | 116 + src/components/ui/tabs.tsx | 66 + src/components/ui/textarea.tsx | 18 + src/components/ui/toggle-group.tsx | 73 + src/components/ui/toggle.tsx | 47 + src/components/ui/tooltip.tsx | 61 + src/components/ui/use-mobile.ts | 21 + src/components/ui/utils.ts | 6 + src/global.d.ts | 29 + src/guidelines/Guidelines.md | 61 + src/imports/Content.tsx | 621 +++ src/imports/DashboardMenu-4-997.tsx | 336 ++ src/imports/FlightBookingRafiki.tsx | 313 ++ src/imports/Group58845.tsx | 67 + src/imports/Notifications.tsx | 254 + src/imports/TimeSlot.tsx | 315 ++ src/imports/svg-1dw6tu7s10.ts | 17 + src/imports/svg-fswka8rhrw.ts | 206 + src/imports/svg-iw8mz5qegz.ts | 12 + src/imports/svg-wyhfl2ip3y.ts | 5 + src/imports/svg-xewg6e9vz.ts | 8 + src/index.css | 3624 ++++++++++++++ src/main.tsx | 7 + src/styles/globals.css | 190 + tsconfig.json | 21 + tsconfig.node.json | 8 + vite.config.ts | 62 + 91 files changed, 20671 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.mjs create mode 100644 src/App.tsx create mode 100644 src/Attributions.md create mode 100644 src/assets/fc17f89f308e91a12011ae1dc4ea7b32cda951d8.png create mode 100644 src/assets/fe850ec33f7da20cadeecc91695cda7ad837415e.png create mode 100644 src/components/BookingManagementPage.tsx create mode 100644 src/components/CalendarView.tsx create mode 100644 src/components/CustomerDetailView.tsx create mode 100644 src/components/Dashboard.tsx create mode 100644 src/components/Header.tsx create mode 100644 src/components/NotificationsPage.tsx create mode 100644 src/components/RecurringBlockPage.tsx create mode 100644 src/components/RedemptionModal.tsx create mode 100644 src/components/RedemptionsPage.tsx create mode 100644 src/components/Sidebar.tsx create mode 100644 src/components/SlotDetailPanel.tsx create mode 100644 src/components/StaffManagementPage.tsx create mode 100644 src/components/SupportPage.tsx create mode 100644 src/components/figma/ImageWithFallback.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/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-mobile.ts create mode 100644 src/components/ui/utils.ts create mode 100644 src/global.d.ts create mode 100644 src/guidelines/Guidelines.md create mode 100644 src/imports/Content.tsx create mode 100644 src/imports/DashboardMenu-4-997.tsx create mode 100644 src/imports/FlightBookingRafiki.tsx create mode 100644 src/imports/Group58845.tsx create mode 100644 src/imports/Notifications.tsx create mode 100644 src/imports/TimeSlot.tsx create mode 100644 src/imports/svg-1dw6tu7s10.ts create mode 100644 src/imports/svg-fswka8rhrw.ts create mode 100644 src/imports/svg-iw8mz5qegz.ts create mode 100644 src/imports/svg-wyhfl2ip3y.ts create mode 100644 src/imports/svg-xewg6e9vz.ts create mode 100644 src/index.css create mode 100644 src/main.tsx create mode 100644 src/styles/globals.css create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b892d6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# Node modules +node_modules/ + +# Logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +# Environment files +.env +.env.local +.env.*.local + +# Build output +dist/ +build/ +.next/ +out/ + +# IDE files +.vscode/ +.idea/ +*.swp + +# Mac / Linux / Windows system files +.DS_Store +Thumbs.db + +# Temporary +*.tmp diff --git a/README.md b/README.md new file mode 100644 index 0000000..150582a --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ + + # CityCards Partner Web Make + + This is a code bundle for CityCards Partner Web Make. The original project is available at https://www.figma.com/design/J1K6yloEjg1b802fwMUmV1/CityCards-Partner-Web-Make. + + ## Running the code + + Run `npm i` to install the dependencies. + + Run `npm run dev` to start the development server. + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..dc35ccc --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + CityCards Partner Web Make + + + +
+ + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ff08ef5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4248 @@ +{ + "name": "CityCards Partner Web Make", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "CityCards Partner Web Make", + "version": "0.1.0", + "dependencies": { + "@radix-ui/react-accordion": "^1.2.3", + "@radix-ui/react-alert-dialog": "^1.1.6", + "@radix-ui/react-aspect-ratio": "^1.1.2", + "@radix-ui/react-avatar": "^1.1.3", + "@radix-ui/react-checkbox": "^1.1.4", + "@radix-ui/react-collapsible": "^1.1.3", + "@radix-ui/react-context-menu": "^2.2.6", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-hover-card": "^1.1.6", + "@radix-ui/react-label": "^2.1.2", + "@radix-ui/react-menubar": "^1.1.6", + "@radix-ui/react-navigation-menu": "^1.2.5", + "@radix-ui/react-popover": "^1.1.6", + "@radix-ui/react-progress": "^1.1.2", + "@radix-ui/react-radio-group": "^1.2.3", + "@radix-ui/react-scroll-area": "^1.2.3", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slider": "^1.2.3", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.1.3", + "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-toggle": "^1.1.2", + "@radix-ui/react-toggle-group": "^1.1.2", + "@radix-ui/react-tooltip": "^1.1.8", + "@tailwindcss/postcss": "^4.1.13", + "class-variance-authority": "^0.7.1", + "clsx": "*", + "cmdk": "^1.1.1", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.487.0", + "motion": "*", + "next-themes": "^0.4.6", + "postcss": "^8.5.6", + "react": "^18.3.1", + "react-day-picker": "^8.10.1", + "react-dom": "^18.3.1", + "react-hook-form": "^7.55.0", + "react-resizable-panels": "^2.1.7", + "recharts": "^2.15.2", + "sonner": "^2.0.3", + "tailwind-merge": "*", + "tailwindcss": "^4.1.13", + "vaul": "^1.1.2" + }, + "devDependencies": { + "@types/node": "^20.10.0", + "@types/react": "^19.1.13", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react-swc": "^3.10.2", + "vite": "6.3.5" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "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/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@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.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@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.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@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.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@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.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.5", + "@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.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", + "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.16", + "@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.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@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.5", + "@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.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.16", + "@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.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "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.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@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.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@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.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", + "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@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.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", + "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@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.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@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.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "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.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "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.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@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.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@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.5", + "@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.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@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.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@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.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@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.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@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": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@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.11", + "@radix-ui/react-toggle": "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-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@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/@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.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.2.tgz", + "integrity": "sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.2.tgz", + "integrity": "sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.2.tgz", + "integrity": "sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.2.tgz", + "integrity": "sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.2.tgz", + "integrity": "sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.2.tgz", + "integrity": "sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.2.tgz", + "integrity": "sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.2.tgz", + "integrity": "sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.2.tgz", + "integrity": "sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.2.tgz", + "integrity": "sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.50.2.tgz", + "integrity": "sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.2.tgz", + "integrity": "sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.2.tgz", + "integrity": "sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.2.tgz", + "integrity": "sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.2.tgz", + "integrity": "sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.2.tgz", + "integrity": "sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.2.tgz", + "integrity": "sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.2.tgz", + "integrity": "sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.2.tgz", + "integrity": "sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.2.tgz", + "integrity": "sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.2.tgz", + "integrity": "sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/core": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz", + "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.24" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.13.5", + "@swc/core-darwin-x64": "1.13.5", + "@swc/core-linux-arm-gnueabihf": "1.13.5", + "@swc/core-linux-arm64-gnu": "1.13.5", + "@swc/core-linux-arm64-musl": "1.13.5", + "@swc/core-linux-x64-gnu": "1.13.5", + "@swc/core-linux-x64-musl": "1.13.5", + "@swc/core-win32-arm64-msvc": "1.13.5", + "@swc/core-win32-ia32-msvc": "1.13.5", + "@swc/core-win32-x64-msvc": "1.13.5" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz", + "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz", + "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz", + "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz", + "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz", + "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz", + "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz", + "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz", + "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz", + "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==", + "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.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz", + "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==", + "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.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", + "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.18", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.13.tgz", + "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-x64": "4.1.13", + "@tailwindcss/oxide-freebsd-x64": "4.1.13", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.13", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.13", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-x64-musl": "4.1.13", + "@tailwindcss/oxide-wasm32-wasi": "4.1.13", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.13", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz", + "integrity": "sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz", + "integrity": "sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz", + "integrity": "sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz", + "integrity": "sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz", + "integrity": "sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz", + "integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz", + "integrity": "sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz", + "integrity": "sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz", + "integrity": "sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz", + "integrity": "sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz", + "integrity": "sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz", + "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.13.tgz", + "integrity": "sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.13", + "@tailwindcss/oxide": "4.1.13", + "postcss": "^8.4.41", + "tailwindcss": "4.1.13" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "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.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "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.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", + "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.13.tgz", + "integrity": "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", + "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "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/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "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==", + "license": "Apache-2.0", + "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/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", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "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/detect-libc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "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/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/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/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" + } + }, + "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-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/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/framer-motion": { + "version": "12.23.14", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.14.tgz", + "integrity": "sha512-8BQ6dvqOht2w8P1CwIEvAA0gypDR3fNG/M6/f5lT0QgNIKnJf7J43Bpv++NnCWU8YfmL47UEm2hbI0GRvdVhsQ==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.12", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/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/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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/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/lucide-react": { + "version": "0.487.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.487.0.tgz", + "integrity": "sha512-aKqhOQ+YmFnwq8dWgGjOuLc8V1R9/c/yOd+zDY4+ohsR2Jo05lSGc3WsstYPIzcTpeosN7LoCkLReUUITvaIvw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/motion": { + "version": "12.23.14", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.14.tgz", + "integrity": "sha512-kcJde+A4AeUD2ujAhpvhCOjzt6NtXjqL9m0LsLdyPO5SPVQFsCpxVyLsqtS1o9Z+CEJ7U8kSIhsRSJF1oDZXfg==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.23.14", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz", + "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "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/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/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/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.62.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", + "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", + "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-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/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/rollup": { + "version": "4.50.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.2.tgz", + "integrity": "sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.50.2", + "@rollup/rollup-android-arm64": "4.50.2", + "@rollup/rollup-darwin-arm64": "4.50.2", + "@rollup/rollup-darwin-x64": "4.50.2", + "@rollup/rollup-freebsd-arm64": "4.50.2", + "@rollup/rollup-freebsd-x64": "4.50.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.50.2", + "@rollup/rollup-linux-arm-musleabihf": "4.50.2", + "@rollup/rollup-linux-arm64-gnu": "4.50.2", + "@rollup/rollup-linux-arm64-musl": "4.50.2", + "@rollup/rollup-linux-loong64-gnu": "4.50.2", + "@rollup/rollup-linux-ppc64-gnu": "4.50.2", + "@rollup/rollup-linux-riscv64-gnu": "4.50.2", + "@rollup/rollup-linux-riscv64-musl": "4.50.2", + "@rollup/rollup-linux-s390x-gnu": "4.50.2", + "@rollup/rollup-linux-x64-gnu": "4.50.2", + "@rollup/rollup-linux-x64-musl": "4.50.2", + "@rollup/rollup-openharmony-arm64": "4.50.2", + "@rollup/rollup-win32-arm64-msvc": "4.50.2", + "@rollup/rollup-win32-ia32-msvc": "4.50.2", + "@rollup/rollup-win32-x64-msvc": "4.50.2", + "fsevents": "~2.3.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/sonner": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", + "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", + "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/tailwind-merge": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", + "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/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/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/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/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/vaul": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", + "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "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/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": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.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 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..80e51db --- /dev/null +++ b/package.json @@ -0,0 +1,64 @@ +{ + "name": "CityCards Partner Web Make", + "version": "0.1.0", + "private": true, + "dependencies": { + "@radix-ui/react-accordion": "^1.2.3", + "@radix-ui/react-alert-dialog": "^1.1.6", + "@radix-ui/react-aspect-ratio": "^1.1.2", + "@radix-ui/react-avatar": "^1.1.3", + "@radix-ui/react-checkbox": "^1.1.4", + "@radix-ui/react-collapsible": "^1.1.3", + "@radix-ui/react-context-menu": "^2.2.6", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-hover-card": "^1.1.6", + "@radix-ui/react-label": "^2.1.2", + "@radix-ui/react-menubar": "^1.1.6", + "@radix-ui/react-navigation-menu": "^1.2.5", + "@radix-ui/react-popover": "^1.1.6", + "@radix-ui/react-progress": "^1.1.2", + "@radix-ui/react-radio-group": "^1.2.3", + "@radix-ui/react-scroll-area": "^1.2.3", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slider": "^1.2.3", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.1.3", + "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-toggle": "^1.1.2", + "@radix-ui/react-toggle-group": "^1.1.2", + "@radix-ui/react-tooltip": "^1.1.8", + "@tailwindcss/postcss": "^4.1.13", + "class-variance-authority": "^0.7.1", + "clsx": "*", + "cmdk": "^1.1.1", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.487.0", + "motion": "*", + "next-themes": "^0.4.6", + "postcss": "^8.5.6", + "react": "^18.3.1", + "react-day-picker": "^8.10.1", + "react-dom": "^18.3.1", + "react-hook-form": "^7.55.0", + "react-resizable-panels": "^2.1.7", + "recharts": "^2.15.2", + "sonner": "^2.0.3", + "tailwind-merge": "*", + "tailwindcss": "^4.1.13", + "vaul": "^1.1.2" + }, + "devDependencies": { + "@types/node": "^20.10.0", + "@types/react": "^19.1.13", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react-swc": "^3.10.2", + "vite": "6.3.5" + }, + "scripts": { + "dev": "vite", + "build": "vite build" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..b776c62 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + "@tailwindcss/postcss": {}, + } +} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..bd149ac --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,458 @@ +import { Button } from "./components/ui/button"; +import { Input } from "./components/ui/input"; +import { Label } from "./components/ui/label"; +import { Checkbox } from "./components/ui/checkbox"; +import { InputOTP, InputOTPGroup, InputOTPSlot } from "./components/ui/input-otp"; +import { Mail, Lock, Eye, EyeOff, Search, Users, Calendar, TrendingUp, Clock, User } from "lucide-react"; +import { useState } from "react"; +import { motion, AnimatePresence } from "motion/react"; +import FlightBookingRafiki from "./imports/FlightBookingRafiki"; +import Sidebar from "./components/Sidebar"; +import Header from "./components/Header"; +import Dashboard from "./components/Dashboard"; +import RedemptionsPage from "./components/RedemptionsPage"; +import StaffManagementPage from "./components/StaffManagementPage"; +import SupportPage from "./components/SupportPage"; +import BookingManagementPage from "./components/BookingManagementPage"; +import RecurringBlockPage from "./components/RecurringBlockPage"; +import NotificationsPage from "./components/NotificationsPage"; + +export default function App() { + const [showPassword, setShowPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = useState(false); + const [rememberMe, setRememberMe] = useState(false); + const [showForgotPassword, setShowForgotPassword] = useState(false); + const [showOTPVerification, setShowOTPVerification] = useState(false); + const [showResetPassword, setShowResetPassword] = useState(false); + const [isLoggedIn, setIsLoggedIn] = useState(false); + const [otpValue, setOtpValue] = useState(""); + const [newPassword, setNewPassword] = useState(""); + const [confirmPassword, setConfirmPassword] = useState(""); + const [showPasswordPolicies, setShowPasswordPolicies] = useState(false); + const [activeNavItem, setActiveNavItem] = useState("dashboard"); + + // Password validation functions + const validatePassword = (password) => { + return { + hasMinLength: password.length >= 8, + hasUppercase: /[A-Z]/.test(password), + hasLowercase: /[a-z]/.test(password), + hasNumber: /[0-9]/.test(password), + hasSpecialChar: /[!@#$%^&*(),.?":{}|<>]/.test(password) + }; + }; + + const passwordValidation = validatePassword(newPassword); + + // If user is logged in, show dashboard + if (isLoggedIn) { + return ( +
+ {/* Fixed Sidebar */} + + + {/* Main Content with left margin for sidebar */} +
+ {/* Header with notifications and profile */} +
setActiveNavItem("notifications")} /> + + + {activeNavItem === "dashboard" && } + {(activeNavItem === "booking-table" || activeNavItem === "booking-calendar") && ( + setActiveNavItem("recurring-block")} + /> + )} + {activeNavItem === "recurring-block" && ( + setActiveNavItem("booking-calendar")} /> + )} + {activeNavItem === "redemptions" && } + {activeNavItem === "staff" && } + {activeNavItem === "support" && } + {activeNavItem === "notifications" && } + +
+
+ ); + } + + return ( +
+ {/* Left Panel - Welcome Section */} +
+
+
+
+ +
+
+
+

Welcome to

+

CityCards

+
+
+
+ + {/* Right Panel - Login Section */} +
+
+ + {!showForgotPassword && !showOTPVerification && !showResetPassword ? ( + +
+

Sign In to Access Your Account

+
+ +
+ {/* Email Field */} +
+ +
+ + +
+
+ + {/* Password Field */} +
+ +
+ + + +
+
+ + {/* Remember Me and Forgot Password */} +
+
+ + +
+ +
+ + {/* Sign In Button */} + +
+
+ ) : showForgotPassword && !showOTPVerification && !showResetPassword ? ( + +
+

Forgot Password

+

+ Forgot your password? Don't worry — just enter your email and we'll help you reset it. +

+
+ +
+ {/* Email Field */} +
+ +
+ + +
+
+ + {/* Continue Button */} + +
+ + {/* Back to Sign In */} + +
+ ) : showOTPVerification && !showResetPassword ? ( + +
+

Verify OTP

+

+ We've sent an OTP to your registered email. Please enter it below, or use the reset link included in the email. +

+
+ +
+ {/* OTP Input */} +
+ setOtpValue(value)} + className="gap-4" + > + + + + + + + +
+ + {/* Continue Button */} + +
+ + {/* Back to Forgot Password */} + +
+ ) : ( + +
+

Reset Password

+
+ +
+ {/* New Password Field */} +
+ +
+ + setNewPassword(e.target.value)} + onFocus={() => setShowPasswordPolicies(true)} + className="pl-10 pr-10 bg-gray-50 border border-gray-200 rounded-lg h-12 font-normal" + /> + +
+
+ + {/* Password Policies */} + {showPasswordPolicies && ( + +
+
+
+ Contains at least 8 characters +
+
+
+ At least one uppercase letter (A-Z) +
+
+
+ At least one lowercase letter (a-z) +
+
+
+ At least one number (0-9) +
+
+
+ At least one special character (e.g., !, @, #, $, %, ^, &, *) +
+
+
+ )} + + {/* Confirm Password Field */} +
+ +
+ + setConfirmPassword(e.target.value)} + className="pl-10 pr-10 bg-gray-50 border border-gray-200 rounded-lg h-12 font-normal" + /> + +
+ {confirmPassword && newPassword !== confirmPassword && ( +

Passwords do not match

+ )} +
+ + {/* Continue Button */} + +
+ + {/* Back to OTP */} + +
+ )} +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/Attributions.md b/src/Attributions.md new file mode 100644 index 0000000..9b7cd4e --- /dev/null +++ b/src/Attributions.md @@ -0,0 +1,3 @@ +This Figma Make file includes components from [shadcn/ui](https://ui.shadcn.com/) used under [MIT license](https://github.com/shadcn-ui/ui/blob/main/LICENSE.md). + +This Figma Make file includes photos from [Unsplash](https://unsplash.com) used under [license](https://unsplash.com/license). \ No newline at end of file diff --git a/src/assets/fc17f89f308e91a12011ae1dc4ea7b32cda951d8.png b/src/assets/fc17f89f308e91a12011ae1dc4ea7b32cda951d8.png new file mode 100644 index 0000000000000000000000000000000000000000..0e55e2f0e783999f26997f29229944523b999478 GIT binary patch literal 34274 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 literal 0 HcmV?d00001 diff --git a/src/assets/fe850ec33f7da20cadeecc91695cda7ad837415e.png b/src/assets/fe850ec33f7da20cadeecc91695cda7ad837415e.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa1ebaa5884705247d3762fddbadd79f81fef0b GIT binary patch literal 34519 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
    XTPjb63LmKt&Udjrys07n~aGs!JSDn$RcP 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

    yIWGW)1sD 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 Dae+Yb literal 0 HcmV?d00001 diff --git a/src/components/BookingManagementPage.tsx b/src/components/BookingManagementPage.tsx new file mode 100644 index 0000000..689a8c9 --- /dev/null +++ b/src/components/BookingManagementPage.tsx @@ -0,0 +1,272 @@ +import { useState } from "react"; +import { motion } from "motion/react"; +import { Search, Download, Filter, MoreHorizontal, Eye, Trash2 } from "lucide-react"; +import CalendarView from "./CalendarView"; +import { Button } from "./ui/button"; +import { Input } from "./ui/input"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "./ui/dropdown-menu"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "./ui/table"; + +interface BookingManagementPageProps { + activeView: string; + onNavigateToRecurringBlock?: () => void; +} + +export default function BookingManagementPage({ activeView, onNavigateToRecurringBlock }: BookingManagementPageProps) { + const [searchQuery, setSearchQuery] = useState(""); + + // Sample booking data + const bookings = [ + { + id: "A8529479", + fullName: "Ruby Williamson", + email: "ruby-williamson@outlook.com", + cardType: "Executive", + bookingId: "A8529479", + date: "06/10/25 16:30", + attendantName: "Three Pins Adventure", + }, + { + id: "A8529478", + fullName: "Joshua Thompson", + email: "joshua.thompson@outlook.com", + cardType: "Executive", + bookingId: "A8529478", + date: "06/10/25 16:30", + attendantName: "Digital Dreams", + }, + { + id: "A8529477", + fullName: "Sophia Turner", + email: "sophia.turner@outlook.com", + cardType: "Executive", + bookingId: "A8529477", + date: "06/10/25 16:30", + attendantName: "Crystal Dreams", + }, + { + id: "A8529476", + fullName: "Billy Johnson", + email: "billy.johnson@outlook.com", + cardType: "Executive", + bookingId: "A8529476", + date: "06/10/25 16:30", + attendantName: "Welcoming Hands", + }, + { + id: "A8529475", + fullName: "Chris Bernard", + email: "chris.bernard@outlook.com", + cardType: "Executive", + bookingId: "A8529475", + date: "06/10/25 16:30", + attendantName: "Sunrise SMS", + }, + { + id: "A8529474", + fullName: "Zoe Adams", + email: "zoe.adams@outlook.com", + cardType: "Executive", + bookingId: "A8529474", + date: "06/10/25 16:30", + attendantName: "Creative Sandbox", + }, + { + id: "A8529473", + fullName: "Jane Hartley", + email: "jane.hartley@outlook.com", + cardType: "Executive", + bookingId: "A8529473", + date: "06/10/25 16:30", + attendantName: "Bustling Trends", + }, + { + id: "A8529472", + fullName: "Michael Lee", + email: "michael.lee@outlook.com", + cardType: "Executive", + bookingId: "A8529472", + date: "06/10/25 16:30", + attendantName: "Gateway Teamwork", + }, + { + id: "A8529471", + fullName: "Anita Carter", + email: "anita.carter@outlook.com", + cardType: "Executive", + bookingId: "A8529471", + date: "06/10/25 16:30", + attendantName: "Alliance Hype", + }, + { + id: "A8529470", + fullName: "Laura Johnson", + email: "laura.johnson@outlook.com", + cardType: "Executive", + bookingId: "A8529470", + date: "06/10/25 16:30", + attendantName: "RASM Solutions", + }, + { + id: "A8529469", + fullName: "Sunita Wilson", + email: "sunita.wilson@outlook.com", + cardType: "Executive", + bookingId: "A8529469", + date: "06/10/25 16:30", + attendantName: "Creative Dashboard Spas", + }, + ]; + + // Filter bookings based on search query + const filteredBookings = bookings.filter(booking => + booking.fullName.toLowerCase().includes(searchQuery.toLowerCase()) || + booking.email.toLowerCase().includes(searchQuery.toLowerCase()) || + booking.attendantName.toLowerCase().includes(searchQuery.toLowerCase()) + ); + + if (activeView === "booking-calendar") { + return ( +

    +
    + + + +
    +
    + ); + } + + return ( +
    +
    + + {/* Breadcrumb */} +
    +

    Booking Management {">"} Table View

    +
    + + {/* Header */} +
    +
    +

    Booking Management

    +

    View and Manage all bookings

    +
    + + {/* Search Bar with Buttons */} +
    +
    + + setSearchQuery(e.target.value)} + className="pl-10 bg-white border border-gray-200 rounded-lg h-10 w-full" + /> +
    + +
    + + +
    +
    +
    + + {/* Table */} +
    + + + + Full Name + Email + Card Type + Booking ID + Date + Attendant Name + Actions + + + + {filteredBookings.map((booking, index) => ( + + {booking.fullName} + {booking.email} + {booking.cardType} + {booking.bookingId} + {booking.date} + {booking.attendantName} + + + + + + + + + View Details + + + + Delete + + + + + + ))} + +
    +
    + + {/* Pagination */} +
    +

    + Showing 1 to {filteredBookings.length} of {bookings.length} entries +

    +
    + + + +
    +
    +
    +
    +
    + ); +} \ No newline at end of file diff --git a/src/components/CalendarView.tsx b/src/components/CalendarView.tsx new file mode 100644 index 0000000..026142d --- /dev/null +++ b/src/components/CalendarView.tsx @@ -0,0 +1,369 @@ +import { useState } from "react"; +import { motion } from "motion/react"; +import { ChevronLeft, ChevronRight, Plus } from "lucide-react"; +import { Button } from "./ui/button"; +import { Badge } from "./ui/badge"; +import SlotDetailPanel from "./SlotDetailPanel"; + +interface AttractionBlock { + id: string; + name: string; + startDate: Date; + endDate: Date; + color: string; + timeSlot?: string; +} + +interface CalendarViewProps { + onNavigateToRecurringBlock?: () => void; +} + +export default function CalendarView({ onNavigateToRecurringBlock }: CalendarViewProps) { + const [currentDate, setCurrentDate] = useState(new Date(2024, 6)); // July 2024 + const [selectedView, setSelectedView] = useState("Month"); + const [hoveredDate, setHoveredDate] = useState(null); + const [selectedSlot, setSelectedSlot] = useState(null); + const [isPanelOpen, setIsPanelOpen] = useState(false); + + // Sample attraction data + const attractions: AttractionBlock[] = [ + { + id: "1", + name: "Ice Dreamland Adventure", + startDate: new Date(2024, 6, 6), // July 6 + endDate: new Date(2024, 6, 8), // July 8 + color: "bg-blue-500", + timeSlot: "2:00pm - 4:00pm" + }, + { + id: "2", + name: "Bright Adventure Tour", + startDate: new Date(2024, 6, 10), // July 10 + endDate: new Date(2024, 6, 11), // July 11 + color: "bg-teal-500", + timeSlot: "10:00am - 12:00pm" + }, + { + id: "3", + name: "Selle Zelle Experience", + startDate: new Date(2024, 6, 11), // July 11 + endDate: new Date(2024, 6, 11), // July 11 + color: "bg-purple-500", + timeSlot: "3:00pm - 5:00pm" + }, + { + id: "4", + name: "Ocean Wonders Quest", + startDate: new Date(2024, 6, 18), // July 18 + endDate: new Date(2024, 6, 20), // July 20 + color: "bg-emerald-500", + timeSlot: "1:00pm - 3:00pm" + } + ]; + + const monthNames = [ + "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" + ]; + + const dayNames = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + + const getDaysInMonth = (date: Date) => { + const year = date.getFullYear(); + const month = date.getMonth(); + const firstDay = new Date(year, month, 1); + const lastDay = new Date(year, month + 1, 0); + const daysInMonth = lastDay.getDate(); + + // Get the day of the week for the first day (0 = Sunday, 1 = Monday, etc.) + // Convert to Monday = 0, Tuesday = 1, etc. + let startingDayOfWeek = (firstDay.getDay() + 6) % 7; + + const days = []; + + // Add empty cells for days before the first day of the month + for (let i = 0; i < startingDayOfWeek; i++) { + days.push(null); + } + + // Add all days of the month + for (let day = 1; day <= daysInMonth; day++) { + days.push(day); + } + + return days; + }; + + const navigateMonth = (direction: "prev" | "next") => { + setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + (direction === "next" ? 1 : -1))); + }; + + const isToday = (day: number | null) => { + if (!day) return false; + const today = new Date(); + return ( + day === today.getDate() && + currentDate.getMonth() === today.getMonth() && + currentDate.getFullYear() === today.getFullYear() + ); + }; + + const isPastDate = (day: number | null) => { + if (!day) return false; + const today = new Date(); + const cellDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), day); + return cellDate < today && !isToday(day); + }; + + const getAttractionsForDate = (day: number | null) => { + if (!day) return []; + + const cellDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), day); + + return attractions.filter(attraction => { + const startDate = new Date(attraction.startDate); + const endDate = new Date(attraction.endDate); + + startDate.setHours(0, 0, 0, 0); + endDate.setHours(23, 59, 59, 999); + cellDate.setHours(12, 0, 0, 0); + + return cellDate >= startDate && cellDate <= endDate; + }); + }; + + const getBlockPosition = (attraction: AttractionBlock, day: number | null) => { + if (!day) return { isStart: false, isEnd: false, isContinuation: false }; + + const cellDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), day); + const startDate = new Date(attraction.startDate); + const endDate = new Date(attraction.endDate); + + cellDate.setHours(0, 0, 0, 0); + startDate.setHours(0, 0, 0, 0); + endDate.setHours(0, 0, 0, 0); + + const isStart = cellDate.getTime() === startDate.getTime(); + const isEnd = cellDate.getTime() === endDate.getTime(); + const isContinuation = cellDate > startDate && cellDate < endDate; + + return { isStart, isEnd, isContinuation }; + }; + + const days = getDaysInMonth(currentDate); + + return ( +
    + {/* Breadcrumb */} +
    +

    Booking Management {">"} Calendar View

    +
    + + {/* Header */} +
    +

    Calendar view

    +
    + + {/* Action Bar */} +
    + {/* Month Navigation */} +
    + + +

    + {monthNames[currentDate.getMonth()]} {currentDate.getFullYear()} +

    + + +
    + + {/* View Tabs */} +
    + {["Day", "Week", "Month"].map((view) => ( + + ))} +
    + + {/* Add Recurring Block Button */} + +
    + + {/* Calendar Grid */} +
    + {/* Week Headers */} +
    + {dayNames.map((day) => ( +
    + {day} +
    + ))} +
    + + {/* Calendar Days */} +
    + {days.map((day, index) => { + const dayAttractions = getAttractionsForDate(day); + const cellDate = day ? new Date(currentDate.getFullYear(), currentDate.getMonth(), day) : null; + + return ( + day && setHoveredDate(day)} + onMouseLeave={() => setHoveredDate(null)} + whileHover={day ? { scale: 1.01 } : undefined} + transition={{ duration: 0.1 }} + onClick={() => { + if (day && dayAttractions.length === 0) { + const slotData = { + attractionName: "New Attraction", + date: new Date(currentDate.getFullYear(), currentDate.getMonth(), day).toISOString().split('T')[0], + timeSlots: [], + capacity: 0 + }; + setSelectedSlot(slotData); + setIsPanelOpen(true); + } + }} + > + {/* Date Number */} + {day && ( +
    + {day} + {isToday(day) && ( +
    + {day} +
    + )} +
    + )} + + {/* Attraction Blocks */} +
    + {dayAttractions.map((attraction, attractionIndex) => { + const position = getBlockPosition(attraction, day); + + return ( + { + const slotData = { + attractionName: attraction.name, + date: new Date(currentDate.getFullYear(), currentDate.getMonth(), day!).toISOString().split('T')[0], + timeSlots: ["10:30AM - 1:30PM", "3:30PM - 5:30PM"], + capacity: 25 + }; + setSelectedSlot(slotData); + setIsPanelOpen(true); + }} + > +
    + {position.isStart && attraction.name} +
    + {position.isStart && attraction.timeSlot && ( +
    + {attraction.timeSlot} +
    + )} +
    + ); + })} +
    + + {/* Empty State - Add Button */} + {day && dayAttractions.length === 0 && hoveredDate === day && ( + + + + )} + + {/* Today Indicator */} + {isToday(day) && ( +
    + )} +
    + ); + })} +
    +
    + + {/* Slot Detail Panel */} + setIsPanelOpen(false)} + slotData={selectedSlot} + /> +
    + ); +} \ No newline at end of file diff --git a/src/components/CustomerDetailView.tsx b/src/components/CustomerDetailView.tsx new file mode 100644 index 0000000..9b8cd4c --- /dev/null +++ b/src/components/CustomerDetailView.tsx @@ -0,0 +1,180 @@ +import { ArrowLeft, Eye } from "lucide-react"; +import { motion } from "motion/react"; +import { Button } from "./ui/button"; +import { Badge } from "./ui/badge"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "./ui/table"; + +interface CustomerDetailViewProps { + customerData: { + bookingId: string; + passId: string; + customerName: string; + cardType: string; + result: string; + staff: string; + }; + onBack: () => void; +} + +export default function CustomerDetailView({ customerData, onBack }: CustomerDetailViewProps) { + // Mock scan history data + const scanHistoryData = [ + { + staff: "Jason R.", + scanOutcome: "Success", + timestamp: "2024/9/15, 14:30", + deviceLocation: "1241414141", + reasonForFailure: "-" + }, + { + staff: "Kendall T.", + scanOutcome: "Failed", + timestamp: "2024/9/15, 14:30", + deviceLocation: "2141414174", + reasonForFailure: "Invalid Pass" + }, + { + staff: "Morgan A.", + scanOutcome: "Success", + timestamp: "2024/9/15, 14:30", + deviceLocation: "2147417417", + reasonForFailure: "-" + }, + { + staff: "Taylor S.", + scanOutcome: "Failed", + timestamp: "2024/9/15, 14:30", + deviceLocation: "2141476324", + reasonForFailure: "Pass Expired" + } + ]; + + const getResultBadge = (result: string) => { + return result === "Success" + ? Success + : Failed; + }; + + return ( + +
    + {/* Header with Back Button */} +
    + +

    Detail View

    +
    + +
    + {/* Attraction Details */} +
    +

    Attraction Details

    +
    +
    +

    City

    +

    Dubai

    +
    +
    +

    Attraction Name

    +

    The Enchanted Garden

    +
    +
    +
    + + {/* Pass Summary */} +
    +

    Pass Summary

    +
    +
    +

    Card Type

    +

    {customerData.cardType}

    +
    +
    +

    Validity

    +

    Valid

    +
    +
    +
    + + {/* Customer Details */} +
    +

    Customer Details

    +
    +
    +
    +

    Customer Name

    +

    {customerData.customerName}

    +
    +
    +

    Phone

    +

    (+971) 050 421 4456

    +
    +
    +
    +

    Email

    +

    miranda21@gmail.com

    +
    +
    +
    + + {/* Scan History */} +
    +
    +
    +

    Scan History

    + +
    +
    + +
    + + + + Staff + Scan Outcome + Timestamp + Device ID or location + Reason for Failure + + + + {scanHistoryData.map((item, index) => ( + + {item.staff} + {getResultBadge(item.scanOutcome)} + {item.timestamp} + {item.deviceLocation} + {item.reasonForFailure} + + ))} + +
    +
    +
    +
    +
    +
    + ); +} \ No newline at end of file diff --git a/src/components/Dashboard.tsx b/src/components/Dashboard.tsx new file mode 100644 index 0000000..d8e194c --- /dev/null +++ b/src/components/Dashboard.tsx @@ -0,0 +1,631 @@ +import { Search, UserPlus, Grid3X3, Users, Clock, TrendingUp, Calendar, ChevronDown, CreditCard } from "lucide-react"; +import { motion, AnimatePresence } from "motion/react"; +import { useState } from "react"; +import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar"; +import { Input } from "./ui/input"; +import RedemptionModal from "./RedemptionModal"; + +export default function Dashboard() { + const [isRedemptionModalOpen, setIsRedemptionModalOpen] = useState(false); + return ( + +
    + {/* Page Title Section */} + +

    Dashboard

    +

    Welcome back, Kassandra!

    +
    + + {/* Quick Links Section */} + +

    Quick Links

    +
    + +
    + + + + + + +

    View Redemption Logs

    +

    Check recent activity

    +
    +
    +
    + + +
    + + + + + + +

    Add Staff

    +

    Manage team members

    +
    +
    +
    + + setIsRedemptionModalOpen(true)} + className="bg-white rounded-lg p-6 shadow-sm border border-gray-200 hover:shadow-lg transition-all cursor-pointer group" + > +
    + + + + + + +

    Redemption

    +

    Process new redemptions

    +
    +
    +
    +
    +
    + + {/* Summary Metrics Section */} + + +

    Summary

    + + 29 • 10 • 2024 + +
    + +
    + + Total Redemptions + +
    + +
    +

    Daily

    + + + +
    + + 150 + redemptions + + + +2.3% + since yesterday + +
    + + +
    +

    Weekly

    + + + +
    + + 150 + redemptions + + + +8.5% + since yesterday + +
    + + +
    +

    Monthly

    + + + +
    + + 150 + redemptions + + + +3.3% + since yesterday + +
    +
    +
    +
    + + {/* Staff & Time Analytics */} + + +
    +

    Total Staff

    + + + +
    + + 150 + employees + + + +2.3% + since last month + +
    + + +
    +

    Peak Time Slots

    + + + +
    + +

    Most redemptions occur between

    + + + 11AM + + and + + 1PM + + +
    +
    +
    + + {/* Graphs Section */} + + + Graphs + +
    + {/* Daily Redemptions Chart */} + + +

    Daily Redemptions

    + + +15% + Last 7 Days + +
    + +
    + + {/* Grid lines */} + + + + + + + + {/* Line chart */} + + + {/* Data points */} + {[{x: 20, y: 80}, {x: 50, y: 60}, {x: 80, y: 70}, {x: 110, y: 50}, {x: 140, y: 50}, {x: 170, y: 60}, {x: 200, y: 60}, {x: 230, y: 40}, {x: 260, y: 40}].map((point, i) => ( + + ))} + + + {/* Days labels */} +
    + Mon + Tue + Wed + Thu + Fri + Sat + Sun +
    +
    +
    + + {/* Time-slot Usage Chart */} + + +

    Time-slot Usage

    + + +8% + Last 30 Days + +
    + +
    +
    + {[20, 35, 45, 55, 70, 85, 60, 40].map((height, i) => ( + + ))} +
    + + {/* Time labels */} +
    + 9 AM + 10 AM + 11 AM + 12 PM + 1 PM + 2 PM + 3 PM +
    +
    +
    +
    +
    + + {/* Upcoming Bookings */} + + + Upcoming Bookings + +
    + + + + + + July 19, 2024 + + + 10:30AM - 3:30PM + + + + + + + + + July 20, 2024 + + + 10:30AM - 3:30PM + + + + + + + + + July 21, 2024 + + + 10:30AM - 3:30PM + + +
    +
    +
    + + {/* Redemption Modal */} + setIsRedemptionModalOpen(false)} + /> +
    + ); +} \ No newline at end of file diff --git a/src/components/Header.tsx b/src/components/Header.tsx new file mode 100644 index 0000000..40b7450 --- /dev/null +++ b/src/components/Header.tsx @@ -0,0 +1,204 @@ +import { Bell, User, Settings, LogOut, ChevronDown } from "lucide-react"; +import { useState } from "react"; +import { motion, AnimatePresence } from "motion/react"; +import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar"; +import { Button } from "./ui/button"; +import { Badge } from "./ui/badge"; + +interface HeaderProps { + onNavigateToNotifications?: () => void; +} + +export default function Header({ onNavigateToNotifications }: HeaderProps) { + const [showNotifications, setShowNotifications] = useState(false); + const [showProfileMenu, setShowProfileMenu] = useState(false); + + const notifications = [ + { + id: 1, + title: "New booking received", + message: "Forest Adventure Park - July 19, 10:30 AM", + time: "2 minutes ago", + unread: true + }, + { + id: 2, + title: "Staff schedule updated", + message: "John Smith's shift has been modified", + time: "1 hour ago", + unread: true + }, + { + id: 3, + title: "Redemption processed", + message: "Customer ID: CU12345 - $25.00", + time: "3 hours ago", + unread: false + } + ]; + + const unreadCount = notifications.filter(n => n.unread).length; + + return ( +
    +
    + {/* Notifications */} +
    + + + {/* Notifications Dropdown */} + + {showNotifications && ( + +
    +
    +

    Notifications

    + {unreadCount > 0 && ( + + Mark all as read + + )} +
    +
    +
    + {notifications.map((notification) => ( +
    +
    +
    +
    +

    + {notification.title} +

    +

    + {notification.message} +

    + + {notification.time} + +
    +
    +
    + ))} +
    +
    + +
    +
    + )} +
    + + {/* Notifications Backdrop */} + {showNotifications && ( +
    setShowNotifications(false)} + /> + )} +
    + + {/* Profile Menu */} +
    + + + {/* Profile Dropdown */} + + {showProfileMenu && ( + +
    + + +
    + +
    +
    + )} +
    + + {/* Profile Backdrop */} + {showProfileMenu && ( +
    setShowProfileMenu(false)} + /> + )} +
    +
    +
    + ); +} \ No newline at end of file diff --git a/src/components/NotificationsPage.tsx b/src/components/NotificationsPage.tsx new file mode 100644 index 0000000..68fbe48 --- /dev/null +++ b/src/components/NotificationsPage.tsx @@ -0,0 +1,330 @@ +import { Search, X } from "lucide-react"; +import { useState, forwardRef } from "react"; +import { motion, AnimatePresence } from "motion/react"; +import { Input } from "./ui/input"; +import { Button } from "./ui/button"; +import Notifications from "../imports/Notifications"; +import svgPaths from "../imports/svg-xewg6e9vz"; + +// Enhanced Notification Component with interactive features +const NotificationCard = forwardRef void; + index?: number; +}>(({ + title, + message, + date, + icon, + isRead = false, + onClose, + index = 0 +}, ref) => { + return ( + + {/* Notification Details */} +
    + + + {icon} + + + + +

    {title}

    +
    + +

    {message}

    +
    +
    +
    + + {/* Close Button */} + + + + + + + {/* Date */} + +

    {date}

    +
    +
    + ); +}); + +NotificationCard.displayName = "NotificationCard"; + +export default function NotificationsPage() { + const [searchQuery, setSearchQuery] = useState(""); + const [notifications, setNotifications] = useState([ + { + id: 1, + title: "Account Update Notification", + message: "Your account has been successfully updated. Please check your email for confirmation.", + date: "10/01/23", + unread: true, + icon: ( + + + + ) + }, + { + id: 2, + title: "New Message Alert", + message: "We have received your request and are processing it. Expect an update shortly.", + date: "10/01/23", + unread: true, + icon: ( + + + + ) + }, + { + id: 3, + title: "System Maintenance Notice", + message: "A new message has arrived in your inbox. Don't forget to check it out!", + date: "10/01/23", + unread: false, + icon: ( + + + + ) + }, + { + id: 4, + title: "Event Registration Confirmation", + message: "Scheduled maintenance will occur this weekend. We appreciate your understanding.", + date: "10/01/23", + unread: false, + icon: ( + + + + + + + + + + + + ) + } + ]); + + const handleCloseNotification = (id: number) => { + setNotifications(prev => prev.filter(notification => notification.id !== id)); + }; + + const handleMarkAllAsRead = () => { + setNotifications(prev => + prev.map(notification => ({ ...notification, unread: false })) + ); + }; + + const filteredNotifications = notifications.filter(notification => + notification.title.toLowerCase().includes(searchQuery.toLowerCase()) || + notification.message.toLowerCase().includes(searchQuery.toLowerCase()) + ); + + return ( + +
    + {/* Header */} + +

    Notifications

    +

    Stay informed with the latest notifications

    +
    + + {/* Search Bar and Mark as Read */} + +
    +
    + +
    + setSearchQuery(e.target.value)} + className="pl-10 bg-white border border-gray-200 rounded-lg h-12 font-normal w-full focus:ring-2 focus:ring-blue-200 transition-all duration-200" + /> +
    + + {notifications.some(n => n.unread) && ( + + + + )} + +
    + + {/* Notifications List */} + + + {filteredNotifications.map((notification, index) => ( + handleCloseNotification(notification.id)} + index={index} + /> + ))} + + + + {/* Empty State */} + + {filteredNotifications.length === 0 && ( + + + + + + + + {searchQuery ? "No matching notifications" : "No notifications yet"} + + + {searchQuery + ? "Try adjusting your search terms to find what you're looking for." + : "You're all caught up! Check back later for new updates." + } + + + )} + +
    +
    + ); +} \ No newline at end of file diff --git a/src/components/RecurringBlockPage.tsx b/src/components/RecurringBlockPage.tsx new file mode 100644 index 0000000..6029fcf --- /dev/null +++ b/src/components/RecurringBlockPage.tsx @@ -0,0 +1,439 @@ +import { useState } from "react"; +import { motion, AnimatePresence } from "motion/react"; +import { ChevronLeft, ChevronDown, ChevronUp, Check } from "lucide-react"; +import { Button } from "./ui/button"; +import { Card, CardContent } from "./ui/card"; +import { Switch } from "./ui/switch"; +import { Checkbox } from "./ui/checkbox"; +import exampleImage from 'figma:asset/fc17f89f308e91a12011ae1dc4ea7b32cda951d8.png'; + +interface RecurringBlockPageProps { + onNavigateBack?: () => void; +} + +export default function RecurringBlockPage({ onNavigateBack }: RecurringBlockPageProps) { + const [showDaySelector, setShowDaySelector] = useState(false); + const [selectedDays, setSelectedDays] = useState(["Monday", "Friday"]); + const [expandedDays, setExpandedDays] = useState(["Monday"]); + const [showAttractionSelector, setShowAttractionSelector] = useState(false); + const [selectedAttractions, setSelectedAttractions] = useState(["The Enchanted Forest Adventure Park", "Ocean World Marine Experience"]); + + const daysOfWeek = [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday" + ]; + + const availableAttractions = [ + "The Enchanted Forest Adventure Park", + "Ocean World Marine Experience", + "Sky High Observation Deck", + "Heritage Museum & Cultural Center", + "Adventure Sports Complex", + "Botanical Gardens & Nature Walk", + "City Zoo & Wildlife Safari", + "Art Gallery & Creative Studios" + ]; + + const timeSlots = [ + { id: "10-1", time: "10:00AM - 1:00PM", capacity: 35 }, + { id: "1-3", time: "1:00PM - 3:00PM", capacity: 25 }, + { id: "3-5", time: "3:00PM - 5:00PM", capacity: null }, + { id: "5-7", time: "5:00PM - 7:00PM", capacity: null }, + { id: "7-9", time: "7:00PM - 9:00PM", capacity: null } + ]; + + const toggleDay = (day: string) => { + setSelectedDays(prev => + prev.includes(day) + ? prev.filter(d => d !== day) + : [...prev, day] + ); + }; + + const toggleDayExpansion = (day: string) => { + setExpandedDays(prev => + prev.includes(day) + ? prev.filter(d => d !== day) + : [...prev, day] + ); + }; + + const toggleAttraction = (attraction: string) => { + setSelectedAttractions(prev => + prev.includes(attraction) + ? prev.filter(a => a !== attraction) + : [...prev, attraction] + ); + }; + + const getSelectedDaysText = () => { + if (selectedDays.length === 0) return "Select Days"; + if (selectedDays.length === 1) return selectedDays[0]; + if (selectedDays.length === 2) return `Every ${selectedDays.join(" & ")}`; + return `Every ${selectedDays.slice(0, -1).join(", ")} & ${selectedDays[selectedDays.length - 1]}`; + }; + + const getSelectedAttractionsText = () => { + if (selectedAttractions.length === 0) return "Select Attractions"; + if (selectedAttractions.length === 1) return selectedAttractions[0]; + return `${selectedAttractions.length} attractions selected`; + }; + + return ( +
    + {/* Main Content */} +
    + {/* Breadcrumb */} +
    + +

    Booking Management {">"} Calendar View {">"} Add Recurring Block

    +
    + + {/* Header */} +
    +

    Recurring Block

    +

    Automatically block bookings on recurring days and hours.

    +
    + + {/* Day Selection Display */} +
    +
    + + + {/* Day Selector Dropdown */} + + {showDaySelector && ( + +
    + {daysOfWeek.map((day) => ( + + ))} +
    +
    + )} +
    + + {/* Backdrop */} + {showDaySelector && ( +
    setShowDaySelector(false)} + /> + )} +
    +
    + + {/* Attractions Selection */} + {selectedDays.length > 0 && ( +
    +
    +

    Select Attractions

    +

    Choose which attractions to apply the recurring block to

    +
    + +
    + + + {/* Attractions Selector Dropdown */} + + {showAttractionSelector && ( + +
    +
    + Select Attractions + {selectedAttractions.length} selected +
    +
    + {availableAttractions.map((attraction) => ( + + ))} +
    +
    +
    + )} +
    + + {/* Backdrop */} + {showAttractionSelector && ( +
    setShowAttractionSelector(false)} + /> + )} +
    + + {/* Selected Attractions Display */} + {selectedAttractions.length > 0 && ( +
    +
    + {selectedAttractions.map((attraction) => ( +
    + {attraction} + +
    + ))} +
    +
    + )} +
    + )} + + {/* Selected Days Containers */} +
    + + {selectedDays.map((day) => ( + + + + + + + {expandedDays.includes(day) && ( + +
    +
    + {/* Time Slots Available */} +
    +
    +

    Available Time Slots

    + Select slots to configure +
    +
    + {timeSlots.map((slot, index) => ( + + ))} +
    +
    + + {/* Selected Slots Configuration */} +
    +

    Selected Slots Configuration

    +
    +
    +
    +
    +
    + 10:00AM - 1:30PM +
    + +
    +
    + +
    + +
    + 35 +
    + +
    +
    +
    + +
    +
    +
    +
    + 1:00PM - 3:30PM +
    + +
    +
    + +
    + +
    + 25 +
    + +
    +
    +
    +
    +
    + + {/* Repeat Toggle */} +
    +
    +
    + Repeat Every {day} +

    This configuration will repeat weekly

    +
    + +
    +
    +
    +
    +
    + )} +
    +
    +
    +
    + ))} +
    +
    + + {/* Preview Section */} +
    +

    Preview

    +
    Every Monday
    + + {/* Preview Card */} + + +
    +

    The Enchanted Forest Adventure Park

    +
    2 time slots
    +
    + +
    +
    + +
    + 10:00AM - 1:30PM +
    +
    + 👥 + 35 +
    +
    + +
    + +
    + 1:00PM - 3:30PM +
    +
    + 👥 + 25 +
    +
    +
    +
    +
    +
    + + {/* Create Button */} +
    + +
    +
    +
    + ); +} \ No newline at end of file diff --git a/src/components/RedemptionModal.tsx b/src/components/RedemptionModal.tsx new file mode 100644 index 0000000..270291a --- /dev/null +++ b/src/components/RedemptionModal.tsx @@ -0,0 +1,240 @@ +import { useState } from "react"; +import { motion, AnimatePresence } from "motion/react"; +import { X } from "lucide-react"; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "./ui/dialog"; +import { Input } from "./ui/input"; +import { Button } from "./ui/button"; +import { Label } from "./ui/label"; + +interface RedemptionModalProps { + isOpen: boolean; + onClose: () => void; +} + +interface TicketDetails { + customer: { + name: string; + email: string; + phone: string; + }; + cityCard: { + cardType: string; + validity: string; + }; + partner: { + attraction: string; + venue: string; + bookingDate: string; + ticketId: string; + }; +} + +export default function RedemptionModal({ isOpen, onClose }: RedemptionModalProps) { + const [ticketNumber, setTicketNumber] = useState(""); + const [showDetails, setShowDetails] = useState(false); + const [isLoading, setIsLoading] = useState(false); + + // Mock ticket details - in real app this would come from API + const mockTicketDetails: TicketDetails = { + customer: { + name: "Jenny Johnson", + email: "jenny@hawaii.com", + phone: "(+61) 001 864 644" + }, + cityCard: { + cardType: "Diamond Plan", + validity: "valid until December 31, 2026" + }, + partner: { + attraction: "The Enchanted Garden", + venue: "Downtown", + bookingDate: "November 15, 2024", + ticketId: "GD004E - 1UJHM" + } + }; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + if (!ticketNumber.trim()) return; + + setIsLoading(true); + // Simulate API call + await new Promise(resolve => setTimeout(resolve, 1000)); + setIsLoading(false); + setShowDetails(true); + }; + + const handleApprove = () => { + // Handle approval logic + console.log("Redemption approved for ticket:", ticketNumber); + onClose(); + resetModal(); + }; + + const handleDisapprove = () => { + // Handle disapproval logic + console.log("Redemption disapproved for ticket:", ticketNumber); + onClose(); + resetModal(); + }; + + const resetModal = () => { + setTicketNumber(""); + setShowDetails(false); + setIsLoading(false); + }; + + const handleClose = () => { + onClose(); + resetModal(); + }; + + return ( + + + + {!showDetails ? ( + // Ticket Number Input View + + + + Create Redemption + + + Enter the ticket number to process a new redemption + + + +
    +
    + + setTicketNumber(e.target.value)} + className="h-12 bg-gray-50 border border-gray-200 rounded-lg font-normal" + disabled={isLoading} + /> +
    + + +
    +
    + ) : ( + // Ticket Details View + + + + Create Redemption + + + Review the ticket details and approve or disapprove the redemption + + + +
    + {/* Customer Details */} +
    +

    Customer Details

    +
    +
    + Name + {mockTicketDetails.customer.name} +
    +
    + Email + {mockTicketDetails.customer.email} +
    +
    + Phone + {mockTicketDetails.customer.phone} +
    +
    +
    + + {/* City Card Details */} +
    +

    City Card Details

    +
    +
    + Card Type + {mockTicketDetails.cityCard.cardType} +
    +
    + Validity + {mockTicketDetails.cityCard.validity} +
    +
    +
    + + {/* Partner Details */} +
    +

    Partner Details

    +
    +
    + Attraction booked + {mockTicketDetails.partner.attraction} +
    +
    + Venue + {mockTicketDetails.partner.venue} +
    +
    + Booking date + {mockTicketDetails.partner.bookingDate} +
    +
    + TicketID + {mockTicketDetails.partner.ticketId} +
    +
    +
    + + {/* Action Buttons */} +
    + + +
    +
    +
    + )} +
    +
    +
    + ); +} \ No newline at end of file diff --git a/src/components/RedemptionsPage.tsx b/src/components/RedemptionsPage.tsx new file mode 100644 index 0000000..fcbc01f --- /dev/null +++ b/src/components/RedemptionsPage.tsx @@ -0,0 +1,427 @@ +import { Search, Download, Filter, Eye, ChevronLeft, ChevronRight } from "lucide-react"; +import { motion } from "motion/react"; +import { Input } from "./ui/input"; +import { Button } from "./ui/button"; +import { Badge } from "./ui/badge"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "./ui/table"; +import { useState } from "react"; +import CustomerDetailView from "./CustomerDetailView"; + +export default function RedemptionsPage() { + const [currentPage, setCurrentPage] = useState(1); + const [searchQuery, setSearchQuery] = useState(""); + const [selectedCustomer, setSelectedCustomer] = useState(null); + const [showDetailView, setShowDetailView] = useState(false); + + // Mock data for redemption logs + const redemptionData = [ + { + bookingId: "WA234456", + passId: "PRB7654", + customerName: "Lisa Hast", + cardType: "Unlimited", + result: "Success", + staff: "Jordan T.", + action: "View" + }, + { + bookingId: "WA234567", + passId: "PRB7655", + customerName: "Maya Thompson", + cardType: "Selective", + result: "Failed", + staff: "Taylor A.", + action: "View" + }, + { + bookingId: "WA234568", + passId: "PRB7656", + customerName: "Sophie Turner", + cardType: "Unlimited", + result: "Success", + staff: "Morgan S.", + action: "View" + }, + { + bookingId: "WA234569", + passId: "PRB7657", + customerName: "Ella Johnson", + cardType: "Selective", + result: "Failed", + staff: "Casey J.", + action: "View" + }, + { + bookingId: "WA234570", + passId: "PRB7658", + customerName: "Chloe Bennett", + cardType: "Unlimited", + result: "Success", + staff: "Riley K.", + action: "View" + }, + { + bookingId: "WA234571", + passId: "PRB7659", + customerName: "Zoe Adams", + cardType: "Selective", + result: "Success", + staff: "Jamie L.", + action: "View" + }, + { + bookingId: "WA234572", + passId: "PRB7660", + customerName: "Ava Martinez", + cardType: "Unlimited", + result: "Failed", + staff: "Alex H.", + action: "View" + }, + { + bookingId: "WA234573", + passId: "PRB7661", + customerName: "Isabella Lee", + cardType: "Selective", + result: "Success", + staff: "Dylan O.", + action: "View" + }, + { + bookingId: "WA234574", + passId: "PRB7662", + customerName: "Emma Watson", + cardType: "Unlimited", + result: "Success", + staff: "Sam R.", + action: "View" + }, + { + bookingId: "WA234575", + passId: "PRB7663", + customerName: "Grace Miller", + cardType: "Selective", + result: "Failed", + staff: "Charlie M.", + action: "View" + }, + { + bookingId: "WA234576", + passId: "PRB7664", + customerName: "Olivia Brown", + cardType: "Unlimited", + result: "Success", + staff: "Parker N.", + action: "View" + }, + { + bookingId: "WA234577", + passId: "PRB7665", + customerName: "Amelia Davis", + cardType: "Selective", + result: "Success", + staff: "Avery P.", + action: "View" + }, + { + bookingId: "WA234578", + passId: "PRB7666", + customerName: "Harper Wilson", + cardType: "Unlimited", + result: "Failed", + staff: "River Q.", + action: "View" + }, + { + bookingId: "WA234579", + passId: "PRB7667", + customerName: "Evelyn Moore", + cardType: "Selective", + result: "Success", + staff: "Quinn S.", + action: "View" + }, + { + bookingId: "WA234580", + passId: "PRB7668", + customerName: "Abigail Taylor", + cardType: "Unlimited", + result: "Success", + staff: "Sage T.", + action: "View" + }, + { + bookingId: "WA234581", + passId: "PRB7669", + customerName: "Emily Anderson", + cardType: "Selective", + result: "Failed", + staff: "Rowan U.", + action: "View" + }, + { + bookingId: "WA234582", + passId: "PRB7670", + customerName: "Elizabeth Jackson", + cardType: "Unlimited", + result: "Success", + staff: "Kai V.", + action: "View" + }, + { + bookingId: "WA234583", + passId: "PRB7671", + customerName: "Sofia White", + cardType: "Selective", + result: "Success", + staff: "Drew W.", + action: "View" + }, + { + bookingId: "WA234584", + passId: "PRB7672", + customerName: "Avery Harris", + cardType: "Unlimited", + result: "Failed", + staff: "Blake X.", + action: "View" + }, + { + bookingId: "WA234585", + passId: "PRB7673", + customerName: "Ella Martin", + cardType: "Selective", + result: "Success", + staff: "Casey Y.", + action: "View" + }, + { + bookingId: "WA234586", + passId: "PRB7674", + customerName: "Scarlett Thompson", + cardType: "Unlimited", + result: "Success", + staff: "Jordan Z.", + action: "View" + }, + { + bookingId: "WA234587", + passId: "PRB7675", + customerName: "Victoria Garcia", + cardType: "Selective", + result: "Failed", + staff: "Taylor A.", + action: "View" + }, + { + bookingId: "WA234588", + passId: "PRB7676", + customerName: "Madison Martinez", + cardType: "Unlimited", + result: "Success", + staff: "Morgan B.", + action: "View" + }, + { + bookingId: "WA234589", + passId: "PRB7677", + customerName: "Luna Rodriguez", + cardType: "Selective", + result: "Success", + staff: "Riley C.", + action: "View" + }, + { + bookingId: "WA234590", + passId: "PRB7678", + customerName: "Grace Lopez", + cardType: "Unlimited", + result: "Failed", + staff: "Cameron D.", + action: "View" + } + ]; + + const itemsPerPage = 12; + const totalPages = Math.ceil(redemptionData.length / itemsPerPage); + const startIndex = (currentPage - 1) * itemsPerPage; + const endIndex = startIndex + itemsPerPage; + const currentData = redemptionData.slice(startIndex, endIndex); + + const getResultBadge = (result: string) => { + return result === "Success" + ? Success + : Failed; + }; + + const getCardTypeBadge = (cardType: string) => { + return cardType === "Unlimited" + ? Unlimited + : Selective; + }; + + const handleViewCustomer = (customer: any) => { + setSelectedCustomer(customer); + setShowDetailView(true); + }; + + const handleBackToList = () => { + setShowDetailView(false); + setSelectedCustomer(null); + }; + + // If showing detail view, render the CustomerDetailView component + if (showDetailView && selectedCustomer) { + return ( + + ); + } + + return ( + +
    + {/* Header Section */} +
    +

    Redemption Logs

    +

    Track and monitor all card redemption activities and results

    +
    + + {/* Search Bar with Buttons */} +
    +
    +
    + + setSearchQuery(e.target.value)} + className="pl-10 bg-white border border-gray-200 rounded-lg h-10 font-normal" + /> +
    + + +
    +
    + + {/* Table Section */} +
    +
    +
    + + + + Booking ID + Pass ID + Customer Name + Card Type + Result + Staff + Action + + + + {currentData.map((item, index) => ( + + {item.bookingId} + {item.passId} + {item.customerName} + {getCardTypeBadge(item.cardType)} + {getResultBadge(item.result)} + {item.staff} + + + + + ))} + +
    +
    +
    + + {/* Pagination */} +
    +
    + Showing {startIndex + 1} to {Math.min(endIndex, redemptionData.length)} of {redemptionData.length} entries +
    + +
    + + +
    + {Array.from({ length: totalPages }, (_, i) => ( + + ))} +
    + + +
    +
    +
    +
    +
    + ); +} \ No newline at end of file diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx new file mode 100644 index 0000000..ce6122d --- /dev/null +++ b/src/components/Sidebar.tsx @@ -0,0 +1,225 @@ +import { Home, Calendar, Users, CreditCard, HelpCircle, LogOut, ChevronDown, Settings, CalendarDays, Table2 } from "lucide-react"; +import { motion } from "motion/react"; +import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar"; +import { useState } from "react"; + +interface SidebarProps { + activeItem: string; + onItemSelect: (item: string) => void; +} + +export default function Sidebar({ activeItem, onItemSelect }: SidebarProps) { + const [isProfileOpen, setIsProfileOpen] = useState(false); + const [isBookingExpanded, setIsBookingExpanded] = useState(activeItem === 'booking-table' || activeItem === 'booking-calendar'); + + const navigationItems = [ + { id: 'dashboard', label: 'Dashboard', icon: Home }, + { + id: 'booking-management', + label: 'Booking Management', + icon: Calendar, + subItems: [ + { id: 'booking-calendar', label: 'Calendar View', icon: CalendarDays }, + { id: 'booking-table', label: 'Table View', icon: Table2 } + ] + }, + { id: 'staff', label: 'Staff Management', icon: Users }, + { id: 'redemptions', label: 'Redemptions', icon: CreditCard }, + { id: 'support', label: 'Support', icon: HelpCircle }, + ]; + + return ( +
    + {/* Logo Section */} +
    +
    +
    + CC +
    + CityCards +
    +
    + + {/* Navigation Items */} + + + {/* Profile Section */} +
    + setIsProfileOpen(!isProfileOpen)} + className="w-full flex items-center gap-3 p-3 rounded-lg hover:bg-gray-50 transition-colors" + whileTap={{ scale: 0.98 }} + > + + + + KA + + +
    +

    Kassandra

    +

    Admin

    +
    + + + +
    + + {/* Profile Dropdown */} + +
    + + + Account Settings + + + + Sign Out + +
    +
    +
    +
    + ); +} \ No newline at end of file diff --git a/src/components/SlotDetailPanel.tsx b/src/components/SlotDetailPanel.tsx new file mode 100644 index 0000000..ebad253 --- /dev/null +++ b/src/components/SlotDetailPanel.tsx @@ -0,0 +1,419 @@ +import { useState, useEffect } from "react"; +import { motion, AnimatePresence } from "motion/react"; +import { X, Edit, Plus, Trash2 } from "lucide-react"; +import { Button } from "./ui/button"; +import { Input } from "./ui/input"; +import { Label } from "./ui/label"; +import { Textarea } from "./ui/textarea"; + +interface SlotDetailPanelProps { + isOpen: boolean; + onClose: () => void; + slotData: { + attractionName: string; + date: string; + timeSlots: string[]; + capacity: number; + } | null; +} + +export default function SlotDetailPanel({ isOpen, onClose, slotData }: SlotDetailPanelProps) { + const [editingAttraction, setEditingAttraction] = useState(false); + const [editingDate, setEditingDate] = useState(false); + const [editingCapacity, setEditingCapacity] = useState(false); + const [attractionName, setAttractionName] = useState(""); + const [selectedDate, setSelectedDate] = useState(""); + const [capacity, setCapacity] = useState(0); + const [selectedTimeSlots, setSelectedTimeSlots] = useState([]); + const [hasChanges, setHasChanges] = useState(false); + const [isBlockMode, setIsBlockMode] = useState(false); + const [notes, setNotes] = useState(""); + + // Initialize form data when slot data changes + useEffect(() => { + if (slotData) { + setAttractionName(slotData.attractionName); + setSelectedDate(slotData.date); + setCapacity(slotData.capacity); + setSelectedTimeSlots(slotData.timeSlots); + setHasChanges(false); + setIsBlockMode(false); + setNotes(""); + } + }, [slotData]); + + // Track changes + useEffect(() => { + if (slotData) { + const hasFormChanges = + attractionName !== slotData.attractionName || + selectedDate !== slotData.date || + capacity !== slotData.capacity || + JSON.stringify(selectedTimeSlots) !== JSON.stringify(slotData.timeSlots); + setHasChanges(hasFormChanges); + } + }, [attractionName, selectedDate, capacity, selectedTimeSlots, slotData]); + + const handleSaveChanges = () => { + // Here you would save the changes to your backend + console.log("Saving changes:", { + attractionName, + selectedDate, + capacity, + selectedTimeSlots + }); + setHasChanges(false); + onClose(); + }; + + const handleCancel = () => { + if (slotData) { + setAttractionName(slotData.attractionName); + setSelectedDate(slotData.date); + setCapacity(slotData.capacity); + setSelectedTimeSlots(slotData.timeSlots); + } + setHasChanges(false); + setEditingAttraction(false); + setEditingDate(false); + setEditingCapacity(false); + onClose(); + }; + + const handleBlockTimeSlot = () => { + setIsBlockMode(true); + }; + + const handleConfirmBlock = () => { + // Handle actual blocking logic here + console.log("Confirmed blocking time slot"); + setIsBlockMode(false); + onClose(); + }; + + const handleCancelBlock = () => { + setIsBlockMode(false); + }; + + const availableTimeSlots = [ + "10:30AM - 1:30PM", + "1:30PM - 3:30PM", + "3:30PM - 5:30PM", + "5:30PM - 7:30PM" + ]; + + const toggleTimeSlot = (timeSlot: string) => { + setSelectedTimeSlots(prev => + prev.includes(timeSlot) + ? prev.filter(slot => slot !== timeSlot) + : [...prev, timeSlot] + ); + }; + + if (!slotData) return null; + + return ( + + {isOpen && ( + <> + {/* Backdrop */} + + + {/* Panel */} + + {/* Header */} +
    +

    + {isBlockMode ? "Block Time Slot" : "Selected Slot"} +

    +
    + {!isBlockMode && ( + + )} + +
    +
    + + {/* Content */} +
    + {isBlockMode ? ( + // Block Mode Content + <> + {/* Name of attraction */} +
    + +
    + {attractionName} +
    + + +
    +
    +
    + + {/* Timing Slot */} +
    + +
    + 10:00AM - 9:00PM +
    +
    + + {/* Total Capacity */} +
    + +
    + {capacity} +
    +
    + + {/* Notes */} +
    + +