From ed8a1cb4778035c4ab3d97c809189dadd918ae40 Mon Sep 17 00:00:00 2001 From: BiggerRain <15911122312@163.COM> Date: Thu, 18 Dec 2025 10:26:13 +0800 Subject: [PATCH] refactor: replace legacy components with shadcn/ui components (#1002) * chore: shadcn config * feat: add shadcn ui config * style: adjust styles * style: adjust styles * refactor: update style * style: adjust styles * style: adjust styles * style: adjust styles * style: adjust styles * refactor: update * refactor: update * refactor: update * refactor: update * style: adjust styles * style: adjust styles * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * style: web styles * refactor: update * style: web styles * style: web styles * refactor: update * refactor: update * refactor: update * chhore: add * chore: add * refactor: update * refactor: update * refactor: update * refactor: update * chore: update * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * chore: rename * refactor: update * refactor: update * chore: add * refactor: update * chore: update * chroe: up * refactor: update * refactor: update * chore: up * refactor: update * chore: up * feat: support for extracting css variables * chore: update * fix: fixed dark mode * refactor: update * refactor: update * refactor: update * refactor: update * docs: update release notes * style: adjust styles * style: adjust styles * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update --------- Co-authored-by: ayang <473033518@qq.com> --- .gitignore | 4 + .vscode/settings.json | 5 + docs/content.en/docs/release-notes/_index.md | 1 + package.json | 23 +- pnpm-lock.yaml | 1550 +++++++++++++---- postcss.config.js | 3 +- scripts/buildWebAfter.ts | 39 + src/api/axiosRequest.ts | 45 +- src/components/Assistant/AssistantItem.tsx | 19 +- src/components/Assistant/AssistantList.tsx | 74 +- src/components/Assistant/Chat.tsx | 2 +- src/components/Assistant/ChatHeader.tsx | 4 +- src/components/Assistant/ConnectPrompt.tsx | 2 +- src/components/Assistant/ServerList.tsx | 231 +-- src/components/Assistant/Splash.tsx | 2 +- src/components/AudioRecording/index.tsx | 10 +- src/components/ChatMessage/MessageActions.tsx | 10 +- src/components/Cloud/DataSourceItem.tsx | 2 +- src/components/Cloud/DataSourcesList.tsx | 2 +- src/components/Cloud/ServiceAuth.tsx | 4 +- src/components/Cloud/ServiceHeader.tsx | 10 +- src/components/Cloud/Sidebar.tsx | 2 +- src/components/Common/ApiDetails/index.tsx | 8 +- src/components/Common/ChatSwitch.tsx | 31 +- src/components/Common/Checkbox/index.tsx | 26 +- src/components/Common/Copyright/index.tsx | 2 +- src/components/Common/DeleteDialog.tsx | 125 +- .../Common/HistoryList/DeleteDialog.tsx | 121 +- .../Common/HistoryList/HistoryListContent.tsx | 5 +- .../Common/HistoryList/HistoryListItem.tsx | 145 +- src/components/Common/HistoryList/index.tsx | 25 +- src/components/Common/Icons/UniversalIcon.tsx | 2 +- src/components/Common/Pagination.tsx | 17 +- src/components/Common/PopoverInput.tsx | 5 +- src/components/Common/ScrollToBottom.tsx | 14 +- src/components/Common/Tooltip2.tsx | 38 +- src/components/Common/UI/Footer.tsx | 10 +- src/components/Common/UI/NoResults.tsx | 6 +- src/components/Common/UI/SettingsFooter.tsx | 23 +- src/components/Common/VisibleKey.tsx | 2 +- src/components/Search/AiOverview.tsx | 2 +- src/components/Search/AutoResizeTextarea.tsx | 9 +- src/components/Search/ContextMenu.tsx | 11 +- src/components/Search/DropdownListItem.tsx | 4 +- src/components/Search/ExtensionDetail.tsx | 2 +- src/components/Search/InputBox.tsx | 10 +- src/components/Search/InputControls.tsx | 6 +- src/components/Search/InputUpload.tsx | 73 +- src/components/Search/MCPPopover.tsx | 54 +- src/components/Search/Search.tsx | 2 +- src/components/Search/SearchIcons.tsx | 18 +- src/components/Search/SearchPopover.tsx | 52 +- src/components/SearchChat/index.tsx | 13 +- .../components/Selection/AddChatDialog.tsx | 76 +- .../components/Selection/ButtonsList.tsx | 79 +- .../Advanced/components/Selection/index.tsx | 4 +- .../Advanced/components/Shortcuts/index.tsx | 49 +- src/components/Settings/Advanced/index.tsx | 89 +- .../Extensions/components/Content/index.tsx | 7 +- .../components/Details/AiOverview/index.tsx | 6 +- .../components/Details/Applications/index.tsx | 34 +- .../Details/DirectoryScope/index.tsx | 8 +- .../components/Details/FileSearch/index.tsx | 15 +- .../components/Details/SharedAi/index.tsx | 43 +- .../Extensions/components/Details/index.tsx | 96 +- src/components/Settings/Extensions/index.tsx | 151 +- src/components/Settings/GeneralSettings.tsx | 36 +- src/components/Settings/SettingsInput.tsx | 14 +- src/components/Settings/SettingsPanel.tsx | 2 +- src/components/Settings/SettingsSelectPro.tsx | 19 +- src/components/Settings/SettingsToggle.tsx | 22 +- src/components/UpdateApp/index.tsx | 190 +- src/components/WebLogin/LoginButton.tsx | 7 +- src/components/WebLogin/RefreshButton.tsx | 9 +- src/components/WebLogin/UserAvatar.tsx | 2 +- src/components/WebLogin/index.tsx | 52 +- src/components/ui/button.tsx | 36 +- src/components/ui/checkbox.tsx | 25 + src/components/ui/dialog.tsx | 108 ++ src/components/ui/dropdown-menu.tsx | 78 + src/components/ui/input.tsx | 24 + src/components/ui/label.tsx | 21 + src/components/ui/multi-select.tsx | 97 ++ src/components/ui/popover.tsx | 43 + src/components/ui/select.tsx | 160 ++ src/components/ui/separator.tsx | 43 +- src/components/ui/slider.tsx | 27 + src/components/ui/switch.tsx | 27 + src/components/ui/tabs.tsx | 53 + src/constants/index.ts | 2 +- src/main.css | 301 ++-- src/main.tsx | 6 +- src/pages/settings/index.tsx | 137 +- src/pages/settings/shadcn-demo.tsx | 114 ++ src/pages/web/index.tsx | 6 +- src/routes/index.tsx | 6 +- src/routes/outlet.tsx | 17 +- src/routes/web.tsx | 30 + src/stores/selectionStore.ts | 25 +- src/web.css | 741 -------- tailwind.config.js | 131 +- tsup.config.ts | 215 ++- vite.config.ts | 13 +- 103 files changed, 3857 insertions(+), 2544 deletions(-) create mode 100644 scripts/buildWebAfter.ts create mode 100644 src/components/ui/checkbox.tsx create mode 100644 src/components/ui/dialog.tsx create mode 100644 src/components/ui/dropdown-menu.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/multi-select.tsx create mode 100644 src/components/ui/popover.tsx create mode 100644 src/components/ui/select.tsx create mode 100644 src/components/ui/slider.tsx create mode 100644 src/components/ui/switch.tsx create mode 100644 src/components/ui/tabs.tsx create mode 100644 src/pages/settings/shadcn-demo.tsx create mode 100644 src/routes/web.tsx delete mode 100644 src/web.css diff --git a/.gitignore b/.gitignore index a21ed95c..441d3763 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ dist-ssr *.local out src/components/web +SearchChatDemo/ +web.md # Editor directories and files # .vscode/* @@ -26,3 +28,5 @@ src/components/web *.sln *.sw? .env + +.trae \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index a2d168d4..e5c52966 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -37,15 +37,18 @@ "meval", "Minimizable", "msvc", + "njsproj", "nord", "nowrap", "nspanel", "nsstring", + "ntvs", "objc", "overscan", "partialize", "patchelf", "Quicklink", + "Quicklinks", "Raycast", "rehype", "reqwest", @@ -54,6 +57,7 @@ "rustup", "screenshotable", "serde", + "Shadcn", "swatinem", "tailwindcss", "tauri", @@ -61,6 +65,7 @@ "timedout", "titlebar", "tpddns", + "trae", "traptitech", "unlisten", "unlistener", diff --git a/docs/content.en/docs/release-notes/_index.md b/docs/content.en/docs/release-notes/_index.md index f21922c0..63d3c4ec 100644 --- a/docs/content.en/docs/release-notes/_index.md +++ b/docs/content.en/docs/release-notes/_index.md @@ -20,6 +20,7 @@ Information about release notes of Coco App is provided here. ### ✈️ Improvements +- refactor: replace legacy components with shadcn/ui components #1002 - chore: show error msg (not err code) when installing exts via deeplink fails #1007 - refactor: treat Applications and File Search as normal extensions #1012 diff --git a/package.json b/package.json index 4ad99546..af8ca1b8 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,10 @@ "build": "tsc && vite build", "build:web": "cross-env BUILD_TARGET=web tsc && cross-env BUILD_TARGET=web tsup --format esm", "publish:web": "cd out/search-chat && npm publish", - "publish:web:beta": "cd dist/search-chat && npm publish --tag beta", - "publish:web:alpha": "cd dist/search-chat && npm publish --tag alpha", - "publish:web:rc": "cd dist/search-chat && npm publish --tag rc", + "publish:web:beta": "cd out/search-chat && npm publish --tag beta", + "publish:web:alpha": "cd out/search-chat && npm publish --tag alpha", + "publish:web:rc": "cd out/search-chat && npm publish --tag rc", + "publish:web:otp": "cd out/search-chat && npm publish --access public --otp $NPM_OTP", "preview": "vite preview", "tauri": "tauri", "release": "release-it", @@ -18,10 +19,18 @@ "release-beta": "release-it --preRelease=beta --preReleaseBase=1" }, "dependencies": { - "@headlessui/react": "^2.2.2", "@infinilabs/custom-icons": "0.0.4", + "@radix-ui/react-checkbox": "^1.1.5", + "@radix-ui/react-dialog": "^1.1.4", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-popover": "^1.1.6", + "@radix-ui/react-select": "^2.1.4", "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.2.1", "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.1.3", + "@radix-ui/react-tabs": "^1.1.13", "@tauri-apps/api": "^2.5.0", "@tauri-apps/plugin-autostart": "~2.2.0", "@tauri-apps/plugin-clipboard-manager": "~2.3.2", @@ -77,6 +86,8 @@ "zustand": "^5.0.4" }, "devDependencies": { + "@tailwindcss/postcss": "^4.1.17", + "@tailwindcss/vite": "^4.0.0", "@tauri-apps/cli": "^2.5.0", "@types/dom-speech-recognition": "^0.0.4", "@types/lodash-es": "^4.17.12", @@ -93,11 +104,11 @@ "postcss": "^8.5.3", "release-it": "^18.1.2", "sass": "^1.87.0", - "tailwindcss": "^3.4.17", + "tailwindcss": "^4.0.0", "tsup": "^8.4.0", "tsx": "^4.19.4", "typescript": "^5.8.3", "vite": "^5.4.19" }, "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977" -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52c8c11e..ca9b3baf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,18 +8,42 @@ importers: .: dependencies: - '@headlessui/react': - specifier: ^2.2.2 - version: 2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@infinilabs/custom-icons': specifier: 0.0.4 version: 0.0.4(lucide-react@0.461.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-checkbox': + specifier: ^1.1.5 + version: 1.3.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': + specifier: ^1.1.4 + version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dropdown-menu': + specifier: ^2.1.16 + version: 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-label': + specifier: ^2.1.1 + version: 2.1.8(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': + specifier: ^1.1.6 + version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': + specifier: ^2.1.4 + version: 2.2.6(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.1.8 version: 1.1.8(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slider': + specifier: ^1.2.1 + version: 1.3.6(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.2.3 version: 1.2.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-switch': + specifier: ^1.1.3 + version: 1.2.6(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tabs': + specifier: ^1.1.13 + version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tauri-apps/api': specifier: ^2.5.0 version: 2.9.0 @@ -151,7 +175,7 @@ importers: version: 3.3.1 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.18) + version: 1.0.7(tailwindcss@4.1.17) tauri-plugin-fs-pro-api: specifier: ^2.4.0 version: 2.4.0 @@ -180,6 +204,12 @@ importers: specifier: ^5.0.4 version: 5.0.8(@types/react@18.3.26)(immer@10.2.0)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) devDependencies: + '@tailwindcss/postcss': + specifier: ^4.1.17 + version: 4.1.17 + '@tailwindcss/vite': + specifier: ^4.0.0 + version: 4.1.17(vite@5.4.21(@types/node@22.18.12)(lightningcss@1.30.2)(sass@1.93.2)(terser@5.40.0)) '@tauri-apps/cli': specifier: ^2.5.0 version: 2.9.1 @@ -209,7 +239,7 @@ importers: version: 1.8.8 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.7.0(vite@5.4.21(@types/node@22.18.12)(sass@1.93.2)(terser@5.40.0)) + version: 4.7.0(vite@5.4.21(@types/node@22.18.12)(lightningcss@1.30.2)(sass@1.93.2)(terser@5.40.0)) autoprefixer: specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) @@ -229,11 +259,11 @@ importers: specifier: ^1.87.0 version: 1.93.2 tailwindcss: - specifier: ^3.4.17 - version: 3.4.18 + specifier: ^4.0.0 + version: 4.1.17 tsup: specifier: ^8.4.0 - version: 8.5.0(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.7.1) + version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.7.1) tsx: specifier: ^4.19.4 version: 4.20.6 @@ -242,7 +272,7 @@ importers: version: 5.9.3 vite: specifier: ^5.4.19 - version: 5.4.21(@types/node@22.18.12)(sass@1.93.2)(terser@5.40.0) + version: 5.4.21(@types/node@22.18.12)(lightningcss@1.30.2)(sass@1.93.2)(terser@5.40.0) packages: @@ -678,22 +708,9 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.26.28': - resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@headlessui/react@2.2.9': - resolution: {integrity: sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==} - engines: {node: '>=10'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - react-dom: ^18 || ^19 || ^19.0.0-rc - '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} @@ -1039,6 +1056,51 @@ packages: resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} engines: {node: '>=12'} + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + 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 + + '@radix-ui/react-checkbox@1.3.3': + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} + 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 + + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + 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 + '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: @@ -1048,6 +1110,185 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + 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 + + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + 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 + + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} + 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 + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + 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 + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.1.8': + resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} + 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 + + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + 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 + + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + 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 + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + 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 + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + 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 + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + 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 + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + 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 + '@radix-ui/react-primitive@2.1.4': resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} peerDependencies: @@ -1061,6 +1302,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + 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 + + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + 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 + '@radix-ui/react-separator@1.1.8': resolution: {integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==} peerDependencies: @@ -1074,6 +1341,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-slider@1.3.6': + resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} + 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 + '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: @@ -1092,42 +1372,119 @@ packages: '@types/react': optional: true - '@react-aria/focus@3.20.2': - resolution: {integrity: sha512-Q3rouk/rzoF/3TuH6FzoAIKrl+kzZi9LHmr8S5EqLAOyP9TXIKG34x2j42dZsAhrw7TbF9gA8tBKwnCNH4ZV+Q==} + '@radix-ui/react-switch@1.2.6': + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@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 - '@react-aria/interactions@3.25.0': - resolution: {integrity: sha512-GgIsDLlO8rDU/nFn6DfsbP9rfnzhm8QFjZkB9K9+r+MTSCn7bMntiWQgMM+5O6BiA8d7C7x4zuN4bZtc0RBdXQ==} + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@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 - '@react-aria/ssr@3.9.8': - resolution: {integrity: sha512-lQDE/c9uTfBSDOjaZUJS8xP2jCKVk4zjQeIlCH90xaLhHDgbpCdns3xvFpJJujfj3nI4Ll9K7A+ONUBDCASOuw==} - engines: {node: '>= 12'} + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@react-aria/utils@3.28.2': - resolution: {integrity: sha512-J8CcLbvnQgiBn54eeEvQQbIOfBF3A1QizxMw9P4cl9MkeR03ug7RnjTIdJY/n2p7t59kLeAB3tqiczhcj+Oi5w==} + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@react-stately/flags@3.1.1': - resolution: {integrity: sha512-XPR5gi5LfrPdhxZzdIlJDz/B5cBf63l4q6/AzNqVWFKgd0QqY5LvWJftXkklaIUpKSJkIKQb8dphuZXDtkWNqg==} - - '@react-stately/utils@3.10.6': - resolution: {integrity: sha512-O76ip4InfTTzAJrg8OaZxKU4vvjMDOpfA/PGNOytiXwBbkct2ZeZwaimJ8Bt9W1bj5VsZ81/o/tW4BacbdDOMA==} + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@react-types/shared@3.29.0': - resolution: {integrity: sha512-IDQYu/AHgZimObzCFdNl1LpZvQW/xcfLt3v20sorl5qRucDVj4S9os98sVTZ4IRIBjmS+MkjqpR5E70xan7ooA==} + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + 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 + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} '@remix-run/router@1.23.0': resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} @@ -1247,17 +1604,98 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@tailwindcss/node@4.1.17': + resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==} - '@tanstack/react-virtual@3.13.12': - resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==} + '@tailwindcss/oxide-android-arm64@4.1.17': + resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.17': + resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.17': + resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.17': + resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.17': + resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.17': + resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.17': + resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.17': + resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==} + + '@tailwindcss/vite@4.1.17': + resolution: {integrity: sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/virtual-core@3.13.12': - resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} + vite: ^5.2.0 || ^6 || ^7 '@tauri-apps/api@2.0.0-alpha.6': resolution: {integrity: sha512-ZMOc3eu9amwvkC6M69h3hWt4/EsFaAXmtkiw4xd2LN59/lTb4ZQiVfq2QKlRcu1rj3n/Tcr7U30ZopvHwXBGIg==} @@ -1625,16 +2063,13 @@ packages: any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -1675,10 +2110,6 @@ packages: before-after-hook@3.0.2: resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - boxen@8.0.1: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} @@ -1728,10 +2159,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - camelcase@8.0.0: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} @@ -1772,10 +2199,6 @@ packages: chevrotain@11.0.3: resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1883,11 +2306,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2111,15 +2529,16 @@ packages: engines: {node: '>=0.10'} hasBin: true + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dompurify@3.2.5: resolution: {integrity: sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==} @@ -2153,6 +2572,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + entities@6.0.0: resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} @@ -2320,6 +2743,10 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -2349,10 +2776,6 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -2533,10 +2956,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -2631,8 +3050,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true joycon@3.1.1: @@ -2694,6 +3113,76 @@ packages: layout-base@2.0.1: resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -3006,10 +3495,6 @@ packages: node-releases@2.0.26: resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} @@ -3026,10 +3511,6 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3140,10 +3621,6 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -3160,30 +3637,6 @@ packages: points-on-path@0.2.1: resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - postcss-load-config@6.0.1: resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} engines: {node: '>= 18'} @@ -3202,16 +3655,6 @@ packages: yaml: optional: true - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -3297,6 +3740,26 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + 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 + react-router-dom@6.30.1: resolution: {integrity: sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==} engines: {node: '>=14.0.0'} @@ -3310,6 +3773,16 @@ packages: peerDependencies: react: '>=16.8' + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + 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 + react-window@1.8.11: resolution: {integrity: sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==} engines: {node: '>8.0.0'} @@ -3321,13 +3794,6 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -3571,9 +4037,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwind-merge@3.3.1: resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} @@ -3582,10 +4045,12 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.18: - resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@4.1.17: + resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} tauri-plugin-fs-pro-api@2.4.0: resolution: {integrity: sha512-SfXMQC3SClaHCzEfrQOeSgQvx+YrlfQQpbbtj1U9LJhRjhwpIsC71UqtzcI2J7aJTt5njD+7Oe8daa3mH0Eybg==} @@ -3758,20 +4223,37 @@ packages: resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + 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 + use-debounce@10.0.6: resolution: {integrity: sha512-C5OtPyhAZgVoteO9heXMTdW7v/IbFI+8bSVKYCJrSmiWWCLsbUxiBSp4t9v0hNBTGY97bT72ydDIDyGSFWfwXg==} engines: {node: '>= 16.0.0'} peerDependencies: react: '*' + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + 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 + use-sync-external-store@1.5.0: resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.1.0: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true @@ -4251,26 +4733,8 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@floating-ui/utils': 0.2.9 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - tabbable: 6.2.0 - '@floating-ui/utils@0.2.9': {} - '@headlessui/react@2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.20.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-virtual': 3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - use-sync-external-store: 1.5.0(react@18.3.1) - '@iarna/toml@2.2.5': {} '@iconify/types@2.0.0': {} @@ -4619,12 +5083,244 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.26)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.26 + '@radix-ui/react-context@1.1.2(@types/react@18.3.26)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.3.26)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-direction@1.1.1(@types/react@18.3.26)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.26)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-id@1.1.1(@types/react@18.3.26)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-label@2.1.8(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-menu@2.1.16(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.26)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.3.26)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-popover@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.3.26)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + '@radix-ui/react-primitive@2.1.4(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.2.4(@types/react@18.3.26)(react@18.3.1) @@ -4634,6 +5330,52 @@ snapshots: '@types/react': 18.3.26 '@types/react-dom': 18.3.7(@types/react@18.3.26) + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + + '@radix-ui/react-select@2.2.6(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.3.26)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + '@radix-ui/react-separator@1.1.8(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.4(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -4643,6 +5385,25 @@ snapshots: '@types/react': 18.3.26 '@types/react-dom': 18.3.7(@types/react@18.3.26) + '@radix-ui/react-slider@1.3.6(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) + '@radix-ui/react-slot@1.2.3(@types/react@18.3.26)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) @@ -4657,54 +5418,101 @@ snapshots: optionalDependencies: '@types/react': 18.3.26 - '@react-aria/focus@3.20.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.29.0(react@18.3.1) - '@swc/helpers': 0.5.17 - clsx: 2.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.26)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) - '@react-aria/interactions@3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/ssr': 3.9.8(react@18.3.1) - '@react-aria/utils': 3.28.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/flags': 3.1.1 - '@react-types/shared': 3.29.0(react@18.3.1) - '@swc/helpers': 0.5.17 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.26)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) - '@react-aria/ssr@3.9.8(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.26)(react@18.3.1)': dependencies: - '@swc/helpers': 0.5.17 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 - '@react-aria/utils@3.28.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.26)(react@18.3.1)': dependencies: - '@react-aria/ssr': 3.9.8(react@18.3.1) - '@react-stately/flags': 3.1.1 - '@react-stately/utils': 3.10.6(react@18.3.1) - '@react-types/shared': 3.29.0(react@18.3.1) - '@swc/helpers': 0.5.17 - clsx: 2.1.1 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.26)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.26)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.26)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.26)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.26)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.26)(react@18.3.1)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-use-size@1.1.1(@types/react@18.3.26)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.26)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.26 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + '@types/react-dom': 18.3.7(@types/react@18.3.26) - '@react-stately/flags@3.1.1': - dependencies: - '@swc/helpers': 0.5.17 - - '@react-stately/utils@3.10.6(react@18.3.1)': - dependencies: - '@swc/helpers': 0.5.17 - react: 18.3.1 - - '@react-types/shared@3.29.0(react@18.3.1)': - dependencies: - react: 18.3.1 + '@radix-ui/rect@1.1.1': {} '@remix-run/router@1.23.0': {} @@ -4776,17 +5584,81 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@swc/helpers@0.5.17': + '@tailwindcss/node@4.1.17': dependencies: - tslib: 2.8.1 + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.17 - '@tanstack/react-virtual@3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tailwindcss/oxide-android-arm64@4.1.17': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.17': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.17': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.17': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.17': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + optional: true + + '@tailwindcss/oxide@4.1.17': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.17 + '@tailwindcss/oxide-darwin-arm64': 4.1.17 + '@tailwindcss/oxide-darwin-x64': 4.1.17 + '@tailwindcss/oxide-freebsd-x64': 4.1.17 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.17 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.17 + '@tailwindcss/oxide-linux-x64-musl': 4.1.17 + '@tailwindcss/oxide-wasm32-wasi': 4.1.17 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.17 + + '@tailwindcss/postcss@4.1.17': dependencies: - '@tanstack/virtual-core': 3.13.12 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.17 + '@tailwindcss/oxide': 4.1.17 + postcss: 8.5.6 + tailwindcss: 4.1.17 - '@tanstack/virtual-core@3.13.12': {} + '@tailwindcss/vite@4.1.17(vite@5.4.21(@types/node@22.18.12)(lightningcss@1.30.2)(sass@1.93.2)(terser@5.40.0))': + dependencies: + '@tailwindcss/node': 4.1.17 + '@tailwindcss/oxide': 4.1.17 + tailwindcss: 4.1.17 + vite: 5.4.21(@types/node@22.18.12)(lightningcss@1.30.2)(sass@1.93.2)(terser@5.40.0) '@tauri-apps/api@2.0.0-alpha.6': {} @@ -5126,7 +5998,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.18.12)(sass@1.93.2)(terser@5.40.0))': + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.18.12)(lightningcss@1.30.2)(sass@1.93.2)(terser@5.40.0))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -5134,7 +6006,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.21(@types/node@22.18.12)(sass@1.93.2)(terser@5.40.0) + vite: 5.4.21(@types/node@22.18.12)(lightningcss@1.30.2)(sass@1.93.2)(terser@5.40.0) transitivePeerDependencies: - supports-color @@ -5182,15 +6054,12 @@ snapshots: any-promise@1.3.0: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - argparse@2.0.1: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + ast-types@0.13.4: dependencies: tslib: 2.8.1 @@ -5234,8 +6103,6 @@ snapshots: before-after-hook@3.0.2: {} - binary-extensions@2.3.0: {} - boxen@8.0.1: dependencies: ansi-align: 3.0.1 @@ -5296,8 +6163,6 @@ snapshots: callsites@3.1.0: {} - camelcase-css@2.0.1: {} - camelcase@8.0.0: {} caniuse-lite@1.0.30001717: {} @@ -5332,18 +6197,6 @@ snapshots: '@chevrotain/utils': 11.0.3 lodash-es: 4.17.21 - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -5436,8 +6289,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - cssesc@3.0.0: {} - csstype@3.1.3: {} cytoscape-cose-bilkent@4.1.0(cytoscape@3.32.0): @@ -5668,14 +6519,14 @@ snapshots: detect-libc@1.0.3: optional: true + detect-libc@2.1.2: {} + + detect-node-es@1.1.0: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - dompurify@3.2.5: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -5704,6 +6555,11 @@ snapshots: emoji-regex@9.2.2: {} + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + entities@6.0.0: {} env-paths@2.2.1: {} @@ -5917,6 +6773,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -5954,10 +6812,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - glob@10.4.5: dependencies: foreground-child: 3.3.1 @@ -6188,10 +7042,6 @@ snapshots: is-arrayish@0.2.1: {} - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -6263,7 +7113,7 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.7: {} + jiti@2.6.1: {} joycon@3.1.1: {} @@ -6309,6 +7159,55 @@ snapshots: layout-base@2.0.1: {} + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -6841,8 +7740,6 @@ snapshots: node-releases@2.0.26: {} - normalize-path@3.0.0: {} - normalize-range@0.1.2: {} npm-run-path@5.3.0: @@ -6856,8 +7753,6 @@ snapshots: object-assign@4.1.1: {} - object-hash@3.0.0: {} - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -6986,8 +7881,6 @@ snapshots: picomatch@4.0.2: {} - pify@2.3.0: {} - pirates@4.0.7: {} pkg-types@1.3.1: @@ -7009,44 +7902,15 @@ snapshots: path-data-parser: 0.1.0 points-on-curve: 0.2.0 - postcss-import@15.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.10 - - postcss-js@4.0.1(postcss@8.5.6): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.6 - - postcss-load-config@4.0.2(postcss@8.5.6): - dependencies: - lilconfig: 3.1.3 - yaml: 2.7.1 - optionalDependencies: - postcss: 8.5.6 - - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.7.1): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.7.1): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 1.21.7 + jiti: 2.6.1 postcss: 8.5.6 tsx: 4.20.6 yaml: 2.7.1 - postcss-nested@6.2.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - postcss-value-parser@4.2.0: {} postcss@8.5.6: @@ -7140,6 +8004,25 @@ snapshots: react-refresh@0.17.0: {} + react-remove-scroll-bar@2.3.8(@types/react@18.3.26)(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.3(@types/react@18.3.26)(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.26 + + react-remove-scroll@2.7.2(@types/react@18.3.26)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.8(@types/react@18.3.26)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.26)(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@18.3.26)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.3.26)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.26 + react-router-dom@6.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@remix-run/router': 1.23.0 @@ -7152,6 +8035,14 @@ snapshots: '@remix-run/router': 1.23.0 react: 18.3.1 + react-style-singleton@2.2.3(@types/react@18.3.26)(react@18.3.1): + dependencies: + get-nonce: 1.0.1 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.26 + react-window@1.8.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.27.1 @@ -7163,14 +8054,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - readdirp@4.1.2: {} rechoir@0.6.2: @@ -7489,40 +8372,15 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tabbable@6.2.0: {} - tailwind-merge@3.3.1: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.18): + tailwindcss-animate@1.0.7(tailwindcss@4.1.17): dependencies: - tailwindcss: 3.4.18 + tailwindcss: 4.1.17 - tailwindcss@3.4.18: - 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.3 - 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.5.6 - postcss-import: 15.1.0(postcss@8.5.6) - postcss-js: 4.0.1(postcss@8.5.6) - postcss-load-config: 4.0.2(postcss@8.5.6) - postcss-nested: 6.2.0(postcss@8.5.6) - postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node + tailwindcss@4.1.17: {} + + tapable@2.3.0: {} tauri-plugin-fs-pro-api@2.4.0: dependencies: @@ -7589,7 +8447,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.7.1): + tsup@8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.7.1): dependencies: bundle-require: 5.1.0(esbuild@0.25.4) cac: 6.7.14 @@ -7600,7 +8458,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.7.1) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.7.1) resolve-from: 5.0.0 rollup: 4.40.2 source-map: 0.8.0-beta.0 @@ -7714,15 +8572,29 @@ snapshots: url-join@5.0.0: {} + use-callback-ref@1.3.3(@types/react@18.3.26)(react@18.3.1): + dependencies: + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.26 + use-debounce@10.0.6(react@18.3.1): dependencies: react: 18.3.1 + use-sidecar@1.1.3(@types/react@18.3.26)(react@18.3.1): + dependencies: + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.26 + use-sync-external-store@1.5.0(react@18.3.1): dependencies: react: 18.3.1 - - util-deprecate@1.0.2: {} + optional: true uuid@11.1.0: {} @@ -7741,7 +8613,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@5.4.21(@types/node@22.18.12)(sass@1.93.2)(terser@5.40.0): + vite@5.4.21(@types/node@22.18.12)(lightningcss@1.30.2)(sass@1.93.2)(terser@5.40.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 @@ -7749,6 +8621,7 @@ snapshots: optionalDependencies: '@types/node': 22.18.12 fsevents: 2.3.3 + lightningcss: 1.30.2 sass: 1.93.2 terser: 5.40.0 @@ -7829,7 +8702,8 @@ snapshots: yallist@3.1.1: {} - yaml@2.7.1: {} + yaml@2.7.1: + optional: true yargs-parser@21.1.1: {} diff --git a/postcss.config.js b/postcss.config.js index 2e7af2b7..06f7ee50 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,7 @@ export default { plugins: { - tailwindcss: {}, + // Tailwind v4 PostCSS plugin has moved to @tailwindcss/postcss + '@tailwindcss/postcss': {}, autoprefixer: {}, }, } diff --git a/scripts/buildWebAfter.ts b/scripts/buildWebAfter.ts new file mode 100644 index 00000000..923e9690 --- /dev/null +++ b/scripts/buildWebAfter.ts @@ -0,0 +1,39 @@ +import { readFileSync, writeFileSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const extractCssVars = () => { + const filePath = join(__dirname, "../out/search-chat/index.css"); + + const cssContent = readFileSync(filePath, "utf-8"); + + const vars: Record = {}; + + const propertyBlockRegex = /@property\s+(--[\w-]+)\s*\{([\s\S]*?)\}/g; + + let match: RegExpExecArray | null; + + while ((match = propertyBlockRegex.exec(cssContent))) { + const [, varName, body] = match; + + const initialValueMatch = /initial-value\s*:\s*([^;]+);/.exec(body); + + if (initialValueMatch) { + vars[varName] = initialValueMatch[1].trim(); + } + } + + const cssVarsBlock = + `.coco-container {\n` + + Object.entries(vars) + .map(([k, v]) => ` ${k}: ${v};`) + .join("\n") + + `\n}\n`; + + writeFileSync(filePath, `${cssContent}\n${cssVarsBlock}`, "utf-8"); +}; + +extractCssVars(); diff --git a/src/api/axiosRequest.ts b/src/api/axiosRequest.ts index 45ab0453..0b9dded9 100644 --- a/src/api/axiosRequest.ts +++ b/src/api/axiosRequest.ts @@ -12,7 +12,7 @@ import { handleNetworkError, } from "./tools"; -type Fn = (data: FcResponse) => unknown; +type Fn = (data: FcResponse) => unknown; interface IAnyObj { [index: string]: unknown; @@ -85,8 +85,26 @@ export const Get = ( new Promise((resolve) => { const appStore = JSON.parse(localStorage.getItem("app-store") || "{}"); - let baseURL = appStore.state?.endpoint_http; - if (!baseURL || baseURL === "undefined") { + // In Vite dev, prefer using the proxy by keeping requests relative + const isDev = (import.meta as any).env?.DEV === true; + const PROXY_PREFIXES: readonly string[] = [ + "account", + "chat", + "query", + "connector", + "integration", + "assistant", + "datasource", + "settings", + "mcp_server", + ]; + const shouldProxy = + isDev && + url.startsWith("/") && + PROXY_PREFIXES.some((p) => url.startsWith(`/${p}`)); + + let baseURL: string = appStore.state?.endpoint_http as string; + if (!baseURL || baseURL === "undefined" || shouldProxy) { baseURL = ""; } @@ -117,8 +135,25 @@ export const Post = ( return new Promise((resolve) => { const appStore = JSON.parse(localStorage.getItem("app-store") || "{}"); - let baseURL = appStore.state?.endpoint_http; - if (!baseURL || baseURL === "undefined") { + const isDev = (import.meta as any).env?.DEV === true; + const PROXY_PREFIXES: readonly string[] = [ + "account", + "chat", + "query", + "connector", + "integration", + "assistant", + "datasource", + "settings", + "mcp_server", + ]; + const shouldProxy = + isDev && + url.startsWith("/") && + PROXY_PREFIXES.some((p) => url.startsWith(`/${p}`)); + + let baseURL: string = appStore.state?.endpoint_http as string; + if (!baseURL || baseURL === "undefined" || shouldProxy) { baseURL = ""; } diff --git a/src/components/Assistant/AssistantItem.tsx b/src/components/Assistant/AssistantItem.tsx index ac8ba377..0687252d 100644 --- a/src/components/Assistant/AssistantItem.tsx +++ b/src/components/Assistant/AssistantItem.tsx @@ -41,15 +41,20 @@ const AssistantItem = memo( )} onClick={onClick} > -
- {_source?.icon?.startsWith("font_") ? ( - + {_source?.icon?.startsWith("font_") ? ( + ) : ( - {name} + {name} )} -
-
+
{_source?.name || "-"}
@@ -67,4 +72,4 @@ const AssistantItem = memo( ) ); -export default AssistantItem; \ No newline at end of file +export default AssistantItem; diff --git a/src/components/Assistant/AssistantList.tsx b/src/components/Assistant/AssistantList.tsx index 278685aa..6b677b0a 100644 --- a/src/components/Assistant/AssistantList.tsx +++ b/src/components/Assistant/AssistantList.tsx @@ -1,8 +1,11 @@ import { useState, useRef, useCallback, useEffect } from "react"; import { ChevronDownIcon, RefreshCw } from "lucide-react"; import { useTranslation } from "react-i18next"; -import { isNil } from "lodash-es"; -import { Popover, PopoverButton, PopoverPanel } from "@headlessui/react"; +import { + Popover, + PopoverTrigger, + PopoverContent, +} from "@/components/ui/popover"; import { useDebounce, useKeyPress, usePagination } from "ahooks"; import clsx from "clsx"; @@ -17,6 +20,7 @@ import { AssistantFetcher } from "./AssistantFetcher"; import AssistantItem from "./AssistantItem"; import Pagination from "@/components/Common/Pagination"; import { useSearchStore } from "@/stores/searchStore"; +import { Button } from "../ui/button"; interface AssistantListProps { assistantIDs?: string[]; @@ -83,6 +87,7 @@ export function AssistantList({ assistantIDs = [] }: AssistantListProps) { const [highlightIndex, setHighlightIndex] = useState(-1); const [isKeyboardActive, setIsKeyboardActive] = useState(false); + const [open, setOpen] = useState(false); useEffect(() => { const targetId = askAiAssistantId ?? targetAssistantId; @@ -105,7 +110,7 @@ export function AssistantList({ assistantIDs = [] }: AssistantListProps) { useKeyPress( ["uparrow", "downarrow", "enter"], (event, key) => { - const isClose = isNil(popoverButtonRef.current?.dataset["open"]); + const isClose = !open; if (isClose) return; @@ -161,26 +166,29 @@ export function AssistantList({ assistantIDs = [] }: AssistantListProps) { }, []); return ( -
- - + { + setOpen(v); + }} + > + -
- {currentAssistant?._source?.icon?.startsWith("font_") ? ( - - ) : ( - {t("assistant.message.logo")} - )} -
+ {currentAssistant?._source?.icon?.startsWith("font_") ? ( + + ) : ( + {t("assistant.message.logo")} + )}
{currentAssistant?._source?.name || "Coco AI"}
@@ -190,12 +198,14 @@ export function AssistantList({ assistantIDs = [] }: AssistantListProps) { popoverButtonRef.current?.click(); }} > - + -
+ -
@@ -203,9 +213,11 @@ export function AssistantList({ assistantIDs = [] }: AssistantListProps) { {t("assistant.popover.title")}({pagination.total})
- +
{ + className="w-full h-8" + onChange={(event: React.ChangeEvent) => { setKeyword(event.target.value); }} /> @@ -272,7 +284,7 @@ export function AssistantList({ assistantIDs = [] }: AssistantListProps) {
)} - +
); diff --git a/src/components/Assistant/Chat.tsx b/src/components/Assistant/Chat.tsx index 5678a96d..acde0046 100644 --- a/src/components/Assistant/Chat.tsx +++ b/src/components/Assistant/Chat.tsx @@ -388,7 +388,7 @@ const ChatAI = memo(
- + )}
) : ( - + )} ); diff --git a/src/components/Assistant/ConnectPrompt.tsx b/src/components/Assistant/ConnectPrompt.tsx index ce59a7ff..6eb1873c 100644 --- a/src/components/Assistant/ConnectPrompt.tsx +++ b/src/components/Assistant/ConnectPrompt.tsx @@ -28,7 +28,7 @@ const ConnectPrompt = () => {

{t("assistant.chat.connect_tip")}

- + +
+
+

+ {t("assistant.chat.servers")} +

+
+ + +
-
-
- {list.length > 0 ? ( - list.map((server) => ( -
switchServer(server)} - className={`w-full flex items-center justify-between gap-1 p-2 rounded-lg transition-colors whitespace-nowrap +
+ {list.length > 0 ? ( + list.map((server) => ( +
switchServer(server)} + className={`w-full flex items-center justify-between gap-1 p-2 rounded-lg transition-colors whitespace-nowrap ${ currentService?.id === server.id || highlightId === server.id - ? "bg-gray-100 dark:bg-gray-800" - : "hover:bg-gray-50 dark:hover:bg-gray-800/50" + ? "bg-muted" + : "hover:bg-muted" }`} - > -
- {server.name} { - const target = e.target as HTMLImageElement; - target.src = logoImg; - }} - /> -
-
- {server.name} + > +
+ {server.name} { + const target = e.target as HTMLImageElement; + target.src = logoImg; + }} + /> +
+
+ {server.name} +
+
+ {t("assistant.chat.aiAssistant")}:{" "} + {server.stats?.assistant_count || 1} +
-
- {t("assistant.chat.aiAssistant")}:{" "} - {server.stats?.assistant_count || 1} +
+
+ +
+ {currentService?.id === server.id && ( + + + + )}
-
- -
- {currentService?.id === server.id && ( - - - - )} -
-
+ )) + ) : ( +
+ +

+ {t("assistant.chat.noServers")} +

+
- )) - ) : ( -
- -

- {t("assistant.chat.noServers")} -

- -
- )} + )} +
-
- - + + +
); -} \ No newline at end of file +} diff --git a/src/components/Assistant/Splash.tsx b/src/components/Assistant/Splash.tsx index 16c55fdd..2ca9458c 100644 --- a/src/components/Assistant/Splash.tsx +++ b/src/components/Assistant/Splash.tsx @@ -122,7 +122,7 @@ const Splash = ({ assistantIDs = [], startPage }: SplashProps) => { return (
  • { setCurrentAssistant(item); diff --git a/src/components/AudioRecording/index.tsx b/src/components/AudioRecording/index.tsx index 1fecd72e..d44f241b 100644 --- a/src/components/AudioRecording/index.tsx +++ b/src/components/AudioRecording/index.tsx @@ -34,7 +34,7 @@ const AudioRecording: FC = (props) => { const state = useReactive({ ...INITIAL_STATE }); const containerRef = useRef(null); const recordRef = useRef(); - const { withVisibility, addError } = useAppStore(); + const { addError } = useAppStore(); const { currentService } = useConnectStore(); const { wavesurfer } = useWavesurfer({ @@ -146,7 +146,7 @@ const AudioRecording: FC = (props) => { }; const startRecording = async () => { - await withVisibility(checkPermission); + await checkPermission(); state.isRecording = true; recordRef.current?.startRecording(); }; @@ -173,9 +173,9 @@ const AudioRecording: FC = (props) => {
    @@ -184,7 +184,7 @@ const AudioRecording: FC = (props) => { className={clsx( "flex items-center justify-center size-6 bg-white dark:bg-black rounded-full transition cursor-pointer", { - "!cursor-not-allowed opacity-50": state.converting, + "cursor-not-allowed! opacity-50": state.converting, } )} onClick={() => resetState()} diff --git a/src/components/ChatMessage/MessageActions.tsx b/src/components/ChatMessage/MessageActions.tsx index 6f58c40f..20347d1d 100644 --- a/src/components/ChatMessage/MessageActions.tsx +++ b/src/components/ChatMessage/MessageActions.tsx @@ -107,7 +107,7 @@ export const MessageActions = ({ - + {t("deleteDialog.button.cancel")} + + - + - -
    - -
    + {t("deleteDialog.button.delete")} + + +
  • + ); }; diff --git a/src/components/Common/HistoryList/DeleteDialog.tsx b/src/components/Common/HistoryList/DeleteDialog.tsx index 08534127..3debdc00 100644 --- a/src/components/Common/HistoryList/DeleteDialog.tsx +++ b/src/components/Common/HistoryList/DeleteDialog.tsx @@ -1,10 +1,11 @@ import { - Button, - Description, Dialog, - DialogPanel, + DialogContent, + DialogHeader, DialogTitle, -} from "@headlessui/react"; + DialogDescription, +} from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; import { useTranslation } from "react-i18next"; import VisibleKey from "@/components/Common/VisibleKey"; @@ -36,69 +37,63 @@ const DeleteDialog = ({ }; return ( - setIsOpen(false)} - className="relative z-1000" - > -
    - -
    - - {t("history_list.delete_modal.title")} - - - {t("history_list.delete_modal.description", { - replace: [ - active?._source?.title || - active?._source?.message || - active?._id, - ], - })} - -
    + + + + + {t("history_list.delete_modal.title")} + + + {t("history_list.delete_modal.description", { + replace: [ + active?._source?.title || + active?._source?.message || + active?._id, + ], + })} + + -
    - setIsOpen(false)} +
    + { + setIsOpen(false); + }} + > + - + {t("history_list.delete_modal.button.cancel")} + + - + - -
    - -
    + {t("history_list.delete_modal.button.delete")} + + +
    +
    ); }; diff --git a/src/components/Common/HistoryList/HistoryListContent.tsx b/src/components/Common/HistoryList/HistoryListContent.tsx index 29e16605..847cca62 100644 --- a/src/components/Common/HistoryList/HistoryListContent.tsx +++ b/src/components/Common/HistoryList/HistoryListContent.tsx @@ -113,7 +113,8 @@ const HistoryListContent: FC = ({ const scrollToElement = useCallback( (elementId: string, isKeyboardNav: boolean) => { if (!listRef.current) return; - if (typeof window === 'undefined' || typeof document === 'undefined') return; + if (typeof window === "undefined" || typeof document === "undefined") + return; const element = listRef.current.querySelector(`#${elementId}`); if (!element) return; @@ -123,7 +124,7 @@ const HistoryListContent: FC = ({ const isVisible = rect.top >= 0 && rect.bottom <= - (window.innerHeight || document.documentElement.clientHeight); + (window.innerHeight || document.documentElement.clientHeight); // Only scroll if element is not visible if (!isVisible) { diff --git a/src/components/Common/HistoryList/HistoryListItem.tsx b/src/components/Common/HistoryList/HistoryListItem.tsx index e731827d..1313dc21 100644 --- a/src/components/Common/HistoryList/HistoryListItem.tsx +++ b/src/components/Common/HistoryList/HistoryListItem.tsx @@ -1,10 +1,16 @@ -import { FC, useRef, useCallback, useState } from "react"; -import { Input, Popover, PopoverButton, PopoverPanel } from "@headlessui/react"; +import { FC, useRef, useCallback, useState, useEffect } from "react"; import { Ellipsis } from "lucide-react"; import clsx from "clsx"; import { useTranslation } from "react-i18next"; import { Pencil, Trash2 } from "lucide-react"; +import { + Popover, + PopoverTrigger, + PopoverContent, + PopoverPortal, +} from "@/components/ui/popover"; +import { Input } from "@/components/ui/input"; import type { Chat } from "@/types/chat"; import VisibleKey from "../VisibleKey"; @@ -31,9 +37,11 @@ const HistoryListItem: FC = ({ const moreButtonRef = useRef(null); const { _id, _source } = item; const title = _source?.title ?? _id; - const isActive = item._id === active?._id || item._id === highlightId; + const isSelected = item._id === active?._id; + const isHovered = item._id === highlightId; const [isEdit, setIsEdit] = useState(false); + const [open, setOpen] = useState(false); const onContextMenu = useCallback( (e: React.MouseEvent) => { @@ -72,24 +80,34 @@ const HistoryListItem: FC = ({ }, ]; + useEffect(() => { + if (!(isSelected || isHovered) || isEdit) { + setOpen(false); + } + }, [isSelected, isHovered, isEdit]); + return (
  • { - if (!isActive) { + if (!isSelected) { setIsEdit(false); } onSelect(item); }} onMouseEnter={onMouseEnter} + onMouseLeave={() => { + setOpen(false); + }} onContextMenu={onContextMenu} >
    = ({ />
    - {isEdit && isActive ? ( + {isEdit && isSelected ? ( { if (event.key !== "Enter") return; @@ -128,7 +146,7 @@ const HistoryListItem: FC = ({ )}
    - {isActive && !isEdit && ( + {!isEdit && isSelected && ( = ({ /> )} - - {isActive && !isEdit && ( - - { - moreButtonRef.current?.click(); - }} - > - - - - )} - - { - event.stopPropagation(); + + { + e.stopPropagation(); + setOpen((prev) => !prev); }} > - {menuItems.map((menuItem) => { - const { - label, - icon: Icon, - shortcut, - iconColor, - onClick, - } = menuItem; + { + moreButtonRef.current?.click(); + }} + > + + + - return ( - - ); - })} - + return ( + + ); + })} + +
    diff --git a/src/components/Common/HistoryList/index.tsx b/src/components/Common/HistoryList/index.tsx index 4e5cc88c..6dccc0a9 100644 --- a/src/components/Common/HistoryList/index.tsx +++ b/src/components/Common/HistoryList/index.tsx @@ -1,4 +1,4 @@ -import { Input } from "@headlessui/react"; +import { Input } from "@/components/ui/input"; import { debounce } from "lodash-es"; import { FC, useMemo, useRef, useState } from "react"; import clsx from "clsx"; @@ -9,6 +9,7 @@ import VisibleKey from "../VisibleKey"; import { Chat } from "@/types/chat"; import { closeHistoryPanel } from "@/utils"; import HistoryListContent from "./HistoryListContent"; +import { Button } from "@/components/ui/button"; interface HistoryListProps { historyPanelId?: string; @@ -57,21 +58,21 @@ const HistoryList: FC = (props) => { "flex flex-col h-screen text-sm bg-[#F3F4F6] dark:bg-[#1F2937]" )} > -
    -
    +
    +
    { searchInputRef.current?.focus(); }} > - + { debouncedSearch(event.target.value); @@ -79,18 +80,20 @@ const HistoryList: FC = (props) => { />
    -
    -
    +
    @@ -104,10 +107,10 @@ const HistoryList: FC = (props) => {
    {historyPanelId && ( -
    +
    diff --git a/src/components/Common/Icons/UniversalIcon.tsx b/src/components/Common/Icons/UniversalIcon.tsx index 206bd827..240cd91d 100644 --- a/src/components/Common/Icons/UniversalIcon.tsx +++ b/src/components/Common/Icons/UniversalIcon.tsx @@ -41,7 +41,7 @@ function UniversalIcon({ icon, defaultIcon = File, appIcon = false, - className = "w-5 h-5 flex-shrink-0", + className = "w-5 h-5 shrink-0", onClick = () => {}, wrapWithIconWrapper = true, }: UniversalIconProps) { diff --git a/src/components/Common/Pagination.tsx b/src/components/Common/Pagination.tsx index 67657b8d..cf217691 100644 --- a/src/components/Common/Pagination.tsx +++ b/src/components/Common/Pagination.tsx @@ -1,6 +1,7 @@ import { ChevronLeft, ChevronRight } from "lucide-react"; import VisibleKey from "./VisibleKey"; +import { cn } from "@/lib/utils"; interface PaginationProps { current: number; @@ -19,10 +20,15 @@ function Pagination({ }: PaginationProps) { return (
    - +
    @@ -30,7 +36,12 @@ function Pagination({
    - +
    ); diff --git a/src/components/Common/PopoverInput.tsx b/src/components/Common/PopoverInput.tsx index cfec222f..50731949 100644 --- a/src/components/Common/PopoverInput.tsx +++ b/src/components/Common/PopoverInput.tsx @@ -1,4 +1,5 @@ -import { Input, InputProps } from "@headlessui/react"; +import type { InputProps } from "@/components/ui/input"; +import { Input } from "@/components/ui/input"; import { useKeyPress } from "ahooks"; import { forwardRef, useImperativeHandle, useRef } from "react"; @@ -29,7 +30,7 @@ const PopoverInput = forwardRef((props, ref) => { } ); - return ; + return ; }); export default PopoverInput; diff --git a/src/components/Common/ScrollToBottom.tsx b/src/components/Common/ScrollToBottom.tsx index 278d22dd..cac47417 100644 --- a/src/components/Common/ScrollToBottom.tsx +++ b/src/components/Common/ScrollToBottom.tsx @@ -1,20 +1,20 @@ import { RefObject } from "react"; import clsx from "clsx"; import { ArrowDown } from "lucide-react"; +import { Button } from "../ui/button"; interface ScrollToBottomProps { scrollRef: RefObject; isAtBottom: boolean; } -const ScrollToBottom = ({ - scrollRef, - isAtBottom, -}: ScrollToBottomProps) => { +const ScrollToBottom = ({ scrollRef, isAtBottom }: ScrollToBottomProps) => { return ( - + ); }; diff --git a/src/components/Common/Tooltip2.tsx b/src/components/Common/Tooltip2.tsx index 7199711a..35305ecc 100644 --- a/src/components/Common/Tooltip2.tsx +++ b/src/components/Common/Tooltip2.tsx @@ -1,40 +1,38 @@ -import { - Popover, - PopoverButton, - PopoverPanel, - PopoverPanelProps, -} from "@headlessui/react"; +import { FC, ReactNode } from "react"; import { useBoolean } from "ahooks"; import clsx from "clsx"; -import { FC, ReactNode } from "react"; - -interface Tooltip2Props extends PopoverPanelProps { +import { + Popover, + PopoverTrigger, + PopoverContent, +} from "@/components/ui/popover"; +interface Tooltip2Props { content: string; children: ReactNode; + className?: string; } const Tooltip2: FC = (props) => { - const { content, children, anchor = "top", ...rest } = props; + const { content, children, className } = props; const [visible, { setTrue, setFalse }] = useBoolean(false); return ( - + {children} - - + {content} - + ); }; diff --git a/src/components/Common/UI/Footer.tsx b/src/components/Common/UI/Footer.tsx index f6744759..6418cacd 100644 --- a/src/components/Common/UI/Footer.tsx +++ b/src/components/Common/UI/Footer.tsx @@ -71,7 +71,7 @@ export default function Footer({ setIsPinnedWeb }: FooterProps) {
    {selectedExtension.name}
    @@ -81,7 +81,7 @@ export default function Footer({ setIsPinnedWeb }: FooterProps) { if (visibleExtensionStore) { return (
    - + Extension Store
    ); @@ -100,7 +100,7 @@ export default function Footer({ setIsPinnedWeb }: FooterProps) { {hasUpdate ? (
    setVisible(true)}> {t("search.footer.updateAvailable")} - +
    ) : ( sourceData?.source?.name || @@ -117,7 +117,7 @@ export default function Footer({ setIsPinnedWeb }: FooterProps) {
    ) : ( - + )}
    diff --git a/src/components/Common/UI/NoResults.tsx b/src/components/Common/UI/NoResults.tsx index 3068c7e4..a9691c10 100644 --- a/src/components/Common/UI/NoResults.tsx +++ b/src/components/Common/UI/NoResults.tsx @@ -37,7 +37,7 @@ export const NoResults = () => {
    - +
    ); @@ -54,7 +54,7 @@ export const NoResults = () => { { {formatKey(modifierKey)} - + {modeSwitch}
    diff --git a/src/components/Common/UI/SettingsFooter.tsx b/src/components/Common/UI/SettingsFooter.tsx index e33c16a8..cb94248c 100644 --- a/src/components/Common/UI/SettingsFooter.tsx +++ b/src/components/Common/UI/SettingsFooter.tsx @@ -1,13 +1,16 @@ -import { Menu, MenuButton } from "@headlessui/react"; +import { + DropdownMenu, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; import logoImg from "@/assets/icon.svg"; const Footer = () => { return ( -
    +
    - - + + { Coco {/* */} - + {/*
    @@ -27,7 +30,7 @@ const Footer = () => { active ? "bg-gray-100 dark:bg-gray-700" : "text-gray-900 dark:text-gray-100" - } group flex w-full items-center rounded-[6px] px-3 py-2 text-sm`} + } group flex w-full items-center rounded-md px-3 py-2 text-sm`} > Home @@ -41,7 +44,7 @@ const Footer = () => { active ? "bg-gray-100 dark:bg-gray-700" : "text-gray-900 dark:text-gray-100" - } group flex w-full items-center rounded-[6px] px-3 py-2 text-sm`} + } group flex w-full items-center rounded-md px-3 py-2 text-sm`} > Profile @@ -55,7 +58,7 @@ const Footer = () => { active ? "bg-gray-100 dark:bg-gray-700" : "text-gray-900 dark:text-gray-100" - } group flex w-full items-center rounded-[6px] px-3 py-2 text-sm`} + } group flex w-full items-center rounded-md px-3 py-2 text-sm`} > Settings @@ -70,7 +73,7 @@ const Footer = () => { active ? "bg-gray-100 dark:bg-gray-700" : "text-gray-900 dark:text-gray-100" - } group flex w-full items-center rounded-[6px] px-3 py-2 text-sm`} + } group flex w-full items-center rounded-md px-3 py-2 text-sm`} > Sign Out @@ -79,7 +82,7 @@ const Footer = () => {
    */} -
    +
    diff --git a/src/components/Common/VisibleKey.tsx b/src/components/Common/VisibleKey.tsx index 64ded7f0..56e86595 100644 --- a/src/components/Common/VisibleKey.tsx +++ b/src/components/Common/VisibleKey.tsx @@ -111,7 +111,7 @@ const VisibleKey: FC = (props) => { {showTooltip && visibleShortcut ? (
    diff --git a/src/components/Search/AiOverview.tsx b/src/components/Search/AiOverview.tsx index 7938df37..569bd63b 100644 --- a/src/components/Search/AiOverview.tsx +++ b/src/components/Search/AiOverview.tsx @@ -40,7 +40,7 @@ const AiOverview: FC = (props) => { )} >
    { setVisible(false); }} diff --git a/src/components/Search/AutoResizeTextarea.tsx b/src/components/Search/AutoResizeTextarea.tsx index 12310ad4..d76bc95b 100644 --- a/src/components/Search/AutoResizeTextarea.tsx +++ b/src/components/Search/AutoResizeTextarea.tsx @@ -1,3 +1,4 @@ +import { cn } from "@/lib/utils"; import { useAppStore } from "@/stores/appStore"; import { useWebConfigStore } from "@/stores/webConfigStore"; import { useBoolean } from "ahooks"; @@ -37,6 +38,7 @@ const AutoResizeTextarea = forwardRef< setInput, handleKeyDown, chatPlaceholder, + lineCount, onLineCountChange, firstLineMaxWidth, }, @@ -115,7 +117,12 @@ const AutoResizeTextarea = forwardRef< autoComplete="off" autoCapitalize="none" spellCheck="false" - className="auto-resize-textarea text-base flex-1 outline-none w-full min-w-[200px] text-[#333] dark:text-[#d8d8d8] placeholder-text-xs placeholder-[#999] dark:placeholder-gray-500 bg-transparent custom-scrollbar resize-none overflow-y-auto" + className={cn( + "auto-resize-textarea text-base flex-1 outline-none w-full min-w-[200px] text-[#333] dark:text-[#d8d8d8] placeholder-text-xs placeholder-[#999] dark:placeholder-gray-500 bg-transparent custom-scrollbar resize-none overflow-y-auto", + { + "overflow-y-hidden": lineCount === 1, + } + )} placeholder={chatPlaceholder || t("search.textarea.placeholder")} aria-label={t("search.textarea.ariaLabel")} value={input} diff --git a/src/components/Search/ContextMenu.tsx b/src/components/Search/ContextMenu.tsx index 43da3fd5..faac97b2 100644 --- a/src/components/Search/ContextMenu.tsx +++ b/src/components/Search/ContextMenu.tsx @@ -12,7 +12,6 @@ import { } from "lucide-react"; import { cloneElement, useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; -import { Input } from "@headlessui/react"; import { useOSKeyPress } from "@/hooks/useOSKeyPress"; import { useSearchStore } from "@/stores/searchStore"; @@ -292,9 +291,9 @@ const ContextMenu = ({ formatUrl }: ContextMenuProps) => { ref={containerRef} id={visibleContextMenu ? CONTEXT_MENU_PANEL_ID : ""} className={clsx( - "absolute bottom-[50px] right-[18px] w-[300px] flex flex-col gap-2 scale-0 transition origin-bottom-right text-sm p-3 pb-0 bg-white dark:bg-black rounded-lg shadow-xs border border-[#EDEDED] dark:border-[#272828] shadow-lg dark:shadow-white/15", + "absolute bottom-[50px] right-[18px] w-[300px] flex flex-col gap-2 scale-0 transition origin-bottom-right text-sm p-3 pb-0 bg-white dark:bg-black rounded-lg border border-[#EDEDED] dark:border-[#272828] shadow-lg dark:shadow-white/15", { - "!scale-100": visibleContextMenu, + "scale-100": visibleContextMenu, } )} > @@ -329,12 +328,12 @@ const ContextMenu = ({ formatUrl }: ContextMenuProps) => { {name}
    -
    +
    {keys.map((key) => ( 1, } @@ -363,7 +362,7 @@ const ContextMenu = ({ formatUrl }: ContextMenuProps) => { searchInputRef.current?.focus(); }} > - {isCalculator && } diff --git a/src/components/Search/ExtensionDetail.tsx b/src/components/Search/ExtensionDetail.tsx index 0472d97b..cd292f62 100644 --- a/src/components/Search/ExtensionDetail.tsx +++ b/src/components/Search/ExtensionDetail.tsx @@ -1,4 +1,4 @@ -import { Button } from "@headlessui/react"; +import { Button } from "@/components/ui/button"; import dayjs from "dayjs"; import { CircleCheck, diff --git a/src/components/Search/InputBox.tsx b/src/components/Search/InputBox.tsx index 3b4b7951..812433e9 100644 --- a/src/components/Search/InputBox.tsx +++ b/src/components/Search/InputBox.tsx @@ -252,7 +252,7 @@ export default function ChatInput({ replace: [akiAiTooltipPrefix, askAI.name], })} -
    +
    {formatKey(modifierKey)} + {formatKey("Enter")}
    @@ -276,8 +276,8 @@ export default function ChatInput({ return (
    {lineCount === 1 && renderSearchIcon()} {visibleSearchBar() && (
    = (props) => { ]); return ( - - + + = (props) => { - + - {menuItems.map((item) => { const { label, children, clickEvent } = item; return ( - + { + if (children) e.preventDefault(); + }} + className="px-0 py-0" + > {children ? ( - - {label} + +
    + {label} - - + +
    +
    - {children.map((childItem) => { const { groupName, groupItems } = childItem; @@ -259,7 +270,7 @@ const InputUpload: FC = (props) => { return (
    {label} @@ -269,21 +280,21 @@ const InputUpload: FC = (props) => { ); })} - + ) : (
    {label}
    )} - + ); })} - -
    + + ); }; diff --git a/src/components/Search/MCPPopover.tsx b/src/components/Search/MCPPopover.tsx index 918396b5..6505a862 100644 --- a/src/components/Search/MCPPopover.tsx +++ b/src/components/Search/MCPPopover.tsx @@ -1,10 +1,14 @@ import { useState, useEffect, useCallback, useRef } from "react"; -import { Popover, PopoverButton, PopoverPanel } from "@headlessui/react"; import { ChevronDownIcon, RefreshCw, Layers, Hammer } from "lucide-react"; import clsx from "clsx"; import { useTranslation } from "react-i18next"; import { useDebounce } from "ahooks"; +import { + Popover, + PopoverTrigger, + PopoverContent, +} from "@/components/ui/popover"; import CommonIcon from "@/components/Common/Icons/CommonIcon"; import { useConnectStore } from "@/stores/connectStore"; import { useSearchStore } from "@/stores/searchStore"; @@ -16,6 +20,7 @@ import NoDataImage from "@/components/Common/NoDataImage"; import PopoverInput from "@/components/Common/PopoverInput"; import Pagination from "@/components/Common/Pagination"; import { SearchQuery } from "@/utils"; +import { Button } from "../ui/button"; interface MCPPopoverProps { mcp_servers: any; @@ -79,6 +84,7 @@ export default function MCPPopover({ }, [currentService?.id, debouncedKeyword, getMCPByServer]); const popoverButtonRef = useRef(null); + const [open, setOpen] = useState(false); const mcpSearch = useShortcutsStore((state) => state.mcpSearch); const mcpSearchScope = useShortcutsStore((state) => { return state.mcpSearchScope; @@ -166,9 +172,9 @@ export default function MCPPopover({ return (
    - - + + { + e.stopPropagation(); + }} + > { @@ -200,29 +212,35 @@ export default function MCPPopover({ }} > - + - +
    { + onClick={(e: React.MouseEvent) => { e.stopPropagation(); }} > -
    +
    {t("search.input.searchPopover.title")} -
    -
    +
    @@ -250,7 +268,7 @@ export default function MCPPopover({ value={keyword} ref={searchInputRef} className="size-full px-2 rounded-lg border dark:border-white/10 bg-transparent" - onChange={(e) => { + onChange={(e: React.ChangeEvent) => { setKeyword(e.target.value); }} /> @@ -280,7 +298,7 @@ export default function MCPPopover({ >
    {isAll ? ( - + ) : ( )} @@ -308,7 +326,7 @@ export default function MCPPopover({ }} /> -
    +
    )}
    - + )} diff --git a/src/components/Search/Search.tsx b/src/components/Search/Search.tsx index 7029e8f0..91c8e8d1 100644 --- a/src/components/Search/Search.tsx +++ b/src/components/Search/Search.tsx @@ -1,4 +1,5 @@ import { useEffect, memo, useRef, useCallback, useState } from "react"; +import clsx from "clsx"; import DropdownList from "./DropdownList"; import { SearchResults } from "@/components/Search/SearchResults"; @@ -12,7 +13,6 @@ import ExtensionStore from "./ExtensionStore"; import platformAdapter from "@/utils/platformAdapter"; import ViewExtension from "./ViewExtension"; import { visibleFooterBar } from "@/utils"; -import clsx from "clsx"; const SearchResultsPanel = memo<{ input: string; diff --git a/src/components/Search/SearchIcons.tsx b/src/components/Search/SearchIcons.tsx index 828b3079..28e0773b 100644 --- a/src/components/Search/SearchIcons.tsx +++ b/src/components/Search/SearchIcons.tsx @@ -1,15 +1,16 @@ import { useSearchStore } from "@/stores/searchStore"; import { ChevronLeft, Search } from "lucide-react"; +import { FC } from "react"; +import clsx from "clsx"; import FontIcon from "@/components/Common/Icons/FontIcon"; -import { FC } from "react"; import lightDefaultIcon from "@/assets/images/source_default.png"; import darkDefaultIcon from "@/assets/images/source_default_dark.png"; import { useThemeStore } from "@/stores/themeStore"; import platformAdapter from "@/utils/platformAdapter"; import { navigateBack, visibleSearchBar } from "@/utils"; import VisibleKey from "../Common/VisibleKey"; -import clsx from "clsx"; +import { cn } from "@/lib/utils"; interface MultilevelWrapperProps { title?: string; @@ -36,7 +37,7 @@ const MultilevelWrapper: FC = (props) => {
    = (props) => { /> -
    {renderIcon()}
    +
    {renderIcon()}
    {title}
    @@ -115,7 +116,14 @@ export default function SearchIcons({ } return ( -
    +
    ); diff --git a/src/components/Search/SearchPopover.tsx b/src/components/Search/SearchPopover.tsx index 4bd88d40..5a757c4b 100644 --- a/src/components/Search/SearchPopover.tsx +++ b/src/components/Search/SearchPopover.tsx @@ -1,10 +1,14 @@ import { useState, useEffect, useCallback, useRef } from "react"; -import { Popover, PopoverButton, PopoverPanel } from "@headlessui/react"; import { ChevronDownIcon, RefreshCw, Layers, Globe } from "lucide-react"; import clsx from "clsx"; import { useTranslation } from "react-i18next"; import { useDebounce } from "ahooks"; +import { + Popover, + PopoverTrigger, + PopoverContent, +} from "@/components/ui/popover"; import CommonIcon from "@/components/Common/Icons/CommonIcon"; import { useConnectStore } from "@/stores/connectStore"; import { useSearchStore } from "@/stores/searchStore"; @@ -15,6 +19,7 @@ import VisibleKey from "@/components/Common/VisibleKey"; import NoDataImage from "@/components/Common/NoDataImage"; import PopoverInput from "@/components/Common/PopoverInput"; import Pagination from "@/components/Common/Pagination"; +import { Button } from "../ui/button"; interface SearchPopoverProps { datasource: any; @@ -85,6 +90,7 @@ export default function SearchPopover({ }, [currentService?.id, debouncedKeyword, getDataSourcesByServer]); const popoverButtonRef = useRef(null); + const [open, setOpen] = useState(false); const internetSearch = useShortcutsStore((state) => state.internetSearch); const internetSearchScope = useShortcutsStore((state) => { return state.internetSearchScope; @@ -172,9 +178,9 @@ export default function SearchPopover({ return (
    - - + + { + e.stopPropagation(); + }} + > { @@ -208,29 +220,35 @@ export default function SearchPopover({ }} > - + - +
    { + onClick={(e: React.MouseEvent) => { e.stopPropagation(); }} > -
    +
    {t("search.input.searchPopover.title")} -
    -
    +
    @@ -258,7 +276,7 @@ export default function SearchPopover({ value={keyword} ref={searchInputRef} className="size-full px-2 rounded-lg border dark:border-white/10 bg-transparent" - onChange={(e) => { + onChange={(e: React.ChangeEvent) => { setKeyword(e.target.value); }} /> @@ -288,7 +306,7 @@ export default function SearchPopover({ >
    {isAll ? ( - + ) : ( -
    +
    )}
    - + )} diff --git a/src/components/SearchChat/index.tsx b/src/components/SearchChat/index.tsx index 9f2bf5b9..9e8e8fac 100644 --- a/src/components/SearchChat/index.tsx +++ b/src/components/SearchChat/index.tsx @@ -35,7 +35,10 @@ import { visibleSearchBar, } from "@/utils"; import { useTauriFocus } from "@/hooks/useTauriFocus"; -import { POPOVER_PANEL_SELECTOR, WINDOW_CENTER_BASELINE_HEIGHT } from "@/constants"; +import { + POPOVER_PANEL_SELECTOR, + WINDOW_CENTER_BASELINE_HEIGHT, +} from "@/constants"; import { useChatStore } from "@/stores/chatStore"; import { useSearchStore } from "@/stores/searchStore"; @@ -383,11 +386,11 @@ function SearchChat({
    diff --git a/src/components/Settings/Advanced/components/Selection/AddChatDialog.tsx b/src/components/Settings/Advanced/components/Selection/AddChatDialog.tsx index 3b82b319..a7601253 100644 --- a/src/components/Settings/Advanced/components/Selection/AddChatDialog.tsx +++ b/src/components/Settings/Advanced/components/Selection/AddChatDialog.tsx @@ -6,6 +6,13 @@ import { nanoid } from "nanoid"; import { AssistantFetcher } from "@/components/Assistant/AssistantFetcher"; import { Button } from "@/components/ui/button"; +import { + Select, + SelectTrigger, + SelectContent, + SelectItem, + SelectValue, +} from "@/components/ui/select"; import { ButtonConfig } from "./config"; import { useThemeStore } from "@/stores/themeStore"; import { useAppStore } from "@/stores/appStore"; @@ -169,43 +176,58 @@ export default function AddChatDialog({ - + + + + + + {t("selection.bind.defaultService")} + + {serverList.map((s: any) => ( + + {s.name || s.endpoint || s.id} + + ))} + +
    - + + + + + {!loading && ( + + {t("selection.bind.defaultAssistant")} + + )} + {!loading && + assistantList.map((a: any) => ( + + {a._source?.name || a._id} + + ))} + +
    diff --git a/src/components/Settings/Advanced/components/Selection/ButtonsList.tsx b/src/components/Settings/Advanced/components/Selection/ButtonsList.tsx index cd8c818f..8d2d62b4 100644 --- a/src/components/Settings/Advanced/components/Selection/ButtonsList.tsx +++ b/src/components/Settings/Advanced/components/Selection/ButtonsList.tsx @@ -7,6 +7,13 @@ import { AssistantFetcher } from "@/components/Assistant/AssistantFetcher"; import { setCurrentWindowService } from "@/commands/windowService"; import { AddChatButton } from "./AddChatButton"; import { ButtonConfig, resolveLucideIcon } from "./config"; +import { + Select, + SelectTrigger, + SelectContent, + SelectItem, + SelectValue, +} from "@/components/ui/select"; const ASSISTANT_CACHE_KEY = "assistant_list_cache"; @@ -250,50 +257,58 @@ const ButtonsList = ({ buttons, setButtons, serverList }: ButtonsListProps) => {
    {isChat && ( <> - + + + + + + {t("selection.bind.defaultService")} + + {serverList.map((s: any) => ( + + {s.name || s.endpoint || s.id} + + ))} + + {(() => { const sid = btn.action.assistantServerId; const list = (sid && assistantByServer[sid]) || []; const loading = !!(sid && assistantLoadingByServer[sid]); return ( - + + + + + {!loading && ( + + {t("selection.bind.defaultAssistant")} + + )} + {list.map((a: any) => ( + + {a._source?.name || a._id} + + ))} + + ); })()} diff --git a/src/components/Settings/Advanced/components/Selection/index.tsx b/src/components/Settings/Advanced/components/Selection/index.tsx index d0f93767..8ecc4eaf 100644 --- a/src/components/Settings/Advanced/components/Selection/index.tsx +++ b/src/components/Settings/Advanced/components/Selection/index.tsx @@ -117,7 +117,7 @@ const SelectionSettings = () => {

    {t("selection.title")}

    -
    +