diff --git a/.github/workflows/fmt.yml b/.github/workflows/fmt.yml index 3320cba1..5ec2ca9a 100644 --- a/.github/workflows/fmt.yml +++ b/.github/workflows/fmt.yml @@ -10,28 +10,67 @@ on: jobs: rustfmt: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 + - name: Check Rust changes + id: check_rust + uses: dorny/paths-filter@v3 + with: + filters: | + rust: + - 'src-tauri/**' + - '**/*.rs' + + - name: Skip if no Rust changes + if: steps.check_rust.outputs.rust != 'true' + run: echo "No Rust changes, skipping rustfmt." + - name: install Rust stable and rustfmt + if: steps.check_rust.outputs.rust == 'true' uses: dtolnay/rust-toolchain@stable with: components: rustfmt - name: run cargo fmt + if: steps.check_rust.outputs.rust == 'true' run: cargo fmt --manifest-path ./src-tauri/Cargo.toml --all -- --check prettier: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + + - name: Check Web changes + id: check_web + uses: dorny/paths-filter@v3 + with: + filters: | + web: + - 'src/**' + - '**/*.js' + - '**/*.ts' + - '**/*.tsx' + - '**/*.css' + - '**/*.scss' + - '**/*.json' + - '**/*.md' + - '**/*.json' + + - name: Skip if no Web changes + if: steps.check_web.outputs.web != 'true' + run: echo "No web changes, skipping prettier." + - uses: actions/setup-node@v4 + if: steps.check_web.outputs.web == 'true' with: node-version: "lts/*" - run: corepack enable + if: steps.check_web.outputs.web == 'true' - run: pnpm install --frozen-lockfile + if: steps.check_web.outputs.web == 'true' - run: pnpm format:check + if: steps.check_web.outputs.web == 'true' # taplo: # name: taplo (.toml files) diff --git a/.github/workflows/lint-clippy.yml b/.github/workflows/lint-clippy.yml index 1161faa5..6bc0bf33 100644 --- a/.github/workflows/lint-clippy.yml +++ b/.github/workflows/lint-clippy.yml @@ -19,6 +19,22 @@ jobs: runs-on: ${{ matrix.os }} steps: + - name: Check src-tauri changes + id: check_changes + uses: dorny/paths-filter@v3 + with: + filters: | + rust: + - 'src-tauri/**' + + - name: Skip if src-tauri not changed + if: steps.check_changes.outputs.rust != 'true' + run: echo "No src-tauri changes, skipping clippy lint." + + - name: Continue if src-tauri changed + if: steps.check_changes.outputs.rust == 'true' + run: echo "src-tauri changed, running clippy lint." + - name: Checkout Repository uses: actions/checkout@v4 diff --git a/UPDATELOG.md b/UPDATELOG.md index 204e1195..c8688679 100644 --- a/UPDATELOG.md +++ b/UPDATELOG.md @@ -16,6 +16,7 @@ - 改进 macos 下系统代理设置的方法 - 优化 TUN 模式可用性的判断 - 移除流媒体检测的系统级提示(使用软件内通知) +- 优化后端 i18n 资源占用 ### 🐞 修复问题 diff --git a/package.json b/package.json index f8d67a18..235a8ee2 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@mui/icons-material": "^7.3.2", "@mui/lab": "7.0.0-beta.17", "@mui/material": "^7.3.2", - "@mui/x-data-grid": "^8.11.3", + "@mui/x-data-grid": "^8.12.1", "@tauri-apps/api": "2.8.0", "@tauri-apps/plugin-clipboard-manager": "^2.3.0", "@tauri-apps/plugin-dialog": "^2.4.0", @@ -64,11 +64,11 @@ "react-dom": "19.1.1", "react-error-boundary": "6.0.0", "react-hook-form": "^7.63.0", - "react-i18next": "15.7.3", + "react-i18next": "16.0.0", "react-markdown": "10.1.0", "react-monaco-editor": "0.59.0", - "react-router-dom": "7.9.1", - "react-virtuoso": "^4.14.0", + "react-router-dom": "7.9.3", + "react-virtuoso": "^4.14.1", "swr": "^2.3.6", "types-pac": "^1.0.3", "zustand": "^5.0.8", @@ -76,15 +76,15 @@ }, "devDependencies": { "@actions/github": "^6.0.1", - "@eslint-react/eslint-plugin": "^1.53.1", + "@eslint-react/eslint-plugin": "^2.0.1", "@eslint/js": "^9.36.0", "@tauri-apps/cli": "2.8.4", "@types/js-yaml": "^4.0.9", "@types/lodash-es": "^4.17.12", - "@types/react": "19.1.13", + "@types/react": "19.1.15", "@types/react-dom": "19.1.9", "@vitejs/plugin-legacy": "^7.2.1", - "@vitejs/plugin-react": "5.0.3", + "@vitejs/plugin-react": "5.0.4", "adm-zip": "^0.5.16", "cli-color": "^2.0.4", "commander": "^14.0.1", @@ -95,7 +95,7 @@ "eslint-plugin-import-x": "^4.16.1", "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.21", + "eslint-plugin-react-refresh": "^0.4.22", "eslint-plugin-unused-imports": "^4.2.0", "glob": "^11.0.3", "globals": "^16.4.0", @@ -104,8 +104,8 @@ "meta-json-schema": "^1.19.13", "node-fetch": "^3.3.2", "prettier": "^3.6.2", - "sass": "^1.93.1", - "tar": "^7.4.4", + "sass": "^1.93.2", + "tar": "^7.5.1", "terser": "^5.44.0", "typescript": "^5.9.2", "typescript-eslint": "^8.44.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f4b9d6e..10562596 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,25 +19,25 @@ importers: version: 3.2.2(react@19.1.1) '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.13)(react@19.1.1) + version: 11.14.0(@types/react@19.1.15)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) '@juggle/resize-observer': specifier: ^3.4.0 version: 3.4.0 '@mui/icons-material': specifier: ^7.3.2 - version: 7.3.2(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) + version: 7.3.2(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) '@mui/lab': specifier: 7.0.0-beta.17 - version: 7.0.0-beta.17(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 7.0.0-beta.17(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mui/material': specifier: ^7.3.2 - version: 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mui/x-data-grid': - specifier: ^8.11.3 - version: 8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.12.1 + version: 8.12.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tauri-apps/api': specifier: 2.8.0 version: 2.8.0 @@ -111,20 +111,20 @@ importers: specifier: ^7.63.0 version: 7.63.0(react@19.1.1) react-i18next: - specifier: 15.7.3 - version: 15.7.3(i18next@25.5.2(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + specifier: 16.0.0 + version: 16.0.0(i18next@25.5.2(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) react-markdown: specifier: 10.1.0 - version: 10.1.0(@types/react@19.1.13)(react@19.1.1) + version: 10.1.0(@types/react@19.1.15)(react@19.1.1) react-monaco-editor: specifier: 0.59.0 version: 0.59.0(monaco-editor@0.53.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react-router-dom: - specifier: 7.9.1 - version: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: 7.9.3 + version: 7.9.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react-virtuoso: - specifier: ^4.14.0 - version: 4.14.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^4.14.1 + version: 4.14.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) swr: specifier: ^2.3.6 version: 2.3.6(react@19.1.1) @@ -136,14 +136,14 @@ importers: version: 1.0.3 zustand: specifier: ^5.0.8 - version: 5.0.8(@types/react@19.1.13)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) + version: 5.0.8(@types/react@19.1.15)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) devDependencies: '@actions/github': specifier: ^6.0.1 version: 6.0.1 '@eslint-react/eslint-plugin': - specifier: ^1.53.1 - version: 1.53.1(eslint@9.36.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) + specifier: ^2.0.1 + version: 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@eslint/js': specifier: ^9.36.0 version: 9.36.0 @@ -157,17 +157,17 @@ importers: specifier: ^4.17.12 version: 4.17.12 '@types/react': - specifier: 19.1.13 - version: 19.1.13 + specifier: 19.1.15 + version: 19.1.15 '@types/react-dom': specifier: 19.1.9 - version: 19.1.9(@types/react@19.1.13) + version: 19.1.9(@types/react@19.1.15) '@vitejs/plugin-legacy': specifier: ^7.2.1 - version: 7.2.1(terser@5.44.0)(vite@7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1)) + version: 7.2.1(terser@5.44.0)(vite@7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1)) '@vitejs/plugin-react': - specifier: 5.0.3 - version: 5.0.3(vite@7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1)) + specifier: 5.0.4 + version: 5.0.4(vite@7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1)) adm-zip: specifier: ^0.5.16 version: 0.5.16 @@ -199,8 +199,8 @@ importers: specifier: ^5.2.0 version: 5.2.0(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-react-refresh: - specifier: ^0.4.21 - version: 0.4.21(eslint@9.36.0(jiti@2.6.0)) + specifier: ^0.4.22 + version: 0.4.22(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-unused-imports: specifier: ^4.2.0 version: 4.2.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) @@ -226,11 +226,11 @@ importers: specifier: ^3.6.2 version: 3.6.2 sass: - specifier: ^1.93.1 - version: 1.93.1 + specifier: ^1.93.2 + version: 1.93.2 tar: - specifier: ^7.4.4 - version: 7.4.4 + specifier: ^7.5.1 + version: 7.5.1 terser: specifier: ^5.44.0 version: 5.44.0 @@ -242,13 +242,13 @@ importers: version: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) vite: specifier: ^7.1.7 - version: 7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1) + version: 7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1) vite-plugin-monaco-editor: specifier: ^1.1.0 version: 1.1.0(monaco-editor@0.53.0) vite-plugin-svgr: specifier: ^4.5.0 - version: 4.5.0(rollup@4.46.2)(typescript@5.9.2)(vite@7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1)) + version: 4.5.0(rollup@4.46.2)(typescript@5.9.2)(vite@7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1)) packages: @@ -1013,39 +1013,36 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-react/ast@1.53.1': - resolution: {integrity: sha512-qvUC99ewtriJp9quVEOvZ6+RHcsMLfVQ0OhZ4/LupZUDhjW7GiX1dxJsFaxHdJ9rLNLhQyLSPmbAToeqUrSruQ==} - engines: {node: '>=18.18.0'} + '@eslint-react/ast@2.0.1': + resolution: {integrity: sha512-YUY1QsaDAOOc4fOGHIT5uIQUg14yAbYLXPhcP1cufbbhdf3VU7eGtbw/VeFIkJIPRyIPJYV0cSHW+e8jZUyPGQ==} + engines: {node: '>=20.19.0'} - '@eslint-react/core@1.53.1': - resolution: {integrity: sha512-8prroos5/Uvvh8Tjl1HHCpq4HWD3hV9tYkm7uXgKA6kqj0jHlgRcQzuO6ZPP7feBcK3uOeug7xrq03BuG8QKCA==} - engines: {node: '>=18.18.0'} + '@eslint-react/core@2.0.1': + resolution: {integrity: sha512-KzLiClAChDiw2O+sCiDsi/I1hIfJwxnJwNXp1/EzWyZq1Qgn+M1iuesZve2j2RoJv2dz18ItpkT/Tc36hGIJwA==} + engines: {node: '>=20.19.0'} - '@eslint-react/eff@1.53.1': - resolution: {integrity: sha512-uq20lPRAmsWRjIZm+mAV/2kZsU2nDqn5IJslxGWe3Vfdw23hoyhEw3S1KKlxbftwbTvsZjKvVP0iw3bZo/NUpg==} - engines: {node: '>=18.18.0'} + '@eslint-react/eff@2.0.1': + resolution: {integrity: sha512-VnC5F/8coRS2XuI82cxREw8HeEdxnNl9Ri1flkjZIl6q2geidTb3CVmbep+1NujwEOGe+z4B+8lA/rCeyAGhoQ==} + engines: {node: '>=20.19.0'} - '@eslint-react/eslint-plugin@1.53.1': - resolution: {integrity: sha512-JZ2ciXNCC9CtBBAqYtwWH+Jy/7ZzLw+whei8atP4Fxsbh+Scs30MfEwBzuiEbNw6uF9eZFfPidchpr5RaEhqxg==} - engines: {node: '>=18.18.0'} + '@eslint-react/eslint-plugin@2.0.1': + resolution: {integrity: sha512-RP8S7bTcT6DWyCUWHYrps4wAlOk0hCYvVL1M3nr9cdxBuBRbEx0HqhrIhZr8jl0pafKvABAsiNJNmyqLLEFPqw==} + engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true + eslint: ^9.36.0 + typescript: ^5.9.2 - '@eslint-react/kit@1.53.1': - resolution: {integrity: sha512-zOi2le9V4rMrJvQV4OeedGvMGvDT46OyFPOwXKs7m0tQu5vXVJ8qwIPaVQT1n/WIuvOg49OfmAVaHpGxK++xLQ==} - engines: {node: '>=18.18.0'} + '@eslint-react/kit@2.0.1': + resolution: {integrity: sha512-LEtDYjYhI2A3oG0BesJlU7z3bgMV86kaGuMBIZByuYQmeCVkV0tkvPwMmOJf2kLeJeG9d58Cn691DGl7XXz54g==} + engines: {node: '>=20.19.0'} - '@eslint-react/shared@1.53.1': - resolution: {integrity: sha512-gomJQmFqQgQVI3Ra4vTMG/s6a4bx3JqeNiTBjxBJt4C9iGaBj458GkP4LJHX7TM6xUzX+fMSKOPX7eV3C/+UCw==} - engines: {node: '>=18.18.0'} + '@eslint-react/shared@2.0.1': + resolution: {integrity: sha512-/E4mHZKCWh+hJ4cbLWqqDx5IMFloTBMEoxiecpAvC1zJQpx0xdAYOZPOPiUPLbyD+v86ho2UUICgbvvCErULyg==} + engines: {node: '>=20.19.0'} - '@eslint-react/var@1.53.1': - resolution: {integrity: sha512-yzwopvPntcHU7mmDvWzRo1fb8QhjD8eDRRohD11rTV1u7nWO4QbJi0pOyugQakvte1/W11Y0Vr8Of0Ojk/A6zg==} - engines: {node: '>=18.18.0'} + '@eslint-react/var@2.0.1': + resolution: {integrity: sha512-Qc8dbg21Bg6SyN5EKeZYmwJPPfxXh8PbRRvleXeIzC7AbAsyjX+MsZ7W04AUkoE9/46o/+CaFPjN+gCUlQY15Q==} + engines: {node: '>=20.19.0'} '@eslint/config-array@0.21.0': resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} @@ -1249,8 +1246,8 @@ packages: '@types/react': optional: true - '@mui/x-data-grid@8.11.3': - resolution: {integrity: sha512-zd71bRYrm4uFh44/p/kQEtYHdslDy6uzC4NdF0qWYtf2Q0CkmC0ZZHkS4jnqf0iAawFVX2LgJtS7A6L6/ik9aQ==} + '@mui/x-data-grid@8.12.1': + resolution: {integrity: sha512-IfyV2jhPX6YQwpqxUD5jiy7fNbGIi7D2nCRIwK+lwY5m+I3lH6MFZyeDvZKSYOYT46/A127TmhCEEca/uPlh7Q==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.9.0 @@ -1265,14 +1262,14 @@ packages: '@emotion/styled': optional: true - '@mui/x-internals@8.11.3': - resolution: {integrity: sha512-Fmp4Op+nNSqsWn2Jwv9yA8WXi3Wem9jmgdUplvMK6JZAt7iA0ZdzGltCcHrdxOcK1Nu/2F7H8KOZuBzpy1lspw==} + '@mui/x-internals@8.12.0': + resolution: {integrity: sha512-KCZgFHwuPg0v8I2gpjeC6k3eDRXPPX8RIGSNDXe8zSZ8dAw+p6Q2pzT9kKvctqCXSFK8ct/5YQwqx8Quhs8Ndg==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@mui/x-virtualizer@0.1.7': - resolution: {integrity: sha512-PtAxlDTpmVkOWfaBEwlGGbRCA137C369OjmdxdPYrx5twhvukdhT/2b/KfSVbz6MzTctOGmkw5ye+IkjaFco/g==} + '@mui/x-virtualizer@0.2.0': + resolution: {integrity: sha512-Gy0MJXXKN9F8zWG89UlIiWEMYqwVyMt0YDWHXBW3ysekmunVFvPwYlFvmwSc3EM2gU0g9IGJWSgfhWS9uLNdcQ==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1430,8 +1427,8 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@rolldown/pluginutils@1.0.0-beta.35': - resolution: {integrity: sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==} + '@rolldown/pluginutils@1.0.0-beta.38': + resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==} '@rollup/pluginutils@5.2.0': resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} @@ -1775,8 +1772,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.1.13': - resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} + '@types/react@19.1.15': + resolution: {integrity: sha512-+kLxJpaJzXybyDyFXYADyP1cznTO8HSuBpenGlnKOAkH4hyNINiywvXS/tGJhsrGGP/gM185RA3xpjY0Yg4erA==} '@types/trusted-types@1.0.6': resolution: {integrity: sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==} @@ -1951,8 +1948,8 @@ packages: terser: ^5.16.0 vite: ^7.0.0 - '@vitejs/plugin-react@5.0.3': - resolution: {integrity: sha512-PFVHhosKkofGH0Yzrw1BipSedTH68BFF8ZWy1kfUpCtJcouXXY0+racG8sExw7hw0HoX36813ga5o3LTWZ4FUg==} + '@vitejs/plugin-react@5.0.4': + resolution: {integrity: sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -2481,35 +2478,26 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-debug@1.53.1: - resolution: {integrity: sha512-WNOiQ6jhodJE88VjBU/IVDM+2Zr9gKHlBFDUSA3fQ0dMB5RiBVj5wMtxbxRuipK/GqNJbteqHcZoYEod7nfddg==} - engines: {node: '>=18.18.0'} + eslint-plugin-react-debug@2.0.1: + resolution: {integrity: sha512-/yzCn4syAfCddIhao6mOuJ5d4+RzgqPSSCGvYfChiUdrsTt4EKhwgWd0hKes65bmRAjp40IX4QenSleu6yG8PA==} + engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true + eslint: ^9.36.0 + typescript: ^5.9.2 - eslint-plugin-react-dom@1.53.1: - resolution: {integrity: sha512-UYrWJ2cS4HpJ1A5XBuf1HfMpPoLdfGil+27g/ldXfGemb4IXqlxHt4ANLyC8l2CWcE3SXGJW7mTslL34MG0qTQ==} - engines: {node: '>=18.18.0'} + eslint-plugin-react-dom@2.0.1: + resolution: {integrity: sha512-2SxLy5v5lvnj14U7WWKTApZwEC9qxLWqtU+LaGb8B9pnlmbunFpIy1FTcRUfHBDcHFD23MqbgXE88HZpOnZ1oA==} + engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true + eslint: ^9.36.0 + typescript: ^5.9.2 - eslint-plugin-react-hooks-extra@1.53.1: - resolution: {integrity: sha512-fshTnMWNn9NjFLIuy7HzkRgGK29vKv4ZBO9UMr+kltVAfKLMeXXP6021qVKk66i/XhQjbktiS+vQsu1Rd3ZKvg==} - engines: {node: '>=18.18.0'} + eslint-plugin-react-hooks-extra@2.0.1: + resolution: {integrity: sha512-mLn6TiL3ZLNRWCKZO5CBBK2er72PTFoltnp8izC0RTfR8u6mlM+J1KfCWZmJKsyrFP0TS44KAJwwKOUZSWNOdQ==} + engines: {node: '>=20.0.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true + eslint: ^9.36.0 + typescript: ^5.9.2 eslint-plugin-react-hooks@5.2.0: resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} @@ -2517,43 +2505,32 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-naming-convention@1.53.1: - resolution: {integrity: sha512-rvZ/B/CSVF8d34HQ4qIt90LRuxotVx+KUf3i1OMXAyhsagEFMRe4gAlPJiRufZ+h9lnuu279bEdd+NINsXOteA==} - engines: {node: '>=18.18.0'} + eslint-plugin-react-naming-convention@2.0.1: + resolution: {integrity: sha512-7jvTEXKqQzYWXOPKdBOuG2J5L1ie9yqW+bflTGO8nJhCuX52JXdOnIzJdB2Lm6Ws/n+KIc31keWbnl9d9NpfFw==} + engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true + eslint: ^9.36.0 + typescript: ^5.9.2 - eslint-plugin-react-refresh@0.4.21: - resolution: {integrity: sha512-MWDWTtNC4voTcWDxXbdmBNe8b/TxfxRFUL6hXgKWJjN9c1AagYEmpiFWBWzDw+5H3SulWUe1pJKTnoSdmk88UA==} + eslint-plugin-react-refresh@0.4.22: + resolution: {integrity: sha512-atkAG6QaJMGoTLc4MDAP+rqZcfwQuTIh2IqHWFLy2TEjxr0MOK+5BSG4RzL2564AAPpZkDRsZXAUz68kjnU6Ug==} peerDependencies: eslint: '>=8.40' - eslint-plugin-react-web-api@1.53.1: - resolution: {integrity: sha512-INVZ3Cbl9/b+sizyb43ChzEPXXYuDsBGU9BIg7OVTNPyDPloCXdI+dQFAcSlDocZhPrLxhPV3eT6+gXbygzYXg==} - engines: {node: '>=18.18.0'} + eslint-plugin-react-web-api@2.0.1: + resolution: {integrity: sha512-KhaSd5k5eTeB0KirRsLmnWTb+fQvJLNhjfRGAOpsrHsV+uDoG8KsnpogoDUHw4RcvvmCOGfNbyURarpkUsopuQ==} + engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true + eslint: ^9.36.0 + typescript: ^5.9.2 - eslint-plugin-react-x@1.53.1: - resolution: {integrity: sha512-MwMNnVwiPem0U6SlejDF/ddA4h/lmP6imL1RDZ2m3pUBrcdcOwOx0gyiRVTA3ENnhRlWfHljHf5y7m8qDSxMEg==} - engines: {node: '>=18.18.0'} + eslint-plugin-react-x@2.0.1: + resolution: {integrity: sha512-wpGcR8SUYcYnTvjyLTTMkXdyjt72vqaHXh0aOpx8nYHW12koQQem/LJEazolpc1fXm+lkwPxOs8tKnG9i1g+EQ==} + engines: {node: '>=20.19.0'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^9.36.0 ts-api-utils: ^2.1.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - ts-api-utils: - optional: true - typescript: - optional: true + typescript: ^5.9.2 eslint-plugin-unused-imports@4.2.0: resolution: {integrity: sha512-hLbJ2/wnjKq4kGA9AUaExVFIbNzyxYdVo49QZmKCnhk5pc9wcYRbfgLHvWJ8tnsdcseGhoUAddm9gn/lt+d74w==} @@ -3462,10 +3439,10 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-i18next@15.7.3: - resolution: {integrity: sha512-AANws4tOE+QSq/IeMF/ncoHlMNZaVLxpa5uUGW1wjike68elVYr0018L9xYoqBr1OFO7G7boDPrbn0HpMCJxTw==} + react-i18next@16.0.0: + resolution: {integrity: sha512-JQ+dFfLnFSKJQt7W01lJHWRC0SX7eDPobI+MSTJ3/gP39xH2g33AuTE7iddAfXYHamJdAeMGM0VFboPaD3G68Q==} peerDependencies: - i18next: '>= 25.4.1' + i18next: '>= 25.5.2' react: '>= 16.8.0' react-dom: '*' react-native: '*' @@ -3501,15 +3478,15 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router-dom@7.9.1: - resolution: {integrity: sha512-U9WBQssBE9B1vmRjo9qTM7YRzfZ3lUxESIZnsf4VjR/lXYz9MHjvOxHzr/aUm4efpktbVOrF09rL/y4VHa8RMw==} + react-router-dom@7.9.3: + resolution: {integrity: sha512-1QSbA0TGGFKTAc/aWjpfW/zoEukYfU4dc1dLkT/vvf54JoGMkW+fNA+3oyo2gWVW1GM7BxjJVHz5GnPJv40rvg==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.9.1: - resolution: {integrity: sha512-pfAByjcTpX55mqSDGwGnY9vDCpxqBLASg0BMNAuMmpSGESo/TaOUG6BllhAtAkCGx8Rnohik/XtaqiYUJtgW2g==} + react-router@7.9.3: + resolution: {integrity: sha512-4o2iWCFIwhI/eYAIL43+cjORXYn/aRQPgtFRRZb3VzoyQ5Uej0Bmqj7437L97N9NJW4wnicSwLOLS+yCXfAPgg==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3524,8 +3501,8 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' - react-virtuoso@4.14.0: - resolution: {integrity: sha512-fR+eiCvirSNIRvvCD7ueJPRsacGQvUbjkwgWzBZXVq+yWypoH7mRUvWJzGHIdoRaCZCT+6mMMMwIG2S1BW3uwA==} + react-virtuoso@4.14.1: + resolution: {integrity: sha512-NRUF1ak8lY+Tvc6WN9cce59gU+lilzVtOozP+pm9J7iHshLGGjsiAB4rB2qlBPHjFbcXOQpT+7womNHGDUql8w==} peerDependencies: react: '>=16 || >=17 || >= 18 || >= 19' react-dom: '>=16 || >=17 || >= 18 || >=19' @@ -3615,8 +3592,8 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - sass@1.93.1: - resolution: {integrity: sha512-wLAeLB7IksO2u+cCfhHqcy7/2ZUMPp/X2oV6+LjmweTqgjhOKrkaE/Q1wljxtco5EcOcupZ4c981X0gpk5Tiag==} + sass@1.93.2: + resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==} engines: {node: '>=14.0.0'} hasBin: true @@ -3785,8 +3762,8 @@ packages: systemjs@6.15.1: resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==} - tar@7.4.4: - resolution: {integrity: sha512-O1z7ajPkjTgEgmTGz0v9X4eqeEXTDREPTO77pVC1Nbs86feBU1Zhdg+edzavPmYW1olxkwsqA2v4uOw6E8LeDg==} + tar@7.5.1: + resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} engines: {node: '>=18'} tauri-plugin-mihomo-api@file:crates/tauri-plugin-mihomo: @@ -4853,7 +4830,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1)': + '@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 @@ -4865,7 +4842,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 transitivePeerDependencies: - supports-color @@ -4879,18 +4856,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.1.13)(react@19.1.1) + '@emotion/react': 11.14.0(@types/react@19.1.15)(react@19.1.1) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) '@emotion/utils': 1.4.2 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 transitivePeerDependencies: - supports-color @@ -4988,9 +4965,9 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} - '@eslint-react/ast@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@eslint-react/ast@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: - '@eslint-react/eff': 1.53.1 + '@eslint-react/eff': 2.0.1 '@typescript-eslint/types': 8.44.1 '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) @@ -5001,51 +4978,51 @@ snapshots: - supports-color - typescript - '@eslint-react/core@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@eslint-react/core@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: - '@eslint-react/ast': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/shared': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/var': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/ast': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/types': 8.44.1 '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) birecord: 0.1.1 + ts-api-utils: 2.1.0(typescript@5.9.2) ts-pattern: 5.8.0 transitivePeerDependencies: - eslint - supports-color - typescript - '@eslint-react/eff@1.53.1': {} + '@eslint-react/eff@2.0.1': {} - '@eslint-react/eslint-plugin@1.53.1(eslint@9.36.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2)': + '@eslint-react/eslint-plugin@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/shared': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/types': 8.44.1 '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint: 9.36.0(jiti@2.6.0) - eslint-plugin-react-debug: 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-react-dom: 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-react-hooks-extra: 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-react-naming-convention: 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-react-web-api: 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-react-x: 1.53.1(eslint@9.36.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) - optionalDependencies: + eslint-plugin-react-debug: 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-dom: 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-hooks-extra: 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-naming-convention: 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-web-api: 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-x: 2.0.1(eslint@9.36.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) + ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - - ts-api-utils - '@eslint-react/kit@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@eslint-react/kit@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: - '@eslint-react/eff': 1.53.1 + '@eslint-react/eff': 2.0.1 '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) ts-pattern: 5.8.0 zod: 4.1.11 @@ -5054,10 +5031,10 @@ snapshots: - supports-color - typescript - '@eslint-react/shared@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@eslint-react/shared@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) ts-pattern: 5.8.0 zod: 4.1.11 @@ -5066,10 +5043,10 @@ snapshots: - supports-color - typescript - '@eslint-react/var@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@eslint-react/var@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: - '@eslint-react/ast': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/eff': 1.53.1 + '@eslint-react/ast': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/types': 8.44.1 '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) @@ -5179,39 +5156,39 @@ snapshots: '@mui/core-downloads-tracker@7.3.2': {} - '@mui/icons-material@7.3.2(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react@19.1.1)': + '@mui/icons-material@7.3.2(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.15)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 - '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 - '@mui/lab@7.0.0-beta.17(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/lab@7.0.0-beta.17(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 - '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) - '@mui/types': 7.4.6(@types/react@19.1.13) - '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) + '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) + '@mui/types': 7.4.6(@types/react@19.1.15) + '@mui/utils': 7.3.2(@types/react@19.1.15)(react@19.1.1) clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.13)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) - '@types/react': 19.1.13 + '@emotion/react': 11.14.0(@types/react@19.1.15)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) + '@types/react': 19.1.15 - '@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@mui/core-downloads-tracker': 7.3.2 - '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) - '@mui/types': 7.4.6(@types/react@19.1.13) - '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) + '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) + '@mui/types': 7.4.6(@types/react@19.1.15) + '@mui/utils': 7.3.2(@types/react@19.1.15)(react@19.1.1) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.1.13) + '@types/react-transition-group': 4.4.12(@types/react@19.1.15) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -5220,20 +5197,20 @@ snapshots: react-is: 19.1.1 react-transition-group: 4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.13)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) - '@types/react': 19.1.13 + '@emotion/react': 11.14.0(@types/react@19.1.15)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) + '@types/react': 19.1.15 - '@mui/private-theming@7.3.2(@types/react@19.1.13)(react@19.1.1)': + '@mui/private-theming@7.3.2(@types/react@19.1.15)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 - '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) + '@mui/utils': 7.3.2(@types/react@19.1.15)(react@19.1.1) prop-types: 15.8.1 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 - '@mui/styled-engine@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(react@19.1.1)': + '@mui/styled-engine@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@emotion/cache': 11.14.0 @@ -5243,77 +5220,77 @@ snapshots: prop-types: 15.8.1 react: 19.1.1 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.13)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) + '@emotion/react': 11.14.0(@types/react@19.1.15)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) - '@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1)': + '@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 - '@mui/private-theming': 7.3.2(@types/react@19.1.13)(react@19.1.1) - '@mui/styled-engine': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(react@19.1.1) - '@mui/types': 7.4.6(@types/react@19.1.13) - '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) + '@mui/private-theming': 7.3.2(@types/react@19.1.15)(react@19.1.1) + '@mui/styled-engine': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(react@19.1.1) + '@mui/types': 7.4.6(@types/react@19.1.15) + '@mui/utils': 7.3.2(@types/react@19.1.15)(react@19.1.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 19.1.1 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.13)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) - '@types/react': 19.1.13 + '@emotion/react': 11.14.0(@types/react@19.1.15)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) + '@types/react': 19.1.15 - '@mui/types@7.4.6(@types/react@19.1.13)': + '@mui/types@7.4.6(@types/react@19.1.15)': dependencies: '@babel/runtime': 7.28.4 optionalDependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 - '@mui/utils@7.3.2(@types/react@19.1.13)(react@19.1.1)': + '@mui/utils@7.3.2(@types/react@19.1.15)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 - '@mui/types': 7.4.6(@types/react@19.1.13) + '@mui/types': 7.4.6(@types/react@19.1.15) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.1 react-is: 19.1.1 optionalDependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 - '@mui/x-data-grid@8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/x-data-grid@8.12.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 - '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) - '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) - '@mui/x-internals': 8.11.3(@types/react@19.1.13)(react@19.1.1) - '@mui/x-virtualizer': 0.1.7(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) + '@mui/utils': 7.3.2(@types/react@19.1.15)(react@19.1.1) + '@mui/x-internals': 8.12.0(@types/react@19.1.15)(react@19.1.1) + '@mui/x-virtualizer': 0.2.0(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.13)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) + '@emotion/react': 11.14.0(@types/react@19.1.15)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.15)(react@19.1.1))(@types/react@19.1.15)(react@19.1.1) transitivePeerDependencies: - '@types/react' - '@mui/x-internals@8.11.3(@types/react@19.1.13)(react@19.1.1)': + '@mui/x-internals@8.12.0(@types/react@19.1.15)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 - '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) + '@mui/utils': 7.3.2(@types/react@19.1.15)(react@19.1.1) react: 19.1.1 reselect: 5.1.1 use-sync-external-store: 1.5.0(react@19.1.1) transitivePeerDependencies: - '@types/react' - '@mui/x-virtualizer@0.1.7(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/x-virtualizer@0.2.0(@types/react@19.1.15)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 - '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) - '@mui/x-internals': 8.11.3(@types/react@19.1.13)(react@19.1.1) + '@mui/utils': 7.3.2(@types/react@19.1.15)(react@19.1.1) + '@mui/x-internals': 8.12.0(@types/react@19.1.15)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: @@ -5461,7 +5438,7 @@ snapshots: '@popperjs/core@2.11.8': {} - '@rolldown/pluginutils@1.0.0-beta.35': {} + '@rolldown/pluginutils@1.0.0-beta.38': {} '@rollup/pluginutils@5.2.0(rollup@4.46.2)': dependencies: @@ -5746,15 +5723,15 @@ snapshots: '@types/prop-types@15.7.15': {} - '@types/react-dom@19.1.9(@types/react@19.1.13)': + '@types/react-dom@19.1.9(@types/react@19.1.15)': dependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 - '@types/react-transition-group@4.4.12(@types/react@19.1.13)': + '@types/react-transition-group@4.4.12(@types/react@19.1.15)': dependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 - '@types/react@19.1.13': + '@types/react@19.1.15': dependencies: csstype: 3.1.3 @@ -5918,7 +5895,7 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-legacy@7.2.1(terser@5.44.0)(vite@7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1))': + '@vitejs/plugin-legacy@7.2.1(terser@5.44.0)(vite@7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) @@ -5933,19 +5910,19 @@ snapshots: regenerator-runtime: 0.14.1 systemjs: 6.15.1 terser: 5.44.0 - vite: 7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1) + vite: 7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.0.3(vite@7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1))': + '@vitejs/plugin-react@5.0.4(vite@7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) - '@rolldown/pluginutils': 1.0.0-beta.35 + '@rolldown/pluginutils': 1.0.0-beta.38 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1) + vite: 7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1) transitivePeerDependencies: - supports-color @@ -6608,14 +6585,14 @@ snapshots: optionalDependencies: eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-react-debug@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-react-debug@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/core': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/shared': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/var': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/ast': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/types': 8.44.1 @@ -6623,19 +6600,18 @@ snapshots: eslint: 9.36.0(jiti@2.6.0) string-ts: 2.2.1 ts-pattern: 5.8.0 - optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-dom@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-react-dom@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/core': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/shared': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/var': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/ast': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/types': 8.44.1 '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) @@ -6643,19 +6619,18 @@ snapshots: eslint: 9.36.0(jiti@2.6.0) string-ts: 2.2.1 ts-pattern: 5.8.0 - optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks-extra@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-react-hooks-extra@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/core': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/shared': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/var': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/ast': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/types': 8.44.1 @@ -6663,7 +6638,6 @@ snapshots: eslint: 9.36.0(jiti@2.6.0) string-ts: 2.2.1 ts-pattern: 5.8.0 - optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6672,14 +6646,14 @@ snapshots: dependencies: eslint: 9.36.0(jiti@2.6.0) - eslint-plugin-react-naming-convention@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-react-naming-convention@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/core': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/shared': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/var': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/ast': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/types': 8.44.1 @@ -6687,42 +6661,40 @@ snapshots: eslint: 9.36.0(jiti@2.6.0) string-ts: 2.2.1 ts-pattern: 5.8.0 - optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-refresh@0.4.21(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-react-refresh@0.4.22(eslint@9.36.0(jiti@2.6.0)): dependencies: eslint: 9.36.0(jiti@2.6.0) - eslint-plugin-react-web-api@1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-react-web-api@2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/core': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/shared': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/var': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/ast': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/types': 8.44.1 '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint: 9.36.0(jiti@2.6.0) string-ts: 2.2.1 ts-pattern: 5.8.0 - optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-x@1.53.1(eslint@9.36.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2): + eslint-plugin-react-x@2.0.1(eslint@9.36.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/core': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/eff': 1.53.1 - '@eslint-react/kit': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/shared': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@eslint-react/var': 1.53.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/ast': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 2.0.1 + '@eslint-react/kit': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 2.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/types': 8.44.1 @@ -6731,9 +6703,8 @@ snapshots: eslint: 9.36.0(jiti@2.6.0) is-immutable-type: 5.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) string-ts: 2.2.1 - ts-pattern: 5.8.0 - optionalDependencies: ts-api-utils: 2.1.0(typescript@5.9.2) + ts-pattern: 5.8.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -7841,7 +7812,7 @@ snapshots: dependencies: react: 19.1.1 - react-i18next@15.7.3(i18next@25.5.2(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2): + react-i18next@16.0.0(i18next@25.5.2(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 @@ -7855,11 +7826,11 @@ snapshots: react-is@19.1.1: {} - react-markdown@10.1.0(@types/react@19.1.13)(react@19.1.1): + react-markdown@10.1.0(@types/react@19.1.15)(react@19.1.1): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@types/react': 19.1.13 + '@types/react': 19.1.15 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 @@ -7881,13 +7852,13 @@ snapshots: react-refresh@0.17.0: {} - react-router-dom@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + react-router-dom@7.9.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react-router: 7.9.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + react-router@7.9.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: cookie: 1.0.2 react: 19.1.1 @@ -7904,7 +7875,7 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-virtuoso@4.14.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + react-virtuoso@4.14.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -8043,7 +8014,7 @@ snapshots: is-regex: 1.2.1 optional: true - sass@1.93.1: + sass@1.93.2: dependencies: chokidar: 4.0.3 immutable: 5.1.2 @@ -8242,7 +8213,7 @@ snapshots: systemjs@6.15.1: {} - tar@7.4.4: + tar@7.5.1: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -8470,18 +8441,18 @@ snapshots: dependencies: monaco-editor: 0.53.0 - vite-plugin-svgr@4.5.0(rollup@4.46.2)(typescript@5.9.2)(vite@7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1)): + vite-plugin-svgr@4.5.0(rollup@4.46.2)(typescript@5.9.2)(vite@7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1)): dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.46.2) '@svgr/core': 8.1.0(typescript@5.9.2) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.2)) - vite: 7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1) + vite: 7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1) transitivePeerDependencies: - rollup - supports-color - typescript - vite@7.1.7(jiti@2.6.0)(sass@1.93.1)(terser@5.44.0)(yaml@2.7.1): + vite@7.1.7(jiti@2.6.0)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.1): dependencies: esbuild: 0.25.4 fdir: 6.5.0(picomatch@4.0.3) @@ -8492,7 +8463,7 @@ snapshots: optionalDependencies: fsevents: 2.3.3 jiti: 2.6.0 - sass: 1.93.1 + sass: 1.93.2 terser: 5.44.0 yaml: 2.7.1 @@ -8590,9 +8561,9 @@ snapshots: zod@4.1.11: {} - zustand@5.0.8(@types/react@19.1.13)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): + zustand@5.0.8(@types/react@19.1.15)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): optionalDependencies: - '@types/react': 19.1.13 + '@types/react': 19.1.15 react: 19.1.1 use-sync-external-store: 1.5.0(react@19.1.1) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 2d3d13b6..371d7b38 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2230,9 +2230,9 @@ dependencies = [ [[package]] name = "flexi_logger" -version = "0.31.3" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce93582299e89591bcb298db76e75498a9372eaef42c9cbedfc57d670176a3cd" +checksum = "ff38b61724dd492b5171d5dbb0921dfc8e859022c5993b22f80f74e9afe6d573" dependencies = [ "chrono", "log", @@ -3782,15 +3782,16 @@ dependencies = [ [[package]] name = "kode-bridge" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e80a61472dcdfbd60624634f257c592d513b8df2991bd0946e4d54ccb24ea568" +checksum = "368479099245d8ecd5b74e6b2b6279a69b38556a442aefbbaadd3ecf8246ffc3" dependencies = [ "bytes", "futures", "http 1.3.1", "httparse", "interprocess", + "libc", "parking_lot 0.12.4", "pin-project-lite", "rand 0.9.2", @@ -3802,6 +3803,7 @@ dependencies = [ "tokio-util", "toml 0.9.7", "tracing", + "widestring", ] [[package]] @@ -3854,9 +3856,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" [[package]] name = "libloading" @@ -5844,9 +5846,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.2" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", @@ -5856,9 +5858,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", @@ -6318,9 +6320,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -6352,18 +6354,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -6884,9 +6886,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.37.0" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07cec4dc2d2e357ca1e610cfb07de2fa7a10fc3e9fe89f72545f3d244ea87753" +checksum = "3bddd368fda2f82ead69c03d46d351987cfa0c2a57abfa37a017f3aa3e9bf69a" dependencies = [ "libc", "memchr", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 1caa0526..a3658f3f 100755 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -24,7 +24,7 @@ log = "0.4.28" dunce = "1.0.5" nanoid = "0.4" chrono = "0.4.42" -sysinfo = { version = "0.37.0", features = ["network", "system"] } +sysinfo = { version = "0.37.1", features = ["network", "system"] } boa_engine = "0.20.0" serde_json = "1.0.145" serde_yaml_ng = "0.10.0" @@ -39,9 +39,9 @@ tokio = { version = "1.47.1", features = [ "time", "sync", ] } -serde = { version = "1.0.226", features = ["derive"] } +serde = { version = "1.0.228", features = ["derive"] } reqwest = { version = "0.12.23", features = ["json", "cookies"] } -regex = "1.11.2" +regex = "1.11.3" sysproxy = { git = "https://github.com/clash-verge-rev/sysproxy-rs" } tauri = { version = "2.8.5", features = [ "protocol-asset", @@ -65,13 +65,13 @@ base64 = "0.22.1" getrandom = "0.3.3" futures = "0.3.31" sys-locale = "0.3.2" -libc = "0.2.175" +libc = "0.2.176" gethostname = "1.0.2" hmac = "0.12.1" sha2 = "0.10.9" hex = "0.4.3" scopeguard = "1.2.0" -kode-bridge = "0.2.1" +kode-bridge = "0.3.0" dashmap = "6.1.0" tauri-plugin-notification = "2.3.1" tokio-stream = "0.1.17" @@ -81,7 +81,7 @@ isahc = { version = "1.7.2", default-features = false, features = [ ] } backoff = { version = "0.4.0", features = ["tokio"] } tauri-plugin-http = "2.5.2" -flexi_logger = "0.31.3" +flexi_logger = "0.31.4" cfg-if = "1.0.3" nu-ansi-term = { version = "0.50.1", optional = true } console-subscriber = { version = "0.4.1", optional = true } diff --git a/src-tauri/src/utils/i18n.rs b/src-tauri/src/utils/i18n.rs index dc4c8859..9f80c563 100644 --- a/src-tauri/src/utils/i18n.rs +++ b/src-tauri/src/utils/i18n.rs @@ -1,7 +1,7 @@ use crate::{config::Config, utils::dirs}; use once_cell::sync::Lazy; use serde_json::Value; -use std::{collections::HashMap, fs, path::PathBuf}; +use std::{fs, path::PathBuf, sync::RwLock}; use sys_locale; const DEFAULT_LANGUAGE: &str = "zh"; @@ -33,22 +33,20 @@ pub fn get_supported_languages() -> Vec { languages } -static TRANSLATIONS: Lazy> = Lazy::new(|| { - let mut translations = HashMap::new(); - - if let Some(locales_dir) = get_locales_dir() { - for lang in get_supported_languages() { - let file_path = locales_dir.join(format!("{lang}.json")); - if let Ok(content) = fs::read_to_string(file_path) - && let Ok(json) = serde_json::from_str(&content) - { - translations.insert(lang.to_string(), json); - } - } - } - translations +static TRANSLATIONS: Lazy> = Lazy::new(|| { + let lang = get_system_language(); + let json = load_lang_file(&lang).unwrap_or_else(|| Value::Object(Default::default())); + RwLock::new((lang, json)) }); +fn load_lang_file(lang: &str) -> Option { + let locales_dir = get_locales_dir()?; + let file_path = locales_dir.join(format!("{lang}.json")); + fs::read_to_string(file_path) + .ok() + .and_then(|content| serde_json::from_str(&content).ok()) +} + fn get_system_language() -> String { sys_locale::get_locale() .map(|locale| locale.to_lowercase()) @@ -58,8 +56,6 @@ fn get_system_language() -> String { } pub async fn t(key: &str) -> String { - let key = key.to_string(); // own the string - let current_lang = Config::verge() .await .latest_ref() @@ -68,22 +64,35 @@ pub async fn t(key: &str) -> String { .map(String::from) .unwrap_or_else(get_system_language); - if let Some(text) = TRANSLATIONS - .get(¤t_lang) - .and_then(|trans| trans.get(&key)) - .and_then(|val| val.as_str()) { - return text.to_string(); + if let Ok(cache) = TRANSLATIONS.read() + && cache.0 == current_lang + && let Some(text) = cache.1.get(key).and_then(|val| val.as_str()) + { + return text.to_string(); + } + } + + if let Some(new_json) = load_lang_file(¤t_lang) + && let Ok(mut cache) = TRANSLATIONS.write() + { + *cache = (current_lang.clone(), new_json); + + if let Some(text) = cache.1.get(key).and_then(|val| val.as_str()) { + return text.to_string(); + } } if current_lang != DEFAULT_LANGUAGE - && let Some(text) = TRANSLATIONS - .get(DEFAULT_LANGUAGE) - .and_then(|trans| trans.get(&key)) - .and_then(|val| val.as_str()) + && let Some(default_json) = load_lang_file(DEFAULT_LANGUAGE) + && let Ok(mut cache) = TRANSLATIONS.write() { - return text.to_string(); + *cache = (DEFAULT_LANGUAGE.to_string(), default_json); + + if let Some(text) = cache.1.get(key).and_then(|val| val.as_str()) { + return text.to_string(); + } } - key + key.to_string() } diff --git a/src/components/profile/rule-item.tsx b/src/components/profile/rule-item.tsx index 38f05833..03e5fb54 100644 --- a/src/components/profile/rule-item.tsx +++ b/src/components/profile/rule-item.tsx @@ -24,6 +24,8 @@ export const RuleItem = (props: Props) => { const proxyPolicy = rule.match(/[^,]+$/)?.[0] ?? ""; const ruleContent = rule.slice(ruleType.length + 1, -proxyPolicy.length - 1); + const $sortable = useSortable({ id: ruleRaw }); + const { attributes, listeners, @@ -32,7 +34,7 @@ export const RuleItem = (props: Props) => { transition, isDragging, } = sortable - ? useSortable({ id: ruleRaw }) + ? $sortable : { attributes: {}, listeners: {}, diff --git a/src/components/proxy/proxy-group-navigator.tsx b/src/components/proxy/proxy-group-navigator.tsx new file mode 100644 index 00000000..4999da49 --- /dev/null +++ b/src/components/proxy/proxy-group-navigator.tsx @@ -0,0 +1,94 @@ +import { Box, Button, Tooltip } from "@mui/material"; +import { useCallback, useMemo } from "react"; + +interface ProxyGroupNavigatorProps { + proxyGroupNames: string[]; + onGroupLocation: (groupName: string) => void; +} + +// 提取代理组名的第一个字符 +const getGroupDisplayChar = (groupName: string): string => { + if (!groupName) return "?"; + + // 直接返回第一个字符,支持表情符号 + const firstChar = Array.from(groupName)[0]; + return firstChar || "?"; +}; + +export const ProxyGroupNavigator = ({ + proxyGroupNames, + onGroupLocation, +}: ProxyGroupNavigatorProps) => { + const handleGroupClick = useCallback( + (groupName: string) => { + onGroupLocation(groupName); + }, + [onGroupLocation], + ); + + // 处理代理组数据,去重和排序 + const processedGroups = useMemo(() => { + return proxyGroupNames + .filter((name) => name && name.trim()) + .map((name) => ({ + name, + displayChar: getGroupDisplayChar(name), + })); + }, [proxyGroupNames]); + + if (processedGroups.length === 0) { + return null; + } + + return ( + + {processedGroups.map(({ name, displayChar }) => ( + + + + ))} + + ); +}; diff --git a/src/components/proxy/proxy-groups.tsx b/src/components/proxy/proxy-groups.tsx index 1afe7da0..b848a450 100644 --- a/src/components/proxy/proxy-groups.tsx +++ b/src/components/proxy/proxy-groups.tsx @@ -25,6 +25,7 @@ import { ScrollTopButton } from "../layout/scroll-top-button"; import { ProxyChain } from "./proxy-chain"; import { ProxyRender } from "./proxy-render"; +import { ProxyGroupNavigator } from "./proxy-group-navigator"; import { useRenderList } from "./use-render-list"; import { delayGroup, healthcheckProxyProvider } from "tauri-plugin-mihomo-api"; @@ -318,6 +319,45 @@ export const ProxyGroups = (props: Props) => { } }; + // 获取运行时配置 + const { data: runtimeConfig } = useSWR("getRuntimeConfig", getRuntimeConfig, { + revalidateOnFocus: false, + revalidateIfStale: true, + }); + + // 获取所有代理组名称 + const getProxyGroupNames = useCallback(() => { + const config = runtimeConfig as any; + if (!config?.["proxy-groups"]) return []; + + return config["proxy-groups"] + .map((group: any) => group.name) + .filter((name: string) => name && name.trim() !== ""); + }, [runtimeConfig]); + + // 定位到指定的代理组 + const handleGroupLocationByName = useCallback( + (groupName: string) => { + const index = renderList.findIndex( + (item) => item.type === 0 && item.group?.name === groupName, + ); + + if (index >= 0) { + virtuosoRef.current?.scrollToIndex?.({ + index, + align: "start", + behavior: "smooth", + }); + } + }, + [renderList], + ); + + const proxyGroupNames = useMemo( + () => getProxyGroupNames(), + [getProxyGroupNames], + ); + if (mode === "direct") { return ; } @@ -514,6 +554,14 @@ export const ProxyGroups = (props: Props) => {
+ {/* 代理组导航栏 */} + {mode === "rule" && ( + + )} + ) => void; } -export const ProxyHead = (props: Props) => { - const { sx = {}, url, groupName, headState, onHeadState } = props; - +export const ProxyHead = ({ + sx = {}, + url, + groupName, + headState, + onHeadState, + onLocation, + onCheckDelay, +}: Props) => { const { showType, sortType, filterText, textState, testUrl } = headState; const { t } = useTranslation(); @@ -46,13 +52,11 @@ export const ProxyHead = (props: Props) => { }, []); const { verge } = useVerge(); + const default_latency_test = verge!.default_latency_test!; useEffect(() => { - delayManager.setUrl( - groupName, - testUrl || url || verge?.default_latency_test!, - ); - }, [groupName, testUrl, verge?.default_latency_test]); + delayManager.setUrl(groupName, testUrl || url || default_latency_test); + }, [groupName, testUrl, default_latency_test, url]); return ( @@ -60,7 +64,7 @@ export const ProxyHead = (props: Props) => { size="small" color="inherit" title={t("locate")} - onClick={props.onLocation} + onClick={onLocation} > @@ -76,7 +80,7 @@ export const ProxyHead = (props: Props) => { console.log(`[ProxyHead] 使用自定义测试URL: ${testUrl}`); onHeadState({ textState: "url" }); } - props.onCheckDelay(); + onCheckDelay(); }} > diff --git a/src/components/proxy/proxy-item.tsx b/src/components/proxy/proxy-item.tsx index dff589a9..82308b0e 100644 --- a/src/components/proxy/proxy-item.tsx +++ b/src/components/proxy/proxy-item.tsx @@ -61,12 +61,12 @@ export const ProxyItem = (props: Props) => { return () => { delayManager.removeListener(proxy.name, group.name); }; - }, [proxy.name, group.name]); + }, [proxy.name, group.name, isPreset]); useEffect(() => { if (!proxy) return; setDelay(delayManager.getDelayFix(proxy, group.name)); - }, [proxy]); + }, [group.name, proxy]); const onDelay = useLockFn(async () => { setDelay(-2); diff --git a/src/components/proxy/use-filter-sort.ts b/src/components/proxy/use-filter-sort.ts index 10880da9..e09f682f 100644 --- a/src/components/proxy/use-filter-sort.ts +++ b/src/components/proxy/use-filter-sort.ts @@ -11,7 +11,7 @@ export default function useFilterSort( filterText: string, sortType: ProxySortType, ) { - const [refresh, setRefresh] = useState({}); + const [, setRefresh] = useState({}); useEffect(() => { let last = 0; @@ -34,7 +34,7 @@ export default function useFilterSort( const fp = filterProxies(proxies, groupName, filterText); const sp = sortProxies(fp, groupName, sortType); return sp; - }, [proxies, groupName, filterText, sortType, refresh]); + }, [proxies, groupName, filterText, sortType]); } export function filterSort( diff --git a/src/components/setting/mods/hotkey-input.tsx b/src/components/setting/mods/hotkey-input.tsx index 3e746936..c4fdd716 100644 --- a/src/components/setting/mods/hotkey-input.tsx +++ b/src/components/setting/mods/hotkey-input.tsx @@ -90,13 +90,11 @@ export const HotkeyInput = (props: Props) => {
{keys.map((key, index) => ( - + -
- {key} -
+
{key}
))}
diff --git a/src/components/setting/setting-verge-advanced.tsx b/src/components/setting/setting-verge-advanced.tsx index 35ec6d53..197984c3 100644 --- a/src/components/setting/setting-verge-advanced.tsx +++ b/src/components/setting/setting-verge-advanced.tsx @@ -59,13 +59,13 @@ const SettingVergeAdvanced = ({ onError: _ }: Props) => { const onExportDiagnosticInfo = useCallback(async () => { await exportDiagnosticInfo(); showNotice("success", t("Copy Success"), 1000); - }, []); + }, [t]); const copyVersion = useCallback(() => { navigator.clipboard.writeText(`v${version}`).then(() => { showNotice("success", t("Version copied to clipboard"), 1000); }); - }, [version, t]); + }, [t]); return ( diff --git a/src/components/setting/setting-verge-basic.tsx b/src/components/setting/setting-verge-basic.tsx index 59975aac..915fb5a9 100644 --- a/src/components/setting/setting-verge-basic.tsx +++ b/src/components/setting/setting-verge-basic.tsx @@ -77,7 +77,7 @@ const SettingVergeBasic = ({ onError }: Props) => { const onCopyClashEnv = useCallback(async () => { await copyClashEnv(); showNotice("success", t("Copy Success"), 1000); - }, []); + }, [t]); return (