From 8d2528e521282783d536cd20c83a26d61453500f Mon Sep 17 00:00:00 2001 From: SteveLauC Date: Fri, 9 May 2025 17:54:58 +0800 Subject: [PATCH] refactor: use pizza_engine for app search (#346) * refactor: use pizza_engine for app search * refactor: do not break the build when pizza_engine is unavailable --- package.json | 50 +- pnpm-lock.yaml | 1735 +++++++++-------- src-tauri/Cargo.lock | 1666 ++++++++++------ src-tauri/Cargo.toml | 9 +- src-tauri/rust-toolchain.toml | 2 + src-tauri/src/common/document.rs | 36 - src-tauri/src/lib.rs | 42 +- src-tauri/src/local/application.rs | 313 --- src-tauri/src/local/application/mod.rs | 38 + .../src/local/application/with_feature.rs | 1109 +++++++++++ .../src/local/application/without_feature.rs | 121 ++ src-tauri/src/local/calculator.rs | 2 +- src-tauri/src/local/mod.rs | 159 ++ src-tauri/src/search/mod.rs | 2 +- src/components/Search/DocumentList.tsx | 11 +- src/components/Search/Search.tsx | 11 +- src/components/SearchChat/index.tsx | 18 +- .../Extensions/components/Accordion/index.tsx | 37 +- .../components/Content/Applications/index.tsx | 129 +- .../components/Details/Application/index.tsx | 95 +- .../components/Details/Applications/index.tsx | 56 +- .../Extensions/components/Shortcut/index.tsx | 143 ++ .../components/Shortcut/keyboard.ts | 314 +++ src/components/Settings/Extensions/index.tsx | 38 +- src/components/UpdateApp/index.tsx | 2 +- src/locales/en/translation.json | 7 +- src/locales/zh/translation.json | 7 +- src/main.tsx | 5 +- src/pages/settings/index.tsx | 46 +- src/stores/appStore.ts | 14 +- src/stores/applicationsStore.ts | 22 +- src/stores/authStore.ts | 43 +- src/stores/extension.ts | 24 + src/types/platform.ts | 3 + 34 files changed, 4319 insertions(+), 1990 deletions(-) create mode 100644 src-tauri/rust-toolchain.toml delete mode 100644 src-tauri/src/local/application.rs create mode 100644 src-tauri/src/local/application/mod.rs create mode 100644 src-tauri/src/local/application/with_feature.rs create mode 100644 src-tauri/src/local/application/without_feature.rs create mode 100644 src/components/Settings/Extensions/components/Shortcut/index.tsx create mode 100644 src/components/Settings/Extensions/components/Shortcut/keyboard.ts create mode 100644 src/stores/extension.ts diff --git a/package.json b/package.json index 5f6a75e4..9969624d 100644 --- a/package.json +++ b/package.json @@ -19,36 +19,36 @@ }, "dependencies": { "@ant-design/icons": "^6.0.0", - "@headlessui/react": "^2.2.0", - "@tauri-apps/api": "^2.4.0", + "@headlessui/react": "^2.2.2", + "@tauri-apps/api": "^2.5.0", "@tauri-apps/plugin-autostart": "~2.2.0", - "@tauri-apps/plugin-deep-link": "^2.2.0", - "@tauri-apps/plugin-dialog": "^2.2.0", + "@tauri-apps/plugin-deep-link": "^2.2.1", + "@tauri-apps/plugin-dialog": "^2.2.1", "@tauri-apps/plugin-global-shortcut": "~2.0.0", "@tauri-apps/plugin-http": "~2.0.2", "@tauri-apps/plugin-os": "^2.2.1", - "@tauri-apps/plugin-process": "^2.2.0", - "@tauri-apps/plugin-shell": "^2.2.0", + "@tauri-apps/plugin-process": "^2.2.1", + "@tauri-apps/plugin-shell": "^2.2.1", "@tauri-apps/plugin-updater": "github:infinilabs/tauri-plugin-updater#v2", "@tauri-apps/plugin-websocket": "~2.3.0", "@tauri-apps/plugin-window": "2.0.0-alpha.1", - "@wavesurfer/react": "^1.0.9", + "@wavesurfer/react": "^1.0.11", "ahooks": "^3.8.4", - "axios": "^1.8.4", + "axios": "^1.9.0", "clsx": "^2.1.1", "dayjs": "^1.11.13", - "dotenv": "^16.4.7", + "dotenv": "^16.5.0", "filesize": "^10.1.6", "i18next": "^23.16.8", - "i18next-browser-languagedetector": "^8.0.4", + "i18next-browser-languagedetector": "^8.1.0", "lodash-es": "^4.17.21", "lucide-react": "^0.461.0", - "mermaid": "^11.5.0", + "mermaid": "^11.6.0", "nanoid": "^5.1.5", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-hotkeys-hook": "^4.6.1", - "react-i18next": "^15.4.1", + "react-hotkeys-hook": "^4.6.2", + "react-i18next": "^15.5.1", "react-markdown": "^9.1.0", "react-router-dom": "^6.30.0", "react-window": "^1.8.11", @@ -58,25 +58,25 @@ "remark-gfm": "^4.0.1", "remark-math": "^6.0.0", "tauri-plugin-fs-pro-api": "^2.4.0", - "tauri-plugin-macos-permissions-api": "^2.2.0", - "tauri-plugin-screenshots-api": "^2.1.0", + "tauri-plugin-macos-permissions-api": "^2.3.0", + "tauri-plugin-screenshots-api": "^2.2.0", "tauri-plugin-windows-version-api": "^2.0.0", "use-debounce": "^10.0.4", "uuid": "^11.1.0", - "wavesurfer.js": "^7.9.3", - "zustand": "^5.0.3" + "wavesurfer.js": "^7.9.5", + "zustand": "^5.0.4" }, "devDependencies": { - "@tauri-apps/cli": "^2.4.0", + "@tauri-apps/cli": "^2.5.0", "@types/dom-speech-recognition": "^0.0.4", "@types/lodash-es": "^4.17.12", "@types/markdown-it": "^14.1.2", - "@types/node": "^22.13.11", - "@types/react": "^18.3.19", - "@types/react-dom": "^18.3.5", + "@types/node": "^22.15.17", + "@types/react": "^18.3.21", + "@types/react-dom": "^18.3.7", "@types/react-katex": "^3.0.4", "@types/react-window": "^1.8.8", - "@vitejs/plugin-react": "^4.3.4", + "@vitejs/plugin-react": "^4.4.1", "autoprefixer": "^10.4.21", "cross-env": "^7.0.3", "immer": "^10.1.1", @@ -85,8 +85,8 @@ "sass": "^1.87.0", "tailwindcss": "^3.4.17", "tsup": "^8.4.0", - "tsx": "^4.19.3", - "typescript": "^5.8.2", - "vite": "^5.4.14" + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "vite": "^5.4.19" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d7d321e..354bf370 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,20 +12,20 @@ importers: specifier: ^6.0.0 version: 6.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@headlessui/react': - specifier: ^2.2.0 - version: 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^2.2.2 + version: 2.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tauri-apps/api': - specifier: ^2.4.0 - version: 2.4.0 + specifier: ^2.5.0 + version: 2.5.0 '@tauri-apps/plugin-autostart': specifier: ~2.2.0 version: 2.2.0 '@tauri-apps/plugin-deep-link': - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.2.1 + version: 2.2.1 '@tauri-apps/plugin-dialog': - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.2.1 + version: 2.2.1 '@tauri-apps/plugin-global-shortcut': specifier: ~2.0.0 version: 2.0.0 @@ -36,11 +36,11 @@ importers: specifier: ^2.2.1 version: 2.2.1 '@tauri-apps/plugin-process': - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.2.1 + version: 2.2.1 '@tauri-apps/plugin-shell': - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.2.1 + version: 2.2.1 '@tauri-apps/plugin-updater': specifier: github:infinilabs/tauri-plugin-updater#v2 version: https://codeload.github.com/infinilabs/tauri-plugin-updater/tar.gz/358e689c65e9943b53eff50bcb9dfd5b1cfc4072 @@ -51,14 +51,14 @@ importers: specifier: 2.0.0-alpha.1 version: 2.0.0-alpha.1 '@wavesurfer/react': - specifier: ^1.0.9 - version: 1.0.9(react@18.3.1)(wavesurfer.js@7.9.3) + specifier: ^1.0.11 + version: 1.0.11(react@18.3.1)(wavesurfer.js@7.9.5) ahooks: specifier: ^3.8.4 version: 3.8.4(react@18.3.1) axios: - specifier: ^1.8.4 - version: 1.8.4 + specifier: ^1.9.0 + version: 1.9.0 clsx: specifier: ^2.1.1 version: 2.1.1 @@ -66,8 +66,8 @@ importers: specifier: ^1.11.13 version: 1.11.13 dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^16.5.0 + version: 16.5.0 filesize: specifier: ^10.1.6 version: 10.1.6 @@ -75,8 +75,8 @@ importers: specifier: ^23.16.8 version: 23.16.8 i18next-browser-languagedetector: - specifier: ^8.0.4 - version: 8.0.4 + specifier: ^8.1.0 + version: 8.1.0 lodash-es: specifier: ^4.17.21 version: 4.17.21 @@ -84,8 +84,8 @@ importers: specifier: ^0.461.0 version: 0.461.0(react@18.3.1) mermaid: - specifier: ^11.5.0 - version: 11.5.0 + specifier: ^11.6.0 + version: 11.6.0 nanoid: specifier: ^5.1.5 version: 5.1.5 @@ -96,14 +96,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) react-hotkeys-hook: - specifier: ^4.6.1 - version: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^4.6.2 + version: 4.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-i18next: - specifier: ^15.4.1 - version: 15.4.1(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^15.5.1 + version: 15.5.1(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) react-markdown: specifier: ^9.1.0 - version: 9.1.0(@types/react@18.3.19)(react@18.3.1) + version: 9.1.0(@types/react@18.3.21)(react@18.3.1) react-router-dom: specifier: ^6.30.0 version: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -129,11 +129,11 @@ importers: specifier: ^2.4.0 version: 2.4.0 tauri-plugin-macos-permissions-api: + specifier: ^2.3.0 + version: 2.3.0 + tauri-plugin-screenshots-api: specifier: ^2.2.0 version: 2.2.0 - tauri-plugin-screenshots-api: - specifier: ^2.1.0 - version: 2.1.0 tauri-plugin-windows-version-api: specifier: ^2.0.0 version: 2.0.0 @@ -144,15 +144,15 @@ importers: specifier: ^11.1.0 version: 11.1.0 wavesurfer.js: - specifier: ^7.9.3 - version: 7.9.3 + specifier: ^7.9.5 + version: 7.9.5 zustand: - specifier: ^5.0.3 - version: 5.0.3(@types/react@18.3.19)(immer@10.1.1)(react@18.3.1) + specifier: ^5.0.4 + version: 5.0.4(@types/react@18.3.21)(immer@10.1.1)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) devDependencies: '@tauri-apps/cli': - specifier: ^2.4.0 - version: 2.4.0 + specifier: ^2.5.0 + version: 2.5.0 '@types/dom-speech-recognition': specifier: ^0.0.4 version: 0.0.4 @@ -163,14 +163,14 @@ importers: specifier: ^14.1.2 version: 14.1.2 '@types/node': - specifier: ^22.13.11 - version: 22.13.11 + specifier: ^22.15.17 + version: 22.15.17 '@types/react': - specifier: ^18.3.19 - version: 18.3.19 + specifier: ^18.3.21 + version: 18.3.21 '@types/react-dom': - specifier: ^18.3.5 - version: 18.3.5(@types/react@18.3.19) + specifier: ^18.3.7 + version: 18.3.7(@types/react@18.3.21) '@types/react-katex': specifier: ^3.0.4 version: 3.0.4 @@ -178,8 +178,8 @@ importers: specifier: ^1.8.8 version: 1.8.8 '@vitejs/plugin-react': - specifier: ^4.3.4 - version: 4.3.4(vite@5.4.14(@types/node@22.13.11)(sass@1.87.0)) + specifier: ^4.4.1 + version: 4.4.1(vite@5.4.19(@types/node@22.15.17)(sass@1.87.0)) autoprefixer: specifier: ^10.4.21 version: 10.4.21(postcss@8.5.3) @@ -194,7 +194,7 @@ importers: version: 8.5.3 release-it: specifier: ^18.1.2 - version: 18.1.2(@types/node@22.13.11)(typescript@5.8.2) + version: 18.1.2(@types/node@22.15.17)(typescript@5.8.3) sass: specifier: ^1.87.0 version: 1.87.0 @@ -203,16 +203,16 @@ importers: version: 3.4.17 tsup: specifier: ^8.4.0 - version: 8.4.0(jiti@1.21.7)(postcss@8.5.3)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0) + version: 8.4.0(jiti@1.21.7)(postcss@8.5.3)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1) tsx: - specifier: ^4.19.3 - version: 4.19.3 + specifier: ^4.19.4 + version: 4.19.4 typescript: - specifier: ^5.8.2 - version: 5.8.2 + specifier: ^5.8.3 + version: 5.8.3 vite: - specifier: ^5.4.14 - version: 5.4.14(@types/node@22.13.11)(sass@1.87.0) + specifier: ^5.4.19 + version: 5.4.19(@types/node@22.15.17)(sass@1.87.0) packages: @@ -241,93 +241,93 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' - '@antfu/install-pkg@1.0.0': - resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} '@antfu/utils@8.1.1': resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + '@babel/compat-data@7.27.2': + resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.10': - resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + '@babel/core@7.27.1': + resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.10': - resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} + '@babel/generator@7.27.1': + resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.27.1': + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.26.10': - resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} + '@babel/helpers@7.27.1': + resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.10': - resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + '@babel/parser@7.27.2': + resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.26.10': - resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} + '@babel/runtime@7.27.1': + resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} engines: {node: '>=6.9.0'} - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.10': - resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} + '@babel/traverse@7.27.1': + resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.10': - resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + '@babel/types@7.27.1': + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} engines: {node: '>=6.9.0'} '@braintree/sanitize-url@7.1.1': @@ -354,8 +354,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + '@esbuild/aix-ppc64@0.25.4': + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -366,8 +366,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + '@esbuild/android-arm64@0.25.4': + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -378,8 +378,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + '@esbuild/android-arm@0.25.4': + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -390,8 +390,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + '@esbuild/android-x64@0.25.4': + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -402,8 +402,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + '@esbuild/darwin-arm64@0.25.4': + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -414,8 +414,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + '@esbuild/darwin-x64@0.25.4': + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -426,8 +426,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + '@esbuild/freebsd-arm64@0.25.4': + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -438,8 +438,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + '@esbuild/freebsd-x64@0.25.4': + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -450,8 +450,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + '@esbuild/linux-arm64@0.25.4': + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -462,8 +462,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + '@esbuild/linux-arm@0.25.4': + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -474,8 +474,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + '@esbuild/linux-ia32@0.25.4': + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -486,8 +486,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + '@esbuild/linux-loong64@0.25.4': + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -498,8 +498,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + '@esbuild/linux-mips64el@0.25.4': + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -510,8 +510,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + '@esbuild/linux-ppc64@0.25.4': + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -522,8 +522,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + '@esbuild/linux-riscv64@0.25.4': + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -534,8 +534,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + '@esbuild/linux-s390x@0.25.4': + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -546,14 +546,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + '@esbuild/linux-x64@0.25.4': + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + '@esbuild/netbsd-arm64@0.25.4': + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -564,14 +564,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + '@esbuild/netbsd-x64@0.25.4': + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + '@esbuild/openbsd-arm64@0.25.4': + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -582,8 +582,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + '@esbuild/openbsd-x64@0.25.4': + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -594,8 +594,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + '@esbuild/sunos-x64@0.25.4': + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -606,8 +606,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + '@esbuild/win32-arm64@0.25.4': + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -618,8 +618,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + '@esbuild/win32-ia32@0.25.4': + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -630,17 +630,17 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + '@esbuild/win32-x64@0.25.4': + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@floating-ui/core@1.6.9': - resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + '@floating-ui/core@1.7.0': + resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} - '@floating-ui/dom@1.6.13': - resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + '@floating-ui/dom@1.7.0': + resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} @@ -657,8 +657,8 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@headlessui/react@2.2.0': - resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==} + '@headlessui/react@2.2.2': + resolution: {integrity: sha512-zbniWOYBQ8GHSUIOPY7BbdIn6PzUOq0z41RFrF30HbjsxG6Rrfk+6QulR8Kgf2Vwj2a/rE6i62q5vo+2gI5dJA==} engines: {node: '>=10'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -673,8 +673,8 @@ packages: '@iconify/utils@2.3.0': resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} - '@inquirer/checkbox@4.1.4': - resolution: {integrity: sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==} + '@inquirer/checkbox@4.1.5': + resolution: {integrity: sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -682,8 +682,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@5.1.8': - resolution: {integrity: sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==} + '@inquirer/confirm@5.1.9': + resolution: {integrity: sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -691,8 +691,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.1.9': - resolution: {integrity: sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==} + '@inquirer/core@10.1.10': + resolution: {integrity: sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -700,8 +700,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@4.2.9': - resolution: {integrity: sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw==} + '@inquirer/editor@4.2.10': + resolution: {integrity: sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -709,8 +709,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@4.0.11': - resolution: {integrity: sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==} + '@inquirer/expand@4.0.12': + resolution: {integrity: sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -722,8 +722,8 @@ packages: resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} engines: {node: '>=18'} - '@inquirer/input@4.1.8': - resolution: {integrity: sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==} + '@inquirer/input@4.1.9': + resolution: {integrity: sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -731,8 +731,8 @@ packages: '@types/node': optional: true - '@inquirer/number@3.0.11': - resolution: {integrity: sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==} + '@inquirer/number@3.0.12': + resolution: {integrity: sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -740,8 +740,8 @@ packages: '@types/node': optional: true - '@inquirer/password@4.0.11': - resolution: {integrity: sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==} + '@inquirer/password@4.0.12': + resolution: {integrity: sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -749,8 +749,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.4.0': - resolution: {integrity: sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w==} + '@inquirer/prompts@7.5.0': + resolution: {integrity: sha512-tk8Bx7l5AX/CR0sVfGj3Xg6v7cYlFBkEahH+EgBB+cZib6Fc83dwerTbzj7f2+qKckjIUGsviWRI1d7lx6nqQA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -758,8 +758,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@4.0.11': - resolution: {integrity: sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==} + '@inquirer/rawlist@4.1.0': + resolution: {integrity: sha512-6ob45Oh9pXmfprKqUiEeMz/tjtVTFQTgDDz1xAMKMrIvyrYjAmRbQZjMJfsictlL4phgjLhdLu27IkHNnNjB7g==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -767,8 +767,8 @@ packages: '@types/node': optional: true - '@inquirer/search@3.0.11': - resolution: {integrity: sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==} + '@inquirer/search@3.0.12': + resolution: {integrity: sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -776,8 +776,8 @@ packages: '@types/node': optional: true - '@inquirer/select@4.1.0': - resolution: {integrity: sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==} + '@inquirer/select@4.2.0': + resolution: {integrity: sha512-KkXQ4aSySWimpV4V/TUJWdB3tdfENZUU765GjOIZ0uPwdbGIG6jrxD4dDf1w68uP+DVtfNhr1A92B+0mbTZ8FA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -785,8 +785,8 @@ packages: '@types/node': optional: true - '@inquirer/type@3.0.5': - resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==} + '@inquirer/type@3.0.6': + resolution: {integrity: sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -816,8 +816,8 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@mermaid-js/parser@0.3.0': - resolution: {integrity: sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==} + '@mermaid-js/parser@0.4.0': + resolution: {integrity: sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -835,21 +835,24 @@ packages: resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} engines: {node: '>= 18'} - '@octokit/core@6.1.4': - resolution: {integrity: sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==} + '@octokit/core@6.1.5': + resolution: {integrity: sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg==} engines: {node: '>= 18'} - '@octokit/endpoint@10.1.3': - resolution: {integrity: sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==} + '@octokit/endpoint@10.1.4': + resolution: {integrity: sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==} engines: {node: '>= 18'} - '@octokit/graphql@8.2.1': - resolution: {integrity: sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==} + '@octokit/graphql@8.2.2': + resolution: {integrity: sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==} engines: {node: '>= 18'} '@octokit/openapi-types@24.2.0': resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} + '@octokit/openapi-types@25.0.0': + resolution: {integrity: sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw==} + '@octokit/plugin-paginate-rest@11.6.0': resolution: {integrity: sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==} engines: {node: '>= 18'} @@ -868,12 +871,12 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/request-error@6.1.7': - resolution: {integrity: sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==} + '@octokit/request-error@6.1.8': + resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==} engines: {node: '>= 18'} - '@octokit/request@9.2.2': - resolution: {integrity: sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==} + '@octokit/request@9.2.3': + resolution: {integrity: sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w==} engines: {node: '>= 18'} '@octokit/rest@21.0.2': @@ -883,6 +886,9 @@ packages: '@octokit/types@13.10.0': resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} + '@octokit/types@14.0.0': + resolution: {integrity: sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA==} + '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} @@ -987,40 +993,40 @@ packages: react: '>=18.0.0' react-dom: '>=18.0.0' - '@react-aria/focus@3.20.1': - resolution: {integrity: sha512-lgYs+sQ1TtBrAXnAdRBQrBo0/7o5H6IrfDxec1j+VRpcXL0xyk0xPq+m3lZp8typzIghqDgpnKkJ5Jf4OrzPIw==} + '@react-aria/focus@3.20.2': + resolution: {integrity: sha512-Q3rouk/rzoF/3TuH6FzoAIKrl+kzZi9LHmr8S5EqLAOyP9TXIKG34x2j42dZsAhrw7TbF9gA8tBKwnCNH4ZV+Q==} 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 - '@react-aria/interactions@3.24.1': - resolution: {integrity: sha512-OWEcIC6UQfWq4Td5Ptuh4PZQ4LHLJr/JL2jGYvuNL6EgL3bWvzPrRYIF/R64YbfVxIC7FeZpPSkS07sZ93/NoA==} + '@react-aria/interactions@3.25.0': + resolution: {integrity: sha512-GgIsDLlO8rDU/nFn6DfsbP9rfnzhm8QFjZkB9K9+r+MTSCn7bMntiWQgMM+5O6BiA8d7C7x4zuN4bZtc0RBdXQ==} 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 - '@react-aria/ssr@3.9.7': - resolution: {integrity: sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==} + '@react-aria/ssr@3.9.8': + resolution: {integrity: sha512-lQDE/c9uTfBSDOjaZUJS8xP2jCKVk4zjQeIlCH90xaLhHDgbpCdns3xvFpJJujfj3nI4Ll9K7A+ONUBDCASOuw==} engines: {node: '>= 12'} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/utils@3.28.1': - resolution: {integrity: sha512-mnHFF4YOVu9BRFQ1SZSKfPhg3z+lBRYoW5mLcYTQihbKhz48+I1sqRkP7ahMITr8ANH3nb34YaMME4XWmK2Mgg==} + '@react-aria/utils@3.28.2': + resolution: {integrity: sha512-J8CcLbvnQgiBn54eeEvQQbIOfBF3A1QizxMw9P4cl9MkeR03ug7RnjTIdJY/n2p7t59kLeAB3tqiczhcj+Oi5w==} 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 - '@react-stately/flags@3.1.0': - resolution: {integrity: sha512-KSHOCxTFpBtxhIRcKwsD1YDTaNxFtCYuAUb0KEihc16QwqZViq4hasgPBs2gYm7fHRbw7WYzWKf6ZSo/+YsFlg==} + '@react-stately/flags@3.1.1': + resolution: {integrity: sha512-XPR5gi5LfrPdhxZzdIlJDz/B5cBf63l4q6/AzNqVWFKgd0QqY5LvWJftXkklaIUpKSJkIKQb8dphuZXDtkWNqg==} - '@react-stately/utils@3.10.5': - resolution: {integrity: sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==} + '@react-stately/utils@3.10.6': + resolution: {integrity: sha512-O76ip4InfTTzAJrg8OaZxKU4vvjMDOpfA/PGNOytiXwBbkct2ZeZwaimJ8Bt9W1bj5VsZ81/o/tW4BacbdDOMA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/shared@3.28.0': - resolution: {integrity: sha512-9oMEYIDc3sk0G5rysnYvdNrkSg7B04yTKl50HHSZVbokeHpnU0yRmsDaWb9B/5RprcKj8XszEk5guBO8Sa/Q+Q==} + '@react-types/shared@3.29.0': + resolution: {integrity: sha512-IDQYu/AHgZimObzCFdNl1LpZvQW/xcfLt3v20sorl5qRucDVj4S9os98sVTZ4IRIBjmS+MkjqpR5E70xan7ooA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -1028,98 +1034,103 @@ packages: resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} engines: {node: '>=14.0.0'} - '@rollup/rollup-android-arm-eabi@4.36.0': - resolution: {integrity: sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==} + '@rollup/rollup-android-arm-eabi@4.40.2': + resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.36.0': - resolution: {integrity: sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==} + '@rollup/rollup-android-arm64@4.40.2': + resolution: {integrity: sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.36.0': - resolution: {integrity: sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==} + '@rollup/rollup-darwin-arm64@4.40.2': + resolution: {integrity: sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.36.0': - resolution: {integrity: sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==} + '@rollup/rollup-darwin-x64@4.40.2': + resolution: {integrity: sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.36.0': - resolution: {integrity: sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==} + '@rollup/rollup-freebsd-arm64@4.40.2': + resolution: {integrity: sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.36.0': - resolution: {integrity: sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==} + '@rollup/rollup-freebsd-x64@4.40.2': + resolution: {integrity: sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.36.0': - resolution: {integrity: sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==} + '@rollup/rollup-linux-arm-gnueabihf@4.40.2': + resolution: {integrity: sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.36.0': - resolution: {integrity: sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==} + '@rollup/rollup-linux-arm-musleabihf@4.40.2': + resolution: {integrity: sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.36.0': - resolution: {integrity: sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==} + '@rollup/rollup-linux-arm64-gnu@4.40.2': + resolution: {integrity: sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.36.0': - resolution: {integrity: sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==} + '@rollup/rollup-linux-arm64-musl@4.40.2': + resolution: {integrity: sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.36.0': - resolution: {integrity: sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==} + '@rollup/rollup-linux-loongarch64-gnu@4.40.2': + resolution: {integrity: sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': - resolution: {integrity: sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==} + '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': + resolution: {integrity: sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.36.0': - resolution: {integrity: sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==} + '@rollup/rollup-linux-riscv64-gnu@4.40.2': + resolution: {integrity: sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.36.0': - resolution: {integrity: sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==} + '@rollup/rollup-linux-riscv64-musl@4.40.2': + resolution: {integrity: sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.40.2': + resolution: {integrity: sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.36.0': - resolution: {integrity: sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==} + '@rollup/rollup-linux-x64-gnu@4.40.2': + resolution: {integrity: sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.36.0': - resolution: {integrity: sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==} + '@rollup/rollup-linux-x64-musl@4.40.2': + resolution: {integrity: sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.36.0': - resolution: {integrity: sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==} + '@rollup/rollup-win32-arm64-msvc@4.40.2': + resolution: {integrity: sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.36.0': - resolution: {integrity: sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==} + '@rollup/rollup-win32-ia32-msvc@4.40.2': + resolution: {integrity: sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.36.0': - resolution: {integrity: sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==} + '@rollup/rollup-win32-x64-msvc@4.40.2': + resolution: {integrity: sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==} cpu: [x64] os: [win32] @@ -1134,104 +1145,104 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@tanstack/react-virtual@3.13.4': - resolution: {integrity: sha512-jPWC3BXvVLHsMX67NEHpJaZ+/FySoNxFfBEiF4GBc1+/nVwdRm+UcSCYnKP3pXQr0eEsDpXi/PQZhNfJNopH0g==} + '@tanstack/react-virtual@3.13.8': + resolution: {integrity: sha512-meS2AanUg50f3FBSNoAdBSRAh8uS0ue01qm7zrw65KGJtiXB9QXfybqZwkh4uFpRv2iX/eu5tjcH5wqUpwYLPg==} 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.4': - resolution: {integrity: sha512-fNGO9fjjSLns87tlcto106enQQLycCKR4DPNpgq3djP5IdcPFdPAmaKjsgzIeRhH7hWrELgW12hYnRthS5kLUw==} + '@tanstack/virtual-core@3.13.8': + resolution: {integrity: sha512-BT6w89Hqy7YKaWewYzmecXQzcJh6HTBbKYJIIkMaNU49DZ06LoTV3z32DWWEdUsgW6n1xTmwTLs4GtWrZC261w==} '@tauri-apps/api@2.0.0-alpha.6': resolution: {integrity: sha512-ZMOc3eu9amwvkC6M69h3hWt4/EsFaAXmtkiw4xd2LN59/lTb4ZQiVfq2QKlRcu1rj3n/Tcr7U30ZopvHwXBGIg==} engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - '@tauri-apps/api@2.4.0': - resolution: {integrity: sha512-F1zXTsmwcCp+ocg6fbzD/YL0OHeSG1eynCag1UNlX2tD5+dlXy7eRbTu9cAcscPjcR7Nix7by2wiv/+VfWUieg==} + '@tauri-apps/api@2.5.0': + resolution: {integrity: sha512-Ldux4ip+HGAcPUmuLT8EIkk6yafl5vK0P0c0byzAKzxJh7vxelVtdPONjfgTm96PbN24yjZNESY8CKo8qniluA==} - '@tauri-apps/cli-darwin-arm64@2.4.0': - resolution: {integrity: sha512-MVzYrahJBgDyzUJ2gNEU8H+0oCVEucN115+CVorFnidHcJ6DtDRMCaKLkpjOZNfJyag1WQ25fu7imvZSe0mz/g==} + '@tauri-apps/cli-darwin-arm64@2.5.0': + resolution: {integrity: sha512-VuVAeTFq86dfpoBDNYAdtQVLbP0+2EKCHIIhkaxjeoPARR0sLpFHz2zs0PcFU76e+KAaxtEtAJAXGNUc8E1PzQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.4.0': - resolution: {integrity: sha512-/4IdbWv6IWSuBn0WVe5JkiSIP1gZhXCZRcumSsYq3ZmOlq4BqXeXT36Oig5mlDnS/2/UpNS94kd8gOA1DNdIeQ==} + '@tauri-apps/cli-darwin-x64@2.5.0': + resolution: {integrity: sha512-hUF01sC06cZVa8+I0/VtsHOk9BbO75rd+YdtHJ48xTdcYaQ5QIwL4yZz9OR1AKBTaUYhBam8UX9Pvd5V2/4Dpw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.4.0': - resolution: {integrity: sha512-rOjlk3Vd6R847LXds4pOAFKUL5NVdSWlaiQvr4H9WDUwIWWoxnj7SQfpryTtElDb2wV7a0BNaOCXCpyFEAXjkw==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.5.0': + resolution: {integrity: sha512-LQKqttsK252LlqYyX8R02MinUsfFcy3+NZiJwHFgi5Y3+ZUIAED9cSxJkyNtuY5KMnR4RlpgWyLv4P6akN1xhg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.4.0': - resolution: {integrity: sha512-X/uCwao6R/weWT2y4f3JKJMeUsujo9H4nBMAv9RZhRsz93n9Amw9ETavAOP11pyhl57YkasvKTCRQN6FwsaoXg==} + '@tauri-apps/cli-linux-arm64-gnu@2.5.0': + resolution: {integrity: sha512-mTQufsPcpdHg5RW0zypazMo4L55EfeE5snTzrPqbLX4yCK2qalN7+rnP8O8GT06xhp6ElSP/Ku1M2MR297SByQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-arm64-musl@2.4.0': - resolution: {integrity: sha512-GhvQtrTjadW3eLSmfrSfybSqgJMZzUXC+0WqDzFovLug3a1a1go0m9QK9YGvYLkyEpTY5zRxLtwv+tbZXN4tZw==} + '@tauri-apps/cli-linux-arm64-musl@2.5.0': + resolution: {integrity: sha512-rQO1HhRUQqyEaal5dUVOQruTRda/TD36s9kv1hTxZiFuSq3558lsTjAcUEnMAtBcBkps20sbyTJNMT0AwYIk8Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-riscv64-gnu@2.4.0': - resolution: {integrity: sha512-NgeNihQ9uHS/ibMWLge5VA/BgsS/g8VPSVtCp8DSPyub3bBuCy79A8V+bzNKlMOiDVrqK4vQ//FS9kSxoJOtXw==} + '@tauri-apps/cli-linux-riscv64-gnu@2.5.0': + resolution: {integrity: sha512-7oS18FN46yDxyw1zX/AxhLAd7T3GrLj3Ai6s8hZKd9qFVzrAn36ESL7d3G05s8wEtsJf26qjXnVF4qleS3dYsA==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - '@tauri-apps/cli-linux-x64-gnu@2.4.0': - resolution: {integrity: sha512-ebRmV2HLIVms1KlNNueQCp3OrXBv6cimU3mYEh5NbZ8dH88f2sF46dFCyPq8Qr/Zti4qPEaAArVG7RYFjfECPw==} + '@tauri-apps/cli-linux-x64-gnu@2.5.0': + resolution: {integrity: sha512-SG5sFNL7VMmDBdIg3nO3EzNRT306HsiEQ0N90ILe3ZABYAVoPDO/ttpCO37ApLInTzrq/DLN+gOlC/mgZvLw1w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-linux-x64-musl@2.4.0': - resolution: {integrity: sha512-FOp2cBFyq5LnUr3he95Z99PQm3nCSJv2GZNeH7UqmUpeHwdcYuhBERU7C+8VDJJPR98Q5fkcoV00Pc4nw0v5KQ==} + '@tauri-apps/cli-linux-x64-musl@2.5.0': + resolution: {integrity: sha512-QXDM8zp/6v05PNWju5ELsVwF0VH1n6b5pk2E6W/jFbbiwz80Vs1lACl9pv5kEHkrxBj+aWU/03JzGuIj2g3SkQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-win32-arm64-msvc@2.4.0': - resolution: {integrity: sha512-SVf1wDagYsaFM+mpUYKmjNveKodcUSGPEM27WmMW4Enh6aXGzTJi4IYOE3GEFOJF1BpRNscslwE1Rd064kfpcg==} + '@tauri-apps/cli-win32-arm64-msvc@2.5.0': + resolution: {integrity: sha512-pFSHFK6b+o9y4Un8w0gGLwVyFTZaC3P0kQ7umRt/BLDkzD5RnQ4vBM7CF8BCU5nkwmEBUCZd7Wt3TWZxe41o6Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.4.0': - resolution: {integrity: sha512-j+fOFVeSSejk9hrUePY7bJuaYr+80xr+ftjXzxCj0CS0d2oSbq+lT8/zS514WemJk9e9yxUus+2ke/Ng17wkkQ==} + '@tauri-apps/cli-win32-ia32-msvc@2.5.0': + resolution: {integrity: sha512-EArv1IaRlogdLAQyGlKmEqZqm5RfHCUMhJoedWu7GtdbOMUfSAz6FMX2boE1PtEmNO4An+g188flLeVErrxEKg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.4.0': - resolution: {integrity: sha512-nv84b3a8eI5Y7ksTLBKjjvtr9NOlAGGGo7OJbjKT+xZLdiPOZ0nJ2cT+4IdfnNAZ33pKJugAfuj1fBvQKeTy0w==} + '@tauri-apps/cli-win32-x64-msvc@2.5.0': + resolution: {integrity: sha512-lj43EFYbnAta8pd9JnUq87o+xRUR0odz+4rixBtTUwUgdRdwQ2V9CzFtsMu6FQKpFQ6mujRK6P1IEwhL6ADRsQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.4.0': - resolution: {integrity: sha512-Esg7s20tuSULd2YF3lmtMa1vF7yr5eh/TlBHXjEyrC+XSD9aBxHVoXb6oz7oKybDY9Jf9OiBa0bf2PbybcmOLA==} + '@tauri-apps/cli@2.5.0': + resolution: {integrity: sha512-rAtHqG0Gh/IWLjN2zTf3nZqYqbo81oMbqop56rGTjrlWk9pTTAjkqOjSL9XQLIMZ3RbeVjveCqqCA0s8RnLdMg==} engines: {node: '>= 10'} hasBin: true '@tauri-apps/plugin-autostart@2.2.0': resolution: {integrity: sha512-TzVcDZdOvdot0avkpstUWJKKEl4cyxLpFB9DZZRW5zH8k+Bv8IVJmO0zyYuw+7oKlGdHOINbD/7Je7GHMViw5w==} - '@tauri-apps/plugin-deep-link@2.2.0': - resolution: {integrity: sha512-H6mkxr2KZ3XJcKL44tiq6cOjCw9DL8OgU1xjn3j26Qsn+H/roPFiyhR7CHuB8Ar+sQFj4YVlfmJwtBajK2FETQ==} + '@tauri-apps/plugin-deep-link@2.2.1': + resolution: {integrity: sha512-8skZ6qIH/kWaV8d6jj3aPvvkIOuqkVk0APRDey9n9N3Ueu3n4MIbuxpAKR2EdoAyQxnXxPTNVyjw2D35/vfGyg==} - '@tauri-apps/plugin-dialog@2.2.0': - resolution: {integrity: sha512-6bLkYK68zyK31418AK5fNccCdVuRnNpbxquCl8IqgFByOgWFivbiIlvb79wpSXi0O+8k8RCSsIpOquebusRVSg==} + '@tauri-apps/plugin-dialog@2.2.1': + resolution: {integrity: sha512-wZmCouo4PgTosh/UoejPw9DPs6RllS5Pp3fuOV2JobCu36mR5AXU2MzU9NZiVaFi/5Zfc8RN0IhcZHnksJ1o8A==} '@tauri-apps/plugin-global-shortcut@2.0.0': resolution: {integrity: sha512-pnB4CUwFVjg4twtBSxoLJ4uLFTYxsvOdC1zIbG581pYzhYatOl6mjB+ijD5SSXgiS/jNoqMcfkOF9PWAisurew==} @@ -1242,11 +1253,11 @@ packages: '@tauri-apps/plugin-os@2.2.1': resolution: {integrity: sha512-cNYpNri2CCc6BaNeB6G/mOtLvg8dFyFQyCUdf2y0K8PIAKGEWdEcu8DECkydU2B+oj4OJihDPD2de5K6cbVl9A==} - '@tauri-apps/plugin-process@2.2.0': - resolution: {integrity: sha512-uypN2Crmyop9z+KRJr3zl71OyVFgTuvHFjsJ0UxxQ/J5212jVa5w4nPEYjIewcn8bUEXacRebwE6F7owgrbhSw==} + '@tauri-apps/plugin-process@2.2.1': + resolution: {integrity: sha512-cF/k8J+YjjuowhNG1AboHNTlrGiOwgX5j6NzsX6WFf9FMzyZUchkCgZMxCdSE5NIgFX0vvOgLQhODFJgbMenLg==} - '@tauri-apps/plugin-shell@2.2.0': - resolution: {integrity: sha512-iC3Ic1hLmasoboG7BO+7p+AriSoqAwKrIk+Hpk+S/bjTQdXqbl2GbdclghI4gM32X0bls7xHzIFqhRdrlvJeaA==} + '@tauri-apps/plugin-shell@2.2.1': + resolution: {integrity: sha512-G1GFYyWe/KlCsymuLiNImUgC8zGY0tI0Y3p8JgBCWduR5IEXlIJS+JuG1qtveitwYXlfJrsExt3enhv5l2/yhA==} '@tauri-apps/plugin-updater@https://codeload.github.com/infinilabs/tauri-plugin-updater/tar.gz/358e689c65e9943b53eff50bcb9dfd5b1cfc4072': resolution: {tarball: https://codeload.github.com/infinilabs/tauri-plugin-updater/tar.gz/358e689c65e9943b53eff50bcb9dfd5b1cfc4072} @@ -1264,14 +1275,14 @@ packages: '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/babel__traverse@7.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -1375,8 +1386,8 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} @@ -1408,17 +1419,18 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.13.11': - resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==} + '@types/node@22.15.17': + resolution: {integrity: sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==} - '@types/parse-path@7.0.3': - resolution: {integrity: sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==} + '@types/parse-path@7.1.0': + resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} + deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - '@types/react-dom@18.3.5': - resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} peerDependencies: '@types/react': ^18.0.0 @@ -1428,8 +1440,8 @@ packages: '@types/react-window@1.8.8': resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==} - '@types/react@18.3.19': - resolution: {integrity: sha512-fcdJqaHOMDbiAwJnXv6XCzX0jDW77yI3tJqYh1Byn8EL5/S628WRx9b/y3DnNe55zTukUQKrfYxiZls2dHcUMw==} + '@types/react@18.3.21': + resolution: {integrity: sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1443,14 +1455,14 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitejs/plugin-react@4.3.4': - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + '@vitejs/plugin-react@4.4.1': + resolution: {integrity: sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@wavesurfer/react@1.0.9': - resolution: {integrity: sha512-HD3x+p48kWITd3tCOA7KG+6zae8btulNjSTdnRmgrtp9/XPzXc61ZCaPgbqT0gioPGhIcvBcpXZAmnhE8lUDBw==} + '@wavesurfer/react@1.0.11': + resolution: {integrity: sha512-DRpaA3MRTKy4Jby12xvoHASa+w31FZtxaqanXcJjfqNqfamkKi8VJfRnz+Uub9LkpdgoAc3g5SuZF75lEcGgzQ==} peerDependencies: react: ^18.2.0 || ^19.0.0 wavesurfer.js: '>=7.7.14' @@ -1526,8 +1538,8 @@ packages: peerDependencies: postcss: ^8.1.0 - axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + axios@1.9.0: + resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -1560,8 +1572,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1595,8 +1607,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001707: - resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} + caniuse-lite@1.0.30001717: + resolution: {integrity: sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1695,8 +1707,8 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.1: - resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -1754,8 +1766,8 @@ packages: peerDependencies: cytoscape: ^3.2.0 - cytoscape@3.31.1: - resolution: {integrity: sha512-Hx5Mtb1+hnmAKaZZ/7zL1Y5HTFYOjdDswZy/jD+1WINRU8KVi1B7+vlHdsTwY+VCFucTreoyu1RDzQJ9u0d2Hw==} + cytoscape@3.32.0: + resolution: {integrity: sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==} engines: {node: '>=0.10'} d3-array@2.12.1: @@ -1964,15 +1976,15 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dompurify@3.2.4: - resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} + dompurify@3.2.5: + resolution: {integrity: sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==} dot-prop@9.0.0: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} engines: {node: '>=18'} - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + dotenv@16.5.0: + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -1982,8 +1994,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.123: - resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} + electron-to-chromium@1.5.151: + resolution: {integrity: sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -1994,8 +2006,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + entities@6.0.0: + resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} env-paths@2.2.1: @@ -2026,8 +2038,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} hasBin: true @@ -2072,8 +2084,8 @@ packages: resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} engines: {node: ^18.19.0 || >=20.5.0} - exsolve@1.0.4: - resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + exsolve@1.0.5: + resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2092,8 +2104,8 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + fdir@6.4.4: + resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -2174,8 +2186,8 @@ packages: resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} engines: {node: '>= 14'} - git-up@8.0.1: - resolution: {integrity: sha512-2XFu1uNZMSjkyetaF+8rqn6P0XqpMq/C+2ycjI6YwrIKcszZ5/WR4UubxjN0lILOKqLkLaHDaCr2B6fP1cke6g==} + git-up@8.1.1: + resolution: {integrity: sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==} git-url-parse@16.0.0: resolution: {integrity: sha512-Y8iAF0AmCaqXc6a5GYgPQW9ESbncNLOL+CeQAJRhmWUOmnPkKpBYeWYp4mFd3LA5j53CdGDdslzX12yEBVHQQg==} @@ -2289,12 +2301,12 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - human-signals@8.0.0: - resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} - i18next-browser-languagedetector@8.0.4: - resolution: {integrity: sha512-f3frU3pIxD50/Tz20zx9TD9HobKYg47fmAETb117GKGPrhwcSSPJDoCposXlVycVebQ9GQohC3Efbpq7/nnJ5w==} + i18next-browser-languagedetector@8.1.0: + resolution: {integrity: sha512-mHZxNx1Lq09xt5kCauZ/4bsXOEA2pfpwSoU11/QTJB+pD94iONFwp+ohqi///PwiFvjFOxe1akYCdHyFo1ng5Q==} i18next@23.16.8: resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} @@ -2314,8 +2326,8 @@ packages: immer@10.1.1: resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} - immutable@5.1.1: - resolution: {integrity: sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==} + immutable@5.1.2: + resolution: {integrity: sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -2504,8 +2516,8 @@ packages: engines: {node: '>=6'} hasBin: true - katex@0.16.21: - resolution: {integrity: sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==} + katex@0.16.22: + resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} hasBin: true khroma@2.1.0: @@ -2514,12 +2526,12 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - ky@1.7.5: - resolution: {integrity: sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==} + ky@1.8.1: + resolution: {integrity: sha512-7Bp3TpsE+L+TARSnnDpk3xg8Idi8RwSLdj6CMbNWoOARIrGrbuLGusV0dYwbZOm4bB3jHNxSw8Wk/ByDqJEnDw==} engines: {node: '>=18'} - langium@3.0.0: - resolution: {integrity: sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==} + langium@3.3.1: + resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} engines: {node: '>=16.0.0'} latest-version@9.0.0: @@ -2607,8 +2619,8 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - marked@15.0.7: - resolution: {integrity: sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==} + marked@15.0.11: + resolution: {integrity: sha512-1BEXAU2euRCG3xwgLVT1y0xbJEld1XOrmRJpUwRCcy7rxhSCwMrmEu9LXoPhHSCJG41V7YcQ2mjKRr5BA3ITIA==} engines: {node: '>= 18'} hasBin: true @@ -2677,8 +2689,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - mermaid@11.5.0: - resolution: {integrity: sha512-IYhyukID3zzDj1EihKiN1lp+PXNImoJ3Iyz73qeDAgnus4BNGsJV1n471P4PyeGxPVONerZxignwGxGTSwZnlg==} + mermaid@11.6.0: + resolution: {integrity: sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==} micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -2904,8 +2916,8 @@ packages: resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} engines: {node: '>=18'} - package-manager-detector@0.2.11: - resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -2922,15 +2934,15 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parse-path@7.0.1: - resolution: {integrity: sha512-6ReLMptznuuOEzLoGEa+I1oWRSj2Zna5jLWC+l6zlfAI4dbbSaIES29ThzuPkbhNahT65dWzfoZEO6cfJw2Ksg==} + parse-path@7.1.0: + resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} parse-url@9.2.0: resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} engines: {node: '>=14.13.0'} - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} path-data-parser@0.1.0: resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} @@ -2976,8 +2988,8 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} pkg-types@1.3.1: @@ -3055,8 +3067,8 @@ packages: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -3097,24 +3109,27 @@ packages: react-fast-compare@3.2.2: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - react-hotkeys-hook@4.6.1: - resolution: {integrity: sha512-XlZpbKUj9tkfgPgT9gA+1p7Ey6vFIZHttUjPqpTdyT5nqQ8mHL7elxvSbaC+dpSiHUSmr21Ya1mDxBZG3aje4Q==} + react-hotkeys-hook@4.6.2: + resolution: {integrity: sha512-FmP+ZriY3EG59Ug/lxNfrObCnW9xQShgk7Nb83+CkpfkcCpfS95ydv+E9JuXA5cp8KtskU7LGlIARpkc92X22Q==} peerDependencies: react: '>=16.8.1' react-dom: '>=16.8.1' - react-i18next@15.4.1: - resolution: {integrity: sha512-ahGab+IaSgZmNPYXdV1n+OYky95TGpFwnKRflX/16dY04DsYYKHtVLjeny7sBSCREEcoMbAgSkFiGLF5g5Oofw==} + react-i18next@15.5.1: + resolution: {integrity: sha512-C8RZ7N7H0L+flitiX6ASjq9p5puVJU1Z8VyL3OgM/QOMRf40BMZX+5TkpxzZVcTmOLPX5zlti4InEX5pFyiVeA==} peerDependencies: i18next: '>= 23.2.3' react: '>= 16.8.0' react-dom: '*' react-native: '*' + typescript: ^5 peerDependenciesMeta: react-dom: optional: true react-native: optional: true + typescript: + optional: true react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -3125,8 +3140,8 @@ packages: '@types/react': '>=18' react: '>=18' - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} react-router-dom@6.30.0: @@ -3168,9 +3183,6 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - registry-auth-token@5.1.0: resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} engines: {node: '>=14'} @@ -3202,8 +3214,8 @@ packages: remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - remark-rehype@11.1.1: - resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} @@ -3242,8 +3254,8 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup@4.36.0: - resolution: {integrity: sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==} + rollup@4.40.2: + resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3413,11 +3425,11 @@ packages: tauri-plugin-fs-pro-api@2.4.0: resolution: {integrity: sha512-SfXMQC3SClaHCzEfrQOeSgQvx+YrlfQQpbbtj1U9LJhRjhwpIsC71UqtzcI2J7aJTt5njD+7Oe8daa3mH0Eybg==} - tauri-plugin-macos-permissions-api@2.2.0: - resolution: {integrity: sha512-pgcBqtUMucSColUJ/HcLOBOr+Z+sma2o0nAuobG1uSGBwFJXwltGKE4XsYynktzfzyTpha/xwta2eLezH+EqLg==} + tauri-plugin-macos-permissions-api@2.3.0: + resolution: {integrity: sha512-pZp0jmDySysBqrGueknd1a7Rr4XEO9aXpMv9TNrT2PDHP0MSH20njieOagsFYJ5MCVb8A+wcaK0cIkjUC2dOww==} - tauri-plugin-screenshots-api@2.1.0: - resolution: {integrity: sha512-lknHlq7truhBCO4lVlHBWkk/YYrKXNef0mveUftHC3U0LBI/GTNzOFbyZk+VhHAcztTB5BPpZA0TSbuLd9zgQA==} + tauri-plugin-screenshots-api@2.2.0: + resolution: {integrity: sha512-xNG5yH6kl+Mk/969tFimIxZa6y6eVgarbsEVAJIpERYBlYoNfWCDdI3nW111UOQjWi6zG/RkGjUMLlVy12a3Sg==} tauri-plugin-windows-version-api@2.0.0: resolution: {integrity: sha512-tty5n4ASYbXpnsD5ws2iTcTTpDCrSbzRTVp5Bo3UTpYGqlN1gBn2Zk8s3oO4w7VIM5WtJhDM9Jr/UgoTk7tFJQ==} @@ -3432,8 +3444,11 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + tinyglobby@0.2.13: + resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} tmp@0.0.33: @@ -3486,8 +3501,8 @@ packages: typescript: optional: true - tsx@4.19.3: - resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + tsx@4.19.4: + resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} engines: {node: '>=18.0.0'} hasBin: true @@ -3499,20 +3514,20 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.37.0: - resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} undici@6.21.1: resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} @@ -3573,6 +3588,11 @@ packages: peerDependencies: react: '*' + 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==} @@ -3589,8 +3609,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -3644,8 +3664,8 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - wavesurfer.js@7.9.3: - resolution: {integrity: sha512-GgYIQjZYu4Q2tm+qrFhBCoQm+K7+SGqulEsKXndIjmJ4b/drA1umjgQlDc+wGotGAef/8hH/gu5f3bf19yDyxw==} + wavesurfer.js@7.9.5: + resolution: {integrity: sha512-ioOG9chuAn0bF2NYYKkZtaxjcQK/hFskLg8ViLYbJHhWPk1N5wWtuqVhqeh2ZWT2SK3t0E8UkD7lLDLuZQQaSA==} web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -3701,8 +3721,8 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + yaml@2.7.1: + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} engines: {node: '>= 14'} hasBin: true @@ -3718,8 +3738,8 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} - zustand@5.0.3: - resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} + zustand@5.0.4: + resolution: {integrity: sha512-39VFTN5InDtMd28ZhjLyuTnlytDr9HfwO512Ai4I8ZABCoyAj4F1+sr7sD1jP/+p7k77Iko0Pb5NhgBFDCX0kQ==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -3765,33 +3785,33 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@antfu/install-pkg@1.0.0': + '@antfu/install-pkg@1.1.0': dependencies: - package-manager-detector: 0.2.11 - tinyexec: 0.3.2 + package-manager-detector: 1.3.0 + tinyexec: 1.0.1 '@antfu/utils@8.1.1': {} - '@babel/code-frame@7.26.2': + '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.8': {} + '@babel/compat-data@7.27.2': {} - '@babel/core@7.26.10': + '@babel/core@7.27.1': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.10 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helpers': 7.26.10 - '@babel/parser': 7.26.10 - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helpers': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -3800,91 +3820,89 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.26.10': + '@babel/generator@7.27.1': dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.26.5': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 + '@babel/compat-data': 7.27.2 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.5 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-module-imports@7.25.9': + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.10 + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.26.10': + '@babel/helpers@7.27.1': dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.10 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 - '@babel/parser@7.26.10': + '@babel/parser@7.27.2': dependencies: - '@babel/types': 7.26.10 + '@babel/types': 7.27.1 - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/runtime@7.26.10': - dependencies: - regenerator-runtime: 0.14.1 + '@babel/runtime@7.27.1': {} - '@babel/template@7.26.9': + '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 - '@babel/traverse@7.26.10': + '@babel/traverse@7.27.1': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.10 - '@babel/parser': 7.26.10 - '@babel/template': 7.26.9 - '@babel/types': 7.26.10 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.10': + '@babel/types@7.27.1': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 '@braintree/sanitize-url@7.1.1': {} @@ -3908,159 +3926,159 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.25.1': + '@esbuild/aix-ppc64@0.25.4': optional: true '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.25.1': + '@esbuild/android-arm64@0.25.4': optional: true '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.25.1': + '@esbuild/android-arm@0.25.4': optional: true '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.25.1': + '@esbuild/android-x64@0.25.4': optional: true '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.25.1': + '@esbuild/darwin-arm64@0.25.4': optional: true '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.25.1': + '@esbuild/darwin-x64@0.25.4': optional: true '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.25.1': + '@esbuild/freebsd-arm64@0.25.4': optional: true '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.25.1': + '@esbuild/freebsd-x64@0.25.4': optional: true '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.25.1': + '@esbuild/linux-arm64@0.25.4': optional: true '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.25.1': + '@esbuild/linux-arm@0.25.4': optional: true '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.25.1': + '@esbuild/linux-ia32@0.25.4': optional: true '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-loong64@0.25.1': + '@esbuild/linux-loong64@0.25.4': optional: true '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-mips64el@0.25.1': + '@esbuild/linux-mips64el@0.25.4': optional: true '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-ppc64@0.25.1': + '@esbuild/linux-ppc64@0.25.4': optional: true '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.25.1': + '@esbuild/linux-riscv64@0.25.4': optional: true '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-s390x@0.25.1': + '@esbuild/linux-s390x@0.25.4': optional: true '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/linux-x64@0.25.1': + '@esbuild/linux-x64@0.25.4': optional: true - '@esbuild/netbsd-arm64@0.25.1': + '@esbuild/netbsd-arm64@0.25.4': optional: true '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.25.1': + '@esbuild/netbsd-x64@0.25.4': optional: true - '@esbuild/openbsd-arm64@0.25.1': + '@esbuild/openbsd-arm64@0.25.4': optional: true '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.25.1': + '@esbuild/openbsd-x64@0.25.4': optional: true '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.25.1': + '@esbuild/sunos-x64@0.25.4': optional: true '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-arm64@0.25.1': + '@esbuild/win32-arm64@0.25.4': optional: true '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.25.1': + '@esbuild/win32-ia32@0.25.4': optional: true '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.25.1': + '@esbuild/win32-x64@0.25.4': optional: true - '@floating-ui/core@1.6.9': + '@floating-ui/core@1.7.0': dependencies: '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.13': + '@floating-ui/dom@1.7.0': dependencies: - '@floating-ui/core': 1.6.9 + '@floating-ui/core': 1.7.0 '@floating-ui/utils': 0.2.9 '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.13 + '@floating-ui/dom': 1.7.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -4074,14 +4092,15 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@headlessui/react@2.2.2(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.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-virtual': 3.13.4(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.8(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': {} @@ -4089,7 +4108,7 @@ snapshots: '@iconify/utils@2.3.0': dependencies: - '@antfu/install-pkg': 1.0.0 + '@antfu/install-pkg': 1.1.0 '@antfu/utils': 8.1.1 '@iconify/types': 2.0.0 debug: 4.4.0 @@ -4100,27 +4119,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@inquirer/checkbox@4.1.4(@types/node@22.13.11)': + '@inquirer/checkbox@4.1.5(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/type': 3.0.6(@types/node@22.15.17) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/confirm@5.1.8(@types/node@22.13.11)': + '@inquirer/confirm@5.1.9(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) + '@inquirer/type': 3.0.6(@types/node@22.15.17) optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/core@10.1.9(@types/node@22.13.11)': + '@inquirer/core@10.1.10(@types/node@22.15.17)': dependencies: '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/type': 3.0.6(@types/node@22.15.17) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -4128,93 +4147,93 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/editor@4.2.9(@types/node@22.13.11)': + '@inquirer/editor@4.2.10(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) + '@inquirer/type': 3.0.6(@types/node@22.15.17) external-editor: 3.1.0 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/expand@4.0.11(@types/node@22.13.11)': + '@inquirer/expand@4.0.12(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) + '@inquirer/type': 3.0.6(@types/node@22.15.17) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 '@inquirer/figures@1.0.11': {} - '@inquirer/input@4.1.8(@types/node@22.13.11)': + '@inquirer/input@4.1.9(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) + '@inquirer/type': 3.0.6(@types/node@22.15.17) optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/number@3.0.11(@types/node@22.13.11)': + '@inquirer/number@3.0.12(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) + '@inquirer/type': 3.0.6(@types/node@22.15.17) optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/password@4.0.11(@types/node@22.13.11)': + '@inquirer/password@4.0.12(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) + '@inquirer/type': 3.0.6(@types/node@22.15.17) ansi-escapes: 4.3.2 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/prompts@7.4.0(@types/node@22.13.11)': + '@inquirer/prompts@7.5.0(@types/node@22.15.17)': dependencies: - '@inquirer/checkbox': 4.1.4(@types/node@22.13.11) - '@inquirer/confirm': 5.1.8(@types/node@22.13.11) - '@inquirer/editor': 4.2.9(@types/node@22.13.11) - '@inquirer/expand': 4.0.11(@types/node@22.13.11) - '@inquirer/input': 4.1.8(@types/node@22.13.11) - '@inquirer/number': 3.0.11(@types/node@22.13.11) - '@inquirer/password': 4.0.11(@types/node@22.13.11) - '@inquirer/rawlist': 4.0.11(@types/node@22.13.11) - '@inquirer/search': 3.0.11(@types/node@22.13.11) - '@inquirer/select': 4.1.0(@types/node@22.13.11) + '@inquirer/checkbox': 4.1.5(@types/node@22.15.17) + '@inquirer/confirm': 5.1.9(@types/node@22.15.17) + '@inquirer/editor': 4.2.10(@types/node@22.15.17) + '@inquirer/expand': 4.0.12(@types/node@22.15.17) + '@inquirer/input': 4.1.9(@types/node@22.15.17) + '@inquirer/number': 3.0.12(@types/node@22.15.17) + '@inquirer/password': 4.0.12(@types/node@22.15.17) + '@inquirer/rawlist': 4.1.0(@types/node@22.15.17) + '@inquirer/search': 3.0.12(@types/node@22.15.17) + '@inquirer/select': 4.2.0(@types/node@22.15.17) optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/rawlist@4.0.11(@types/node@22.13.11)': + '@inquirer/rawlist@4.1.0(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) + '@inquirer/type': 3.0.6(@types/node@22.15.17) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/search@3.0.11(@types/node@22.13.11)': + '@inquirer/search@3.0.12(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/type': 3.0.6(@types/node@22.15.17) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/select@4.1.0(@types/node@22.13.11)': + '@inquirer/select@4.2.0(@types/node@22.15.17)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) + '@inquirer/core': 10.1.10(@types/node@22.15.17) '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.11) + '@inquirer/type': 3.0.6(@types/node@22.15.17) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 - '@inquirer/type@3.0.5(@types/node@22.13.11)': + '@inquirer/type@3.0.6(@types/node@22.15.17)': optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 '@isaacs/cliui@8.0.2': dependencies: @@ -4242,9 +4261,9 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@mermaid-js/parser@0.3.0': + '@mermaid-js/parser@0.4.0': dependencies: - langium: 3.0.0 + langium: 3.3.1 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -4260,66 +4279,72 @@ snapshots: '@octokit/auth-token@5.1.2': {} - '@octokit/core@6.1.4': + '@octokit/core@6.1.5': dependencies: '@octokit/auth-token': 5.1.2 - '@octokit/graphql': 8.2.1 - '@octokit/request': 9.2.2 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.10.0 + '@octokit/graphql': 8.2.2 + '@octokit/request': 9.2.3 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 - '@octokit/endpoint@10.1.3': + '@octokit/endpoint@10.1.4': dependencies: - '@octokit/types': 13.10.0 + '@octokit/types': 14.0.0 universal-user-agent: 7.0.2 - '@octokit/graphql@8.2.1': + '@octokit/graphql@8.2.2': dependencies: - '@octokit/request': 9.2.2 - '@octokit/types': 13.10.0 + '@octokit/request': 9.2.3 + '@octokit/types': 14.0.0 universal-user-agent: 7.0.2 '@octokit/openapi-types@24.2.0': {} - '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.4)': + '@octokit/openapi-types@25.0.0': {} + + '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.5)': dependencies: - '@octokit/core': 6.1.4 + '@octokit/core': 6.1.5 '@octokit/types': 13.10.0 - '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.4)': + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.5)': dependencies: - '@octokit/core': 6.1.4 + '@octokit/core': 6.1.5 - '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.4)': + '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.5)': dependencies: - '@octokit/core': 6.1.4 + '@octokit/core': 6.1.5 '@octokit/types': 13.10.0 - '@octokit/request-error@6.1.7': + '@octokit/request-error@6.1.8': dependencies: - '@octokit/types': 13.10.0 + '@octokit/types': 14.0.0 - '@octokit/request@9.2.2': + '@octokit/request@9.2.3': dependencies: - '@octokit/endpoint': 10.1.3 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.10.0 + '@octokit/endpoint': 10.1.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 fast-content-type-parse: 2.0.1 universal-user-agent: 7.0.2 '@octokit/rest@21.0.2': dependencies: - '@octokit/core': 6.1.4 - '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.4) - '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.4) - '@octokit/plugin-rest-endpoint-methods': 13.5.0(@octokit/core@6.1.4) + '@octokit/core': 6.1.5 + '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.5) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.5) + '@octokit/plugin-rest-endpoint-methods': 13.5.0(@octokit/core@6.1.5) '@octokit/types@13.10.0': dependencies: '@octokit/openapi-types': 24.2.0 + '@octokit/types@14.0.0': + dependencies: + '@octokit/openapi-types': 25.0.0 + '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -4402,112 +4427,115 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-is: 18.3.1 - '@react-aria/focus@3.20.1(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)': dependencies: - '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 + '@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 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/interactions@3.24.1(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)': dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/flags': 3.1.0 - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 + '@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 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/ssr@3.9.7(react@18.3.1)': + '@react-aria/ssr@3.9.8(react@18.3.1)': dependencies: - '@swc/helpers': 0.5.15 + '@swc/helpers': 0.5.17 react: 18.3.1 - '@react-aria/utils@3.28.1(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)': dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-stately/flags': 3.1.0 - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 + '@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 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-stately/flags@3.1.0': + '@react-stately/flags@3.1.1': dependencies: - '@swc/helpers': 0.5.15 + '@swc/helpers': 0.5.17 - '@react-stately/utils@3.10.5(react@18.3.1)': + '@react-stately/utils@3.10.6(react@18.3.1)': dependencies: - '@swc/helpers': 0.5.15 + '@swc/helpers': 0.5.17 react: 18.3.1 - '@react-types/shared@3.28.0(react@18.3.1)': + '@react-types/shared@3.29.0(react@18.3.1)': dependencies: react: 18.3.1 '@remix-run/router@1.23.0': {} - '@rollup/rollup-android-arm-eabi@4.36.0': + '@rollup/rollup-android-arm-eabi@4.40.2': optional: true - '@rollup/rollup-android-arm64@4.36.0': + '@rollup/rollup-android-arm64@4.40.2': optional: true - '@rollup/rollup-darwin-arm64@4.36.0': + '@rollup/rollup-darwin-arm64@4.40.2': optional: true - '@rollup/rollup-darwin-x64@4.36.0': + '@rollup/rollup-darwin-x64@4.40.2': optional: true - '@rollup/rollup-freebsd-arm64@4.36.0': + '@rollup/rollup-freebsd-arm64@4.40.2': optional: true - '@rollup/rollup-freebsd-x64@4.36.0': + '@rollup/rollup-freebsd-x64@4.40.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.36.0': + '@rollup/rollup-linux-arm-gnueabihf@4.40.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.36.0': + '@rollup/rollup-linux-arm-musleabihf@4.40.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.36.0': + '@rollup/rollup-linux-arm64-gnu@4.40.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.36.0': + '@rollup/rollup-linux-arm64-musl@4.40.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.36.0': + '@rollup/rollup-linux-loongarch64-gnu@4.40.2': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.36.0': + '@rollup/rollup-linux-riscv64-gnu@4.40.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.36.0': + '@rollup/rollup-linux-riscv64-musl@4.40.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.36.0': + '@rollup/rollup-linux-s390x-gnu@4.40.2': optional: true - '@rollup/rollup-linux-x64-musl@4.36.0': + '@rollup/rollup-linux-x64-gnu@4.40.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.36.0': + '@rollup/rollup-linux-x64-musl@4.40.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.36.0': + '@rollup/rollup-win32-arm64-msvc@4.40.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.36.0': + '@rollup/rollup-win32-ia32-msvc@4.40.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.40.2': optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -4516,108 +4544,108 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@swc/helpers@0.5.15': + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 - '@tanstack/react-virtual@3.13.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-virtual@3.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/virtual-core': 3.13.4 + '@tanstack/virtual-core': 3.13.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/virtual-core@3.13.4': {} + '@tanstack/virtual-core@3.13.8': {} '@tauri-apps/api@2.0.0-alpha.6': {} - '@tauri-apps/api@2.4.0': {} + '@tauri-apps/api@2.5.0': {} - '@tauri-apps/cli-darwin-arm64@2.4.0': + '@tauri-apps/cli-darwin-arm64@2.5.0': optional: true - '@tauri-apps/cli-darwin-x64@2.4.0': + '@tauri-apps/cli-darwin-x64@2.5.0': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.4.0': + '@tauri-apps/cli-linux-arm-gnueabihf@2.5.0': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.4.0': + '@tauri-apps/cli-linux-arm64-gnu@2.5.0': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.4.0': + '@tauri-apps/cli-linux-arm64-musl@2.5.0': optional: true - '@tauri-apps/cli-linux-riscv64-gnu@2.4.0': + '@tauri-apps/cli-linux-riscv64-gnu@2.5.0': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.4.0': + '@tauri-apps/cli-linux-x64-gnu@2.5.0': optional: true - '@tauri-apps/cli-linux-x64-musl@2.4.0': + '@tauri-apps/cli-linux-x64-musl@2.5.0': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.4.0': + '@tauri-apps/cli-win32-arm64-msvc@2.5.0': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.4.0': + '@tauri-apps/cli-win32-ia32-msvc@2.5.0': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.4.0': + '@tauri-apps/cli-win32-x64-msvc@2.5.0': optional: true - '@tauri-apps/cli@2.4.0': + '@tauri-apps/cli@2.5.0': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.4.0 - '@tauri-apps/cli-darwin-x64': 2.4.0 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.4.0 - '@tauri-apps/cli-linux-arm64-gnu': 2.4.0 - '@tauri-apps/cli-linux-arm64-musl': 2.4.0 - '@tauri-apps/cli-linux-riscv64-gnu': 2.4.0 - '@tauri-apps/cli-linux-x64-gnu': 2.4.0 - '@tauri-apps/cli-linux-x64-musl': 2.4.0 - '@tauri-apps/cli-win32-arm64-msvc': 2.4.0 - '@tauri-apps/cli-win32-ia32-msvc': 2.4.0 - '@tauri-apps/cli-win32-x64-msvc': 2.4.0 + '@tauri-apps/cli-darwin-arm64': 2.5.0 + '@tauri-apps/cli-darwin-x64': 2.5.0 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.5.0 + '@tauri-apps/cli-linux-arm64-gnu': 2.5.0 + '@tauri-apps/cli-linux-arm64-musl': 2.5.0 + '@tauri-apps/cli-linux-riscv64-gnu': 2.5.0 + '@tauri-apps/cli-linux-x64-gnu': 2.5.0 + '@tauri-apps/cli-linux-x64-musl': 2.5.0 + '@tauri-apps/cli-win32-arm64-msvc': 2.5.0 + '@tauri-apps/cli-win32-ia32-msvc': 2.5.0 + '@tauri-apps/cli-win32-x64-msvc': 2.5.0 '@tauri-apps/plugin-autostart@2.2.0': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 - '@tauri-apps/plugin-deep-link@2.2.0': + '@tauri-apps/plugin-deep-link@2.2.1': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 - '@tauri-apps/plugin-dialog@2.2.0': + '@tauri-apps/plugin-dialog@2.2.1': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 '@tauri-apps/plugin-global-shortcut@2.0.0': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 '@tauri-apps/plugin-http@2.0.2': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 '@tauri-apps/plugin-os@2.2.1': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 - '@tauri-apps/plugin-process@2.2.0': + '@tauri-apps/plugin-process@2.2.1': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 - '@tauri-apps/plugin-shell@2.2.0': + '@tauri-apps/plugin-shell@2.2.1': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 '@tauri-apps/plugin-updater@https://codeload.github.com/infinilabs/tauri-plugin-updater/tar.gz/358e689c65e9943b53eff50bcb9dfd5b1cfc4072': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 '@tauri-apps/plugin-websocket@2.3.0': dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 '@tauri-apps/plugin-window@2.0.0-alpha.1': dependencies: @@ -4627,24 +4655,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 - '@types/babel__generator': 7.6.8 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 + '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.20.7 - '@types/babel__generator@7.6.8': + '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.26.10 + '@babel/types': 7.27.1 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 - '@types/babel__traverse@7.20.6': + '@types/babel__traverse@7.20.7': dependencies: - '@babel/types': 7.26.10 + '@babel/types': 7.27.1 '@types/d3-array@3.2.1': {} @@ -4771,9 +4799,9 @@ snapshots: '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 - '@types/estree@1.0.6': {} + '@types/estree@1.0.7': {} '@types/geojson@7946.0.16': {} @@ -4804,27 +4832,29 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@22.13.11': + '@types/node@22.15.17': dependencies: - undici-types: 6.20.0 + undici-types: 6.21.0 - '@types/parse-path@7.0.3': {} + '@types/parse-path@7.1.0': + dependencies: + parse-path: 7.1.0 '@types/prop-types@15.7.14': {} - '@types/react-dom@18.3.5(@types/react@18.3.19)': + '@types/react-dom@18.3.7(@types/react@18.3.21)': dependencies: - '@types/react': 18.3.19 + '@types/react': 18.3.21 '@types/react-katex@3.0.4': dependencies: - '@types/react': 18.3.19 + '@types/react': 18.3.21 '@types/react-window@1.8.8': dependencies: - '@types/react': 18.3.19 + '@types/react': 18.3.21 - '@types/react@18.3.19': + '@types/react@18.3.21': dependencies: '@types/prop-types': 15.7.14 csstype: 3.1.3 @@ -4838,21 +4868,21 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@22.13.11)(sass@1.87.0))': + '@vitejs/plugin-react@4.4.1(vite@5.4.19(@types/node@22.15.17)(sass@1.87.0))': dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1) '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: 5.4.14(@types/node@22.13.11)(sass@1.87.0) + react-refresh: 0.17.0 + vite: 5.4.19(@types/node@22.15.17)(sass@1.87.0) transitivePeerDependencies: - supports-color - '@wavesurfer/react@1.0.9(react@18.3.1)(wavesurfer.js@7.9.3)': + '@wavesurfer/react@1.0.11(react@18.3.1)(wavesurfer.js@7.9.5)': dependencies: react: 18.3.1 - wavesurfer.js: 7.9.3 + wavesurfer.js: 7.9.5 acorn@8.14.1: {} @@ -4860,7 +4890,7 @@ snapshots: ahooks@3.8.4(react@18.3.1): dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.1 dayjs: 1.11.13 intersection-observer: 0.12.2 js-cookie: 3.0.5 @@ -4917,15 +4947,15 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.3): dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001707 + browserslist: 4.24.5 + caniuse-lite: 1.0.30001717 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 postcss: 8.5.3 postcss-value-parser: 4.2.0 - axios@1.8.4: + axios@1.9.0: dependencies: follow-redirects: 1.15.9 form-data: 4.0.2 @@ -4950,7 +4980,7 @@ snapshots: chalk: 5.4.1 cli-boxes: 3.0.0 string-width: 7.2.0 - type-fest: 4.37.0 + type-fest: 4.41.0 widest-line: 5.0.0 wrap-ansi: 9.0.0 @@ -4967,20 +4997,20 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: + browserslist@4.24.5: dependencies: - caniuse-lite: 1.0.30001707 - electron-to-chromium: 1.5.123 + caniuse-lite: 1.0.30001717 + electron-to-chromium: 1.5.151 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.5) bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 - bundle-require@5.1.0(esbuild@0.25.1): + bundle-require@5.1.0(esbuild@0.25.4): dependencies: - esbuild: 0.25.1 + esbuild: 0.25.4 load-tsconfig: 0.2.5 cac@6.7.14: {} @@ -4996,7 +5026,7 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001707: {} + caniuse-lite@1.0.30001717: {} ccount@2.0.1: {} @@ -5080,7 +5110,7 @@ snapshots: confbox@0.1.8: {} - confbox@0.2.1: {} + confbox@0.2.2: {} config-chain@1.1.13: dependencies: @@ -5106,14 +5136,14 @@ snapshots: dependencies: layout-base: 2.0.1 - cosmiconfig@9.0.0(typescript@5.8.2): + cosmiconfig@9.0.0(typescript@5.8.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 cross-env@7.0.3: dependencies: @@ -5129,17 +5159,17 @@ snapshots: csstype@3.1.3: {} - cytoscape-cose-bilkent@4.1.0(cytoscape@3.31.1): + cytoscape-cose-bilkent@4.1.0(cytoscape@3.32.0): dependencies: cose-base: 1.0.3 - cytoscape: 3.31.1 + cytoscape: 3.32.0 - cytoscape-fcose@2.2.0(cytoscape@3.31.1): + cytoscape-fcose@2.2.0(cytoscape@3.32.0): dependencies: cose-base: 2.2.0 - cytoscape: 3.31.1 + cytoscape: 3.32.0 - cytoscape@3.31.1: {} + cytoscape@3.32.0: {} d3-array@2.12.1: dependencies: @@ -5361,15 +5391,15 @@ snapshots: dlv@1.1.3: {} - dompurify@3.2.4: + dompurify@3.2.5: optionalDependencies: '@types/trusted-types': 2.0.7 dot-prop@9.0.0: dependencies: - type-fest: 4.37.0 + type-fest: 4.41.0 - dotenv@16.4.7: {} + dotenv@16.5.0: {} dunder-proto@1.0.1: dependencies: @@ -5379,7 +5409,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.123: {} + electron-to-chromium@1.5.151: {} emoji-regex@10.4.0: {} @@ -5387,7 +5417,7 @@ snapshots: emoji-regex@9.2.2: {} - entities@4.5.0: {} + entities@6.0.0: {} env-paths@2.2.1: {} @@ -5436,33 +5466,33 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.25.1: + esbuild@0.25.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.1 - '@esbuild/android-arm': 0.25.1 - '@esbuild/android-arm64': 0.25.1 - '@esbuild/android-x64': 0.25.1 - '@esbuild/darwin-arm64': 0.25.1 - '@esbuild/darwin-x64': 0.25.1 - '@esbuild/freebsd-arm64': 0.25.1 - '@esbuild/freebsd-x64': 0.25.1 - '@esbuild/linux-arm': 0.25.1 - '@esbuild/linux-arm64': 0.25.1 - '@esbuild/linux-ia32': 0.25.1 - '@esbuild/linux-loong64': 0.25.1 - '@esbuild/linux-mips64el': 0.25.1 - '@esbuild/linux-ppc64': 0.25.1 - '@esbuild/linux-riscv64': 0.25.1 - '@esbuild/linux-s390x': 0.25.1 - '@esbuild/linux-x64': 0.25.1 - '@esbuild/netbsd-arm64': 0.25.1 - '@esbuild/netbsd-x64': 0.25.1 - '@esbuild/openbsd-arm64': 0.25.1 - '@esbuild/openbsd-x64': 0.25.1 - '@esbuild/sunos-x64': 0.25.1 - '@esbuild/win32-arm64': 0.25.1 - '@esbuild/win32-ia32': 0.25.1 - '@esbuild/win32-x64': 0.25.1 + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 escalade@3.2.0: {} @@ -5504,7 +5534,7 @@ snapshots: cross-spawn: 7.0.6 figures: 6.1.0 get-stream: 9.0.1 - human-signals: 8.0.0 + human-signals: 8.0.1 is-plain-obj: 4.1.0 is-stream: 4.0.1 npm-run-path: 6.0.0 @@ -5513,7 +5543,7 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 - exsolve@1.0.4: {} + exsolve@1.0.5: {} extend@3.0.2: {} @@ -5537,7 +5567,7 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.3(picomatch@4.0.2): + fdir@6.4.4(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -5615,14 +5645,14 @@ snapshots: transitivePeerDependencies: - supports-color - git-up@8.0.1: + git-up@8.1.1: dependencies: is-ssh: 1.4.1 parse-url: 9.2.0 git-url-parse@16.0.0: dependencies: - git-up: 8.0.1 + git-up: 8.1.1 glob-parent@5.1.2: dependencies: @@ -5703,7 +5733,7 @@ snapshots: '@types/hast': 3.0.4 devlop: 1.1.0 hast-util-from-parse5: 8.0.3 - parse5: 7.2.1 + parse5: 7.3.0 vfile: 6.0.3 vfile-message: 4.0.2 @@ -5713,7 +5743,7 @@ snapshots: '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 9.0.1 - property-information: 7.0.0 + property-information: 7.1.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 @@ -5728,7 +5758,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -5738,7 +5768,7 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.16 unist-util-position: 5.0.0 @@ -5762,7 +5792,7 @@ snapshots: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 highlight.js@11.11.1: {} @@ -5789,15 +5819,15 @@ snapshots: human-signals@5.0.0: {} - human-signals@8.0.0: {} + human-signals@8.0.1: {} - i18next-browser-languagedetector@8.0.4: + i18next-browser-languagedetector@8.1.0: dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.1 i18next@23.16.8: dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.1 iconv-lite@0.4.24: dependencies: @@ -5811,7 +5841,7 @@ snapshots: immer@10.1.1: {} - immutable@5.1.1: {} + immutable@5.1.2: {} import-fresh@3.3.1: dependencies: @@ -5831,12 +5861,12 @@ snapshots: inline-style-parser@0.2.4: {} - inquirer@12.3.0(@types/node@22.13.11): + inquirer@12.3.0(@types/node@22.15.17): dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.11) - '@inquirer/prompts': 7.4.0(@types/node@22.13.11) - '@inquirer/type': 3.0.5(@types/node@22.13.11) - '@types/node': 22.13.11 + '@inquirer/core': 10.1.10(@types/node@22.15.17) + '@inquirer/prompts': 7.5.0(@types/node@22.15.17) + '@inquirer/type': 3.0.6(@types/node@22.15.17) + '@types/node': 22.15.17 ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 @@ -5959,7 +5989,7 @@ snapshots: json5@2.2.3: {} - katex@0.16.21: + katex@0.16.22: dependencies: commander: 8.3.0 @@ -5967,9 +5997,9 @@ snapshots: kolorist@1.8.0: {} - ky@1.7.5: {} + ky@1.8.1: {} - langium@3.0.0: + langium@3.3.1: dependencies: chevrotain: 11.0.3 chevrotain-allstar: 0.3.1(chevrotain@11.0.3) @@ -6046,7 +6076,7 @@ snapshots: markdown-table@3.0.4: {} - marked@15.0.7: {} + marked@15.0.11: {} math-intrinsics@1.1.0: {} @@ -6226,24 +6256,24 @@ snapshots: merge2@1.4.1: {} - mermaid@11.5.0: + mermaid@11.6.0: dependencies: '@braintree/sanitize-url': 7.1.1 '@iconify/utils': 2.3.0 - '@mermaid-js/parser': 0.3.0 + '@mermaid-js/parser': 0.4.0 '@types/d3': 7.4.3 - cytoscape: 3.31.1 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.31.1) - cytoscape-fcose: 2.2.0(cytoscape@3.31.1) + cytoscape: 3.32.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.32.0) + cytoscape-fcose: 2.2.0(cytoscape@3.32.0) d3: 7.9.0 d3-sankey: 0.12.3 dagre-d3-es: 7.0.11 dayjs: 1.11.13 - dompurify: 3.2.4 - katex: 0.16.21 + dompurify: 3.2.5 + katex: 0.16.22 khroma: 2.1.0 lodash-es: 4.17.21 - marked: 15.0.7 + marked: 15.0.11 roughjs: 4.6.6 stylis: 4.3.6 ts-dedent: 2.2.0 @@ -6332,7 +6362,7 @@ snapshots: dependencies: '@types/katex': 0.16.7 devlop: 1.1.0 - katex: 0.16.21 + katex: 0.16.22 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 @@ -6484,7 +6514,7 @@ snapshots: acorn: 8.14.1 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.5.4 + ufo: 1.6.1 ms@2.1.3: {} @@ -6588,14 +6618,12 @@ snapshots: package-json@10.0.1: dependencies: - ky: 1.7.5 + ky: 1.8.1 registry-auth-token: 5.1.0 registry-url: 6.0.1 semver: 7.6.3 - package-manager-detector@0.2.11: - dependencies: - quansync: 0.2.10 + package-manager-detector@1.3.0: {} parent-module@1.0.1: dependencies: @@ -6613,25 +6641,25 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-ms@4.0.0: {} - parse-path@7.0.1: + parse-path@7.1.0: dependencies: protocols: 2.0.2 parse-url@9.2.0: dependencies: - '@types/parse-path': 7.0.3 - parse-path: 7.0.1 + '@types/parse-path': 7.1.0 + parse-path: 7.1.0 - parse5@7.2.1: + parse5@7.3.0: dependencies: - entities: 4.5.0 + entities: 6.0.0 path-data-parser@0.1.0: {} @@ -6660,7 +6688,7 @@ snapshots: pify@2.3.0: {} - pirates@4.0.6: {} + pirates@4.0.7: {} pkg-types@1.3.1: dependencies: @@ -6670,8 +6698,8 @@ snapshots: pkg-types@2.1.0: dependencies: - confbox: 0.2.1 - exsolve: 1.0.4 + confbox: 0.2.2 + exsolve: 1.0.5 pathe: 2.0.3 points-on-curve@0.2.0: {} @@ -6696,18 +6724,18 @@ snapshots: postcss-load-config@4.0.2(postcss@8.5.3): dependencies: lilconfig: 3.1.3 - yaml: 2.7.0 + yaml: 2.7.1 optionalDependencies: postcss: 8.5.3 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.3)(tsx@4.19.3)(yaml@2.7.0): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.3)(tsx@4.19.4)(yaml@2.7.1): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 postcss: 8.5.3 - tsx: 4.19.3 - yaml: 2.7.0 + tsx: 4.19.4 + yaml: 2.7.1 postcss-nested@6.2.0(postcss@8.5.3): dependencies: @@ -6731,7 +6759,7 @@ snapshots: dependencies: parse-ms: 4.0.0 - property-information@7.0.0: {} + property-information@7.1.0: {} proto-list@1.2.4: {} @@ -6777,41 +6805,42 @@ snapshots: react-fast-compare@3.2.2: {} - react-hotkeys-hook@4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-hotkeys-hook@4.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-i18next@15.4.1(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-i18next@15.5.1(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3): dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.1 html-parse-stringify: 3.0.1 i18next: 23.16.8 react: 18.3.1 optionalDependencies: react-dom: 18.3.1(react@18.3.1) + typescript: 5.8.3 react-is@18.3.1: {} - react-markdown@9.1.0(@types/react@18.3.19)(react@18.3.1): + react-markdown@9.1.0(@types/react@18.3.21)(react@18.3.1): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@types/react': 18.3.19 + '@types/react': 18.3.21 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 mdast-util-to-hast: 13.2.0 react: 18.3.1 remark-parse: 11.0.0 - remark-rehype: 11.1.1 + remark-rehype: 11.1.2 unified: 11.0.5 unist-util-visit: 5.0.0 vfile: 6.0.3 transitivePeerDependencies: - supports-color - react-refresh@0.14.2: {} + react-refresh@0.17.0: {} react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -6827,7 +6856,7 @@ snapshots: react-window@1.8.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.1 memoize-one: 5.2.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6850,8 +6879,6 @@ snapshots: dependencies: resolve: 1.22.10 - regenerator-runtime@0.14.1: {} - registry-auth-token@5.1.0: dependencies: '@pnpm/npm-conf': 2.3.1 @@ -6874,22 +6901,22 @@ snapshots: '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.2 - katex: 0.16.21 + katex: 0.16.22 unist-util-visit-parents: 6.0.1 vfile: 6.0.3 - release-it@18.1.2(@types/node@22.13.11)(typescript@5.8.2): + release-it@18.1.2(@types/node@22.15.17)(typescript@5.8.3): dependencies: '@iarna/toml': 2.2.5 '@octokit/rest': 21.0.2 async-retry: 1.3.3 chalk: 5.4.1 ci-info: 4.2.0 - cosmiconfig: 9.0.0(typescript@5.8.2) + cosmiconfig: 9.0.0(typescript@5.8.3) execa: 9.5.2 git-url-parse: 16.0.0 globby: 14.0.2 - inquirer: 12.3.0(@types/node@22.13.11) + inquirer: 12.3.0(@types/node@22.15.17) issue-parser: 7.0.1 lodash: 4.17.21 mime-types: 2.1.35 @@ -6945,7 +6972,7 @@ snapshots: transitivePeerDependencies: - supports-color - remark-rehype@11.1.1: + remark-rehype@11.1.2: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -6984,29 +7011,30 @@ snapshots: robust-predicates@3.0.2: {} - rollup@4.36.0: + rollup@4.40.2: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.36.0 - '@rollup/rollup-android-arm64': 4.36.0 - '@rollup/rollup-darwin-arm64': 4.36.0 - '@rollup/rollup-darwin-x64': 4.36.0 - '@rollup/rollup-freebsd-arm64': 4.36.0 - '@rollup/rollup-freebsd-x64': 4.36.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.36.0 - '@rollup/rollup-linux-arm-musleabihf': 4.36.0 - '@rollup/rollup-linux-arm64-gnu': 4.36.0 - '@rollup/rollup-linux-arm64-musl': 4.36.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.36.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.36.0 - '@rollup/rollup-linux-riscv64-gnu': 4.36.0 - '@rollup/rollup-linux-s390x-gnu': 4.36.0 - '@rollup/rollup-linux-x64-gnu': 4.36.0 - '@rollup/rollup-linux-x64-musl': 4.36.0 - '@rollup/rollup-win32-arm64-msvc': 4.36.0 - '@rollup/rollup-win32-ia32-msvc': 4.36.0 - '@rollup/rollup-win32-x64-msvc': 4.36.0 + '@rollup/rollup-android-arm-eabi': 4.40.2 + '@rollup/rollup-android-arm64': 4.40.2 + '@rollup/rollup-darwin-arm64': 4.40.2 + '@rollup/rollup-darwin-x64': 4.40.2 + '@rollup/rollup-freebsd-arm64': 4.40.2 + '@rollup/rollup-freebsd-x64': 4.40.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.40.2 + '@rollup/rollup-linux-arm-musleabihf': 4.40.2 + '@rollup/rollup-linux-arm64-gnu': 4.40.2 + '@rollup/rollup-linux-arm64-musl': 4.40.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.40.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.40.2 + '@rollup/rollup-linux-riscv64-gnu': 4.40.2 + '@rollup/rollup-linux-riscv64-musl': 4.40.2 + '@rollup/rollup-linux-s390x-gnu': 4.40.2 + '@rollup/rollup-linux-x64-gnu': 4.40.2 + '@rollup/rollup-linux-x64-musl': 4.40.2 + '@rollup/rollup-win32-arm64-msvc': 4.40.2 + '@rollup/rollup-win32-ia32-msvc': 4.40.2 + '@rollup/rollup-win32-x64-msvc': 4.40.2 fsevents: 2.3.3 roughjs@4.6.6: @@ -7035,7 +7063,7 @@ snapshots: sass@1.87.0: dependencies: chokidar: 4.0.3 - immutable: 5.1.1 + immutable: 5.1.2 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.1 @@ -7152,7 +7180,7 @@ snapshots: glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 - pirates: 4.0.6 + pirates: 4.0.7 ts-interface-checker: 0.1.13 supports-preserve-symlinks-flag@1.0.0: {} @@ -7188,19 +7216,19 @@ snapshots: tauri-plugin-fs-pro-api@2.4.0: dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 - tauri-plugin-macos-permissions-api@2.2.0: + tauri-plugin-macos-permissions-api@2.3.0: dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 - tauri-plugin-screenshots-api@2.1.0: + tauri-plugin-screenshots-api@2.2.0: dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 tauri-plugin-windows-version-api@2.0.0: dependencies: - '@tauri-apps/api': 2.4.0 + '@tauri-apps/api': 2.5.0 thenify-all@1.6.0: dependencies: @@ -7212,9 +7240,11 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.12: + tinyexec@1.0.1: {} + + tinyglobby@0.2.13: dependencies: - fdir: 6.4.3(picomatch@4.0.2) + fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 tmp@0.0.33: @@ -7241,36 +7271,36 @@ snapshots: tslib@2.8.1: {} - tsup@8.4.0(jiti@1.21.7)(postcss@8.5.3)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0): + tsup@8.4.0(jiti@1.21.7)(postcss@8.5.3)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.1) + bundle-require: 5.1.0(esbuild@0.25.4) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.0 - esbuild: 0.25.1 + esbuild: 0.25.4 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.3)(tsx@4.19.3)(yaml@2.7.0) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.3)(tsx@4.19.4)(yaml@2.7.1) resolve-from: 5.0.0 - rollup: 4.36.0 + rollup: 4.40.2 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.12 + tinyglobby: 0.2.13 tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.3 - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - jiti - supports-color - tsx - yaml - tsx@4.19.3: + tsx@4.19.4: dependencies: - esbuild: 0.25.1 + esbuild: 0.25.4 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 @@ -7279,13 +7309,13 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.37.0: {} + type-fest@4.41.0: {} - typescript@5.8.2: {} + typescript@5.8.3: {} - ufo@1.5.4: {} + ufo@1.6.1: {} - undici-types@6.20.0: {} + undici-types@6.21.0: {} undici@6.21.1: {} @@ -7338,9 +7368,9 @@ snapshots: universal-user-agent@7.0.2: {} - update-browserslist-db@1.1.3(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.24.5): dependencies: - browserslist: 4.24.4 + browserslist: 4.24.5 escalade: 3.2.0 picocolors: 1.1.1 @@ -7363,6 +7393,10 @@ snapshots: dependencies: react: 18.3.1 + use-sync-external-store@1.5.0(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} uuid@11.1.0: {} @@ -7382,13 +7416,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@5.4.14(@types/node@22.13.11)(sass@1.87.0): + vite@5.4.19(@types/node@22.15.17)(sass@1.87.0): dependencies: esbuild: 0.21.5 postcss: 8.5.3 - rollup: 4.36.0 + rollup: 4.40.2 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.17 fsevents: 2.3.3 sass: 1.87.0 @@ -7411,7 +7445,7 @@ snapshots: vscode-uri@3.0.8: {} - wavesurfer.js@7.9.3: {} + wavesurfer.js@7.9.5: {} web-namespaces@2.0.1: {} @@ -7469,7 +7503,7 @@ snapshots: yallist@3.1.1: {} - yaml@2.7.0: {} + yaml@2.7.1: {} yargs-parser@21.1.1: {} @@ -7477,10 +7511,11 @@ snapshots: yoctocolors@2.1.1: {} - zustand@5.0.3(@types/react@18.3.19)(immer@10.1.1)(react@18.3.1): + zustand@5.0.4(@types/react@18.3.21)(immer@10.1.1)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)): optionalDependencies: - '@types/react': 18.3.19 + '@types/react': 18.3.21 immer: 10.1.1 react: 18.3.1 + use-sync-external-store: 1.5.0(react@18.3.1) zwitch@2.0.4: {} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index d171474f..b5d8d494 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -19,14 +19,14 @@ checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -38,6 +38,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + [[package]] name = "aligned-vec" version = "0.5.0" @@ -132,14 +138,14 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "applications" version = "0.3.1" -source = "git+https://github.com/infinilabs/applications-rs?rev=fb8f475993a2a774ce08d7a58f9f2ac264248a24#fb8f475993a2a774ce08d7a58f9f2ac264248a24" +source = "git+https://github.com/infinilabs/applications-rs?rev=1f62cd25651733bf8dc961c2382a39335a26ffe7#1f62cd25651733bf8dc961c2382a39335a26ffe7" dependencies = [ "anyhow", "cocoa 0.25.0", @@ -149,6 +155,8 @@ dependencies = [ "image", "lnk", "log", + "nix 0.30.1", + "notify 8.0.0", "objc", "parselnk", "plist", @@ -180,7 +188,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -198,7 +206,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.0", + "rand 0.9.1", "raw-window-handle", "serde", "serde_repr", @@ -233,28 +241,18 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", + "pin-project-lite", "slab", ] -[[package]] -name = "async-fs" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - [[package]] name = "async-io" version = "2.4.0" @@ -312,7 +310,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -347,7 +345,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -432,9 +430,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -463,6 +461,30 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit_field" version = "0.10.2" @@ -516,11 +538,11 @@ dependencies = [ [[package]] name = "block2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d59b4c170e16f0405a2e95aff44432a0d41aa97675f3d52623effe95792a037" +checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" dependencies = [ - "objc2 0.6.0", + "objc2 0.6.1", ] [[package]] @@ -549,9 +571,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.2" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" +checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -571,9 +593,9 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.22.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" +checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" [[package]] name = "byteorder" @@ -665,15 +687,25 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.17" +version = "1.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" dependencies = [ "jobserver", "libc", "shlex", ] +[[package]] +name = "cedarwood" +version = "0.4.6" +source = "git+https://github.com/infinilabs/cedarwood?branch=main#7a18a1b6ead32a6fc1163c03c0f645cd594c728a" +dependencies = [ + "proc-macro2", + "serde", + "smallvec", +] + [[package]] name = "cesu8" version = "1.1.0" @@ -717,6 +749,18 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg-vis" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3a2c3bf5fc10fe2ca157564fbe08a4cb2b0a7d2ff3fe2f9683e65d5e7c7859c" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -743,9 +787,9 @@ checksum = "7588475145507237ded760e52bf2f1085495245502033756d28ea72ade0e498b" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", @@ -794,18 +838,18 @@ dependencies = [ "env_logger", "futures", "futures-util", - "fuzzy_prefix_search", "hostname", "http 1.3.1", "hyper 0.14.32", "lazy_static", "log", "meval", - "notify", + "notify 5.2.0", "num2words", "once_cell", "ordered-float", - "pizza-common", + "pizza-common 0.1.0 (git+https://github.com/infinilabs/pizza-common?branch=main)", + "pizza-engine", "plist", "reqwest", "serde", @@ -947,7 +991,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "once_cell", "tiny-keccak", ] @@ -958,6 +1002,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie" version = "0.18.1" @@ -1081,9 +1134,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] @@ -1153,7 +1206,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1163,14 +1216,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -1178,34 +1231,34 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] name = "data-encoding" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "data-url" @@ -1234,6 +1287,17 @@ dependencies = [ "serde", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "derive_arbitrary" version = "1.4.1" @@ -1242,20 +1306,20 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] name = "derive_more" -version = "0.99.19" +version = "0.99.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1343,9 +1407,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" dependencies = [ "bitflags 2.9.0", - "block2 0.6.0", + "block2 0.6.1", "libc", - "objc2 0.6.0", + "objc2 0.6.1", +] + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.1", ] [[package]] @@ -1356,7 +1430,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1379,7 +1453,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1402,9 +1476,9 @@ dependencies = [ [[package]] name = "dpi" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" dependencies = [ "serde", ] @@ -1457,6 +1531,18 @@ version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "either" version = "1.15.0" @@ -1534,7 +1620,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1555,7 +1641,7 @@ checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1570,9 +1656,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.7" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3716d7a920fb4fac5d84e9d4bce8ceb321e9414b4409da61b07b75c1e3d0697" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", @@ -1599,9 +1685,9 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -1620,9 +1706,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener", "pin-project-lite", @@ -1697,9 +1783,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -1738,7 +1824,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1772,6 +1858,16 @@ dependencies = [ "xdgkit", ] +[[package]] +name = "fs4" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" +dependencies = [ + "rustix 1.0.7", + "windows-sys 0.59.0", +] + [[package]] name = "fs_extra" version = "1.3.0" @@ -1787,6 +1883,26 @@ dependencies = [ "libc", ] +[[package]] +name = "fst-no-std" +version = "0.4.8" +source = "git+https://github.com/infinilabs/fst-no-std?branch=main#db51f58ce699e6c5a2152ba5cd71e28c28de1530" +dependencies = [ + "hashbrown 0.14.5", + "utf8-ranges", +] + +[[package]] +name = "fst-regex" +version = "0.3.0" +source = "git+https://github.com/infinilabs/fst-regex?branch=main#efcae1d86a313f44b1393b0c6433885a376f3abf" +dependencies = [ + "fst-no-std", + "hashbrown 0.14.5", + "regex-syntax 0.3.9", + "utf8-ranges", +] + [[package]] name = "futf" version = "0.1.5" @@ -1866,7 +1982,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -1899,12 +2015,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fuzzy_prefix_search" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a904d7ec1d39e73f21e8446175cfcd3d4265313919000044e300ecf8d9967dec" - [[package]] name = "fxhash" version = "0.2.1" @@ -2013,6 +2123,19 @@ dependencies = [ "x11", ] +[[package]] +name = "generator" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" +dependencies = [ + "cfg-if", + "libc", + "log", + "rustversion", + "windows 0.58.0", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -2025,11 +2148,11 @@ dependencies = [ [[package]] name = "gethostname" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd4b8790c0792e3b11895efdf5f289ebe8b59107a6624f1cce68f24ff8c7035" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "rustix 0.38.44", + "rustix 1.0.7", "windows-targets 0.52.6", ] @@ -2046,9 +2169,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", @@ -2204,7 +2327,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -2217,7 +2340,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -2254,8 +2377,8 @@ checksum = "41fbb3a4e56c901ee66c190fdb3fa08344e6d09593cc6c61f8eb9add7144b271" dependencies = [ "crossbeam-channel", "keyboard-types", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "once_cell", "serde", "thiserror 2.0.12", @@ -2334,14 +2457,14 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] name = "h2" -version = "0.4.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" dependencies = [ "atomic-waker", "bytes", @@ -2349,7 +2472,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.8.0", + "indexmap 2.9.0", "slab", "tokio", "tokio-util", @@ -2358,14 +2481,23 @@ dependencies = [ [[package]] name = "half" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", ] +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -2380,13 +2512,24 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", "allocator-api2", + "serde", ] [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] [[package]] name = "heck" @@ -2572,12 +2715,12 @@ dependencies = [ "http 1.3.1", "hyper 1.6.0", "hyper-util", - "rustls 0.23.25", + "rustls 0.23.27", "rustls-pki-types", "tokio", "tokio-rustls 0.26.2", "tower-service", - "webpki-roots 0.26.8", + "webpki-roots 0.26.11", ] [[package]] @@ -2598,9 +2741,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" dependencies = [ "bytes", "futures-channel", @@ -2608,6 +2751,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "hyper 1.6.0", + "libc", "pin-project-lite", "socket2", "tokio", @@ -2617,16 +2761,17 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core 0.61.0", ] [[package]] @@ -2650,21 +2795,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -2673,31 +2819,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -2705,67 +2831,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -2785,9 +2898,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -2795,9 +2908,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.5" +version = "0.25.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" dependencies = [ "bytemuck", "byteorder-lite", @@ -2845,12 +2958,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.3", "serde", ] @@ -2874,6 +2987,17 @@ dependencies = [ "libc", ] +[[package]] +name = "inotify" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +dependencies = [ + "bitflags 2.9.0", + "inotify-sys", + "libc", +] + [[package]] name = "inotify-sys" version = "0.1.5" @@ -2891,7 +3015,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -2971,9 +3095,9 @@ dependencies = [ [[package]] name = "jiff" -version = "0.2.5" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c102670231191d07d37a35af3eb77f1f0dbf7a71be51a962dcd57ea607be7260" +checksum = "f02000660d30638906021176af16b17498bd0d12813dbfe7b276d8bc7f3c0806" dependencies = [ "jiff-static", "log", @@ -2984,13 +3108,13 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.5" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cdde31a9d349f1b1f51a0b3714a5940ac022976f4b49485fc04be052b183b4c" +checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3017,10 +3141,11 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -3075,9 +3200,9 @@ dependencies = [ [[package]] name = "kqueue" -version = "1.0.8" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" dependencies = [ "kqueue-sys", "libc", @@ -3144,9 +3269,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libdbus-sys" @@ -3202,15 +3327,15 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" @@ -3244,9 +3369,22 @@ dependencies = [ [[package]] name = "log" -version = "0.4.26" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] [[package]] name = "loop9" @@ -3257,6 +3395,12 @@ dependencies = [ "imgref", ] +[[package]] +name = "lz4-compression" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "761104bf97f13a3caf47d822498a0760a10d00d220148bac2669f63fc3bb8270" + [[package]] name = "mac" version = "0.1.1" @@ -3302,6 +3446,15 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "matches" version = "0.1.10" @@ -3382,9 +3535,9 @@ checksum = "6367d84fb54d4242af283086402907277715b8fe46976963af5ebf173f8efba3" [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", "simd-adler32", @@ -3409,10 +3562,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", + "log", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] +[[package]] +name = "moka" +version = "0.12.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "loom", + "parking_lot", + "portable-atomic", + "rustc_version", + "smallvec", + "tagptr", + "thiserror 1.0.69", + "uuid", +] + [[package]] name = "muda" version = "0.16.1" @@ -3423,10 +3596,10 @@ dependencies = [ "dpi", "gtk", "keyboard-types", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "once_cell", "png", "serde", @@ -3500,6 +3673,17 @@ dependencies = [ "memoffset", ] +[[package]] +name = "nix" +version = "0.30.1" +source = "git+https://github.com/nix-rust/nix#3cf9007216086b17a6ef5a09fa42dc00cde5c2bf" +dependencies = [ + "bitflags 2.9.0", + "cfg-if", + "cfg_aliases", + "libc", +] + [[package]] name = "nodrop" version = "0.1.14" @@ -3538,7 +3722,7 @@ dependencies = [ "crossbeam-channel", "filetime", "fsevent-sys", - "inotify", + "inotify 0.9.6", "kqueue", "libc", "mio 0.8.11", @@ -3546,6 +3730,41 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "notify" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943" +dependencies = [ + "bitflags 2.9.0", + "filetime", + "fsevent-sys", + "inotify 0.11.0", + "kqueue", + "libc", + "log", + "mio 1.0.3", + "notify-types", + "walkdir", + "windows-sys 0.59.0", +] + +[[package]] +name = "notify-types" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-bigfloat" version = "1.7.2" @@ -3587,7 +3806,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3646,7 +3865,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -3687,9 +3906,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59" +checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" dependencies = [ "objc2-encode", "objc2-exception-helper", @@ -3713,32 +3932,32 @@ dependencies = [ [[package]] name = "objc2-app-kit" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5906f93257178e2f7ae069efb89fbd6ee94f0592740b5f8a1512ca498814d0fb" +checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ "bitflags 2.9.0", - "block2 0.6.0", + "block2 0.6.1", "libc", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-cloud-kit", - "objc2-core-data 0.3.0", + "objc2-core-data 0.3.1", "objc2-core-foundation", "objc2-core-graphics", - "objc2-core-image 0.3.0", - "objc2-foundation 0.3.0", - "objc2-quartz-core 0.3.0", + "objc2-core-image 0.3.1", + "objc2-foundation 0.3.1", + "objc2-quartz-core 0.3.1", ] [[package]] name = "objc2-cloud-kit" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c1948a9be5f469deadbd6bcb86ad7ff9e47b4f632380139722f7d9840c0d42c" +checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", ] [[package]] @@ -3755,40 +3974,42 @@ dependencies = [ [[package]] name = "objc2-core-data" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f860f8e841f6d32f754836f51e6bc7777cd7e7053cf18528233f6811d3eceb4" +checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", ] [[package]] name = "objc2-core-foundation" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daeaf60f25471d26948a1c2f840e3f7d86f4109e3af4e8e4b5cd70c39690d925" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ "bitflags 2.9.0", - "block2 0.6.0", + "block2 0.6.1", + "dispatch2 0.3.0", "libc", - "objc2 0.6.0", + "objc2 0.6.1", ] [[package]] name = "objc2-core-graphics" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dca602628b65356b6513290a21a6405b4d4027b8b250f0b98dddbb28b7de02" +checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ "bitflags 2.9.0", - "block2 0.6.0", + "block2 0.6.1", + "dispatch2 0.3.0", "libc", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-foundation", "objc2-io-surface", - "objc2-metal 0.3.0", + "objc2-metal 0.3.1", ] [[package]] @@ -3805,12 +4026,12 @@ dependencies = [ [[package]] name = "objc2-core-image" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ffa6bea72bf42c78b0b34e89c0bafac877d5f80bf91e159a5d96ea7f693ca56" +checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" dependencies = [ - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", ] [[package]] @@ -3842,25 +4063,25 @@ dependencies = [ [[package]] name = "objc2-foundation" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998" +checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ "bitflags 2.9.0", - "block2 0.6.0", + "block2 0.6.1", "libc", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-foundation", ] [[package]] name = "objc2-io-surface" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161a8b87e32610086e1a7a9e9ec39f84459db7b3a0881c1f16ca5a2605581c19" +checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-foundation", ] @@ -3878,25 +4099,25 @@ dependencies = [ [[package]] name = "objc2-metal" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c41bc8b0e50ea7a5304a56f25e0066f526e99641b46fd7b9ad4421dd35bff6" +checksum = "7f246c183239540aab1782457b35ab2040d4259175bd1d0c58e46ada7b47a874" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", ] [[package]] name = "objc2-osa-kit" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ac59da3ceebc4a82179b35dc550431ad9458f9cc326e053f49ba371ce76c5a" +checksum = "26bb88504b5a050dbba515d2414607bf5e57dd56b107bc5f0351197a3e7bdc5d" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", + "objc2-foundation 0.3.1", ] [[package]] @@ -3914,39 +4135,39 @@ dependencies = [ [[package]] name = "objc2-quartz-core" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb3794501bb1bee12f08dcad8c61f2a5875791ad1c6f47faa71a0f033f20071" +checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", ] [[package]] name = "objc2-ui-kit" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777a571be14a42a3990d4ebedaeb8b54cd17377ec21b92e8200ac03797b3bee1" +checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-foundation", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", ] [[package]] name = "objc2-web-kit" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b717127e4014b0f9f3e8bba3d3f2acec81f1bde01f656823036e823ed2c94dce" +checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad" dependencies = [ "bitflags 2.9.0", - "block2 0.6.0", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "block2 0.6.1", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", ] [[package]] @@ -3969,9 +4190,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.1" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "open" @@ -3987,9 +4208,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.71" +version = "0.10.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" dependencies = [ "bitflags 2.9.0", "cfg-if", @@ -4008,7 +4229,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -4019,9 +4240,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.106" +version = "0.9.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" +checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" dependencies = [ "cc", "libc", @@ -4097,14 +4318,44 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "732c71caeaa72c065bb69d7ea08717bd3f4863a4f451402fc9513e29dbd5261b" dependencies = [ - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", "objc2-osa-kit", "serde", "serde_json", "thiserror 2.0.12", ] +[[package]] +name = "ouroboros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "pango" version = "0.18.3" @@ -4294,7 +4545,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -4354,7 +4605,7 @@ source = "git+https://github.com/infinilabs/pizza-common?branch=main#60ff2901bd3 dependencies = [ "bytes", "camino", - "getrandom 0.2.15", + "getrandom 0.2.16", "hashbrown 0.14.5", "rand 0.8.5", "rand_chacha 0.3.1", @@ -4365,6 +4616,70 @@ dependencies = [ "uuid", ] +[[package]] +name = "pizza-common" +version = "0.1.0" +source = "git+https://github.com/infinilabs/pizza#de36b19726d8bc4c4be21bdedcb5d24bdc6d7306" +dependencies = [ + "bytes", + "camino", + "getrandom 0.2.16", + "hashbrown 0.14.5", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", + "serde_json", + "serde_with", + "uuid", +] + +[[package]] +name = "pizza-engine" +version = "0.1.0" +source = "git+https://github.com/infinilabs/pizza#de36b19726d8bc4c4be21bdedcb5d24bdc6d7306" +dependencies = [ + "async-trait", + "bincode", + "bit-set", + "bitflags 2.9.0", + "bytemuck", + "byteorder", + "cedarwood", + "cfg-if", + "cfg-vis", + "convert_case 0.6.0", + "derivative", + "educe", + "fs4", + "fst-no-std", + "fst-regex", + "hashbrown 0.14.5", + "heapless", + "itoa 1.0.15", + "lz4-compression", + "memmap2", + "moka", + "nom 7.1.3", + "num-traits", + "ouroboros", + "paste", + "pizza-common 0.1.0 (git+https://github.com/infinilabs/pizza)", + "rayon", + "roaring", + "rustc-hash", + "serde", + "serde-inline-default", + "serde_json", + "smallvec", + "spin", + "strum", + "strum_macros", + "thiserror 2.0.12", + "tracing", + "wildmatch", +] + [[package]] name = "pkg-config" version = "0.3.32" @@ -4373,12 +4688,12 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plist" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +checksum = "eac26e981c03a6e53e0aee43c113e3202f5581d5360dae7bd2c70e800dd0451d" dependencies = [ "base64 0.22.1", - "indexmap 2.8.0", + "indexmap 2.9.0", "quick-xml 0.32.0", "serde", "time", @@ -4427,6 +4742,15 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -4439,7 +4763,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.24", + "zerocopy", ] [[package]] @@ -4473,7 +4797,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.22.24", + "toml_edit 0.22.26", ] [[package]] @@ -4508,13 +4832,26 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "version_check", + "yansi", +] + [[package]] name = "profiling" version = "1.0.16" @@ -4531,7 +4868,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" dependencies = [ "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -4605,7 +4942,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.25", + "rustls 0.23.27", "socket2", "thiserror 2.0.12", "tokio", @@ -4615,16 +4952,16 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc" +checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b" dependencies = [ "bytes", "getrandom 0.3.2", - "rand 0.9.0", + "rand 0.9.1", "ring", "rustc-hash", - "rustls 0.23.25", + "rustls 0.23.27", "rustls-pki-types", "slab", "thiserror 2.0.12", @@ -4635,9 +4972,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.10" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" dependencies = [ "cfg_aliases", "libc", @@ -4689,13 +5026,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", - "zerocopy 0.8.24", ] [[package]] @@ -4743,7 +5079,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -4810,9 +5146,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6" dependencies = [ "avif-serialize", "imgref", @@ -4851,9 +5187,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ "bitflags 2.9.0", ] @@ -4864,7 +5200,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "libredox", "thiserror 1.0.69", ] @@ -4875,7 +5211,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "libredox", "thiserror 2.0.12", ] @@ -4888,8 +5224,17 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -4900,9 +5245,21 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.5" @@ -4940,7 +5297,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.25", + "rustls 0.23.27", "rustls-pemfile", "rustls-pki-types", "serde", @@ -4959,7 +5316,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.8", + "webpki-roots 0.26.11", "windows-registry 0.4.0", ] @@ -4970,17 +5327,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" dependencies = [ "ashpd", - "block2 0.6.0", - "dispatch2", + "block2 0.6.1", + "dispatch2 0.2.0", "glib-sys 0.18.1", "gobject-sys 0.18.0", "gtk-sys", "js-sys", "log", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "raw-window-handle", "wasm-bindgen", "wasm-bindgen-futures", @@ -5002,12 +5359,23 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "libc", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "roaring" +version = "0.10.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e8d2cfa184d94d0726d650a9f4a1be7f9b76ac9fdb954219878dc00c1c1e7b" +dependencies = [ + "bytemuck", + "byteorder", + "serde", +] + [[package]] name = "rust-ini" version = "0.21.1" @@ -5055,14 +5423,14 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.3" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.9.3", + "linux-raw-sys 0.9.4", "windows-sys 0.59.0", ] @@ -5080,14 +5448,14 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.25" +version = "0.23.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" +checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.0", + "rustls-webpki 0.103.2", "subtle", "zeroize", ] @@ -5103,11 +5471,12 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ "web-time", + "zeroize", ] [[package]] @@ -5122,9 +5491,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.0" +version = "0.103.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa4eeac2588ffff23e9d7a7e9b3f971c5fb5b7ebc9452745e0c232c64f83b2f" +checksum = "7149975849f1abb3832b246010ef62ccc80d3a76169517ada7188252b9cfb437" dependencies = [ "ring", "rustls-pki-types", @@ -5185,9 +5554,15 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.100", + "syn 2.0.101", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -5265,6 +5640,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-inline-default" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fb1bedd774187d304179493b0d3c41fbe97b04b14305363f68d2bdf5e47cb9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "serde-untagged" version = "0.1.7" @@ -5284,7 +5670,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -5295,7 +5681,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -5318,7 +5704,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -5352,7 +5738,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.8.0", + "indexmap 2.9.0", "serde", "serde_derive", "serde_json", @@ -5369,7 +5755,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -5417,9 +5803,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -5427,10 +5813,19 @@ dependencies = [ ] [[package]] -name = "shared_child" -version = "1.0.1" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e297bd52991bbe0686c086957bee142f13df85d1e79b0b21630a99d374ae9dc" dependencies = [ "libc", "windows-sys 0.59.0", @@ -5444,9 +5839,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] @@ -5489,15 +5884,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -5551,6 +5946,12 @@ dependencies = [ "system-deps 6.2.2", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -5565,9 +5966,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "string_cache" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", "parking_lot", @@ -5600,6 +6001,25 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.101", +] + [[package]] name = "subtle" version = "2.6.1" @@ -5630,9 +6050,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.100" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -5650,13 +6070,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -5716,10 +6136,16 @@ dependencies = [ ] [[package]] -name = "tao" -version = "0.32.8" +name = "tagptr" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63c8b1020610b9138dd7b1e06cf259ae91aa05c30f3bd0d6b42a03997b92dec1" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tao" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e59c1f38e657351a2e822eadf40d6a2ad4627b9c25557bc1180ec1b3295ef82" dependencies = [ "bitflags 2.9.0", "core-foundation 0.10.0", @@ -5738,9 +6164,9 @@ dependencies = [ "ndk", "ndk-context", "ndk-sys", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", + "objc2-foundation 0.3.1", "once_cell", "parking_lot", "raw-window-handle", @@ -5748,8 +6174,8 @@ dependencies = [ "tao-macros", "unicode-segmentation", "url", - "windows 0.60.0", - "windows-core 0.60.1", + "windows 0.61.1", + "windows-core 0.61.0", "windows-version", "x11-dl", ] @@ -5762,7 +6188,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -5784,9 +6210,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511dd38065a5d3b36c33cdba4362b99a40a5103bebcd4aebb930717e7c8ba292" +checksum = "e7b0bc1aec81bda6bc455ea98fcaed26b3c98c1648c627ad6ff1c704e8bf8cbc" dependencies = [ "anyhow", "bytes", @@ -5794,7 +6220,7 @@ dependencies = [ "dunce", "embed_plist", "futures-util", - "getrandom 0.2.15", + "getrandom 0.2.16", "glob", "gtk", "heck 0.5.0", @@ -5806,9 +6232,10 @@ dependencies = [ "log", "mime", "muda", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", + "objc2-foundation 0.3.1", + "objc2-ui-kit", "percent-encoding", "plist", "raw-window-handle", @@ -5831,14 +6258,14 @@ dependencies = [ "webkit2gtk", "webview2-com", "window-vibrancy", - "windows 0.60.0", + "windows 0.61.1", ] [[package]] name = "tauri-build" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffa8732a66f90903f5a585215f3cf1e87988d0359bc88c18a502efe7572c1de" +checksum = "d7a0350f0df1db385ca5c02888a83e0e66655c245b7443db8b78a70da7d7f8fc" dependencies = [ "anyhow", "cargo_toml", @@ -5858,9 +6285,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c266a247f14d63f40c6282c2653a8bac5cc3d482ca562a003a88513653ea817a" +checksum = "f93f035551bf7b11b3f51ad9bc231ebbe5e085565527991c16cf326aa38cdf47" dependencies = [ "base64 0.22.1", "brotli", @@ -5874,7 +6301,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.100", + "syn 2.0.101", "tauri-utils", "thiserror 2.0.12", "time", @@ -5895,14 +6322,14 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47a1cf94b3bd6c4dc37dce1a43fc96120ff29a91757f0ab3cf713c7ad846e7c" +checksum = "8db4df25e2d9d45de0c4c910da61cd5500190da14ae4830749fee3466dddd112" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "tauri-codegen", "tauri-utils", ] @@ -5910,7 +6337,7 @@ dependencies = [ [[package]] name = "tauri-nspanel" version = "2.0.1" -source = "git+https://github.com/ahkohd/tauri-nspanel?branch=v2#356843c8433f89feea4f0f666be8b8d73715a57a" +source = "git+https://github.com/ahkohd/tauri-nspanel?branch=v2#d4b9df797959f8fa4701e8a20ff69d9605bb66e9" dependencies = [ "bitflags 2.9.0", "block", @@ -5925,9 +6352,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9972871fcbddf16618f70412d965d4d845cd4b76d03fff168709961ef71e5cdf" +checksum = "37a5ebe6a610d1b78a94650896e6f7c9796323f408800cef436e0fa0539de601" dependencies = [ "anyhow", "glob", @@ -5942,9 +6369,9 @@ dependencies = [ [[package]] name = "tauri-plugin-autostart" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c13f843e5e5df3eed270fc42b02923cc1a6b5c7e56b0f3ac1d858ab2c8b5fb" +checksum = "c58593aafcb03892dbf9998b35a96ead3b8e597435c7af46aff1654d076d5d03" dependencies = [ "auto-launch", "serde", @@ -5956,9 +6383,9 @@ dependencies = [ [[package]] name = "tauri-plugin-deep-link" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35d51ffd286073414d26353bcfc9e83e3cd63f96fa7f7a912f92f2118e5de5a6" +checksum = "dba4412f30eaff6f5d210e20383c2d6835593977402092e95b72497a4f8632fa" dependencies = [ "dunce", "rust-ini", @@ -5970,15 +6397,15 @@ dependencies = [ "thiserror 2.0.12", "tracing", "url", - "windows-registry 0.3.0", - "windows-result 0.2.0", + "windows-registry 0.5.1", + "windows-result 0.3.2", ] [[package]] name = "tauri-plugin-dialog" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b59fd750551b1066744ab956a1cd6b1ea3e1b3763b0b9153ac27a044d596426" +checksum = "bcaf6e5d6062423a0f711a23c2a573ccba222b6a16a9322d8499928f27e41376" dependencies = [ "log", "raw-window-handle", @@ -6009,9 +6436,9 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1edf18000f02903a7c2e5997fb89aca455ecbc0acc15c6535afbb883be223" +checksum = "88371e340ad2f07409a3b68294abe73f20bc9c1bc1b631a31dc37a3d0161f682" dependencies = [ "anyhow", "dunce", @@ -6064,10 +6491,12 @@ dependencies = [ [[package]] name = "tauri-plugin-http" -version = "2.4.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "696ef548befeee6c6c17b80ef73e7c41205b6c2204e87ef78ccc231212389a5c" +checksum = "40dcd6c922a1885e1f0bcebc6768fec6e005bd4b9001c5d90a2f5d4cab297729" dependencies = [ + "bytes", + "cookie_store", "data-url", "http 1.3.1", "regex", @@ -6086,14 +6515,13 @@ dependencies = [ [[package]] name = "tauri-plugin-macos-permissions" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f68ace46ec2ec44e4660056c4a866deccbbabf3317d4a707936dd32c101564" +checksum = "5607e0707d37d7b20e287cf0ce396d1efebe7b833b8e9cbd2ea4257091d9c604" dependencies = [ - "core-graphics 0.24.0", "macos-accessibility-client", - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", "serde", "tauri", "tauri-plugin", @@ -6120,9 +6548,9 @@ dependencies = [ [[package]] name = "tauri-plugin-process" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40cc553ab29581c8c43dfa5fb0c9d5aee8ba962ad3b42908eea26c79610441b7" +checksum = "57da5888533e802b6206b9685091f8714aa1f5266dc80051a82388449558b773" dependencies = [ "tauri", "tauri-plugin", @@ -6130,9 +6558,9 @@ dependencies = [ [[package]] name = "tauri-plugin-screenshots" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90dca6584c11df445268b97f17acc62b6efa2f407289837bfb6b494dc0f1b7fd" +checksum = "639ef1181cae5af6e64da0062d500cbfb143a47ce21052b2e9a2ebebee84640a" dependencies = [ "serde", "tauri", @@ -6143,9 +6571,9 @@ dependencies = [ [[package]] name = "tauri-plugin-shell" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c50a63e60fb8925956cc5b7569f4b750ac197a4d39f13b8dd46ea8e2bad79" +checksum = "69d5eb3368b959937ad2aeaf6ef9a8f5d11e01ffe03629d3530707bbcb27ff5d" dependencies = [ "encoding_rs", "log", @@ -6164,9 +6592,9 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bbc73eed15bba8ad290a52614f2711280df4bf575b36ce78f64367074b90b7" +checksum = "1320af4d866a7fb5f5721d299d14d0dd9e4e6bc0359ff3e263124a2bf6814efa" dependencies = [ "serde", "serde_json", @@ -6197,7 +6625,7 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" version = "2.7.1" -source = "git+https://github.com/infinilabs/plugins-workspace?branch=v2#f0fa81f93438be2d53ce8bc3435a55e17ec971c7" +source = "git+https://github.com/infinilabs/plugins-workspace?branch=v2#eee1d06d95599572b4f68c2acdfff5d3d6c8b238" dependencies = [ "base64 0.22.1", "dirs 6.0.0", @@ -6259,37 +6687,39 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9c7bce5153f1ca7bc45eba37349b31ba50e975e28edc8b5766c5ec02b0b63a" +checksum = "00f004905d549854069e6774533d742b03cacfd6f03deb08940a8677586cbe39" dependencies = [ "cookie", "dpi", "gtk", "http 1.3.1", "jni", + "objc2 0.6.1", + "objc2-ui-kit", "raw-window-handle", "serde", "serde_json", "tauri-utils", "thiserror 2.0.12", "url", - "windows 0.60.0", + "windows 0.61.1", ] [[package]] name = "tauri-runtime-wry" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "087188020fd6facb8578fe9b38e81fa0fe5fb85744c73da51a299f94a530a1e3" +checksum = "f85d056f4d4b014fe874814034f3416d57114b617a493a4fe552580851a3f3a2" dependencies = [ "gtk", "http 1.3.1", "jni", "log", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", + "objc2-foundation 0.3.1", "once_cell", "percent-encoding", "raw-window-handle", @@ -6300,15 +6730,15 @@ dependencies = [ "url", "webkit2gtk", "webview2-com", - "windows 0.60.0", + "windows 0.61.1", "wry", ] [[package]] name = "tauri-utils" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82dcced4014e59af9790cc22f5d271df3be09ecd6728ec68861642553c8d01b7" +checksum = "b2900399c239a471bcff7f15c4399eb1a8c4fe511ba2853e07c996d771a5e0a4" dependencies = [ "anyhow", "brotli", @@ -6344,11 +6774,12 @@ dependencies = [ [[package]] name = "tauri-winres" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56eaa45f707bedf34d19312c26d350bc0f3c59a47e58e8adbeecdc850d2c13a0" +checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4" dependencies = [ "embed-resource", + "indexmap 2.9.0", "toml", ] @@ -6361,7 +6792,7 @@ dependencies = [ "fastrand", "getrandom 0.3.2", "once_cell", - "rustix 1.0.3", + "rustix 1.0.7", "windows-sys 0.59.0", ] @@ -6423,7 +6854,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -6434,7 +6865,17 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", ] [[package]] @@ -6450,9 +6891,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.40" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9c75b47bdff86fa3334a3db91356b8d7d86a9b839dab7d0bdc5c3d3a077618" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa 1.0.15", @@ -6471,9 +6912,9 @@ checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.21" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29aa485584182073ed57fd5004aa09c371f021325014694e432313345865fd04" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -6496,9 +6937,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -6521,9 +6962,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.1" +version = "1.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" +checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" dependencies = [ "backtrace", "bytes", @@ -6546,7 +6987,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -6575,7 +7016,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.25", + "rustls 0.23.27", "tokio", ] @@ -6602,19 +7043,19 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.25", + "rustls 0.23.27", "rustls-pki-types", "tokio", "tokio-rustls 0.26.2", "tungstenite 0.26.2", - "webpki-roots 0.26.8", + "webpki-roots 0.26.11", ] [[package]] name = "tokio-util" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", @@ -6625,21 +7066,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.20" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.24", + "toml_edit 0.22.26", ] [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" dependencies = [ "serde", ] @@ -6650,7 +7091,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.8.0", + "indexmap 2.9.0", "toml_datetime", "winnow 0.5.40", ] @@ -6661,24 +7102,31 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.8.0", + "indexmap 2.9.0", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.22.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ - "indexmap 2.8.0", + "indexmap 2.9.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.7.4", + "toml_write", + "winnow 0.7.10", ] +[[package]] +name = "toml_write" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" + [[package]] name = "tower" version = "0.5.2" @@ -6712,6 +7160,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -6725,7 +7174,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -6735,23 +7184,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", ] [[package]] name = "tray-icon" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d433764348e7084bad2c5ea22c96c71b61b17afe3a11645710f533bd72b6a2b5" +checksum = "9f7eee98ec5c90daf179d55c20a49d8c0d043054ce7c26336c09a24d31f14fa0" dependencies = [ "crossbeam-channel", "dirs 6.0.0", "libappindicator", "muda", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-core-graphics", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "once_cell", "png", "serde", @@ -6820,8 +7299,8 @@ dependencies = [ "http 1.3.1", "httparse", "log", - "rand 0.9.0", - "rustls 0.23.25", + "rand 0.9.1", + "rustls 0.23.27", "rustls-pki-types", "sha1", "thiserror 2.0.12", @@ -6947,10 +7426,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] -name = "utf16_iter" +name = "utf8-ranges" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" +checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" [[package]] name = "utf8_iter" @@ -6985,6 +7464,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "vcpkg" version = "0.2.15" @@ -7085,7 +7570,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "wasm-bindgen-shared", ] @@ -7120,7 +7605,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -7219,24 +7704,33 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.8" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.0", +] + +[[package]] +name = "webpki-roots" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" dependencies = [ "rustls-pki-types", ] [[package]] name = "webview2-com" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d606f600e5272b514dbb66539dd068211cc20155be8d3958201b4b5bd79ed3" +checksum = "b542b5cfbd9618c46c2784e4d41ba218c336ac70d44c55e47b251033e7d85601" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.60.0", - "windows-core 0.60.1", - "windows-implement 0.59.0", + "windows 0.61.1", + "windows-core 0.61.0", + "windows-implement 0.60.0", "windows-interface 0.59.1", ] @@ -7248,18 +7742,18 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] name = "webview2-com-sys" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb27fccd3c27f68e9a6af1bcf48c2d82534b8675b83608a4d81446d095a17ac" +checksum = "8ae2d11c4a686e4409659d7891791254cf9286d3cfe0eef54df1523533d22295" dependencies = [ "thiserror 2.0.12", - "windows 0.60.0", - "windows-core 0.60.1", + "windows 0.61.1", + "windows-core 0.61.0", ] [[package]] @@ -7280,6 +7774,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" +[[package]] +name = "wildmatch" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ce1ab1f8c62655ebe1350f589c61e505cf94d385bc6a12899442d9081e71fd" + [[package]] name = "winapi" version = "0.3.9" @@ -7317,10 +7817,10 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" dependencies = [ - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "raw-window-handle", "windows-sys 0.59.0", "windows-version", @@ -7360,12 +7860,12 @@ dependencies = [ [[package]] name = "windows" -version = "0.60.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf874e74c7a99773e62b1c671427abf01a425e77c3d3fb9fb1e4883ea934529" +checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" dependencies = [ "windows-collections", - "windows-core 0.60.1", + "windows-core 0.61.0", "windows-future", "windows-link", "windows-numerics", @@ -7373,11 +7873,11 @@ dependencies = [ [[package]] name = "windows-collections" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5467f79cc1ba3f52ebb2ed41dbb459b8e7db636cc3429458d9a852e15bc24dec" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-core 0.60.1", + "windows-core 0.61.0", ] [[package]] @@ -7417,24 +7917,24 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.60.1" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca21a92a9cae9bf4ccae5cf8368dce0837100ddf6e6d57936749e85f152f6247" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-implement 0.59.0", + "windows-implement 0.60.0", "windows-interface 0.59.1", "windows-link", "windows-result 0.3.2", - "windows-strings 0.3.1", + "windows-strings 0.4.0", ] [[package]] name = "windows-future" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a787db4595e7eb80239b74ce8babfb1363d8e343ab072f2ffe901400c03349f0" +checksum = "7a1d6bbefcb7b60acd19828e1bc965da6fcf18a7e39490c5f8be71e54a19ba32" dependencies = [ - "windows-core 0.60.1", + "windows-core 0.61.0", "windows-link", ] @@ -7459,7 +7959,7 @@ checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -7470,7 +7970,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -7481,7 +7981,18 @@ checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] @@ -7492,7 +8003,7 @@ checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -7503,7 +8014,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -7514,7 +8025,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -7525,25 +8036,14 @@ checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] name = "windows-numerics" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005dea54e2f6499f2cee279b8f703b3cf3b5734a2d8d21867c8f44003182eeed" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-core 0.60.1", + "windows-core 0.61.0", "windows-link", ] -[[package]] -name = "windows-registry" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafa604f2104cf5ae2cc2db1dee84b7e6a5d11b05f737b60def0ffdc398cbc0a" -dependencies = [ - "windows-result 0.2.0", - "windows-strings 0.2.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows-registry" version = "0.4.0" @@ -7555,6 +8055,17 @@ dependencies = [ "windows-targets 0.53.0", ] +[[package]] +name = "windows-registry" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1da3e436dc7653dfdf3da67332e22bff09bb0e28b0239e1624499c7830842e" +dependencies = [ + "windows-link", + "windows-result 0.3.2", + "windows-strings 0.4.0", +] + [[package]] name = "windows-result" version = "0.2.0" @@ -7585,18 +8096,18 @@ dependencies = [ [[package]] name = "windows-strings" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978d65aedf914c664c510d9de43c8fd85ca745eaff1ed53edf409b479e441663" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" dependencies = [ - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "windows-strings" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" dependencies = [ "windows-link", ] @@ -7899,9 +8410,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.4" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" dependencies = [ "memchr", ] @@ -7934,26 +8445,20 @@ dependencies = [ "bitflags 2.9.0", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wry" -version = "0.50.5" +version = "0.51.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b19b78efae8b853c6c817e8752fc1dbf9cab8a8ffe9c30f399bd750ccf0f0730" +checksum = "c886a0a9d2a94fd90cfa1d929629b79cfefb1546e2c7430c63a47f0664c0e4e2" dependencies = [ "base64 0.22.1", - "block2 0.6.0", + "block2 0.6.1", "cookie", "crossbeam-channel", "dpi", @@ -7967,10 +8472,10 @@ dependencies = [ "kuchikiki", "libc", "ndk", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "objc2-ui-kit", "objc2-web-kit", "once_cell", @@ -7984,8 +8489,8 @@ dependencies = [ "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.60.0", - "windows-core 0.60.1", + "windows 0.61.1", + "windows-core 0.61.0", "windows-version", "x11-dl", ] @@ -8018,7 +8523,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" dependencies = [ "libc", - "rustix 1.0.3", + "rustix 1.0.7", ] [[package]] @@ -8030,11 +8535,11 @@ dependencies = [ "dbus", "image", "log", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-core-graphics", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "percent-encoding", "scopeguard", "thiserror 2.0.12", @@ -8054,16 +8559,6 @@ dependencies = [ "quick-xml 0.30.0", ] -[[package]] -name = "xdg-home" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "xdgkit" version = "3.2.5" @@ -8103,10 +8598,16 @@ dependencies = [ ] [[package]] -name = "yoke" -version = "0.7.5" +name = "yansi" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -8116,25 +8617,24 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "synstructure", ] [[package]] name = "zbus" -version = "5.5.0" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c333f648ea1b647bc95dc1d34807c8e25ed7a6feff3394034dc4776054b236" +checksum = "2522b82023923eecb0b366da727ec883ace092e7887b61d3da5139f26b44da58" dependencies = [ "async-broadcast", "async-executor", - "async-fs", "async-io", "async-lock", "async-process", @@ -8147,17 +8647,15 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix", + "nix 0.29.0", "ordered-stream", "serde", "serde_repr", - "static_assertions", "tokio", "tracing", "uds_windows", "windows-sys 0.59.0", - "winnow 0.7.4", - "xdg-home", + "winnow 0.7.10", "zbus_macros", "zbus_names", "zvariant", @@ -8165,14 +8663,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.5.0" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" +checksum = "05d2e12843c75108c00c618c2e8ef9675b50b6ec095b36dc965f2e5aed463c15" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "zbus_names", "zvariant", "zvariant_utils", @@ -8186,48 +8684,28 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.4", + "winnow 0.7.10", "zvariant", ] [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" -dependencies = [ - "zerocopy-derive 0.8.24", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] @@ -8247,7 +8725,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "synstructure", ] @@ -8258,10 +8736,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] -name = "zerovec" -version = "0.10.4" +name = "zerotrie" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -8270,28 +8759,26 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", ] [[package]] name = "zip" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744" dependencies = [ "arbitrary", "crc32fast", "crossbeam-utils", - "displaydoc", - "indexmap 2.8.0", + "indexmap 2.9.0", "memchr", - "thiserror 2.0.12", ] [[package]] @@ -8320,30 +8807,29 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.4.0" +version = "5.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2df9ee044893fcffbdc25de30546edef3e32341466811ca18421e3cd6c5a3ac" +checksum = "557e89d54880377a507c94cd5452f20e35d14325faf9d2958ebeadce0966c1b2" dependencies = [ "endi", "enumflags2", "serde", - "static_assertions", "url", - "winnow 0.7.4", + "winnow 0.7.10", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.4.0" +version = "5.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" +checksum = "757779842a0d242061d24c28be589ce392e45350dfb9186dfd7a042a2e19870c" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.101", "zvariant_utils", ] @@ -8357,6 +8843,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn 2.0.100", - "winnow 0.7.4", + "syn 2.0.101", + "winnow 0.7.10", ] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 0e3d4781..7c96dcc4 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -20,9 +20,15 @@ tauri-build = { version = "2", features = ["default"] } default = ["desktop"] desktop = [] cargo-clippy = [] +# If enabled, dependency `pizza-engine` will be pulled in. Since it is still +# private, you need access to the repo to enable this feature, or Coco-AI won't +# compile. +use_pizza_engine = ["dep:pizza-engine"] [dependencies] pizza-common = { git = "https://github.com/infinilabs/pizza-common", branch = "main" } +pizza-engine = { git = "https://github.com/infinilabs/pizza", features = ["query_string_parser", "persistence"], optional = true } + tauri = { version = "2", features = ["protocol-asset", "macos-private-api", "tray-icon", "image-ico", "image-png", "unstable"] } tauri-plugin-shell = "2" @@ -42,7 +48,7 @@ tauri-plugin-drag = "2" tauri-plugin-macos-permissions = "2" tauri-plugin-fs-pro = "2" tauri-plugin-screenshots = "2" -applications = { git = "https://github.com/infinilabs/applications-rs", rev = "fb8f475993a2a774ce08d7a58f9f2ac264248a24" } +applications = { git = "https://github.com/infinilabs/applications-rs", rev = "1f62cd25651733bf8dc961c2382a39335a26ffe7" } tokio-native-tls = "0.3" # For wss connections tokio = { version = "1", features = ["full"] } @@ -61,7 +67,6 @@ hostname = "0.3" plist = "1.7" base64 = "0.13" walkdir = "2" -fuzzy_prefix_search = "0.2" log = "0.4" futures-util = "0.3.31" diff --git a/src-tauri/rust-toolchain.toml b/src-tauri/rust-toolchain.toml new file mode 100644 index 00000000..af7a52c6 --- /dev/null +++ b/src-tauri/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly-2024-10-29" \ No newline at end of file diff --git a/src-tauri/src/common/document.rs b/src-tauri/src/common/document.rs index fbb84a77..663f50ae 100644 --- a/src-tauri/src/common/document.rs +++ b/src-tauri/src/common/document.rs @@ -55,39 +55,3 @@ pub struct Document { pub owner: Option, pub last_updated_by: Option, } - -impl Document { - pub fn new( - source: Option, - id: String, - category: String, - name: String, - url: String, - ) -> Self { - Self { - id, - created: None, - updated: None, - source, - r#type: None, - category: Some(category), - subcategory: None, - categories: None, - rich_categories: None, - title: Some(name), - summary: None, - lang: None, - content: None, - icon: None, - thumbnail: None, - cover: None, - tags: None, - url: Some(url), - size: None, - metadata: None, - payload: None, - owner: None, - last_updated_by: None, - } - } -} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 402782cf..43414e0b 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -15,6 +15,7 @@ use crate::server::servers::{load_or_insert_default_server, load_servers_token}; use autostart::{change_autostart, enable_autostart}; use lazy_static::lazy_static; use std::sync::Mutex; +use std::sync::OnceLock; use tauri::async_runtime::block_on; #[cfg(target_os = "macos")] use tauri::ActivationPolicy; @@ -30,6 +31,10 @@ lazy_static! { static ref PREVIOUS_MONITOR_NAME: Mutex> = Mutex::new(None); } +/// To allow us to access tauri's `AppHandle` when its context is inaccessible, +/// store it globally. It will be set in `init()`. +pub(crate) static GLOBAL_TAURI_APP_HANDLE: OnceLock = OnceLock::new(); + #[tauri::command] async fn change_window_height(handle: AppHandle, height: u32) { let window: WebviewWindow = handle.get_webview_window(MAIN_WINDOW_LABEL).unwrap(); @@ -134,13 +139,29 @@ pub fn run() { server::attachment::get_attachment, server::attachment::delete_attachment, server::transcription::transcription, - local::application::get_default_search_paths, - local::application::list_app_with_metadata_in, util::open, server::system_settings::get_system_settings, - simulate_mouse_click + simulate_mouse_click, + local::get_disabled_local_query_sources, + local::enable_local_query_source, + local::disable_local_query_source, + local::application::get_app_list, + local::application::get_app_search_path, + local::application::get_app_metadata, + local::application::set_app_alias, + local::application::register_app_hotkey, + local::application::unregister_app_hotkey, + local::application::disable_app_search, + local::application::enable_app_search, + local::application::add_app_search_path, + local::application::remove_app_search_path, ]) .setup(|app| { + let app_handle = app.handle().clone(); + GLOBAL_TAURI_APP_HANDLE + .set(app_handle.clone()) + .expect("variable already initialized"); + let registry = SearchSourceRegistry::default(); app.manage(registry); // Store registry in Tauri's app state @@ -234,19 +255,8 @@ pub async fn init(app_handle: &AppHandle) { crate::server::servers::try_register_server_to_search_source(app_handle.clone(), &server) .await; } -} -async fn init_app_search_source(app_handle: &AppHandle) -> Result<(), String> { - let application_search = - local::application::ApplicationSearchSource::new(app_handle.clone(), 1000f64).await?; - let calculator_search = local::calculator::CalculatorSource::new(2000f64); - - // Register the application search source - let registry = app_handle.state::(); - registry.register_source(application_search).await; - registry.register_source(calculator_search).await; - - Ok(()) + local::start_pizza_engine_runtime(); } #[tauri::command] @@ -402,7 +412,7 @@ fn open_settings(app: &tauri::AppHandle) { #[tauri::command] async fn get_app_search_source(app_handle: AppHandle) -> Result<(), String> { - init_app_search_source(&app_handle).await?; + local::init_local_search_source(&app_handle).await?; let _ = server::connector::refresh_all_connectors(&app_handle).await; let _ = server::datasource::refresh_all_datasources(&app_handle).await; diff --git a/src-tauri/src/local/application.rs b/src-tauri/src/local/application.rs deleted file mode 100644 index b49bf4af..00000000 --- a/src-tauri/src/local/application.rs +++ /dev/null @@ -1,313 +0,0 @@ -use crate::common::document::{DataSourceReference, Document}; -use crate::common::error::SearchError; -use crate::common::search::{QueryResponse, QuerySource, SearchQuery}; -use crate::common::traits::SearchSource; -use crate::local::LOCAL_QUERY_SOURCE_TYPE; -use applications::App; -use async_trait::async_trait; -use fuzzy_prefix_search::Trie; -use std::collections::HashMap; -use std::path::PathBuf; -use tauri::{AppHandle, Runtime}; -use tauri_plugin_fs_pro::{icon, metadata, name, IconOptions}; - -const DATA_SOURCE_ID: &str = "Applications"; - -#[tauri::command] -pub fn get_default_search_paths() -> Vec { - #[cfg(target_os = "macos")] - return vec![ - "/Applications".into(), - "/System/Applications".into(), - "/System/Library/CoreServices".into(), - ]; - - #[cfg(not(target_os = "macos"))] - { - let paths = applications::get_default_search_paths(); - let mut ret = Vec::with_capacity(paths.len()); - for search_path in paths { - let path_string = search_path - .into_os_string() - .into_string() - .expect("path should be UTF-8 encoded"); - - ret.push(path_string); - } - - ret - } -} - -/// Helper function to return `app`'s path. -/// -/// * Windows: return the path to application's exe -/// * macOS: return the path to the `.app` bundle -/// * Linux: return the path to the `.desktop` file -fn get_app_path(app: &App) -> PathBuf { - if cfg!(target_os = "windows") { - assert!( - app.icon_path.is_some(), - "we only accept Applications with icons" - ); - app.app_path_exe - .as_ref() - .expect("icon is Some, exe path should be Some as well") - .to_path_buf() - } else { - app.app_desktop_path.clone() - } -} - -/// Helper function to return `app`'s path. -/// -/// * Windows/macOS: extract `app_path`'s file name and remove the file extension -/// * Linux: return the name specified in `.desktop` file -async fn get_app_name(app: &App) -> String { - if cfg!(target_os = "linux") { - app.name.clone() - } else { - let app_path = get_app_path(app); - name(app_path.clone()).await - } -} - -/// Helper function to return an absolute path to `app`'s icon. -/// -/// On macOS/Windows, we cache icons in our data directory using the `icon()` function. -async fn get_app_icon_path( - tauri_app_handle: &AppHandle, - app: &App, -) -> Result { - if cfg!(target_os = "linux") { - let icon_path = app - .icon_path - .as_ref() - .expect("We only accept applications with icons") - .to_path_buf(); - - Ok(icon_path) - } else { - let app_path = get_app_path(app); - let options = IconOptions { - size: Some(256), - save_path: None, - }; - - icon(tauri_app_handle.clone(), app_path, Some(options)) - .await - .map_err(|err| err.to_string()) - } -} - -/// Return all the Apps found under `search_path`. -/// -/// Note: apps with no icons will be filtered out. -fn list_app_in(search_path: Vec) -> Result, String> { - let search_path = search_path - .into_iter() - .map(PathBuf::from) - .collect::>(); - - let apps = applications::get_all_apps(&search_path).map_err(|err| err.to_string())?; - - Ok(apps - .into_iter() - .filter(|app| app.icon_path.is_some()) - .collect()) -} - -#[derive(serde::Serialize)] -#[serde(rename_all = "camelCase")] -pub struct AppMetadata { - name: String, - r#where: PathBuf, - size: u64, - icon: PathBuf, - created: u128, - modified: u128, - last_opened: u128, -} - -/// List apps that are in the `search_path`. -/// -/// Different from `list_app_in()`, every app is JSON object containing its metadata, e.g.: -/// -/// ```json -/// { -/// "name": "Finder", -/// "where": "/System/Library/CoreServices", -/// "size": 49283072, -/// "icon": "/xxx.png", -/// "created": 1744625204, -/// "modified": 1744625204, -/// "lastOpened": 1744625250 -/// } -/// ``` -#[tauri::command] -pub async fn list_app_with_metadata_in( - app_handle: AppHandle, - search_path: Vec, -) -> Result, String> { - let apps = list_app_in(search_path)?; - - let mut apps_with_meta = Vec::with_capacity(apps.len()); - - // name version where Type(hardcoded Application) Size Created Modify - for app in apps.iter() { - let app_path = get_app_path(app); - let app_name = get_app_name(app).await; - let app_path_where = { - let mut app_path_clone = app_path.clone(); - let truncated = app_path_clone.pop(); - if !truncated { - panic!("every app file should live somewhere"); - } - - app_path_clone - }; - let icon = get_app_icon_path(&app_handle, app).await?; - - let raw_app_metadata = metadata(app_path.clone(), None).await?; - - let app_metadata = AppMetadata { - name: app_name, - r#where: app_path_where, - size: raw_app_metadata.size, - icon, - created: raw_app_metadata.created_at, - modified: raw_app_metadata.modified_at, - last_opened: raw_app_metadata.accessed_at, - }; - - apps_with_meta.push(app_metadata); - } - - Ok(apps_with_meta) -} - -pub struct ApplicationSearchSource { - base_score: f64, - // app name -> app icon path - icons: HashMap, - application_paths: Trie, -} - -impl ApplicationSearchSource { - pub async fn new( - app_handle: AppHandle, - base_score: f64, - ) -> Result { - let application_paths = Trie::new(); - let mut icons = HashMap::new(); - - let default_search_path = get_default_search_paths(); - let apps = list_app_in(default_search_path)?; - - for app in &apps { - let app_path = get_app_path(app); - let app_name = get_app_name(app).await; - let app_icon_path = get_app_icon_path(&app_handle, app).await?; - - if app_name.is_empty() || app_name.eq("Coco-AI") { - continue; - } - - application_paths.insert(&app_name, app_path); - icons.insert(app_name, app_icon_path); - } - - Ok(ApplicationSearchSource { - base_score, - icons, - application_paths, - }) - } -} - -#[async_trait] -impl SearchSource for ApplicationSearchSource { - fn get_type(&self) -> QuerySource { - QuerySource { - r#type: LOCAL_QUERY_SOURCE_TYPE.into(), - name: hostname::get() - .unwrap_or("My Computer".into()) - .to_string_lossy() - .into(), - id: DATA_SOURCE_ID.into(), - } - } - - async fn search(&self, query: SearchQuery) -> Result { - let query_string = query - .query_strings - .get("query") - .unwrap_or(&"".to_string()) - .to_lowercase(); - - if query_string.is_empty() { - return Ok(QueryResponse { - source: self.get_type(), - hits: Vec::new(), - total_hits: 0, - }); - } - - let mut total_hits = 0; - let mut hits = Vec::new(); - - let query_string_len = query_string.len(); - let mut results = self - .application_paths - .search_within_distance_scored(&query_string, query_string_len - 1); - - // Check for NaN or extreme score values and handle them properly - results.sort_by(|a, b| { - // If either score is NaN, consider them equal (you can customize this logic as needed) - if a.score.is_nan() || b.score.is_nan() { - std::cmp::Ordering::Equal - } else { - // Otherwise, compare the scores as usual - b.score - .partial_cmp(&a.score) - .unwrap_or(std::cmp::Ordering::Equal) - } - }); - - if !results.is_empty() { - for result in results { - let app_name = result.word; - let app_path = result.data.first().unwrap().clone(); - let app_path_string = app_path.to_string_lossy().into_owned(); - - total_hits += 1; - - let mut doc = Document::new( - Some(DataSourceReference { - r#type: Some(LOCAL_QUERY_SOURCE_TYPE.into()), - name: Some(DATA_SOURCE_ID.into()), - id: Some(DATA_SOURCE_ID.into()), - icon: None, - }), - app_path_string.clone(), - "Application".to_string(), - app_name.clone(), - app_path_string.clone(), - ); - - // Attach icon if available - if let Some(icon_path) = self.icons.get(app_name.as_str()) { - doc.icon = Some(icon_path.as_os_str().to_str().unwrap().to_string()); - } - - hits.push((doc, self.base_score + result.score as f64)); - } - } - - Ok(QueryResponse { - source: self.get_type(), - hits, - total_hits, - }) - } -} diff --git a/src-tauri/src/local/application/mod.rs b/src-tauri/src/local/application/mod.rs new file mode 100644 index 00000000..6d9b5284 --- /dev/null +++ b/src-tauri/src/local/application/mod.rs @@ -0,0 +1,38 @@ +use serde::Serialize; + +#[cfg(feature = "use_pizza_engine")] +mod with_feature; + +#[cfg(not(feature = "use_pizza_engine"))] +mod without_feature; + +#[cfg(feature = "use_pizza_engine")] +pub use with_feature::*; + +#[cfg(not(feature = "use_pizza_engine"))] +pub use without_feature::*; + + +#[derive(Debug, Serialize, Clone)] +#[serde(rename_all = "camelCase")] +pub struct AppEntry { + path: String, + name: String, + icon_path: String, + alias: String, + hotkey: String, + is_disabled: bool, +} + + +#[derive(serde::Serialize)] +#[serde(rename_all = "camelCase")] +pub struct AppMetadata { + name: String, + r#where: String, + size: u64, + icon: String, + created: u128, + modified: u128, + last_opened: u128, +} \ No newline at end of file diff --git a/src-tauri/src/local/application/with_feature.rs b/src-tauri/src/local/application/with_feature.rs new file mode 100644 index 00000000..be6d7de6 --- /dev/null +++ b/src-tauri/src/local/application/with_feature.rs @@ -0,0 +1,1109 @@ +use super::super::SearchSourceState; +use super::super::RUNTIME_TX; +use super::AppEntry; +use super::AppMetadata; +use crate::common::document::{DataSourceReference, Document}; +use crate::common::error::SearchError; +use crate::common::search::{QueryResponse, QuerySource, SearchQuery}; +use crate::common::traits::SearchSource; +use crate::local::LOCAL_QUERY_SOURCE_TYPE; +use crate::util::open; +use crate::GLOBAL_TAURI_APP_HANDLE; +use applications::{App, AppTrait}; +use async_trait::async_trait; +use log::{debug, info, warn}; +use pizza_engine::document::FieldType; +use pizza_engine::document::{ + Document as PizzaEngineDocument, DraftDoc as PizzaEngineDraftDoc, FieldValue, +}; +use pizza_engine::document::{Property, Schema}; +use pizza_engine::error::PizzaEngineError; +use pizza_engine::search::{OriginalQuery, QueryContext, SearchResult, Searcher}; +use pizza_engine::store::{DiskStore, DiskStoreSnapshot}; +use pizza_engine::writer::Writer; +use pizza_engine::{doc, Engine, EngineBuilder}; +use serde_json::Value as Json; +use std::collections::HashMap; +use std::collections::HashSet; +use std::path::PathBuf; +use tauri::{async_runtime, AppHandle, Emitter, Manager, Runtime}; +use tauri_plugin_fs_pro::{icon, metadata, name, IconOptions}; +use tauri_plugin_global_shortcut::GlobalShortcutExt; +use tauri_plugin_store::StoreExt; +use tokio::sync::oneshot::Sender as OneshotSender; +use super::super::Task; + +const FIELD_APP_NAME: &str = "app_name"; +const FIELD_ICON_PATH: &str = "icon_path"; +const FIELD_APP_ALIAS: &str = "app_alias"; +const APPLICATION_SEARCH_SOURCE_ID: &str = "application"; + +const TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH: &str = "disabled_app_list_and_search_path"; +const TAURI_STORE_APP_HOTKEY: &str = "app_hotkey"; +const TAURI_STORE_KEY_SEARCH_PATH: &str = "search_path"; +const TAURI_STORE_KEY_DISABLED_APP_LIST: &str = "disabled_app_list"; + +/// We use this as: +/// +/// 1. querysource ID +/// 2. datasource ID +/// 3. datasource name +pub(crate) const QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME: &str = "Applications"; + +pub fn get_default_search_paths() -> Vec { + #[cfg(target_os = "macos")] + return vec![ + "/Applications".into(), + "/System/Applications".into(), + "/System/Library/CoreServices".into(), + ]; + + #[cfg(not(target_os = "macos"))] + { + let paths = applications::get_default_search_paths(); + let mut ret = Vec::with_capacity(paths.len()); + for search_path in paths { + let path_string = search_path + .into_os_string() + .into_string() + .expect("path should be UTF-8 encoded"); + + ret.push(path_string); + } + + ret + } +} + +/// Helper function to return `app`'s path. +/// +/// * Windows: return the path to application's exe +/// * macOS: return the path to the `.app` bundle +/// * Linux: return the path to the `.desktop` file +fn get_app_path(app: &App) -> String { + let path = if cfg!(target_os = "windows") { + assert!( + app.icon_path.is_some(), + "we only accept Applications with icons" + ); + app.app_path_exe + .as_ref() + .expect("icon is Some, exe path should be Some as well") + .to_path_buf() + } else { + app.app_desktop_path.clone() + }; + + path.into_os_string() + .into_string() + .expect("should be UTF-8 encoded") +} + +/// Helper function to return `app`'s path. +/// +/// * Windows/macOS: extract `app_path`'s file name and remove the file extension +/// * Linux: return the name specified in `.desktop` file +async fn get_app_name(app: &App) -> String { + if cfg!(target_os = "linux") { + app.name.clone() + } else { + let app_path = get_app_path(app); + name(app_path.into()).await + } +} + +/// Helper function to return an absolute path to `app`'s icon. +/// +/// On macOS/Windows, we cache icons in our data directory using the `icon()` function. +async fn get_app_icon_path( + tauri_app_handle: &AppHandle, + app: &App, +) -> Result { + let res_path = if cfg!(target_os = "linux") { + let icon_path = app + .icon_path + .as_ref() + .expect("We only accept applications with icons") + .to_path_buf(); + + Ok(icon_path) + } else { + let app_path = get_app_path(app); + let options = IconOptions { + size: Some(256), + save_path: None, + }; + + icon(tauri_app_handle.clone(), app_path.into(), Some(options)) + .await + .map_err(|err| err.to_string()) + }; + + let path = res_path?; + + Ok(path + .into_os_string() + .into_string() + .expect("should be UTF-8 encoded")) +} + +/// Return all the Apps found under `search_path`. +/// +/// Note: apps with no icons will be filtered out. +fn list_app_in(search_path: Vec) -> Result, String> { + let search_path = search_path + .into_iter() + .map(PathBuf::from) + .collect::>(); + + let apps = applications::get_all_apps(&search_path).map_err(|err| err.to_string())?; + + Ok(apps + .into_iter() + .filter(|app| app.icon_path.is_some()) + .collect()) +} + +// A homemade version of `std::try!()` for use in the `Task::exec()` function. +/// +/// It can only be used in functions where the Err variant of the Result type is String. +macro_rules! task_exec_try { + ($result:expr, $callback:expr) => { + match $result { + Ok(ok) => ok, + Err(e) => { + let e_str = e.to_string(); + $callback.send(Err(e_str)).unwrap(); + return; + } + } + }; +} + +struct ApplicationSearchSourceState { + engine: Engine, + writer: Writer, + searcher: Searcher, + snapshot: DiskStoreSnapshot, +} + +impl SearchSourceState for ApplicationSearchSourceState { + fn as_mut_any(&mut self) -> &mut dyn std::any::Any { + self + } +} + +/// Upon application start, index all the applications found in the `get_default_search_paths()`. +struct IndexAllApplicationsTask { + tauri_app_handle: AppHandle, + callback: Option>>, +} + +#[async_trait::async_trait(?Send)] +impl Task for IndexAllApplicationsTask { + fn search_source_id(&self) -> &'static str { + APPLICATION_SEARCH_SOURCE_ID + } + + async fn exec(&mut self, state: &mut Option>) { + let callback = self.callback.take().unwrap(); + let mut app_index_dir = self + .tauri_app_handle + .path() + .app_data_dir() + .expect("failed to find the local dir"); + app_index_dir.push("local_application_index"); + + let index_exists = app_index_dir.exists(); + + let mut pizza_engine_builder = EngineBuilder::new(); + let disk_store = task_exec_try!(DiskStore::new(&app_index_dir), callback); + pizza_engine_builder.set_data_store(disk_store); + + let mut schema = Schema::new(); + let field_app_name = Property::builder(FieldType::Text).build(); + schema + .add_property(FIELD_APP_NAME, field_app_name) + .expect("no collision could happen"); + let property_icon = Property::builder(FieldType::Text).index(false).build(); + schema + .add_property(FIELD_ICON_PATH, property_icon) + .expect("no collision could happen"); + schema + .add_property(FIELD_APP_ALIAS, Property::as_text(None)) + .expect("no collision could happen"); + schema.freeze(); + pizza_engine_builder.set_schema(schema); + + let pizza_engine = pizza_engine_builder + .build() + .unwrap_or_else(|e| panic!("failed to build Pizza engine due to [{}]", e)); + pizza_engine.start(); + let mut writer = pizza_engine.acquire_writer(); + + if !index_exists { + let default_search_path = get_default_search_paths(); + let apps = task_exec_try!(list_app_in(default_search_path), callback); + + for app in apps.iter() { + let app_path = get_app_path(app); + let app_name = get_app_name(app).await; + let app_icon_path = task_exec_try!( + get_app_icon_path(&self.tauri_app_handle, app).await, + callback + ); + // Every app has an empty alias by default + let app_alias = String::new(); + + if app_name.is_empty() || app_name.eq(&self.tauri_app_handle.package_info().name) { + continue; + } + + let document = doc!( app_path, { + FIELD_APP_NAME => app_name, + FIELD_ICON_PATH => app_icon_path, + FIELD_APP_ALIAS => app_alias, + } + ); + + task_exec_try!(writer.create_document(document).await, callback); + } + + task_exec_try!(writer.commit(), callback); + } + + let snapshot = pizza_engine.create_snapshot(); + let searcher = pizza_engine.acquire_searcher(); + + let state_to_store = Box::new(ApplicationSearchSourceState { + searcher, + snapshot, + engine: pizza_engine, + writer, + }) as Box; + + *state = Some(state_to_store); + + callback.send(Ok(())).unwrap(); + } +} + +struct SearchApplicationsTask { + tauri_app_handle: AppHandle, + query_string: String, + callback: Option>>, +} + +#[async_trait::async_trait(?Send)] +impl Task for SearchApplicationsTask { + fn search_source_id(&self) -> &'static str { + APPLICATION_SEARCH_SOURCE_ID + } + + async fn exec(&mut self, state: &mut Option>) { + let callback = self.callback.take().unwrap(); + let disabled_app_list = get_disabled_app_list(self.tauri_app_handle.clone()); + + // TODO: search via alias, implement this when Pizza engine supports update + let dsl = format!( + "{{ \"query\": {{ \"bool\": {{ \"should\": [ {{ \"match\": {{ \"{FIELD_APP_NAME}\": \"{}\" }} }}, {{ \"prefix\": {{ \"{FIELD_APP_NAME}\": \"{}\" }} }} ] }} }} }}", self.query_string, self.query_string); + + let state = state + .as_mut() + .expect("should be set before") + .as_mut_any() + .downcast_mut::() + .unwrap(); + + let query = OriginalQuery::QueryDSL(dsl); + let query_ctx = QueryContext::new(query, true); + let mut search_result = match state.searcher.parse_and_query(&query_ctx, &state.snapshot) { + Ok(search_result) => search_result, + Err(engine_err) => { + callback.send(Err(engine_err)).unwrap(); + return; + } + }; + + // filter out the disabled apps + if let Some(hits) = &mut search_result.hits { + hits.retain(|document| { + !disabled_app_list.contains( + document + .key + .as_ref() + .expect("every document should have a key"), + ) + }); + } + + let rx_dropped_error = callback.send(Ok(search_result)).is_err(); + if rx_dropped_error { + warn!("failed to send local app search result back because the corresponding channel receiver end has been unexpected dropped, which could happen due to a low query timeout") + } + } +} + +struct GetApplicationsTask { + callback: Option>, PizzaEngineError>>>, +} + +#[async_trait(?Send)] +impl Task for GetApplicationsTask { + fn search_source_id(&self) -> &'static str { + APPLICATION_SEARCH_SOURCE_ID + } + + async fn exec(&mut self, state: &mut Option>) { + let callback = self.callback.take().unwrap(); + + // `size` is set to u32::MAX, it should be a reasonable value + let dsl = r#"{ + "size": 4294967295, + "query": { + "match_all": { } + } + }"#; + + let state = state + .as_mut() + .expect("should be set before") + .as_mut_any() + .downcast_mut::() + .unwrap(); + + let query = OriginalQuery::QueryDSL(dsl.into()); + let query_ctx = QueryContext::new(query, true); + let search_result = match state.searcher.parse_and_query(&query_ctx, &state.snapshot) { + Ok(search_result) => search_result, + Err(engine_err) => { + callback.send(Err(engine_err)).unwrap(); + return; + } + }; + let hits = search_result.hits; + + callback.send(Ok(hits)).unwrap(); + } +} + +/// When +/// 1. App list watcher reports that there are some newly-installed applications +/// 2. New search paths have been added by the user +/// +/// We use this task to index them. +struct IndexNewApplicationsTask { + applications: Vec, + callback: Option>>, +} + +#[async_trait(?Send)] +impl Task for IndexNewApplicationsTask { + fn search_source_id(&self) -> &'static str { + APPLICATION_SEARCH_SOURCE_ID + } + + async fn exec(&mut self, state: &mut Option>) { + let callback = self + .callback + .take() + .expect("callback not set or exec has been invoked multiple times"); + let state = state + .as_mut() + .expect("should be set before") + .as_mut_any() + .downcast_mut::() + .unwrap(); + + let writer = &mut state.writer; + + for app_document in std::mem::take(&mut self.applications) { + task_exec_try!(writer.create_document(app_document).await, callback); + } + + task_exec_try!(writer.commit(), callback); + + state.snapshot = state.engine.create_snapshot(); + + callback.send(Ok(())).expect("rx dropped"); + } +} + +pub struct ApplicationSearchSource; + +impl ApplicationSearchSource { + pub async fn init(app_handle: AppHandle) -> Result<(), String> { + let (tx, rx) = tokio::sync::oneshot::channel(); + let index_applications_task = IndexAllApplicationsTask { + tauri_app_handle: app_handle.clone(), + callback: Some(tx), + }; + + RUNTIME_TX + .get() + .unwrap() + .send(Box::new(index_applications_task)) + .unwrap(); + + rx.await.unwrap()?; + + app_handle + .store(TAURI_STORE_APP_HOTKEY) + .map_err(|e| e.to_string())?; + let disabled_app_list_and_search_path_store = app_handle + .store(TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH) + .map_err(|e| e.to_string())?; + if disabled_app_list_and_search_path_store + .get(TAURI_STORE_KEY_DISABLED_APP_LIST) + .is_none() + { + disabled_app_list_and_search_path_store + .set(TAURI_STORE_KEY_DISABLED_APP_LIST, Json::Array(Vec::new())); + } + + if disabled_app_list_and_search_path_store + .get(TAURI_STORE_KEY_SEARCH_PATH) + .is_none() + { + let default_search_path = get_default_search_paths(); + disabled_app_list_and_search_path_store + .set(TAURI_STORE_KEY_SEARCH_PATH, default_search_path); + } + + register_app_hotkey_upon_start(app_handle.clone())?; + + let app_handle_clone = app_handle.clone(); + std::thread::Builder::new() + .name("local app search - app list synchronizer".into()) + .spawn(move || { + let tokio_rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("failed to start a tokio runtime"); + + tokio_rt.block_on(async move { + info!("app list synchronizer started"); + loop { + tokio::time::sleep(std::time::Duration::from_secs(60 * 2)).await; + debug!("app list synchronizer working"); + + let stored_app_list = get_app_list(app_handle_clone.clone()) + .await + .expect("failed to fetch the stored app list"); + let store = app_handle_clone + .store(TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH) + .unwrap_or_else(|_e| { + panic!( + "store [{}] not found/loaded", + TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH + ) + }); + let search_path_json = + store.get(TAURI_STORE_KEY_SEARCH_PATH).unwrap_or_else(|| { + panic!("key [{}] not found", TAURI_STORE_KEY_SEARCH_PATH) + }); + let search_paths: Vec = match search_path_json { + Json::Array(array) => array + .into_iter() + .map(|json| match json { + Json::String(str) => str, + _ => unreachable!("search path should be a string"), + }) + .collect(), + _ => unreachable!("search paths should be stored in an array"), + }; + let mut current_app_list = list_app_in(search_paths).unwrap_or_else(|e| { + panic!("failed to fetch app list due to error [{}]", e) + }); + // filter out Coco-AI + current_app_list.retain(|app| app.name != app_handle.package_info().name); + + let current_app_list_path_hash_index = { + let mut index = HashMap::new(); + for (idx, app) in current_app_list.iter().enumerate() { + index.insert(get_app_path(app), idx); + } + + index + }; + let current_app_path_list: HashSet = + current_app_list.iter().map(get_app_path).collect(); + let stored_app_path_list: HashSet = stored_app_list + .iter() + .map(|app_entry| app_entry.path.clone()) + .collect(); + + let new_apps = current_app_path_list.difference(&stored_app_path_list); + debug!("found new apps [{:?}]", new_apps); + + // Synchronize the stored app list + let mut new_apps_pizza_engine_documents = Vec::new(); + + // Inform the frontend + let mut new_app_entries = Vec::new(); + + for new_app_path in new_apps { + let idx = *current_app_list_path_hash_index.get(new_app_path).unwrap(); + let new_app = current_app_list.get(idx).unwrap(); + let new_app_name = get_app_name(new_app).await; + let new_app_icon_path = + get_app_icon_path(&app_handle_clone, new_app).await.unwrap(); + let new_app_alias = String::new(); + + let new_app_entry = AppEntry { + path: new_app_path.clone(), + name: new_app_name.clone(), + icon_path: new_app_icon_path.clone(), + alias: new_app_alias.clone(), + hotkey: String::new(), + is_disabled: false, + }; + + let new_app_pizza_engine_document = doc!(new_app_path.clone(), { + FIELD_APP_NAME => new_app_name, + FIELD_ICON_PATH => new_app_icon_path, + FIELD_APP_ALIAS => new_app_alias, + } + ); + + new_apps_pizza_engine_documents.push(new_app_pizza_engine_document); + new_app_entries.push(new_app_entry); + } + + // NOTE: always update the backend data before sending events to + // the frontend, or the backend could receive requests that manipulate + // the data that does not exist. + let (callback, wait_for_complete) = tokio::sync::oneshot::channel(); + let index_new_apps_task = Box::new(IndexNewApplicationsTask { + applications: new_apps_pizza_engine_documents, + callback: Some(callback), + }); + RUNTIME_TX + .get() + .unwrap() + .send(index_new_apps_task) + .expect("rx dropped, pizza runtime could possibly be dead"); + wait_for_complete + .await + .expect("tx dropped, pizza runtime could possibly be dead") + .unwrap_or_else(|e| { + panic!("failed to index new apps due to error [{}]", e) + }); + + app_handle_clone.emit("new-apps", new_app_entries).unwrap(); + } + }); + }) + .unwrap(); + + Ok(()) + } +} + +#[async_trait] +impl SearchSource for ApplicationSearchSource { + fn get_type(&self) -> QuerySource { + QuerySource { + r#type: LOCAL_QUERY_SOURCE_TYPE.into(), + name: hostname::get() + .unwrap_or("My Computer".into()) + .to_string_lossy() + .into(), + id: QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME.into(), + } + } + + async fn search(&self, query: SearchQuery) -> Result { + let query_string = query + .query_strings + .get("query") + .unwrap_or(&"".to_string()) + .to_lowercase(); + + if query_string.is_empty() { + return Ok(QueryResponse { + source: self.get_type(), + hits: Vec::new(), + total_hits: 0, + }); + } + + let (tx, rx) = tokio::sync::oneshot::channel(); + let task = SearchApplicationsTask { + tauri_app_handle: GLOBAL_TAURI_APP_HANDLE + .get() + .expect("global tauri app handle not initialized") + .clone(), + query_string, + callback: Some(tx), + }; + + RUNTIME_TX + .get() + .unwrap() + .send(Box::new(task)) + .expect("rx dropped, the runtime thread is possibly dead"); + + let search_result = rx + .await + .expect("tx dropped, the runtime thread is possibly dead") + .map_err(|pizza_engine_err| { + let err_str = pizza_engine_err.to_string(); + SearchError::InternalError(err_str) + })?; + + let total_hits = search_result.total_hits; + let source = self.get_type(); + let hits = pizza_engine_hits_to_coco_hits(search_result.hits); + + Ok(QueryResponse { + source, + hits, + total_hits, + }) + } +} + +fn pizza_engine_hits_to_coco_hits( + pizza_engine_hits: Option>, +) -> Vec<(Document, f64)> { + let Some(engine_hits) = pizza_engine_hits else { + return Vec::new(); + }; + + let mut coco_hits = Vec::new(); + for engine_hit in engine_hits { + let score = engine_hit.score.unwrap_or(0.0) as f64; + let mut document_fields = engine_hit.fields; + let app_name = match document_fields.remove(FIELD_APP_NAME).unwrap() { + FieldValue::Text(string) => string, + _ => unreachable!("field name is of type Text"), + }; + let app_path = engine_hit.key.expect("key should be set to app path"); + let app_icon_path = match document_fields.remove(FIELD_ICON_PATH).unwrap() { + FieldValue::Text(string) => string, + _ => unreachable!("field icon is of type Text"), + }; + + let coco_document = Document { + source: Some(DataSourceReference { + r#type: Some(LOCAL_QUERY_SOURCE_TYPE.into()), + name: Some(QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME.into()), + id: Some(QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME.into()), + icon: None, + }), + id: app_path.clone(), + category: Some("Application".to_string()), + title: Some(app_name.clone()), + url: Some(app_path), + icon: Some(app_icon_path), + + ..Default::default() + }; + + coco_hits.push((coco_document, score)); + } + + coco_hits +} + +#[tauri::command] +pub async fn set_app_alias(_app_path: String, _alias: String) -> Result<(), String> { + unimplemented!("until Pizza-engine supports update") +} + +fn register_app_hotkey_upon_start( + tauri_app_handle: AppHandle, +) -> Result<(), String> { + let app_hotkey_store = tauri_app_handle + .store(TAURI_STORE_APP_HOTKEY) + .unwrap_or_else(|_| panic!("store [{}] not found/loaded", TAURI_STORE_APP_HOTKEY)); + + for (app_path, hotkey) in app_hotkey_store.entries() { + let hotkey = match hotkey { + Json::String(str) => str, + _ => unreachable!("hotkey should be stored in a string"), + }; + + tauri_app_handle + .global_shortcut() + .on_shortcut( + hotkey.as_str(), + move |tauri_app_handle, _hot_key, _event| { + let app_path_clone = app_path.clone(); + let tauri_app_handle_clone = tauri_app_handle.clone(); + // This closure will be executed on the main thread, so we spawn to reduce the potential UI lag. + async_runtime::spawn(async move { + if let Err(e) = open(tauri_app_handle_clone, app_path_clone).await { + warn!("failed to open app due to [{}]", e); + } + }); + }, + ) + .map_err(|e| e.to_string())?; + } + + Ok(()) +} + +#[tauri::command] +pub async fn register_app_hotkey( + tauri_app_handle: AppHandle, + app_path: String, + hotkey: String, +) -> Result<(), String> { + let app_hotkey_store = tauri_app_handle + .store(TAURI_STORE_APP_HOTKEY) + .unwrap_or_else(|_| panic!("store [{}] not found/loaded", TAURI_STORE_APP_HOTKEY)); + + app_hotkey_store.set(app_path.clone(), hotkey.as_str()); + + tauri_app_handle + .global_shortcut() + .on_shortcut( + hotkey.as_str(), + move |tauri_app_handle, _hot_key, _event| { + let app_path_clone = app_path.clone(); + let tauri_app_handle_clone = tauri_app_handle.clone(); + // This closure will be executed on the main thread, so we spawn to reduce the potential UI lag. + async_runtime::spawn(async move { + if let Err(e) = open(tauri_app_handle_clone, app_path_clone).await { + warn!("failed to open app due to [{}]", e); + } + }); + }, + ) + .map_err(|e| e.to_string())?; + + Ok(()) +} + +#[tauri::command] +pub async fn unregister_app_hotkey( + tauri_app_handle: AppHandle, + app_path: String, +) -> Result<(), String> { + let app_hotkey_store = tauri_app_handle + .store(TAURI_STORE_APP_HOTKEY) + .unwrap_or_else(|_| panic!("store [{}] not found/loaded", TAURI_STORE_APP_HOTKEY)); + + let Some(hotkey) = app_hotkey_store.get(app_path.as_str()) else { + let error_msg = format!( + "unregister an Application hotkey that does not exist app: [{}]", + app_path, + ); + warn!("{}", error_msg); + return Err(error_msg); + }; + + let hotkey = match hotkey { + Json::String(str) => str, + _ => unreachable!("hotkey should be stored in a string"), + }; + + let deleted = app_hotkey_store.delete(app_path.as_str()); + if !deleted { + return Err("failed to delete application hotkey from store".into()); + } + + tauri_app_handle + .global_shortcut() + .unregister(hotkey.as_str()) + .map_err(|e| e.to_string())?; + + Ok(()) +} + +fn get_disabled_app_list(tauri_app_handle: AppHandle) -> Vec { + let store = tauri_app_handle + .store(TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH) + .unwrap_or_else(|_| { + panic!( + "tauri store [{}] not found/loaded", + TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH + ) + }); + let disabled_app_list_json = store + .get(TAURI_STORE_KEY_DISABLED_APP_LIST) + .unwrap_or_else(|| panic!("key [{}] not found", TAURI_STORE_KEY_DISABLED_APP_LIST)); + + let disabled_app_list: Vec = match disabled_app_list_json { + Json::Array(a) => a + .into_iter() + .map(|json| match json { + Json::String(s) => s, + _ => unreachable!("app_path is stored in a string"), + }) + .collect(), + _ => unreachable!("disabled app list is stored in an array"), + }; + + disabled_app_list +} + +#[tauri::command] +pub async fn disable_app_search( + tauri_app_handle: AppHandle, + app_path: String, +) -> Result<(), String> { + let store = tauri_app_handle + .store(TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH) + .unwrap_or_else(|_| { + panic!( + "tauri store [{}] not found/loaded", + TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH + ) + }); + + let mut disabled_app_list = get_disabled_app_list(tauri_app_handle); + + if disabled_app_list.contains(&app_path) { + return Err(format!( + "trying to disable an app that is disabled [{}]", + app_path + )); + } + + disabled_app_list.push(app_path); + + store.set(TAURI_STORE_KEY_DISABLED_APP_LIST, disabled_app_list); + + Ok(()) +} + +#[tauri::command] +pub async fn enable_app_search( + tauri_app_handle: AppHandle, + app_path: String, +) -> Result<(), String> { + let store = tauri_app_handle + .store(TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH) + .unwrap_or_else(|_| { + panic!( + "tauri store [{}] not found/loaded", + TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH + ) + }); + + let mut disabled_app_list = get_disabled_app_list(tauri_app_handle); + + match disabled_app_list + .iter() + .position(|app_path_str| app_path_str == &app_path) + { + Some(index) => { + disabled_app_list.remove(index); + store.set(TAURI_STORE_KEY_DISABLED_APP_LIST, disabled_app_list); + + Ok(()) + } + None => Err(format!( + "trying to enable an app that is not disabled [{}]", + app_path + )), + } +} + +#[tauri::command] +pub async fn add_app_search_path( + tauri_app_handle: AppHandle, + search_path: String, +) -> Result<(), String> { + let mut search_paths = get_app_search_path(tauri_app_handle.clone()).await; + if search_paths.contains(&search_path) { + return Ok(()); + } + + search_paths.push(search_path); + + let store = tauri_app_handle + .store(TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH) + .unwrap_or_else(|_| { + panic!( + "store [{}] not found/loaded", + TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH + ) + }); + + store.set(TAURI_STORE_KEY_SEARCH_PATH, search_paths); + + Ok(()) +} + +#[tauri::command] +pub async fn remove_app_search_path( + tauri_app_handle: AppHandle, + search_path: String, +) -> Result<(), String> { + let mut search_paths = get_app_search_path(tauri_app_handle.clone()).await; + let opt_index = search_paths.iter().position(|path| path == &search_path); + let Some(index) = opt_index else { + return Ok(()); + }; + + search_paths.remove(index); + let store = tauri_app_handle + .store(TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH) + .unwrap_or_else(|_| { + panic!( + "store [{}] not found/loaded", + TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH + ) + }); + + store.set(TAURI_STORE_KEY_SEARCH_PATH, search_paths); + + Ok(()) +} + +#[tauri::command] +pub async fn get_app_search_path(tauri_app_handle: AppHandle) -> Vec { + let store = tauri_app_handle + .store(TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH) + .unwrap_or_else(|_| { + panic!( + "store [{}] not found/loaded", + TAURI_STORE_DISABLED_APP_LIST_AND_SEARCH_PATH + ) + }); + + let search_path_json = store + .get(TAURI_STORE_KEY_SEARCH_PATH) + .unwrap_or_else(|| panic!("key [{}] not found", TAURI_STORE_KEY_SEARCH_PATH)); + + let search_path: Vec = match search_path_json { + Json::Array(array) => array + .into_iter() + .map(|json| match json { + Json::String(str) => str, + _ => unreachable!("search path is stored in a string"), + }) + .collect(), + _ => unreachable!("search path is stored in an array"), + }; + + search_path +} + +#[tauri::command] +pub async fn get_app_list( + tauri_app_handle: AppHandle, +) -> Result, String> { + let (callback, wait_for_result) = tokio::sync::oneshot::channel(); + + let get_applications_task = Box::new(GetApplicationsTask { + callback: Some(callback), + }); + RUNTIME_TX + .get() + .unwrap() + .send(get_applications_task) + .unwrap(); + + let opt_pizza_engine_documents = wait_for_result.await.unwrap().map_err(|e| e.to_string())?; + + let Some(pizza_engine_documents) = opt_pizza_engine_documents else { + return Ok(Vec::new()); + }; + + let app_hotkey_store = tauri_app_handle + .store(TAURI_STORE_APP_HOTKEY) + .unwrap_or_else(|_| panic!("tauri store [{}] not found/loaded", TAURI_STORE_APP_HOTKEY)); + let disabled_app_list = get_disabled_app_list(tauri_app_handle); + + let mut app_entries = Vec::with_capacity(pizza_engine_documents.len()); + + for pizza_engine_document in pizza_engine_documents { + let mut fields = pizza_engine_document.fields; + + let path = pizza_engine_document + .key + .expect("key should be set to app_path"); + let name = match fields + .remove(FIELD_APP_NAME) + .unwrap_or_else(|| panic!("field [{}] not found", FIELD_APP_NAME)) + { + FieldValue::Text(str) => str, + _ => unreachable!("app name is stored in a string"), + }; + let icon_path = match fields + .remove(FIELD_ICON_PATH) + .unwrap_or_else(|| panic!("field [{}] not found", FIELD_ICON_PATH)) + { + FieldValue::Text(str) => str, + _ => unreachable!("app icon path is stored in a string"), + }; + let alias = match fields + .remove(FIELD_APP_ALIAS) + .unwrap_or_else(|| panic!("field [{}] not found", FIELD_APP_ALIAS)) + { + FieldValue::Text(str) => str, + _ => unreachable!("app alias is stored in a string"), + }; + let hotkey = app_hotkey_store + .get(&path) + .map(|json| match json { + Json::String(str) => str, + _ => unreachable!("app hotkey is stored in a string"), + }) + // If a hotkey is not set, we use an empty string + .unwrap_or(String::new()); + let is_disabled = disabled_app_list.contains(&path); + + let app_entry = AppEntry { + path, + name, + icon_path, + alias, + hotkey, + is_disabled, + }; + + app_entries.push(app_entry); + } + + Ok(app_entries) +} + +#[tauri::command] +pub async fn get_app_metadata( + tauri_app_handle: AppHandle, + app_path: String, +) -> Result { + let app = + App::from_path(std::path::Path::new(&app_path)).expect("frontend sends an invalid app"); + + let app_path = get_app_path(&app); + let app_name = get_app_name(&app).await; + let app_path_where = { + let app_path_borrowed_path = std::path::Path::new(app_path.as_str()); + let app_path_where = app_path_borrowed_path + .parent() + .expect("every app file should live somewhere"); + + app_path_where + .to_str() + .expect("it is guaranteed to be UTF-8 encoded") + .to_string() + }; + let icon = get_app_icon_path(&tauri_app_handle, &app).await?; + + let raw_app_metadata = metadata(app_path.into(), None).await?; + + let app_exe_path = app + .app_path_exe + .as_ref() + .expect("exe path should be Some") + .clone(); + let raw_app_exe_metadata = metadata(app_exe_path, None).await?; + + Ok(AppMetadata { + name: app_name, + r#where: app_path_where, + size: raw_app_metadata.size, + icon, + created: raw_app_metadata.created_at, + modified: raw_app_metadata.modified_at, + last_opened: raw_app_exe_metadata.accessed_at, + }) +} diff --git a/src-tauri/src/local/application/without_feature.rs b/src-tauri/src/local/application/without_feature.rs new file mode 100644 index 00000000..1ca683c2 --- /dev/null +++ b/src-tauri/src/local/application/without_feature.rs @@ -0,0 +1,121 @@ +use crate::common::error::SearchError; +use crate::common::search::{QueryResponse, QuerySource, SearchQuery}; +use crate::common::traits::SearchSource; +use crate::local::LOCAL_QUERY_SOURCE_TYPE; +use async_trait::async_trait; +use tauri::{AppHandle, Runtime}; +use super::AppEntry; +use super::AppMetadata; + +pub(crate) const QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME: &str = "Applications"; + +pub struct ApplicationSearchSource; + +impl ApplicationSearchSource { + pub async fn init(_app_handle: AppHandle) -> Result<(), String> { + Ok(()) + } +} + +#[async_trait] +impl SearchSource for ApplicationSearchSource { + fn get_type(&self) -> QuerySource { + QuerySource { + r#type: LOCAL_QUERY_SOURCE_TYPE.into(), + name: hostname::get() + .unwrap_or("My Computer".into()) + .to_string_lossy() + .into(), + id: QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME.into(), + } + } + + async fn search(&self, _query: SearchQuery) -> Result { + Ok(QueryResponse { + source: self.get_type(), + hits: Vec::new(), + total_hits: 0, + }) + } +} + +#[tauri::command] +pub async fn set_app_alias(_app_path: String, _alias: String) -> Result<(), String> { + unreachable!("app list should be empty, there is no way this can be invoked") +} + +#[tauri::command] +pub async fn register_app_hotkey( + _tauri_app_handle: AppHandle, + _app_path: String, + _hotkey: String, +) -> Result<(), String> { + unreachable!("app list should be empty, there is no way this can be invoked") +} + +#[tauri::command] +pub async fn unregister_app_hotkey( + _tauri_app_handle: AppHandle, + _app_path: String, +) -> Result<(), String> { + unreachable!("app list should be empty, there is no way this can be invoked") +} + +#[tauri::command] +pub async fn disable_app_search( + _tauri_app_handle: AppHandle, + _app_path: String, +) -> Result<(), String> { + // no-op + Ok(()) +} + +#[tauri::command] +pub async fn enable_app_search( + _tauri_app_handle: AppHandle, + _app_path: String, +) -> Result<(), String> { + // no-op + Ok(()) +} + +#[tauri::command] +pub async fn add_app_search_path( + _tauri_app_handle: AppHandle, + _search_path: String, +) -> Result<(), String> { + // no-op + Ok(()) +} + +#[tauri::command] +pub async fn remove_app_search_path( + _tauri_app_handle: AppHandle, + _search_path: String, +) -> Result<(), String> { + // no-op + Ok(()) +} + +#[tauri::command] +pub async fn get_app_search_path(_tauri_app_handle: AppHandle) -> Vec { + // Return an empty list + Vec::new() +} + + +#[tauri::command] +pub async fn get_app_list( + _tauri_app_handle: AppHandle, +) -> Result, String> { + // Return an empty list + Ok(Vec::new()) +} + +#[tauri::command] +pub async fn get_app_metadata( + _tauri_app_handle: AppHandle, + _app_path: String, +) -> Result { + unreachable!("app list should be empty, there is no way this can be invoked") +} diff --git a/src-tauri/src/local/calculator.rs b/src-tauri/src/local/calculator.rs index aaa0c570..a701df35 100644 --- a/src-tauri/src/local/calculator.rs +++ b/src-tauri/src/local/calculator.rs @@ -11,7 +11,7 @@ use num2words::Num2Words; use serde_json::Value; use std::collections::HashMap; -const DATA_SOURCE_ID: &str = "Calculator"; +pub(crate) const DATA_SOURCE_ID: &str = "Calculator"; pub struct CalculatorSource { base_score: f64, diff --git a/src-tauri/src/local/mod.rs b/src-tauri/src/local/mod.rs index b027eb4b..6fb16c29 100644 --- a/src-tauri/src/local/mod.rs +++ b/src-tauri/src/local/mod.rs @@ -2,4 +2,163 @@ pub mod application; pub mod calculator; pub mod file_system; +use std::any::Any; +use std::collections::hash_map::Entry; +use std::collections::HashMap; +use std::sync::OnceLock; + +use crate::common::register::SearchSourceRegistry; +use serde_json::Value as Json; +use tauri::{AppHandle, Manager, Runtime}; +use tauri_plugin_store::StoreExt; + pub const LOCAL_QUERY_SOURCE_TYPE: &str = "local"; +pub const TAURI_STORE_LOCAL_QUERY_SOURCE_ENABLED_STATE: &str = "local_query_source_enabled_state"; + +trait SearchSourceState { + #[cfg_attr(not(feature = "use_pizza_engine"), allow(unused))] + fn as_mut_any(&mut self) -> &mut dyn Any; +} + +#[async_trait::async_trait(?Send)] +trait Task: Send + Sync { + fn search_source_id(&self) -> &'static str; + + async fn exec(&mut self, state: &mut Option>); +} + +static RUNTIME_TX: OnceLock>> = OnceLock::new(); + +pub(crate) fn start_pizza_engine_runtime() { + std::thread::spawn(|| { + let rt = tokio::runtime::Runtime::new().unwrap(); + + let main = async { + let mut states: HashMap>> = HashMap::new(); + + let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel(); + RUNTIME_TX.set(tx).unwrap(); + + while let Some(mut task) = rx.recv().await { + let opt_search_source_state = match states.entry(task.search_source_id().into()) { + Entry::Occupied(o) => o.into_mut(), + Entry::Vacant(v) => v.insert(None), + }; + task.exec(opt_search_source_state).await; + } + }; + + rt.block_on(main); + }); +} + +pub(crate) async fn init_local_search_source( + app_handle: &AppHandle, +) -> Result<(), String> { + let enabled_status_store = app_handle + .store(TAURI_STORE_LOCAL_QUERY_SOURCE_ENABLED_STATE) + .map_err(|e| e.to_string())?; + if enabled_status_store.is_empty() { + enabled_status_store.set( + application::QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME, + Json::Bool(true), + ); + enabled_status_store.set(calculator::DATA_SOURCE_ID, Json::Bool(true)); + } + let registry = app_handle.state::(); + + application::ApplicationSearchSource::init(app_handle.clone()).await?; + + for (id, enabled) in enabled_status_store.entries() { + let enabled = match enabled { + Json::Bool(b) => b, + _ => unreachable!("enabled state should be stored as a boolean"), + }; + + if enabled { + if id == application::QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME { + registry + .register_source(application::ApplicationSearchSource) + .await; + } + + if id == calculator::DATA_SOURCE_ID { + let calculator_search = calculator::CalculatorSource::new(2000f64); + registry.register_source(calculator_search).await; + } + } + } + + Ok(()) +} + +#[tauri::command] +pub async fn get_disabled_local_query_sources(app_handle: AppHandle) -> Vec { + let enabled_status_store = app_handle + .store(TAURI_STORE_LOCAL_QUERY_SOURCE_ENABLED_STATE) + .unwrap_or_else(|e| { + panic!( + "tauri store [{}] should exist and be loaded, but that's not true due to error [{}]", + TAURI_STORE_LOCAL_QUERY_SOURCE_ENABLED_STATE, e + ) + }); + let mut disabled_local_query_sources = Vec::new(); + + for (id, enabled) in enabled_status_store.entries() { + let enabled = match enabled { + Json::Bool(b) => b, + _ => unreachable!("enabled state should be stored as a boolean"), + }; + + if !enabled { + disabled_local_query_sources.push(id); + } + } + + disabled_local_query_sources +} + +#[tauri::command] +pub async fn enable_local_query_source( + app_handle: AppHandle, + query_source_id: String, +) { + let registry = app_handle.state::(); + if query_source_id == application::QUERYSOURCE_ID_DATASOURCE_ID_DATASOURCE_NAME { + let application_search = application::ApplicationSearchSource; + registry.register_source(application_search).await; + } + if query_source_id == calculator::DATA_SOURCE_ID { + let calculator_search = calculator::CalculatorSource::new(2000f64); + registry.register_source(calculator_search).await; + } + + let enabled_status_store = app_handle + .store(TAURI_STORE_LOCAL_QUERY_SOURCE_ENABLED_STATE) + .unwrap_or_else(|e| { + panic!( + "tauri store [{}] should exist and be loaded, but that's not true due to error [{}]", + TAURI_STORE_LOCAL_QUERY_SOURCE_ENABLED_STATE, e + ) + }); + enabled_status_store.set(query_source_id, Json::Bool(true)); +} + +#[tauri::command] +pub async fn disable_local_query_source( + app_handle: AppHandle, + query_source_id: String, +) { + let registry = app_handle.state::(); + registry.remove_source(&query_source_id).await; + + let enabled_status_store = app_handle + .store(TAURI_STORE_LOCAL_QUERY_SOURCE_ENABLED_STATE) + .unwrap_or_else(|e| { + panic!( + "tauri store [{}] should exist and be loaded, but that's not true due to error [{}]", + TAURI_STORE_LOCAL_QUERY_SOURCE_ENABLED_STATE, e + ) + }); + enabled_status_store.set(query_source_id, Json::Bool(false)); +} diff --git a/src-tauri/src/search/mod.rs b/src-tauri/src/search/mod.rs index 290cc549..366672ca 100644 --- a/src-tauri/src/search/mod.rs +++ b/src-tauri/src/search/mod.rs @@ -52,7 +52,7 @@ pub async fn query_coco_fusion( timeout(timeout_duration, async { query_source_clone.search(query).await }) - .await + .await })); } diff --git a/src/components/Search/DocumentList.tsx b/src/components/Search/DocumentList.tsx index 8e50604a..5264a251 100644 --- a/src/components/Search/DocumentList.tsx +++ b/src/components/Search/DocumentList.tsx @@ -35,7 +35,9 @@ export const DocumentList: React.FC = ({ const { t } = useTranslation(); const sourceData = useSearchStore((state) => state.sourceData); const isTauri = useAppStore((state) => state.isTauri); - const queryTimeout = useConnectStore((state) => state.querySourceTimeout); + const querySourceTimeout = useConnectStore((state) => { + return state.querySourceTimeout; + }); const [selectedItem, setSelectedItem] = useState(null); const [total, setTotal] = useState(0); @@ -43,6 +45,11 @@ export const DocumentList: React.FC = ({ const itemRefs = useRef<(HTMLDivElement | null)[]>([]); const [isKeyboardMode, setIsKeyboardMode] = useState(false); + const querySourceTimeoutRef = useRef(querySourceTimeout); + useEffect(() => { + querySourceTimeoutRef.current = querySourceTimeout; + }, [querySourceTimeout]); + const { data, loading } = useInfiniteScroll( async (d) => { const from = d?.list?.length || 0; @@ -65,7 +72,7 @@ export const DocumentList: React.FC = ({ from: from, size: PAGE_SIZE, queryStrings: queryStrings, - queryTimeout, + queryTimeout: querySourceTimeoutRef.current, }); } else { let url = `/query/_search?query=${queryStrings.query}&datasource=${queryStrings.datasource}&from=${from}&size=${PAGE_SIZE}`; diff --git a/src/components/Search/Search.tsx b/src/components/Search/Search.tsx index c1ac66d6..73ed6b0e 100644 --- a/src/components/Search/Search.tsx +++ b/src/components/Search/Search.tsx @@ -45,7 +45,9 @@ function Search({ setWindowAlwaysOnTop, }: SearchProps) { const sourceData = useSearchStore((state) => state.sourceData); - const queryTimeout = useConnectStore((state) => state.querySourceTimeout); + const querySourceTimeout = useConnectStore((state) => { + return state.querySourceTimeout; + }); const [IsError, setIsError] = useState([]); const [suggests, setSuggests] = useState([]); @@ -54,6 +56,11 @@ function Search({ const mainWindowRef = useRef(null); + const querySourceTimeoutRef = useRef(querySourceTimeout); + useEffect(() => { + querySourceTimeoutRef.current = querySourceTimeout; + }, [querySourceTimeout]); + const getSuggest = useCallback( async (searchInput: string) => { if (!searchInput) return; @@ -65,7 +72,7 @@ function Search({ from: 0, size: 10, queryStrings: { query: searchInput }, - queryTimeout: queryTimeout, + queryTimeout: querySourceTimeoutRef.current, }); if (response && typeof response === "object" && "failed" in response) { const failedResult = response as any; diff --git a/src/components/SearchChat/index.tsx b/src/components/SearchChat/index.tsx index cc4f5d35..13e8874e 100644 --- a/src/components/SearchChat/index.tsx +++ b/src/components/SearchChat/index.tsx @@ -110,25 +110,23 @@ function SearchChat({ }); useEffect(() => { - let mounted = true; - const init = async () => { - if (!mounted) return; await initializeListeners(); await initializeListeners_auth(); await platformAdapter.invokeBackend("get_app_search_source"); - if (theme && mounted) { - setTheme(theme); - } + + platformAdapter.emitEvent("search-source-loaded"); }; init(); - - return () => { - mounted = false; - }; }, []); + useEffect(() => { + if (!theme) return; + + setTheme(theme); + }, [theme]); + const chatAIRef = useRef(null); const changeMode = useCallback(async (value: boolean) => { diff --git a/src/components/Settings/Extensions/components/Accordion/index.tsx b/src/components/Settings/Extensions/components/Accordion/index.tsx index 1ef77a30..3cf45fa1 100644 --- a/src/components/Settings/Extensions/components/Accordion/index.tsx +++ b/src/components/Settings/Extensions/components/Accordion/index.tsx @@ -3,6 +3,7 @@ import { ChevronRight } from "lucide-react"; import clsx from "clsx"; import SettingsToggle from "@/components/Settings/SettingsToggle"; import { ExtensionsContext, Plugin } from "../.."; +import platformAdapter from "@/utils/platformAdapter"; interface AccordionProps extends Plugin {} @@ -14,11 +15,10 @@ const Accordion: FC = (props) => { type = "Extension", alias = "-", hotKey = "-", - enabled = true, content, } = props; - const { activeId, setActiveId } = useContext(ExtensionsContext); - + const { activeId, setActiveId, disabledExtensions, setDisabledExtensions } = + useContext(ExtensionsContext); const [expand, setExpand] = useState(false); return ( @@ -56,12 +56,37 @@ const Accordion: FC = (props) => {
{type}
{alias}
{hotKey}
-
+
{ + event.stopPropagation(); + }} + > {}} + onChange={(value) => { + console.log("value", value); + + if (value) { + setDisabledExtensions( + disabledExtensions.filter((extensionId) => { + return extensionId !== id; + }) + ); + + platformAdapter.invokeBackend("enable_local_query_source", { + querySourceId: id, + }); + } else { + setDisabledExtensions(disabledExtensions.concat(id)); + + platformAdapter.invokeBackend("disable_local_query_source", { + querySourceId: id, + }); + } + }} />
diff --git a/src/components/Settings/Extensions/components/Content/Applications/index.tsx b/src/components/Settings/Extensions/components/Content/Applications/index.tsx index f967f8f2..3baa175a 100644 --- a/src/components/Settings/Extensions/components/Content/Applications/index.tsx +++ b/src/components/Settings/Extensions/components/Content/Applications/index.tsx @@ -1,36 +1,102 @@ import SettingsToggle from "@/components/Settings/SettingsToggle"; -import { useApplicationsStore } from "@/stores/applicationsStore"; +import { Application, useApplicationsStore } from "@/stores/applicationsStore"; import platformAdapter from "@/utils/platformAdapter"; import { useContext } from "react"; import { ExtensionsContext } from "../../.."; import clsx from "clsx"; import { useTranslation } from "react-i18next"; +import { useDebounceFn } from "ahooks"; +import SettingsInput from "@/components/Settings/SettingsInput"; +import Shortcut from "../../Shortcut"; const Applications = () => { const { t } = useTranslation(); const { activeId, setActiveId } = useContext(ExtensionsContext); const allApps = useApplicationsStore((state) => state.allApps); - const disabledApps = useApplicationsStore((state) => state.disabledApps); - const setDisabledApps = useApplicationsStore((state) => { - return state.setDisabledApps; - }); + const setAllApps = useApplicationsStore((state) => state.setAllApps); + + const handleDisable = (app: Application) => { + const { path, isDisabled } = app; + + const nextApps = allApps.map((item) => { + if (item.path !== path) return item; + + return { ...item, isDisabled: !isDisabled }; + }); + setAllApps(nextApps); + + if (isDisabled) { + platformAdapter.invokeBackend("enable_app_search", { + appPath: path, + }); + } else { + platformAdapter.invokeBackend("disable_app_search", { + appPath: path, + }); + } + }; + + const { run: handleAlias } = useDebounceFn( + (app: Application, alias: string) => { + const { path } = app; + + platformAdapter.invokeBackend("set_app_alias", { + appPath: path, + alias, + }); + + const nextApps = allApps.map((item) => { + if (item.path !== path) return item; + + return { ...item, alias }; + }); + + setAllApps(nextApps); + } + ); + + const handleHotkey = (app: Application, hotkey: string) => { + const { path } = app; + + if (hotkey) { + platformAdapter.invokeBackend("register_app_hotkey", { + appPath: path, + hotkey, + }); + } else { + platformAdapter.invokeBackend("unregister_app_hotkey", { + appPath: path, + }); + } + + const nextApps = allApps.map((item) => { + if (item.path !== path) return item; + + return { ...item, hotkey }; + }); + + setAllApps(nextApps); + }; return allApps.map((app) => { - const { name, icon } = app; + const { name, path, iconPath, isDisabled, alias, hotkey } = app; return (
{ - setActiveId(name); + setActiveId(path); }} >
- + {name}
@@ -39,24 +105,43 @@ const Applications = () => {
{t("settings.extensions.application.title")}
-
- {t("settings.extensions.application.hits.addAlias")} +
{ + event.stopPropagation(); + }} + > + { + handleAlias(app, event.target.value); + }} + />
-
- {t("settings.extensions.application.hits.recordHotkey")} +
{ + event.stopPropagation(); + }} + > + { + handleHotkey(app, value); + }} + />
{ - if (disabledApps.includes(name)) { - setDisabledApps(disabledApps.filter((app) => app !== name)); - } else { - setDisabledApps([...disabledApps, name]); - } - }} + onChange={() => handleDisable(app)} />
diff --git a/src/components/Settings/Extensions/components/Details/Application/index.tsx b/src/components/Settings/Extensions/components/Details/Application/index.tsx index d67b02e1..550fef4d 100644 --- a/src/components/Settings/Extensions/components/Details/Application/index.tsx +++ b/src/components/Settings/Extensions/components/Details/Application/index.tsx @@ -1,47 +1,66 @@ -import { FC } from "react"; -import { Application } from "@/stores/applicationsStore"; +import { useContext, useMemo, useState } from "react"; +import { ApplicationMetadata } from "@/stores/applicationsStore"; import { filesize } from "filesize"; import dayjs from "dayjs"; import { useTranslation } from "react-i18next"; +import { useAsyncEffect } from "ahooks"; +import platformAdapter from "@/utils/platformAdapter"; +import { ExtensionsContext } from "../../.."; -interface AppProps { - current: Application; -} - -const App: FC = (props) => { - const { name, where, size, created, modified, lastOpened } = props.current; +const App = () => { const { t } = useTranslation(); + const { activeId } = useContext(ExtensionsContext); - const metadata = [ - { - label: t("settings.extensions.application.details.name"), - value: name, - }, - { - label: t("settings.extensions.application.details.where"), - value: where, - }, - { - label: t("settings.extensions.application.details.type"), - value: t("settings.extensions.application.details.typeValue"), - }, - { - label: t("settings.extensions.application.details.size"), - value: filesize(size, { standard: "jedec", spacer: "" }), - }, - { - label: t("settings.extensions.application.details.created"), - value: dayjs(created).format("YYYY/MM/DD HH:mm:ss"), - }, - { - label: t("settings.extensions.application.details.modified"), - value: dayjs(modified).format("YYYY/MM/DD HH:mm:ss"), - }, - { - label: t("settings.extensions.application.details.lastOpened"), - value: dayjs(lastOpened).format("YYYY/MM/DD HH:mm:ss"), - }, - ]; + const [appMetadata, setAppMetadata] = useState(); + + useAsyncEffect(async () => { + const appMetadata = + await platformAdapter.invokeBackend( + "get_app_metadata", + { + appPath: activeId, + } + ); + + setAppMetadata(appMetadata); + }, [activeId]); + + const metadata = useMemo(() => { + if (!appMetadata) return []; + + const { name, where, size, created, modified, lastOpened } = appMetadata; + + return [ + { + label: t("settings.extensions.application.details.name"), + value: name, + }, + { + label: t("settings.extensions.application.details.where"), + value: where, + }, + { + label: t("settings.extensions.application.details.type"), + value: t("settings.extensions.application.details.typeValue"), + }, + { + label: t("settings.extensions.application.details.size"), + value: filesize(size, { standard: "jedec", spacer: "" }), + }, + { + label: t("settings.extensions.application.details.created"), + value: dayjs(created).format("YYYY/MM/DD HH:mm:ss"), + }, + { + label: t("settings.extensions.application.details.modified"), + value: dayjs(modified).format("YYYY/MM/DD HH:mm:ss"), + }, + { + label: t("settings.extensions.application.details.lastOpened"), + value: dayjs(lastOpened).format("YYYY/MM/DD HH:mm:ss"), + }, + ]; + }, [appMetadata]); return (
    diff --git a/src/components/Settings/Extensions/components/Details/Applications/index.tsx b/src/components/Settings/Extensions/components/Details/Applications/index.tsx index 0fcd4169..aa5cb4ae 100644 --- a/src/components/Settings/Extensions/components/Details/Applications/index.tsx +++ b/src/components/Settings/Extensions/components/Details/Applications/index.tsx @@ -1,7 +1,8 @@ import { useApplicationsStore } from "@/stores/applicationsStore"; +import { useAppStore } from "@/stores/appStore"; import platformAdapter from "@/utils/platformAdapter"; import { Button } from "@headlessui/react"; -import { castArray, union } from "lodash-es"; +import { castArray } from "lodash-es"; import { Folder, SquareArrowOutUpRight, X } from "lucide-react"; import { useTranslation } from "react-i18next"; @@ -9,8 +10,9 @@ const Applications = () => { const { t } = useTranslation(); const searchPaths = useApplicationsStore((state) => state.searchPaths); const setSearchPaths = useApplicationsStore((state) => state.setSearchPaths); + const addError = useAppStore((state) => state.addError); - const selectDirectory = async () => { + const handleAdd = async () => { const selected = await platformAdapter.openFileDialog({ directory: true, multiple: true, @@ -18,7 +20,49 @@ const Applications = () => { if (!selected) return; - setSearchPaths(union(searchPaths, castArray(selected))); + const selectedPaths = castArray(selected).filter((selectedPath) => { + if (searchPaths.includes(selectedPath)) { + addError( + t("settings.extensions.application.hits.pathDuplication", { + replace: [selectedPath], + }) + ); + + return false; + } + + const isChildPath = searchPaths.some((item) => { + return selectedPath.startsWith(item); + }); + + if (isChildPath) { + addError( + t("settings.extensions.application.hits.pathIncluded", { + replace: [selectedPath], + }) + ); + + return false; + } + + return true; + }); + + setSearchPaths(searchPaths.concat(selectedPaths)); + + for await (const path of selectedPaths) { + await platformAdapter.invokeBackend("add_app_search_path", { + searchPath: path, + }); + } + }; + + const handleRemove = (path: string) => { + setSearchPaths(searchPaths.filter((item) => item !== path)); + + platformAdapter.invokeBackend("remove_app_search_path", { + searchPath: path, + }); }; return ( @@ -35,7 +79,7 @@ const Applications = () => { @@ -60,9 +104,7 @@ const Applications = () => { { - setSearchPaths(searchPaths.filter((path) => path !== item)); - }} + onClick={() => handleRemove(item)} />
diff --git a/src/components/Settings/Extensions/components/Shortcut/index.tsx b/src/components/Settings/Extensions/components/Shortcut/index.tsx new file mode 100644 index 00000000..ba4f9290 --- /dev/null +++ b/src/components/Settings/Extensions/components/Shortcut/index.tsx @@ -0,0 +1,143 @@ +import { find, isEmpty, map, remove, some, split } from "lodash-es"; +import { useRef, type FC, type KeyboardEvent, type MouseEvent } from "react"; +import { type Key, keys, modifierKeys, standardKeys } from "./keyboard"; +import { CircleX } from "lucide-react"; +import { useFocusWithin, useHover, useReactive } from "ahooks"; +import clsx from "clsx"; + +interface ShortcutProps { + value?: string; + placeholder?: string; + isSystem?: boolean; + onChange?: (value: string) => void; +} + +interface State { + value: Key[]; +} + +const Shortcut: FC = (props) => { + const { value = "", placeholder, isSystem = true, onChange } = props; + + const separator = isSystem ? "+" : "."; + const keyFiled = isSystem ? "tauriKey" : "hookKey"; + + const parseValue = () => { + if (!value) return []; + + return split(value, separator).map((key) => { + return find(keys, { [keyFiled]: key })!; + }); + }; + + const state = useReactive({ + value: parseValue(), + }); + + const containerRef = useRef(null); + + const isHovering = useHover(containerRef); + + const isFocusing = useFocusWithin(containerRef, { + onFocus: () => { + state.value = []; + }, + onBlur: () => { + if (!isValidShortcut()) { + state.value = parseValue(); + } + + handleChange(); + }, + }); + + const isValidShortcut = () => { + if (state.value?.[0]?.eventKey?.startsWith("F")) { + return true; + } + + const hasModifierKey = some(state.value, ({ eventKey }) => { + return some(modifierKeys, { eventKey }); + }); + const hasStandardKey = some(state.value, ({ eventKey }) => { + return some(standardKeys, { eventKey }); + }); + + return hasModifierKey && hasStandardKey; + }; + + const getEventKey = (event: KeyboardEvent) => { + let { key, code } = event; + + key = key.replace("Meta", "Command"); + + const isModifierKey = some(modifierKeys, { eventKey: key }); + + return isModifierKey ? key : code; + }; + + const handleChange = () => { + const nextValue = map(state.value, keyFiled).join(separator); + + onChange?.(nextValue); + }; + + const handleKeyDown = (event: KeyboardEvent) => { + const eventKey = getEventKey(event); + + const matched = find(keys, { eventKey }); + const isInvalid = !matched; + const isDuplicate = some(state.value, { eventKey }); + + if (isInvalid || isDuplicate) return; + + state.value.push(matched); + + if (isValidShortcut()) { + containerRef.current?.blur(); + } + }; + + const handleKeyUp = (event: KeyboardEvent) => { + remove(state.value, { eventKey: getEventKey(event) }); + }; + + const handleClear = (event: MouseEvent) => { + event.preventDefault(); + + state.value = []; + + handleChange(); + }; + + return ( +
+ {isEmpty(state.value) ? ( +
{placeholder}
+ ) : ( +
+ {map(state.value, "symbol").join(" ")} +
+ )} + + +
+ ); +}; + +export default Shortcut; diff --git a/src/components/Settings/Extensions/components/Shortcut/keyboard.ts b/src/components/Settings/Extensions/components/Shortcut/keyboard.ts new file mode 100644 index 00000000..b5982e7e --- /dev/null +++ b/src/components/Settings/Extensions/components/Shortcut/keyboard.ts @@ -0,0 +1,314 @@ +import { isMac } from "@/utils/platform"; +import { defaults } from "lodash-es"; + +export interface Key { + eventKey: string; + hookKey?: string; + tauriKey?: string; + symbol?: string; +} + +export const modifierKeys: Key[] = [ + { + eventKey: "Shift", + symbol: isMac ? "⇧" : "Shift", + }, + { + eventKey: "Control", + hookKey: "ctrl", + symbol: isMac ? "⌃" : "Ctrl", + }, + { + eventKey: "Alt", + symbol: isMac ? "⌥" : "Alt", + }, + { + eventKey: "Command", + hookKey: "meta", + symbol: isMac ? "⌘" : "Super", + }, +].map((item) => { + const { eventKey } = item; + + defaults>(item, { + hookKey: eventKey.toLowerCase(), + tauriKey: eventKey, + }); + + return item; +}); + +export const standardKeys: Key[] = [ + // 第一排 + { + eventKey: "Escape", + hookKey: "esc", + symbol: isMac ? "⎋" : "Esc", + }, + { + eventKey: "F1", + }, + { + eventKey: "F2", + }, + { + eventKey: "F3", + }, + { + eventKey: "F4", + }, + { + eventKey: "F5", + }, + { + eventKey: "F6", + }, + { + eventKey: "F7", + }, + { + eventKey: "F8", + }, + { + eventKey: "F9", + }, + { + eventKey: "F10", + }, + { + eventKey: "F11", + }, + { + eventKey: "F12", + }, // 第二排 + { + eventKey: "Backquote", + hookKey: "graveaccent", + symbol: "`", + }, + { + eventKey: "Digit1", + }, + { + eventKey: "Digit2", + }, + { + eventKey: "Digit3", + }, + { + eventKey: "Digit4", + }, + { + eventKey: "Digit5", + }, + { + eventKey: "Digit6", + }, + { + eventKey: "Digit7", + }, + { + eventKey: "Digit8", + }, + { + eventKey: "Digit9", + }, + { + eventKey: "Digit0", + }, + { + eventKey: "Minus", + hookKey: "dash", + tauriKey: "-", + symbol: "-", + }, + { + eventKey: "Equal", + hookKey: "equalsign", + tauriKey: "=", + symbol: "=", + }, + { + eventKey: "Backspace", + symbol: isMac ? "⌫" : void 0, + }, + // 第三排 + { + eventKey: "Tab", + symbol: isMac ? "⇥" : void 0, + }, + { + eventKey: "KeyQ", + }, + { + eventKey: "KeyW", + }, + { + eventKey: "KeyE", + }, + { + eventKey: "KeyR", + }, + { + eventKey: "KeyT", + }, + { + eventKey: "KeyY", + }, + { + eventKey: "KeyU", + }, + { + eventKey: "KeyI", + }, + { + eventKey: "KeyO", + }, + { + eventKey: "KeyP", + }, + { + eventKey: "BracketLeft", + hookKey: "openbracket", + symbol: "[", + }, + { + eventKey: "BracketRight", + hookKey: "closebracket", + symbol: "]", + }, + { + eventKey: "Backslash", + symbol: "\\", + }, + // 第四排 + { + eventKey: "KeyA", + }, + { + eventKey: "KeyS", + }, + { + eventKey: "KeyD", + }, + { + eventKey: "KeyF", + }, + { + eventKey: "KeyG", + }, + { + eventKey: "KeyH", + }, + { + eventKey: "KeyJ", + }, + { + eventKey: "KeyK", + }, + { + eventKey: "KeyL", + }, + { + eventKey: "Semicolon", + symbol: ";", + }, + { + eventKey: "Quote", + hookKey: "singlequote", + symbol: "'", + }, + { + eventKey: "Enter", + symbol: isMac ? "↩︎" : void 0, + }, + // 第五排 + { + eventKey: "KeyZ", + }, + { + eventKey: "KeyX", + }, + { + eventKey: "KeyC", + }, + { + eventKey: "KeyV", + }, + { + eventKey: "KeyB", + }, + { + eventKey: "KeyN", + }, + { + eventKey: "KeyM", + }, + { + eventKey: "Comma", + symbol: ",", + }, + { + eventKey: "Period", + symbol: ".", + }, + { + eventKey: "Slash", + hookKey: "forwardslash", + symbol: "/", + }, + // 第六排 + { + eventKey: "Space", + symbol: isMac ? "␣" : void 0, + }, + // 方向键 + { + eventKey: "ArrowUp", + hookKey: "uparrow", + symbol: "↑", + }, + { + eventKey: "ArrowDown", + hookKey: "downarrow", + symbol: "↓", + }, + { + eventKey: "ArrowLeft", + hookKey: "leftarrow", + symbol: "←", + }, + { + eventKey: "ArrowRight", + hookKey: "rightarrow", + symbol: "→", + }, +].map((item) => { + const { eventKey } = item; + + defaults>(item, { + hookKey: eventKey.toLowerCase(), + symbol: eventKey, + tauriKey: eventKey, + }); + + if (eventKey.startsWith("Digit") || eventKey.startsWith("Key")) { + item.tauriKey = item.symbol = eventKey.slice(-1); + + item.hookKey = item.tauriKey.toLowerCase(); + } + + return item; +}); + +export const keys = modifierKeys.concat(standardKeys); + +export const getKeySymbol = (key: string) => { + const fields = ["tauriKey", "hookKey"] as const; + + const matched = keys.find((entry) => { + return fields.some((field) => entry[field] === key); + }); + + return matched?.symbol ?? key; +}; diff --git a/src/components/Settings/Extensions/index.tsx b/src/components/Settings/Extensions/index.tsx index 980d9c3d..2176f063 100644 --- a/src/components/Settings/Extensions/index.tsx +++ b/src/components/Settings/Extensions/index.tsx @@ -5,7 +5,7 @@ import { useMemo, useState, } from "react"; -import { Folder } from "lucide-react"; +import { Calculator, Folder } from "lucide-react"; import { noop } from "lodash-es"; import Accordion from "./components/Accordion"; @@ -14,6 +14,9 @@ import ApplicationsDetail from "./components/Details/Applications"; import { useApplicationsStore } from "@/stores/applicationsStore"; import Application from "./components/Details/Application"; import { useTranslation } from "react-i18next"; +import { useMount } from "ahooks"; +import platformAdapter from "@/utils/platformAdapter"; +import { useExtensionStore } from "@/stores/extension"; export interface Plugin { id: string; @@ -30,14 +33,34 @@ export interface Plugin { interface ExtensionsContextType { activeId?: string; setActiveId: (id: string) => void; + disabledExtensions: string[]; + setDisabledExtensions: (ids: string[]) => void; } export const ExtensionsContext = createContext({ setActiveId: noop, + disabledExtensions: [], + setDisabledExtensions: noop, }); const Extensions = () => { const { t } = useTranslation(); + const disabledExtensions = useExtensionStore((state) => { + return state.disabledExtensions; + }); + const setDisabledExtensions = useExtensionStore((state) => { + return state.setDisabledExtensions; + }); + + useMount(async () => { + const disabledExtensions = await platformAdapter.invokeBackend( + "get_disabled_local_query_sources" + ); + + console.log("disabledExtensions", disabledExtensions); + + setDisabledExtensions(disabledExtensions); + }); const allApps = useApplicationsStore((state) => { return state.allApps; @@ -45,13 +68,18 @@ const Extensions = () => { const presetPlugins: Plugin[] = [ { - id: "1", + id: "Applications", icon: , title: t("settings.extensions.application.title"), type: "Group", content: , detail: , }, + { + id: "Calculator", + icon: , + title: t("settings.extensions.calculator.title"), + }, // { // id: "2", // icon: , @@ -69,7 +97,7 @@ const Extensions = () => { const currentApp = useMemo(() => { return allApps.find((app) => { - return app.name === activeId; + return app.path === activeId; }); }, [activeId, allApps]); @@ -78,6 +106,8 @@ const Extensions = () => { value={{ activeId, setActiveId, + disabledExtensions, + setDisabledExtensions, }} >
@@ -123,7 +153,7 @@ const Extensions = () => { {currentPlugin?.detail} - {currentApp && } + {currentApp && }
diff --git a/src/components/UpdateApp/index.tsx b/src/components/UpdateApp/index.tsx index 967d03a5..d8771eb5 100644 --- a/src/components/UpdateApp/index.tsx +++ b/src/components/UpdateApp/index.tsx @@ -45,7 +45,7 @@ const UpdateApp = ({ checkUpdate, relaunchApp }: UpdateAppProps) => { const checkUpdateStatus = useCallback(async () => { const update = await checkUpdate(); - if (update?.available) { + if (update) { setUpdateInfo(update); if (skipVersion === update.version) return; diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 9f8913f8..609fd81f 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -200,7 +200,9 @@ "title": "Applications", "hits": { "addAlias": "Add Alias", - "recordHotkey": "Record Hotkey" + "recordHotkey": "Record Hotkey", + "pathDuplication": "Path \"{{0}}\" is already in search scope.", + "pathIncluded": "Path \"{{0}}\" is already covered by another search directory." }, "button": { "addDirectories": "Add Directories" @@ -217,6 +219,9 @@ "modified": "Modified", "lastOpened": "Last Opened" } + }, + "calculator": { + "title": "Calculator" } } }, diff --git a/src/locales/zh/translation.json b/src/locales/zh/translation.json index f68384ea..bd0c808d 100644 --- a/src/locales/zh/translation.json +++ b/src/locales/zh/translation.json @@ -200,7 +200,9 @@ "title": "应用程序", "hits": { "addAlias": "添加别名", - "recordHotkey": "录制热键" + "recordHotkey": "录制热键", + "pathDuplication": "路径 \"{{0}}\" 已存在于搜索范围中。", + "pathIncluded": "路径 \"{{0}}\" 已被其他搜索目录包含。" }, "button": { "addDirectories": "添加目录" @@ -217,6 +219,9 @@ "modified": "修改时间", "lastOpened": "上次打开时间" } + }, + "calculator": { + "title": "计算器" } } }, diff --git a/src/main.tsx b/src/main.tsx index cb74d8e7..32911ce5 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,4 +1,3 @@ -import React from "react"; import ReactDOM from "react-dom/client"; import { RouterProvider } from "react-router-dom"; @@ -8,7 +7,5 @@ import "./i18n"; import "./main.css"; ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( - - - + ); diff --git a/src/pages/settings/index.tsx b/src/pages/settings/index.tsx index 0e9a17a1..2ce23558 100644 --- a/src/pages/settings/index.tsx +++ b/src/pages/settings/index.tsx @@ -12,8 +12,7 @@ import Footer from "@/components/Common/UI/SettingsFooter"; import { useTray } from "@/hooks/useTray"; import Advanced from "@/components/Settings/Advanced"; import Extensions from "@/components/Settings/Extensions"; -import { useAsyncEffect, useMount } from "ahooks"; -import { useApplicationsStore } from "@/stores/applicationsStore"; +import { Application, useApplicationsStore } from "@/stores/applicationsStore"; import platformAdapter from "@/utils/platformAdapter"; const tabIndexMap: { [key: string]: number } = { @@ -26,9 +25,9 @@ const tabIndexMap: { [key: string]: number } = { function SettingsPage() { const { t } = useTranslation(); - const searchPaths = useApplicationsStore((state) => state.searchPaths); const setSearchPaths = useApplicationsStore((state) => state.setSearchPaths); const setAllApps = useApplicationsStore((state) => state.setAllApps); + const allApps = useApplicationsStore((state) => state.allApps); useTray(); @@ -60,30 +59,33 @@ function SettingsPage() { document.body.style.overflow = defaultIndex !== 1 ? "auto" : "hidden"; }, [defaultIndex]); - useMount(async () => { - if (searchPaths.length > 0) return; + useEffect(() => { + platformAdapter.listenEvent("search-source-loaded", async () => { + const apps = await platformAdapter.invokeBackend( + "get_app_list" + ); - const paths = await platformAdapter.invokeBackend( - "get_default_search_paths" - ); + const sortedApps = apps.sort((a, b) => { + return a.name.localeCompare(b.name, undefined, { sensitivity: "base" }); + }); - setSearchPaths(paths); - }); + setAllApps(sortedApps); - useAsyncEffect(async () => { - if (searchPaths.length === 0) { - return setAllApps([]); - } + const paths = await platformAdapter.invokeBackend( + "get_app_search_path" + ); - const apps = await platformAdapter.invokeBackend( - "list_app_with_metadata_in", - { - searchPath: searchPaths, - } - ); + setSearchPaths(paths); + }); - setAllApps(apps); - }, [searchPaths]); + platformAdapter.listenEvent("new-apps", ({ payload }) => { + const nextApps = allApps.concat(payload).sort((a, b) => { + return a.name.localeCompare(b.name, undefined, { sensitivity: "base" }); + }); + + setAllApps(nextApps); + }); + }, []); return (
diff --git a/src/stores/appStore.ts b/src/stores/appStore.ts index b9837406..30ee2cf5 100644 --- a/src/stores/appStore.ts +++ b/src/stores/appStore.ts @@ -56,7 +56,7 @@ export type IAppStore = { setLanguage: (language: string) => void; isPinned: boolean; setIsPinned: (isPinned: boolean) => void; - initializeListeners: () => void; + initializeListeners: () => Promise<() => void>; showCocoShortcuts: string[]; setShowCocoShortcuts: (showCocoShortcuts: string[]) => void; @@ -130,10 +130,14 @@ export const useAppStore = create()( isPinned: false, setIsPinned: (isPinned: boolean) => set({ isPinned }), initializeListeners: () => { - platformAdapter.listenEvent(ENDPOINT_CHANGE_EVENT, (event: any) => { - const { endpoint, endpoint_http, endpoint_websocket } = event.payload; - set({ endpoint, endpoint_http, endpoint_websocket }); - }); + return platformAdapter.listenEvent( + ENDPOINT_CHANGE_EVENT, + (event: any) => { + const { endpoint, endpoint_http, endpoint_websocket } = + event.payload; + set({ endpoint, endpoint_http, endpoint_websocket }); + } + ); }, showCocoShortcuts: [], setShowCocoShortcuts: (showCocoShortcuts: string[]) => { diff --git a/src/stores/applicationsStore.ts b/src/stores/applicationsStore.ts index 7c113fdb..c3acf167 100644 --- a/src/stores/applicationsStore.ts +++ b/src/stores/applicationsStore.ts @@ -2,10 +2,19 @@ import { create } from "zustand"; import { persist } from "zustand/middleware"; export interface Application { + path: string; name: string; + iconPath: string; + alias: string; + hotkey: string; + isDisabled: boolean; +} + +export interface ApplicationMetadata { + name: string; + where: string; size: number; icon: string; - where: string; created: number; modified: number; lastOpened: number; @@ -16,8 +25,6 @@ export type IUpdateStore = { setAllApps: (appApps: Application[]) => void; searchPaths: string[]; setSearchPaths: (searchPaths: string[]) => void; - disabledApps: string[]; - setDisabledApps: (disabledApps: string[]) => void; }; export const useApplicationsStore = create()( @@ -31,17 +38,10 @@ export const useApplicationsStore = create()( setSearchPaths: (searchPaths: string[]) => { return set({ searchPaths }); }, - disabledApps: [], - setDisabledApps: (disabledApps: string[]) => { - return set({ disabledApps }); - }, }), { name: "applications-store", - partialize: (state) => ({ - searchPaths: state.searchPaths, - disabledApps: state.disabledApps, - }), + partialize: () => ({}), } ) ); diff --git a/src/stores/authStore.ts b/src/stores/authStore.ts index c0424d89..b38d9c82 100644 --- a/src/stores/authStore.ts +++ b/src/stores/authStore.ts @@ -1,11 +1,11 @@ import { create } from "zustand"; import { persist } from "zustand/middleware"; -import { produce } from 'immer' +import { produce } from "immer"; import platformAdapter from "@/utils/platformAdapter"; -const AUTH_CHANGE_EVENT = 'auth-changed'; -const USERINFO_CHANGE_EVENT = 'userInfo-changed'; +const AUTH_CHANGE_EVENT = "auth-changed"; +const USERINFO_CHANGE_EVENT = "userInfo-changed"; export type Plan = { upgraded: boolean; @@ -33,7 +33,7 @@ export type IAuthStore = { userInfo: userInfoMapProp; setAuth: (auth: AuthProp | undefined, key: string) => void; resetAuth: (key: string) => void; - initializeListeners: () => void; + initializeListeners: () => Promise<() => void>; }; export const useAuthStore = create()( @@ -44,59 +44,62 @@ export const useAuthStore = create()( setAuth: async (auth, key) => { set( produce((draft) => { - draft.auth[key] = auth + draft.auth[key] = auth; }) ); await platformAdapter.emitEvent(AUTH_CHANGE_EVENT, { auth: { - [key]: auth - } + [key]: auth, + }, }); }, resetAuth: async (key: string) => { set( produce((draft) => { - draft.auth[key] = undefined + draft.auth[key] = undefined; }) ); await platformAdapter.emitEvent(AUTH_CHANGE_EVENT, { auth: { - [key]: undefined - } + [key]: undefined, + }, }); }, setUserInfo: async (userInfo: any, key: string) => { set( produce((draft) => { - draft.userInfo[key] = userInfo + draft.userInfo[key] = userInfo; }) ); await platformAdapter.emitEvent(USERINFO_CHANGE_EVENT, { userInfo: { - [key]: userInfo - } + [key]: userInfo, + }, }); }, - initializeListeners: () => { - platformAdapter.listenEvent(AUTH_CHANGE_EVENT, (event: any) => { + initializeListeners: async () => { + await platformAdapter.listenEvent(AUTH_CHANGE_EVENT, (event: any) => { const { auth } = event.payload; set({ auth }); }); - platformAdapter.listenEvent(USERINFO_CHANGE_EVENT, (event: any) => { - const { userInfo } = event.payload; - set({ userInfo }); - }); + return platformAdapter.listenEvent( + USERINFO_CHANGE_EVENT, + (event: any) => { + const { userInfo } = event.payload; + set({ userInfo }); + } + ); }, }), { name: "auth-store", partialize: (state) => ({ auth: state.auth, - userInfo: state.userInfo + userInfo: state.userInfo, }), } ) diff --git a/src/stores/extension.ts b/src/stores/extension.ts new file mode 100644 index 00000000..e5e235d2 --- /dev/null +++ b/src/stores/extension.ts @@ -0,0 +1,24 @@ +import { create } from "zustand"; +import { persist, subscribeWithSelector } from "zustand/middleware"; + +export type IExtensionStore = { + disabledExtensions: string[]; + setDisabledExtensions: (disabledExtensions: string[]) => void; +}; + +export const useExtensionStore = create()( + subscribeWithSelector( + persist( + (set) => ({ + disabledExtensions: [], + setDisabledExtensions: (disabledExtensions) => { + return set({ disabledExtensions }); + }, + }), + { + name: "extension-store", + partialize: () => ({}), + } + ) + ) +); diff --git a/src/types/platform.ts b/src/types/platform.ts index cfd2210c..2d684184 100644 --- a/src/types/platform.ts +++ b/src/types/platform.ts @@ -1,4 +1,5 @@ import { IAppearanceStore } from "@/stores/appearance"; +import { Application } from "@/stores/applicationsStore"; import { IConnectStore } from "@/stores/connectStore"; import { IShortcutsStore } from "@/stores/shortcutsStore"; import { IStartupStore } from "@/stores/startupStore"; @@ -40,6 +41,8 @@ export interface EventPayloads { "change-shortcuts-store": IShortcutsStore; "change-connect-store": IConnectStore; "change-appearance-store": IAppearanceStore; + "search-source-loaded": any; + "new-apps": Application; } // Window operation interface