From 24c168ae4b2ee16f00665eb188161f2a4d27a1e9 Mon Sep 17 00:00:00 2001 From: "[Tui]" Date: Fri, 3 Oct 2025 14:08:46 +1300 Subject: [PATCH] Initial commit --- .gitignore | 47 + README.md | 53 + components.json | 17 + package-lock.json | 2857 +++++++++++++++++++++++++++++ package.json | 36 + postcss.config.js | 6 + public/android-chrome-192x192.png | Bin 0 -> 7460 bytes public/android-chrome-512x512.png | Bin 0 -> 24185 bytes public/apple-touch-icon.png | Bin 0 -> 6651 bytes public/favicon-16x16.png | Bin 0 -> 410 bytes public/favicon-32x32.png | Bin 0 -> 848 bytes public/favicon.ico | Bin 0 -> 15406 bytes public/site.webmanifest | 1 + src/app/globals.css | 59 + src/app/layout.tsx | 36 + src/app/page.tsx | 1053 +++++++++++ src/components/ui/accordion.tsx | 55 + src/components/ui/button.tsx | 57 + src/components/ui/card.tsx | 76 + src/components/ui/collapsible.tsx | 9 + src/components/ui/dialog.tsx | 120 ++ src/components/ui/input.tsx | 22 + src/components/ui/select.tsx | 158 ++ src/components/ui/separator.tsx | 29 + src/components/ui/textarea.tsx | 24 + src/lib/utils.ts | 6 + tailwind.config.js | 76 + tsconfig.json | 27 + 28 files changed, 4824 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 components.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/favicon.ico create mode 100644 public/site.webmanifest create mode 100644 src/app/globals.css create mode 100644 src/app/layout.tsx create mode 100644 src/app/page.tsx create mode 100644 src/components/ui/accordion.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/collapsible.tsx create mode 100644 src/components/ui/dialog.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/select.tsx create mode 100644 src/components/ui/separator.tsx create mode 100644 src/components/ui/textarea.tsx create mode 100644 src/lib/utils.ts create mode 100644 tailwind.config.js create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3167e3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# macOS +.DS_Store +.AppleDouble +.LSOverride + +# IDE +.vscode/ +.idea/ +*.swp +*.swo \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1015c21 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# Lorebook Converter + +A Next.js application for converting Janitor AI lorebook format to SillyTavern format with comprehensive editing capabilities. + +## Features + +- Upload Janitor AI lorebook JSON files or paste JSON data directly +- Automatic conversion to SillyTavern format +- Comprehensive editing interface matching SillyTavern UI: + - Primary and secondary keywords + - Logic settings (AND ANY, AND ALL, NOT ANY, NOT ALL) + - Scan depth and case sensitivity + - Group settings and weights + - Recursion controls + - Additional matching sources + - Filter settings + - Automation ID support + - All boolean flags and numeric settings +- Add new entries +- Delete existing entries +- Clear lorebook and upload new files +- Copy content to clipboard +- Dark mode UI matching the sucker app style + +## Getting Started + +1. Install dependencies: +```bash +npm install +``` + +2. Run the development server: +```bash +npm run dev +``` + +3. Open [http://localhost:3000](http://localhost:3000) with your browser. + +## Usage + +1. Upload your Janitor AI lorebook JSON file +2. Review the converted entries +3. Edit any entries as needed using the edit buttons +4. Add or delete entries if desired +5. Download the final SillyTavern-compatible JSON file + +## Deployment + +This app can be deployed to Vercel, Netlify, or any other Next.js-compatible hosting platform. + +```bash +npm run build +``` \ No newline at end of file diff --git a/components.json b/components.json new file mode 100644 index 0000000..4d01f8b --- /dev/null +++ b/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/app/globals.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..824a271 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2857 @@ +{ + "name": "lorebook-converter", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "lorebook-converter", + "version": "0.1.0", + "dependencies": { + "@radix-ui/react-accordion": "^1.2.2", + "@radix-ui/react-collapsible": "^1.1.2", + "@radix-ui/react-dialog": "^1.1.4", + "@radix-ui/react-select": "^2.1.4", + "@radix-ui/react-separator": "^1.1.1", + "@radix-ui/react-slot": "^1.1.1", + "@types/react": "^18.2.39", + "@types/react-dom": "^18.2.17", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.471.0", + "next": "^14.0.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.3.2" + }, + "devDependencies": { + "@types/node": "^22.10.5", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.31", + "tailwindcss": "^3.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/@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/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.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/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.33.tgz", + "integrity": "sha512-CgVHNZ1fRIlxkLhIX22flAZI/HmpDaZ8vwyJ/B0SDPTBuLZ1PJ+DWMjCHhqnExfmSQzA/PbZi8OAc7PAq2w9IA==", + "license": "MIT" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.33.tgz", + "integrity": "sha512-HqYnb6pxlsshoSTubdXKu15g3iivcbsMXg4bYpjL2iS/V6aQot+iyF4BUc2qA/J/n55YtvE4PHMKWBKGCF/+wA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.33.tgz", + "integrity": "sha512-8HGBeAE5rX3jzKvF593XTTFg3gxeU4f+UWnswa6JPhzaR6+zblO5+fjltJWIZc4aUalqTclvN2QtTC37LxvZAA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.33.tgz", + "integrity": "sha512-JXMBka6lNNmqbkvcTtaX8Gu5by9547bukHQvPoLe9VRBx1gHwzf5tdt4AaezW85HAB3pikcvyqBToRTDA4DeLw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.33.tgz", + "integrity": "sha512-Bm+QulsAItD/x6Ih8wGIMfRJy4G73tu1HJsrccPW6AfqdZd0Sfm5Imhgkgq2+kly065rYMnCOxTBvmvFY1BKfg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.33.tgz", + "integrity": "sha512-FnFn+ZBgsVMbGDsTqo8zsnRzydvsGV8vfiWwUo1LD8FTmPTdV+otGSWKc4LJec0oSexFnCYVO4hX8P8qQKaSlg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.33.tgz", + "integrity": "sha512-345tsIWMzoXaQndUTDv1qypDRiebFxGYx9pYkhwY4hBRaOLt8UGfiWKr9FSSHs25dFIf8ZqIFaPdy5MljdoawA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.33.tgz", + "integrity": "sha512-nscpt0G6UCTkrT2ppnJnFsYbPDQwmum4GNXYTeoTIdsmMydSKFz9Iny2jpaRupTb+Wl298+Rh82WKzt9LCcqSQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.33.tgz", + "integrity": "sha512-pc9LpGNKhJ0dXQhZ5QMmYxtARwwmWLpeocFmVG5Z0DzWq5Uf0izcI8tLc+qOpqxO1PWqZ5A7J1blrUIKrIFc7Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.33.tgz", + "integrity": "sha512-nOjfZMy8B94MdisuzZo9/57xuFVLHJaDj5e/xrduJp9CV2/HrfxTRH2fbyLe+K9QT41WBLUd4iXX3R7jBp0EUg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.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-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-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-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-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-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-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-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-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-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-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/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@types/node": { + "version": "22.18.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz", + "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.25.tgz", + "integrity": "sha512-oSVZmGtDPmRZtVDqvdKUi/qgCsWp5IDY29wp8na8Bj4B3cc99hfNzvNhlMkVVxctkAOGUA3Km7MMpBHAnWfcIA==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/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/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.10.tgz", + "integrity": "sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.26.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001746", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001746.tgz", + "integrity": "sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "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/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.228", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.228.tgz", + "integrity": "sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/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/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/lucide-react": { + "version": "0.471.2", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.471.2.tgz", + "integrity": "sha512-A8fDycQxGeaSOTaI7Bm4fg8LBXO7Qr9ORAX47bDRvugCsjLIliugQO0PkKFoeAD57LIQwlWKd3NIQ3J7hYp84g==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/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/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.33.tgz", + "integrity": "sha512-GiKHLsD00t4ACm1p00VgrI0rUFAC9cRDGReKyERlM57aeEZkOQGcZTpIbsGn0b562FTPJWmYfKwplfO9EaT6ng==", + "license": "MIT", + "dependencies": { + "@next/env": "14.2.33", + "@swc/helpers": "0.5.5", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.2.33", + "@next/swc-darwin-x64": "14.2.33", + "@next/swc-linux-arm64-gnu": "14.2.33", + "@next/swc-linux-arm64-musl": "14.2.33", + "@next/swc-linux-x64-gnu": "14.2.33", + "@next/swc-linux-x64-musl": "14.2.33", + "@next/swc-win32-arm64-msvc": "14.2.33", + "@next/swc-win32-ia32-msvc": "14.2.33", + "@next/swc-win32-x64-msvc": "14.2.33" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-releases": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-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-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/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/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/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", + "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/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/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3d4ab00 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "lorebook-converter", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@radix-ui/react-accordion": "^1.2.2", + "@radix-ui/react-collapsible": "^1.1.2", + "@radix-ui/react-dialog": "^1.1.4", + "@radix-ui/react-select": "^2.1.4", + "@radix-ui/react-separator": "^1.1.1", + "@radix-ui/react-slot": "^1.1.1", + "@types/react": "^18.2.39", + "@types/react-dom": "^18.2.17", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.471.0", + "next": "^14.0.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.3.2" + }, + "devDependencies": { + "@types/node": "^22.10.5", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.5" + } +} \ No newline at end of file diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..8567b4c --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; \ No newline at end of file diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..26ebefc761f03d1d6089f6bf78eb028dcca18659 GIT binary patch literal 7460 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 JrRnXs{{ds*+B*OM literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2c91d4b6be6e19a528a4ea011fbf0e31ae5ce4da GIT binary patch literal 6651 zcmeHMRaX=M)81WJVx>bux*H`$I;5loq*H1EX{2Lm=@5|a5GmOFso543O{KFZ zVEeTMoWugnERbGcaxAY`9jAIb{+w-%PU%?@?i%FPJY^hlZteHzWOkY)ws%a-Pdbul zaIr646T+6qy{Tpu12TAJ#ttSyrn;8$$pb6N|2x8r z#RrwOsumXNaA`;_0QP9`)dduKMoDd@E1JD3= z_}6Y8hKaO4bRRLLSdf7I;UZ#b8|x4$dV(H6L^nxje=m*$tm|Qz9B@vc_<~`Lo?NU? zPJ-|IY`1~>0O`)<74#tp#yK_P!G&ekivJ~6gGO*VRfe$9uQ_6$MX@9Elsn_uHWRivol_J2COksw4l$6hyMEY@2gDJ zhB49$KMi8l2d00qiUXS%c|V&PYbAFK-l5@dm2QUQjRV)IS$krqr>8@7u=RB~klNbX z$*`g#Ifb+tiUTjr$(RtpZ=kXsj&&qfMoIcVMUzOt%@V2{ixZLNvV`J1-+{4JpAo;n zkPrOza>H}@rMv&dv|fFJ7r`pO$_1tS!v{uKCXcS!&&Ea%OXj#$PRLFzpOfR43r&Ut zFkODH2jB)qvE5(avgF9b%*yzRo^X(TP*G7)N=Al(h=@2bfdKy-C!S;ci=)@VYinz( z?k%hCZ~nNpydZ^*)RGWmfPkZaZt#NfK4PvM2wTU%?CaA(9 zX~^t-aszQR>U8Xpq?uJPkB?bo9BzKwcNrf3@5286cJnJMX2EMjFm-E@ z)VI{sl0Aco=Myod6!%Img@!`qie{7*3215KH#RKAlG-4d5QxT4Z+=(ZO$G^xKLH1n zyEg}}SutBg@t#ZVku#~!joRj;GKHN!I-3zNGWJ?462JYbRPZh%JeQ*Nd^53GV_&le z&h!+>rw&CCa0{o}RRAtOlNVw@*Ov)d{80YWYG0?qu!*Mp>?|QAJGQS+j(>}Kj7{zj zfgvpiqx)-;{#9fiMaa7}hJ+?#cz9J+=6EQZ_2Y|GEwgrVnr_~)T*>h^)EW;9(!ixg z_?Pp(x?PtW`oR~bECLvKDkcVpYG>CI`D1+tYM;4pJ%PFE0D3$#`aFH37fxRT%4kgaX5%&Ru+VpX z3zbHOsLDX%5h1uQgx9+AWl{Qi?twmDn=S7zz21N=OKS5wXq@1uZ|3K#=vVQFsqFcy zh|f)1>XBm>f(8imowX=d8pd8Pye?^2NhOpxA=-m*_r^R}uFw*D$#BgwN3mS?^ zr%Tn-VPl%Ud@6Fhb>@EMRaF(JMdd*2>+5^E7R|f1R1$r1`FE5gTyb#k3WRpmF*!BG)UyA5p&ho| zQ2w!@cl}-@ek++)@05O&9o2|?12#;^$_hnX9SN3}>Kc5d#BvD@v_x?o?VjJfTs=>h z#K*zOt8SX*+7_@+8#&WR{b=(teuhuIB2Xxhp49j2UQxq1rJcjY)tN(TMpAHSACntE zQCUq!M@Q%h|A#^4Q}qHxMMY^>^qiHECZ#{h$0c8W`CDEI?U=IM6H$`7J?nd6M zpSG^$cS{p5ws{^GG&Nz0Umd0MTdajDy}hvj-$vt3?znd(SI6-@Pw1xS=X^$?uRowN zCS@SssxQbk`A-wU-LSAVMl)7B_$MA@j238i!BSJ*gsF;qxs^w^VvR4*UoBw#&(-0u zYzBG}2icjJcxc0A4Zz8R?$tN=89Sod!8e(Z)${}f6T7_4ebYT+$CcLDOyR1`x33>M z0_vavP%o@*sV=TIs!BEf*+jX*l?hr=p}nD|g5+)p@)R3eQAz2ofx!>``Ua0B152Cj zG(q08t77O=rkx!mG7U|QYX;{jyAyu5zQw()X+nqc=-5?QU0q8m>-5<2K8xezR?{}MwyHQ= zp?CP-3AG+C_9KxAB5%v*haoYb9B9?dp!Wu0-Gy*rcEhhhF_|iUI{=UO0SL8G$C54o@ z*c#2}9^~qzW&D}yp#w8-26xLz;QluMcx@n2Ul)JujSQ`XA8LFe;LeTi@o{P@i;Hfl zp%iB~z3zpWX&%@l(qXeix+gp?4zIpZAd{1usV;B6hl9>MiVG{X*v_!=)300H8@&b& z{9Ou)^Qc}%paIw3eoI8ZTf=1RRPXS$rN8PluXQxF4Y<{7rNi&z?7z4r^krR*kJc3F zTAEthT(&v*NKG>5#uCbJJVN<(brxJ0G;kL!hf~so1~QkU*Gw!-Y0;6MDamR7EXxdw zo^ddM4g9!-4{X$R%q_jVYHMPI!`%^ex_0qP*-Bv)L8;>{E%5zg?CZV0X(rcmjpjCz z^4ZFG#W_V-YNp8G>F=Ed6cSeQYsBeeh>;>YEMMF=OZsC>^!sXI{vOv_UbZW)Xau9a zuk+gqJhXM*4eI2?f8P15enpPS_yb~C7T6?;N0F|NYIY%3_BihE4-U57rYZm%;77RB z)Bvee%~90SOoGIH7}HLj%x>Y4LapMbsK8Y^G3-PqH33p+I^NO#e(&bH zZzn^#0p>hY+9Q;ZfdTFoM|SLGEgi@3qV>s}aS(UZK;P_O)3RKbq+pA=UuD(pMpNmF z;!?1WuJ`8i*d1n-0g-oW0fy#;LXH7+xZ>r){XwbKh4#AD1^HEY+hf87ccav##D*d3 zm=y#+nMs=+7ChXhQd6$GHFh3V%mu7X9Xf(N$Ar~*>^^2qWZxnv)w5gqFO4Qa@V0}< z_&V!*%QXoXr9pPoRS5mO*H?>a|9tK$wMK6NNKf})kL zYVmq#kx{5 zx;KrcO)iWx6=U&iEp*e~+hfye2V%r0W7|KDyk)>cVA_a02)jJ zJWI|xt(dd+hR<}QwgiP7m!s~3L4B(1E-A)Z<;z~UNtrpws?vT@A(f?N&sHwXl!GPS zxr00Uh!|uFCSHaq?gW!Y=j3$Q4Ciq{b*YUvXR%L{D+zg5xolaDEHf!)}`|8MOT+3e*JrS87IXs+T%chDC z-sLqGx-}vO>SVI~8d|2t%<8Ub;u{H_smZ#JWM2a8*AfjqpEHPy_g3g%UXC;mxaeaS zzNvF1eL3luo{nmF5Pc#OF2%b&+7)pP4Z`vE_$z>1(R8 z|I~vFU~!jqu$Sxi^j-J2Wc)aO0(>R?O?s$13GDL~jUHG0_kFHV5WMeV_^D-_Cm>(5F%f@%5es4#s)I2a^icNUwRZv4U?L! zwp~tt2z<5FD`Qg;!Bgo~fP5J<3&@aIpgwo}LCgVW&|GC9q<-VMbzQt0m*aq)s#ELv z&+Ry+|KV~fWtq@ehq{R53mo*uOiWmdyWYrgMlj6EO1%Qt-ivTmNn{swrIr1jogfnA z-j9?S6UdVAwU~Bz+|k2U;`IuO9_9GSaRNKwp_7Z{B1TG zYpwk5opCt-sV^YVwnN=5wsw8bxwuOk+ye-#uDT69ke1ko1c?Nt@{^I0GTY@O(-M!f zmMl1E?^cuONrBNzytt0^I9_hb&aR>bp)h6o;$OxUG47EUcgca%=I9F6^M5|xkrkjcg*oyzgWG=7 z1Zp!Lu1K?K@n}G}l0oPa=2CZl{+Fj)&?-Vfr0dyI8yp`a zMxH{Ye7Iff!_i25bjn{Iw?_3s1HK)F@aOj*9@6=#>puMc)zk47 zaQoo6^+f;OJ0IJQ#qoFc(Ff$cIY=VI$iA(JY~*hrV*JS*JsB9Yv$rQZr0|V~Tr?js zGskb!$K_b|R}&_ZNsXSJNAA79fSllBz>5hVl8o=|jHmBe6bd?z?vC|{@({eH@81(j z7VWp-xdv{*`)|iD;wW_V(k&PwIz@cjjt=w-3Vu5yaG| zjQi92NVOuvsJac51O%urXyZuFVjdvB(! zy3&N%oX;s^_#_$M+?c5Qn4AzoY~O~?w~~s z=m?I0jGGD0jpJuwK|$<3&JKNyoxz;f1*9a}ZAnS;Yq-KmQa*9kX4ztj$?~!(hd86m z2~*C74z8@|&ccZvnccC-8!F-kyHGVeN>9NN$&K@ydv0!SBF3@i&R@#R3k6bRM|j>Z zllVng75KeK6FaDj957A|$i2`*KVc+cod6Di0~X6LzATGpA)D6jiS8C?bY*gr-CF@9 z^aM;+TbL;P0w9K?{jevFd_;-uak%W_0jM?UEA^6Au4JtyeQe1}^hO%AwO#<>12?f@ zBZ;~S>%~@!inkF@R&-_|h(ULCjxvW*XyU#5&z%v#IO1nj6r8{nri<=MG3>%b3vl}& zM%YCeGD3QWP9%j3dNFK$SPkGXy`+B$PK%LFd&PYjgj6`=FPx>jAliph8a>eYlNaIE zJ*VmaV(~g*kK9{8)OTZN9F=0m6N~xL?E~2TlY7<{mx;~Ww_U}y8Fje>Dz8djMi}$x zLO*R}T_~1<_rpijDqxN2y_Jqtp!q$T#&mxOG*e`8Z;Kg?i!Y literal 0 HcmV?d00001 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..2c29f4bb90d5dd7abd6714c5afdcfd748a4bff75 GIT binary patch literal 410 zcmV;L0cHM)P)Px$R7pfZR5(v#WS|f*QmCI{5F4PU=f=&-`kfEt#oxank?z!o8qlZZ6Kp zDG;Npr{^vvE^f%r&o9Eo%>~x;?dw;Dj~_q1dG+$;`OB9s?fmrp!;&i}Prd}nfeo;7 zbT9Mt_HM9uaOC9V;9z+D<_*KUH*Xleeg6(NfRmGxK}1A^K}1xP;rsXR3Q_(0E+-|{^NqV1^@s607*qoM6N<$ Ef?5T@g#Z8m literal 0 HcmV?d00001 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c03c89d363ce893fcef6679b3498b8b56f05df GIT binary patch literal 848 zcmV-W1F!svP)Px&3Q0skR9HvtRNYIHQ5=4L?}wsW`$$Dsrh;F!t&exh8L7Fb8;QD$pzyA4L#dno zgeW5FvaW)PpqmKvMrf&pA8oVPR%(G}*}`d4w}IRH?$j2GW;J=;g#`Ou9L~jap65Bw zIlmuai;K2c9|Z%21PTfKe+ih)POYF#R&Y$#Gl4Hk%@LB7c#?!=Il?Uj0 zN$RM8$c}@f!;C=^c&^D{FqZ2LM$%|XA&O~zBoc8%qfsn}!z>&Qhh#;WB!U+VFFBbX zaJyZhf0_EjfYa#|mSgg15S=#|jYlk2tI*WcjM}<7R900%5QLl;lw}!TgF(#B%wTG2 z5`Ldg4ljLs4#Hi13IEvTa>>6FWEt4k(tc7Dg&QpnM?k0YL6qM&VT|GZ^faEk zp5fKl=#;Fm-igt{zKn?sJ4ufA>)R_Tde59aM>a{yx@96B$Nc;}g269X3@u`HWd*TV z3<)`r#)*Q6lF}0Bbb6GPmBF;b1k;Y45JfSI$K&zf(ZdI9DYS6aJ34$N{eM!6)Y^W@ zR9$o3=4ge*ya$c-_4qhD3$Mq6fZvzir=nF;si&%`t%ccQg=Dj(_tPIfz#n)E&)6uw z%*|c&jt$)=v)NpvHC6_Xoj7Uacphuf2qyi0eEKw}MsGuGb@eVZTP!HnXpvMD4D>x+ z7#}V-k=@>5+E#9uZ?^7*&+A1js;Y}N6kZP~)o5XrBux5zSXvELrk;Sa9qRnZSaPRo zwmc3H(Pz)dU`^%^bOUrR4?eX=8B0?4#Q5O-Up;o9wXKK1T?3H2(bY=*iBBNOE_=s^ zZ~f|m3`TOa9RzVV0kq|>^EU=Iq!9JI85#1dp95KFo1?RXk#Yf`QvmdNnPCY3==3Ly z!<~tdp%?49a*jE>-7YFr>L8vv0Ja~D?FOh0U^)C)QtTQ**YVtE+fhFrrh6_~H~NA6M2^tF$Zc`}^0_rnM;pYDIG43kC`a6cX6- a1ik}hvJ^swQ|a{p0000Bkw8+O0i6TM1 zf>0vzVGVTc$!Ch5Y(F3ztcc3zxt} z=*-^Cd;9MD{yv`fdEecA_xD>xNmH&lPW zHUC1$ybnD|QcgxRb%AYX+)O*Ve&;tJ|A!^~r%sUkoN%{#?4t~2sgq;)OF0I#KiW`RbLQ7a_RG7!IV^|vZI`x|X4$%_ z(J5^$o6xpH{`lL&LYY-{HKz*(nN`${{Wz9dC-#qb}`{4sVWVzGIf=`zMa);-Aas+tiONO+AX|{fjuC zm964UzGXiyz<0YkrR!{3wrVM_5u;S>J* zaUWEaZ_C^nlLdRPl=?`-8-37MF?@!@p08(QWPCBl)IO?zVvej_Hcu8mRwd=5ic*e) zHffta=qo1@{IEp93lx5s{~6_@3ei_B?QNUoPwyO&Jv&;tx0Lbaqa?=+_8Jd$s7o8P zMVquuAM}N5a@vLY=OGREi@K3Rb30mIXmn&LA1l8*en@t2|A{m=t(KL`7fDU^OqugY zg;Z5eatiB)6pxECl%)=JX#-rp0(+xrJAun?oA_LDuo%8omaZNI{trhK=5_o4^I9?SKIff> z?>($@uGwcp2C@e%!`I;W3WrP!$DQGLSBu9b+)nZGEBNEE(0zD zE(0zDSAhY>Nf4q{#-q4#5|H5jTn1bQTn1bQTn1bQTn74vfwYp6lIsfk_rC!#fg2H{ zy@`eO62zm}2e%jHbNdF$rL7Vp-|bD^8!?04(ul5BAjUiwx#y*bF|5M*k0XX}E#eew zS!bKm2N}vDr(D9=uVJX^jI~|bTWWg2ms z(M#ZGsA>AXb-8l`F1=AreH@sN0dr4yy)xVv&l7zfL0J?H1TuR%C+2_wxA1!h=$%CQ zJmUVz#{H?K`~MORdaIMg(IQz{-vj1tJzU4h{HD79EY?FS?-_~aBBFWkz%_IL_&ZQi z?K@TWI&kgpL#+7wUB|#{9_#!U*D&t5@%wk_djHP*6mXBW4F9SBBmAe3C%Tt&z&s|d zkLAM#XLm4vfjD>ESg)P6L~Lbu7YecB{<@rT|4=COCERZt*Eq1|;wQJaAvBlc#K`eH=D6$g$V=bYhKRjvbjNB$mp_W3iTlALHKtG$>EF2Y2=k z$l3CFJ+8Fa$@Lw7V{f;%V?JU>=0@LobDzWCYkRlL!QE|6VV#^FM_;1+X-q%)cuJJ@{L=5Z@5s{Q_gzhHLx%L6P8@iT96|XICym&bmboA8ePm z55Ma0NuRwP2X#0Xv_V_1{Jh1nO&^0I+8Ovg88y^aQ}-Ky>)dC006URLKklV*%}>E| zq6zbI6!*1%bFDu(>3&%-XS%Fd_9JO}re3z-`&E9s+TONR_U`JRfc5$7T4CK~7iu4~F=z-7Q?z-7Q? Uz-7Q?z-7Q?z-7Q?p!W>?7mbQ9Z2$lO literal 0 HcmV?d00001 diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..e27c680 --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,59 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + --primary: 221.2 83.2% 53.3%; + --primary-foreground: 210 40% 98%; + --secondary: 210 40% 96%; + --secondary-foreground: 222.2 84% 4.9%; + --muted: 210 40% 96%; + --muted-foreground: 215.4 16.3% 46.9%; + --accent: 210 40% 96%; + --accent-foreground: 222.2 84% 4.9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 221.2 83.2% 53.3%; + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + --primary: 217.2 91.2% 59.8%; + --primary-foreground: 222.2 84% 4.9%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 224.3 76.3% 94.1%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..35bad08 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,36 @@ +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import "./globals.css"; + +const inter = Inter({ subsets: ["latin"] }); + +export const metadata: Metadata = { + title: "Lorebook Converter", + description: "Convert Janitor AI lorebook format to SillyTavern format with comprehensive editing capabilities", + icons: { + icon: [ + { url: '/favicon.ico' }, + { url: '/favicon-16x16.png', sizes: '16x16', type: 'image/png' }, + { url: '/favicon-32x32.png', sizes: '32x32', type: 'image/png' }, + ], + apple: [ + { url: '/apple-touch-icon.png' } + ], + other: [ + { url: '/android-chrome-192x192.png', sizes: '192x192', type: 'image/png' }, + { url: '/android-chrome-512x512.png', sizes: '512x512', type: 'image/png' }, + ], + }, +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + {children} + + ); +} \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 0000000..c24a5be --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,1053 @@ +"use client"; + +import { useState, useRef } from "react"; +import { Separator } from "@/components/ui/separator"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogDescription, +} from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { ChevronUp, ChevronDown, Upload, Download, Edit, Save, X, Copy, Trash2, RotateCcw, Clipboard } from "lucide-react"; +import { + CollapsibleContent, + Collapsible, + CollapsibleTrigger, +} from "@/components/ui/collapsible"; + +interface LorebookEntry { + uid: number; + key: string[]; + keysecondary: string[]; + comment: string; + content: string; + constant: boolean; + vectorized: boolean; + selective: boolean; + selectiveLogic: number; + addMemo: boolean; + order: number; + position: number; + disable: boolean; + excludeRecursion: boolean; + preventRecursion: boolean; + matchPersonaDescription: boolean; + matchCharacterDescription: boolean; + matchCharacterPersonality: boolean; + matchCharacterDepthPrompt: boolean; + matchScenario: boolean; + matchCreatorNotes: boolean; + delayUntilRecursion: boolean; + probability: number; + useProbability: boolean; + depth: number; + group: string; + groupOverride: boolean; + groupWeight: number; + scanDepth: number | null; + caseSensitive: boolean; + matchWholeWords: boolean; + useGroupScoring: boolean; + automationId: string; + role: null; + sticky: number; + cooldown: number; + delay: number; + displayIndex: number; + // Additional fields for comprehensive editing + filterToCharacters: string; + filterToGenerationTriggers: string; + excludeFromGeneration: boolean; +} + +interface ConvertedLorebook { + entries: { [key: string]: LorebookEntry }; +} + +export default function Home() { + const [isInstructionsOpen, setIsInstructionsOpen] = useState(false); + const [fileData, setFileData] = useState(null); + const [convertedData, setConvertedData] = useState(null); + const [originalFileName, setOriginalFileName] = useState(""); + const [editingEntry, setEditingEntry] = useState(null); + const [editDialogOpen, setEditDialogOpen] = useState(false); + const [editingEntryData, setEditingEntryData] = useState(null); + const [pasteDialogOpen, setPasteDialogOpen] = useState(false); + const [pasteText, setPasteText] = useState(""); + const fileInputRef = useRef(null); + + const handleFileUpload = (file: File) => { + if (!file.name.endsWith('.json')) { + alert('Please upload a JSON file'); + return; + } + + setOriginalFileName(file.name.replace('.json', '')); + + const reader = new FileReader(); + reader.onload = (e) => { + try { + const data = JSON.parse(e.target?.result as string); + setFileData(data); + const converted = convertJanitorToSillyTavern(data); + setConvertedData(converted); + } catch (err) { + alert('Invalid JSON file'); + setFileData(null); + setConvertedData(null); + } + }; + reader.readAsText(file); + }; + + const handleDrop = (e: React.DragEvent) => { + e.preventDefault(); + const files = e.dataTransfer.files; + if (files.length > 0) { + handleFileUpload(files[0]); + } + }; + + const handleDragOver = (e: React.DragEvent) => { + e.preventDefault(); + }; + + const convertJanitorToSillyTavern = (janitorData: any[]): ConvertedLorebook => { + const entries: { [key: string]: LorebookEntry } = {}; + + janitorData.forEach((entry, uid) => { + entries[uid.toString()] = { + uid: uid, + key: entry.key || [], + keysecondary: entry.keysecondary || [], + comment: entry.name || "Entry", + content: entry.content || "", + constant: entry.constant || false, + vectorized: false, + selective: true, + selectiveLogic: 0, + addMemo: true, + order: entry.insertion_order || 100, + position: 0, + disable: !entry.enabled, + excludeRecursion: true, + preventRecursion: true, + matchPersonaDescription: false, + matchCharacterDescription: false, + matchCharacterPersonality: false, + matchCharacterDepthPrompt: false, + matchScenario: false, + matchCreatorNotes: false, + delayUntilRecursion: false, + probability: entry.probability || 100, + useProbability: true, + depth: 4, + group: entry.inclusionGroupRaw || entry.category || "", + groupOverride: false, + groupWeight: entry.groupWeight || 100, + scanDepth: null, + caseSensitive: entry.case_sensitive || false, + matchWholeWords: entry.matchWholeWords !== undefined ? entry.matchWholeWords : true, + useGroupScoring: false, + automationId: "", + role: null, + sticky: 0, + cooldown: 0, + delay: 0, + displayIndex: uid, + filterToCharacters: "", + filterToGenerationTriggers: "", + excludeFromGeneration: false + }; + }); + + return { entries }; + }; + + const downloadLorebook = () => { + if (!convertedData) return; + + const blob = new Blob([JSON.stringify(convertedData, null, 2)], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `${originalFileName}_ST.json`; + a.click(); + URL.revokeObjectURL(url); + }; + + const openEditDialog = (entryId: string) => { + const entry = convertedData?.entries[entryId]; + if (entry) { + setEditingEntryData({ ...entry }); + setEditingEntry(entryId); + setEditDialogOpen(true); + } + }; + + const saveEntry = () => { + if (!editingEntryData || !editingEntry || !convertedData) return; + + setConvertedData({ + ...convertedData, + entries: { + ...convertedData.entries, + [editingEntry]: editingEntryData + } + }); + + setEditDialogOpen(false); + setEditingEntry(null); + setEditingEntryData(null); + }; + + const deleteEntry = (entryId: string) => { + if (!convertedData) return; + + const newEntries = { ...convertedData.entries }; + delete newEntries[entryId]; + + setConvertedData({ + ...convertedData, + entries: newEntries + }); + }; + + const addNewEntry = () => { + if (!convertedData) return; + + const newUid = Math.max(...Object.keys(convertedData.entries).map(Number)) + 1; + const newEntry: LorebookEntry = { + uid: newUid, + key: [], + keysecondary: [], + comment: "New Entry", + content: "", + constant: false, + vectorized: false, + selective: true, + selectiveLogic: 0, + addMemo: true, + order: 100, + position: 0, + disable: false, + excludeRecursion: true, + preventRecursion: true, + matchPersonaDescription: false, + matchCharacterDescription: false, + matchCharacterPersonality: false, + matchCharacterDepthPrompt: false, + matchScenario: false, + matchCreatorNotes: false, + delayUntilRecursion: false, + probability: 100, + useProbability: true, + depth: 4, + group: "", + groupOverride: false, + groupWeight: 100, + scanDepth: null, + caseSensitive: false, + matchWholeWords: true, + useGroupScoring: false, + automationId: "", + role: null, + sticky: 0, + cooldown: 0, + delay: 0, + displayIndex: newUid, + filterToCharacters: "", + filterToGenerationTriggers: "", + excludeFromGeneration: false + }; + + setConvertedData({ + ...convertedData, + entries: { + ...convertedData.entries, + [newUid.toString()]: newEntry + } + }); + }; + + const copyToClipboard = (text: string) => { + navigator.clipboard.writeText(text); + }; + + const clearLorebook = () => { + setFileData(null); + setConvertedData(null); + setOriginalFileName(""); + setEditingEntry(null); + setEditingEntryData(null); + setEditDialogOpen(false); + setPasteDialogOpen(false); + setPasteText(""); + if (fileInputRef.current) { + fileInputRef.current.value = ""; + } + }; + + const handlePasteData = () => { + try { + const data = JSON.parse(pasteText); + setFileData(data); + const converted = convertJanitorToSillyTavern(data); + setConvertedData(converted); + setOriginalFileName("pasted_lorebook"); + setPasteDialogOpen(false); + setPasteText(""); + } catch (err) { + alert('Invalid JSON data. Please check your paste content.'); + } + }; + + const openPasteDialog = () => { + setPasteText(""); + setPasteDialogOpen(true); + }; + + return ( +
+
+
+
+

Lorebook Converter

+

+ Convert Janitor AI lorebook format to SillyTavern format with editing capabilities +

+
+
+ + + + +
+

How to Use

+ + + +
+ +
+
    +
  1. + Upload your Janitor AI lorebook JSON file using the upload area below, or paste JSON data directly +
  2. +
  3. + The file will be automatically converted to SillyTavern format +
  4. +
  5. + Review and edit entries as needed using the edit buttons +
  6. +
  7. + Add new entries or delete existing ones if desired +
  8. +
  9. + Use "Clear & Upload New" to start over with a different lorebook +
  10. +
  11. + Download the converted lorebook when you're satisfied with the changes +
  12. +
+
+
+
+ + {!convertedData ? ( + + +
fileInputRef.current?.click()} + > + +

Upload Lorebook File

+

+ Click to upload or drag & drop your Janitor AI lorebook JSON file +

+
+ + +
+ { + const file = e.target.files?.[0]; + if (file) handleFileUpload(file); + }} + /> +
+
+
+ ) : ( +
+ + +
+
+

+ {Object.keys(convertedData.entries).length} Entries Converted +

+

+ From: {originalFileName}.json +

+
+
+ + + +
+
+
+
+ +
+ {Object.entries(convertedData.entries).map(([entryId, entry]) => ( + + + + + +
+
+
{entry.comment}
+
+ UID: {entry.uid} • Order: {entry.order} • + {entry.key.length > 0 ? ` Keys: ${entry.key.join(', ')}` : ' No keys'} +
+
+
+ + +
+
+
+ +
+ {entry.key.length > 0 && ( +
+

Primary Keywords

+
+ {entry.key.map((keyword, idx) => ( + + {keyword} + + ))} +
+
+ )} + + {entry.group && ( +
+

Group

+

{entry.group}

+
+ )} + +
+
+

Content

+ +
+
+                                {entry.content}
+                              
+
+ +
+
+ Constant: {entry.constant ? 'Yes' : 'No'} +
+
+ Selective: {entry.selective ? 'Yes' : 'No'} +
+
+ Disabled: {entry.disable ? 'Yes' : 'No'} +
+
+ Probability: {entry.probability}% +
+
+
+
+
+
+
+
+ ))} +
+
+ )} +
+ + + + + Edit Entry + + Modify the lorebook entry details below + + + + {editingEntryData && ( +
+ {/* Basic Info */} +
+
+ + setEditingEntryData({ + ...editingEntryData, + comment: e.target.value + })} + /> +
+
+ + setEditingEntryData({ + ...editingEntryData, + order: parseInt(e.target.value) || 0 + })} + /> +
+
+ + {/* Keywords */} +
+
+ + setEditingEntryData({ + ...editingEntryData, + key: e.target.value.split(',').map(k => k.trim()).filter(k => k) + })} + /> +
+
+ + setEditingEntryData({ + ...editingEntryData, + keysecondary: e.target.value.split(',').map(k => k.trim()).filter(k => k) + })} + /> +
+
+ + {/* Logic and Filters */} +
+
+ + +
+
+ + setEditingEntryData({ + ...editingEntryData, + scanDepth: e.target.value ? parseInt(e.target.value) : null + })} + /> +
+
+ + {/* Boolean Settings Row 1 */} +
+ + + +
+ + {/* Automation ID */} +
+ + setEditingEntryData({ + ...editingEntryData, + automationId: e.target.value + })} + /> +
+ + {/* Content */} +
+ +