From bf42daef0b7b286f89c873db19d041dbb1a359ba Mon Sep 17 00:00:00 2001 From: priyanshuvish Date: Wed, 3 Sep 2025 17:02:24 +0530 Subject: [PATCH] first commit --- .gitignore | 32 + index.html | 15 + package-lock.json | 4233 +++++++++++++++++ package.json | 64 + postcss.config.mjs | 5 + src/App.tsx | 183 + src/Attributions.md | 3 + src/assets/klc-logo-blue.png | Bin 0 -> 13877 bytes src/assets/klc-logo-white.png | Bin 0 -> 20373 bytes src/components/auth/ForgotPassword.tsx | 409 ++ src/components/auth/Login.tsx | 172 + src/components/auth/TwoFactorAuth.tsx | 250 + src/components/figma/ImageWithFallback.tsx | 27 + src/components/layout/AuthenticatedLayout.tsx | 372 ++ src/components/pages/Analytics.tsx | 344 ++ src/components/pages/ClassScheduler.tsx | 206 + src/components/pages/ContentManager.tsx | 310 ++ src/components/pages/CourseBuilder.tsx | 323 ++ src/components/pages/Courses.tsx | 201 + src/components/pages/Dashboard.tsx | 534 +++ src/components/pages/Facilities.tsx | 177 + src/components/pages/IndividualLearners.tsx | 275 ++ src/components/pages/LandingPages.tsx | 91 + src/components/pages/Leads.tsx | 215 + src/components/pages/NewOrganization.tsx | 445 ++ src/components/pages/OpenProgramme.tsx | 173 + src/components/pages/Organizations.tsx | 206 + src/components/pages/Profile.tsx | 377 ++ src/components/pages/ProfilerBuilder.tsx | 230 + src/components/pages/Profilers.tsx | 118 + src/components/pages/ProgrammeComposer.tsx | 216 + src/components/pages/Programmes.tsx | 121 + src/components/pages/ResetPassword.tsx | 403 ++ src/components/pages/Roles.tsx | 278 ++ src/components/pages/Webinars.tsx | 135 + 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 | 26 + src/guidelines/Guidelines.md | 61 + src/main.tsx | 11 + src/styles/globals.css | 200 + tsconfig.json | 21 + tsconfig.node.json | 8 + vite.config.ts | 62 + 90 files changed, 16642 insertions(+) create mode 100644 .gitignore 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/klc-logo-blue.png create mode 100644 src/assets/klc-logo-white.png create mode 100644 src/components/auth/ForgotPassword.tsx create mode 100644 src/components/auth/Login.tsx create mode 100644 src/components/auth/TwoFactorAuth.tsx create mode 100644 src/components/figma/ImageWithFallback.tsx create mode 100644 src/components/layout/AuthenticatedLayout.tsx create mode 100644 src/components/pages/Analytics.tsx create mode 100644 src/components/pages/ClassScheduler.tsx create mode 100644 src/components/pages/ContentManager.tsx create mode 100644 src/components/pages/CourseBuilder.tsx create mode 100644 src/components/pages/Courses.tsx create mode 100644 src/components/pages/Dashboard.tsx create mode 100644 src/components/pages/Facilities.tsx create mode 100644 src/components/pages/IndividualLearners.tsx create mode 100644 src/components/pages/LandingPages.tsx create mode 100644 src/components/pages/Leads.tsx create mode 100644 src/components/pages/NewOrganization.tsx create mode 100644 src/components/pages/OpenProgramme.tsx create mode 100644 src/components/pages/Organizations.tsx create mode 100644 src/components/pages/Profile.tsx create mode 100644 src/components/pages/ProfilerBuilder.tsx create mode 100644 src/components/pages/Profilers.tsx create mode 100644 src/components/pages/ProgrammeComposer.tsx create mode 100644 src/components/pages/Programmes.tsx create mode 100644 src/components/pages/ResetPassword.tsx create mode 100644 src/components/pages/Roles.tsx create mode 100644 src/components/pages/Webinars.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/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/index.html b/index.html new file mode 100644 index 0000000..68e8767 --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + Admin Control Panel + + + +
+ + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b3ac5c5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4233 @@ +{ + "name": "Admin Control Panel", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "Admin Control Panel", + "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.12", + "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", + "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", + "react-router-dom": "^7.8.2", + "recharts": "^2.15.2", + "sonner": "^2.0.3", + "tailwind-merge": "*", + "tailwindcss": "^4.1.12", + "vaul": "^1.1.2" + }, + "devDependencies": { + "@types/node": "^20.10.0", + "@types/react": "^19.1.12", + "@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.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@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.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "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.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.0.tgz", + "integrity": "sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.0.tgz", + "integrity": "sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.0.tgz", + "integrity": "sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.0.tgz", + "integrity": "sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.0.tgz", + "integrity": "sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.0.tgz", + "integrity": "sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.0.tgz", + "integrity": "sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.0.tgz", + "integrity": "sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.0.tgz", + "integrity": "sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.0.tgz", + "integrity": "sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.0.tgz", + "integrity": "sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.0.tgz", + "integrity": "sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.0.tgz", + "integrity": "sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.0.tgz", + "integrity": "sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.0.tgz", + "integrity": "sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.0.tgz", + "integrity": "sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.0.tgz", + "integrity": "sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.0.tgz", + "integrity": "sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.0.tgz", + "integrity": "sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.0.tgz", + "integrity": "sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.0.tgz", + "integrity": "sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==", + "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.24", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.24.tgz", + "integrity": "sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.12.tgz", + "integrity": "sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.12" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.12.tgz", + "integrity": "sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.12", + "@tailwindcss/oxide-darwin-arm64": "4.1.12", + "@tailwindcss/oxide-darwin-x64": "4.1.12", + "@tailwindcss/oxide-freebsd-x64": "4.1.12", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.12", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.12", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.12", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.12", + "@tailwindcss/oxide-linux-x64-musl": "4.1.12", + "@tailwindcss/oxide-wasm32-wasi": "4.1.12", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.12", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.12" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.12.tgz", + "integrity": "sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.12.tgz", + "integrity": "sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.12.tgz", + "integrity": "sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.12.tgz", + "integrity": "sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.12.tgz", + "integrity": "sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.12.tgz", + "integrity": "sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.12.tgz", + "integrity": "sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.12.tgz", + "integrity": "sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.12.tgz", + "integrity": "sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.12.tgz", + "integrity": "sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.12.tgz", + "integrity": "sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.12.tgz", + "integrity": "sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.12.tgz", + "integrity": "sha512-5PpLYhCAwf9SJEeIsSmCDLgyVfdBhdBpzX1OJ87anT9IVR0Z9pjM0FNixCAUAHGnMBGB8K99SwAheXrT0Kh6QQ==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.12", + "@tailwindcss/oxide": "4.1.12", + "postcss": "^8.4.41", + "tailwindcss": "4.1.12" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.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.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.12.tgz", + "integrity": "sha512-lSOjyS6vdO2G2g2CWrETTV3Jz2zlCXHpu1rcubLKpz9oj+z/1CceHlj+yq53W+9zgb98nSov/wjEKYDNauD+Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", + "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", + "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/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "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.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "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.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "node_modules/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/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.18", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz", + "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==", + "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/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-router": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.2.tgz", + "integrity": "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.8.2.tgz", + "integrity": "sha512-Z4VM5mKDipal2jQ385H6UBhiiEDlnJPx6jyWsTYoZQdl5TrjxEV2a9yl3Fi60NBJxYzOTGTTHXPi0pdizvTwow==", + "license": "MIT", + "dependencies": { + "react-router": "7.8.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.0.tgz", + "integrity": "sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==", + "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.0", + "@rollup/rollup-android-arm64": "4.50.0", + "@rollup/rollup-darwin-arm64": "4.50.0", + "@rollup/rollup-darwin-x64": "4.50.0", + "@rollup/rollup-freebsd-arm64": "4.50.0", + "@rollup/rollup-freebsd-x64": "4.50.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.50.0", + "@rollup/rollup-linux-arm-musleabihf": "4.50.0", + "@rollup/rollup-linux-arm64-gnu": "4.50.0", + "@rollup/rollup-linux-arm64-musl": "4.50.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.50.0", + "@rollup/rollup-linux-ppc64-gnu": "4.50.0", + "@rollup/rollup-linux-riscv64-gnu": "4.50.0", + "@rollup/rollup-linux-riscv64-musl": "4.50.0", + "@rollup/rollup-linux-s390x-gnu": "4.50.0", + "@rollup/rollup-linux-x64-gnu": "4.50.0", + "@rollup/rollup-linux-x64-musl": "4.50.0", + "@rollup/rollup-openharmony-arm64": "4.50.0", + "@rollup/rollup-win32-arm64-msvc": "4.50.0", + "@rollup/rollup-win32-ia32-msvc": "4.50.0", + "@rollup/rollup-win32-x64-msvc": "4.50.0", + "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/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "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.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "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.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/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..cb2633b --- /dev/null +++ b/package.json @@ -0,0 +1,64 @@ +{ + "name": "Admin Control Panel", + "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.12", + "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", + "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", + "react-router-dom": "^7.8.2", + "recharts": "^2.15.2", + "sonner": "^2.0.3", + "tailwind-merge": "*", + "tailwindcss": "^4.1.12", + "vaul": "^1.1.2" + }, + "devDependencies": { + "@types/node": "^20.10.0", + "@types/react": "^19.1.12", + "@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..e8b0307 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,183 @@ +import React, { useEffect, useState } from "react"; +import { Routes, Route, Navigate, useNavigate } from "react-router-dom"; +import { Login } from "./components/auth/Login"; +import { ForgotPassword } from "./components/auth/ForgotPassword"; +import { TwoFactorAuth } from "./components/auth/TwoFactorAuth"; +import { Dashboard } from "./components/pages/Dashboard"; +import { Profile } from "./components/pages/Profile"; +import { ResetPassword } from "./components/pages/ResetPassword"; +import { IndividualLearners } from "./components/pages/IndividualLearners"; +import { Organizations } from "./components/pages/Organizations"; +import { NewOrganization } from "./components/pages/NewOrganization"; +import { ContentManager } from "./components/pages/ContentManager"; +import { Courses } from "./components/pages/Courses"; +import { CourseBuilder } from "./components/pages/CourseBuilder"; +import { Profilers } from "./components/pages/Profilers"; +import { ProfilerBuilder } from "./components/pages/ProfilerBuilder"; +import { LandingPages } from "./components/pages/LandingPages"; +import { Webinars } from "./components/pages/Webinars"; +import { Programmes } from "./components/pages/Programmes"; +import { ProgrammeComposer } from "./components/pages/ProgrammeComposer"; +import { ClassScheduler } from "./components/pages/ClassScheduler"; +import { OpenProgramme } from "./components/pages/OpenProgramme"; +import { Facilities } from "./components/pages/Facilities"; +import { Leads } from "./components/pages/Leads"; +import { Roles } from "./components/pages/Roles"; +import { Analytics } from "./components/pages/Analytics"; +import { Toaster } from "./components/ui/sonner"; +import { Settings } from "lucide-react"; + +export default function App() { + const [isAuthenticated, setIsAuthenticated] = useState(false); + const [user, setUser] = useState({ + name: "Admin User", + email: "admin@klc.edu", + role: "Super Admin", + avatar: "", + lastLogin: "2024-01-15 14:30", + }); + + const navigate = useNavigate(); + + useEffect(() => { + const authToken = localStorage.getItem("klc_auth_token"); + if (authToken) { + setIsAuthenticated(true); + } + }, []); + + const login = () => { + localStorage.setItem("klc_auth_token", "mock_token"); + setIsAuthenticated(true); + navigate("/dashboard"); + }; + + const logout = () => { + localStorage.removeItem("klc_auth_token"); + setIsAuthenticated(false); + navigate("/login"); + }; + + return ( +
+ + {/* Public Routes */} + } /> + } + /> + } + /> + + {/* Protected Routes */} + {isAuthenticated ? ( + <> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + {/* } + /> */} + + ) : ( + // Redirect if not authenticated + } /> + )} + + {/* Default Redirects */} + } /> + } /> + + +
+ ); +} 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/klc-logo-blue.png b/src/assets/klc-logo-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..7879330ffb6d5055c126534369321e5986695562 GIT binary patch literal 13877 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 literal 0 HcmV?d00001 diff --git a/src/assets/klc-logo-white.png b/src/assets/klc-logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..ff70e162c4e5a8c8bff034c407855e260e65edcb GIT binary patch literal 20373 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 literal 0 HcmV?d00001 diff --git a/src/components/auth/ForgotPassword.tsx b/src/components/auth/ForgotPassword.tsx new file mode 100644 index 0000000..ede65cc --- /dev/null +++ b/src/components/auth/ForgotPassword.tsx @@ -0,0 +1,409 @@ +import React, { useState } from 'react'; +import { Button } from '../ui/button'; +import { Input } from '../ui/input'; +import { Label } from '../ui/label'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/card'; +import { Alert, AlertDescription } from '../ui/alert'; +import { Eye, EyeOff, ArrowLeft, CheckCircle } from 'lucide-react'; +import klcLogoLight from '../../assets/klc-logo-white.png'; +import { useNavigate } from 'react-router-dom'; + +interface ForgotPasswordProps { + // onNavigate: (route: string) => void; +} + +type Step = 'request' | 'verify' | 'newPassword' | 'done'; + +export function ForgotPassword({}: ForgotPasswordProps) { + const [currentStep, setCurrentStep] = useState('request'); + const [email, setEmail] = useState(''); + const [verificationCode, setVerificationCode] = useState(['', '', '', '', '', '']); + const [newPassword, setNewPassword] = useState(''); + const [confirmPassword, setConfirmPassword] = useState(''); + const [showNewPassword, setShowNewPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = useState(false); + const [isLoading, setIsLoading] = useState(false); + const [resendCooldown, setResendCooldown] = useState(0); + const [error, setError] = useState(''); + const navigate = useNavigate(); + + React.useEffect(() => { + if (resendCooldown > 0) { + const timer = setTimeout(() => setResendCooldown(resendCooldown - 1), 1000); + return () => clearTimeout(timer); + } + }, [resendCooldown]); + + const handleSendCode = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + setIsLoading(true); + + setTimeout(() => { + setCurrentStep('verify'); + setIsLoading(false); + setResendCooldown(60); + }, 1000); + }; + + const handleVerifyCode = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + setIsLoading(true); + + const code = verificationCode.join(''); + if (code.length !== 6) { + setError('Please enter the complete 6-digit code'); + setIsLoading(false); + return; + } + + setTimeout(() => { + if (code === '123456') { + setCurrentStep('newPassword'); + } else { + setError('Invalid verification code. Please try again.'); + } + setIsLoading(false); + }, 1000); + }; + + const handleSetNewPassword = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + + if (newPassword !== confirmPassword) { + setError('Passwords do not match'); + return; + } + + if (newPassword.length < 8) { + setError('Password must be at least 8 characters long'); + return; + } + + setIsLoading(true); + setTimeout(() => { + setCurrentStep('done'); + setIsLoading(false); + }, 1000); + }; + + const handleCodeInput = (index: number, value: string) => { + if (value.length > 1) { + // Handle paste + const pastedCode = value.slice(0, 6).split(''); + const newCode = [...verificationCode]; + pastedCode.forEach((char, i) => { + if (index + i < 6) newCode[index + i] = char; + }); + setVerificationCode(newCode); + return; + } + + const newCode = [...verificationCode]; + newCode[index] = value; + setVerificationCode(newCode); + + // Auto-advance to next input + if (value && index < 5) { + const nextInput = document.getElementById(`code-${index + 1}`); + nextInput?.focus(); + } + }; + + const handleResendCode = () => { + if (resendCooldown === 0) { + setResendCooldown(60); + // Simulate API call + setTimeout(() => { + // Show success message + }, 1000); + } + }; + + const renderStepContent = () => { + switch (currentStep) { + case 'request': + return ( +
+ {error && ( + + {error} + + )} + +
+ + setEmail(e.target.value)} + placeholder="Enter your email address" + required + className="min-h-[44px]" + /> +
+ + +
+ ); + + case 'verify': + return ( +
+
+ We sent a code to {email}. It expires in 10 minutes. +
+ + {error && ( + + {error} + + )} + +
+ +
+ {verificationCode.map((digit, index) => ( + handleCodeInput(index, e.target.value)} + className="w-12 h-12 text-center font-mono text-lg" + onKeyDown={(e) => { + if (e.key === 'Backspace' && !digit && index > 0) { + document.getElementById(`code-${index - 1}`)?.focus(); + } + }} + /> + ))} +
+
+ + + +
+ + +
+
+ ); + + case 'newPassword': + return ( +
+ {error && ( + + {error} + + )} + +
+ +
+ setNewPassword(e.target.value)} + placeholder="Enter new password" + required + className="min-h-[44px] pr-12" + /> + +
+
+ +
+ +
+ setConfirmPassword(e.target.value)} + placeholder="Confirm new password" + required + className="min-h-[44px] pr-12" + /> + +
+
+ + +
+ ); + + case 'done': + return ( +
+ +
+

Password Reset Successful

+

+ Your password has been reset successfully. For security, you have been signed out of all other sessions. +

+

+ Please note that two-factor authentication may be required when you sign in. +

+
+ +
+ ); + } + }; + + const getStepTitle = () => { + switch (currentStep) { + case 'request': return 'Reset Your Password'; + case 'verify': return 'Enter Verification Code'; + case 'newPassword': return 'Set New Password'; + case 'done': return 'Password Reset Complete'; + } + }; + + const getStepDescription = () => { + switch (currentStep) { + case 'request': return 'Enter your email address and we\'ll send you a verification code'; + case 'verify': return 'Check your email for the 6-digit verification code'; + case 'newPassword': return 'Choose a strong new password for your account'; + case 'done': return 'Your password has been successfully reset'; + } + }; + + return ( +
+ {/* Brand Header */} +
+
+
+ Kautilya Leadership Centre +
+
+
+ + {/* Main Content */} +
+
+ + +
+ {currentStep !== 'request' && currentStep !== 'done' && ( + + )} + {getStepTitle()} +
+ {getStepDescription()} +
+ + {renderStepContent()} + + {currentStep !== 'done' && ( +
+ +
+ )} +
+
+
+
+ + {/* Legal Footer */} +
+
+
+ © 2024 Kautilya Leadership Centre + + +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/auth/Login.tsx b/src/components/auth/Login.tsx new file mode 100644 index 0000000..5c5c22e --- /dev/null +++ b/src/components/auth/Login.tsx @@ -0,0 +1,172 @@ +import React, { use, useState } from 'react'; +import { Button } from '../ui/button'; +import { Input } from '../ui/input'; +import { Label } from '../ui/label'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/card'; +import { Alert, AlertDescription } from '../ui/alert'; +import { Eye, EyeOff } from 'lucide-react'; +import klcLogoLight from '../../assets/klc-logo-white.png'; +import { useNavigate } from 'react-router-dom'; + +interface LoginProps { + onLogin: () => void; + // onNavigate: (route: string) => void; +} + +export function Login({ onLogin }: LoginProps) { + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [showPassword, setShowPassword] = useState(false); + const [error, setError] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const navigate =useNavigate(); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + setIsLoading(true); + + // Simulate API call + setTimeout(() => { + if (email === 'admin@klc.edu' && password === 'Admin@123') { + onLogin(); + } else { + setError('Invalid email or password. Please try again.'); + } + setIsLoading(false); + }, 1000); + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter') { + handleSubmit(e as any); + } + }; + + return ( +
+ {/* Brand Header */} +
+
+
+ Kautilya Leadership Centre +
+
+
+ + {/* Main Content */} +
+
+ + + Sign in to Admin + + Enter your credentials to access the admin panel + + + +
+ {error && ( + + {error} + + )} + +
+ + setEmail(e.target.value)} + placeholder="admin@klc.edu" + required + className="min-h-[44px]" + onKeyDown={handleKeyDown} + /> +
+ +
+ +
+ setPassword(e.target.value)} + placeholder="Enter your password" + required + className="min-h-[44px] pr-12" + onKeyDown={handleKeyDown} + /> + +
+
+ + + +
+ +
+
+ + {/* Security Hints */} +
+

Security Guidelines:

+
    +
  • • Use a strong, unique password
  • +
  • • Enable two-factor authentication when prompted
  • +
  • • Do not share your login credentials
  • +
  • • Always sign out when finished
  • +
+
+
+
+
+
+ + {/* Legal Footer */} +
+
+
+ © 2024 Kautilya Leadership Centre + + +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/auth/TwoFactorAuth.tsx b/src/components/auth/TwoFactorAuth.tsx new file mode 100644 index 0000000..8bbc56c --- /dev/null +++ b/src/components/auth/TwoFactorAuth.tsx @@ -0,0 +1,250 @@ +import React, { useState } from 'react'; +import { Button } from '../ui/button'; +import { Input } from '../ui/input'; +import { Label } from '../ui/label'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/card'; +import { Alert, AlertDescription } from '../ui/alert'; +import { ArrowLeft } from 'lucide-react'; +import { useNavigate } from 'react-router-dom'; +// import klcLogoLight from 'figma:asset/1e150e43f238df3e08fcbf5d8f4899c233264e9f.png'; + +const klcLogoLight = 'figma:asset/1e150e43f238df3e08fcbf5d8f4899c233264e9f.png'; + +interface TwoFactorAuthProps { + onLogin: () => void; + // onNavigate: (route: string) => void; +} + +export function TwoFactorAuth({ onLogin }: TwoFactorAuthProps) { + const [verificationCode, setVerificationCode] = useState(['', '', '', '', '', '']); + const [isLoading, setIsLoading] = useState(false); + const [resendCooldown, setResendCooldown] = useState(60); + const [error, setError] = useState(''); + const [attempts, setAttempts] = useState(0); + const navigate = useNavigate(); + + React.useEffect(() => { + if (resendCooldown > 0) { + const timer = setTimeout(() => setResendCooldown(resendCooldown - 1), 1000); + return () => clearTimeout(timer); + } + }, [resendCooldown]); + + const handleVerifyCode = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + setIsLoading(true); + + const code = verificationCode.join(''); + if (code.length !== 6) { + setError('Please enter the complete 6-digit code'); + setIsLoading(false); + return; + } + + setTimeout(() => { + if (code === '123456') { + onLogin(); + } else { + const newAttempts = attempts + 1; + setAttempts(newAttempts); + + if (newAttempts >= 3) { + setError('Too many incorrect attempts. Please request a new code.'); + } else { + setError('Incorrect verification code. Please check your email and try again.'); + } + + // Clear the code inputs + setVerificationCode(['', '', '', '', '', '']); + // Focus first input + document.getElementById('code-0')?.focus(); + } + setIsLoading(false); + }, 1000); + }; + + const handleCodeInput = (index: number, value: string) => { + if (value.length > 1) { + // Handle paste + const pastedCode = value.slice(0, 6).split(''); + const newCode = [...verificationCode]; + pastedCode.forEach((char, i) => { + if (index + i < 6) newCode[index + i] = char; + }); + setVerificationCode(newCode); + // Focus the last filled input or next empty one + const nextIndex = Math.min(index + pastedCode.length, 5); + document.getElementById(`code-${nextIndex}`)?.focus(); + return; + } + + const newCode = [...verificationCode]; + newCode[index] = value; + setVerificationCode(newCode); + + // Auto-advance to next input + if (value && index < 5) { + const nextInput = document.getElementById(`code-${index + 1}`); + nextInput?.focus(); + } + }; + + const handleResendCode = () => { + if (resendCooldown === 0) { + setResendCooldown(60); + setAttempts(0); + setError(''); + setVerificationCode(['', '', '', '', '', '']); + // Simulate API call + setTimeout(() => { + // Show success message via toast or inline + }, 1000); + } + }; + + const maskedEmail = 'ad***@klc.edu'; // Simulated masked email + + return ( +
+ {/* Brand Header */} +
+
+
+ Kautilya Leadership Centre +
+
+
+ + {/* Main Content */} +
+
+ + + Enter the 6-digit code + + We sent a code to {maskedEmail}. It expires in 10 minutes. + + + +
+ {error && ( + + {error} + + )} + +
+ +
+ {verificationCode.map((digit, index) => ( + handleCodeInput(index, e.target.value)} + className="w-12 h-12 text-center font-mono text-lg" + onKeyDown={(e) => { + if (e.key === 'Backspace' && !digit && index > 0) { + document.getElementById(`code-${index - 1}`)?.focus(); + } + }} + aria-label={`Digit ${index + 1} of verification code`} + /> + ))} +
+

+ You can paste the complete code into any field +

+
+ + + +
+ + +
+ + {attempts >= 2 && attempts < 3 && ( + + + If you're having trouble receiving codes, please contact your system administrator. + + + )} + + {resendCooldown > 50 && ( +
+
+ Code expires in 10 minutes +
+
+ )} +
+ + {/* Security Notice */} +
+

Security Notice:

+
    +
  • • This code is single-use only
  • +
  • • Never share verification codes with anyone
  • +
  • • Codes expire after 10 minutes
  • +
+
+
+
+
+
+ + {/* Legal Footer */} +
+
+
+ © 2024 Kautilya Leadership Centre + + +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/figma/ImageWithFallback.tsx b/src/components/figma/ImageWithFallback.tsx new file mode 100644 index 0000000..0e26139 --- /dev/null +++ b/src/components/figma/ImageWithFallback.tsx @@ -0,0 +1,27 @@ +import React, { useState } from 'react' + +const ERROR_IMG_SRC = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==' + +export function ImageWithFallback(props: React.ImgHTMLAttributes) { + const [didError, setDidError] = useState(false) + + const handleError = () => { + setDidError(true) + } + + const { src, alt, style, className, ...rest } = props + + return didError ? ( +
+
+ Error loading image +
+
+ ) : ( + {alt} + ) +} diff --git a/src/components/layout/AuthenticatedLayout.tsx b/src/components/layout/AuthenticatedLayout.tsx new file mode 100644 index 0000000..c9579f2 --- /dev/null +++ b/src/components/layout/AuthenticatedLayout.tsx @@ -0,0 +1,372 @@ +import React, { useState } from 'react'; +import { Button } from '../ui/button'; +import { + Home, + FileText, + GraduationCap, + Users, + Calendar, + Globe, + BarChart3, + Settings, + Menu, + ChevronLeft, + LogOut, + User, + Shield, + Building, + UserPlus, + Webcam, + ClipboardList, + Target +} from 'lucide-react'; +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from '../ui/breadcrumb'; +import { Avatar, AvatarFallback } from '../ui/avatar'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '../ui/dropdown-menu'; +import klcLogoDark from '../../assets/klc-logo-white.png'; +import { useNavigate } from 'react-router-dom'; + +interface NavigationItem { + id: string; + label: string; + icon: React.ComponentType<{ className?: string }>; + route: string; + children?: NavigationItem[]; +} + +interface AuthenticatedLayoutProps { + children: React.ReactNode; + currentRoute: string; + // onNavigate: (route: string) => void; + onLogout: () => void; + user: { + name: string; + email: string; + role: string; + avatar?: string; + lastLogin: string; + }; + breadcrumbs?: Array<{ label: string; route?: string }>; +} + +const navigationItems: NavigationItem[] = [ + { + id: 'dashboard', + label: 'Dashboard', + icon: Home, + route: '/dashboard' + }, + { + id: 'content', + label: 'Content', + icon: FileText, + route: '/content' + }, + { + id: 'courses', + label: 'Courses', + icon: GraduationCap, + route: '/courses' + }, + { + id: 'profilers', + label: 'Profilers', + icon: Target, + route: '/profilers' + }, + { + id: 'programmes', + label: 'Programmes', + icon: ClipboardList, + route: '/programmes' + }, + { + id: 'open-programme', + label: 'Open Programme', + icon: Globe, + route: '/open-programme' + }, + { + id: 'webinars', + label: 'Webinars', + icon: Webcam, + route: '/webinars' + }, + { + id: 'class-scheduler', + label: 'Class Scheduler', + icon: Calendar, + route: '/class-scheduler' + }, + { + id: 'landing-pages', + label: 'Landing Pages', + icon: Globe, + route: '/landing-pages' + }, + { + id: 'users', + label: 'Users', + icon: Users, + route: '/users/individual', + children: [ + { + id: 'individual', + label: 'Individual Learners', + icon: User, + route: '/users/individual' + }, + { + id: 'organizations', + label: 'Organizations', + icon: Building, + route: '/users/organizations' + } + ] + }, + { + id: 'roles', + label: 'Roles', + icon: Shield, + route: '/admin/roles' + }, + { + id: 'analytics', + label: 'Analytics', + icon: BarChart3, + route: '/admin/analytics' + }, + { + id: 'settings', + label: 'Settings', + icon: Settings, + route: '/settings', + children: [ + { + id: 'leads', + label: 'Leads', + icon: UserPlus, + route: '/admin/leads' + }, + { + id: 'facilities', + label: 'Facilities', + icon: Building, + route: '/admin/facilities' + } + ] + } +]; + +export function AuthenticatedLayout({ + children, + currentRoute, + // onNavigate, + onLogout, + user, + breadcrumbs = [] +}: AuthenticatedLayoutProps) { + const [sidebarCollapsed, setSidebarCollapsed] = useState(false); + + const isActiveRoute = (route: string) => { + return currentRoute === route || + (route === '/users/individual' && currentRoute.startsWith('/users/')); + }; + + const getActiveParent = (items: NavigationItem[]): string | null => { + for (const item of items) { + if (isActiveRoute(item.route)) return item.id; + if (item.children) { + for (const child of item.children) { + if (isActiveRoute(child.route)) return item.id; + } + } + } + return null; + }; + + const activeParent = getActiveParent(navigationItems); + + const renderNavigationItem = (item: NavigationItem, isChild = false) => { + const isActive = isActiveRoute(item.route); + const isParentActive = activeParent === item.id; + const Icon = item.icon; + + const navigate = useNavigate(); + + return ( +
+ + + {/* Render children if parent is active and not collapsed */} + {item.children && isParentActive && !sidebarCollapsed && ( +
+ {item.children.map(child => renderNavigationItem(child, true))} +
+ )} +
+ ); + }; + const navigate = useNavigate(); + return ( +
+ {/* Left Sidebar */} +
+ {/* Logo Header */} +
+
+ {!sidebarCollapsed && ( + Kautilya Leadership Centre + )} + +
+
+ + {/* Navigation Items */} +
+ +
+ + {/* User Section */} +
navigate('/profile')} + > + + + + + +
+
{user.name}
+
{user.email}
+
+ + navigate('/profile')}> + + Profile + + + + + Sign out + +
+
+
+
+ + {/* Main Content */} +
+ {/* Breadcrumb */} + {breadcrumbs.length > 0 && ( +
+ + + + navigate('/dashboard')} + className="cursor-pointer" + > + Admin + + + {breadcrumbs.map((crumb, index) => ( + + + + {crumb.route && index < breadcrumbs.length - 1 ? ( + navigate(crumb.route!)} + className="cursor-pointer" + > + {crumb.label} + + ) : ( + {crumb.label} + )} + + + ))} + + +
+ )} + + {/* Page Content */} +
+ {children} +
+ + {/* Footer */} +
+
+ © 2024 Kautilya Leadership Centre + + +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/pages/Analytics.tsx b/src/components/pages/Analytics.tsx new file mode 100644 index 0000000..1711397 --- /dev/null +++ b/src/components/pages/Analytics.tsx @@ -0,0 +1,344 @@ +import React from 'react'; +import { AuthenticatedLayout } from '../layout/AuthenticatedLayout'; +import { Card, CardContent, CardHeader, CardTitle } from '../ui/card'; +import { Button } from '../ui/button'; +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, LineChart, Line } from 'recharts'; +import { Download, ExternalLink, TrendingUp, Users, Target, DollarSign } from 'lucide-react'; +import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '../ui/dropdown-menu'; + +interface AnalyticsProps { + // onNavigate: (route: string) => void; + onLogout: () => void; + user: any; +} + +const conversionData = [ + { month: 'Jan', leads: 120, enrolled: 28 }, + { month: 'Feb', leads: 135, enrolled: 32 }, + { month: 'Mar', leads: 148, enrolled: 41 }, + { month: 'Apr', leads: 162, enrolled: 45 }, + { month: 'May', leads: 171, enrolled: 49 }, + { month: 'Jun', leads: 189, enrolled: 56 } +]; + +const revenueData = [ + { day: 'Mon', revenue: 12500 }, + { day: 'Tue', revenue: 15200 }, + { day: 'Wed', revenue: 11800 }, + { day: 'Thu', revenue: 18900 }, + { day: 'Fri', revenue: 22100 }, + { day: 'Sat', revenue: 8700 }, + { day: 'Sun', revenue: 9400 } +]; + +export function Analytics({ onLogout, user }: AnalyticsProps) { + const breadcrumbs = [ + { label: 'Admin', route: '/admin/analytics' }, + { label: 'Analytics & Reports' } + ]; + + const exportData = (format: 'csv' | 'xlsx' | 'pdf', title: string) => { + console.log(`Exporting ${title} as ${format.toUpperCase()}`); + }; + + return ( + +
+
+
+

Analytics & Reports

+

Comprehensive insights into performance and engagement

+
+ {/*
+ +
*/} +
+ + {/* Key Metrics */} + {/*
+ + +
+
+

Lead→Enrolment Conversion

+
+

23.4%

+ 7-Day +
+

28.7% (30-Day)

+
+
+ + + + + + + exportData('csv', 'Lead Conversion')}> + Export CSV + + exportData('xlsx', 'Lead Conversion')}> + Export XLSX + + exportData('pdf', 'Lead Conversion')}> + Export PDF + + + +
+
+
+
+ + + +
+
+

Programme Fill-Rate

+
+

87.2%

+ 7-Day +
+

84.1% (30-Day)

+
+
+ + + + + + + exportData('csv', 'Programme Fill Rate')}> + Export CSV + + exportData('xlsx', 'Programme Fill Rate')}> + Export XLSX + + exportData('pdf', 'Programme Fill Rate')}> + Export PDF + + + +
+
+
+
+ + + +
+
+

Org Activation Rate

+
+

76.8%

+ 7-Day +
+

71.3% (30-Day)

+
+
+ + + + + + + exportData('csv', 'Org Activation')}> + Export CSV + + exportData('xlsx', 'Org Activation')}> + Export XLSX + + exportData('pdf', 'Org Activation')}> + Export PDF + + + +
+
+
+
+ + + +
+
+

7-Day Revenue Trend

+
+

₹180K

+ 7-Day +
+

₹720K (30-Day)

+
+
+ + + + + + + exportData('csv', 'Revenue Trend')}> + Export CSV + + exportData('xlsx', 'Revenue Trend')}> + Export XLSX + + exportData('pdf', 'Revenue Trend')}> + Export PDF + + + +
+
+
+
+
*/} + + {/* Charts */} +
+ {/* Lead to Enrollment Conversion */} + {/* + + Lead → Enrollment Conversion + + + +
+ + + + + + + + + + +
+
+
*/} + + {/* Revenue Trend */} + {/* + + 7-Day Revenue Trend + + + +
+ + + + + + [`₹${value.toLocaleString()}`, 'Revenue']} /> + + + +
+
+
*/} +
+ + {/* Additional Analytics Cards */} + {/*
+ + + Top Performing Courses + + +
+
+ Leadership Fundamentals + 156 enrolled +
+
+ Digital Transformation + 142 enrolled +
+
+ Strategic Planning + 128 enrolled +
+
+
+
+ + + + Completion Rates + + +
+
+ Courses + 87.3% +
+
+ Programmes + 76.8% +
+
+ Assessments + 91.2% +
+
+
+
+ + + + Geographic Distribution + + +
+
+ Mumbai + 2,845 learners +
+
+ Delhi + 2,234 learners +
+
+ Bangalore + 1,967 learners +
+
+
+
+
*/} +
+
+ ); +} \ No newline at end of file diff --git a/src/components/pages/ClassScheduler.tsx b/src/components/pages/ClassScheduler.tsx new file mode 100644 index 0000000..d1ecbb4 --- /dev/null +++ b/src/components/pages/ClassScheduler.tsx @@ -0,0 +1,206 @@ +import React, { useState } from 'react'; +import { AuthenticatedLayout } from '../layout/AuthenticatedLayout'; +import { Card, CardContent, CardHeader, CardTitle } from '../ui/card'; +import { Button } from '../ui/button'; +import { Badge } from '../ui/badge'; +import { Calendar, MapPin, Users, Clock, Plus } from 'lucide-react'; +import { useNavigate } from 'react-router-dom'; + +interface ClassSchedulerProps { + // onNavigate: (route: string) => void; + onLogout: () => void; + user: any; +} + +const mockSessions = [ + { + id: 1, + title: 'Leadership Workshop - Batch A', + date: '2024-01-20', + time: '09:00 AM - 12:00 PM', + room: 'Conference Room A', + capacity: 25, + booked: 23, + status: 'Confirmed' + }, + { + id: 2, + title: 'Strategic Planning Session', + date: '2024-01-22', + time: '02:00 PM - 05:00 PM', + room: 'Training Hall B', + capacity: 40, + booked: 38, + status: 'Full' + } +]; + +export function ClassScheduler({ onLogout, user }: ClassSchedulerProps) { + const [viewMode, setViewMode] = useState<'month' | 'week' | 'list'>('list'); + + const breadcrumbs = [{ label: 'Class Scheduler' }]; +const navigate = useNavigate(); + return ( + +
+
+
+

Class Scheduler

+

Schedule and manage offline classroom sessions

+
+
+
+ + + +
+ +
+
+ +
+
+ + + Scheduled Sessions + + +
+ {mockSessions.map((session) => ( + +
+
+

{session.title}

+ +
+
+ + {session.date} +
+
+ + {session.time} +
+
+ + {session.room} +
+
+ +
+
+ + {session.booked}/{session.capacity} booked +
+ + {session.status} + +
+
+ +
+ + +
+
+
+ ))} +
+
+
+
+ +
+ + + Room Availability + + +
+
+ Conference Room A + Available +
+
+ Training Hall B + Booked +
+
+ Workshop Room C + Available +
+
+
+
+ + + + Booking Queue + + +
+
+ +

No pending bookings

+
+
+
+
+ + + + Quick Actions + + +
+ + + +
+
+
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/pages/ContentManager.tsx b/src/components/pages/ContentManager.tsx new file mode 100644 index 0000000..2bb11e8 --- /dev/null +++ b/src/components/pages/ContentManager.tsx @@ -0,0 +1,310 @@ +import React, { useState } from "react"; +import { AuthenticatedLayout } from "../layout/AuthenticatedLayout"; +import { + Card, + CardContent, + CardHeader, + CardTitle, +} from "../ui/card"; +import { Button } from "../ui/button"; +import { Input } from "../ui/input"; +import { Badge } from "../ui/badge"; +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "../ui/tabs"; +import { + Search, + Plus, + FileText, + Mic, + Video, + BookOpen, + HelpCircle, + Target, +} from "lucide-react"; + +interface ContentManagerProps { + // onNavigate: (route: string) => void; + onLogout: () => void; + user: any; +} + +const contentTypes = [ + { id: "blogs", label: "Blogs/Articles", icon: FileText }, + { id: "profilers", label: "Profilers", icon: Target }, + { id: "faq", label: "FAQ", icon: HelpCircle }, + { id: "reading", label: "Reading Materials", icon: BookOpen }, + { id: "webcasts", label: "Webcasts", icon: Video }, + { id: "podcasts", label: "Podcasts", icon: Mic }, + { id: "films", label: "Films/Case-Studies", icon: Video }, +]; + +const mockContent = { + blogs: [ + { + id: 1, + title: "Leadership in the Digital Age", + status: "Published", + tags: ["Leadership", "Digital"], + updated: "2024-01-15", + owner: "Dr. Kumar", + }, + { + id: 2, + title: "Strategic Planning Framework", + status: "Review", + tags: ["Strategy", "Planning"], + updated: "2024-01-14", + owner: "Prof. Sharma", + }, + ], + faq: [ + { + id: 1, + title: "How to enroll in courses?", + category: "Enrollment", + status: "Published", + updated: "2024-01-10", + }, + { + id: 2, + title: "Certificate requirements", + category: "Certification", + status: "Draft", + updated: "2024-01-12", + }, + ], +}; + +export function ContentManager({ + // onNavigate, + onLogout, + user, +}: ContentManagerProps) { + const [activeTab, setActiveTab] = useState("blogs"); + const [searchTerm, setSearchTerm] = useState(""); + + const breadcrumbs = [{ label: "Content Manager" }]; + + return ( + +
+
+
+

+ Content Manager +

+

+ Manage all content types and submissions +

+
+ +
+ + + +
+
+
+ + + setSearchTerm(e.target.value) + } + className="pl-10 min-h-[44px]" + /> +
+
+
+ + + + {contentTypes.map((type) => { + const Icon = type.icon; + return ( + + + {type.label} + + ); + })} + + + + + + Blogs/Articles + + +
+ {mockContent.blogs.map((item) => ( +
+
+

+ {item.title} +

+
+ + {item.status} + + + by {item.owner} + + + • {item.updated} + +
+
+ {item.tags.map((tag) => ( + + {tag} + + ))} +
+
+
+ + + +
+
+ ))} +
+
+
+
+ + + + + FAQ + + +
+ {mockContent.faq.map((item) => ( +
+
+

+ {item.title} +

+
+ + {item.category} + + + {item.status} + + + • {item.updated} + +
+
+
+ + +
+
+ ))} +
+
+
+
+ + {/* Placeholder content for other tabs */} + {contentTypes.slice(2).map((type) => ( + + + + {type.label} + + +
+ +

+ No {type.label.toLowerCase()} content + yet. +

+ +
+
+
+
+ ))} +
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/pages/CourseBuilder.tsx b/src/components/pages/CourseBuilder.tsx new file mode 100644 index 0000000..fe39f7d --- /dev/null +++ b/src/components/pages/CourseBuilder.tsx @@ -0,0 +1,323 @@ +import React, { useState } from 'react'; +import { AuthenticatedLayout } from '../layout/AuthenticatedLayout'; +import { Card, CardContent, CardHeader, CardTitle } from '../ui/card'; +import { Button } from '../ui/button'; +import { Input } from '../ui/input'; +import { Label } from '../ui/label'; +import { Textarea } from '../ui/textarea'; +import { Badge } from '../ui/badge'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/tabs'; +import { Save, Eye, Upload, Plus, Settings, History, Send } from 'lucide-react'; +import { useNavigate } from 'react-router-dom'; + +interface CourseBuilderProps { + // onNavigate: (route: string) => void; + onLogout: () => void; + user: any; +} + +export function CourseBuilder({ onLogout, user }: CourseBuilderProps) { + const [courseTitle, setCourseTitle] = useState('Leadership Fundamentals'); + const [isLoading, setIsLoading] = useState(false); + + const breadcrumbs = [ + { label: 'Courses', route: '/courses' }, + { label: 'Course Builder' } + ]; + + const navigate = useNavigate(); + + return ( + +
+ {/* Builder Header */} + + +
+
+ setCourseTitle(e.target.value)} + className="text-lg font-semibold border-none shadow-none p-0 h-auto" + /> + Draft +
+
+ + + +
+
+
+
+ + {/* Course Builder Tabs */} + + + Basics + Curriculum + Resources + Preview & QA + Versioning + Publish + + + + + + Course Basics + + +
+
+
+ + setCourseTitle(e.target.value)} + className="min-h-[44px]" + /> +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ +
+ +

+ Click to upload or drag and drop +

+

+ Recommended: 400x300px, JPG or PNG +

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