From f2fc213d52622fabfc0cbd538f82c9a0477986ae Mon Sep 17 00:00:00 2001 From: Stephen Zhou Date: Fri, 3 Apr 2026 11:26:49 +0800 Subject: [PATCH 01/12] chore: update deps (#34487) --- pnpm-lock.yaml | 2613 ++++++++--------- pnpm-workspace.yaml | 97 +- sdks/nodejs-client/package.json | 8 +- sdks/nodejs-client/tsconfig.json | 3 +- sdks/nodejs-client/tsup.config.ts | 12 - .../{vitest.config.ts => vite.config.ts} | 13 +- taze.config.js | 5 - web/eslint-suppressions.json | 14 +- web/eslint.config.mjs | 37 +- web/i18n-config/settings.ts | 1 - web/package.json | 2 - 11 files changed, 1347 insertions(+), 1458 deletions(-) delete mode 100644 sdks/nodejs-client/tsup.config.ts rename sdks/nodejs-client/{vitest.config.ts => vite.config.ts} (53%) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a44b621b14..8652d46c64f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,14 +7,14 @@ settings: catalogs: default: '@amplitude/analytics-browser': - specifier: 2.38.0 - version: 2.38.0 + specifier: 2.38.1 + version: 2.38.1 '@amplitude/plugin-session-replay-browser': - specifier: 1.27.5 - version: 1.27.5 + specifier: 1.27.6 + version: 1.27.6 '@antfu/eslint-config': - specifier: 7.7.3 - version: 7.7.3 + specifier: 8.0.0 + version: 8.0.0 '@base-ui/react': specifier: 1.3.0 version: 1.3.0 @@ -49,8 +49,8 @@ catalogs: specifier: 2.2.0 version: 2.2.0 '@hono/node-server': - specifier: 1.19.11 - version: 1.19.11 + specifier: 1.19.12 + version: 1.19.12 '@iconify-json/heroicons': specifier: 1.2.3 version: 1.2.3 @@ -88,11 +88,11 @@ catalogs: specifier: 4.7.0 version: 4.7.0 '@next/eslint-plugin-next': - specifier: 16.2.1 - version: 16.2.1 + specifier: 16.2.2 + version: 16.2.2 '@next/mdx': - specifier: 16.2.1 - version: 16.2.1 + specifier: 16.2.2 + version: 16.2.2 '@orpc/client': specifier: 1.13.13 version: 1.13.13 @@ -106,8 +106,8 @@ catalogs: specifier: 1.13.13 version: 1.13.13 '@playwright/test': - specifier: 1.58.2 - version: 1.58.2 + specifier: 1.59.1 + version: 1.59.1 '@remixicon/react': specifier: 4.9.0 version: 4.9.0 @@ -115,26 +115,26 @@ catalogs: specifier: 4.2.0 version: 4.2.0 '@sentry/react': - specifier: 10.46.0 - version: 10.46.0 + specifier: 10.47.0 + version: 10.47.0 '@storybook/addon-docs': - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.4 + version: 10.3.4 '@storybook/addon-links': - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.4 + version: 10.3.4 '@storybook/addon-onboarding': - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.4 + version: 10.3.4 '@storybook/addon-themes': - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.4 + version: 10.3.4 '@storybook/nextjs-vite': - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.4 + version: 10.3.4 '@storybook/react': - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.4 + version: 10.3.4 '@streamdown/math': specifier: 1.0.2 version: 1.0.2 @@ -154,23 +154,23 @@ catalogs: specifier: 4.2.2 version: 4.2.2 '@tanstack/eslint-plugin-query': - specifier: 5.95.2 - version: 5.95.2 + specifier: 5.96.1 + version: 5.96.1 '@tanstack/react-devtools': - specifier: 0.10.0 - version: 0.10.0 + specifier: 0.10.1 + version: 0.10.1 '@tanstack/react-form': - specifier: 1.28.5 - version: 1.28.5 + specifier: 1.28.6 + version: 1.28.6 '@tanstack/react-form-devtools': - specifier: 0.2.19 - version: 0.2.19 + specifier: 0.2.20 + version: 0.2.20 '@tanstack/react-query': - specifier: 5.95.2 - version: 5.95.2 + specifier: 5.96.1 + version: 5.96.1 '@tanstack/react-query-devtools': - specifier: 5.95.2 - version: 5.95.2 + specifier: 5.96.1 + version: 5.96.1 '@testing-library/dom': specifier: 10.4.1 version: 10.4.1 @@ -223,14 +223,14 @@ catalogs: specifier: 1.15.9 version: 1.15.9 '@typescript-eslint/eslint-plugin': - specifier: 8.57.2 - version: 8.57.2 + specifier: 8.58.0 + version: 8.58.0 '@typescript-eslint/parser': - specifier: 8.57.2 - version: 8.57.2 + specifier: 8.58.0 + version: 8.58.0 '@typescript/native-preview': - specifier: 7.0.0-dev.20260329.1 - version: 7.0.0-dev.20260329.1 + specifier: 7.0.0-dev.20260401.1 + version: 7.0.0-dev.20260401.1 '@vitejs/plugin-react': specifier: 6.0.1 version: 6.0.1 @@ -238,8 +238,8 @@ catalogs: specifier: 0.5.21 version: 0.5.21 '@vitest/coverage-v8': - specifier: 4.1.1 - version: 4.1.1 + specifier: 4.1.2 + version: 4.1.2 abcjs: specifier: 6.6.2 version: 6.6.2 @@ -259,8 +259,8 @@ catalogs: specifier: 1.1.1 version: 1.1.1 code-inspector-plugin: - specifier: 1.4.5 - version: 1.4.5 + specifier: 1.5.0 + version: 1.5.0 copy-to-clipboard: specifier: 3.3.3 version: 3.3.3 @@ -310,14 +310,11 @@ catalogs: specifier: 0.14.1 version: 0.14.1 eslint-plugin-markdown-preferences: - specifier: 0.40.3 - version: 0.40.3 + specifier: 0.41.0 + version: 0.41.0 eslint-plugin-no-barrel-files: specifier: 1.2.2 version: 1.2.2 - eslint-plugin-react-hooks: - specifier: 7.0.1 - version: 7.0.1 eslint-plugin-react-refresh: specifier: 0.5.2 version: 0.5.2 @@ -325,8 +322,8 @@ catalogs: specifier: 4.0.2 version: 4.0.2 eslint-plugin-storybook: - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.4 + version: 10.3.4 fast-deep-equal: specifier: 3.1.3 version: 3.1.3 @@ -337,8 +334,8 @@ catalogs: specifier: 20.8.9 version: 20.8.9 hono: - specifier: 4.12.9 - version: 4.12.9 + specifier: 4.12.10 + version: 4.12.10 html-entities: specifier: 2.6.0 version: 2.6.0 @@ -346,8 +343,8 @@ catalogs: specifier: 1.11.13 version: 1.11.13 i18next: - specifier: 25.10.10 - version: 25.10.10 + specifier: 26.0.3 + version: 26.0.3 i18next-resources-to-backend: specifier: 1.2.1 version: 1.2.1 @@ -376,8 +373,8 @@ catalogs: specifier: 0.16.44 version: 0.16.44 knip: - specifier: 6.1.0 - version: 6.1.0 + specifier: 6.2.0 + version: 6.2.0 ky: specifier: 1.14.3 version: 1.14.3 @@ -388,8 +385,8 @@ catalogs: specifier: 0.42.0 version: 0.42.0 mermaid: - specifier: 11.13.0 - version: 11.13.0 + specifier: 11.14.0 + version: 11.14.0 mime: specifier: 4.1.0 version: 4.1.0 @@ -400,8 +397,8 @@ catalogs: specifier: 1.0.0 version: 1.0.0 next: - specifier: 16.2.1 - version: 16.2.1 + specifier: 16.2.2 + version: 16.2.2 next-themes: specifier: 0.4.6 version: 0.4.6 @@ -436,8 +433,8 @@ catalogs: specifier: 5.2.4 version: 5.2.4 react-i18next: - specifier: 16.6.6 - version: 16.6.6 + specifier: 17.0.2 + version: 17.0.2 react-multi-email: specifier: 1.0.25 version: 1.0.25 @@ -471,9 +468,6 @@ catalogs: remark-directive: specifier: 4.0.0 version: 4.0.0 - sass: - specifier: 1.98.0 - version: 1.98.0 scheduler: specifier: 0.27.0 version: 0.27.0 @@ -487,8 +481,8 @@ catalogs: specifier: 1.0.8 version: 1.0.8 storybook: - specifier: 10.3.3 - version: 10.3.3 + specifier: 10.3.4 + version: 10.3.4 streamdown: specifier: 2.5.0 version: 2.5.0 @@ -502,20 +496,17 @@ catalogs: specifier: 4.2.2 version: 4.2.2 taze: - specifier: 19.10.0 - version: 19.10.0 + specifier: 19.11.0 + version: 19.11.0 tldts: specifier: 7.0.27 version: 7.0.27 - tsup: - specifier: ^8.5.1 - version: 8.5.1 tsx: specifier: 4.21.0 version: 4.21.0 typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: 6.0.2 + version: 6.0.2 uglify-js: specifier: 3.19.3 version: 3.19.3 @@ -529,14 +520,14 @@ catalogs: specifier: 13.0.0 version: 13.0.0 vinext: - specifier: 0.0.38 - version: 0.0.38 + specifier: 0.0.39 + version: 0.0.39 vite-plugin-inspect: specifier: 12.0.0-beta.1 version: 12.0.0-beta.1 vite-plus: - specifier: 0.1.14 - version: 0.1.14 + specifier: 0.1.15 + version: 0.1.15 vitest-canvas-mock: specifier: 1.1.4 version: 1.1.4 @@ -561,7 +552,7 @@ overrides: array.prototype.flatmap: npm:@nolyfill/array.prototype.flatmap@^1.0.44 array.prototype.tosorted: npm:@nolyfill/array.prototype.tosorted@^1.0.44 assert: npm:@nolyfill/assert@^1.0.26 - brace-expansion@<2.0.2: 2.0.2 + brace-expansion@>=2.0.0 <2.0.3: 2.0.3 canvas: ^3.2.2 devalue@<5.3.2: 5.3.2 dompurify@>=3.1.3 <=3.3.1: 3.3.2 @@ -575,6 +566,7 @@ overrides: is-generator-function: npm:@nolyfill/is-generator-function@^1.0.44 is-typed-array: npm:@nolyfill/is-typed-array@^1.0.44 isarray: npm:@nolyfill/isarray@^1.0.44 + lodash-es@>=4.0.0 <= 4.17.23: 4.18.0 object.assign: npm:@nolyfill/object.assign@^1.0.44 object.entries: npm:@nolyfill/object.entries@^1.0.44 object.fromentries: npm:@nolyfill/object.fromentries@^1.0.44 @@ -602,8 +594,8 @@ overrides: tar@<=7.5.10: 7.5.11 typed-array-buffer: npm:@nolyfill/typed-array-buffer@^1.0.44 undici@>=7.0.0 <7.24.0: 7.24.0 - vite: npm:@voidzero-dev/vite-plus-core@0.1.14 - vitest: npm:@voidzero-dev/vite-plus-test@0.1.14 + vite: npm:@voidzero-dev/vite-plus-core@0.1.15 + vitest: npm:@voidzero-dev/vite-plus-test@0.1.15 which-typed-array: npm:@nolyfill/which-typed-array@^1.0.44 yaml@>=2.0.0 <2.8.3: 2.8.3 yauzl@<3.2.1: 3.2.1 @@ -614,10 +606,10 @@ importers: devDependencies: taze: specifier: 'catalog:' - version: 19.10.0 + version: 19.11.0 vite-plus: specifier: 'catalog:' - version: 0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) e2e: devDependencies: @@ -626,7 +618,7 @@ importers: version: 12.7.0 '@playwright/test': specifier: 'catalog:' - version: 1.58.2 + version: 1.59.1 '@types/node': specifier: 'catalog:' version: 25.5.0 @@ -635,10 +627,10 @@ importers: version: 4.21.0 typescript: specifier: 'catalog:' - version: 5.9.3 + version: 6.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) packages/iconify-collections: devDependencies: @@ -656,34 +648,34 @@ importers: version: 25.5.0 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.1(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)) + version: 4.1.2(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)) eslint: specifier: 'catalog:' version: 10.1.0(jiti@2.6.1) - tsup: - specifier: 'catalog:' - version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) typescript: specifier: 'catalog:' - version: 5.9.3 + version: 6.0.2 + vite-plus: + specifier: 'catalog:' + version: 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) vitest: - specifier: npm:@voidzero-dev/vite-plus-test@0.1.14 - version: '@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)' + specifier: npm:@voidzero-dev/vite-plus-test@0.1.15 + version: '@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)' web: dependencies: '@amplitude/analytics-browser': specifier: 'catalog:' - version: 2.38.0 + version: 2.38.1 '@amplitude/plugin-session-replay-browser': specifier: 'catalog:' - version: 1.27.5(@amplitude/rrweb@2.0.0-alpha.37)(rollup@4.59.0) + version: 1.27.6(@amplitude/rrweb@2.0.0-alpha.37)(rollup@4.59.0) '@base-ui/react': specifier: 'catalog:' version: 1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -737,13 +729,13 @@ importers: version: 1.13.13 '@orpc/tanstack-query': specifier: 'catalog:' - version: 1.13.13(@orpc/client@1.13.13)(@tanstack/query-core@5.95.2) + version: 1.13.13(@orpc/client@1.13.13)(@tanstack/query-core@5.96.1) '@remixicon/react': specifier: 'catalog:' version: 4.9.0(react@19.2.4) '@sentry/react': specifier: 'catalog:' - version: 10.46.0(react@19.2.4) + version: 10.47.0(react@19.2.4) '@streamdown/math': specifier: 'catalog:' version: 1.0.2(react@19.2.4) @@ -752,16 +744,16 @@ importers: version: 3.2.5 '@t3-oss/env-nextjs': specifier: 'catalog:' - version: 0.13.11(typescript@5.9.3)(valibot@1.3.1(typescript@5.9.3))(zod@4.3.6) + version: 0.13.11(typescript@6.0.2)(valibot@1.3.1(typescript@6.0.2))(zod@4.3.6) '@tailwindcss/typography': specifier: 'catalog:' version: 0.5.19(tailwindcss@4.2.2) '@tanstack/react-form': specifier: 'catalog:' - version: 1.28.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.28.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-query': specifier: 'catalog:' - version: 5.95.2(react@19.2.4) + version: 5.96.1(react@19.2.4) abcjs: specifier: 'catalog:' version: 6.6.2 @@ -827,7 +819,7 @@ importers: version: 1.11.13 i18next: specifier: 'catalog:' - version: 25.10.10(typescript@5.9.3) + version: 26.0.3(typescript@6.0.2) i18next-resources-to-backend: specifier: 'catalog:' version: 1.2.1 @@ -863,7 +855,7 @@ importers: version: 0.42.0 mermaid: specifier: 'catalog:' - version: 11.13.0 + version: 11.14.0 mime: specifier: 'catalog:' version: 4.1.0 @@ -875,13 +867,13 @@ importers: version: 1.0.0 next: specifier: 'catalog:' - version: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) + version: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) next-themes: specifier: 'catalog:' version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) nuqs: specifier: 'catalog:' - version: 2.8.9(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react@19.2.4) + version: 2.8.9(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react@19.2.4) pinyin-pro: specifier: 'catalog:' version: 3.28.0 @@ -908,7 +900,7 @@ importers: version: 5.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-i18next: specifier: 'catalog:' - version: 16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + version: 17.0.2(i18next@26.0.3(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) react-multi-email: specifier: 'catalog:' version: 1.0.25(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -984,10 +976,10 @@ importers: devDependencies: '@antfu/eslint-config': specifier: 'catalog:' - version: 7.7.3(@eslint-react/eslint-plugin@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@next/eslint-plugin-next@16.2.1)(@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3))(@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(@vue/compiler-sfc@3.5.31)(eslint-plugin-react-hooks@7.0.1(eslint@10.1.0(jiti@2.6.1)))(eslint-plugin-react-refresh@0.5.2(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(oxlint@1.57.0(oxlint-tsgolint@0.17.3))(typescript@5.9.3) + version: 8.0.0(@eslint-react/eslint-plugin@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@next/eslint-plugin-next@16.2.2)(@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2))(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(@vue/compiler-sfc@3.5.31)(eslint-plugin-react-refresh@0.5.2(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@6.0.2) '@chromatic-com/storybook': specifier: 'catalog:' - version: 5.1.1(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + version: 5.1.1(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) '@dify/iconify-collections': specifier: workspace:* version: link:../packages/iconify-collections @@ -996,10 +988,10 @@ importers: version: 1.9.2(tailwindcss@4.2.2) '@eslint-react/eslint-plugin': specifier: 'catalog:' - version: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@hono/node-server': specifier: 'catalog:' - version: 1.19.11(hono@4.12.9) + version: 1.19.12(hono@4.12.10) '@iconify-json/heroicons': specifier: 'catalog:' version: 1.2.3 @@ -1017,49 +1009,49 @@ importers: version: 3.1.1(rollup@4.59.0) '@next/eslint-plugin-next': specifier: 'catalog:' - version: 16.2.1 + version: 16.2.2 '@next/mdx': specifier: 'catalog:' - version: 16.2.1(@mdx-js/loader@3.1.1(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)) + version: 16.2.2(@mdx-js/loader@3.1.1(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)) '@rgrove/parse-xml': specifier: 'catalog:' version: 4.2.0 '@storybook/addon-docs': specifier: 'catalog:' - version: 10.3.3(@types/react@19.2.14)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) + version: 10.3.4(@types/react@19.2.14)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) '@storybook/addon-links': specifier: 'catalog:' - version: 10.3.3(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + version: 10.3.4(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) '@storybook/addon-onboarding': specifier: 'catalog:' - version: 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + version: 10.3.4(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) '@storybook/addon-themes': specifier: 'catalog:' - version: 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + version: 10.3.4(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) '@storybook/nextjs-vite': specifier: 'catalog:' - version: 10.3.3(@babel/core@7.29.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) + version: 10.3.4(@babel/core@7.29.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) '@storybook/react': specifier: 'catalog:' - version: 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + version: 10.3.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2) '@tailwindcss/postcss': specifier: 'catalog:' version: 4.2.2 '@tailwindcss/vite': specifier: 'catalog:' - version: 4.2.2(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 4.2.2(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)) '@tanstack/eslint-plugin-query': specifier: 'catalog:' - version: 5.95.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 5.96.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@tanstack/react-devtools': specifier: 'catalog:' - version: 0.10.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11) + version: 0.10.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11) '@tanstack/react-form-devtools': specifier: 'catalog:' - version: 0.2.19(@types/react@19.2.14)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11) + version: 0.2.20(@types/react@19.2.14)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11) '@tanstack/react-query-devtools': specifier: 'catalog:' - version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) + version: 5.96.1(@tanstack/react-query@5.96.1(react@19.2.4))(react@19.2.4) '@testing-library/dom': specifier: 'catalog:' version: 10.4.1 @@ -1074,13 +1066,13 @@ importers: version: 14.6.1(@testing-library/dom@10.4.1) '@tsslint/cli': specifier: 'catalog:' - version: 3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@5.9.3))(typescript@5.9.3) + version: 3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@6.0.2))(typescript@6.0.2) '@tsslint/compat-eslint': specifier: 'catalog:' - version: 3.0.2(jiti@2.6.1)(typescript@5.9.3) + version: 3.0.2(jiti@2.6.1)(typescript@6.0.2) '@tsslint/config': specifier: 'catalog:' - version: 3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@5.9.3))(typescript@5.9.3) + version: 3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@6.0.2))(typescript@6.0.2) '@types/js-cookie': specifier: 'catalog:' version: 3.0.6 @@ -1113,25 +1105,25 @@ importers: version: 1.15.9 '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260329.1 + version: 7.0.0-dev.20260401.1 '@vitejs/plugin-react': specifier: 'catalog:' - version: 6.0.1(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 6.0.1(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)) '@vitejs/plugin-rsc': specifier: 'catalog:' - version: 0.5.21(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(react@19.2.4) + version: 0.5.21(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(react@19.2.4) '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.1(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 4.1.2(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)) agentation: specifier: 'catalog:' version: 3.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) code-inspector-plugin: specifier: 'catalog:' - version: 1.4.5 + version: 1.5.0 eslint: specifier: 'catalog:' version: 10.1.0(jiti@2.6.1) @@ -1140,19 +1132,16 @@ importers: version: 0.6.0(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-better-tailwindcss: specifier: 'catalog:' - version: 4.3.2(eslint@10.1.0(jiti@2.6.1))(oxlint@1.57.0(oxlint-tsgolint@0.17.3))(tailwindcss@4.2.2)(typescript@5.9.3) + version: 4.3.2(eslint@10.1.0(jiti@2.6.1))(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(tailwindcss@4.2.2)(typescript@6.0.2) eslint-plugin-hyoban: specifier: 'catalog:' version: 0.14.1(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-markdown-preferences: specifier: 'catalog:' - version: 0.40.3(@eslint/markdown@7.5.1)(eslint@10.1.0(jiti@2.6.1)) + version: 0.41.0(@eslint/markdown@8.0.1)(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-no-barrel-files: specifier: 'catalog:' - version: 1.2.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-hooks: - specifier: 'catalog:' - version: 7.0.1(eslint@10.1.0(jiti@2.6.1)) + version: 1.2.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint-plugin-react-refresh: specifier: 'catalog:' version: 0.5.2(eslint@10.1.0(jiti@2.6.1)) @@ -1161,28 +1150,25 @@ importers: version: 4.0.2(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-storybook: specifier: 'catalog:' - version: 10.3.3(eslint@10.1.0(jiti@2.6.1))(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + version: 10.3.4(eslint@10.1.0(jiti@2.6.1))(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2) happy-dom: specifier: 'catalog:' version: 20.8.9 hono: specifier: 'catalog:' - version: 4.12.9 + version: 4.12.10 knip: specifier: 'catalog:' - version: 6.1.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + version: 6.2.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) postcss: specifier: 'catalog:' version: 8.5.8 react-server-dom-webpack: specifier: 'catalog:' version: 19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) - sass: - specifier: 'catalog:' - version: 1.98.0 storybook: specifier: 'catalog:' - version: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tailwindcss: specifier: 'catalog:' version: 4.2.2 @@ -1191,28 +1177,28 @@ importers: version: 4.21.0 typescript: specifier: 'catalog:' - version: 5.9.3 + version: 6.0.2 uglify-js: specifier: 'catalog:' version: 3.19.3 vinext: specifier: 'catalog:' - version: 0.0.38(21fde6c2677b0aab516df83ef1beed5d) + version: 0.0.39(bf3f106951d7257e1336e695c204ec32) vite: - specifier: npm:@voidzero-dev/vite-plus-core@0.1.14 - version: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + specifier: npm:@voidzero-dev/vite-plus-core@0.1.15 + version: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' vite-plugin-inspect: specifier: 'catalog:' - version: 12.0.0-beta.1(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3)(ws@8.20.0) + version: 12.0.0-beta.1(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2)(ws@8.20.0) vite-plus: specifier: 'catalog:' - version: 0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + version: 0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3) vitest: - specifier: npm:@voidzero-dev/vite-plus-test@0.1.14 - version: '@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + specifier: npm:@voidzero-dev/vite-plus-test@0.1.15 + version: '@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' vitest-canvas-mock: specifier: 'catalog:' - version: 1.1.4(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 1.1.4(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)) packages: @@ -1223,17 +1209,17 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@amplitude/analytics-browser@2.38.0': - resolution: {integrity: sha512-MhqyEkr1gGAR4s4GSSflDhFVheIx9Nv3FfElQu9NlNrXB2Hh3BEOyVgdK7hgfi6NJwFyfw30+t5lym+njtA8hA==} + '@amplitude/analytics-browser@2.38.1': + resolution: {integrity: sha512-8E3WDuCz5pmVysw7iwT9MjltzaO7Sqy9jWNaXovO30Z8sXs5Ncl32qv6o14kwlpl3wRSaaAKDe0Z3Grjx3dYYQ==} - '@amplitude/analytics-client-common@2.4.41': - resolution: {integrity: sha512-+GbvtvhsUROotPBwfAxbrqovKePhC0oQKXtxjbeNQleOHjBjsAs5jEOCHpJenCKtaRpucg/FuK3NVOS09MfW7Q==} + '@amplitude/analytics-client-common@2.4.42': + resolution: {integrity: sha512-pEpE6s8GsXTlD9Jj4b/wplCQD8fT2ml/VZSnQ1E5sU0goaeZaYQKMTXGpbA2aE40ABZMwQSopxJn+puBrJc8eg==} '@amplitude/analytics-connector@1.6.4': resolution: {integrity: sha512-SpIv0IQMNIq6SH3UqFGiaZyGSc7PBZwRdq7lvP0pBxW8i4Ny+8zwI0pV+VMfMHQwWY3wdIbWw5WQphNjpdq1/Q==} - '@amplitude/analytics-core@2.44.0': - resolution: {integrity: sha512-z9QuTxLqEQ8KIeAT6Vmy6K48rP9TUmjnb4GwUMYoV/fxu3B9ClTaN18zqXQMmDw9HwUiIreHiVbwTb7OQRN5aA==} + '@amplitude/analytics-core@2.44.1': + resolution: {integrity: sha512-bx8RAYneoEyT/gsCpcktEgBMUs5vIb2piA/Kof88BaNKAWEpIa9B4Ogg4vNPqmEgNIx/wztSduFMHHw2pLcncg==} '@amplitude/analytics-types@2.11.1': resolution: {integrity: sha512-wFEgb0t99ly2uJKm5oZ28Lti0Kh5RecR5XBkwfUpDzn84IoCIZ8GJTsMw/nThu8FZFc7xFDA4UAt76zhZKrs9A==} @@ -1241,26 +1227,26 @@ packages: '@amplitude/experiment-core@0.7.2': resolution: {integrity: sha512-Wc2NWvgQ+bLJLeF0A9wBSPIaw0XuqqgkPKsoNFQrmS7r5Djd56um75In05tqmVntPJZRvGKU46pAp8o5tdf4mA==} - '@amplitude/plugin-autocapture-browser@1.25.0': - resolution: {integrity: sha512-YuWsz8XmJuKu3NlMxkvlhLey/5tGCeOwwfsROHficR0yDWO9gNG0WtHl7A0Pw1PUc9iaXjqfG2AjYumAtiq16Q==} + '@amplitude/plugin-autocapture-browser@1.25.1': + resolution: {integrity: sha512-eIaPO7eUH2W0OWe0JoqUVvMPUGDeOn4JQa7zdClEbvHnPxfGS1RHIFNsBk5ofgEWxhUo2Ka/Z0Wl86k9FMaa7w==} - '@amplitude/plugin-custom-enrichment-browser@0.1.2': - resolution: {integrity: sha512-ZX9BKqs1E1OI7l7QCGu9JnB/1kqLN+zqIePgM2tuEhZNFQJaw4NhAMUaMRqvNnaCkHlmpVRISzSj/4D3tWMRtA==} + '@amplitude/plugin-custom-enrichment-browser@0.1.3': + resolution: {integrity: sha512-iKZkqkI5CpLb62cGNgvqTVEUj8i5UBFWJc0aQMZZBqc+vmzHBaqvjeAU0dwO8KA623YfT5I+/Vp1MnqvEXGJFg==} - '@amplitude/plugin-network-capture-browser@1.9.11': - resolution: {integrity: sha512-49o3zYnKUmRdrxgAEcr1iHnXR1um40e1icO0hzugSq04k19hs27zcl3zpEk9geO+nNKwO744ryE1q93gqVbHrQ==} + '@amplitude/plugin-network-capture-browser@1.9.12': + resolution: {integrity: sha512-/8x+GDqE25pTvsU9Po7Ur+V8pUuX4IG5p2xHPM9N/APfyc3D1zLTkC8FKo8wfPpg4Wu97mSzy1JnvPDqbJcJyw==} - '@amplitude/plugin-page-url-enrichment-browser@0.7.3': - resolution: {integrity: sha512-3UZq/zKg4lcsRgziWAPSEeaUsNsbyjjxmsAE9kSDi/hIj5RaWnwWhY6TGhv45UAReugTA4vVZyFRg9btf3c/Fg==} + '@amplitude/plugin-page-url-enrichment-browser@0.7.4': + resolution: {integrity: sha512-gF7V1ypkYB7FTwKlqjbO+7Z+Wvf72RfA64aREj9aplZdRJ0EY3qSEYMA3L2v0U5ztYchiy5MJraSaaxKfzXdJg==} - '@amplitude/plugin-page-view-tracking-browser@2.9.4': - resolution: {integrity: sha512-J16zmEadnzNpkHSmzpTiQN2q9pGJ/4SkHONA9O8KxUsMU/MYTDgof3rAYY/w5B5rmvdxfMRCjqWtvnkizzgZ6w==} + '@amplitude/plugin-page-view-tracking-browser@2.9.5': + resolution: {integrity: sha512-fWewMrgo0T7AyKnrZn6ox0ER5Ibw/IFTkX0GrQ8DxcsXrmUuSWUTsxZaA7YPDzuWPbd4AX9/AWZF2i6A9Ybtfg==} - '@amplitude/plugin-session-replay-browser@1.27.5': - resolution: {integrity: sha512-tf0Ty1nNF8OJ5QQ5scEqdGfzdgIaqkRf2MSzQfHbGcTIoYuVmAKuCgn3yMLk62MKnwgG3IsTIugMdRRv7l85PA==} + '@amplitude/plugin-session-replay-browser@1.27.6': + resolution: {integrity: sha512-wHv9b/Qzu9qg0thE+qo23/KpYGiADnAj42I1C1goQAJG7XNOk62F0sdejVvnQIV9NsLe0ItoS+tg3eqlBE7Exg==} - '@amplitude/plugin-web-vitals-browser@1.1.26': - resolution: {integrity: sha512-wiD4vy+f2fepr+8Lnn26TYYjDEnWsmlGhJog99x+xfbZ/D+stGdaCIOz5AOjU1TpTRvxvamEu2XuOh+8EZOCSA==} + '@amplitude/plugin-web-vitals-browser@1.1.27': + resolution: {integrity: sha512-jh/dWMsthx5E+ensNTwj7nkqi8iG8wyJc1HryOdY49w9zTgcbZmJwE2uumLBXBasn7l62a5EdqRkwctGL53fHw==} '@amplitude/rrdom@2.0.0-alpha.37': resolution: {integrity: sha512-u4dSnBtlbJ8oU5P/Ywl2RLqvjqWbkl4ScMUbvQA7in4pWcx+0NRN+VVjLZXQcd8Fn7E/rcxjeUh7e7HfwvdasQ==} @@ -1294,20 +1280,20 @@ packages: '@amplitude/rrweb@2.0.0-alpha.37': resolution: {integrity: sha512-jJkSpPYiVgOZB422pb2jOJJn3pvb5E5f9vKK8CEmUlk2mVAl6kPQzW98mb05M65OJFj5nn9tSe9h5r5+Cl93ag==} - '@amplitude/session-replay-browser@1.35.0': - resolution: {integrity: sha512-aGqu807oC8UIMmP+g1jBYsgN+/VeR/ThtK6fpxuZCugEogx7EZ9sXDEeudUmyvkQQfWmD+nLmrhYPX8FpROT5w==} + '@amplitude/session-replay-browser@1.35.1': + resolution: {integrity: sha512-7X6T+niZaG+zpvcFOwdkbTNUWzD6T9/rQ7POYkTK+C/6FtvJ0fpHXNHdHT8fozKox2UXL/wwZvoQWFriHSe1dA==} '@amplitude/targeting@0.2.0': resolution: {integrity: sha512-/50ywTrC4hfcfJVBbh5DFbqMPPfaIOivZeb5Gb+OGM03QrA+lsUqdvtnKLNuWtceD4H6QQ2KFzPJ5aAJLyzVDA==} - '@antfu/eslint-config@7.7.3': - resolution: {integrity: sha512-BtroDxTvmWtvr3yJkdWVCvwsKlnEdkreoeOyrdNezc/W5qaiQNf2xjcsQ3N5Yy0x27h+0WFfW8rG8YlVioG6dw==} + '@antfu/eslint-config@8.0.0': + resolution: {integrity: sha512-IKiCfsa1vRgj8srB2azqiN3nOAcVyP/TZ5Ibiz0TDW9NoQPizTvkmRTSi1vo4ax0SL9TH/8uJLK6uCfd6bQzLA==} hasBin: true peerDependencies: '@angular-eslint/eslint-plugin': ^21.1.0 '@angular-eslint/eslint-plugin-template': ^21.1.0 '@angular-eslint/template-parser': ^21.1.0 - '@eslint-react/eslint-plugin': ^2.11.0 + '@eslint-react/eslint-plugin': ^3.0.0 '@next/eslint-plugin-next': '>=15.0.0' '@prettier/plugin-xml': ^3.4.1 '@unocss/eslint-plugin': '>=0.50.0' @@ -1316,7 +1302,6 @@ packages: eslint-plugin-astro: ^1.2.0 eslint-plugin-format: '>=0.1.0' eslint-plugin-jsx-a11y: '>=6.10.2' - eslint-plugin-react-hooks: ^7.0.0 eslint-plugin-react-refresh: ^0.5.0 eslint-plugin-solid: ^0.14.3 eslint-plugin-svelte: '>=2.35.1' @@ -1347,8 +1332,6 @@ packages: optional: true eslint-plugin-jsx-a11y: optional: true - eslint-plugin-react-hooks: - optional: true eslint-plugin-react-refresh: optional: true eslint-plugin-solid: @@ -1367,9 +1350,9 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - '@antfu/ni@28.3.0': - resolution: {integrity: sha512-JbRijiCNAGcQcyPfV0EXOJYwV27e/srXfTvETqzbbh4jzHBV2pDYiBz8rj5SyzX27aTbCK+qXR3x6g2WKokcrA==} - engines: {node: '>=20'} + '@antfu/ni@30.0.0': + resolution: {integrity: sha512-DqBVB3XqXH4VsDpER7iLlEtayMC98iXrY7kwBzp1v6LGc/6U6+qnN3+X0bcPK63LMXJCRG2D/XDq7dvtKDGogg==} + engines: {node: '>=20.19.0'} hasBin: true '@antfu/utils@8.1.1': @@ -1498,32 +1481,32 @@ packages: '@clack/core@0.3.5': resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} - '@clack/core@1.1.0': - resolution: {integrity: sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==} + '@clack/core@1.2.0': + resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} '@clack/prompts@0.8.2': resolution: {integrity: sha512-6b9Ab2UiZwJYA9iMyboYyW9yJvAO9V753ZhS+DHKEjZRKAxPPOb7MXXu84lsPFG+vZt6FRFniZ8rXi+zCIw4yQ==} - '@clack/prompts@1.1.0': - resolution: {integrity: sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==} + '@clack/prompts@1.2.0': + resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} - '@code-inspector/core@1.4.5': - resolution: {integrity: sha512-wskkSRX13TAqJG65d5sq0bRZ4kYktas/iE70xqXMOeqW/A6n2Zqhw5QRHANmEmlBvB9bP/bse+9iBkNN3Q2Skw==} + '@code-inspector/core@1.5.0': + resolution: {integrity: sha512-wyBiJ2YTONkS3yn+uNx4VEoTJT5muKbri/kN7XZXQa/Kzl60OM7KS3gTyZ/gGjM6IN6QjYwKMs4++ErI0AgLdw==} - '@code-inspector/esbuild@1.4.5': - resolution: {integrity: sha512-KBwq7waqZ3L1CW7N9ff7aS0HxzamrslR08i5ovkLQe1p6tH9Axe9zzCrBnvgmB0UZsT2r/5wKLOWyEpq5+VYKw==} + '@code-inspector/esbuild@1.5.0': + resolution: {integrity: sha512-7ekO9zp6ikjORwFkP1BwDPzkyAofGQqkPyBETb/8nrNuDBvW0zAbHNWt3M1lsxqFZwFX/nPvpSgvlEUn+qI3CQ==} - '@code-inspector/mako@1.4.5': - resolution: {integrity: sha512-yrHgE5+b4ZL29Xt+y0H/9xrXSbRskq7dFhmE9GYFWCcgdWNCMD25hZd7xZVije94++H65Vw6Bu/abfqEx0peog==} + '@code-inspector/mako@1.5.0': + resolution: {integrity: sha512-6spNArsYGJpVwZsbRBfa43W6fB9vsUdZPN3McyERrs4mKzVnz4lo4Wqc2aodk42OTRIahSibwzYqQSJvtMiGgw==} - '@code-inspector/turbopack@1.4.5': - resolution: {integrity: sha512-IG39ikmQthdx/oAxhpV7zsIQZ3Jpycl88JzH+UXHq0ZpfHwa1KdNc/9erP3kFMY4+ANmkmerqBk57knmRTGMRQ==} + '@code-inspector/turbopack@1.5.0': + resolution: {integrity: sha512-Y18/vFcElEwSb4r0keJNzgsnu+Gw6PAF313/MbM6eKmTToHYJjI4In9xGn4vyEJaTf08gXAFe8OBTmoGC+sUsg==} - '@code-inspector/vite@1.4.5': - resolution: {integrity: sha512-vBtH91afwYL7JV4zWcJJTFd65LJ4SZz5E9AwGgCF30/L1mdDx7U29D+M+JpaxSgsMB6monKSZh+ubbqYe0ixpQ==} + '@code-inspector/vite@1.5.0': + resolution: {integrity: sha512-Iu+fPvUDf0xel4szhxst3BCZSfVEfWE+diOizL3CozDeSvm+VV/Fp0D7X7qMwjFEnVCUBWMCvqQTZ71pmd/EQw==} - '@code-inspector/webpack@1.4.5': - resolution: {integrity: sha512-lwUv+X1FNSUWz+FKcUsE2dT2pg6VFRRXKt16hg/m+Lwtdet2adfi6BFLZmNz3OPIEGbRB5Kjx6bfaghZhbDCCg==} + '@code-inspector/webpack@1.5.0': + resolution: {integrity: sha512-L7PAuHJOYPBK38zhql5qGP0tK2L0TJffYFfUGD+z82l0DCG9R/JJlKp38nDz0nureKgNGaQdKVrlE/EiHRp5RQ==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -1587,11 +1570,11 @@ packages: '@cucumber/tag-expressions@9.1.0': resolution: {integrity: sha512-bvHjcRFZ+J1TqIa9eFNO1wGHqwx4V9ZKV3hYgkuK/VahHx73uiP4rKV3JVrvWSMrwrFvJG6C8aEwnCWSvbyFdQ==} - '@e18e/eslint-plugin@0.2.0': - resolution: {integrity: sha512-mXgODVwhuDjTJ+UT+XSvmMmCidtGKfrV5nMIv1UtpWex2pYLsIM3RSpT8HWIMAebS9qANbXPKlSX4BE7ZvuCgA==} + '@e18e/eslint-plugin@0.3.0': + resolution: {integrity: sha512-hHgfpxsrZ2UYHcicA+tGZnmk19uJTaye9VH79O+XS8R4ona2Hx3xjhXghclNW58uXMk3xXlbYEOMr8thsoBmWg==} peerDependencies: eslint: ^9.0.0 || ^10.0.0 - oxlint: ^1.41.0 + oxlint: ^1.55.0 peerDependenciesMeta: eslint: optional: true @@ -1896,6 +1879,10 @@ packages: resolution: {integrity: sha512-R8uZemG9dKTbru/DQRPblbJyXpObwKzo8rv1KYGGuPUPtjM4LXBYM9q5CIZAComzZupws3tWbDwam5AFpPLyJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/markdown@8.0.1': + resolution: {integrity: sha512-WWKmld/EyNdEB8GMq7JMPX1SDWgyJAM1uhtCi5ySrqYQM4HQjmg11EX/q3ZpnpRXHfdccFtli3NBvvGaYjWyQw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/object-schema@2.1.7': resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1964,8 +1951,8 @@ packages: peerDependencies: react: '>= 16 || ^19.0.0-rc' - '@hono/node-server@1.19.11': - resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} + '@hono/node-server@1.19.12': + resolution: {integrity: sha512-txsUW4SQ1iilgE0l9/e9VQWmELXifEFvmdA1j6WFh/aFPj99hIntrSsq/if0UWyGVkmrRPKA1wCeP+UCr1B9Uw==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -2161,11 +2148,11 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4': - resolution: {integrity: sha512-6PyZBYKnnVNqOSB0YFly+62R7dmov8segT27A+RVTBVd4iAE6kbW9QBJGlyR2yG4D4ohzhZSTIu7BK1UTtmFFA==} + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0': + resolution: {integrity: sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ==} peerDependencies: typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true @@ -2285,8 +2272,8 @@ packages: peerDependencies: rollup: 4.59.0 - '@mermaid-js/parser@1.0.1': - resolution: {integrity: sha512-opmV19kN1JsK0T6HhhokHpcVkqKpF+x2pPDKKM2ThHtZAB5F4PROopk0amuVYK5qMrIA4erzpNm8gmPNJgMDxQ==} + '@mermaid-js/parser@1.1.0': + resolution: {integrity: sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==} '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -2310,14 +2297,14 @@ packages: '@next/env@16.0.0': resolution: {integrity: sha512-s5j2iFGp38QsG1LWRQaE2iUY3h1jc014/melHFfLdrsMJPqxqDQwWNwyQTcNoUSGZlCVZuM7t7JDMmSyRilsnA==} - '@next/env@16.2.1': - resolution: {integrity: sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==} + '@next/env@16.2.2': + resolution: {integrity: sha512-LqSGz5+xGk9EL/iBDr2yo/CgNQV6cFsNhRR2xhSXYh7B/hb4nePCxlmDvGEKG30NMHDFf0raqSyOZiQrO7BkHQ==} - '@next/eslint-plugin-next@16.2.1': - resolution: {integrity: sha512-r0epZGo24eT4g08jJlg2OEryBphXqO8aL18oajoTKLzHJ6jVr6P6FI58DLMug04MwD3j8Fj0YK0slyzneKVyzA==} + '@next/eslint-plugin-next@16.2.2': + resolution: {integrity: sha512-IOPbWzDQ+76AtjZioaCjpIY72xNSDMnarZ2GMQ4wjNLvnJEJHqxQwGFhgnIWLV9klb4g/+amg88Tk5OXVpyLTw==} - '@next/mdx@16.2.1': - resolution: {integrity: sha512-w0YOkOc+WEnsTJ8uxzBOvpe3R+9BnJOxWCE7qcI/62CzJiUEd8JKtF25e3R8cW5BGsKyRW8p4zE2JLyXKa8xdw==} + '@next/mdx@16.2.2': + resolution: {integrity: sha512-2CbRTXE6sJ7zDAaKXknb5FrrPs46iJeMPzuoBXsAOV/XVnxABGD4mSDusn0VuCoII/KjUZ+zsuo2VFbchYQXng==} peerDependencies: '@mdx-js/loader': '>=0.15.0' '@mdx-js/react': '>=0.15.0' @@ -2327,54 +2314,54 @@ packages: '@mdx-js/react': optional: true - '@next/swc-darwin-arm64@16.2.1': - resolution: {integrity: sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==} + '@next/swc-darwin-arm64@16.2.2': + resolution: {integrity: sha512-B92G3ulrwmkDSEJEp9+XzGLex5wC1knrmCSIylyVeiAtCIfvEJYiN3v5kXPlYt5R4RFlsfO/v++aKV63Acrugg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.1': - resolution: {integrity: sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==} + '@next/swc-darwin-x64@16.2.2': + resolution: {integrity: sha512-7ZwSgNKJNQiwW0CKhNm9B1WS2L1Olc4B2XY0hPYCAL3epFnugMhuw5TMWzMilQ3QCZcCHoYm9NGWTHbr5REFxw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.1': - resolution: {integrity: sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==} + '@next/swc-linux-arm64-gnu@16.2.2': + resolution: {integrity: sha512-c3m8kBHMziMgo2fICOP/cd/5YlrxDU5YYjAJeQLyFsCqVF8xjOTH/QYG4a2u48CvvZZSj1eHQfBCbyh7kBr30Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.1': - resolution: {integrity: sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==} + '@next/swc-linux-arm64-musl@16.2.2': + resolution: {integrity: sha512-VKLuscm0P/mIfzt+SDdn2+8TNNJ7f0qfEkA+az7OqQbjzKdBxAHs0UvuiVoCtbwX+dqMEL9U54b5wQ/aN3dHeg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.2.1': - resolution: {integrity: sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==} + '@next/swc-linux-x64-gnu@16.2.2': + resolution: {integrity: sha512-kU3OPHJq6sBUjOk7wc5zJ7/lipn8yGldMoAv4z67j6ov6Xo/JvzA7L7LCsyzzsXmgLEhk3Qkpwqaq/1+XpNR3g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.2.1': - resolution: {integrity: sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==} + '@next/swc-linux-x64-musl@16.2.2': + resolution: {integrity: sha512-CKXRILyErMtUftp+coGcZ38ZwE/Aqq45VMCcRLr2I4OXKrgxIBDXHnBgeX/UMil0S09i2JXaDL3Q+TN8D/cKmg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.1': - resolution: {integrity: sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==} + '@next/swc-win32-arm64-msvc@16.2.2': + resolution: {integrity: sha512-sS/jSk5VUoShUqINJFvNjVT7JfR5ORYj/+/ZpOYbbIohv/lQfduWnGAycq2wlknbOql2xOR0DoV0s6Xfcy49+g==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.1': - resolution: {integrity: sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==} + '@next/swc-win32-x64-msvc@16.2.2': + resolution: {integrity: sha512-aHaKceJgdySReT7qeck5oShucxWRiiEuwCGK8HHALe6yZga8uyFpLkPgaRw3kkF04U7ROogL/suYCNt/+CuXGA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2566,8 +2553,8 @@ packages: cpu: [x64] os: [win32] - '@oxc-project/runtime@0.121.0': - resolution: {integrity: sha512-p0bQukD8OEHxzY4T9OlANBbEFGnOnjo1CYi50HES7OD36UO2yPh6T+uOJKLtlg06eclxroipRCpQGMpeH8EJ/g==} + '@oxc-project/runtime@0.122.0': + resolution: {integrity: sha512-vevyz3bNjevQFCV2Yg5o6Sp9BSoiYiJVymMrzA3S1ZGj4J8ak4YiywhFyQMueQ3UNlJU6HZOZYDy70TUc99aHw==} engines: {node: ^20.19.0 || >=22.12.0} '@oxc-project/types@0.121.0': @@ -2684,276 +2671,276 @@ packages: cpu: [x64] os: [win32] - '@oxfmt/binding-android-arm-eabi@0.42.0': - resolution: {integrity: sha512-dsqPTYsozeokRjlrt/b4E7Pj0z3eS3Eg74TWQuuKbjY4VttBmA88rB7d50Xrd+TZ986qdXCNeZRPEzZHAe+jow==} + '@oxfmt/binding-android-arm-eabi@0.43.0': + resolution: {integrity: sha512-CgU2s+/9hHZgo0IxVxrbMPrMj+tJ6VM3mD7Mr/4oiz4FNTISLoCvRmB5nk4wAAle045RtRjd86m673jwPyb1OQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.42.0': - resolution: {integrity: sha512-t+aAjHxcr5eOBphFHdg1ouQU9qmZZoRxnX7UOJSaTwSoKsb6TYezNKO0YbWytGXCECObRqNcUxPoPr0KaraAIg==} + '@oxfmt/binding-android-arm64@0.43.0': + resolution: {integrity: sha512-T9OfRwjA/EdYxAqbvR7TtqLv5nIrwPXuCtTwOHtS7aR9uXyn74ZYgzgTo6/ZwvTq9DY4W+DsV09hB2EXgn9EbA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.42.0': - resolution: {integrity: sha512-ulpSEYMKg61C5bRMZinFHrKJYRoKGVbvMEXA5zM1puX3O9T6Q4XXDbft20yrDijpYWeuG59z3Nabt+npeTsM1A==} + '@oxfmt/binding-darwin-arm64@0.43.0': + resolution: {integrity: sha512-o3i49ZUSJWANzXMAAVY1wnqb65hn4JVzwlRQ5qfcwhRzIA8lGVaud31Q3by5ALHPrksp5QEaKCQF9aAS3TXpZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.42.0': - resolution: {integrity: sha512-ttxLKhQYPdFiM8I/Ri37cvqChE4Xa562nNOsZFcv1CKTVLeEozXjKuYClNvxkXmNlcF55nzM80P+CQkdFBu+uQ==} + '@oxfmt/binding-darwin-x64@0.43.0': + resolution: {integrity: sha512-vWECzzCFkb0kK6jaHjbtC5sC3adiNWtqawFCxhpvsWlzVeKmv5bNvkB4nux+o4JKWTpHCM57NDK/MeXt44txmA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.42.0': - resolution: {integrity: sha512-Og7QS3yI3tdIKYZ58SXik0rADxIk2jmd+/YvuHRyKULWpG4V2fR5V4hvKm624Mc0cQET35waPXiCQWvjQEjwYQ==} + '@oxfmt/binding-freebsd-x64@0.43.0': + resolution: {integrity: sha512-rgz8JpkKiI/umOf7fl9gwKyQasC8bs5SYHy6g7e4SunfLBY3+8ATcD5caIg8KLGEtKFm5ujKaH8EfjcmnhzTLg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.42.0': - resolution: {integrity: sha512-jwLOw/3CW4H6Vxcry4/buQHk7zm9Ne2YsidzTL1kpiMe4qqrRCwev3dkyWe2YkFmP+iZCQ7zku4KwjcLRoh8ew==} + '@oxfmt/binding-linux-arm-gnueabihf@0.43.0': + resolution: {integrity: sha512-nWYnF3vIFzT4OM1qL/HSf1Yuj96aBuKWSaObXHSWliwAk2rcj7AWd6Lf7jowEBQMo4wCZVnueIGw/7C4u0KTBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.42.0': - resolution: {integrity: sha512-XwXu2vkMtiq2h7tfvN+WA/9/5/1IoGAVCFPiiQUvcAuG3efR97KNcRGM8BetmbYouFotQ2bDal3yyjUx6IPsTg==} + '@oxfmt/binding-linux-arm-musleabihf@0.43.0': + resolution: {integrity: sha512-sFg+NWJbLfupYTF4WELHAPSnLPOn1jiDZ33Z1jfDnTaA+cC3iB35x0FMMZTFdFOz3icRIArncwCcemJFGXu6TQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.42.0': - resolution: {integrity: sha512-ea7s/XUJoT7ENAtUQDudFe3nkSM3e3Qpz4nJFRdzO2wbgXEcjnchKLEsV3+t4ev3r8nWxIYr9NRjPWtnyIFJVA==} + '@oxfmt/binding-linux-arm64-gnu@0.43.0': + resolution: {integrity: sha512-MelWqv68tX6wZEILDrTc9yewiGXe7im62+5x0bNXlCYFOZdA+VnYiJfAihbROsZ5fm90p9C3haFrqjj43XnlAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.42.0': - resolution: {integrity: sha512-+JA0YMlSdDqmacygGi2REp57c3fN+tzARD8nwsukx9pkCHK+6DkbAA9ojS4lNKsiBjIW8WWa0pBrBWhdZEqfuw==} + '@oxfmt/binding-linux-arm64-musl@0.43.0': + resolution: {integrity: sha512-ROaWfYh+6BSJ1Arwy5ujijTlwnZetxDxzBpDc1oBR4d7rfrPBqzeyjd5WOudowzQUgyavl2wEpzn1hw3jWcqLA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.42.0': - resolution: {integrity: sha512-VfnET0j4Y5mdfCzh5gBt0NK28lgn5DKx+8WgSMLYYeSooHhohdbzwAStLki9pNuGy51y4I7IoW8bqwAaCMiJQg==} + '@oxfmt/binding-linux-ppc64-gnu@0.43.0': + resolution: {integrity: sha512-PJRs/uNxmFipJJ8+SyKHh7Y7VZIKQicqrrBzvfyM5CtKi8D7yZKTwUOZV3ffxmiC2e7l1SDJpkBEOyue5NAFsg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.42.0': - resolution: {integrity: sha512-gVlCbmBkB0fxBWbhBj9rcxezPydsQHf4MFKeHoTSPicOQ+8oGeTQgQ8EeesSybWeiFPVRx3bgdt4IJnH6nOjAA==} + '@oxfmt/binding-linux-riscv64-gnu@0.43.0': + resolution: {integrity: sha512-j6biGAgzIhj+EtHXlbNumvwG7XqOIdiU4KgIWRXAEj/iUbHKukKW8eXa4MIwpQwW1YkxovduKtzEAPnjlnAhVQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.42.0': - resolution: {integrity: sha512-zN5OfstL0avgt/IgvRu0zjQzVh/EPkcLzs33E9LMAzpqlLWiPWeMDZyMGFlSRGOdDjuNmlZBCgj0pFnK5u32TQ==} + '@oxfmt/binding-linux-riscv64-musl@0.43.0': + resolution: {integrity: sha512-RYWxAcslKxvy7yri24Xm9cmD0RiANaiEPs007EFG6l9h1ChM69Q5SOzACaCoz4Z9dEplnhhneeBaTWMEdpgIbA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.42.0': - resolution: {integrity: sha512-9X6+H2L0qMc2sCAgO9HS03bkGLMKvOFjmEdchaFlany3vNZOjnVui//D8k/xZAtQv2vaCs1reD5KAgPoIU4msA==} + '@oxfmt/binding-linux-s390x-gnu@0.43.0': + resolution: {integrity: sha512-DT6Q8zfQQy3jxpezAsBACEHNUUixKSYTwdXeXojNHe4DQOoxjPdjr3Szu6BRNjxLykZM/xMNmp9ElOIyDppwtw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.42.0': - resolution: {integrity: sha512-BajxJ6KQvMMdpXGPWhBGyjb2Jvx4uec0w+wi6TJZ6Tv7+MzPwe0pO8g5h1U0jyFgoaF7mDl6yKPW3ykWcbUJRw==} + '@oxfmt/binding-linux-x64-gnu@0.43.0': + resolution: {integrity: sha512-R8Yk7iYcuZORXmCfFZClqbDxRZgZ9/HEidUuBNdoX8Ptx07cMePnMVJ/woB84lFIDjh2ROHVaOP40Ds3rBXFqg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.42.0': - resolution: {integrity: sha512-0wV284I6vc5f0AqAhgAbHU2935B4bVpncPoe5n/WzVZY/KnHgqxC8iSFGeSyLWEgstFboIcWkOPck7tqbdHkzA==} + '@oxfmt/binding-linux-x64-musl@0.43.0': + resolution: {integrity: sha512-F2YYqyvnQNvi320RWZNAvsaWEHwmW3k4OwNJ1hZxRKXupY63expbBaNp6jAgvYs7y/g546vuQnGHQuCBhslhLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.42.0': - resolution: {integrity: sha512-p4BG6HpGnhfgHk1rzZfyR6zcWkE7iLrWxyehHfXUy4Qa5j3e0roglFOdP/Nj5cJJ58MA3isQ5dlfkW2nNEpolw==} + '@oxfmt/binding-openharmony-arm64@0.43.0': + resolution: {integrity: sha512-OE6TdietLXV3F6c7pNIhx/9YC1/2YFwjU9DPc/fbjxIX19hNIaP1rS0cFjCGJlGX+cVJwIKWe8Mos+LdQ1yAJw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.42.0': - resolution: {integrity: sha512-mn//WV60A+IetORDxYieYGAoQso4KnVRRjORDewMcod4irlRe0OSC7YPhhwaexYNPQz/GCFk+v9iUcZ2W22yxQ==} + '@oxfmt/binding-win32-arm64-msvc@0.43.0': + resolution: {integrity: sha512-0nWK6a7pGkbdoypfVicmV9k/N1FwjPZENoqhlTU+5HhZnAhpIO3za30nEE33u6l6tuy9OVfpdXUqxUgZ+4lbZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.42.0': - resolution: {integrity: sha512-3gWltUrvuz4LPJXWivoAxZ28Of2O4N7OGuM5/X3ubPXCEV8hmgECLZzjz7UYvSDUS3grfdccQwmjynm+51EFpw==} + '@oxfmt/binding-win32-ia32-msvc@0.43.0': + resolution: {integrity: sha512-9aokTR4Ft+tRdvgN/pKzSkVy2ksc4/dCpDm9L/xFrbIw0yhLtASLbvoG/5WOTUh/BRPPnfGTsWznEqv0dlOmhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.42.0': - resolution: {integrity: sha512-Wg4TMAfQRL9J9AZevJ/ZNy3uyyDztDYQtGr4P8UyyzIhLhFrdSmz1J/9JT+rv0fiCDLaFOBQnj3f3K3+a5PzDQ==} + '@oxfmt/binding-win32-x64-msvc@0.43.0': + resolution: {integrity: sha512-4bPgdQux2ZLWn3bf2TTXXMHcJB4lenmuxrLqygPmvCJ104Yqzj1UctxSRzR31TiJ4MLaG22RK8dUsVpJtrCz5g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint-tsgolint/darwin-arm64@0.17.3': - resolution: {integrity: sha512-5aDl4mxXWs+Bj02pNrX6YY6v9KMZjLIytXoqolLEo0dfBNVeZUonZgJAa/w0aUmijwIRrBhxEzb42oLuUtfkGw==} + '@oxlint-tsgolint/darwin-arm64@0.18.1': + resolution: {integrity: sha512-CxSd15ZwHn70UJFTXVvy76bZ9zwI097cVyjvUFmYRJwvkQF3VnrTf2oe1gomUacErksvtqLgn9OKvZhLMYwvog==} cpu: [arm64] os: [darwin] - '@oxlint-tsgolint/darwin-x64@0.17.3': - resolution: {integrity: sha512-gPBy4DS5ueCgXzko20XsNZzDe/Cxde056B+QuPLGvz05CGEAtmRfpImwnyY2lAXXjPL+SmnC/OYexu8zI12yHQ==} + '@oxlint-tsgolint/darwin-x64@0.18.1': + resolution: {integrity: sha512-LE7VW/T/VcKhl3Z1ev5BusrxdlQ3DWweSeOB+qpBeur2h8+vCWq+M7tCO29C7lveBDfx1+rNwj4aiUVlA+Qs+g==} cpu: [x64] os: [darwin] - '@oxlint-tsgolint/linux-arm64@0.17.3': - resolution: {integrity: sha512-+pkunvCfB6pB0G9qHVVXUao3nqzXQPo4O3DReIi+5nGa+bOU3J3Srgy+Zb8VyOL+WDsSMJ+U7+r09cKHWhz3hg==} + '@oxlint-tsgolint/linux-arm64@0.18.1': + resolution: {integrity: sha512-2AG8YIXVJJbnM0rcsJmzzWOjZXBu5REwowgUpbHZueF7OYM3wR7Xu8pXEpAojEHAtYYZ3X4rpPoetomkJx7kCw==} cpu: [arm64] os: [linux] - '@oxlint-tsgolint/linux-x64@0.17.3': - resolution: {integrity: sha512-/kW5oXtBThu4FjmgIBthdmMjWLzT3M1TEDQhxDu7hQU5xDeTd60CDXb2SSwKCbue9xu7MbiFoJu83LN0Z/d38g==} + '@oxlint-tsgolint/linux-x64@0.18.1': + resolution: {integrity: sha512-f8vDYPEdiwpA2JaDEkadTXfuqIgweQ8zcL4SX75EN2kkW2oAynjN7cd8m86uXDgB0JrcyOywbRtwnXdiIzXn2A==} cpu: [x64] os: [linux] - '@oxlint-tsgolint/win32-arm64@0.17.3': - resolution: {integrity: sha512-NMELRvbz4Ed4dxg8WiqZxtu3k4OJEp2B9KInZW+BMfqEqbwZdEJY83tbqz2hD1EjKO2akrqBQ0GpRUJEkd8kKw==} + '@oxlint-tsgolint/win32-arm64@0.18.1': + resolution: {integrity: sha512-fBdML05KMDAL9ebWeoHIzkyI86Eq6r9YH5UDRuXJ9vAIo1EnKo0ti7hLUxNdc2dy2FF/T4k98p5wkkXvLyXqfA==} cpu: [arm64] os: [win32] - '@oxlint-tsgolint/win32-x64@0.17.3': - resolution: {integrity: sha512-+pJ7r8J3SLPws5uoidVplZc8R/lpKyKPE6LoPGv9BME00Y1VjT6jWGx/dtUN8PWvcu3iTC6k+8u3ojFSJNmWTg==} + '@oxlint-tsgolint/win32-x64@0.18.1': + resolution: {integrity: sha512-cYZMhNrsq9ZZ3OUWHyawqiS+c8HfieYG0zuZP2LbEuWWPfdZM/22iAlo608J+27G1s9RXQhvgX6VekwWbXbD7A==} cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.57.0': - resolution: {integrity: sha512-C7EiyfAJG4B70496eV543nKiq5cH0o/xIh/ufbjQz3SIvHhlDDsyn+mRFh+aW8KskTyUpyH2LGWL8p2oN6bl1A==} + '@oxlint/binding-android-arm-eabi@1.58.0': + resolution: {integrity: sha512-1T7UN3SsWWxpWyWGn1cT3ASNJOo+pI3eUkmEl7HgtowapcV8kslYpFQcYn431VuxghXakPNlbjRwhqmR37PFOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.57.0': - resolution: {integrity: sha512-9i80AresjZ/FZf5xK8tKFbhQnijD4s1eOZw6/FHUwD59HEZbVLRc2C88ADYJfLZrF5XofWDiRX/Ja9KefCLy7w==} + '@oxlint/binding-android-arm64@1.58.0': + resolution: {integrity: sha512-GryzujxuiRv2YFF7bRy8mKcxlbuAN+euVUtGJt9KKbLT8JBUIosamVhcthLh+VEr6KE6cjeVMAQxKAzJcoN7dg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.57.0': - resolution: {integrity: sha512-0eUfhRz5L2yKa9I8k3qpyl37XK3oBS5BvrgdVIx599WZK63P8sMbg+0s4IuxmIiZuBK68Ek+Z+gcKgeYf0otsg==} + '@oxlint/binding-darwin-arm64@1.58.0': + resolution: {integrity: sha512-7/bRSJIwl4GxeZL9rPZ11anNTyUO9epZrfEJH/ZMla3+/gbQ6xZixh9nOhsZ0QwsTW7/5J2A/fHbD1udC5DQQA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.57.0': - resolution: {integrity: sha512-UvrSuzBaYOue+QMAcuDITe0k/Vhj6KZGjfnI6x+NkxBTke/VoM7ZisaxgNY0LWuBkTnd1OmeQfEQdQ48fRjkQg==} + '@oxlint/binding-darwin-x64@1.58.0': + resolution: {integrity: sha512-EqdtJSiHweS2vfILNrpyJ6HUwpEq2g7+4Zx1FPi4hu3Hu7tC3znF6ufbXO8Ub2LD4mGgznjI7kSdku9NDD1Mkg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.57.0': - resolution: {integrity: sha512-wtQq0dCoiw4bUwlsNVDJJ3pxJA218fOezpgtLKrbQqUtQJcM9yP8z+I9fu14aHg0uyAxIY+99toL6uBa2r7nxA==} + '@oxlint/binding-freebsd-x64@1.58.0': + resolution: {integrity: sha512-VQt5TH4M42mY20F545G637RKxV/yjwVtKk2vfXuazfReSIiuvWBnv+FVSvIV5fKVTJNjt3GSJibh6JecbhGdBw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.57.0': - resolution: {integrity: sha512-qxFWl2BBBFcT4djKa+OtMdnLgoHEJXpqjyGwz8OhW35ImoCwR5qtAGqApNYce5260FQqoAHW8S8eZTjiX67Tsg==} + '@oxlint/binding-linux-arm-gnueabihf@1.58.0': + resolution: {integrity: sha512-fBYcj4ucwpAtjJT3oeBdFBYKvNyjRSK+cyuvBOTQjh0jvKp4yeA4S/D0IsCHus/VPaNG5L48qQkh+Vjy3HL2/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.57.0': - resolution: {integrity: sha512-SQoIsBU7J0bDW15/f0/RvxHfY3Y0+eB/caKBQtNFbuerTiA6JCYx9P1MrrFTwY2dTm/lMgTSgskvCEYk2AtG/Q==} + '@oxlint/binding-linux-arm-musleabihf@1.58.0': + resolution: {integrity: sha512-0BeuFfwlUHlJ1xpEdSD1YO3vByEFGPg36uLjK1JgFaxFb4W6w17F8ET8sz5cheZ4+x5f2xzdnRrrWv83E3Yd8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.57.0': - resolution: {integrity: sha512-jqxYd1W6WMeozsCmqe9Rzbu3SRrGTyGDAipRlRggetyYbUksJqJKvUNTQtZR/KFoJPb+grnSm5SHhdWrywv3RQ==} + '@oxlint/binding-linux-arm64-gnu@1.58.0': + resolution: {integrity: sha512-TXlZgnPTlxrQzxG9ZXU7BNwx1Ilrr17P3GwZY0If2EzrinqRH3zXPc3HrRcBJgcsoZNMuNL5YivtkJYgp467UQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.57.0': - resolution: {integrity: sha512-i66WyEPVEvq9bxRUCJ/MP5EBfnTDN3nhwEdFZFTO5MmLLvzngfWEG3NSdXQzTT3vk5B9i6C2XSIYBh+aG6uqyg==} + '@oxlint/binding-linux-arm64-musl@1.58.0': + resolution: {integrity: sha512-zSoYRo5dxHLcUx93Stl2hW3hSNjPt99O70eRVWt5A1zwJ+FPjeCCANCD2a9R4JbHsdcl11TIQOjyigcRVOH2mw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxlint/binding-linux-ppc64-gnu@1.57.0': - resolution: {integrity: sha512-oMZDCwz4NobclZU3pH+V1/upVlJZiZvne4jQP+zhJwt+lmio4XXr4qG47CehvrW1Lx2YZiIHuxM2D4YpkG3KVA==} + '@oxlint/binding-linux-ppc64-gnu@1.58.0': + resolution: {integrity: sha512-NQ0U/lqxH2/VxBYeAIvMNUK1y0a1bJ3ZicqkF2c6wfakbEciP9jvIE4yNzCFpZaqeIeRYaV7AVGqEO1yrfVPjA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.57.0': - resolution: {integrity: sha512-uoBnjJ3MMEBbfnWC1jSFr7/nSCkcQYa72NYoNtLl1imshDnWSolYCjzb8LVCwYCCfLJXD+0gBLD7fyC14c0+0g==} + '@oxlint/binding-linux-riscv64-gnu@1.58.0': + resolution: {integrity: sha512-X9J+kr3gIC9FT8GuZt0ekzpNUtkBVzMVU4KiKDSlocyQuEgi3gBbXYN8UkQiV77FTusLDPsovjo95YedHr+3yg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.57.0': - resolution: {integrity: sha512-BdrwD7haPZ8a9KrZhKJRSj6jwCor+Z8tHFZ3PT89Y3Jq5v3LfMfEePeAmD0LOTWpiTmzSzdmyw9ijneapiVHKQ==} + '@oxlint/binding-linux-riscv64-musl@1.58.0': + resolution: {integrity: sha512-CDze3pi1OO3Wvb/QsXjmLEY4XPKGM6kIo82ssNOgmcl1IdndF9VSGAE38YLhADWmOac7fjqhBw82LozuUVxD0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.57.0': - resolution: {integrity: sha512-BNs+7ZNsRstVg2tpNxAXfMX/Iv5oZh204dVyb8Z37+/gCh+yZqNTlg6YwCLIMPSk5wLWIGOaQjT0GUOahKYImw==} + '@oxlint/binding-linux-s390x-gnu@1.58.0': + resolution: {integrity: sha512-b/89glbxFaEAcA6Uf1FvCNecBJEgcUTsV1quzrqXM/o4R1M4u+2KCVuyGCayN2UpsRWtGGLb+Ver0tBBpxaPog==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.57.0': - resolution: {integrity: sha512-AghS18w+XcENcAX0+BQGLiqjpqpaxKJa4cWWP0OWNLacs27vHBxu7TYkv9LUSGe5w8lOJHeMxcYfZNOAPqw2bg==} + '@oxlint/binding-linux-x64-gnu@1.58.0': + resolution: {integrity: sha512-0/yYpkq9VJFCEcuRlrViGj8pJUFFvNS4EkEREaN7CB1EcLXJIaVSSa5eCihwBGXtOZxhnblWgxks9juRdNQI7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.57.0': - resolution: {integrity: sha512-E/FV3GB8phu/Rpkhz5T96hAiJlGzn91qX5yj5gU754P5cmVGXY1Jw/VSjDSlZBCY3VHjsVLdzgdkJaomEmcNOg==} + '@oxlint/binding-linux-x64-musl@1.58.0': + resolution: {integrity: sha512-hr6FNvmcAXiH+JxSvaJ4SJ1HofkdqEElXICW9sm3/Rd5eC3t7kzvmLyRAB3NngKO2wzXRCAm4Z/mGWfrsS4X8w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxlint/binding-openharmony-arm64@1.57.0': - resolution: {integrity: sha512-xvZ2yZt0nUVfU14iuGv3V25jpr9pov5N0Wr28RXnHFxHCRxNDMtYPHV61gGLhN9IlXM96gI4pyYpLSJC5ClLCQ==} + '@oxlint/binding-openharmony-arm64@1.58.0': + resolution: {integrity: sha512-R+O368VXgRql1K6Xar+FEo7NEwfo13EibPMoTv3sesYQedRXd6m30Dh/7lZMxnrQVFfeo4EOfYIP4FpcgWQNHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.57.0': - resolution: {integrity: sha512-Z4D8Pd0AyHBKeazhdIXeUUy5sIS3Mo0veOlzlDECg6PhRRKgEsBJCCV1n+keUZtQ04OP+i7+itS3kOykUyNhDg==} + '@oxlint/binding-win32-arm64-msvc@1.58.0': + resolution: {integrity: sha512-Q0FZiAY/3c4YRj4z3h9K1PgaByrifrfbBoODSeX7gy97UtB7pySPUQfC2B/GbxWU6k7CzQrRy5gME10PltLAFQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.57.0': - resolution: {integrity: sha512-StOZ9nFMVKvevicbQfql6Pouu9pgbeQnu60Fvhz2S6yfMaii+wnueLnqQ5I1JPgNF0Syew4voBlAaHD13wH6tw==} + '@oxlint/binding-win32-ia32-msvc@1.58.0': + resolution: {integrity: sha512-Y8FKBABrSPp9H0QkRLHDHOSUgM/309a3IvOVgPcVxYcX70wxJrk608CuTg7w+C6vEd724X5wJoNkBcGYfH7nNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.57.0': - resolution: {integrity: sha512-6PuxhYgth8TuW0+ABPOIkGdBYw+qYGxgIdXPHSVpiCDm+hqTTWCmC739St1Xni0DJBt8HnSHTG67i1y6gr8qrA==} + '@oxlint/binding-win32-x64-msvc@1.58.0': + resolution: {integrity: sha512-bCn5rbiz5My+Bj7M09sDcnqW0QJyINRVxdZ65x1/Y2tGrMwherwK/lpk+HRQCKvXa8pcaQdF5KY5j54VGZLwNg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -3050,8 +3037,8 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.58.2': - resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==} + '@playwright/test@1.59.1': + resolution: {integrity: sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==} engines: {node: '>=18'} hasBin: true @@ -3603,32 +3590,32 @@ packages: cpu: [x64] os: [win32] - '@sentry-internal/browser-utils@10.46.0': - resolution: {integrity: sha512-WB1gBT9G13V02ekZ6NpUhoI1aGHV2eNfjEPthkU2bGBvFpQKnstwzjg7waIRGR7cu+YSW2Q6UI6aQLgBeOPD1g==} + '@sentry-internal/browser-utils@10.47.0': + resolution: {integrity: sha512-bVFRAeJWMBcBCvJKIFCMJ1/yQToL4vPGqfmlnDZeypcxkqUDKQ/Y3ziLHXoDL2sx0lagcgU2vH1QhCQ67Aujjw==} engines: {node: '>=18'} - '@sentry-internal/feedback@10.46.0': - resolution: {integrity: sha512-c4pI/z9nZCQXe9GYEw/hE/YTY9AxGBp8/wgKI+T8zylrN35SGHaXv63szzE1WbI8lacBY8lBF7rstq9bQVCaHw==} + '@sentry-internal/feedback@10.47.0': + resolution: {integrity: sha512-pdvMmi4dQpX5S/vAAzrhHPIw3T3HjUgDNgUiCBrlp7N9/6zGO2gNPhUnNekP+CjgI/z0rvf49RLqlDenpNrMOg==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@10.46.0': - resolution: {integrity: sha512-ub314MWUsekVCuoH0/HJbbimlI24SkV745UW2pj9xRbxOAEf1wjkmIzxKrMDbTgJGuEunug02XZVdJFJUzOcDw==} + '@sentry-internal/replay-canvas@10.47.0': + resolution: {integrity: sha512-A5OY8friSe6g8WAK4L8IeOPiEd9D3Ps40DzRH5j2f6SUja0t90mKMvHRcRf8zq0d4BkdB+JM7tjOkwxpuv8heA==} engines: {node: '>=18'} - '@sentry-internal/replay@10.46.0': - resolution: {integrity: sha512-JBsWeXG6bRbxBFK8GzWymWGOB9QE7Kl57BeF3jzgdHTuHSWZ2mRnAmb1K05T4LU+gVygk6yW0KmdC8Py9Qzg9A==} + '@sentry-internal/replay@10.47.0': + resolution: {integrity: sha512-ScdovxP7hJxgMt70+7hFvwT02GIaIUAxdEM/YPsayZBeCoAukPW8WiwztJfoKtsfPyKJ5A6f0H3PIxTPcA9Row==} engines: {node: '>=18'} - '@sentry/browser@10.46.0': - resolution: {integrity: sha512-80DmGlTk5Z2/OxVOzLNxwolMyouuAYKqG8KUcoyintZqHbF6kO1RulI610HmyUt3OagKeBCqt9S7w0VIfCRL+Q==} + '@sentry/browser@10.47.0': + resolution: {integrity: sha512-rC0agZdxKA5XWfL4VwPOr/rJMogXDqZgnVzr93YWpFn9DMZT/7LzxSJVPIJwRUjx3bFEby3PcTa3YaX7pxm1AA==} engines: {node: '>=18'} - '@sentry/core@10.46.0': - resolution: {integrity: sha512-N3fj4zqBQOhXliS1Ne9euqIKuciHCGOJfPGQLwBoW9DNz03jF+NB8+dUKtrJ79YLoftjVgf8nbgwtADK7NR+2Q==} + '@sentry/core@10.47.0': + resolution: {integrity: sha512-nsYRAx3EWezDut+Zl+UwwP07thh9uY7CfSAi2whTdcJl5hu1nSp2z8bba7Vq/MGbNLnazkd3A+GITBEML924JA==} engines: {node: '>=18'} - '@sentry/react@10.46.0': - resolution: {integrity: sha512-Rb1S+9OuUPVwsz7GWnQ6Kgf3azbsseUymIegg3JZHNcW/fM1nPpaljzTBnuineia113DH0pgMBcdrrZDLaosFQ==} + '@sentry/react@10.47.0': + resolution: {integrity: sha512-ZtJV6xxF8jUVE9e3YQUG3Do0XapG1GjniyLyqMPgN6cNvs/HaRJODf7m60By+VGqcl5XArEjEPTvx8CdPUXDfA==} engines: {node: '>=18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x @@ -3678,42 +3665,42 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@storybook/addon-docs@10.3.3': - resolution: {integrity: sha512-trJQTpOtuOEuNv1Rn8X2Sopp5hSPpb0u0soEJ71BZAbxe4d2Y1d/1MYcxBdRKwncum6sCTsnxTpqQ/qvSJKlTQ==} + '@storybook/addon-docs@10.3.4': + resolution: {integrity: sha512-ohS8fX8UIP3LN6+mDZJLCDS4Qd2rsmGwes6V6fD0sbLOmIyCVY5y68r6NHMMGJKFRwadDQOmtOt8Vc6snExrIQ==} peerDependencies: - storybook: ^10.3.3 + storybook: ^10.3.4 - '@storybook/addon-links@10.3.3': - resolution: {integrity: sha512-tazBHlB+YbU62bde5DWsq0lnxZjcAsPB3YRUpN2hSMfAySsudRingyWrgu5KeOxXhJvKJj0ohjQvGcMx/wgQUA==} + '@storybook/addon-links@10.3.4': + resolution: {integrity: sha512-4Kcdv0U5WEyteN08Mv4oAUXTigF8OHMLA7Bpf1VEQrtJfQsxoUjXzItOHhCyBvphufkZzbU0n6wCC8upEb7X7w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.3.3 + storybook: ^10.3.4 peerDependenciesMeta: react: optional: true - '@storybook/addon-onboarding@10.3.3': - resolution: {integrity: sha512-HZiHfXdcLc29WkYFW+1VAMtJCeAZOOLRYPvs97woJUcZqW8yfWEJ9MWH+j++736SFAv2aqZWNmP47OdBJ/kMkw==} + '@storybook/addon-onboarding@10.3.4': + resolution: {integrity: sha512-59BgxVX3FJxS+cruvk7gfm/0azRJokDeHNNubEhgKIS8ih0ol9vJ7YbAJEP7QWOf22RghWtQSO0yMmTyZTPTyQ==} peerDependencies: - storybook: ^10.3.3 + storybook: ^10.3.4 - '@storybook/addon-themes@10.3.3': - resolution: {integrity: sha512-6PgH1o7yNnWRVj4lAT1DNcX/eZXKgzjhfmzgWh3oFpPfDDvUzpFxx+MClM5f/ZieIbyQscxEuq8li7+e/F5VEQ==} + '@storybook/addon-themes@10.3.4': + resolution: {integrity: sha512-5734o52qtW8svu2vhKPncISWLr1FZrXZoN+u1q0BjTrbL6qTNE1AzIMCBEwn0TNdn16vC3ZsDJOj1dW4dD13cw==} peerDependencies: - storybook: ^10.3.3 + storybook: ^10.3.4 - '@storybook/builder-vite@10.3.3': - resolution: {integrity: sha512-awspKCTZvXyeV3KabL0id62mFbxR5u/5yyGQultwCiSb2/yVgBfip2MAqLyS850pvTiB6QFVM9deOyd2/G/bEA==} + '@storybook/builder-vite@10.3.4': + resolution: {integrity: sha512-dNQyBZpBKvwmhSTpjrsuxxY8FqFCh0hgu5+46h2WbgQ2Te3pO458heWkGb+QO7mC6FmkXO6j6zgYzXticD6F2A==} peerDependencies: - storybook: ^10.3.3 + storybook: ^10.3.4 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/csf-plugin@10.3.3': - resolution: {integrity: sha512-Utlh7zubm+4iOzBBfzLW4F4vD99UBtl2Do4edlzK2F7krQIcFvR2ontjAE8S1FQVLZAC3WHalCOS+Ch8zf3knA==} + '@storybook/csf-plugin@10.3.4': + resolution: {integrity: sha512-WPP0Z39o82WiohPkhPOs6z+9yJ+bVvqPz4d+QUPfE6FMvOOBLojlwOcGx6Xmclyn5H/CKwywFrjuz4mBO/nHhA==} peerDependencies: esbuild: 0.27.2 rollup: 4.59.0 - storybook: ^10.3.3 + storybook: ^10.3.4 vite: '*' webpack: '*' peerDependenciesMeta: @@ -3735,40 +3722,40 @@ packages: 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 - '@storybook/nextjs-vite@10.3.3': - resolution: {integrity: sha512-/OzOo0dSd0eFIAF9ft+ptwaXHa5Xj01cw3NXEtmPdODZXl0eiPmTvWYIJeP26UEPzI2FFSm4fK64ZZJluKpGOA==} + '@storybook/nextjs-vite@10.3.4': + resolution: {integrity: sha512-TgfAgyAx2SvhLPMXFFHskQWMfOeGEY5kDXRC+SqDnuHapUiFignqvuq1Dh8I+Al1QNrFSa/q/TQiFPDHXPVm9g==} peerDependencies: next: ^14.1.0 || ^15.0.0 || ^16.0.0 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 - storybook: ^10.3.3 + storybook: ^10.3.4 typescript: '*' vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - '@storybook/react-dom-shim@10.3.3': - resolution: {integrity: sha512-lkhuh4G3UTreU9M3Iz5Dt32c6U+l/4XuvqLtbe1sDHENZH6aPj7y0b5FwnfHyvuTvYRhtbo29xZrF5Bp9kCC0w==} + '@storybook/react-dom-shim@10.3.4': + resolution: {integrity: sha512-VIm9YzreGubnOtQOZ6iqEfj6KncHvAkrCR/IilqnJq7DidPWuykrFszyajTASRMiY+p+TElOW+O1PGpv55qNGw==} 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 - storybook: ^10.3.3 + storybook: ^10.3.4 - '@storybook/react-vite@10.3.3': - resolution: {integrity: sha512-qHdlBe1hjqFAGXa8JL7bWTLbP/gDqXbWDm+SYCB646NHh5yvVDkZLwigP5Y+UL7M2ASfqFtosnroUK9tcCM2dw==} + '@storybook/react-vite@10.3.4': + resolution: {integrity: sha512-xaMt7NdvlAb+CwXn5TOiluQ+0WkkMN3mZhCThocpblWGoyfmHH7bgQ5ZwzT+IIp8DGOsAi/HkNmSyS7Z8HRLJg==} 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 - storybook: ^10.3.3 + storybook: ^10.3.4 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/react@10.3.3': - resolution: {integrity: sha512-cGG5TbR8Tdx9zwlpsWyBEfWrejm5iWdYF26EwIhwuKq9GFUTAVrQzo0Rs7Tqc3ZyVhRS/YfsRiWSEH+zmq2JiQ==} + '@storybook/react@10.3.4': + resolution: {integrity: sha512-I5ifYqjrqyuhOFjalpy47kMKMXX7QU/qmHj0h/547s9Bg6sEU7xRhJnneXx1RJsEJTySjC4SmGfEU+FJz4Foiw==} 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 - storybook: ^10.3.3 + storybook: ^10.3.4 typescript: '>= 4.9.x' peerDependenciesMeta: typescript: @@ -3971,15 +3958,15 @@ packages: vue: optional: true - '@tanstack/devtools@0.11.0': - resolution: {integrity: sha512-ARRAnEm0HYjKlB2adC9YyDG3fbq5LVjpxPe6Jz583SanXRM1aKrZIGHIA//oRldX3mWIpM4kB6mCyd+CXCLqhA==} + '@tanstack/devtools@0.11.1': + resolution: {integrity: sha512-g3nHgVP76kT9190d6O32AjANoEnujLEB+51PDtBzlah8hvKeEygK53cunN+HXhjlfhM4PoOCi8/B96cdJVSnLg==} engines: {node: '>=18'} hasBin: true peerDependencies: solid-js: 1.9.11 - '@tanstack/eslint-plugin-query@5.95.2': - resolution: {integrity: sha512-EYUFRaqjBep4EHMPpZR12sXP7Kr5qv9iDIlq93NfbhHwhITaW6Txu3ROO6dLFz5r84T8p+oZXBG77pa2Wuok7A==} + '@tanstack/eslint-plugin-query@5.96.1': + resolution: {integrity: sha512-BDJU+Q+zESjarSSFmbzpCBh+1wDxwW+DyQlvwIukF24MHYOoRPH4ouJRTlDdbp3BnIkeylZaHHSgIvxY9lgI/g==} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ^5.4.0 @@ -3987,11 +3974,11 @@ packages: typescript: optional: true - '@tanstack/form-core@1.28.5': - resolution: {integrity: sha512-8lYnduHHfP6uaXF9+2OLnh3Fo27tH4TdtekWLG2b/Bp26ynbrWG6L4qhBgEb7VcvTpJw/RjvJF/JyFhZkG3pfQ==} + '@tanstack/form-core@1.28.6': + resolution: {integrity: sha512-4zroxL6VDj5O+w7l3dYZnUeL/h30KtNSV7UWzKAL7cl+8clMFdISPDlDlluS37As7oqvPVKo8B83VlIBvgmRog==} - '@tanstack/form-devtools@0.2.19': - resolution: {integrity: sha512-AmIq5MBcop+gYKFutowGU7py9idorJkp4a4lsR2ZIZ5qa4ekl4jWqj6Vu+kvRPpJiBl3QpiFbm9bjBvO2DueFA==} + '@tanstack/form-devtools@0.2.20': + resolution: {integrity: sha512-4cW/eU5DBTrWP53mxwHKp4NQWTIQ3XCA91pMWK7dFNNClIwFnxoSJoKwyUa6b8kRIO6uq1Sjk2mhkAtj5kB22A==} peerDependencies: solid-js: 1.9.11 @@ -3999,14 +3986,14 @@ packages: resolution: {integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==} engines: {node: '>=18'} - '@tanstack/query-core@5.95.2': - resolution: {integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==} + '@tanstack/query-core@5.96.1': + resolution: {integrity: sha512-u1yBgtavSy+N8wgtW3PiER6UpxcplMje65yXnnVgiHTqiMwLlxiw4WvQDrXyn+UD6lnn8kHaxmerJUzQcV/MMg==} - '@tanstack/query-devtools@5.95.2': - resolution: {integrity: sha512-QfaoqBn9uAZ+ICkA8brd1EHj+qBF6glCFgt94U8XP5BT6ppSsDBI8IJ00BU+cAGjQzp6wcKJL2EmRYvxy0TWIg==} + '@tanstack/query-devtools@5.96.1': + resolution: {integrity: sha512-A4+uQTWbiqZDgrLeyjpFYLfMaWaKWpkwTkR1cUfocVj6vPYgym7QTG2se9A01WSxceDdmgxOqvn1ivcTvgWD8w==} - '@tanstack/react-devtools@0.10.0': - resolution: {integrity: sha512-cUMzOQb1IHmkb8MsD0TrxHT8EL92Rx3G0Huq+IFkWeoaZPGlIiaIcGTpS5VvQDeI4BVUT+ZGt6CQTpx8oSTECg==} + '@tanstack/react-devtools@0.10.1': + resolution: {integrity: sha512-cvcd0EqN7Q2LYatQXxFhOkEa9RUQXZlhXnM1mwuibxmyRX+CMyohUZcgjodtIfgh+RT0Pmvt49liTdZby5ovZw==} engines: {node: '>=18'} peerDependencies: '@types/react': '>=16.8' @@ -4014,13 +4001,13 @@ packages: react: '>=16.8' react-dom: '>=16.8' - '@tanstack/react-form-devtools@0.2.19': - resolution: {integrity: sha512-bILhij/Ye4T1YtyvNctmIShBL0gBp1jnWq0/9KASDFxjXjDUTmFE4TwAzYnwXbARjf6x8ZUW5MuJbi7VjpIGFw==} + '@tanstack/react-form-devtools@0.2.20': + resolution: {integrity: sha512-aXtorJ7p3TbzOapjaxbjGX/c0uQh/wbYSwgzFt3qatNMb1xL4HM/j00Bx7hDENZNBCf8MF8YEEtvpBmnGb4rnQ==} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/react-form@1.28.5': - resolution: {integrity: sha512-CL8IeWkeXnEEDsHt5wBuIOZvSYrKiLRtsC9ca0LzfJJ22SYCma9cBmh1UX1EBX0o3gH2U21PmUf+y5f9OJNoEQ==} + '@tanstack/react-form@1.28.6': + resolution: {integrity: sha512-dRxwKeNW3uuJvf0sXsIQ2compFMnIJNk9B436Lx0fqkqK+CBvA1tNmEdX+faoCpuQ5Wua3c8ahVibJ65cpkijA==} peerDependencies: '@tanstack/react-start': '*' react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -4028,14 +4015,14 @@ packages: '@tanstack/react-start': optional: true - '@tanstack/react-query-devtools@5.95.2': - resolution: {integrity: sha512-AFQFmbznVkbtfpx8VJ2DylW17wWagQel/qLstVLkYmNRo2CmJt3SNej5hvl6EnEeljJIdC3BTB+W7HZtpsH+3g==} + '@tanstack/react-query-devtools@5.96.1': + resolution: {integrity: sha512-3ZZ58fupIXtJFM0evj8YvWrauaZPUrQEqRYaq9e4ER/WPqTKeWEucqWCXn+KJLgWlcot5JIIUtQNynbovGjTTA==} peerDependencies: - '@tanstack/react-query': ^5.95.2 + '@tanstack/react-query': ^5.96.1 react: ^18 || ^19 - '@tanstack/react-query@5.95.2': - resolution: {integrity: sha512-/wGkvLj/st5Ud1Q76KF1uFxScV7WeqN1slQx5280ycwAyYkIPGaRZAEgHxe3bjirSd5Zpwkj6zNcR4cqYni/ZA==} + '@tanstack/react-query@5.96.1': + resolution: {integrity: sha512-2X7KYK5KKWUKGeWCVcqxXAkYefJtrKB7tSKWgeG++b0H6BRHxQaLSSi8AxcgjmUnnosHuh9WsFZqvE16P1WCzA==} peerDependencies: react: ^18 || ^19 @@ -4347,13 +4334,13 @@ packages: '@types/zen-observable@0.8.3': resolution: {integrity: sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==} - '@typescript-eslint/eslint-plugin@8.57.2': - resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} + '@typescript-eslint/eslint-plugin@8.58.0': + resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.2 + '@typescript-eslint/parser': ^8.58.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/parser@8.57.2': resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==} @@ -4362,12 +4349,25 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.58.0': + resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/project-service@8.57.2': resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.58.0': + resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/rule-tester@8.57.2': resolution: {integrity: sha512-cb5m0irr1449waTuYzGi4KD3SGUH3khL4ta/o9lzShvT7gnIwR5qVhU0VM0p966kCrtFId8hwmkvz1fOElsxTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4378,29 +4378,49 @@ packages: resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.58.0': + resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.57.2': resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.57.2': - resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==} + '@typescript-eslint/tsconfig-utils@8.58.0': + resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.58.0': + resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/types@8.57.2': resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.58.0': + resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.57.2': resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.58.0': + resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@8.57.2': resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4408,47 +4428,58 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.58.0': + resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/visitor-keys@8.57.2': resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260329.1': - resolution: {integrity: sha512-zS1thDk7luD82nXVwvMd97F7FgxAE6jGtSmnHeXdaQ+6hJQcQLOVkfUdaehhdodqKDapWA2jEURxQAYjDGvv3g==} + '@typescript-eslint/visitor-keys@8.58.0': + resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260401.1': + resolution: {integrity: sha512-9PCc1D4/zLic30g1upOw6ZmUl98fnrXYRv5wIZ6fxm1zZAObieRKUX3Jbr8M9N8iQQFxPIZPniIScsxAbmbJvw==} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260329.1': - resolution: {integrity: sha512-3IJ2qmpjQ1OXpZNUhJRjF1+SbDuqGC14Ug8DjWJlPBp06isi1fcJph90f5qW//FxEsNnJPYRcNwpP0A2RbTASg==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260401.1': + resolution: {integrity: sha512-wwzca1KrjSVC6ApXfITsg/wF4GGbhVYebc7zChpuyi+phrHfw6ThTPB5XFUH4nA32vqw0Hn/6KACipMgzg8GPA==} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260329.1': - resolution: {integrity: sha512-gQb6SjB5JlUKDaDuz6mv/m+/OBWVDlcjHINFOykBZZYZtgxBx6nEDjLrT8TiJRjmHEG6hSbv+yisUL9IThWycA==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260401.1': + resolution: {integrity: sha512-1hgKibGi4QZF1J0hKltgY4nj4yKDmI4Ang5ar80I+YeUdGxV/fP2kU3bJang7QtHuSso6W+a52SF62zgqbzdow==} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260329.1': - resolution: {integrity: sha512-WKSSJrH611DFFAg6YCkgbnkdy0a4RRpzvDpNXtPzLTbMYC5oJdq3Dpvncx5nrJvGh4J4yvzXoMxraGPyygqGLw==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260401.1': + resolution: {integrity: sha512-bbIkRZYjtyoyCJ3wFES7qn3EwYO5Go1hxArL5X5oWiBmUHq5gMIxTZDv5mpWxopVf9Eyh4ErHefXjf1s4J+6Ag==} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260329.1': - resolution: {integrity: sha512-kg4r+ssxoEWruBynUg9bFMdcMpo5NupzAPqNBlV8uWbmYGZjaPLonFWAi9ZZMiVJY/x5ZQ9GBl6xskwLdd3PJQ==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260401.1': + resolution: {integrity: sha512-1ysZ4c/Wa3RYIlrwVceYlhb1m1hxQ4P2x92valZXH0bNWEPb+oiQ4Yf35O/vi5h8zDdX/ZQ59vivYl27cF1VVA==} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260329.1': - resolution: {integrity: sha512-Qi4lddVxl5MG7Tk67gYhCFnoqqLGd4TvaI8RN4qHFjt3GV8s6c+0cQGsJXJnVgMx27qbyDTdsyAa2pvb42rYcQ==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260401.1': + resolution: {integrity: sha512-fZYLCRe36y1BuzRFFpU2/RQ212l6Y1dccRMh8oTB8HlAVAAwtbkb6cjEn0Ablj4Dy16+Ih8R9uHsxPLNhtKw1Q==} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260329.1': - resolution: {integrity: sha512-+k5+usuB8HZ6Xc+enLdb95ZJd25bQqsnI1zXxfRCHP+RS9mxs70Mi9ezQz3lKOLZFFXShSH7iW9iulm8KwVzCQ==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260401.1': + resolution: {integrity: sha512-I6ses4SjWvpbvSpm1BPFRrDeqrzu7JTchJG/a26iwwmTLv4fAGLc5/o6Kv9Naygozop1W3KOcVM5i3A9oxiIjQ==} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260329.1': - resolution: {integrity: sha512-v5lJ0TgSt2m9yVk2xoj9+NH/gTDeWTLaWGPx6MJsUKOYd6bmCJhHbMcWmb8d/zlfhE9ffpixUKYj62CdYfriqA==} + '@typescript/native-preview@7.0.0-dev.20260401.1': + resolution: {integrity: sha512-xJcN9WlY/P6xKjCMH4+DTzZSj/EKR6H9avuqUKs4eKyPEvaQ4bX+9Ys3Vl2qhlUaD7IRWY7HN7db0LHAGlWRSA==} hasBin: true '@ungap/structured-clone@1.3.0': @@ -4516,17 +4547,17 @@ packages: react-server-dom-webpack: optional: true - '@vitest/coverage-v8@4.1.1': - resolution: {integrity: sha512-nZ4RWwGCoGOQRMmU/Q9wlUY540RVRxJZ9lxFsFfy0QV7Zmo5VVBhB6Sl9Xa0KIp2iIs3zWfPlo9LcY1iqbpzCw==} + '@vitest/coverage-v8@4.1.2': + resolution: {integrity: sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==} peerDependencies: - '@vitest/browser': 4.1.1 - vitest: 4.1.1 + '@vitest/browser': 4.1.2 + vitest: 4.1.2 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/eslint-plugin@1.6.13': - resolution: {integrity: sha512-ui7JGWBoQpS5NKKW0FDb1eTuFEZ5EupEv2Psemuyfba7DfA5K52SeDLelt6P4pQJJ/4UGkker/BgMk/KrjH3WQ==} + '@vitest/eslint-plugin@1.6.14': + resolution: {integrity: sha512-PXZ5ysw4eHU9h8nDtBvVcGC7Z2C/T9CFdheqSw1NNXFYqViojub0V9bgdYI67iBTOcra2mwD0EYldlY9bGPf2Q==} engines: {node: '>=18'} peerDependencies: '@typescript-eslint/eslint-plugin': '*' @@ -4547,8 +4578,8 @@ packages: '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.1.1': - resolution: {integrity: sha512-GM+TEQN5WhOygr1lp7skeVjdLPqqWMHsfzXrcHAqZJi/lIVh63H0kaRCY8MDhNWikx19zBUK8ceaLB7X5AH9NQ==} + '@vitest/pretty-format@4.1.2': + resolution: {integrity: sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==} '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} @@ -4556,16 +4587,16 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.1.1': - resolution: {integrity: sha512-cNxAlaB3sHoCdL6pj6yyUXv9Gry1NHNg0kFTXdvSIZXLHsqKH7chiWOkwJ5s5+d/oMwcoG9T0bKU38JZWKusrQ==} + '@vitest/utils@4.1.2': + resolution: {integrity: sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==} - '@voidzero-dev/vite-plus-core@0.1.14': - resolution: {integrity: sha512-CCWzdkfW0fo0cQNlIsYp5fOuH2IwKuPZEb2UY2Z8gXcp5pG74A82H2Pthj0heAuvYTAnfT7kEC6zM+RbiBgQbg==} + '@voidzero-dev/vite-plus-core@0.1.15': + resolution: {integrity: sha512-0qAbqwcvQwiC8xGKSSuFtsjJUEM4LZzpXF7dffRazghGEQ8HH8NAvVryp/PiMSFwreJlV3rujwL4amKjnwCHpg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.21.4 - '@tsdown/exe': 0.21.4 + '@tsdown/css': 0.21.7 + '@tsdown/exe': 0.21.7 '@types/node': ^20.19.0 || >=22.12.0 '@vitejs/devtools': ^0.1.0 esbuild: 0.27.2 @@ -4578,7 +4609,7 @@ packages: sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 - typescript: ^5.0.0 + typescript: ^5.0.0 || ^6.0.0 unplugin-unused: ^0.5.0 yaml: 2.8.3 peerDependenciesMeta: @@ -4619,54 +4650,54 @@ packages: yaml: optional: true - '@voidzero-dev/vite-plus-darwin-arm64@0.1.14': - resolution: {integrity: sha512-q2ESUSbapwsxVRe/KevKATahNRraoX5nti3HT9S3266OHT5sMroBY14jaxTv74ekjQc9E6EPhyLGQWuWQuuBRw==} + '@voidzero-dev/vite-plus-darwin-arm64@0.1.15': + resolution: {integrity: sha512-arFq8phXg96rQ5J+FYvkBYdEGxIhP1ePAXlUeQY2hV8hJPzse+CdxusWxcjfpTgvFi+dpsKzE4KSNS22PyBo7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@voidzero-dev/vite-plus-darwin-x64@0.1.14': - resolution: {integrity: sha512-UpcDZc9G99E/4HDRoobvYHxMvFOG5uv3RwEcq0HF70u4DsnEMl1z8RaJLeWV7a09LGwj9Q+YWC3Z4INWnTLs8g==} + '@voidzero-dev/vite-plus-darwin-x64@0.1.15': + resolution: {integrity: sha512-2eY+gTEIZvLH33nQmcL2tKlf+iHfClaqaSMYIlUpTp/CN+xqh4Ir4y2vN1XGEuFDIW0FshSZTg3ulPtduneEDA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.14': - resolution: {integrity: sha512-GIjn35RABUEDB9gHD26nRq7T72Te+Qy2+NIzogwEaUE728PvPkatF5gMCeF4sigCoc8c4qxDwsG+A2A2LYGnDg==} + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.15': + resolution: {integrity: sha512-jJgz84pp61oHeXAYIUXKsVwQsMQ7NHK0+dBe6v1Q+Z034xXsyBrxi/JASSeVmCpAd6CN+xzOCsfMyn3whVTTxQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.14': - resolution: {integrity: sha512-qo2RToGirG0XCcxZ2AEOuonLM256z6dNbJzDDIo5gWYA+cIKigFQJbkPyr25zsT1tsP2aY0OTxt2038XbVlRkQ==} + '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.15': + resolution: {integrity: sha512-F0Wig+We0ERhGecf3fDIwM/kfqT0vP2htH0vKUnV/inHIVbPc1MsrjcExX1eJ6KFSp5YTfchRN8HGecqtsudPA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.14': - resolution: {integrity: sha512-BsMWKZfdfGcYLxxLyaePpg6NW54xqzzcfq8sFUwKfwby0kgOKQ4WymUXyBvO9nnBb0ZPsJQrV0sx+Onac/LTaw==} + '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.15': + resolution: {integrity: sha512-aT5Yr2GphvRjoc2URmELDqjWwhe5VPvyy15Tzum+jPhEjY4I/lPXxKXEROjQe3TIv6MmFSHCe3oNCSaFdUE1pA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@voidzero-dev/vite-plus-linux-x64-musl@0.1.14': - resolution: {integrity: sha512-mOrEpj7ntW9RopGbcOYG/L0pOs0qHzUG4Vz7NXbuf4dbOSlY4JjyoMOIWxjKQORQht02Hzuf8YrMGNwa6AjVSQ==} + '@voidzero-dev/vite-plus-linux-x64-musl@0.1.15': + resolution: {integrity: sha512-Q6qMBMdVp5v84YVzFvMUpzVIHLfJuwZQR/KUtAOn/hzpfNITigKR2GrZZDgQvszFW+0CPhDFcK3kqLkxlJCdFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@voidzero-dev/vite-plus-test@0.1.14': - resolution: {integrity: sha512-rjF+qpYD+5+THOJZ3gbE3+cxsk5sW7nJ0ODK7y6ZKeS4amREUMedEDYykzKBwR7OZDC/WwE90A0iLWCr6qAXhA==} + '@voidzero-dev/vite-plus-test@0.1.15': + resolution: {integrity: sha512-jxMUEX6PDpzMUz+KOVOoB8HiODMf5mWjH19pof0k9l/RZT4iLDyVXB+p9PoWjbVrEMMGzq9BTOVob7wfOZeZEA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/ui': 4.1.1 + '@vitest/ui': 4.1.2 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -4684,14 +4715,14 @@ packages: jsdom: optional: true - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.14': - resolution: {integrity: sha512-7iC+Ig+8D/zACy0IJf7w/vQ7duTjux9Ttmm3KOBdVWH4dl3JihydA7+SQVMhz71a4WiqJ6nPidoG8D6hUP4MVQ==} + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.15': + resolution: {integrity: sha512-EePrs+NIUy3gE60qaXPXzj8mw+JAXEBfGKsfweYBgNK6jo9ZXZto5ViKTuQsVVuWLVaELZSjoudbkzXB8wnJoQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.14': - resolution: {integrity: sha512-yRJ/8yAYFluNHx0Ej6Kevx65MIeM3wFKklnxosVZRlz2ZRL1Ea1Qh3tWATr3Ipk1ciRxBv8KJgp6zXqjxtZSoQ==} + '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.15': + resolution: {integrity: sha512-vfYfwOG/5a/WUtgGrbUCatRkc5x0Rq/9GDlCzQQIAFGDB5BfyIjGbdCOqamQWOh+yQbeOHwvgAhqjZ7Dv1oo/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -4768,6 +4799,9 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + '@xstate/fsm@1.6.5': resolution: {integrity: sha512-b5o1I6aLNeYlU/3CPlj/Z91ybk1gUsKT+5NAJI+2W4UjvS5KLG28K9v5UvNoFVjHV8PajVZ00RH3vnjyQO7ZAw==} @@ -4940,8 +4974,8 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@1.1.13: + resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} brace-expansion@5.0.5: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} @@ -4977,20 +5011,10 @@ packages: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: 0.27.2 - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -5134,8 +5158,8 @@ packages: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - code-inspector-plugin@1.4.5: - resolution: {integrity: sha512-yp3zHd5AZhtVoBNOzKQuJVo1wZe7AIO2vAiVhF8WIAK02IwM9+gY+Pr9deajx+XyJLbzMW+3CgdfLIh+xxW2Hg==} + code-inspector-plugin@1.5.0: + resolution: {integrity: sha512-l9MB8MJy/ZRCYZWcJFvPPBWVjQw/3F9d3/S8pPIzdikY8NXfeA8LCw9vNr+maO7/CQZxaJtExH/LDDXUNCWhig==} collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -5168,10 +5192,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -5191,16 +5211,15 @@ packages: compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} confbox@0.2.4: resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -5662,8 +5681,8 @@ packages: peerDependencies: eslint: ^9.5.0 || ^10.0.0 - eslint-flat-config-utils@3.0.2: - resolution: {integrity: sha512-mPvevWSDQFwgABvyCurwIu6ZdKxGI5NW22/BGDwA1T49NO6bXuxbV9VfJK/tkQoNyPogT6Yu1d57iM0jnZVWmg==} + eslint-flat-config-utils@3.1.0: + resolution: {integrity: sha512-lM+Nwo2CzpuTS/RASQExlEIwk/BQoKqJWX6VbDlLMb/mveqvt9MMrRXFEkG3bseuK6g8noKZLeX82epkILtv4A==} eslint-json-compat-utils@0.2.3: resolution: {integrity: sha512-RbBmDFyu7FqnjE8F0ZxPNzx5UaptdeS9Uu50r7A+D7s/+FCX+ybiyViYEgFUaFIFqSWJgZRTpL5d8Kanxxl2lQ==} @@ -5732,11 +5751,11 @@ packages: peerDependencies: eslint: '*' - eslint-plugin-import-lite@0.5.2: - resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==} + eslint-plugin-import-lite@0.6.0: + resolution: {integrity: sha512-80vevx2A7i3H7n1/6pqDO8cc5wRz6OwLDvIyVl9UflBV1N1f46e9Ihzi65IOLYoSxM6YykK2fTw1xm0Ixx6aTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=9.0.0' + eslint: ^9.0.0 || ^10.0.0 eslint-plugin-jsdoc@62.8.1: resolution: {integrity: sha512-e9358PdHgvcMF98foNd3L7hVCw70Lt+YcSL7JzlJebB8eT5oRJtW6bHMQKoAwJtw6q0q0w/fRIr2kwnHdFDI6A==} @@ -5750,11 +5769,11 @@ packages: peerDependencies: eslint: '>=9.38.0' - eslint-plugin-markdown-preferences@0.40.3: - resolution: {integrity: sha512-R3CCAEFwnnYXukTdtvdsamGjbTgVs9UZKqMKhNeWNXzFtOP1Frc89bgbd56lJUN7ASaxgvzc5fUpKvDCOTtDpg==} + eslint-plugin-markdown-preferences@0.41.0: + resolution: {integrity: sha512-Pu150jKH1Cf5sW/Igck0VbuT0A9qFpIPG1dDvyAt2lG8tA3VzPDkwxBusO8JqQ9NRIrm3pat0X6cfanSki3WZQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@eslint/markdown': ^7.4.0 + '@eslint/markdown': ^7.4.0 || ^8.0.0 eslint: '>=9.0.0' eslint-plugin-n@17.24.0: @@ -5788,12 +5807,6 @@ packages: eslint: ^10.0.0 typescript: '*' - eslint-plugin-react-hooks@7.0.1: - resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} - engines: {node: '>=18'} - 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@3.0.0: resolution: {integrity: sha512-pAtOZST5/NhWIa/I5yz7H1HEZTtCY7LHMhzmN9zvaOdTWyZYtz2g9pxPRDBnkR9uSmHsNt44gj+2JSAD4xwgew==} engines: {node: '>=22.0.0'} @@ -5838,11 +5851,11 @@ packages: peerDependencies: eslint: ^8.0.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-storybook@10.3.3: - resolution: {integrity: sha512-jo8wZvKaJlxxrNvf4hCsROJP3CdlpaLiYewAs5Ww+PJxCrLelIi5XVHWOAgBvvr3H9WDKvUw8xuvqPYqAlpkFg==} + eslint-plugin-storybook@10.3.4: + resolution: {integrity: sha512-6jRb9ucYWKRkbuxpN+83YA3wAWuKn6rp+OVXivy0FPa82v8eciHG8OidbznmzrfcRJYkNWUb7GrPjG/rf4Vqaw==} peerDependencies: eslint: '>=8' - storybook: ^10.3.3 + storybook: ^10.3.4 eslint-plugin-toml@1.3.1: resolution: {integrity: sha512-1l00fBP03HIt9IPV7ZxBi7x0y0NMdEZmakL1jBD6N/FoKBvfKxPw5S8XkmzBecOnFBTn5Z8sNJtL5vdf9cpRMQ==} @@ -5850,8 +5863,8 @@ packages: peerDependencies: eslint: '>=9.38.0' - eslint-plugin-unicorn@63.0.0: - resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==} + eslint-plugin-unicorn@64.0.0: + resolution: {integrity: sha512-rNZwalHh8i0UfPlhNwg5BTUO1CMdKNmjqe+TgzOTZnpKoi8VBgsW7u9qCHIdpxEzZ1uwrJrPF0uRb7l//K38gA==} engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: eslint: '>=9.38.0' @@ -6031,9 +6044,18 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-string-truncated-width@1.2.1: + resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==} + + fast-string-width@1.1.0: + resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-wrap-ansi@0.1.6: + resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -6085,9 +6107,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - fix-dts-default-cjs-exports@1.0.1: - resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -6186,10 +6205,6 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@16.5.0: - resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} - engines: {node: '>=18'} - globals@17.4.0: resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} engines: {node: '>=18'} @@ -6268,12 +6283,6 @@ packages: hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - - hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - hex-rgb@4.3.0: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} @@ -6284,8 +6293,8 @@ packages: highlightjs-vue@1.0.0: resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - hono@4.12.9: - resolution: {integrity: sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==} + hono@4.12.10: + resolution: {integrity: sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.2: @@ -6316,8 +6325,8 @@ packages: i18next-resources-to-backend@1.2.1: resolution: {integrity: sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw==} - i18next@25.10.10: - resolution: {integrity: sha512-cqUW2Z3EkRx7NqSyywjkgCLK7KLCL6IFVFcONG7nVYIJ3ekZ1/N5jUsihHV6Bq37NfhgtczxJcxduELtjTwkuQ==} + i18next@26.0.3: + resolution: {integrity: sha512-1571kXINxHKY7LksWp8wP+zP0YqHSSpl/OW0Y0owFEf2H3s8gCAffWaZivcz14rMkOvn3R/psiQxVsR9t2Nafg==} peerDependencies: typescript: ^5 || ^6 peerDependenciesMeta: @@ -6524,10 +6533,6 @@ packages: react: optional: true - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - js-audio-recorder@1.0.7: resolution: {integrity: sha512-JiDODCElVHGrFyjGYwYyNi7zCbKk9va9C77w+zCPMmi4C6ix7zsX2h3ddHugmo4dOTOTCym9++b/wVW9nC0IaA==} @@ -6584,6 +6589,9 @@ packages: resolution: {integrity: sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} @@ -6604,8 +6612,8 @@ packages: khroma@2.1.0: resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} - knip@6.1.0: - resolution: {integrity: sha512-n5eVbJP7HXmwTsiJcELWJe2O1ESxyCTNxJzRTIECDYDTM465qnqk7fL2dv6ae3NUFvFWorZvGlh9mcwxwJ5Xgw==} + knip@6.2.0: + resolution: {integrity: sha512-4OMUMJARvNble8e8TeFv12flp4fKzAITrQec1eKO4g2eA4HnNqEa8CXy2UOPLjuYuAETpe0N0r25jF9yY9FLig==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -6727,20 +6735,9 @@ packages: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - linebreak@1.1.0: resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - loader-runner@4.3.1: resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} @@ -6753,8 +6750,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash-es@4.17.23: - resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + lodash-es@4.18.0: + resolution: {integrity: sha512-koAgswPPA+UTaPN64Etp+PGP+WT6oqOS2NMi5yDkMaiGw9qY4VxQbQF0mtKMyr4BlTznWyzePV5UpECTJQmSUA==} + deprecated: Bad release. Please use lodash-es@4.17.23 instead. lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -6910,8 +6908,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - mermaid@11.13.0: - resolution: {integrity: sha512-fEnci+Immw6lKMFI8sqzjlATTyjLkRa6axrEgLV2yHTfv8r+h1wjFbV6xeRtd4rUV1cS4EpR9rwp3Rci7TRWDw==} + mermaid@11.14.0: + resolution: {integrity: sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==} micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -7143,8 +7141,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@16.2.1: - resolution: {integrity: sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==} + next@16.2.2: + resolution: {integrity: sha512-i6AJdyVa4oQjyvX/6GeER8dpY/xlIV+4NMv/svykcLtURJSy/WzDnnUk/TM4d0uewFHK7xSQz4TbIwPgjky+3A==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -7256,21 +7254,21 @@ packages: oxc-resolver@11.19.1: resolution: {integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==} - oxfmt@0.42.0: - resolution: {integrity: sha512-QhejGErLSMReNuZ6vxgFHDyGoPbjTRNi6uGHjy0cvIjOQFqD6xmr/T+3L41ixR3NIgzcNiJ6ylQKpvShTgDfqg==} + oxfmt@0.43.0: + resolution: {integrity: sha512-KTYNG5ISfHSdmeZ25Xzb3qgz9EmQvkaGAxgBY/p38+ZiAet3uZeu7FnMwcSQJg152Qwl0wnYAxDc+Z/H6cvrwA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - oxlint-tsgolint@0.17.3: - resolution: {integrity: sha512-1eh4bcpOMw0e7+YYVxmhFc2mo/V6hJ2+zfukqf+GprvVn3y94b69M/xNrYLmx5A+VdYe0i/bJ2xOs6Hp/jRmRA==} + oxlint-tsgolint@0.18.1: + resolution: {integrity: sha512-Hgb0wMfuXBYL0ddY+1hAG8IIfC40ADwPnBuUaC6ENAuCtTF4dHwsy7mCYtQ2e7LoGvfoSJRY0+kqQRiembJ/jQ==} hasBin: true - oxlint@1.57.0: - resolution: {integrity: sha512-DGFsuBX5MFZX9yiDdtKjTrYPq45CZ8Fft6qCltJITYZxfwYjVdGf/6wycGYTACloauwIPxUnYhBVeZbHvleGhw==} + oxlint@1.58.0: + resolution: {integrity: sha512-t4s9leczDMqlvOSjnbCQe7gtoLkWgBGZ7sBdCJ9EOj5IXFSG/X7OAzK4yuH4iW+4cAYe8kLFbC8tuYMwWZm+Cg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - oxlint-tsgolint: '>=0.15.0' + oxlint-tsgolint: '>=0.18.0' peerDependenciesMeta: oxlint-tsgolint: optional: true @@ -7398,10 +7396,6 @@ packages: pinyin-pro@3.28.0: resolution: {integrity: sha512-mMRty6RisoyYNphJrTo3pnvp3w8OMZBrXm9YSWkxhAfxKj1KZk2y8T2PDIZlDDRsvZ0No+Hz6FI4sZpA6Ey25g==} - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - pixelmatch@7.1.0: resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} hasBin: true @@ -7412,13 +7406,13 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.58.2: - resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} + playwright-core@1.59.1: + resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} engines: {node: '>=18'} hasBin: true - playwright@1.58.2: - resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==} + playwright@1.59.1: + resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} engines: {node: '>=18'} hasBin: true @@ -7443,24 +7437,6 @@ packages: resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} engines: {node: '>= 10.12'} - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: 2.8.3 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} @@ -7602,10 +7578,10 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - react-i18next@16.6.6: - resolution: {integrity: sha512-ZgL2HUoW34UKUkOV7uSQFE1CDnRPD+tCR3ywSuWH7u2iapnz86U8Bi3Vrs620qNDzCf1F47NxglCEkchCTDOHw==} + react-i18next@17.0.2: + resolution: {integrity: sha512-shBftH2vaTWK2Bsp7FiL+cevx3xFJlvFxmsDFQSrJc+6twHkP0tv/bGa01VVWzpreUVVwU+3Hev5iFqRg65RwA==} peerDependencies: - i18next: '>= 25.10.9' + i18next: '>= 26.0.1' react: '>= 16.8.0' react-dom: '*' react-native: '*' @@ -7847,10 +7823,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -8051,8 +8023,8 @@ packages: resolution: {integrity: sha512-9SN0XIjBBXCT6ZXXVnScJN4KP2RyFg6B8sEoFlugVHMANysfaEni4LTWlvUQQ/R0wgZl1Ovt9KBQbzn21kHoZA==} engines: {node: '>=20.19.0'} - storybook@10.3.3: - resolution: {integrity: sha512-tMoRAts9EVqf+mEMPLC6z1DPyHbcPe+CV1MhLN55IKsl0HxNjvVGK44rVPSePbltPE6vIsn4bdRj6CCUt8SJwQ==} + storybook@10.3.4: + resolution: {integrity: sha512-866YXZy9k59tLPl9SN3KZZOFeBC/swxkuBVtW8iQjJIzfCrvk7zXQd8RSQ4ignmCdArVvY4lGMCAT4yNaZSt1g==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -8142,11 +8114,6 @@ packages: stylis@4.3.6: resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - sucrase@3.35.1: - resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -8205,8 +8172,8 @@ packages: resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} engines: {node: '>=18'} - taze@19.10.0: - resolution: {integrity: sha512-pylMr+Yl8m4ZXu5LwWdtfCOJhLW69NuoeZTLtRzTekfheQ1ix5wOWjQlTb8S3SSxLlDcYFuajQOWllO5iyE0jg==} + taze@19.11.0: + resolution: {integrity: sha512-BlfH8Z6JdoIsrUptnz4P4YuEqdYsa/bSNNDOMhTlsHZ7Bbg1/0NyYh6uPkoRREjrt/kVovV+HYdi1ilHxvChfw==} hasBin: true terser-webpack-plugin@5.4.0: @@ -8252,9 +8219,6 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.4: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} @@ -8308,10 +8272,6 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -8336,9 +8296,6 @@ packages: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-pattern@5.9.0: resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} @@ -8369,25 +8326,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsup@8.5.1: - resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - tsx@4.21.0: resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} @@ -8415,8 +8353,8 @@ packages: resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} engines: {node: '>=20'} - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} engines: {node: '>=14.17'} hasBin: true @@ -8601,8 +8539,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vinext@0.0.38: - resolution: {integrity: sha512-zlQswirXCApDgAFq1eoO/YbRlavGE+Bnowz5vXoQa2EmbFhYg52+T8SZs1QWdOqkbZMhpLIV/iaWvHtkRv2t4Q==} + vinext@0.0.39: + resolution: {integrity: sha512-2WCW5wKy4YkCGFtoUGDmfxMBPULGOXEqd7Rczwi4cMEx2SG8UnY5/56XXGAnjf8aIIrx8ggOVWJSebH96QdjZg==} engines: {node: '>=22'} hasBin: true peerDependencies: @@ -8644,8 +8582,8 @@ packages: storybook: ^0.0.0-0 || ^9.0.0 || ^10.0.0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - vite-plus@0.1.14: - resolution: {integrity: sha512-p4pWlpZZNiEsHxPWNdeIU9iuPix3ydm3ficb0dXPggoyIkdotfXtvn2NPX9KwfiQImU72EVEs4+VYBZYNcUYrw==} + vite-plus@0.1.15: + resolution: {integrity: sha512-PBUvTq4D4BJcuusCA3mrSQmXcGVdPX9CIPpS7Y6+T+LbDsrmAZ+ITl9FzuE6zXvpT6Nht9cpHtwOLJw7m3adog==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -8880,12 +8818,6 @@ packages: zimmerframe@1.1.4: resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} - zod-validation-error@4.0.2: - resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -8939,27 +8871,27 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@amplitude/analytics-browser@2.38.0': + '@amplitude/analytics-browser@2.38.1': dependencies: - '@amplitude/analytics-core': 2.44.0 - '@amplitude/plugin-autocapture-browser': 1.25.0 - '@amplitude/plugin-custom-enrichment-browser': 0.1.2 - '@amplitude/plugin-network-capture-browser': 1.9.11 - '@amplitude/plugin-page-url-enrichment-browser': 0.7.3 - '@amplitude/plugin-page-view-tracking-browser': 2.9.4 - '@amplitude/plugin-web-vitals-browser': 1.1.26 + '@amplitude/analytics-core': 2.44.1 + '@amplitude/plugin-autocapture-browser': 1.25.1 + '@amplitude/plugin-custom-enrichment-browser': 0.1.3 + '@amplitude/plugin-network-capture-browser': 1.9.12 + '@amplitude/plugin-page-url-enrichment-browser': 0.7.4 + '@amplitude/plugin-page-view-tracking-browser': 2.9.5 + '@amplitude/plugin-web-vitals-browser': 1.1.27 tslib: 2.8.1 - '@amplitude/analytics-client-common@2.4.41': + '@amplitude/analytics-client-common@2.4.42': dependencies: '@amplitude/analytics-connector': 1.6.4 - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-core': 2.44.1 '@amplitude/analytics-types': 2.11.1 tslib: 2.8.1 '@amplitude/analytics-connector@1.6.4': {} - '@amplitude/analytics-core@2.44.0': + '@amplitude/analytics-core@2.44.1': dependencies: '@amplitude/analytics-connector': 1.6.4 '@types/zen-observable': 0.8.3 @@ -8973,48 +8905,48 @@ snapshots: dependencies: js-base64: 3.7.8 - '@amplitude/plugin-autocapture-browser@1.25.0': + '@amplitude/plugin-autocapture-browser@1.25.1': dependencies: - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-core': 2.44.1 tslib: 2.8.1 - '@amplitude/plugin-custom-enrichment-browser@0.1.2': + '@amplitude/plugin-custom-enrichment-browser@0.1.3': dependencies: - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-core': 2.44.1 tslib: 2.8.1 - '@amplitude/plugin-network-capture-browser@1.9.11': + '@amplitude/plugin-network-capture-browser@1.9.12': dependencies: - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-core': 2.44.1 tslib: 2.8.1 - '@amplitude/plugin-page-url-enrichment-browser@0.7.3': + '@amplitude/plugin-page-url-enrichment-browser@0.7.4': dependencies: - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-core': 2.44.1 tslib: 2.8.1 - '@amplitude/plugin-page-view-tracking-browser@2.9.4': + '@amplitude/plugin-page-view-tracking-browser@2.9.5': dependencies: - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-core': 2.44.1 tslib: 2.8.1 - '@amplitude/plugin-session-replay-browser@1.27.5(@amplitude/rrweb@2.0.0-alpha.37)(rollup@4.59.0)': + '@amplitude/plugin-session-replay-browser@1.27.6(@amplitude/rrweb@2.0.0-alpha.37)(rollup@4.59.0)': dependencies: - '@amplitude/analytics-client-common': 2.4.41 - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-client-common': 2.4.42 + '@amplitude/analytics-core': 2.44.1 '@amplitude/analytics-types': 2.11.1 '@amplitude/rrweb-plugin-console-record': 2.0.0-alpha.36(@amplitude/rrweb@2.0.0-alpha.37) '@amplitude/rrweb-record': 2.0.0-alpha.36 - '@amplitude/session-replay-browser': 1.35.0(@amplitude/rrweb@2.0.0-alpha.37)(rollup@4.59.0) + '@amplitude/session-replay-browser': 1.35.1(@amplitude/rrweb@2.0.0-alpha.37)(rollup@4.59.0) idb-keyval: 6.2.2 tslib: 2.8.1 transitivePeerDependencies: - '@amplitude/rrweb' - rollup - '@amplitude/plugin-web-vitals-browser@1.1.26': + '@amplitude/plugin-web-vitals-browser@1.1.27': dependencies: - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-core': 2.44.1 tslib: 2.8.1 web-vitals: 5.1.0 @@ -9059,10 +8991,10 @@ snapshots: base64-arraybuffer: 1.0.2 mitt: 3.0.1 - '@amplitude/session-replay-browser@1.35.0(@amplitude/rrweb@2.0.0-alpha.37)(rollup@4.59.0)': + '@amplitude/session-replay-browser@1.35.1(@amplitude/rrweb@2.0.0-alpha.37)(rollup@4.59.0)': dependencies: - '@amplitude/analytics-client-common': 2.4.41 - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-client-common': 2.4.42 + '@amplitude/analytics-core': 2.44.1 '@amplitude/analytics-types': 2.11.1 '@amplitude/experiment-core': 0.7.2 '@amplitude/rrweb-packer': 2.0.0-alpha.36 @@ -9080,44 +9012,44 @@ snapshots: '@amplitude/targeting@0.2.0': dependencies: - '@amplitude/analytics-client-common': 2.4.41 - '@amplitude/analytics-core': 2.44.0 + '@amplitude/analytics-client-common': 2.4.42 + '@amplitude/analytics-core': 2.44.1 '@amplitude/analytics-types': 2.11.1 '@amplitude/experiment-core': 0.7.2 idb: 8.0.0 tslib: 2.8.1 - '@antfu/eslint-config@7.7.3(@eslint-react/eslint-plugin@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@next/eslint-plugin-next@16.2.1)(@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3))(@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(@vue/compiler-sfc@3.5.31)(eslint-plugin-react-hooks@7.0.1(eslint@10.1.0(jiti@2.6.1)))(eslint-plugin-react-refresh@0.5.2(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(oxlint@1.57.0(oxlint-tsgolint@0.17.3))(typescript@5.9.3)': + '@antfu/eslint-config@8.0.0(@eslint-react/eslint-plugin@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@next/eslint-plugin-next@16.2.2)(@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2))(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(@vue/compiler-sfc@3.5.31)(eslint-plugin-react-refresh@0.5.2(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@6.0.2)': dependencies: '@antfu/install-pkg': 1.1.0 - '@clack/prompts': 1.1.0 - '@e18e/eslint-plugin': 0.2.0(eslint@10.1.0(jiti@2.6.1))(oxlint@1.57.0(oxlint-tsgolint@0.17.3)) + '@clack/prompts': 1.2.0 + '@e18e/eslint-plugin': 0.3.0(eslint@10.1.0(jiti@2.6.1))(oxlint@1.58.0(oxlint-tsgolint@0.18.1)) '@eslint-community/eslint-plugin-eslint-comments': 4.7.1(eslint@10.1.0(jiti@2.6.1)) - '@eslint/markdown': 7.5.1 + '@eslint/markdown': 8.0.1 '@stylistic/eslint-plugin': 5.10.0(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@vitest/eslint-plugin': 1.6.13(@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@vitest/eslint-plugin': 1.6.14(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) ansis: 4.2.0 cac: 7.0.0 eslint: 10.1.0(jiti@2.6.1) eslint-config-flat-gitignore: 2.3.0(eslint@10.1.0(jiti@2.6.1)) - eslint-flat-config-utils: 3.0.2 + eslint-flat-config-utils: 3.1.0 eslint-merge-processors: 2.0.0(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-antfu: 3.2.2(eslint@10.1.0(jiti@2.6.1)) - eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3))(@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1)) - eslint-plugin-import-lite: 0.5.2(eslint@10.1.0(jiti@2.6.1)) + eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2))(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)) + eslint-plugin-import-lite: 0.6.0(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-jsdoc: 62.8.1(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-jsonc: 3.1.2(eslint@10.1.0(jiti@2.6.1)) - eslint-plugin-n: 17.24.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-n: 17.24.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 5.7.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-perfectionist: 5.7.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint-plugin-pnpm: 1.6.0(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-regexp: 3.1.0(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-toml: 1.3.1(eslint@10.1.0(jiti@2.6.1)) - eslint-plugin-unicorn: 63.0.0(eslint@10.1.0(jiti@2.6.1)) - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1)) - eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1)))(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.1.0(jiti@2.6.1))) + eslint-plugin-unicorn: 64.0.0(eslint@10.1.0(jiti@2.6.1)) + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)) + eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.1.0(jiti@2.6.1))) eslint-plugin-yml: 3.3.1(eslint@10.1.0(jiti@2.6.1)) eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1)) globals: 17.4.0 @@ -9127,9 +9059,8 @@ snapshots: vue-eslint-parser: 10.4.0(eslint@10.1.0(jiti@2.6.1)) yaml-eslint-parser: 2.0.0 optionalDependencies: - '@eslint-react/eslint-plugin': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@next/eslint-plugin-next': 16.2.1 - eslint-plugin-react-hooks: 7.0.1(eslint@10.1.0(jiti@2.6.1)) + '@eslint-react/eslint-plugin': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@next/eslint-plugin-next': 16.2.2 eslint-plugin-react-refresh: 0.5.2(eslint@10.1.0(jiti@2.6.1)) transitivePeerDependencies: - '@eslint/json' @@ -9147,9 +9078,8 @@ snapshots: package-manager-detector: 1.6.0 tinyexec: 1.0.4 - '@antfu/ni@28.3.0': + '@antfu/ni@30.0.0': dependencies: - ansis: 4.2.0 fzf: 0.5.2 package-manager-detector: 1.6.0 tinyexec: 1.0.4 @@ -9291,12 +9221,12 @@ snapshots: dependencies: '@chevrotain/gast': 11.1.2 '@chevrotain/types': 11.1.2 - lodash-es: 4.17.23 + lodash-es: 4.18.0 '@chevrotain/gast@11.1.2': dependencies: '@chevrotain/types': 11.1.2 - lodash-es: 4.17.23 + lodash-es: 4.18.0 '@chevrotain/regexp-to-ast@11.1.2': {} @@ -9304,13 +9234,13 @@ snapshots: '@chevrotain/utils@11.1.2': {} - '@chromatic-com/storybook@5.1.1(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': + '@chromatic-com/storybook@5.1.1(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': dependencies: '@neoconfetti/react': 1.0.0 chromatic: 13.3.5 filesize: 10.1.6 jsonfile: 6.2.0 - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) strip-ansi: 7.2.0 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -9321,8 +9251,9 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/core@1.1.0': + '@clack/core@1.2.0': dependencies: + fast-wrap-ansi: 0.1.6 sisteransi: 1.0.5 '@clack/prompts@0.8.2': @@ -9331,12 +9262,14 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@1.1.0': + '@clack/prompts@1.2.0': dependencies: - '@clack/core': 1.1.0 + '@clack/core': 1.2.0 + fast-string-width: 1.1.0 + fast-wrap-ansi: 0.1.6 sisteransi: 1.0.5 - '@code-inspector/core@1.4.5': + '@code-inspector/core@1.5.0': dependencies: '@vue/compiler-dom': 3.5.31 chalk: 4.1.2 @@ -9346,35 +9279,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@code-inspector/esbuild@1.4.5': + '@code-inspector/esbuild@1.5.0': dependencies: - '@code-inspector/core': 1.4.5 + '@code-inspector/core': 1.5.0 transitivePeerDependencies: - supports-color - '@code-inspector/mako@1.4.5': + '@code-inspector/mako@1.5.0': dependencies: - '@code-inspector/core': 1.4.5 + '@code-inspector/core': 1.5.0 transitivePeerDependencies: - supports-color - '@code-inspector/turbopack@1.4.5': + '@code-inspector/turbopack@1.5.0': dependencies: - '@code-inspector/core': 1.4.5 - '@code-inspector/webpack': 1.4.5 + '@code-inspector/core': 1.5.0 + '@code-inspector/webpack': 1.5.0 transitivePeerDependencies: - supports-color - '@code-inspector/vite@1.4.5': + '@code-inspector/vite@1.5.0': dependencies: - '@code-inspector/core': 1.4.5 + '@code-inspector/core': 1.5.0 chalk: 4.1.1 transitivePeerDependencies: - supports-color - '@code-inspector/webpack@1.4.5': + '@code-inspector/webpack@1.5.0': dependencies: - '@code-inspector/core': 1.4.5 + '@code-inspector/core': 1.5.0 transitivePeerDependencies: - supports-color @@ -9488,12 +9421,12 @@ snapshots: '@cucumber/tag-expressions@9.1.0': {} - '@e18e/eslint-plugin@0.2.0(eslint@10.1.0(jiti@2.6.1))(oxlint@1.57.0(oxlint-tsgolint@0.17.3))': + '@e18e/eslint-plugin@0.3.0(eslint@10.1.0(jiti@2.6.1))(oxlint@1.58.0(oxlint-tsgolint@0.18.1))': dependencies: eslint-plugin-depend: 1.5.0(eslint@10.1.0(jiti@2.6.1)) optionalDependencies: eslint: 10.1.0(jiti@2.6.1) - oxlint: 1.57.0(oxlint-tsgolint@0.17.3) + oxlint: 1.58.0(oxlint-tsgolint@0.18.1) '@egoist/tailwindcss-icons@1.9.2(tailwindcss@4.2.2)': dependencies: @@ -9521,7 +9454,7 @@ snapshots: '@es-joy/jsdoccomment@0.84.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/types': 8.58.0 comment-parser: 1.4.5 esquery: 1.7.0 jsdoc-type-pratt-parser: 7.1.1 @@ -9624,69 +9557,69 @@ snapshots: '@eslint-community/regexpp@4.12.2': {} - '@eslint-react/ast@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/ast@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) string-ts: 2.3.1 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@eslint-react/core@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/core@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) ts-pattern: 5.9.0 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@eslint-react/eslint-plugin@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/eslint-plugin@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) - eslint-plugin-react-dom: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-naming-convention: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-rsc: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-web-api: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-x: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + eslint-plugin-react-dom: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + eslint-plugin-react-naming-convention: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + eslint-plugin-react-rsc: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + eslint-plugin-react-web-api: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + eslint-plugin-react-x: 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@eslint-react/shared@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/shared@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) ts-pattern: 5.9.0 - typescript: 5.9.3 + typescript: 6.0.2 zod: 4.3.6 transitivePeerDependencies: - supports-color - '@eslint-react/var@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/var@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) ts-pattern: 5.9.0 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -9773,6 +9706,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/markdown@8.0.1': + dependencies: + '@eslint/core': 1.1.1 + '@eslint/plugin-kit': 0.6.1 + github-slugger: 2.0.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-frontmatter: 2.0.1 + mdast-util-gfm: 3.1.0 + mdast-util-math: 3.0.0 + micromark-extension-frontmatter: 2.0.0 + micromark-extension-gfm: 3.0.0 + micromark-extension-math: 3.1.0 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + '@eslint/object-schema@2.1.7': {} '@eslint/object-schema@3.0.3': {} @@ -9847,9 +9796,9 @@ snapshots: dependencies: react: 19.2.4 - '@hono/node-server@1.19.11(hono@4.12.9)': + '@hono/node-server@1.19.12(hono@4.12.10)': dependencies: - hono: 4.12.9 + hono: 4.12.10 '@humanfs/core@0.19.1': {} @@ -10005,13 +9954,13 @@ snapshots: dependencies: minipass: 7.1.3 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3)': + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2)': dependencies: glob: 13.0.6 - react-docgen-typescript: 2.4.0(typescript@5.9.3) - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + react-docgen-typescript: 2.4.0(typescript@6.0.2) + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -10249,7 +10198,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@mermaid-js/parser@1.0.1': + '@mermaid-js/parser@1.1.0': dependencies: langium: 4.2.1 @@ -10275,41 +10224,41 @@ snapshots: '@next/env@16.0.0': {} - '@next/env@16.2.1': {} + '@next/env@16.2.2': {} - '@next/eslint-plugin-next@16.2.1': + '@next/eslint-plugin-next@16.2.2': dependencies: fast-glob: 3.3.1 - '@next/mdx@16.2.1(@mdx-js/loader@3.1.1(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))': + '@next/mdx@16.2.2(@mdx-js/loader@3.1.1(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))': dependencies: source-map: 0.7.6 optionalDependencies: '@mdx-js/loader': 3.1.1(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) - '@next/swc-darwin-arm64@16.2.1': + '@next/swc-darwin-arm64@16.2.2': optional: true - '@next/swc-darwin-x64@16.2.1': + '@next/swc-darwin-x64@16.2.2': optional: true - '@next/swc-linux-arm64-gnu@16.2.1': + '@next/swc-linux-arm64-gnu@16.2.2': optional: true - '@next/swc-linux-arm64-musl@16.2.1': + '@next/swc-linux-arm64-musl@16.2.2': optional: true - '@next/swc-linux-x64-gnu@16.2.1': + '@next/swc-linux-x64-gnu@16.2.2': optional: true - '@next/swc-linux-x64-musl@16.2.1': + '@next/swc-linux-x64-musl@16.2.2': optional: true - '@next/swc-win32-arm64-msvc@16.2.1': + '@next/swc-win32-arm64-msvc@16.2.2': optional: true - '@next/swc-win32-x64-msvc@16.2.1': + '@next/swc-win32-x64-msvc@16.2.2': optional: true '@nodelib/fs.scandir@2.1.5': @@ -10382,11 +10331,11 @@ snapshots: transitivePeerDependencies: - '@opentelemetry/api' - '@orpc/tanstack-query@1.13.13(@orpc/client@1.13.13)(@tanstack/query-core@5.95.2)': + '@orpc/tanstack-query@1.13.13(@orpc/client@1.13.13)(@tanstack/query-core@5.96.1)': dependencies: '@orpc/client': 1.13.13 '@orpc/shared': 1.13.13 - '@tanstack/query-core': 5.95.2 + '@tanstack/query-core': 5.96.1 transitivePeerDependencies: - '@opentelemetry/api' @@ -10457,7 +10406,7 @@ snapshots: '@oxc-parser/binding-win32-x64-msvc@0.121.0': optional: true - '@oxc-project/runtime@0.121.0': {} + '@oxc-project/runtime@0.122.0': {} '@oxc-project/types@0.121.0': {} @@ -10528,136 +10477,136 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@11.19.1': optional: true - '@oxfmt/binding-android-arm-eabi@0.42.0': + '@oxfmt/binding-android-arm-eabi@0.43.0': optional: true - '@oxfmt/binding-android-arm64@0.42.0': + '@oxfmt/binding-android-arm64@0.43.0': optional: true - '@oxfmt/binding-darwin-arm64@0.42.0': + '@oxfmt/binding-darwin-arm64@0.43.0': optional: true - '@oxfmt/binding-darwin-x64@0.42.0': + '@oxfmt/binding-darwin-x64@0.43.0': optional: true - '@oxfmt/binding-freebsd-x64@0.42.0': + '@oxfmt/binding-freebsd-x64@0.43.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.42.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.43.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.42.0': + '@oxfmt/binding-linux-arm-musleabihf@0.43.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.42.0': + '@oxfmt/binding-linux-arm64-gnu@0.43.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.42.0': + '@oxfmt/binding-linux-arm64-musl@0.43.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.42.0': + '@oxfmt/binding-linux-ppc64-gnu@0.43.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.42.0': + '@oxfmt/binding-linux-riscv64-gnu@0.43.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.42.0': + '@oxfmt/binding-linux-riscv64-musl@0.43.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.42.0': + '@oxfmt/binding-linux-s390x-gnu@0.43.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.42.0': + '@oxfmt/binding-linux-x64-gnu@0.43.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.42.0': + '@oxfmt/binding-linux-x64-musl@0.43.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.42.0': + '@oxfmt/binding-openharmony-arm64@0.43.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.42.0': + '@oxfmt/binding-win32-arm64-msvc@0.43.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.42.0': + '@oxfmt/binding-win32-ia32-msvc@0.43.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.42.0': + '@oxfmt/binding-win32-x64-msvc@0.43.0': optional: true - '@oxlint-tsgolint/darwin-arm64@0.17.3': + '@oxlint-tsgolint/darwin-arm64@0.18.1': optional: true - '@oxlint-tsgolint/darwin-x64@0.17.3': + '@oxlint-tsgolint/darwin-x64@0.18.1': optional: true - '@oxlint-tsgolint/linux-arm64@0.17.3': + '@oxlint-tsgolint/linux-arm64@0.18.1': optional: true - '@oxlint-tsgolint/linux-x64@0.17.3': + '@oxlint-tsgolint/linux-x64@0.18.1': optional: true - '@oxlint-tsgolint/win32-arm64@0.17.3': + '@oxlint-tsgolint/win32-arm64@0.18.1': optional: true - '@oxlint-tsgolint/win32-x64@0.17.3': + '@oxlint-tsgolint/win32-x64@0.18.1': optional: true - '@oxlint/binding-android-arm-eabi@1.57.0': + '@oxlint/binding-android-arm-eabi@1.58.0': optional: true - '@oxlint/binding-android-arm64@1.57.0': + '@oxlint/binding-android-arm64@1.58.0': optional: true - '@oxlint/binding-darwin-arm64@1.57.0': + '@oxlint/binding-darwin-arm64@1.58.0': optional: true - '@oxlint/binding-darwin-x64@1.57.0': + '@oxlint/binding-darwin-x64@1.58.0': optional: true - '@oxlint/binding-freebsd-x64@1.57.0': + '@oxlint/binding-freebsd-x64@1.58.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.57.0': + '@oxlint/binding-linux-arm-gnueabihf@1.58.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.57.0': + '@oxlint/binding-linux-arm-musleabihf@1.58.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.57.0': + '@oxlint/binding-linux-arm64-gnu@1.58.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.57.0': + '@oxlint/binding-linux-arm64-musl@1.58.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.57.0': + '@oxlint/binding-linux-ppc64-gnu@1.58.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.57.0': + '@oxlint/binding-linux-riscv64-gnu@1.58.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.57.0': + '@oxlint/binding-linux-riscv64-musl@1.58.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.57.0': + '@oxlint/binding-linux-s390x-gnu@1.58.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.57.0': + '@oxlint/binding-linux-x64-gnu@1.58.0': optional: true - '@oxlint/binding-linux-x64-musl@1.57.0': + '@oxlint/binding-linux-x64-musl@1.58.0': optional: true - '@oxlint/binding-openharmony-arm64@1.57.0': + '@oxlint/binding-openharmony-arm64@1.58.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.57.0': + '@oxlint/binding-win32-arm64-msvc@1.58.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.57.0': + '@oxlint/binding-win32-ia32-msvc@1.58.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.57.0': + '@oxlint/binding-win32-x64-msvc@1.58.0': optional: true '@parcel/watcher-android-arm64@2.5.6': @@ -10723,9 +10672,9 @@ snapshots: '@pkgr/core@0.2.9': {} - '@playwright/test@1.58.2': + '@playwright/test@1.59.1': dependencies: - playwright: 1.58.2 + playwright: 1.59.1 '@polka/url@1.0.0-next.29': {} @@ -11175,38 +11124,38 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true - '@sentry-internal/browser-utils@10.46.0': + '@sentry-internal/browser-utils@10.47.0': dependencies: - '@sentry/core': 10.46.0 + '@sentry/core': 10.47.0 - '@sentry-internal/feedback@10.46.0': + '@sentry-internal/feedback@10.47.0': dependencies: - '@sentry/core': 10.46.0 + '@sentry/core': 10.47.0 - '@sentry-internal/replay-canvas@10.46.0': + '@sentry-internal/replay-canvas@10.47.0': dependencies: - '@sentry-internal/replay': 10.46.0 - '@sentry/core': 10.46.0 + '@sentry-internal/replay': 10.47.0 + '@sentry/core': 10.47.0 - '@sentry-internal/replay@10.46.0': + '@sentry-internal/replay@10.47.0': dependencies: - '@sentry-internal/browser-utils': 10.46.0 - '@sentry/core': 10.46.0 + '@sentry-internal/browser-utils': 10.47.0 + '@sentry/core': 10.47.0 - '@sentry/browser@10.46.0': + '@sentry/browser@10.47.0': dependencies: - '@sentry-internal/browser-utils': 10.46.0 - '@sentry-internal/feedback': 10.46.0 - '@sentry-internal/replay': 10.46.0 - '@sentry-internal/replay-canvas': 10.46.0 - '@sentry/core': 10.46.0 + '@sentry-internal/browser-utils': 10.47.0 + '@sentry-internal/feedback': 10.47.0 + '@sentry-internal/replay': 10.47.0 + '@sentry-internal/replay-canvas': 10.47.0 + '@sentry/core': 10.47.0 - '@sentry/core@10.46.0': {} + '@sentry/core@10.47.0': {} - '@sentry/react@10.46.0(react@19.2.4)': + '@sentry/react@10.47.0(react@19.2.4)': dependencies: - '@sentry/browser': 10.46.0 - '@sentry/core': 10.46.0 + '@sentry/browser': 10.47.0 + '@sentry/core': 10.47.0 react: 19.2.4 '@shuding/opentype.js@1.4.0-beta.0': @@ -11254,15 +11203,15 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@storybook/addon-docs@10.3.3(@types/react@19.2.14)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': + '@storybook/addon-docs@10.3.4(@types/react@19.2.14)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) - '@storybook/csf-plugin': 10.3.3(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) + '@storybook/csf-plugin': 10.3.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@storybook/react-dom-shim': 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + '@storybook/react-dom-shim': 10.3.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -11271,41 +11220,41 @@ snapshots: - vite - webpack - '@storybook/addon-links@10.3.3(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': + '@storybook/addon-links@10.3.4(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': dependencies: '@storybook/global': 5.0.0 - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) optionalDependencies: react: 19.2.4 - '@storybook/addon-onboarding@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': + '@storybook/addon-onboarding@10.3.4(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@storybook/addon-themes@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': + '@storybook/addon-themes@10.3.4(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ts-dedent: 2.2.0 - '@storybook/builder-vite@10.3.3(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': + '@storybook/builder-vite@10.3.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': dependencies: - '@storybook/csf-plugin': 10.3.3(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@storybook/csf-plugin': 10.3.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ts-dedent: 2.2.0 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.3.3(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': + '@storybook/csf-plugin@10.3.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.2 rollup: 4.59.0 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' webpack: 5.105.4(esbuild@0.27.2)(uglify-js@3.19.3) '@storybook/global@5.0.0': {} @@ -11315,20 +11264,20 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@storybook/nextjs-vite@10.3.3(@babel/core@7.29.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': + '@storybook/nextjs-vite@10.3.4(@babel/core@7.29.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': dependencies: - '@storybook/builder-vite': 10.3.3(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) - '@storybook/react': 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) - '@storybook/react-vite': 10.3.3(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) - next: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) + '@storybook/builder-vite': 10.3.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) + '@storybook/react': 10.3.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2) + '@storybook/react-vite': 10.3.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) + next: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' - vite-plugin-storybook-nextjs: 3.2.4(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' + vite-plugin-storybook-nextjs: 3.2.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -11337,27 +11286,27 @@ snapshots: - supports-color - webpack - '@storybook/react-dom-shim@10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': + '@storybook/react-dom-shim@10.3.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@storybook/react-vite@10.3.3(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': + '@storybook/react-vite@10.3.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.4(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2) '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - '@storybook/builder-vite': 10.3.3(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) - '@storybook/react': 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + '@storybook/builder-vite': 10.3.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(rollup@4.59.0)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) + '@storybook/react': 10.3.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2) empathic: 2.0.0 magic-string: 0.30.21 react: 19.2.4 react-docgen: 8.0.3 react-dom: 19.2.4(react@19.2.4) resolve: 1.22.11 - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tsconfig-paths: 4.2.0 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' transitivePeerDependencies: - esbuild - rollup @@ -11365,17 +11314,17 @@ snapshots: - typescript - webpack - '@storybook/react@10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)': + '@storybook/react@10.3.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + '@storybook/react-dom-shim': 10.3.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) react: 19.2.4 react-docgen: 8.0.3 - react-docgen-typescript: 2.4.0(typescript@5.9.3) + react-docgen-typescript: 2.4.0(typescript@6.0.2) react-dom: 19.2.4(react@19.2.4) - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -11391,7 +11340,7 @@ snapshots: '@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/types': 8.58.0 eslint: 10.1.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -11408,18 +11357,18 @@ snapshots: dependencies: tslib: 2.8.1 - '@t3-oss/env-core@0.13.11(typescript@5.9.3)(valibot@1.3.1(typescript@5.9.3))(zod@4.3.6)': + '@t3-oss/env-core@0.13.11(typescript@6.0.2)(valibot@1.3.1(typescript@6.0.2))(zod@4.3.6)': optionalDependencies: - typescript: 5.9.3 - valibot: 1.3.1(typescript@5.9.3) + typescript: 6.0.2 + valibot: 1.3.1(typescript@6.0.2) zod: 4.3.6 - '@t3-oss/env-nextjs@0.13.11(typescript@5.9.3)(valibot@1.3.1(typescript@5.9.3))(zod@4.3.6)': + '@t3-oss/env-nextjs@0.13.11(typescript@6.0.2)(valibot@1.3.1(typescript@6.0.2))(zod@4.3.6)': dependencies: - '@t3-oss/env-core': 0.13.11(typescript@5.9.3)(valibot@1.3.1(typescript@5.9.3))(zod@4.3.6) + '@t3-oss/env-core': 0.13.11(typescript@6.0.2)(valibot@1.3.1(typescript@6.0.2))(zod@4.3.6) optionalDependencies: - typescript: 5.9.3 - valibot: 1.3.1(typescript@5.9.3) + typescript: 6.0.2 + valibot: 1.3.1(typescript@6.0.2) zod: 4.3.6 '@tailwindcss/node@4.2.2': @@ -11496,12 +11445,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.2.2 - '@tailwindcss/vite@4.2.2(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.2(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' '@tanstack/devtools-client@0.0.6': dependencies: @@ -11531,7 +11480,7 @@ snapshots: react: 19.2.4 solid-js: 1.9.11 - '@tanstack/devtools@0.11.0(csstype@3.2.3)(solid-js@1.9.11)': + '@tanstack/devtools@0.11.1(csstype@3.2.3)(solid-js@1.9.11)': dependencies: '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.11) '@solid-primitives/keyboard': 1.3.5(solid-js@1.9.11) @@ -11547,26 +11496,26 @@ snapshots: - csstype - utf-8-validate - '@tanstack/eslint-plugin-query@5.95.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@tanstack/eslint-plugin-query@5.96.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@tanstack/form-core@1.28.5': + '@tanstack/form-core@1.28.6': dependencies: '@tanstack/devtools-event-client': 0.4.3 '@tanstack/pacer-lite': 0.1.1 '@tanstack/store': 0.9.3 - '@tanstack/form-devtools@0.2.19(@types/react@19.2.14)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11)': + '@tanstack/form-devtools@0.2.20(@types/react@19.2.14)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11)': dependencies: '@tanstack/devtools-ui': 0.5.1(csstype@3.2.3)(solid-js@1.9.11) '@tanstack/devtools-utils': 0.4.0(@types/react@19.2.14)(react@19.2.4)(solid-js@1.9.11) - '@tanstack/form-core': 1.28.5 + '@tanstack/form-core': 1.28.6 clsx: 2.1.1 dayjs: 1.11.20 goober: 2.1.18(csstype@3.2.3) @@ -11580,13 +11529,13 @@ snapshots: '@tanstack/pacer-lite@0.1.1': {} - '@tanstack/query-core@5.95.2': {} + '@tanstack/query-core@5.96.1': {} - '@tanstack/query-devtools@5.95.2': {} + '@tanstack/query-devtools@5.96.1': {} - '@tanstack/react-devtools@0.10.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)': + '@tanstack/react-devtools@0.10.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)': dependencies: - '@tanstack/devtools': 0.11.0(csstype@3.2.3)(solid-js@1.9.11) + '@tanstack/devtools': 0.11.1(csstype@3.2.3)(solid-js@1.9.11) '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) react: 19.2.4 @@ -11597,10 +11546,10 @@ snapshots: - solid-js - utf-8-validate - '@tanstack/react-form-devtools@0.2.19(@types/react@19.2.14)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11)': + '@tanstack/react-form-devtools@0.2.20(@types/react@19.2.14)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11)': dependencies: '@tanstack/devtools-utils': 0.4.0(@types/react@19.2.14)(react@19.2.4)(solid-js@1.9.11) - '@tanstack/form-devtools': 0.2.19(@types/react@19.2.14)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11) + '@tanstack/form-devtools': 0.2.20(@types/react@19.2.14)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11) react: 19.2.4 transitivePeerDependencies: - '@types/react' @@ -11609,23 +11558,23 @@ snapshots: - solid-js - vue - '@tanstack/react-form@1.28.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-form@1.28.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/form-core': 1.28.5 + '@tanstack/form-core': 1.28.6 '@tanstack/react-store': 0.9.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 transitivePeerDependencies: - react-dom - '@tanstack/react-query-devtools@5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4)': + '@tanstack/react-query-devtools@5.96.1(@tanstack/react-query@5.96.1(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/query-devtools': 5.95.2 - '@tanstack/react-query': 5.95.2(react@19.2.4) + '@tanstack/query-devtools': 5.96.1 + '@tanstack/react-query': 5.96.1(react@19.2.4) react: 19.2.4 - '@tanstack/react-query@5.95.2(react@19.2.4)': + '@tanstack/react-query@5.96.1(react@19.2.4)': dependencies: - '@tanstack/query-core': 5.95.2 + '@tanstack/query-core': 5.96.1 react: 19.2.4 '@tanstack/react-store@0.9.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': @@ -11681,37 +11630,37 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@tsslint/cli@3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@5.9.3))(typescript@5.9.3)': + '@tsslint/cli@3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@6.0.2))(typescript@6.0.2)': dependencies: '@clack/prompts': 0.8.2 - '@tsslint/config': 3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@5.9.3))(typescript@5.9.3) + '@tsslint/config': 3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@6.0.2))(typescript@6.0.2) '@tsslint/core': 3.0.2 '@volar/language-core': 2.4.28 '@volar/language-hub': 0.0.1 '@volar/typescript': 2.4.28 minimatch: 10.2.4 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - '@tsslint/compat-eslint' - tsl - '@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@5.9.3)': + '@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@6.0.2)': dependencies: '@tsslint/types': 3.0.2 - '@typescript-eslint/parser': 8.57.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.0(eslint@9.27.0(jiti@2.6.1))(typescript@6.0.2) eslint: 9.27.0(jiti@2.6.1) transitivePeerDependencies: - jiti - supports-color - typescript - '@tsslint/config@3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@5.9.3))(typescript@5.9.3)': + '@tsslint/config@3.0.2(@tsslint/compat-eslint@3.0.2(jiti@2.6.1)(typescript@6.0.2))(typescript@6.0.2)': dependencies: '@tsslint/types': 3.0.2 minimatch: 10.2.4 - ts-api-utils: 2.5.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@6.0.2) optionalDependencies: - '@tsslint/compat-eslint': 3.0.2(jiti@2.6.1)(typescript@5.9.3) + '@tsslint/compat-eslint': 3.0.2(jiti@2.6.1)(typescript@6.0.2) transitivePeerDependencies: - typescript @@ -11980,60 +11929,81 @@ snapshots: '@types/zen-observable@0.8.3': {} - '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.58.0 eslint: 10.1.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.57.2 '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3(supports-color@8.1.1) eslint: 10.1.0(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.58.0 + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.1.0(jiti@2.6.1) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.58.0(eslint@9.27.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.58.0 debug: 4.4.3(supports-color@8.1.1) eslint: 9.27.0(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.2(typescript@5.9.3)': + '@typescript-eslint/project-service@8.57.2(typescript@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/project-service@8.58.0(typescript@6.0.2)': dependencies: - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 + debug: 4.4.3(supports-color@8.1.1) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) ajv: 6.14.0 eslint: 10.1.0(jiti@2.6.1) json-stable-stringify-without-jsonify: 1.0.1 @@ -12048,47 +12018,84 @@ snapshots: '@typescript-eslint/types': 8.57.2 '@typescript-eslint/visitor-keys': 8.57.2 - '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.9.3)': + '@typescript-eslint/scope-manager@8.58.0': dependencies: - typescript: 5.9.3 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 - '@typescript-eslint/type-utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@6.0.2)': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + typescript: 6.0.2 + + '@typescript-eslint/tsconfig-utils@8.58.0(typescript@6.0.2)': + dependencies: + typescript: 6.0.2 + + '@typescript-eslint/type-utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) debug: 4.4.3(supports-color@8.1.1) eslint: 10.1.0(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.57.2': {} - '@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3)': + '@typescript-eslint/types@8.58.0': {} + + '@typescript-eslint/typescript-estree@8.57.2(typescript@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.57.2(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/project-service': 8.57.2(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) '@typescript-eslint/types': 8.57.2 '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2)': + dependencies: + '@typescript-eslint/project-service': 8.58.0(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 + debug: 4.4.3(supports-color@8.1.1) + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.57.2 '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + eslint: 10.1.0(jiti@2.6.1) + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -12097,36 +12104,41 @@ snapshots: '@typescript-eslint/types': 8.57.2 eslint-visitor-keys: 5.0.1 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260329.1': + '@typescript-eslint/visitor-keys@8.58.0': + dependencies: + '@typescript-eslint/types': 8.58.0 + eslint-visitor-keys: 5.0.1 + + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260401.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260329.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260401.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260329.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260401.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260329.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260401.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260329.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260401.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260329.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260401.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260329.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260401.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260329.1': + '@typescript/native-preview@7.0.0-dev.20260401.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260329.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260329.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260329.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260329.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260329.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260329.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260329.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260401.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260401.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260401.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260401.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260401.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260401.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260401.1 '@ungap/structured-clone@1.3.0': {} @@ -12134,56 +12146,56 @@ snapshots: dependencies: unpic: 4.2.2 - '@unpic/react@1.0.2(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@unpic/react@1.0.2(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@unpic/core': 1.0.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - next: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) + next: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) '@upsetjs/venn.js@2.0.0': optionalDependencies: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - '@valibot/to-json-schema@1.6.0(valibot@1.3.1(typescript@5.9.3))': + '@valibot/to-json-schema@1.6.0(valibot@1.3.1(typescript@6.0.2))': dependencies: - valibot: 1.3.1(typescript@5.9.3) + valibot: 1.3.1(typescript@6.0.2) '@vercel/og@0.8.6': dependencies: '@resvg/resvg-wasm': 2.4.0 satori: 0.16.0 - '@vitejs/devtools-kit@0.1.11(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3)(ws@8.20.0)': + '@vitejs/devtools-kit@0.1.11(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2)(ws@8.20.0)': dependencies: - '@vitejs/devtools-rpc': 0.1.11(typescript@5.9.3)(ws@8.20.0) + '@vitejs/devtools-rpc': 0.1.11(typescript@6.0.2)(ws@8.20.0) birpc: 4.0.0 ohash: 2.0.11 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' transitivePeerDependencies: - typescript - ws - '@vitejs/devtools-rpc@0.1.11(typescript@5.9.3)(ws@8.20.0)': + '@vitejs/devtools-rpc@0.1.11(typescript@6.0.2)(ws@8.20.0)': dependencies: birpc: 4.0.0 ohash: 2.0.11 p-limit: 7.3.0 structured-clone-es: 2.0.0 - valibot: 1.3.1(typescript@5.9.3) + valibot: 1.3.1(typescript@6.0.2) optionalDependencies: ws: 8.20.0 transitivePeerDependencies: - typescript - '@vitejs/plugin-react@6.0.1(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))': + '@vitejs/plugin-react@6.0.1(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' - '@vitejs/plugin-rsc@0.5.21(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(react@19.2.4)': + '@vitejs/plugin-rsc@0.5.21(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(react@19.2.4)': dependencies: '@rolldown/pluginutils': 1.0.0-rc.5 es-module-lexer: 2.0.0 @@ -12195,15 +12207,15 @@ snapshots: srvx: 0.11.13 strip-literal: 3.1.0 turbo-stream: 3.2.0 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' - vitefu: 1.1.2(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' + vitefu: 1.1.2(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)) optionalDependencies: react-server-dom-webpack: 19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) - '@vitest/coverage-v8@4.1.1(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))': + '@vitest/coverage-v8@4.1.2(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.1 + '@vitest/utils': 4.1.2 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -12212,12 +12224,12 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: '@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vitest: '@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' - '@vitest/coverage-v8@4.1.1(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3))': + '@vitest/coverage-v8@4.1.2(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.1 + '@vitest/utils': 4.1.2 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -12226,17 +12238,17 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: '@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)' + vitest: '@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)' - '@vitest/eslint-plugin@1.6.13(@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@vitest/eslint-plugin@1.6.14(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - typescript: 5.9.3 - vitest: '@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + typescript: 6.0.2 + vitest: '@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' transitivePeerDependencies: - supports-color @@ -12252,7 +12264,7 @@ snapshots: dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.1.1': + '@vitest/pretty-format@4.1.2': dependencies: tinyrainbow: 3.1.0 @@ -12266,15 +12278,15 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@vitest/utils@4.1.1': + '@vitest/utils@4.1.2': dependencies: - '@vitest/pretty-format': 4.1.1 + '@vitest/pretty-format': 4.1.2 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)': + '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)': dependencies: - '@oxc-project/runtime': 0.121.0 + '@oxc-project/runtime': 0.122.0 '@oxc-project/types': 0.122.0 lightningcss: 1.32.0 postcss: 8.5.8 @@ -12286,32 +12298,32 @@ snapshots: sass: 1.98.0 terser: 5.46.1 tsx: 4.21.0 - typescript: 5.9.3 + typescript: 6.0.2 yaml: 2.8.3 - '@voidzero-dev/vite-plus-darwin-arm64@0.1.14': + '@voidzero-dev/vite-plus-darwin-arm64@0.1.15': optional: true - '@voidzero-dev/vite-plus-darwin-x64@0.1.14': + '@voidzero-dev/vite-plus-darwin-x64@0.1.15': optional: true - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.14': + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.15': optional: true - '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.14': + '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.15': optional: true - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.14': + '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.15': optional: true - '@voidzero-dev/vite-plus-linux-x64-musl@0.1.14': + '@voidzero-dev/vite-plus-linux-x64-musl@0.1.15': optional: true - '@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)': + '@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + '@voidzero-dev/vite-plus-core': 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3) es-module-lexer: 1.7.0 obug: 2.1.1 pixelmatch: 7.1.0 @@ -12321,7 +12333,7 @@ snapshots: tinybench: 2.9.0 tinyexec: 1.0.4 tinyglobby: 0.2.15 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' ws: 8.20.0 optionalDependencies: '@types/node': 25.5.0 @@ -12347,11 +12359,11 @@ snapshots: - utf-8-validate - yaml - '@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)': + '@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + '@voidzero-dev/vite-plus-core': 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3) es-module-lexer: 1.7.0 obug: 2.1.1 pixelmatch: 7.1.0 @@ -12387,10 +12399,10 @@ snapshots: - utf-8-validate - yaml - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.14': + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.15': optional: true - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.14': + '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.15': optional: true '@volar/language-core@2.4.28': @@ -12515,6 +12527,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@webcontainer/env@1.1.1': {} + '@xstate/fsm@1.6.5': {} '@xtuc/ieee754@1.2.0': {} @@ -12660,9 +12674,10 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@2.0.2: + brace-expansion@1.1.13: dependencies: balanced-match: 1.0.2 + concat-map: 0.0.1 brace-expansion@5.0.5: dependencies: @@ -12698,15 +12713,8 @@ snapshots: dependencies: run-applescript: 7.1.0 - bundle-require@5.1.0(esbuild@0.27.2): - dependencies: - esbuild: 0.27.2 - load-tsconfig: 0.2.5 - bytes@3.1.2: {} - cac@6.7.14: {} - cac@7.0.0: {} callsites@3.1.0: {} @@ -12791,7 +12799,7 @@ snapshots: chevrotain-allstar@0.3.1(chevrotain@11.1.2): dependencies: chevrotain: 11.1.2 - lodash-es: 4.17.23 + lodash-es: 4.18.0 chevrotain@11.1.2: dependencies: @@ -12800,11 +12808,12 @@ snapshots: '@chevrotain/regexp-to-ast': 11.1.2 '@chevrotain/types': 11.1.2 '@chevrotain/utils': 11.1.2 - lodash-es: 4.17.23 + lodash-es: 4.18.0 chokidar@4.0.3: dependencies: readdirp: 4.1.2 + optional: true chownr@1.1.4: optional: true @@ -12853,14 +12862,14 @@ snapshots: - '@types/react' - '@types/react-dom' - code-inspector-plugin@1.4.5: + code-inspector-plugin@1.5.0: dependencies: - '@code-inspector/core': 1.4.5 - '@code-inspector/esbuild': 1.4.5 - '@code-inspector/mako': 1.4.5 - '@code-inspector/turbopack': 1.4.5 - '@code-inspector/vite': 1.4.5 - '@code-inspector/webpack': 1.4.5 + '@code-inspector/core': 1.5.0 + '@code-inspector/esbuild': 1.5.0 + '@code-inspector/mako': 1.5.0 + '@code-inspector/turbopack': 1.5.0 + '@code-inspector/vite': 1.5.0 + '@code-inspector/webpack': 1.5.0 chalk: 4.1.1 transitivePeerDependencies: - supports-color @@ -12885,8 +12894,6 @@ snapshots: commander@2.20.3: {} - commander@4.1.1: {} - commander@7.2.0: {} commander@8.3.0: {} @@ -12897,12 +12904,12 @@ snapshots: compare-versions@6.1.1: {} + concat-map@0.0.1: {} + confbox@0.1.8: {} confbox@0.2.4: {} - consola@3.4.2: {} - convert-source-map@2.0.0: {} copy-to-clipboard@3.3.3: @@ -13159,7 +13166,7 @@ snapshots: dagre-d3-es@7.0.14: dependencies: d3: 7.9.0 - lodash-es: 4.17.23 + lodash-es: 4.18.0 dayjs@1.11.20: {} @@ -13387,7 +13394,7 @@ snapshots: '@eslint/compat': 2.0.3(eslint@10.1.0(jiti@2.6.1)) eslint: 10.1.0(jiti@2.6.1) - eslint-flat-config-utils@3.0.2: + eslint-flat-config-utils@3.1.0: dependencies: '@eslint/config-helpers': 0.5.3 pathe: 2.0.3 @@ -13416,30 +13423,30 @@ snapshots: dependencies: eslint: 10.1.0(jiti@2.6.1) - eslint-plugin-better-tailwindcss@4.3.2(eslint@10.1.0(jiti@2.6.1))(oxlint@1.57.0(oxlint-tsgolint@0.17.3))(tailwindcss@4.2.2)(typescript@5.9.3): + eslint-plugin-better-tailwindcss@4.3.2(eslint@10.1.0(jiti@2.6.1))(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(tailwindcss@4.2.2)(typescript@6.0.2): dependencies: '@eslint/css-tree': 3.6.9 - '@valibot/to-json-schema': 1.6.0(valibot@1.3.1(typescript@5.9.3)) + '@valibot/to-json-schema': 1.6.0(valibot@1.3.1(typescript@6.0.2)) enhanced-resolve: 5.20.1 jiti: 2.6.1 synckit: 0.11.12 tailwind-csstree: 0.1.5 tailwindcss: 4.2.2 tsconfig-paths-webpack-plugin: 4.2.0 - valibot: 1.3.1(typescript@5.9.3) + valibot: 1.3.1(typescript@6.0.2) optionalDependencies: eslint: 10.1.0(jiti@2.6.1) - oxlint: 1.57.0(oxlint-tsgolint@0.17.3) + oxlint: 1.58.0(oxlint-tsgolint@0.18.1) transitivePeerDependencies: - '@eslint/css' - typescript - eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3))(@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2))(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.84.0 - '@typescript-eslint/rule-tester': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/rule-tester': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) eslint-plugin-depend@1.5.0(eslint@10.1.0(jiti@2.6.1)): @@ -13460,7 +13467,7 @@ snapshots: dependencies: eslint: 10.1.0(jiti@2.6.1) - eslint-plugin-import-lite@0.5.2(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-import-lite@0.6.0(eslint@10.1.0(jiti@2.6.1)): dependencies: eslint: 10.1.0(jiti@2.6.1) @@ -13499,9 +13506,9 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-markdown-preferences@0.40.3(@eslint/markdown@7.5.1)(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-markdown-preferences@0.41.0(@eslint/markdown@8.0.1)(eslint@10.1.0(jiti@2.6.1)): dependencies: - '@eslint/markdown': 7.5.1 + '@eslint/markdown': 8.0.1 diff-sequences: 29.6.3 emoji-regex-xs: 2.0.1 eslint: 10.1.0(jiti@2.6.1) @@ -13519,7 +13526,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) enhanced-resolve: 5.20.1 @@ -13530,13 +13537,13 @@ snapshots: globrex: 0.1.2 ignore: 5.3.2 semver: 7.7.4 - ts-declaration-location: 1.0.7(typescript@5.9.3) + ts-declaration-location: 1.0.7(typescript@6.0.2) transitivePeerDependencies: - typescript - eslint-plugin-no-barrel-files@1.2.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-no-barrel-files@1.2.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) transitivePeerDependencies: - eslint - supports-color @@ -13544,9 +13551,9 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@5.7.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-perfectionist@5.7.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -13564,48 +13571,37 @@ snapshots: yaml: 2.8.3 yaml-eslint-parser: 2.0.0 - eslint-plugin-react-dom@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-dom@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: - '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/core': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) compare-versions: 6.1.1 eslint: 10.1.0(jiti@2.6.1) ts-pattern: 5.9.0 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@7.0.1(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-react-naming-convention@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - eslint: 10.1.0(jiti@2.6.1) - hermes-parser: 0.25.1 - zod: 4.3.6 - zod-validation-error: 4.0.2(zod@4.3.6) - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-naming-convention@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/core': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) compare-versions: 6.1.1 eslint: 10.1.0(jiti@2.6.1) string-ts: 2.3.1 ts-pattern: 5.9.0 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -13613,53 +13609,53 @@ snapshots: dependencies: eslint: 10.1.0(jiti@2.6.1) - eslint-plugin-react-rsc@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-rsc@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: - '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) ts-pattern: 5.9.0 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-web-api@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-web-api@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: - '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/core': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) birecord: 0.1.1 eslint: 10.1.0(jiti@2.6.1) ts-pattern: 5.9.0 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-x@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-x@3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: - '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/core': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/shared': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@eslint-react/var': 3.0.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) compare-versions: 6.1.1 eslint: 10.1.0(jiti@2.6.1) string-ts: 2.3.1 - ts-api-utils: 2.5.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@6.0.2) ts-pattern: 5.9.0 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -13687,14 +13683,14 @@ snapshots: minimatch: 10.2.4 scslre: 0.3.0 semver: 7.7.4 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 - eslint-plugin-storybook@10.3.3(eslint@10.1.0(jiti@2.6.1))(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3): + eslint-plugin-storybook@10.3.4(eslint@10.1.0(jiti@2.6.1))(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2): dependencies: - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: - supports-color - typescript @@ -13710,7 +13706,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@63.0.0(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-unicorn@64.0.0(eslint@10.1.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.28.5 '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) @@ -13720,7 +13716,7 @@ snapshots: core-js-compat: 3.49.0 eslint: 10.1.0(jiti@2.6.1) find-up-simple: 1.0.1 - globals: 16.5.0 + globals: 17.4.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 @@ -13730,13 +13726,13 @@ snapshots: semver: 7.7.4 strip-indent: 4.1.1 - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)): dependencies: eslint: 10.1.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1)))(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.1.0(jiti@2.6.1))): + eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.1.0(jiti@2.6.1))): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) eslint: 10.1.0(jiti@2.6.1) @@ -13748,7 +13744,7 @@ snapshots: xml-name-validator: 4.0.0 optionalDependencies: '@stylistic/eslint-plugin': 5.10.0(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint-plugin-yml@3.3.1(eslint@10.1.0(jiti@2.6.1)): dependencies: @@ -13977,8 +13973,18 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-string-truncated-width@1.2.1: {} + + fast-string-width@1.1.0: + dependencies: + fast-string-truncated-width: 1.2.1 + fast-uri@3.1.0: {} + fast-wrap-ansi@0.1.6: + dependencies: + fast-string-width: 1.1.0 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -14024,12 +14030,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - fix-dts-default-cjs-exports@1.0.1: - dependencies: - magic-string: 0.30.21 - mlly: 1.8.2 - rollup: 4.59.0 - flat-cache@4.0.1: dependencies: flatted: 3.4.2 @@ -14108,8 +14108,6 @@ snapshots: globals@15.15.0: {} - globals@16.5.0: {} - globals@17.4.0: {} globrex@0.1.2: {} @@ -14283,19 +14281,13 @@ snapshots: property-information: 7.1.0 space-separated-tokens: 2.0.2 - hermes-estree@0.25.1: {} - - hermes-parser@0.25.1: - dependencies: - hermes-estree: 0.25.1 - hex-rgb@4.3.0: {} highlight.js@10.7.3: {} highlightjs-vue@1.0.0: {} - hono@4.12.9: {} + hono@4.12.10: {} hosted-git-info@9.0.2: dependencies: @@ -14326,11 +14318,11 @@ snapshots: dependencies: '@babel/runtime': 7.29.2 - i18next@25.10.10(typescript@5.9.3): + i18next@26.0.3(typescript@6.0.2): dependencies: '@babel/runtime': 7.29.2 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 iconify-import-svg@0.1.2: dependencies: @@ -14359,7 +14351,8 @@ snapshots: immer@11.1.4: {} - immutable@5.1.5: {} + immutable@5.1.5: + optional: true import-fresh@3.3.1: dependencies: @@ -14483,8 +14476,6 @@ snapshots: '@types/react': 19.2.14 react: 19.2.4 - joycon@3.1.1: {} - js-audio-recorder@1.0.7: {} js-base64@3.7.8: {} @@ -14523,6 +14514,8 @@ snapshots: eslint-visitor-keys: 5.0.1 semver: 7.7.4 + jsonc-parser@3.3.1: {} + jsonfile@6.2.0: dependencies: universalify: 2.0.1 @@ -14543,7 +14536,7 @@ snapshots: khroma@2.1.0: {} - knip@6.1.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + knip@6.2.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): dependencies: '@nodelib/fs.walk': 1.2.8 fast-glob: 3.3.3 @@ -14658,17 +14651,11 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 - lilconfig@3.1.3: {} - linebreak@1.1.0: dependencies: base64-js: 0.0.8 unicode-trie: 2.0.0 - lines-and-columns@1.2.4: {} - - load-tsconfig@0.2.5: {} - loader-runner@4.3.1: {} local-pkg@1.1.2: @@ -14681,7 +14668,7 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash-es@4.17.23: {} + lodash-es@4.18.0: {} lodash.merge@4.6.2: {} @@ -14959,11 +14946,11 @@ snapshots: merge2@1.4.1: {} - mermaid@11.13.0: + mermaid@11.14.0: dependencies: '@braintree/sanitize-url': 7.1.2 '@iconify/utils': 3.1.0 - '@mermaid-js/parser': 1.0.1 + '@mermaid-js/parser': 1.1.0 '@types/d3': 7.4.3 '@upsetjs/venn.js': 2.0.0 cytoscape: 3.33.1 @@ -14976,7 +14963,7 @@ snapshots: dompurify: 3.3.2 katex: 0.16.44 khroma: 2.1.0 - lodash-es: 4.17.23 + lodash-es: 4.18.0 marked: 16.4.2 roughjs: 4.6.6 stylis: 4.3.6 @@ -15302,7 +15289,7 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 1.1.13 minimist@1.2.8: {} @@ -15367,9 +15354,9 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0): + next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0): dependencies: - '@next/env': 16.2.1 + '@next/env': 16.2.2 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.10.12 caniuse-lite: 1.0.30001781 @@ -15378,15 +15365,15 @@ snapshots: react-dom: 19.2.4(react@19.2.4) styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.1 - '@next/swc-darwin-x64': 16.2.1 - '@next/swc-linux-arm64-gnu': 16.2.1 - '@next/swc-linux-arm64-musl': 16.2.1 - '@next/swc-linux-x64-gnu': 16.2.1 - '@next/swc-linux-x64-musl': 16.2.1 - '@next/swc-win32-arm64-msvc': 16.2.1 - '@next/swc-win32-x64-msvc': 16.2.1 - '@playwright/test': 1.58.2 + '@next/swc-darwin-arm64': 16.2.2 + '@next/swc-darwin-x64': 16.2.2 + '@next/swc-linux-arm64-gnu': 16.2.2 + '@next/swc-linux-arm64-musl': 16.2.2 + '@next/swc-linux-x64-gnu': 16.2.2 + '@next/swc-linux-x64-musl': 16.2.2 + '@next/swc-win32-arm64-msvc': 16.2.2 + '@next/swc-win32-x64-msvc': 16.2.2 + '@playwright/test': 1.59.1 sass: 1.98.0 sharp: 0.34.5 transitivePeerDependencies: @@ -15422,12 +15409,12 @@ snapshots: dependencies: boolbase: 1.0.0 - nuqs@2.8.9(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react@19.2.4): + nuqs@2.8.9(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react@19.2.4): dependencies: '@standard-schema/spec': 1.0.0 react: 19.2.4 optionalDependencies: - next: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) + next: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) object-assign@4.1.1: {} @@ -15532,61 +15519,61 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - oxfmt@0.42.0: + oxfmt@0.43.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.42.0 - '@oxfmt/binding-android-arm64': 0.42.0 - '@oxfmt/binding-darwin-arm64': 0.42.0 - '@oxfmt/binding-darwin-x64': 0.42.0 - '@oxfmt/binding-freebsd-x64': 0.42.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.42.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.42.0 - '@oxfmt/binding-linux-arm64-gnu': 0.42.0 - '@oxfmt/binding-linux-arm64-musl': 0.42.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.42.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.42.0 - '@oxfmt/binding-linux-riscv64-musl': 0.42.0 - '@oxfmt/binding-linux-s390x-gnu': 0.42.0 - '@oxfmt/binding-linux-x64-gnu': 0.42.0 - '@oxfmt/binding-linux-x64-musl': 0.42.0 - '@oxfmt/binding-openharmony-arm64': 0.42.0 - '@oxfmt/binding-win32-arm64-msvc': 0.42.0 - '@oxfmt/binding-win32-ia32-msvc': 0.42.0 - '@oxfmt/binding-win32-x64-msvc': 0.42.0 + '@oxfmt/binding-android-arm-eabi': 0.43.0 + '@oxfmt/binding-android-arm64': 0.43.0 + '@oxfmt/binding-darwin-arm64': 0.43.0 + '@oxfmt/binding-darwin-x64': 0.43.0 + '@oxfmt/binding-freebsd-x64': 0.43.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.43.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.43.0 + '@oxfmt/binding-linux-arm64-gnu': 0.43.0 + '@oxfmt/binding-linux-arm64-musl': 0.43.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.43.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.43.0 + '@oxfmt/binding-linux-riscv64-musl': 0.43.0 + '@oxfmt/binding-linux-s390x-gnu': 0.43.0 + '@oxfmt/binding-linux-x64-gnu': 0.43.0 + '@oxfmt/binding-linux-x64-musl': 0.43.0 + '@oxfmt/binding-openharmony-arm64': 0.43.0 + '@oxfmt/binding-win32-arm64-msvc': 0.43.0 + '@oxfmt/binding-win32-ia32-msvc': 0.43.0 + '@oxfmt/binding-win32-x64-msvc': 0.43.0 - oxlint-tsgolint@0.17.3: + oxlint-tsgolint@0.18.1: optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.17.3 - '@oxlint-tsgolint/darwin-x64': 0.17.3 - '@oxlint-tsgolint/linux-arm64': 0.17.3 - '@oxlint-tsgolint/linux-x64': 0.17.3 - '@oxlint-tsgolint/win32-arm64': 0.17.3 - '@oxlint-tsgolint/win32-x64': 0.17.3 + '@oxlint-tsgolint/darwin-arm64': 0.18.1 + '@oxlint-tsgolint/darwin-x64': 0.18.1 + '@oxlint-tsgolint/linux-arm64': 0.18.1 + '@oxlint-tsgolint/linux-x64': 0.18.1 + '@oxlint-tsgolint/win32-arm64': 0.18.1 + '@oxlint-tsgolint/win32-x64': 0.18.1 - oxlint@1.57.0(oxlint-tsgolint@0.17.3): + oxlint@1.58.0(oxlint-tsgolint@0.18.1): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.57.0 - '@oxlint/binding-android-arm64': 1.57.0 - '@oxlint/binding-darwin-arm64': 1.57.0 - '@oxlint/binding-darwin-x64': 1.57.0 - '@oxlint/binding-freebsd-x64': 1.57.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.57.0 - '@oxlint/binding-linux-arm-musleabihf': 1.57.0 - '@oxlint/binding-linux-arm64-gnu': 1.57.0 - '@oxlint/binding-linux-arm64-musl': 1.57.0 - '@oxlint/binding-linux-ppc64-gnu': 1.57.0 - '@oxlint/binding-linux-riscv64-gnu': 1.57.0 - '@oxlint/binding-linux-riscv64-musl': 1.57.0 - '@oxlint/binding-linux-s390x-gnu': 1.57.0 - '@oxlint/binding-linux-x64-gnu': 1.57.0 - '@oxlint/binding-linux-x64-musl': 1.57.0 - '@oxlint/binding-openharmony-arm64': 1.57.0 - '@oxlint/binding-win32-arm64-msvc': 1.57.0 - '@oxlint/binding-win32-ia32-msvc': 1.57.0 - '@oxlint/binding-win32-x64-msvc': 1.57.0 - oxlint-tsgolint: 0.17.3 + '@oxlint/binding-android-arm-eabi': 1.58.0 + '@oxlint/binding-android-arm64': 1.58.0 + '@oxlint/binding-darwin-arm64': 1.58.0 + '@oxlint/binding-darwin-x64': 1.58.0 + '@oxlint/binding-freebsd-x64': 1.58.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.58.0 + '@oxlint/binding-linux-arm-musleabihf': 1.58.0 + '@oxlint/binding-linux-arm64-gnu': 1.58.0 + '@oxlint/binding-linux-arm64-musl': 1.58.0 + '@oxlint/binding-linux-ppc64-gnu': 1.58.0 + '@oxlint/binding-linux-riscv64-gnu': 1.58.0 + '@oxlint/binding-linux-riscv64-musl': 1.58.0 + '@oxlint/binding-linux-s390x-gnu': 1.58.0 + '@oxlint/binding-linux-x64-gnu': 1.58.0 + '@oxlint/binding-linux-x64-musl': 1.58.0 + '@oxlint/binding-openharmony-arm64': 1.58.0 + '@oxlint/binding-win32-arm64-msvc': 1.58.0 + '@oxlint/binding-win32-ia32-msvc': 1.58.0 + '@oxlint/binding-win32-x64-msvc': 1.58.0 + oxlint-tsgolint: 0.18.1 p-limit@3.1.0: dependencies: @@ -15714,8 +15701,6 @@ snapshots: pinyin-pro@3.28.0: {} - pirates@4.0.7: {} - pixelmatch@7.1.0: dependencies: pngjs: 7.0.0 @@ -15732,11 +15717,11 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 - playwright-core@1.58.2: {} + playwright-core@1.59.1: {} - playwright@1.58.2: + playwright@1.59.1: dependencies: - playwright-core: 1.58.2 + playwright-core: 1.59.1 optionalDependencies: fsevents: 2.3.2 @@ -15762,15 +15747,6 @@ snapshots: transitivePeerDependencies: - supports-color - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 2.6.1 - postcss: 8.5.8 - tsx: 4.21.0 - yaml: 2.8.3 - postcss-selector-parser@6.0.10: dependencies: cssesc: 3.0.0 @@ -15880,9 +15856,9 @@ snapshots: prop-types: 15.8.1 react: 19.2.4 - react-docgen-typescript@2.4.0(typescript@5.9.3): + react-docgen-typescript@2.4.0(typescript@6.0.2): dependencies: - typescript: 5.9.3 + typescript: 6.0.2 react-docgen@8.0.3: dependencies: @@ -15929,16 +15905,16 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): + react-i18next@17.0.2(i18next@26.0.3(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2): dependencies: '@babel/runtime': 7.29.2 html-parse-stringify: 3.0.1 - i18next: 25.10.10(typescript@5.9.3) + i18next: 26.0.3(typescript@6.0.2) react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: react-dom: 19.2.4(react@19.2.4) - typescript: 5.9.3 + typescript: 6.0.2 react-is@16.13.1: {} @@ -16078,7 +16054,8 @@ snapshots: util-deprecate: 1.0.2 optional: true - readdirp@4.1.2: {} + readdirp@4.1.2: + optional: true recast@0.23.11: dependencies: @@ -16261,8 +16238,6 @@ snapshots: resolve-from@4.0.0: {} - resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} resolve@1.22.11: @@ -16364,6 +16339,7 @@ snapshots: source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.6 + optional: true satori@0.16.0: dependencies: @@ -16525,7 +16501,7 @@ snapshots: std-semver@1.0.8: {} - storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -16533,6 +16509,7 @@ snapshots: '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 '@vitest/spy': 3.2.4 + '@webcontainer/env': 1.1.1 esbuild: 0.27.2 open: 10.2.0 recast: 0.23.11 @@ -16552,7 +16529,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 marked: 17.0.5 - mermaid: 11.13.0 + mermaid: 11.14.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) rehype-harden: 1.1.8 @@ -16632,16 +16609,6 @@ snapshots: stylis@4.3.6: {} - sucrase@3.35.1: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - tinyglobby: 0.2.15 - ts-interface-checker: 0.1.13 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -16703,9 +16670,9 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - taze@19.10.0: + taze@19.11.0: dependencies: - '@antfu/ni': 28.3.0 + '@antfu/ni': 30.0.0 '@henrygd/queue': 1.2.0 cac: 7.0.0 find-up-simple: 1.0.1 @@ -16755,8 +16722,6 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.2: {} - tinyexec@1.0.4: {} tinyglobby@0.2.15: @@ -16797,32 +16762,28 @@ snapshots: totalist@3.0.1: {} - tree-kill@1.2.2: {} - trim-lines@3.0.1: {} trough@2.2.0: {} - ts-api-utils@2.5.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@6.0.2): dependencies: - typescript: 5.9.3 + typescript: 6.0.2 ts-debounce@4.0.0: {} - ts-declaration-location@1.0.7(typescript@5.9.3): + ts-declaration-location@1.0.7(typescript@6.0.2): dependencies: picomatch: 4.0.4 - typescript: 5.9.3 + typescript: 6.0.2 ts-dedent@2.2.0: {} - ts-interface-checker@0.1.13: {} - ts-pattern@5.9.0: {} - tsconfck@3.1.6(typescript@5.9.3): + tsconfck@3.1.6(typescript@6.0.2): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 tsconfig-paths-webpack-plugin@4.2.0: dependencies: @@ -16843,34 +16804,6 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): - dependencies: - bundle-require: 5.1.0(esbuild@0.27.2) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.3(supports-color@8.1.1) - esbuild: 0.27.2 - fix-dts-default-cjs-exports: 1.0.1 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3) - resolve-from: 5.0.0 - rollup: 4.59.0 - source-map: 0.7.6 - sucrase: 3.35.1 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - optionalDependencies: - postcss: 8.5.8 - typescript: 5.9.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsx@4.21.0: dependencies: esbuild: 0.27.2 @@ -16897,7 +16830,7 @@ snapshots: dependencies: tagged-tag: 1.0.0 - typescript@5.9.3: {} + typescript@6.0.2: {} ufo@1.6.3: {} @@ -17059,9 +16992,9 @@ snapshots: uuid@13.0.0: {} - valibot@1.3.1(typescript@5.9.3): + valibot@1.3.1(typescript@6.0.2): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 validate-npm-package-license@3.0.4: dependencies: @@ -17083,21 +17016,21 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vinext@0.0.38(21fde6c2677b0aab516df83ef1beed5d): + vinext@0.0.39(bf3f106951d7257e1336e695c204ec32): dependencies: - '@unpic/react': 1.0.2(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@unpic/react': 1.0.2(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@vercel/og': 0.8.6 - '@vitejs/plugin-react': 6.0.1(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + '@vitejs/plugin-react': 6.0.1(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)) magic-string: 0.30.21 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) rsc-html-stream: 0.0.7 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' vite-plugin-commonjs: 0.10.4 - vite-tsconfig-paths: 6.1.1(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3) + vite-tsconfig-paths: 6.1.1(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2) optionalDependencies: '@mdx-js/rollup': 3.1.1(rollup@4.59.0) - '@vitejs/plugin-rsc': 0.5.21(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(react@19.2.4) + '@vitejs/plugin-rsc': 0.5.21(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)))(react@19.2.4) react-server-dom-webpack: 19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)) transitivePeerDependencies: - next @@ -17117,9 +17050,9 @@ snapshots: fast-glob: 3.3.3 magic-string: 0.30.21 - vite-plugin-inspect@12.0.0-beta.1(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3)(ws@8.20.0): + vite-plugin-inspect@12.0.0-beta.1(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2)(ws@8.20.0): dependencies: - '@vitejs/devtools-kit': 0.1.11(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3)(ws@8.20.0) + '@vitejs/devtools-kit': 0.1.11(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2)(ws@8.20.0) ansis: 4.2.0 error-stack-parser-es: 1.0.5 obug: 2.1.1 @@ -17128,46 +17061,47 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' transitivePeerDependencies: - typescript - ws - vite-plugin-storybook-nextjs@3.2.4(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(storybook@10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3): + vite-plugin-storybook-nextjs@3.2.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0))(storybook@10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@6.0.2): dependencies: '@next/env': 16.0.0 image-size: 2.0.2 magic-string: 0.30.21 module-alias: 2.3.4 - next: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) - storybook: 10.3.3(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0) + storybook: 10.3.4(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ts-dedent: 2.2.0 - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' - vite-tsconfig-paths: 5.1.4(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3) + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' + vite-tsconfig-paths: 5.1.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2) transitivePeerDependencies: - supports-color - typescript - vite-plus@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): + vite-plus@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3): dependencies: '@oxc-project/types': 0.122.0 - '@voidzero-dev/vite-plus-core': 0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) - '@voidzero-dev/vite-plus-test': 0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + '@voidzero-dev/vite-plus-core': 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3) + '@voidzero-dev/vite-plus-test': 0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3) cac: 7.0.0 cross-spawn: 7.0.6 - oxfmt: 0.42.0 - oxlint: 1.57.0(oxlint-tsgolint@0.17.3) - oxlint-tsgolint: 0.17.3 + jsonc-parser: 3.3.1 + oxfmt: 0.43.0 + oxlint: 1.58.0(oxlint-tsgolint@0.18.1) + oxlint-tsgolint: 0.18.1 picocolors: 1.1.1 optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.14 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.14 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.14 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.14 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.14 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.14 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.14 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.14 + '@voidzero-dev/vite-plus-darwin-arm64': 0.1.15 + '@voidzero-dev/vite-plus-darwin-x64': 0.1.15 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.15 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.15 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.15 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.15 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.15 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.15 transitivePeerDependencies: - '@arethetypeswrong/core' - '@edge-runtime/vm' @@ -17196,26 +17130,27 @@ snapshots: - vite - yaml - vite-plus@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3): + vite-plus@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3): dependencies: '@oxc-project/types': 0.122.0 - '@voidzero-dev/vite-plus-core': 0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) - '@voidzero-dev/vite-plus-test': 0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + '@voidzero-dev/vite-plus-core': 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3) + '@voidzero-dev/vite-plus-test': 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) cac: 7.0.0 cross-spawn: 7.0.6 - oxfmt: 0.42.0 - oxlint: 1.57.0(oxlint-tsgolint@0.17.3) - oxlint-tsgolint: 0.17.3 + jsonc-parser: 3.3.1 + oxfmt: 0.43.0 + oxlint: 1.58.0(oxlint-tsgolint@0.18.1) + oxlint-tsgolint: 0.18.1 picocolors: 1.1.1 optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.14 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.14 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.14 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.14 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.14 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.14 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.14 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.14 + '@voidzero-dev/vite-plus-darwin-arm64': 0.1.15 + '@voidzero-dev/vite-plus-darwin-x64': 0.1.15 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.15 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.15 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.15 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.15 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.15 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.15 transitivePeerDependencies: - '@arethetypeswrong/core' - '@edge-runtime/vm' @@ -17244,23 +17179,23 @@ snapshots: - vite - yaml - vite-tsconfig-paths@5.1.4(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3): + vite-tsconfig-paths@5.1.4(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2): dependencies: debug: 4.4.3(supports-color@8.1.1) globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.9.3) + tsconfck: 3.1.6(typescript@6.0.2) optionalDependencies: - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' transitivePeerDependencies: - supports-color - typescript - vite-tsconfig-paths@6.1.1(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(typescript@5.9.3): + vite-tsconfig-paths@6.1.1(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(typescript@6.0.2): dependencies: debug: 4.4.3(supports-color@8.1.1) globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.9.3) - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + tsconfck: 3.1.6(typescript@6.0.2) + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' transitivePeerDependencies: - supports-color - typescript @@ -17285,15 +17220,15 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - vitefu@1.1.2(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)): + vitefu@1.1.2(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)): optionalDependencies: - vite: '@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' - vitest-canvas-mock@1.1.4(@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)): + vitest-canvas-mock@1.1.4(@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)): dependencies: cssfontparser: 1.2.1 moo-color: 1.0.3 - vitest: '@voidzero-dev/vite-plus-test@0.1.14(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.14(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vitest: '@voidzero-dev/vite-plus-test@0.1.15(@types/node@25.5.0)(@voidzero-dev/vite-plus-core@0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3))(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.3)' void-elements@3.1.0: {} @@ -17443,10 +17378,6 @@ snapshots: zimmerframe@1.1.4: {} - zod-validation-error@4.0.2(zod@4.3.6): - dependencies: - zod: 4.3.6 - zod@4.3.6: {} zrender@6.0.0: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index abcbff7a68c..2fde5204c63 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,9 @@ +catalogMode: prefer trustPolicy: no-downgrade -minimumReleaseAge: 2880 +trustPolicyExclude: + - chokidar@4.0.3 + - reselect@5.1.1 + - semver@6.3.1 blockExoticSubdeps: true strictDepBuilds: true allowBuilds: @@ -23,7 +27,7 @@ overrides: array.prototype.flatmap: npm:@nolyfill/array.prototype.flatmap@^1.0.44 array.prototype.tosorted: npm:@nolyfill/array.prototype.tosorted@^1.0.44 assert: npm:@nolyfill/assert@^1.0.26 - brace-expansion@<2.0.2: 2.0.2 + brace-expansion@>=2.0.0 <2.0.3: 2.0.3 canvas: ^3.2.2 devalue@<5.3.2: 5.3.2 dompurify@>=3.1.3 <=3.3.1: 3.3.2 @@ -37,6 +41,7 @@ overrides: is-generator-function: npm:@nolyfill/is-generator-function@^1.0.44 is-typed-array: npm:@nolyfill/is-typed-array@^1.0.44 isarray: npm:@nolyfill/isarray@^1.0.44 + lodash-es@>=4.0.0 <= 4.17.23: 4.18.0 object.assign: npm:@nolyfill/object.assign@^1.0.44 object.entries: npm:@nolyfill/object.entries@^1.0.44 object.fromentries: npm:@nolyfill/object.fromentries@^1.0.44 @@ -64,15 +69,15 @@ overrides: tar@<=7.5.10: 7.5.11 typed-array-buffer: npm:@nolyfill/typed-array-buffer@^1.0.44 undici@>=7.0.0 <7.24.0: 7.24.0 - vite: npm:@voidzero-dev/vite-plus-core@0.1.14 - vitest: npm:@voidzero-dev/vite-plus-test@0.1.14 + vite: npm:@voidzero-dev/vite-plus-core@0.1.15 + vitest: npm:@voidzero-dev/vite-plus-test@0.1.15 which-typed-array: npm:@nolyfill/which-typed-array@^1.0.44 yaml@>=2.0.0 <2.8.3: 2.8.3 yauzl@<3.2.1: 3.2.1 catalog: - "@amplitude/analytics-browser": 2.38.0 - "@amplitude/plugin-session-replay-browser": 1.27.5 - "@antfu/eslint-config": 7.7.3 + "@amplitude/analytics-browser": 2.38.1 + "@amplitude/plugin-session-replay-browser": 1.27.6 + "@antfu/eslint-config": 8.0.0 "@base-ui/react": 1.3.0 "@chromatic-com/storybook": 5.1.1 "@cucumber/cucumber": 12.7.0 @@ -84,7 +89,7 @@ catalog: "@formatjs/intl-localematcher": 0.8.2 "@headlessui/react": 2.2.9 "@heroicons/react": 2.2.0 - "@hono/node-server": 1.19.11 + "@hono/node-server": 1.19.12 "@iconify-json/heroicons": 1.2.3 "@iconify-json/ri": 1.2.10 "@lexical/code": 0.42.0 @@ -98,34 +103,34 @@ catalog: "@mdx-js/react": 3.1.1 "@mdx-js/rollup": 3.1.1 "@monaco-editor/react": 4.7.0 - "@next/eslint-plugin-next": 16.2.1 - "@next/mdx": 16.2.1 + "@next/eslint-plugin-next": 16.2.2 + "@next/mdx": 16.2.2 "@orpc/client": 1.13.13 "@orpc/contract": 1.13.13 "@orpc/openapi-client": 1.13.13 "@orpc/tanstack-query": 1.13.13 - "@playwright/test": 1.58.2 + "@playwright/test": 1.59.1 "@remixicon/react": 4.9.0 "@rgrove/parse-xml": 4.2.0 - "@sentry/react": 10.46.0 - "@storybook/addon-docs": 10.3.3 - "@storybook/addon-links": 10.3.3 - "@storybook/addon-onboarding": 10.3.3 - "@storybook/addon-themes": 10.3.3 - "@storybook/nextjs-vite": 10.3.3 - "@storybook/react": 10.3.3 + "@sentry/react": 10.47.0 + "@storybook/addon-docs": 10.3.4 + "@storybook/addon-links": 10.3.4 + "@storybook/addon-onboarding": 10.3.4 + "@storybook/addon-themes": 10.3.4 + "@storybook/nextjs-vite": 10.3.4 + "@storybook/react": 10.3.4 "@streamdown/math": 1.0.2 "@svgdotjs/svg.js": 3.2.5 "@t3-oss/env-nextjs": 0.13.11 "@tailwindcss/postcss": 4.2.2 "@tailwindcss/typography": 0.5.19 "@tailwindcss/vite": 4.2.2 - "@tanstack/eslint-plugin-query": 5.95.2 - "@tanstack/react-devtools": 0.10.0 - "@tanstack/react-form": 1.28.5 - "@tanstack/react-form-devtools": 0.2.19 - "@tanstack/react-query": 5.95.2 - "@tanstack/react-query-devtools": 5.95.2 + "@tanstack/eslint-plugin-query": 5.96.1 + "@tanstack/react-devtools": 0.10.1 + "@tanstack/react-form": 1.28.6 + "@tanstack/react-form-devtools": 0.2.20 + "@tanstack/react-query": 5.96.1 + "@tanstack/react-query-devtools": 5.96.1 "@testing-library/dom": 10.4.1 "@testing-library/jest-dom": 6.9.1 "@testing-library/react": 16.3.2 @@ -144,12 +149,12 @@ catalog: "@types/react-syntax-highlighter": 15.5.13 "@types/react-window": 1.8.8 "@types/sortablejs": 1.15.9 - "@typescript-eslint/eslint-plugin": 8.57.2 - "@typescript-eslint/parser": 8.57.2 - "@typescript/native-preview": 7.0.0-dev.20260329.1 + "@typescript-eslint/eslint-plugin": 8.58.0 + "@typescript-eslint/parser": 8.58.0 + "@typescript/native-preview": 7.0.0-dev.20260401.1 "@vitejs/plugin-react": 6.0.1 "@vitejs/plugin-rsc": 0.5.21 - "@vitest/coverage-v8": 4.1.1 + "@vitest/coverage-v8": 4.1.2 abcjs: 6.6.2 agentation: 3.0.2 ahooks: 3.9.7 @@ -157,7 +162,7 @@ catalog: class-variance-authority: 0.7.1 clsx: 2.1.1 cmdk: 1.1.1 - code-inspector-plugin: 1.4.5 + code-inspector-plugin: 1.5.0 copy-to-clipboard: 3.3.3 cron-parser: 5.5.0 dayjs: 1.11.20 @@ -174,19 +179,18 @@ catalog: eslint-markdown: 0.6.0 eslint-plugin-better-tailwindcss: 4.3.2 eslint-plugin-hyoban: 0.14.1 - eslint-plugin-markdown-preferences: 0.40.3 + eslint-plugin-markdown-preferences: 0.41.0 eslint-plugin-no-barrel-files: 1.2.2 - eslint-plugin-react-hooks: 7.0.1 eslint-plugin-react-refresh: 0.5.2 eslint-plugin-sonarjs: 4.0.2 - eslint-plugin-storybook: 10.3.3 + eslint-plugin-storybook: 10.3.4 fast-deep-equal: 3.1.3 foxact: 0.3.0 happy-dom: 20.8.9 - hono: 4.12.9 + hono: 4.12.10 html-entities: 2.6.0 html-to-image: 1.11.13 - i18next: 25.10.10 + i18next: 26.0.3 i18next-resources-to-backend: 1.2.1 iconify-import-svg: 0.1.2 immer: 11.1.4 @@ -196,15 +200,15 @@ catalog: js-yaml: 4.1.1 jsonschema: 1.5.0 katex: 0.16.44 - knip: 6.1.0 + knip: 6.2.0 ky: 1.14.3 lamejs: 1.2.1 lexical: 0.42.0 - mermaid: 11.13.0 + mermaid: 11.14.0 mime: 4.1.0 mitt: 3.0.1 negotiator: 1.0.0 - next: 16.2.1 + next: 16.2.2 next-themes: 0.4.6 nuqs: 2.8.9 pinyin-pro: 3.28.0 @@ -217,7 +221,7 @@ catalog: react-dom: 19.2.4 react-easy-crop: 5.5.7 react-hotkeys-hook: 5.2.4 - react-i18next: 16.6.6 + react-i18next: 17.0.2 react-multi-email: 1.0.25 react-papaparse: 4.4.0 react-pdf-highlighter: 8.0.0-rc.0 @@ -229,30 +233,29 @@ catalog: reactflow: 11.11.4 remark-breaks: 4.0.0 remark-directive: 4.0.0 - sass: 1.98.0 scheduler: 0.27.0 sharp: 0.34.5 sortablejs: 1.15.7 std-semver: 1.0.8 - storybook: 10.3.3 + storybook: 10.3.4 streamdown: 2.5.0 string-ts: 2.3.1 tailwind-merge: 3.5.0 tailwindcss: 4.2.2 - taze: 19.10.0 + taze: 19.11.0 tldts: 7.0.27 - tsup: ^8.5.1 + tsdown: 0.21.7 tsx: 4.21.0 - typescript: 5.9.3 + typescript: 6.0.2 uglify-js: 3.19.3 unist-util-visit: 5.1.0 use-context-selector: 2.0.0 uuid: 13.0.0 - vinext: 0.0.38 - vite: npm:@voidzero-dev/vite-plus-core@0.1.14 + vinext: 0.0.39 + vite: npm:@voidzero-dev/vite-plus-core@0.1.15 vite-plugin-inspect: 12.0.0-beta.1 - vite-plus: 0.1.14 - vitest: npm:@voidzero-dev/vite-plus-test@0.1.14 + vite-plus: 0.1.15 + vitest: npm:@voidzero-dev/vite-plus-test@0.1.15 vitest-canvas-mock: 1.1.4 zod: 4.3.6 zundo: 2.3.0 diff --git a/sdks/nodejs-client/package.json b/sdks/nodejs-client/package.json index d487c3abb3c..da9f7353ac6 100644 --- a/sdks/nodejs-client/package.json +++ b/sdks/nodejs-client/package.json @@ -45,12 +45,12 @@ "homepage": "https://dify.ai", "license": "MIT", "scripts": { - "build": "tsup", + "build": "vp pack", "lint": "eslint", "lint:fix": "eslint --fix", "type-check": "tsc -p tsconfig.json --noEmit", - "test": "vitest run", - "test:coverage": "vitest run --coverage", + "test": "vp test", + "test:coverage": "vp test --coverage", "publish:check": "./scripts/publish.sh --dry-run", "publish:npm": "./scripts/publish.sh" }, @@ -61,8 +61,8 @@ "@typescript-eslint/parser": "catalog:", "@vitest/coverage-v8": "catalog:", "eslint": "catalog:", - "tsup": "catalog:", "typescript": "catalog:", + "vite-plus": "catalog:", "vitest": "catalog:" } } diff --git a/sdks/nodejs-client/tsconfig.json b/sdks/nodejs-client/tsconfig.json index f6fb5e0555a..46055447be3 100644 --- a/sdks/nodejs-client/tsconfig.json +++ b/sdks/nodejs-client/tsconfig.json @@ -11,7 +11,8 @@ "strict": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + "skipLibCheck": true, + "types": ["node"] }, "include": ["src/**/*.ts", "tests/**/*.ts"] } diff --git a/sdks/nodejs-client/tsup.config.ts b/sdks/nodejs-client/tsup.config.ts deleted file mode 100644 index 522382c2a5b..00000000000 --- a/sdks/nodejs-client/tsup.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - format: ["esm"], - dts: true, - clean: true, - sourcemap: true, - splitting: false, - treeshake: true, - outDir: "dist", -}); diff --git a/sdks/nodejs-client/vitest.config.ts b/sdks/nodejs-client/vite.config.ts similarity index 53% rename from sdks/nodejs-client/vitest.config.ts rename to sdks/nodejs-client/vite.config.ts index c3132e9ecf6..8d89508682d 100644 --- a/sdks/nodejs-client/vitest.config.ts +++ b/sdks/nodejs-client/vite.config.ts @@ -1,6 +1,17 @@ -import { defineConfig } from "vitest/config"; +import { defineConfig } from "vite-plus"; export default defineConfig({ + pack: { + entry: ["src/index.ts"], + format: ["esm"], + dts: true, + clean: true, + sourcemap: true, + // splitting: false, + treeshake: true, + outDir: "dist", + target: false, + }, test: { environment: "node", include: ["**/*.test.ts"], diff --git a/taze.config.js b/taze.config.js index cd5a9f86563..73bc0b5abab 100644 --- a/taze.config.js +++ b/taze.config.js @@ -6,10 +6,5 @@ export default defineConfig({ 'react-syntax-highlighter', 'react-window', '@types/react-window', - - // We can not upgrade these yet - 'typescript', ], - - maturityPeriod: 2, }) diff --git a/web/eslint-suppressions.json b/web/eslint-suppressions.json index b9a77b68947..f7c0ad36ee1 100644 --- a/web/eslint-suppressions.json +++ b/web/eslint-suppressions.json @@ -743,9 +743,6 @@ "no-restricted-imports": { "count": 2 }, - "react-refresh/only-export-components": { - "count": 1 - }, "tailwindcss/enforce-consistent-class-order": { "count": 1 } @@ -3630,17 +3627,11 @@ } }, "app/components/base/prompt-editor/plugins/shortcuts-popup-plugin/index.tsx": { - "react-refresh/only-export-components": { - "count": 1 - }, "ts/no-explicit-any": { "count": 2 } }, "app/components/base/prompt-editor/plugins/update-block.tsx": { - "react-refresh/only-export-components": { - "count": 2 - }, "ts/no-explicit-any": { "count": 2 } @@ -7917,9 +7908,6 @@ } }, "app/components/signin/countdown.tsx": { - "react-refresh/only-export-components": { - "count": 2 - }, "tailwindcss/enforce-consistent-class-order": { "count": 1 } @@ -8317,7 +8305,7 @@ }, "app/components/workflow/block-selector/index-bar.tsx": { "react-refresh/only-export-components": { - "count": 5 + "count": 1 }, "tailwindcss/enforce-consistent-class-order": { "count": 1 diff --git a/web/eslint.config.mjs b/web/eslint.config.mjs index 8be71d26cc7..cbae7af77fa 100644 --- a/web/eslint.config.mjs +++ b/web/eslint.config.mjs @@ -1,14 +1,12 @@ // @ts-check import antfu, { GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_TESTS, GLOB_TS, GLOB_TSX, isInEditorEnv, isInGitHooksOrLintStaged } from '@antfu/eslint-config' -import pluginReact from '@eslint-react/eslint-plugin' import pluginQuery from '@tanstack/eslint-plugin-query' import md from 'eslint-markdown' import tailwindcss from 'eslint-plugin-better-tailwindcss' import hyoban from 'eslint-plugin-hyoban' import markdownPreferences from 'eslint-plugin-markdown-preferences' import noBarrelFiles from 'eslint-plugin-no-barrel-files' -import { reactRefresh } from 'eslint-plugin-react-refresh' import sonar from 'eslint-plugin-sonarjs' import storybook from 'eslint-plugin-storybook' import { @@ -26,11 +24,14 @@ process.env.TAILWIND_MODE ??= 'ESLINT' const disableRuleAutoFix = !(isInEditorEnv() || isInGitHooksOrLintStaged()) -const plugins = pluginReact.configs.all.plugins - export default antfu( { - react: false, + react: { + overrides: { + 'react/set-state-in-effect': 'error', + 'react/no-unnecessary-use-prefix': 'error', + }, + }, nextjs: { overrides: { 'next/no-img-element': 'off', @@ -58,24 +59,6 @@ export default antfu( e18e: false, pnpm: false, }, - { - plugins: { - 'react': plugins?.['@eslint-react'], - 'react-dom': plugins?.['@eslint-react/dom'], - 'react-naming-convention': plugins?.['@eslint-react/naming-convention'], - 'react-rsc': plugins?.['@eslint-react/rsc'], - 'react-web-api': plugins?.['@eslint-react/web-api'], - }, - }, - { - files: [GLOB_TS, GLOB_TSX], - rules: { - ...pluginReact.configs['recommended-typescript'].rules, - 'react/prefer-namespace-import': 'error', - 'react/set-state-in-effect': 'error', - 'react/no-unnecessary-use-prefix': 'error', - }, - }, { files: [...GLOB_TESTS, GLOB_MARKDOWN_CODE, 'vitest.setup.ts', 'test/i18n-mock.ts'], rules: { @@ -92,7 +75,6 @@ export default antfu( 'no-barrel-files/no-barrel-files': 'error', }, }, - reactRefresh.configs.next(), markdownPreferences.configs.standard, { files: [GLOB_MARKDOWN], @@ -231,10 +213,3 @@ export default antfu( 'tailwindcss/no-unnecessary-whitespace', ] : []) - .renamePlugins({ - '@eslint-react': 'react', - '@eslint-react/dom': 'react-dom', - '@eslint-react/naming-convention': 'react-naming-convention', - '@eslint-react/rsc': 'react-rsc', - '@eslint-react/web-api': 'react-web-api', - }) diff --git a/web/i18n-config/settings.ts b/web/i18n-config/settings.ts index 1adfb77ff92..accbc1600d4 100644 --- a/web/i18n-config/settings.ts +++ b/web/i18n-config/settings.ts @@ -6,7 +6,6 @@ export function getInitOptions(): InitOptions { // We do not have en for fallback load: 'currentOnly', fallbackLng: 'en-US', - showSupportNotice: false, partialBundledLanguages: true, keySeparator: false, ns: namespaces, diff --git a/web/package.json b/web/package.json index d72d8b16487..1dada2bfb58 100644 --- a/web/package.json +++ b/web/package.json @@ -212,7 +212,6 @@ "eslint-plugin-hyoban": "catalog:", "eslint-plugin-markdown-preferences": "catalog:", "eslint-plugin-no-barrel-files": "catalog:", - "eslint-plugin-react-hooks": "catalog:", "eslint-plugin-react-refresh": "catalog:", "eslint-plugin-sonarjs": "catalog:", "eslint-plugin-storybook": "catalog:", @@ -221,7 +220,6 @@ "knip": "catalog:", "postcss": "catalog:", "react-server-dom-webpack": "catalog:", - "sass": "catalog:", "storybook": "catalog:", "tailwindcss": "catalog:", "tsx": "catalog:", From e55bd61c1703aea88adb312cfb2fd4266393c5fa Mon Sep 17 00:00:00 2001 From: agenthaulk Date: Thu, 2 Apr 2026 20:37:35 -0700 Subject: [PATCH 02/12] refactor: replace useContext with use in selected batch (#34450) --- .../components/base/features/__tests__/context.spec.tsx | 8 ++++---- .../data-source/store/__tests__/provider.spec.tsx | 6 +++--- .../create-from-pipeline/data-source/store/index.ts | 6 +++--- .../provider-added-card/system-quota-card.tsx | 4 ++-- .../workflow/hooks-store/__tests__/provider.spec.tsx | 4 ++-- .../nodes/_base/components/mcp-tool-availability.tsx | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/web/app/components/base/features/__tests__/context.spec.tsx b/web/app/components/base/features/__tests__/context.spec.tsx index 64bfb256f2a..4be4e00d266 100644 --- a/web/app/components/base/features/__tests__/context.spec.tsx +++ b/web/app/components/base/features/__tests__/context.spec.tsx @@ -1,10 +1,10 @@ import { render, screen } from '@testing-library/react' import * as React from 'react' -import { useContext } from 'react' +import { use } from 'react' import { FeaturesContext, FeaturesProvider } from '../context' const TestConsumer = () => { - const store = useContext(FeaturesContext) + const store = use(FeaturesContext) if (!store) return
no store
@@ -34,10 +34,10 @@ describe('FeaturesProvider', () => { }) it('should maintain the same store reference across re-renders', () => { - const storeRefs: Array> = [] + const storeRefs: Array> = [] const StoreRefCollector = () => { - const store = useContext(FeaturesContext) + const store = use(FeaturesContext) storeRefs.push(store) return null } diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/store/__tests__/provider.spec.tsx b/web/app/components/datasets/documents/create-from-pipeline/data-source/store/__tests__/provider.spec.tsx index 7796c83e17f..f12fa9fbfd0 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/store/__tests__/provider.spec.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/store/__tests__/provider.spec.tsx @@ -1,5 +1,5 @@ import { render, screen } from '@testing-library/react' -import { useContext } from 'react' +import { use } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import DataSourceProvider, { DataSourceContext } from '../provider' @@ -11,7 +11,7 @@ vi.mock('../', () => ({ // Test consumer component that reads from context function ContextConsumer() { - const store = useContext(DataSourceContext) + const store = use(DataSourceContext) return (
{store ? 'has-store' : 'no-store'} @@ -65,7 +65,7 @@ describe('DataSourceProvider', () => { const storeValues: Array = [] function StoreCapture() { - const store = useContext(DataSourceContext) + const store = use(DataSourceContext) storeValues.push(store as typeof mockStore | null) return null } diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/store/index.ts b/web/app/components/datasets/documents/create-from-pipeline/data-source/store/index.ts index 03fa2ed7e36..75b00b9f618 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/store/index.ts +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/store/index.ts @@ -3,7 +3,7 @@ import type { LocalFileSliceShape } from './slices/local-file' import type { OnlineDocumentSliceShape } from './slices/online-document' import type { OnlineDriveSliceShape } from './slices/online-drive' import type { WebsiteCrawlSliceShape } from './slices/website-crawl' -import { useContext } from 'react' +import { use } from 'react' import { createStore, useStore } from 'zustand' import { DataSourceContext } from './provider' import { createCommonSlice } from './slices/common' @@ -29,7 +29,7 @@ export const createDataSourceStore = () => { } export const useDataSourceStoreWithSelector = (selector: (state: DataSourceShape) => T): T => { - const store = useContext(DataSourceContext) + const store = use(DataSourceContext) if (!store) throw new Error('Missing DataSourceContext.Provider in the tree') @@ -37,7 +37,7 @@ export const useDataSourceStoreWithSelector = (selector: (state: DataSourceSh } export const useDataSourceStore = () => { - const store = useContext(DataSourceContext) + const store = use(DataSourceContext) if (!store) throw new Error('Missing DataSourceContext.Provider in the tree') diff --git a/web/app/components/header/account-setting/model-provider-page/provider-added-card/system-quota-card.tsx b/web/app/components/header/account-setting/model-provider-page/provider-added-card/system-quota-card.tsx index 79f71d27c9e..41b0acd8cf5 100644 --- a/web/app/components/header/account-setting/model-provider-page/provider-added-card/system-quota-card.tsx +++ b/web/app/components/header/account-setting/model-provider-page/provider-added-card/system-quota-card.tsx @@ -1,5 +1,5 @@ import type { ReactNode } from 'react' -import { createContext, useContext } from 'react' +import { createContext, use } from 'react' import { cn } from '@/utils/classnames' import styles from './quota-panel.module.css' @@ -41,7 +41,7 @@ const SystemQuotaCard = ({ } const Label = ({ children, className }: { children: ReactNode, className?: string }) => { - const variant = useContext(VariantContext) + const variant = use(VariantContext) return (
{ }) const Consumer = () => { - const store = useContext(HooksStoreContext) + const store = use(HooksStoreContext) return
{store ? 'has-hooks-store' : 'missing-hooks-store'}
} diff --git a/web/app/components/workflow/nodes/_base/components/mcp-tool-availability.tsx b/web/app/components/workflow/nodes/_base/components/mcp-tool-availability.tsx index 37944f71913..c09c31032d0 100644 --- a/web/app/components/workflow/nodes/_base/components/mcp-tool-availability.tsx +++ b/web/app/components/workflow/nodes/_base/components/mcp-tool-availability.tsx @@ -1,6 +1,6 @@ 'use client' import type { ReactNode } from 'react' -import { createContext, useContext } from 'react' +import { createContext, use } from 'react' type MCPToolAvailabilityContextValue = { versionSupported?: boolean @@ -26,7 +26,7 @@ export const MCPToolAvailabilityProvider = ({ ) export const useMCPToolAvailability = (): MCPToolAvailability => { - const context = useContext(MCPToolAvailabilityContext) + const context = use(MCPToolAvailabilityContext) if (context === undefined) return { allowed: true } From 33d4fd357c3929a1107459172c00e3d7c9798945 Mon Sep 17 00:00:00 2001 From: Renzo <170978465+RenzoMXD@users.noreply.github.com> Date: Fri, 3 Apr 2026 05:41:46 +0200 Subject: [PATCH 03/12] refactor: select in account_service (AccountService class) (#34496) --- api/services/account_service.py | 32 +++++++---- .../services/test_account_service.py | 56 +++++-------------- 2 files changed, 35 insertions(+), 53 deletions(-) diff --git a/api/services/account_service.py b/api/services/account_service.py index 29b14447305..d4ba7520bdf 100644 --- a/api/services/account_service.py +++ b/api/services/account_service.py @@ -144,22 +144,26 @@ class AccountService: @staticmethod def load_user(user_id: str) -> None | Account: - account = db.session.query(Account).filter_by(id=user_id).first() + account = db.session.get(Account, user_id) if not account: return None if account.status == AccountStatus.BANNED: raise Unauthorized("Account is banned.") - current_tenant = db.session.query(TenantAccountJoin).filter_by(account_id=account.id, current=True).first() + current_tenant = db.session.scalar( + select(TenantAccountJoin) + .where(TenantAccountJoin.account_id == account.id, TenantAccountJoin.current == True) + .limit(1) + ) if current_tenant: account.set_tenant_id(current_tenant.tenant_id) else: - available_ta = ( - db.session.query(TenantAccountJoin) - .filter_by(account_id=account.id) + available_ta = db.session.scalar( + select(TenantAccountJoin) + .where(TenantAccountJoin.account_id == account.id) .order_by(TenantAccountJoin.id.asc()) - .first() + .limit(1) ) if not available_ta: return None @@ -195,7 +199,7 @@ class AccountService: def authenticate(email: str, password: str, invite_token: str | None = None) -> Account: """authenticate account with email and password""" - account = db.session.query(Account).filter_by(email=email).first() + account = db.session.scalar(select(Account).where(Account.email == email).limit(1)) if not account: raise AccountPasswordError("Invalid email or password.") @@ -371,8 +375,10 @@ class AccountService: """Link account integrate""" try: # Query whether there is an existing binding record for the same provider - account_integrate: AccountIntegrate | None = ( - db.session.query(AccountIntegrate).filter_by(account_id=account.id, provider=provider).first() + account_integrate: AccountIntegrate | None = db.session.scalar( + select(AccountIntegrate) + .where(AccountIntegrate.account_id == account.id, AccountIntegrate.provider == provider) + .limit(1) ) if account_integrate: @@ -416,7 +422,9 @@ class AccountService: def update_account_email(account: Account, email: str) -> Account: """Update account email""" account.email = email - account_integrate = db.session.query(AccountIntegrate).filter_by(account_id=account.id).first() + account_integrate = db.session.scalar( + select(AccountIntegrate).where(AccountIntegrate.account_id == account.id).limit(1) + ) if account_integrate: db.session.delete(account_integrate) db.session.add(account) @@ -818,7 +826,7 @@ class AccountService: ) ) - account = db.session.query(Account).where(Account.email == email).first() + account = db.session.scalar(select(Account).where(Account.email == email).limit(1)) if not account: return None @@ -1018,7 +1026,7 @@ class AccountService: @staticmethod def check_email_unique(email: str) -> bool: - return db.session.query(Account).filter_by(email=email).first() is None + return db.session.scalar(select(Account).where(Account.email == email).limit(1)) is None class TenantService: diff --git a/api/tests/unit_tests/services/test_account_service.py b/api/tests/unit_tests/services/test_account_service.py index dcd6785464c..af86949012b 100644 --- a/api/tests/unit_tests/services/test_account_service.py +++ b/api/tests/unit_tests/services/test_account_service.py @@ -173,9 +173,7 @@ class TestAccountService: # Setup test data mock_account = TestAccountAssociatedDataFactory.create_account_mock() - # Setup smart database query mock - query_results = {("Account", "email", "test@example.com"): mock_account} - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.scalar.return_value = mock_account mock_password_dependencies["compare_password"].return_value = True @@ -188,9 +186,7 @@ class TestAccountService: def test_authenticate_account_not_found(self, mock_db_dependencies): """Test authentication when account does not exist.""" - # Setup smart database query mock - no matching results - query_results = {("Account", "email", "notfound@example.com"): None} - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.scalar.return_value = None # Execute test and verify exception self._assert_exception_raised( @@ -202,9 +198,7 @@ class TestAccountService: # Setup test data mock_account = TestAccountAssociatedDataFactory.create_account_mock(status="banned") - # Setup smart database query mock - query_results = {("Account", "email", "banned@example.com"): mock_account} - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.scalar.return_value = mock_account # Execute test and verify exception self._assert_exception_raised(AccountLoginError, AccountService.authenticate, "banned@example.com", "password") @@ -214,9 +208,7 @@ class TestAccountService: # Setup test data mock_account = TestAccountAssociatedDataFactory.create_account_mock() - # Setup smart database query mock - query_results = {("Account", "email", "test@example.com"): mock_account} - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.scalar.return_value = mock_account mock_password_dependencies["compare_password"].return_value = False @@ -230,9 +222,7 @@ class TestAccountService: # Setup test data mock_account = TestAccountAssociatedDataFactory.create_account_mock(status="pending") - # Setup smart database query mock - query_results = {("Account", "email", "pending@example.com"): mock_account} - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.scalar.return_value = mock_account mock_password_dependencies["compare_password"].return_value = True @@ -422,12 +412,8 @@ class TestAccountService: mock_account = TestAccountAssociatedDataFactory.create_account_mock() mock_tenant_join = TestAccountAssociatedDataFactory.create_tenant_join_mock() - # Setup smart database query mock - query_results = { - ("Account", "id", "user-123"): mock_account, - ("TenantAccountJoin", "account_id", "user-123"): mock_tenant_join, - } - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.get.return_value = mock_account + mock_db_dependencies["db"].session.scalar.return_value = mock_tenant_join # Mock datetime with patch("services.account_service.datetime") as mock_datetime: @@ -444,9 +430,7 @@ class TestAccountService: def test_load_user_not_found(self, mock_db_dependencies): """Test user loading when user does not exist.""" - # Setup smart database query mock - no matching results - query_results = {("Account", "id", "non-existent-user"): None} - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.get.return_value = None # Execute test result = AccountService.load_user("non-existent-user") @@ -459,9 +443,7 @@ class TestAccountService: # Setup test data mock_account = TestAccountAssociatedDataFactory.create_account_mock(status="banned") - # Setup smart database query mock - query_results = {("Account", "id", "user-123"): mock_account} - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.get.return_value = mock_account # Execute test and verify exception self._assert_exception_raised( @@ -476,13 +458,9 @@ class TestAccountService: mock_account = TestAccountAssociatedDataFactory.create_account_mock() mock_available_tenant = TestAccountAssociatedDataFactory.create_tenant_join_mock(current=False) - # Setup smart database query mock for complex scenario - query_results = { - ("Account", "id", "user-123"): mock_account, - ("TenantAccountJoin", "account_id", "user-123"): None, # No current tenant - ("TenantAccountJoin", "order_by", "first_available"): mock_available_tenant, # First available tenant - } - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.get.return_value = mock_account + # First scalar: current tenant (None), second scalar: available tenant + mock_db_dependencies["db"].session.scalar.side_effect = [None, mock_available_tenant] # Mock datetime with patch("services.account_service.datetime") as mock_datetime: @@ -503,13 +481,9 @@ class TestAccountService: # Setup test data mock_account = TestAccountAssociatedDataFactory.create_account_mock() - # Setup smart database query mock for no tenants scenario - query_results = { - ("Account", "id", "user-123"): mock_account, - ("TenantAccountJoin", "account_id", "user-123"): None, # No current tenant - ("TenantAccountJoin", "order_by", "first_available"): None, # No available tenants - } - ServiceDbTestHelper.setup_db_query_filter_by_mock(mock_db_dependencies["db"], query_results) + mock_db_dependencies["db"].session.get.return_value = mock_account + # First scalar: current tenant (None), second scalar: available tenant (None) + mock_db_dependencies["db"].session.scalar.side_effect = [None, None] # Mock datetime with patch("services.account_service.datetime") as mock_datetime: From 7eb632eb34a674c9defe8b00b6cd133940052dd4 Mon Sep 17 00:00:00 2001 From: Renzo <170978465+RenzoMXD@users.noreply.github.com> Date: Fri, 3 Apr 2026 05:42:01 +0200 Subject: [PATCH 04/12] refactor: select in rag_pipeline (#34495) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- api/services/rag_pipeline/rag_pipeline.py | 107 ++++++------ .../rag_pipeline/test_rag_pipeline_service.py | 156 +++++------------- 2 files changed, 95 insertions(+), 168 deletions(-) diff --git a/api/services/rag_pipeline/rag_pipeline.py b/api/services/rag_pipeline/rag_pipeline.py index 50f34d5a8ad..5b3668aebbd 100644 --- a/api/services/rag_pipeline/rag_pipeline.py +++ b/api/services/rag_pipeline/rag_pipeline.py @@ -156,27 +156,27 @@ class RagPipelineService: :param template_id: template id :param template_info: template info """ - customized_template: PipelineCustomizedTemplate | None = ( - db.session.query(PipelineCustomizedTemplate) + customized_template: PipelineCustomizedTemplate | None = db.session.scalar( + select(PipelineCustomizedTemplate) .where( PipelineCustomizedTemplate.id == template_id, PipelineCustomizedTemplate.tenant_id == current_user.current_tenant_id, ) - .first() + .limit(1) ) if not customized_template: raise ValueError("Customized pipeline template not found.") # check template name is exist template_name = template_info.name if template_name: - template = ( - db.session.query(PipelineCustomizedTemplate) + template = db.session.scalar( + select(PipelineCustomizedTemplate) .where( PipelineCustomizedTemplate.name == template_name, PipelineCustomizedTemplate.tenant_id == current_user.current_tenant_id, PipelineCustomizedTemplate.id != template_id, ) - .first() + .limit(1) ) if template: raise ValueError("Template name is already exists") @@ -192,13 +192,13 @@ class RagPipelineService: """ Delete customized pipeline template. """ - customized_template: PipelineCustomizedTemplate | None = ( - db.session.query(PipelineCustomizedTemplate) + customized_template: PipelineCustomizedTemplate | None = db.session.scalar( + select(PipelineCustomizedTemplate) .where( PipelineCustomizedTemplate.id == template_id, PipelineCustomizedTemplate.tenant_id == current_user.current_tenant_id, ) - .first() + .limit(1) ) if not customized_template: raise ValueError("Customized pipeline template not found.") @@ -210,14 +210,14 @@ class RagPipelineService: Get draft workflow """ # fetch draft workflow by rag pipeline - workflow = ( - db.session.query(Workflow) + workflow = db.session.scalar( + select(Workflow) .where( Workflow.tenant_id == pipeline.tenant_id, Workflow.app_id == pipeline.id, Workflow.version == "draft", ) - .first() + .limit(1) ) # return draft workflow @@ -232,28 +232,28 @@ class RagPipelineService: return None # fetch published workflow by workflow_id - workflow = ( - db.session.query(Workflow) + workflow = db.session.scalar( + select(Workflow) .where( Workflow.tenant_id == pipeline.tenant_id, Workflow.app_id == pipeline.id, Workflow.id == pipeline.workflow_id, ) - .first() + .limit(1) ) return workflow def get_published_workflow_by_id(self, pipeline: Pipeline, workflow_id: str) -> Workflow | None: """Fetch a published workflow snapshot by ID for restore operations.""" - workflow = ( - db.session.query(Workflow) + workflow = db.session.scalar( + select(Workflow) .where( Workflow.tenant_id == pipeline.tenant_id, Workflow.app_id == pipeline.id, Workflow.id == workflow_id, ) - .first() + .limit(1) ) if workflow and workflow.version == Workflow.VERSION_DRAFT: raise IsDraftWorkflowError("source workflow must be published") @@ -974,7 +974,7 @@ class RagPipelineService: if invoke_from.value == InvokeFrom.PUBLISHED_PIPELINE: document_id = get_system_segment(variable_pool, SystemVariableKey.DOCUMENT_ID) if document_id: - document = db.session.query(Document).where(Document.id == document_id.value).first() + document = db.session.get(Document, document_id.value) if document: document.indexing_status = IndexingStatus.ERROR document.error = error @@ -1178,12 +1178,12 @@ class RagPipelineService: """ Publish customized pipeline template """ - pipeline = db.session.query(Pipeline).where(Pipeline.id == pipeline_id).first() + pipeline = db.session.get(Pipeline, pipeline_id) if not pipeline: raise ValueError("Pipeline not found") if not pipeline.workflow_id: raise ValueError("Pipeline workflow not found") - workflow = db.session.query(Workflow).where(Workflow.id == pipeline.workflow_id).first() + workflow = db.session.get(Workflow, pipeline.workflow_id) if not workflow: raise ValueError("Workflow not found") with Session(db.engine) as session: @@ -1194,21 +1194,21 @@ class RagPipelineService: # check template name is exist template_name = args.get("name") if template_name: - template = ( - db.session.query(PipelineCustomizedTemplate) + template = db.session.scalar( + select(PipelineCustomizedTemplate) .where( PipelineCustomizedTemplate.name == template_name, PipelineCustomizedTemplate.tenant_id == pipeline.tenant_id, ) - .first() + .limit(1) ) if template: raise ValueError("Template name is already exists") - max_position = ( - db.session.query(func.max(PipelineCustomizedTemplate.position)) - .where(PipelineCustomizedTemplate.tenant_id == pipeline.tenant_id) - .scalar() + max_position = db.session.scalar( + select(func.max(PipelineCustomizedTemplate.position)).where( + PipelineCustomizedTemplate.tenant_id == pipeline.tenant_id + ) ) from services.rag_pipeline.rag_pipeline_dsl_service import RagPipelineDslService @@ -1239,13 +1239,14 @@ class RagPipelineService: def is_workflow_exist(self, pipeline: Pipeline) -> bool: return ( - db.session.query(Workflow) - .where( - Workflow.tenant_id == pipeline.tenant_id, - Workflow.app_id == pipeline.id, - Workflow.version == Workflow.VERSION_DRAFT, + db.session.scalar( + select(func.count(Workflow.id)).where( + Workflow.tenant_id == pipeline.tenant_id, + Workflow.app_id == pipeline.id, + Workflow.version == Workflow.VERSION_DRAFT, + ) ) - .count() + or 0 ) > 0 def get_node_last_run( @@ -1353,11 +1354,11 @@ class RagPipelineService: def get_recommended_plugins(self, type: str) -> dict: # Query active recommended plugins - query = db.session.query(PipelineRecommendedPlugin).where(PipelineRecommendedPlugin.active == True) + stmt = select(PipelineRecommendedPlugin).where(PipelineRecommendedPlugin.active == True) if type and type != "all": - query = query.where(PipelineRecommendedPlugin.type == type) + stmt = stmt.where(PipelineRecommendedPlugin.type == type) - pipeline_recommended_plugins = query.order_by(PipelineRecommendedPlugin.position.asc()).all() + pipeline_recommended_plugins = db.session.scalars(stmt.order_by(PipelineRecommendedPlugin.position.asc())).all() if not pipeline_recommended_plugins: return { @@ -1396,14 +1397,12 @@ class RagPipelineService: """ Retry error document """ - document_pipeline_execution_log = ( - db.session.query(DocumentPipelineExecutionLog) - .where(DocumentPipelineExecutionLog.document_id == document.id) - .first() + document_pipeline_execution_log = db.session.scalar( + select(DocumentPipelineExecutionLog).where(DocumentPipelineExecutionLog.document_id == document.id).limit(1) ) if not document_pipeline_execution_log: raise ValueError("Document pipeline execution log not found") - pipeline = db.session.query(Pipeline).where(Pipeline.id == document_pipeline_execution_log.pipeline_id).first() + pipeline = db.session.get(Pipeline, document_pipeline_execution_log.pipeline_id) if not pipeline: raise ValueError("Pipeline not found") # convert to app config @@ -1432,23 +1431,23 @@ class RagPipelineService: """ Get datasource plugins """ - dataset: Dataset | None = ( - db.session.query(Dataset) + dataset: Dataset | None = db.session.scalar( + select(Dataset) .where( Dataset.id == dataset_id, Dataset.tenant_id == tenant_id, ) - .first() + .limit(1) ) if not dataset: raise ValueError("Dataset not found") - pipeline: Pipeline | None = ( - db.session.query(Pipeline) + pipeline: Pipeline | None = db.session.scalar( + select(Pipeline) .where( Pipeline.id == dataset.pipeline_id, Pipeline.tenant_id == tenant_id, ) - .first() + .limit(1) ) if not pipeline: raise ValueError("Pipeline not found") @@ -1530,23 +1529,23 @@ class RagPipelineService: """ Get pipeline """ - dataset: Dataset | None = ( - db.session.query(Dataset) + dataset: Dataset | None = db.session.scalar( + select(Dataset) .where( Dataset.id == dataset_id, Dataset.tenant_id == tenant_id, ) - .first() + .limit(1) ) if not dataset: raise ValueError("Dataset not found") - pipeline: Pipeline | None = ( - db.session.query(Pipeline) + pipeline: Pipeline | None = db.session.scalar( + select(Pipeline) .where( Pipeline.id == dataset.pipeline_id, Pipeline.tenant_id == tenant_id, ) - .first() + .limit(1) ) if not pipeline: raise ValueError("Pipeline not found") diff --git a/api/tests/unit_tests/services/rag_pipeline/test_rag_pipeline_service.py b/api/tests/unit_tests/services/rag_pipeline/test_rag_pipeline_service.py index cb3c2d742d9..f270ee0fde5 100644 --- a/api/tests/unit_tests/services/rag_pipeline/test_rag_pipeline_service.py +++ b/api/tests/unit_tests/services/rag_pipeline/test_rag_pipeline_service.py @@ -117,9 +117,7 @@ def test_get_all_published_workflow_applies_limit_and_has_more(rag_pipeline_serv def test_get_pipeline_raises_when_dataset_not_found(mocker, rag_pipeline_service) -> None: - first_query = mocker.Mock() - first_query.where.return_value.first.return_value = None - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=first_query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=None) with pytest.raises(ValueError, match="Dataset not found"): rag_pipeline_service.get_pipeline("tenant-1", "dataset-1") @@ -131,12 +129,8 @@ def test_get_pipeline_raises_when_dataset_not_found(mocker, rag_pipeline_service def test_update_customized_pipeline_template_success(mocker) -> None: template = SimpleNamespace(name="old", description="old", icon={}, updated_by=None) - # First query finds the template, second query (duplicate check) returns None - query_mock_1 = mocker.Mock() - query_mock_1.where.return_value.first.return_value = template - query_mock_2 = mocker.Mock() - query_mock_2.where.return_value.first.return_value = None - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", side_effect=[query_mock_1, query_mock_2]) + # First scalar finds the template, second scalar (duplicate check) returns None + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[template, None]) mocker.patch("services.rag_pipeline.rag_pipeline.db.session.commit") mocker.patch("services.rag_pipeline.rag_pipeline.current_user", SimpleNamespace(id="u1", current_tenant_id="t1")) @@ -152,9 +146,7 @@ def test_update_customized_pipeline_template_success(mocker) -> None: def test_update_customized_pipeline_template_not_found(mocker) -> None: - query_mock = mocker.Mock() - query_mock.where.return_value.first.return_value = None - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query_mock) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=None) mocker.patch("services.rag_pipeline.rag_pipeline.current_user", SimpleNamespace(id="u1", current_tenant_id="t1")) info = PipelineTemplateInfoEntity(name="x", description="d", icon_info=IconInfo(icon="i")) @@ -166,9 +158,7 @@ def test_update_customized_pipeline_template_duplicate_name(mocker) -> None: template = SimpleNamespace(name="old", description="old", icon={}, updated_by=None) duplicate = SimpleNamespace(name="dup") - query_mock = mocker.Mock() - query_mock.where.return_value.first.side_effect = [template, duplicate] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query_mock) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[template, duplicate]) mocker.patch("services.rag_pipeline.rag_pipeline.current_user", SimpleNamespace(id="u1", current_tenant_id="t1")) info = PipelineTemplateInfoEntity(name="dup", description="d", icon_info=IconInfo(icon="i")) @@ -181,9 +171,7 @@ def test_update_customized_pipeline_template_duplicate_name(mocker) -> None: def test_delete_customized_pipeline_template_success(mocker) -> None: template = SimpleNamespace(id="tpl-1") - query_mock = mocker.Mock() - query_mock.where.return_value.first.return_value = template - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query_mock) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=template) delete_mock = mocker.patch("services.rag_pipeline.rag_pipeline.db.session.delete") commit_mock = mocker.patch("services.rag_pipeline.rag_pipeline.db.session.commit") @@ -196,9 +184,7 @@ def test_delete_customized_pipeline_template_success(mocker) -> None: def test_delete_customized_pipeline_template_not_found(mocker) -> None: - query_mock = mocker.Mock() - query_mock.where.return_value.first.return_value = None - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query_mock) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=None) mocker.patch("services.rag_pipeline.rag_pipeline.current_user", SimpleNamespace(id="u1", current_tenant_id="t1")) with pytest.raises(ValueError, match="Customized pipeline template not found"): @@ -397,18 +383,14 @@ def test_get_rag_pipeline_workflow_run_delegates(mocker, rag_pipeline_service) - def test_is_workflow_exist_returns_true_when_draft_exists(mocker, rag_pipeline_service) -> None: - query_mock = mocker.Mock() - query_mock.where.return_value.count.return_value = 1 - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query_mock) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=1) pipeline = SimpleNamespace(tenant_id="t1", id="p1") assert rag_pipeline_service.is_workflow_exist(pipeline) is True def test_is_workflow_exist_returns_false_when_no_draft(mocker, rag_pipeline_service) -> None: - query_mock = mocker.Mock() - query_mock.where.return_value.count.return_value = 0 - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query_mock) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=0) pipeline = SimpleNamespace(tenant_id="t1", id="p1") assert rag_pipeline_service.is_workflow_exist(pipeline) is False @@ -738,8 +720,7 @@ def test_get_second_step_parameters_success(mocker, rag_pipeline_service) -> Non def test_publish_customized_pipeline_template_success(mocker, rag_pipeline_service) -> None: - from models.dataset import Dataset, Pipeline, PipelineCustomizedTemplate - from models.workflow import Workflow + from models.dataset import Pipeline # 1. Setup mocks pipeline = mocker.Mock(spec=Pipeline) @@ -754,36 +735,15 @@ def test_publish_customized_pipeline_template_success(mocker, rag_pipeline_servi # Mock db itself to avoid app context errors mock_db = mocker.patch("services.rag_pipeline.rag_pipeline.db") - # Improved mocking for session.query - def mock_query_side_effect(model): - m = mocker.Mock() - if model == Pipeline: - m.where.return_value.first.return_value = pipeline - elif model == Workflow: - m.where.return_value.first.return_value = workflow - elif model == PipelineCustomizedTemplate: - m.where.return_value.first.return_value = None - elif model == Dataset: - m.where.return_value.first.return_value = mocker.Mock() - else: - # For func.max cases - m.where.return_value.scalar.return_value = 5 - m.where.return_value.first.return_value = mocker.Mock() - return m - - mock_db.session.query.side_effect = mock_query_side_effect + # Mock get() for Pipeline and Workflow PK lookups + mock_db.session.get.side_effect = [pipeline, workflow] + # Mock scalar() for template name check (None) and max position (5) + mock_db.session.scalar.side_effect = [None, 5] # Mock retrieve_dataset dataset = mocker.Mock() pipeline.retrieve_dataset.return_value = dataset - # Mock max position - mocker.patch("services.rag_pipeline.rag_pipeline.func.max", return_value=1) - mocker.patch( - "services.rag_pipeline.rag_pipeline.db.session.query.return_value.where.return_value.scalar", - return_value=5, - ) - # Mock RagPipelineDslService mock_dsl_service = mocker.Mock() mock_dsl_service.export_rag_pipeline_dsl.return_value = {"dsl": "content"} @@ -839,9 +799,7 @@ def test_get_datasource_plugins_success(mocker, rag_pipeline_service) -> None: workflow.rag_pipeline_variables = [] # Mock queries - mock_query = mocker.Mock() - mock_query.where.return_value.first.side_effect = [dataset, pipeline] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=mock_query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[dataset, pipeline]) mocker.patch.object(rag_pipeline_service, "get_published_workflow", return_value=workflow) @@ -881,11 +839,9 @@ def test_retry_error_document_success(mocker, rag_pipeline_service) -> None: workflow = mocker.Mock() - # Mock queries - mock_query = mocker.Mock() - # Log lookup, then Pipeline lookup - mock_query.where.return_value.first.side_effect = [log, pipeline] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=mock_query) + # Mock queries: Log lookup via scalar, Pipeline lookup via get + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=log) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.get", return_value=pipeline) mocker.patch.object(rag_pipeline_service, "get_published_workflow", return_value=workflow) @@ -913,7 +869,7 @@ def test_set_datasource_variables_success(mocker, rag_pipeline_service) -> None: # Mock db aggressively mock_db = mocker.patch("services.rag_pipeline.rag_pipeline.db") mock_db.engine = mocker.Mock() - mock_db.session.query.return_value.where.return_value.first.return_value = mocker.Mock() + mock_db.session.scalar.return_value = mocker.Mock() pipeline = mocker.Mock(spec=Pipeline) pipeline.id = "p-1" @@ -976,7 +932,7 @@ def test_get_draft_workflow_success(mocker, rag_pipeline_service) -> None: workflow = mocker.Mock(spec=Workflow) mock_db = mocker.patch("services.rag_pipeline.rag_pipeline.db") - mock_db.session.query.return_value.where.return_value.first.return_value = workflow + mock_db.session.scalar.return_value = workflow # 2. Run test result = rag_pipeline_service.get_draft_workflow(pipeline) @@ -998,7 +954,7 @@ def test_get_published_workflow_success(mocker, rag_pipeline_service) -> None: workflow = mocker.Mock(spec=Workflow) mock_db = mocker.patch("services.rag_pipeline.rag_pipeline.db") - mock_db.session.query.return_value.where.return_value.first.return_value = workflow + mock_db.session.scalar.return_value = workflow # 2. Run test result = rag_pipeline_service.get_published_workflow(pipeline) @@ -1319,11 +1275,8 @@ def test_get_rag_pipeline_workflow_run_node_executions_returns_sorted_executions def test_get_recommended_plugins_returns_empty_when_no_active_plugins(mocker, rag_pipeline_service) -> None: - query = mocker.Mock() - query.where.return_value = query - query.order_by.return_value.all.return_value = [] mock_db = mocker.patch("services.rag_pipeline.rag_pipeline.db") - mock_db.session.query.return_value = query + mock_db.session.scalars.return_value.all.return_value = [] result = rag_pipeline_service.get_recommended_plugins("all") @@ -1336,11 +1289,8 @@ def test_get_recommended_plugins_returns_empty_when_no_active_plugins(mocker, ra def test_get_recommended_plugins_returns_installed_and_uninstalled(mocker, rag_pipeline_service) -> None: plugin_a = SimpleNamespace(plugin_id="plugin-a") plugin_b = SimpleNamespace(plugin_id="plugin-b") - query = mocker.Mock() - query.where.return_value = query - query.order_by.return_value.all.return_value = [plugin_a, plugin_b] mock_db = mocker.patch("services.rag_pipeline.rag_pipeline.db") - mock_db.session.query.return_value = query + mock_db.session.scalars.return_value.all.return_value = [plugin_a, plugin_b] mocker.patch("services.rag_pipeline.rag_pipeline.current_user", SimpleNamespace(id="u1", current_tenant_id="t1")) mocker.patch( "services.rag_pipeline.rag_pipeline.BuiltinToolManageService.list_builtin_tools", @@ -1568,9 +1518,7 @@ def test_get_second_step_parameters_filters_first_step_variables(mocker, rag_pip def test_retry_error_document_raises_when_execution_log_not_found(mocker, rag_pipeline_service) -> None: - query = mocker.Mock() - query.where.return_value.first.return_value = None - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=None) with pytest.raises(ValueError, match="Document pipeline execution log not found"): rag_pipeline_service.retry_error_document( @@ -1581,9 +1529,7 @@ def test_retry_error_document_raises_when_execution_log_not_found(mocker, rag_pi def test_get_datasource_plugins_raises_when_workflow_not_found(mocker, rag_pipeline_service) -> None: dataset = SimpleNamespace(pipeline_id="p1") pipeline = SimpleNamespace(id="p1", tenant_id="t1") - query = mocker.Mock() - query.where.return_value.first.side_effect = [dataset, pipeline] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[dataset, pipeline]) mocker.patch.object(rag_pipeline_service, "get_published_workflow", return_value=None) with pytest.raises(ValueError, match="Pipeline or workflow not found"): @@ -1656,8 +1602,7 @@ def test_handle_node_run_result_marks_document_error_for_published_invoke(mocker document = SimpleNamespace(indexing_status="waiting", error=None) query = mocker.Mock() - query.where.return_value.first.return_value = document - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.get", return_value=document) add_mock = mocker.patch("services.rag_pipeline.rag_pipeline.db.session.add") commit_mock = mocker.patch("services.rag_pipeline.rag_pipeline.db.session.commit") @@ -1712,9 +1657,7 @@ def test_run_datasource_node_preview_raises_for_unsupported_provider(mocker, rag def test_publish_customized_pipeline_template_raises_for_missing_pipeline(mocker, rag_pipeline_service) -> None: - query = mocker.Mock() - query.where.return_value.first.return_value = None - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.get", return_value=None) with pytest.raises(ValueError, match="Pipeline not found"): rag_pipeline_service.publish_customized_pipeline_template("p1", {}) @@ -1722,9 +1665,7 @@ def test_publish_customized_pipeline_template_raises_for_missing_pipeline(mocker def test_publish_customized_pipeline_template_raises_for_missing_workflow_id(mocker, rag_pipeline_service) -> None: pipeline = SimpleNamespace(id="p1", tenant_id="t1", workflow_id=None) - query = mocker.Mock() - query.where.return_value.first.return_value = pipeline - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.get", return_value=pipeline) with pytest.raises(ValueError, match="Pipeline workflow not found"): rag_pipeline_service.publish_customized_pipeline_template("p1", {"name": "template-name"}) @@ -1732,8 +1673,7 @@ def test_publish_customized_pipeline_template_raises_for_missing_workflow_id(moc def test_get_pipeline_raises_when_dataset_missing(mocker, rag_pipeline_service) -> None: query = mocker.Mock() - query.where.return_value.first.return_value = None - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=None) with pytest.raises(ValueError, match="Dataset not found"): rag_pipeline_service.get_pipeline("t1", "d1") @@ -1742,8 +1682,7 @@ def test_get_pipeline_raises_when_dataset_missing(mocker, rag_pipeline_service) def test_get_pipeline_raises_when_pipeline_missing(mocker, rag_pipeline_service) -> None: dataset = SimpleNamespace(pipeline_id="p1") query = mocker.Mock() - query.where.return_value.first.side_effect = [dataset, None] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[dataset, None]) with pytest.raises(ValueError, match="Pipeline not found"): rag_pipeline_service.get_pipeline("t1", "d1") @@ -1783,8 +1722,7 @@ def test_get_pipeline_templates_builtin_en_us_no_fallback(mocker) -> None: def test_update_customized_pipeline_template_commits_when_name_empty(mocker) -> None: template = SimpleNamespace(name="old", description="old", icon={}, updated_by=None) query = mocker.Mock() - query.where.return_value.first.return_value = template - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=template) commit = mocker.patch("services.rag_pipeline.rag_pipeline.db.session.commit") mocker.patch("services.rag_pipeline.rag_pipeline.current_user", SimpleNamespace(id="u1", current_tenant_id="t1")) @@ -2011,8 +1949,7 @@ def test_run_free_workflow_node_delegates_to_handle_result(mocker, rag_pipeline_ def test_publish_customized_pipeline_template_raises_when_workflow_missing(mocker, rag_pipeline_service) -> None: pipeline = SimpleNamespace(id="p1", tenant_id="t1", workflow_id="wf-1") query = mocker.Mock() - query.where.return_value.first.side_effect = [pipeline, None] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.get", side_effect=[pipeline, None]) with pytest.raises(ValueError, match="Workflow not found"): rag_pipeline_service.publish_customized_pipeline_template("p1", {}) @@ -2021,11 +1958,9 @@ def test_publish_customized_pipeline_template_raises_when_workflow_missing(mocke def test_publish_customized_pipeline_template_raises_when_dataset_missing(mocker, rag_pipeline_service) -> None: pipeline = SimpleNamespace(id="p1", tenant_id="t1", workflow_id="wf-1") workflow = SimpleNamespace(id="wf-1") - query = mocker.Mock() - query.where.return_value.first.side_effect = [pipeline, workflow] mock_db = mocker.patch("services.rag_pipeline.rag_pipeline.db") mock_db.engine = mocker.Mock() - mock_db.session.query.return_value = query + mock_db.session.get.side_effect = [pipeline, workflow] session_ctx = mocker.MagicMock() session_ctx.__enter__.return_value = SimpleNamespace() session_ctx.__exit__.return_value = False @@ -2038,11 +1973,8 @@ def test_publish_customized_pipeline_template_raises_when_dataset_missing(mocker def test_get_recommended_plugins_skips_manifest_when_missing(mocker, rag_pipeline_service) -> None: plugin = SimpleNamespace(plugin_id="plugin-a") - query = mocker.Mock() - query.where.return_value = query - query.order_by.return_value.all.return_value = [plugin] mock_db = mocker.patch("services.rag_pipeline.rag_pipeline.db") - mock_db.session.query.return_value = query + mock_db.session.scalars.return_value.all.return_value = [plugin] mocker.patch("services.rag_pipeline.rag_pipeline.current_user", SimpleNamespace(id="u1", current_tenant_id="t1")) mocker.patch("services.rag_pipeline.rag_pipeline.BuiltinToolManageService.list_builtin_tools", return_value=[]) mocker.patch("services.rag_pipeline.rag_pipeline.marketplace.batch_fetch_plugin_by_ids", return_value=[]) @@ -2056,8 +1988,8 @@ def test_get_recommended_plugins_skips_manifest_when_missing(mocker, rag_pipelin def test_retry_error_document_raises_when_pipeline_missing(mocker, rag_pipeline_service) -> None: exec_log = SimpleNamespace(pipeline_id="p1") query = mocker.Mock() - query.where.return_value.first.side_effect = [exec_log, None] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=exec_log) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.get", return_value=None) with pytest.raises(ValueError, match="Pipeline not found"): rag_pipeline_service.retry_error_document( @@ -2069,8 +2001,8 @@ def test_retry_error_document_raises_when_workflow_missing(mocker, rag_pipeline_ exec_log = SimpleNamespace(pipeline_id="p1") pipeline = SimpleNamespace(id="p1") query = mocker.Mock() - query.where.return_value.first.side_effect = [exec_log, pipeline] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", return_value=exec_log) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.get", return_value=pipeline) mocker.patch.object(rag_pipeline_service, "get_published_workflow", return_value=None) with pytest.raises(ValueError, match="Workflow not found"): @@ -2086,8 +2018,7 @@ def test_get_datasource_plugins_returns_empty_for_non_datasource_nodes(mocker, r graph_dict={"nodes": [{"id": "n1", "data": {"type": "start"}}]}, rag_pipeline_variables=[] ) query = mocker.Mock() - query.where.return_value.first.side_effect = [dataset, pipeline] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[dataset, pipeline]) mocker.patch.object(rag_pipeline_service, "get_published_workflow", return_value=workflow) assert rag_pipeline_service.get_datasource_plugins("t1", "d1", True) == [] @@ -2250,8 +2181,7 @@ def test_get_datasource_plugins_handles_empty_datasource_data_and_non_published( rag_pipeline_variables=[{"variable": "v1", "belong_to_node_id": "shared"}], ) query = mocker.Mock() - query.where.return_value.first.side_effect = [dataset, pipeline] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[dataset, pipeline]) mocker.patch.object(rag_pipeline_service, "get_draft_workflow", return_value=workflow) mocker.patch( "services.rag_pipeline.rag_pipeline.DatasourceProviderService.list_datasource_credentials", return_value=[] @@ -2291,8 +2221,7 @@ def test_get_datasource_plugins_extracts_user_inputs_and_credentials(mocker, rag ], ) query = mocker.Mock() - query.where.return_value.first.side_effect = [dataset, pipeline] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[dataset, pipeline]) mocker.patch.object(rag_pipeline_service, "get_published_workflow", return_value=workflow) mocker.patch( "services.rag_pipeline.rag_pipeline.DatasourceProviderService.list_datasource_credentials", @@ -2310,8 +2239,7 @@ def test_get_pipeline_returns_pipeline_when_found(mocker, rag_pipeline_service) dataset = SimpleNamespace(pipeline_id="p1") pipeline = SimpleNamespace(id="p1") query = mocker.Mock() - query.where.return_value.first.side_effect = [dataset, pipeline] - mocker.patch("services.rag_pipeline.rag_pipeline.db.session.query", return_value=query) + mocker.patch("services.rag_pipeline.rag_pipeline.db.session.scalar", side_effect=[dataset, pipeline]) result = rag_pipeline_service.get_pipeline("t1", "d1") From 608958de1c43eba96b1e88a6b046c69a6a2e2327 Mon Sep 17 00:00:00 2001 From: Renzo <170978465+RenzoMXD@users.noreply.github.com> Date: Fri, 3 Apr 2026 05:42:16 +0200 Subject: [PATCH 05/12] refactor: select in external_knowledge_service (#34493) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- api/services/external_knowledge_service.py | 70 +++-- .../services/external_dataset_service.py | 46 +-- .../services/test_external_dataset_service.py | 292 ++---------------- 3 files changed, 101 insertions(+), 307 deletions(-) diff --git a/api/services/external_knowledge_service.py b/api/services/external_knowledge_service.py index 9a522ece528..b178718baae 100644 --- a/api/services/external_knowledge_service.py +++ b/api/services/external_knowledge_service.py @@ -5,7 +5,7 @@ from urllib.parse import urlparse import httpx from graphon.nodes.http_request.exc import InvalidHttpMethodError -from sqlalchemy import select +from sqlalchemy import func, select from constants import HIDDEN_VALUE from core.helper import ssrf_proxy @@ -103,8 +103,10 @@ class ExternalDatasetService: @staticmethod def get_external_knowledge_api(external_knowledge_api_id: str, tenant_id: str) -> ExternalKnowledgeApis: - external_knowledge_api: ExternalKnowledgeApis | None = ( - db.session.query(ExternalKnowledgeApis).filter_by(id=external_knowledge_api_id, tenant_id=tenant_id).first() + external_knowledge_api: ExternalKnowledgeApis | None = db.session.scalar( + select(ExternalKnowledgeApis) + .where(ExternalKnowledgeApis.id == external_knowledge_api_id, ExternalKnowledgeApis.tenant_id == tenant_id) + .limit(1) ) if external_knowledge_api is None: raise ValueError("api template not found") @@ -112,8 +114,10 @@ class ExternalDatasetService: @staticmethod def update_external_knowledge_api(tenant_id, user_id, external_knowledge_api_id, args) -> ExternalKnowledgeApis: - external_knowledge_api: ExternalKnowledgeApis | None = ( - db.session.query(ExternalKnowledgeApis).filter_by(id=external_knowledge_api_id, tenant_id=tenant_id).first() + external_knowledge_api: ExternalKnowledgeApis | None = db.session.scalar( + select(ExternalKnowledgeApis) + .where(ExternalKnowledgeApis.id == external_knowledge_api_id, ExternalKnowledgeApis.tenant_id == tenant_id) + .limit(1) ) if external_knowledge_api is None: raise ValueError("api template not found") @@ -132,8 +136,10 @@ class ExternalDatasetService: @staticmethod def delete_external_knowledge_api(tenant_id: str, external_knowledge_api_id: str): - external_knowledge_api = ( - db.session.query(ExternalKnowledgeApis).filter_by(id=external_knowledge_api_id, tenant_id=tenant_id).first() + external_knowledge_api = db.session.scalar( + select(ExternalKnowledgeApis) + .where(ExternalKnowledgeApis.id == external_knowledge_api_id, ExternalKnowledgeApis.tenant_id == tenant_id) + .limit(1) ) if external_knowledge_api is None: raise ValueError("api template not found") @@ -144,9 +150,12 @@ class ExternalDatasetService: @staticmethod def external_knowledge_api_use_check(external_knowledge_api_id: str) -> tuple[bool, int]: count = ( - db.session.query(ExternalKnowledgeBindings) - .filter_by(external_knowledge_api_id=external_knowledge_api_id) - .count() + db.session.scalar( + select(func.count(ExternalKnowledgeBindings.id)).where( + ExternalKnowledgeBindings.external_knowledge_api_id == external_knowledge_api_id + ) + ) + or 0 ) if count > 0: return True, count @@ -154,8 +163,10 @@ class ExternalDatasetService: @staticmethod def get_external_knowledge_binding_with_dataset_id(tenant_id: str, dataset_id: str) -> ExternalKnowledgeBindings: - external_knowledge_binding: ExternalKnowledgeBindings | None = ( - db.session.query(ExternalKnowledgeBindings).filter_by(dataset_id=dataset_id, tenant_id=tenant_id).first() + external_knowledge_binding: ExternalKnowledgeBindings | None = db.session.scalar( + select(ExternalKnowledgeBindings) + .where(ExternalKnowledgeBindings.dataset_id == dataset_id, ExternalKnowledgeBindings.tenant_id == tenant_id) + .limit(1) ) if not external_knowledge_binding: raise ValueError("external knowledge binding not found") @@ -163,8 +174,10 @@ class ExternalDatasetService: @staticmethod def document_create_args_validate(tenant_id: str, external_knowledge_api_id: str, process_parameter: dict): - external_knowledge_api = ( - db.session.query(ExternalKnowledgeApis).filter_by(id=external_knowledge_api_id, tenant_id=tenant_id).first() + external_knowledge_api = db.session.scalar( + select(ExternalKnowledgeApis) + .where(ExternalKnowledgeApis.id == external_knowledge_api_id, ExternalKnowledgeApis.tenant_id == tenant_id) + .limit(1) ) if external_knowledge_api is None or external_knowledge_api.settings is None: raise ValueError("api template not found") @@ -238,12 +251,17 @@ class ExternalDatasetService: @staticmethod def create_external_dataset(tenant_id: str, user_id: str, args: dict) -> Dataset: # check if dataset name already exists - if db.session.query(Dataset).filter_by(name=args.get("name"), tenant_id=tenant_id).first(): + if db.session.scalar( + select(Dataset).where(Dataset.name == args.get("name"), Dataset.tenant_id == tenant_id).limit(1) + ): raise DatasetNameDuplicateError(f"Dataset with name {args.get('name')} already exists.") - external_knowledge_api = ( - db.session.query(ExternalKnowledgeApis) - .filter_by(id=args.get("external_knowledge_api_id"), tenant_id=tenant_id) - .first() + external_knowledge_api = db.session.scalar( + select(ExternalKnowledgeApis) + .where( + ExternalKnowledgeApis.id == args.get("external_knowledge_api_id"), + ExternalKnowledgeApis.tenant_id == tenant_id, + ) + .limit(1) ) if external_knowledge_api is None: @@ -286,16 +304,18 @@ class ExternalDatasetService: external_retrieval_parameters: dict, metadata_condition: MetadataCondition | None = None, ): - external_knowledge_binding = ( - db.session.query(ExternalKnowledgeBindings).filter_by(dataset_id=dataset_id, tenant_id=tenant_id).first() + external_knowledge_binding = db.session.scalar( + select(ExternalKnowledgeBindings) + .where(ExternalKnowledgeBindings.dataset_id == dataset_id, ExternalKnowledgeBindings.tenant_id == tenant_id) + .limit(1) ) if not external_knowledge_binding: raise ValueError("external knowledge binding not found") - external_knowledge_api = ( - db.session.query(ExternalKnowledgeApis) - .filter_by(id=external_knowledge_binding.external_knowledge_api_id) - .first() + external_knowledge_api = db.session.scalar( + select(ExternalKnowledgeApis) + .where(ExternalKnowledgeApis.id == external_knowledge_binding.external_knowledge_api_id) + .limit(1) ) if external_knowledge_api is None or external_knowledge_api.settings is None: raise ValueError("external api template not found") diff --git a/api/tests/unit_tests/services/external_dataset_service.py b/api/tests/unit_tests/services/external_dataset_service.py index 70bd1c73b30..5848603ab8e 100644 --- a/api/tests/unit_tests/services/external_dataset_service.py +++ b/api/tests/unit_tests/services/external_dataset_service.py @@ -292,7 +292,7 @@ class TestExternalDatasetServiceCrudExternalKnowledgeApi: """ api = Mock(spec=ExternalKnowledgeApis) - mock_db_session.query.return_value.filter_by.return_value.first.return_value = api + mock_db_session.scalar.return_value = api result = ExternalDatasetService.get_external_knowledge_api("api-id", "tenant-id") assert result is api @@ -302,7 +302,7 @@ class TestExternalDatasetServiceCrudExternalKnowledgeApi: When the record is absent, a ``ValueError`` is raised. """ - mock_db_session.query.return_value.filter_by.return_value.first.return_value = None + mock_db_session.scalar.return_value = None with pytest.raises(ValueError, match="api template not found"): ExternalDatasetService.get_external_knowledge_api("missing-id", "tenant-id") @@ -320,7 +320,7 @@ class TestExternalDatasetServiceCrudExternalKnowledgeApi: existing_api = Mock(spec=ExternalKnowledgeApis) existing_api.settings_dict = {"api_key": "stored-key"} existing_api.settings = '{"api_key":"stored-key"}' - mock_db_session.query.return_value.filter_by.return_value.first.return_value = existing_api + mock_db_session.scalar.return_value = existing_api args = { "name": "New Name", @@ -340,7 +340,7 @@ class TestExternalDatasetServiceCrudExternalKnowledgeApi: Updating a non‑existent API template should raise ``ValueError``. """ - mock_db_session.query.return_value.filter_by.return_value.first.return_value = None + mock_db_session.scalar.return_value = None with pytest.raises(ValueError, match="api template not found"): ExternalDatasetService.update_external_knowledge_api( @@ -356,7 +356,7 @@ class TestExternalDatasetServiceCrudExternalKnowledgeApi: """ api = Mock(spec=ExternalKnowledgeApis) - mock_db_session.query.return_value.filter_by.return_value.first.return_value = api + mock_db_session.scalar.return_value = api ExternalDatasetService.delete_external_knowledge_api("tenant-1", "api-1") @@ -368,7 +368,7 @@ class TestExternalDatasetServiceCrudExternalKnowledgeApi: Deletion of a missing template should raise ``ValueError``. """ - mock_db_session.query.return_value.filter_by.return_value.first.return_value = None + mock_db_session.scalar.return_value = None with pytest.raises(ValueError, match="api template not found"): ExternalDatasetService.delete_external_knowledge_api("tenant-1", "missing") @@ -394,7 +394,7 @@ class TestExternalDatasetServiceUsageAndBindings: When there are bindings, ``external_knowledge_api_use_check`` returns True and count. """ - mock_db_session.query.return_value.filter_by.return_value.count.return_value = 3 + mock_db_session.scalar.return_value = 3 in_use, count = ExternalDatasetService.external_knowledge_api_use_check("api-1") @@ -406,7 +406,7 @@ class TestExternalDatasetServiceUsageAndBindings: Zero bindings should return ``(False, 0)``. """ - mock_db_session.query.return_value.filter_by.return_value.count.return_value = 0 + mock_db_session.scalar.return_value = 0 in_use, count = ExternalDatasetService.external_knowledge_api_use_check("api-1") @@ -419,7 +419,7 @@ class TestExternalDatasetServiceUsageAndBindings: """ binding = Mock(spec=ExternalKnowledgeBindings) - mock_db_session.query.return_value.filter_by.return_value.first.return_value = binding + mock_db_session.scalar.return_value = binding result = ExternalDatasetService.get_external_knowledge_binding_with_dataset_id("tenant-1", "ds-1") assert result is binding @@ -429,7 +429,7 @@ class TestExternalDatasetServiceUsageAndBindings: Missing binding should result in a ``ValueError``. """ - mock_db_session.query.return_value.filter_by.return_value.first.return_value = None + mock_db_session.scalar.return_value = None with pytest.raises(ValueError, match="external knowledge binding not found"): ExternalDatasetService.get_external_knowledge_binding_with_dataset_id("tenant-1", "ds-1") @@ -460,7 +460,7 @@ class TestExternalDatasetServiceDocumentCreateArgsValidate: '[{"document_process_setting":[{"name":"foo","required":true},{"name":"bar","required":false}]}]' ) # Raw string; the service itself calls json.loads on it - mock_db_session.query.return_value.filter_by.return_value.first.return_value = external_api + mock_db_session.scalar.return_value = external_api process_parameter = {"foo": "value", "bar": "optional"} @@ -474,7 +474,7 @@ class TestExternalDatasetServiceDocumentCreateArgsValidate: When the referenced API template is missing, a ``ValueError`` is raised. """ - mock_db_session.query.return_value.filter_by.return_value.first.return_value = None + mock_db_session.scalar.return_value = None with pytest.raises(ValueError, match="api template not found"): ExternalDatasetService.document_create_args_validate("tenant-1", "missing", {}) @@ -488,7 +488,7 @@ class TestExternalDatasetServiceDocumentCreateArgsValidate: external_api.settings = ( '[{"document_process_setting":[{"name":"foo","required":true},{"name":"bar","required":false}]}]' ) - mock_db_session.query.return_value.filter_by.return_value.first.return_value = external_api + mock_db_session.scalar.return_value = external_api process_parameter = {"bar": "present"} # missing "foo" @@ -702,7 +702,7 @@ class TestExternalDatasetServiceCreateExternalDataset: } # No existing dataset with same name. - mock_db_session.query.return_value.filter_by.return_value.first.side_effect = [ + mock_db_session.scalar.side_effect = [ None, # duplicate‑name check Mock(spec=ExternalKnowledgeApis), # external knowledge api ] @@ -724,7 +724,7 @@ class TestExternalDatasetServiceCreateExternalDataset: """ existing_dataset = Mock(spec=Dataset) - mock_db_session.query.return_value.filter_by.return_value.first.return_value = existing_dataset + mock_db_session.scalar.return_value = existing_dataset args = { "name": "Existing", @@ -744,7 +744,7 @@ class TestExternalDatasetServiceCreateExternalDataset: """ # First call: duplicate name check – not found. - mock_db_session.query.return_value.filter_by.return_value.first.side_effect = [ + mock_db_session.scalar.side_effect = [ None, None, # external knowledge api lookup ] @@ -763,8 +763,10 @@ class TestExternalDatasetServiceCreateExternalDataset: ``external_knowledge_id`` and ``external_knowledge_api_id`` are mandatory. """ - # duplicate name check - mock_db_session.query.return_value.filter_by.return_value.first.side_effect = [ + # duplicate name check — two calls to create_external_dataset, each does 2 scalar calls + mock_db_session.scalar.side_effect = [ + None, + Mock(spec=ExternalKnowledgeApis), None, Mock(spec=ExternalKnowledgeApis), ] @@ -826,7 +828,7 @@ class TestExternalDatasetServiceFetchExternalKnowledgeRetrieval: api.settings = '{"endpoint":"https://example.com","api_key":"secret"}' # First query: binding; second query: api. - mock_db_session.query.return_value.filter_by.return_value.first.side_effect = [ + mock_db_session.scalar.side_effect = [ binding, api, ] @@ -861,7 +863,7 @@ class TestExternalDatasetServiceFetchExternalKnowledgeRetrieval: Missing binding should raise ``ValueError``. """ - mock_db_session.query.return_value.filter_by.return_value.first.return_value = None + mock_db_session.scalar.return_value = None with pytest.raises(ValueError, match="external knowledge binding not found"): ExternalDatasetService.fetch_external_knowledge_retrieval( @@ -878,7 +880,7 @@ class TestExternalDatasetServiceFetchExternalKnowledgeRetrieval: """ binding = ExternalDatasetTestDataFactory.create_external_binding() - mock_db_session.query.return_value.filter_by.return_value.first.side_effect = [ + mock_db_session.scalar.side_effect = [ binding, None, ] @@ -901,7 +903,7 @@ class TestExternalDatasetServiceFetchExternalKnowledgeRetrieval: api = Mock(spec=ExternalKnowledgeApis) api.settings = '{"endpoint":"https://example.com","api_key":"secret"}' - mock_db_session.query.return_value.filter_by.return_value.first.side_effect = [ + mock_db_session.scalar.side_effect = [ binding, api, ] diff --git a/api/tests/unit_tests/services/test_external_dataset_service.py b/api/tests/unit_tests/services/test_external_dataset_service.py index 3709e1fa94d..7c8dab5029e 100644 --- a/api/tests/unit_tests/services/test_external_dataset_service.py +++ b/api/tests/unit_tests/services/test_external_dataset_service.py @@ -799,10 +799,7 @@ class TestExternalDatasetServiceGetAPI: api_id = "api-123" expected_api = factory.create_external_knowledge_api_mock(api_id=api_id) - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = expected_api + mock_db.session.scalar.return_value = expected_api # Act tenant_id = "tenant-123" @@ -810,16 +807,12 @@ class TestExternalDatasetServiceGetAPI: # Assert assert result.id == api_id - mock_query.filter_by.assert_called_once_with(id=api_id, tenant_id=tenant_id) @patch("services.external_knowledge_service.db") def test_get_external_knowledge_api_not_found(self, mock_db, factory): """Test error when API is not found.""" # Arrange - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = None + mock_db.session.scalar.return_value = None # Act & Assert with pytest.raises(ValueError, match="api template not found"): @@ -848,10 +841,7 @@ class TestExternalDatasetServiceUpdateAPI: "settings": {"endpoint": "https://new.example.com", "api_key": "new-key"}, } - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = existing_api + mock_db.session.scalar.return_value = existing_api # Act result = ExternalDatasetService.update_external_knowledge_api(tenant_id, user_id, api_id, args) @@ -881,10 +871,7 @@ class TestExternalDatasetServiceUpdateAPI: "settings": {"endpoint": "https://api.example.com", "api_key": HIDDEN_VALUE}, } - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = existing_api + mock_db.session.scalar.return_value = existing_api # Act result = ExternalDatasetService.update_external_knowledge_api(tenant_id, "user-123", api_id, args) @@ -897,10 +884,7 @@ class TestExternalDatasetServiceUpdateAPI: def test_update_external_knowledge_api_not_found(self, mock_db, factory): """Test error when API is not found.""" # Arrange - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = None + mock_db.session.scalar.return_value = None args = {"name": "Updated API"} @@ -912,10 +896,7 @@ class TestExternalDatasetServiceUpdateAPI: def test_update_external_knowledge_api_tenant_mismatch(self, mock_db, factory): """Test error when tenant ID doesn't match.""" # Arrange - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = None + mock_db.session.scalar.return_value = None args = {"name": "Updated API"} @@ -934,10 +915,7 @@ class TestExternalDatasetServiceUpdateAPI: args = {"name": "New Name Only"} - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = existing_api + mock_db.session.scalar.return_value = existing_api # Act result = ExternalDatasetService.update_external_knowledge_api("tenant-123", "user-123", "api-123", args) @@ -958,10 +936,7 @@ class TestExternalDatasetServiceDeleteAPI: existing_api = factory.create_external_knowledge_api_mock(api_id=api_id, tenant_id=tenant_id) - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = existing_api + mock_db.session.scalar.return_value = existing_api # Act ExternalDatasetService.delete_external_knowledge_api(tenant_id, api_id) @@ -974,10 +949,7 @@ class TestExternalDatasetServiceDeleteAPI: def test_delete_external_knowledge_api_not_found(self, mock_db, factory): """Test error when API is not found.""" # Arrange - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = None + mock_db.session.scalar.return_value = None # Act & Assert with pytest.raises(ValueError, match="api template not found"): @@ -987,10 +959,7 @@ class TestExternalDatasetServiceDeleteAPI: def test_delete_external_knowledge_api_tenant_mismatch(self, mock_db, factory): """Test error when tenant ID doesn't match.""" # Arrange - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = None + mock_db.session.scalar.return_value = None # Act & Assert with pytest.raises(ValueError, match="api template not found"): @@ -1006,10 +975,7 @@ class TestExternalDatasetServiceAPIUseCheck: # Arrange api_id = "api-123" - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.count.return_value = 1 + mock_db.session.scalar.return_value = 1 # Act in_use, count = ExternalDatasetService.external_knowledge_api_use_check(api_id) @@ -1024,10 +990,7 @@ class TestExternalDatasetServiceAPIUseCheck: # Arrange api_id = "api-123" - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.count.return_value = 10 + mock_db.session.scalar.return_value = 10 # Act in_use, count = ExternalDatasetService.external_knowledge_api_use_check(api_id) @@ -1042,10 +1005,7 @@ class TestExternalDatasetServiceAPIUseCheck: # Arrange api_id = "api-123" - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.count.return_value = 0 + mock_db.session.scalar.return_value = 0 # Act in_use, count = ExternalDatasetService.external_knowledge_api_use_check(api_id) @@ -1067,10 +1027,7 @@ class TestExternalDatasetServiceGetBinding: expected_binding = factory.create_external_knowledge_binding_mock(tenant_id=tenant_id, dataset_id=dataset_id) - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = expected_binding + mock_db.session.scalar.return_value = expected_binding # Act result = ExternalDatasetService.get_external_knowledge_binding_with_dataset_id(tenant_id, dataset_id) @@ -1083,10 +1040,7 @@ class TestExternalDatasetServiceGetBinding: def test_get_external_knowledge_binding_not_found(self, mock_db, factory): """Test error when binding is not found.""" # Arrange - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = None + mock_db.session.scalar.return_value = None # Act & Assert with pytest.raises(ValueError, match="external knowledge binding not found"): @@ -1113,10 +1067,7 @@ class TestExternalDatasetServiceDocumentValidate: api = factory.create_external_knowledge_api_mock(api_id=api_id, settings=[settings]) - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = api + mock_db.session.scalar.return_value = api process_parameter = {"param1": "value1", "param2": "value2"} @@ -1134,10 +1085,7 @@ class TestExternalDatasetServiceDocumentValidate: api = factory.create_external_knowledge_api_mock(api_id=api_id, settings=[settings]) - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = api + mock_db.session.scalar.return_value = api process_parameter = {} @@ -1149,10 +1097,7 @@ class TestExternalDatasetServiceDocumentValidate: def test_document_create_args_validate_api_not_found(self, mock_db, factory): """Test validation fails when API is not found.""" # Arrange - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = None + mock_db.session.scalar.return_value = None # Act & Assert with pytest.raises(ValueError, match="api template not found"): @@ -1165,10 +1110,7 @@ class TestExternalDatasetServiceDocumentValidate: settings = {} api = factory.create_external_knowledge_api_mock(settings=[settings]) - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = api + mock_db.session.scalar.return_value = api # Act & Assert - should not raise ExternalDatasetService.document_create_args_validate("tenant-123", "api-123", {}) @@ -1186,10 +1128,7 @@ class TestExternalDatasetServiceDocumentValidate: api = factory.create_external_knowledge_api_mock(settings=[settings]) - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = api + mock_db.session.scalar.return_value = api process_parameter = {"required_param": "value"} @@ -1498,24 +1437,7 @@ class TestExternalDatasetServiceCreateDataset: api = factory.create_external_knowledge_api_mock(api_id="api-123") - # Mock database queries - mock_dataset_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == Dataset: - return mock_dataset_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_dataset_query.filter_by.return_value = mock_dataset_query - mock_dataset_query.first.return_value = None - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [None, api] # Act result = ExternalDatasetService.create_external_dataset(tenant_id, user_id, args) @@ -1534,10 +1456,7 @@ class TestExternalDatasetServiceCreateDataset: # Arrange existing_dataset = factory.create_dataset_mock(name="Duplicate Dataset") - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = existing_dataset + mock_db.session.scalar.return_value = existing_dataset args = {"name": "Duplicate Dataset"} @@ -1549,23 +1468,7 @@ class TestExternalDatasetServiceCreateDataset: def test_create_external_dataset_api_not_found_error(self, mock_db, factory): """Test error when external knowledge API is not found.""" # Arrange - mock_dataset_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == Dataset: - return mock_dataset_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_dataset_query.filter_by.return_value = mock_dataset_query - mock_dataset_query.first.return_value = None - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = None + mock_db.session.scalar.side_effect = [None, None] args = {"name": "Test Dataset", "external_knowledge_api_id": "nonexistent-api"} @@ -1579,23 +1482,7 @@ class TestExternalDatasetServiceCreateDataset: # Arrange api = factory.create_external_knowledge_api_mock() - mock_dataset_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == Dataset: - return mock_dataset_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_dataset_query.filter_by.return_value = mock_dataset_query - mock_dataset_query.first.return_value = None - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [None, api] args = {"name": "Test Dataset", "external_knowledge_api_id": "api-123"} @@ -1609,23 +1496,7 @@ class TestExternalDatasetServiceCreateDataset: # Arrange api = factory.create_external_knowledge_api_mock() - mock_dataset_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == Dataset: - return mock_dataset_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_dataset_query.filter_by.return_value = mock_dataset_query - mock_dataset_query.first.return_value = None - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [None, api] args = {"name": "Test Dataset", "external_knowledge_id": "knowledge-123"} @@ -1651,23 +1522,7 @@ class TestExternalDatasetServiceFetchRetrieval: ) api = factory.create_external_knowledge_api_mock(api_id="api-123") - mock_binding_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == ExternalKnowledgeBindings: - return mock_binding_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_binding_query.filter_by.return_value = mock_binding_query - mock_binding_query.first.return_value = binding - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [binding, api] mock_response = MagicMock() mock_response.status_code = 200 @@ -1695,10 +1550,7 @@ class TestExternalDatasetServiceFetchRetrieval: def test_fetch_external_knowledge_retrieval_binding_not_found_error(self, mock_db, factory): """Test error when external knowledge binding is not found.""" # Arrange - mock_query = MagicMock() - mock_db.session.query.return_value = mock_query - mock_query.filter_by.return_value = mock_query - mock_query.first.return_value = None + mock_db.session.scalar.return_value = None # Act & Assert with pytest.raises(ValueError, match="external knowledge binding not found"): @@ -1712,23 +1564,7 @@ class TestExternalDatasetServiceFetchRetrieval: binding = factory.create_external_knowledge_binding_mock() api = factory.create_external_knowledge_api_mock() - mock_binding_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == ExternalKnowledgeBindings: - return mock_binding_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_binding_query.filter_by.return_value = mock_binding_query - mock_binding_query.first.return_value = binding - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [binding, api] mock_response = MagicMock() mock_response.status_code = 200 @@ -1751,23 +1587,7 @@ class TestExternalDatasetServiceFetchRetrieval: binding = factory.create_external_knowledge_binding_mock() api = factory.create_external_knowledge_api_mock() - mock_binding_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == ExternalKnowledgeBindings: - return mock_binding_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_binding_query.filter_by.return_value = mock_binding_query - mock_binding_query.first.return_value = binding - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [binding, api] mock_response = MagicMock() mock_response.status_code = 200 @@ -1799,23 +1619,7 @@ class TestExternalDatasetServiceFetchRetrieval: binding = factory.create_external_knowledge_binding_mock() api = factory.create_external_knowledge_api_mock() - mock_binding_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == ExternalKnowledgeBindings: - return mock_binding_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_binding_query.filter_by.return_value = mock_binding_query - mock_binding_query.first.return_value = binding - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [binding, api] mock_response = MagicMock() mock_response.status_code = 500 @@ -1856,23 +1660,7 @@ class TestExternalDatasetServiceFetchRetrieval: ) api = factory.create_external_knowledge_api_mock(api_id="api-123") - mock_binding_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == ExternalKnowledgeBindings: - return mock_binding_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_binding_query.filter_by.return_value = mock_binding_query - mock_binding_query.first.return_value = binding - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [binding, api] mock_response = MagicMock() mock_response.status_code = status_code @@ -1891,23 +1679,7 @@ class TestExternalDatasetServiceFetchRetrieval: binding = factory.create_external_knowledge_binding_mock() api = factory.create_external_knowledge_api_mock() - mock_binding_query = MagicMock() - mock_api_query = MagicMock() - - def query_side_effect(model): - if model == ExternalKnowledgeBindings: - return mock_binding_query - elif model == ExternalKnowledgeApis: - return mock_api_query - return MagicMock() - - mock_db.session.query.side_effect = query_side_effect - - mock_binding_query.filter_by.return_value = mock_binding_query - mock_binding_query.first.return_value = binding - - mock_api_query.filter_by.return_value = mock_api_query - mock_api_query.first.return_value = api + mock_db.session.scalar.side_effect = [binding, api] mock_response = MagicMock() mock_response.status_code = 503 From d53862f135884f4999ded7903c9547cf2bdf7a54 Mon Sep 17 00:00:00 2001 From: Stephen Zhou Date: Fri, 3 Apr 2026 12:40:46 +0800 Subject: [PATCH 06/12] chore: override lodash (#34502) --- pnpm-lock.yaml | 10 ++++++---- pnpm-workspace.yaml | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8652d46c64f..b19249f5b5d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -566,6 +566,7 @@ overrides: is-generator-function: npm:@nolyfill/is-generator-function@^1.0.44 is-typed-array: npm:@nolyfill/is-typed-array@^1.0.44 isarray: npm:@nolyfill/isarray@^1.0.44 + lodash@>=4.0.0 <= 4.17.23: 4.18.0 lodash-es@>=4.0.0 <= 4.17.23: 4.18.0 object.assign: npm:@nolyfill/object.assign@^1.0.44 object.entries: npm:@nolyfill/object.entries@^1.0.44 @@ -6763,8 +6764,9 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.0: + resolution: {integrity: sha512-l1mfj2atMqndAHI3ls7XqPxEjV2J9ZkcNyHpoZA3r2T1LLwDB69jgkMWh71YKwhBbK0G2f4WSn05ahmQXVxupA==} + deprecated: Bad release. Please use lodash@4.17.21 instead. longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -12563,7 +12565,7 @@ snapshots: dayjs: 1.11.20 intersection-observer: 0.12.2 js-cookie: 3.0.5 - lodash: 4.17.23 + lodash: 4.18.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-fast-compare: 3.2.2 @@ -14676,7 +14678,7 @@ snapshots: lodash.sortby@4.7.0: {} - lodash@4.17.23: {} + lodash@4.18.0: {} longest-streak@3.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2fde5204c63..3d3413e42c1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -41,6 +41,7 @@ overrides: is-generator-function: npm:@nolyfill/is-generator-function@^1.0.44 is-typed-array: npm:@nolyfill/is-typed-array@^1.0.44 isarray: npm:@nolyfill/isarray@^1.0.44 + lodash@>=4.0.0 <= 4.17.23: 4.18.0 lodash-es@>=4.0.0 <= 4.17.23: 4.18.0 object.assign: npm:@nolyfill/object.assign@^1.0.44 object.entries: npm:@nolyfill/object.entries@^1.0.44 From a263f28e195f6647af5b24ef9d1dbe7153361df5 Mon Sep 17 00:00:00 2001 From: yyh <92089059+lyzno1@users.noreply.github.com> Date: Fri, 3 Apr 2026 12:42:02 +0800 Subject: [PATCH 07/12] fix(web): restore ui select public exports (#34501) --- web/app/components/base/ui/select/index.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/app/components/base/ui/select/index.tsx b/web/app/components/base/ui/select/index.tsx index b9441b2d6b7..7cab541f060 100644 --- a/web/app/components/base/ui/select/index.tsx +++ b/web/app/components/base/ui/select/index.tsx @@ -10,6 +10,12 @@ import { cn } from '@/utils/classnames' export const Select = BaseSelect.Root export const SelectValue = BaseSelect.Value +/** @public */ +export const SelectGroup = BaseSelect.Group +/** @public */ +export const SelectGroupLabel = BaseSelect.GroupLabel +/** @public */ +export const SelectSeparator = BaseSelect.Separator const selectTriggerVariants = cva( '', From 4fedd43af5410d1b4b3e7d92106b967999738b1e Mon Sep 17 00:00:00 2001 From: Stephen Zhou Date: Fri, 3 Apr 2026 13:34:03 +0800 Subject: [PATCH 08/12] chore: update code-inspector-plugin to 1.5.1 (#34506) --- pnpm-lock.yaml | 72 ++++++++++++++++++++++----------------------- pnpm-workspace.yaml | 2 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b19249f5b5d..d40cf6279ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -259,8 +259,8 @@ catalogs: specifier: 1.1.1 version: 1.1.1 code-inspector-plugin: - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.5.1 + version: 1.5.1 copy-to-clipboard: specifier: 3.3.3 version: 3.3.3 @@ -1124,7 +1124,7 @@ importers: version: 3.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) code-inspector-plugin: specifier: 'catalog:' - version: 1.5.0 + version: 1.5.1 eslint: specifier: 'catalog:' version: 10.1.0(jiti@2.6.1) @@ -1491,23 +1491,23 @@ packages: '@clack/prompts@1.2.0': resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} - '@code-inspector/core@1.5.0': - resolution: {integrity: sha512-wyBiJ2YTONkS3yn+uNx4VEoTJT5muKbri/kN7XZXQa/Kzl60OM7KS3gTyZ/gGjM6IN6QjYwKMs4++ErI0AgLdw==} + '@code-inspector/core@1.5.1': + resolution: {integrity: sha512-Y9JdgoxVh93xRMupTa1lT/v+UlcBEpM7Y1BTxQy924wSe6VVEXsJ1nPJ/Ob2HPMUAA6F568aHALi2KDUhA2kzg==} - '@code-inspector/esbuild@1.5.0': - resolution: {integrity: sha512-7ekO9zp6ikjORwFkP1BwDPzkyAofGQqkPyBETb/8nrNuDBvW0zAbHNWt3M1lsxqFZwFX/nPvpSgvlEUn+qI3CQ==} + '@code-inspector/esbuild@1.5.1': + resolution: {integrity: sha512-Z/WZVCG6WaB9HTcDC8l15RpgEsfFj/WKLLr6cKNX/JzAYBroadLPw1N0sbUJUIQnow5cCo7KYpHrC1T27WVMnw==} - '@code-inspector/mako@1.5.0': - resolution: {integrity: sha512-6spNArsYGJpVwZsbRBfa43W6fB9vsUdZPN3McyERrs4mKzVnz4lo4Wqc2aodk42OTRIahSibwzYqQSJvtMiGgw==} + '@code-inspector/mako@1.5.1': + resolution: {integrity: sha512-EQmqQnnyW8tf3EBRlYyRYv1n3W1PUcfaYuuXXAfBdfJIGMwJjj0PcrDsdiI5MNyFmIx3QdMREhWmPMx1LoAANg==} - '@code-inspector/turbopack@1.5.0': - resolution: {integrity: sha512-Y18/vFcElEwSb4r0keJNzgsnu+Gw6PAF313/MbM6eKmTToHYJjI4In9xGn4vyEJaTf08gXAFe8OBTmoGC+sUsg==} + '@code-inspector/turbopack@1.5.1': + resolution: {integrity: sha512-PeLbcDtKDoSrKPsWnwQc+Yj9KgCa3xbHxEwXa/aGVykilvfvYP9AH1z5BRyZLDgB21diSV75BPNpF+o/FQRYug==} - '@code-inspector/vite@1.5.0': - resolution: {integrity: sha512-Iu+fPvUDf0xel4szhxst3BCZSfVEfWE+diOizL3CozDeSvm+VV/Fp0D7X7qMwjFEnVCUBWMCvqQTZ71pmd/EQw==} + '@code-inspector/vite@1.5.1': + resolution: {integrity: sha512-gkfmSmawYb1yDDuCft4DESXCAD3JxPt59dGiRoD78GhQzSYHk3tnLPZMH/GLBpdeFNbKHi1FtEMbAAECIJG9xg==} - '@code-inspector/webpack@1.5.0': - resolution: {integrity: sha512-L7PAuHJOYPBK38zhql5qGP0tK2L0TJffYFfUGD+z82l0DCG9R/JJlKp38nDz0nureKgNGaQdKVrlE/EiHRp5RQ==} + '@code-inspector/webpack@1.5.1': + resolution: {integrity: sha512-8i3QI/bSirORDF/0P16T6NhNy1RxO7soip8sWeV/2btLbYCwyiaDnqT4Bw3JaM8MNz0N8NaA2qItUrrKE7TtCg==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -5159,8 +5159,8 @@ packages: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - code-inspector-plugin@1.5.0: - resolution: {integrity: sha512-l9MB8MJy/ZRCYZWcJFvPPBWVjQw/3F9d3/S8pPIzdikY8NXfeA8LCw9vNr+maO7/CQZxaJtExH/LDDXUNCWhig==} + code-inspector-plugin@1.5.1: + resolution: {integrity: sha512-7gOqqBurKCucnls1ZHw0KWb7Z5u7gg3Q2pFSY9rrttFmwRaFJfJiscKEbm7X9IKmeEvkFRtNvNrHbSVQ67L8pQ==} collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -9271,7 +9271,7 @@ snapshots: fast-wrap-ansi: 0.1.6 sisteransi: 1.0.5 - '@code-inspector/core@1.5.0': + '@code-inspector/core@1.5.1': dependencies: '@vue/compiler-dom': 3.5.31 chalk: 4.1.2 @@ -9281,35 +9281,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@code-inspector/esbuild@1.5.0': + '@code-inspector/esbuild@1.5.1': dependencies: - '@code-inspector/core': 1.5.0 + '@code-inspector/core': 1.5.1 transitivePeerDependencies: - supports-color - '@code-inspector/mako@1.5.0': + '@code-inspector/mako@1.5.1': dependencies: - '@code-inspector/core': 1.5.0 + '@code-inspector/core': 1.5.1 transitivePeerDependencies: - supports-color - '@code-inspector/turbopack@1.5.0': + '@code-inspector/turbopack@1.5.1': dependencies: - '@code-inspector/core': 1.5.0 - '@code-inspector/webpack': 1.5.0 + '@code-inspector/core': 1.5.1 + '@code-inspector/webpack': 1.5.1 transitivePeerDependencies: - supports-color - '@code-inspector/vite@1.5.0': + '@code-inspector/vite@1.5.1': dependencies: - '@code-inspector/core': 1.5.0 + '@code-inspector/core': 1.5.1 chalk: 4.1.1 transitivePeerDependencies: - supports-color - '@code-inspector/webpack@1.5.0': + '@code-inspector/webpack@1.5.1': dependencies: - '@code-inspector/core': 1.5.0 + '@code-inspector/core': 1.5.1 transitivePeerDependencies: - supports-color @@ -12864,14 +12864,14 @@ snapshots: - '@types/react' - '@types/react-dom' - code-inspector-plugin@1.5.0: + code-inspector-plugin@1.5.1: dependencies: - '@code-inspector/core': 1.5.0 - '@code-inspector/esbuild': 1.5.0 - '@code-inspector/mako': 1.5.0 - '@code-inspector/turbopack': 1.5.0 - '@code-inspector/vite': 1.5.0 - '@code-inspector/webpack': 1.5.0 + '@code-inspector/core': 1.5.1 + '@code-inspector/esbuild': 1.5.1 + '@code-inspector/mako': 1.5.1 + '@code-inspector/turbopack': 1.5.1 + '@code-inspector/vite': 1.5.1 + '@code-inspector/webpack': 1.5.1 chalk: 4.1.1 transitivePeerDependencies: - supports-color diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3d3413e42c1..cb29e2f990a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -163,7 +163,7 @@ catalog: class-variance-authority: 0.7.1 clsx: 2.1.1 cmdk: 1.1.1 - code-inspector-plugin: 1.5.0 + code-inspector-plugin: 1.5.1 copy-to-clipboard: 3.3.3 cron-parser: 5.5.0 dayjs: 1.11.20 From da3b0caf5e1f3c6caa327439ba09e3da39ecc4e5 Mon Sep 17 00:00:00 2001 From: Renzo <170978465+RenzoMXD@users.noreply.github.com> Date: Fri, 3 Apr 2026 08:21:26 +0200 Subject: [PATCH 09/12] refactor: select in account_service (RegisterService class) (#34500) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- api/services/account_service.py | 29 ++++++------ .../services/test_account_service.py | 47 ++++++------------- 2 files changed, 29 insertions(+), 47 deletions(-) diff --git a/api/services/account_service.py b/api/services/account_service.py index d4ba7520bdf..d02f244428e 100644 --- a/api/services/account_service.py +++ b/api/services/account_service.py @@ -8,7 +8,7 @@ from hashlib import sha256 from typing import Any, TypedDict, cast from pydantic import BaseModel, TypeAdapter -from sqlalchemy import func, select +from sqlalchemy import delete, func, select from sqlalchemy.orm import Session @@ -1392,10 +1392,10 @@ class RegisterService: db.session.add(dify_setup) db.session.commit() except Exception as e: - db.session.query(DifySetup).delete() - db.session.query(TenantAccountJoin).delete() - db.session.query(Account).delete() - db.session.query(Tenant).delete() + db.session.execute(delete(DifySetup)) + db.session.execute(delete(TenantAccountJoin)) + db.session.execute(delete(Account)) + db.session.execute(delete(Tenant)) db.session.commit() logger.exception("Setup account failed, email: %s, name: %s", email, name) @@ -1496,7 +1496,11 @@ class RegisterService: TenantService.switch_tenant(account, tenant.id) else: TenantService.check_member_permission(tenant, inviter, account, "add") - ta = db.session.query(TenantAccountJoin).filter_by(tenant_id=tenant.id, account_id=account.id).first() + ta = db.session.scalar( + select(TenantAccountJoin) + .where(TenantAccountJoin.tenant_id == tenant.id, TenantAccountJoin.account_id == account.id) + .limit(1) + ) if not ta: TenantService.create_tenant_member(tenant, account, role) @@ -1553,21 +1557,18 @@ class RegisterService: if not invitation_data: return None - tenant = ( - db.session.query(Tenant) - .where(Tenant.id == invitation_data["workspace_id"], Tenant.status == "normal") - .first() + tenant = db.session.scalar( + select(Tenant).where(Tenant.id == invitation_data["workspace_id"], Tenant.status == "normal").limit(1) ) if not tenant: return None - tenant_account = ( - db.session.query(Account, TenantAccountJoin.role) + tenant_account = db.session.execute( + select(Account, TenantAccountJoin.role) .join(TenantAccountJoin, Account.id == TenantAccountJoin.account_id) .where(Account.email == invitation_data["email"], TenantAccountJoin.tenant_id == tenant.id) - .first() - ) + ).first() if not tenant_account: return None diff --git a/api/tests/unit_tests/services/test_account_service.py b/api/tests/unit_tests/services/test_account_service.py index af86949012b..cc64159c5f3 100644 --- a/api/tests/unit_tests/services/test_account_service.py +++ b/api/tests/unit_tests/services/test_account_service.py @@ -1034,7 +1034,7 @@ class TestRegisterService: ) # Verify rollback operations were called - mock_db_dependencies["db"].session.query.assert_called() + mock_db_dependencies["db"].session.execute.assert_called() # ==================== Registration Tests ==================== @@ -1599,10 +1599,8 @@ class TestRegisterService: mock_session_class.return_value.__exit__.return_value = None mock_lookup.return_value = mock_existing_account - # Mock the db.session.query for TenantAccountJoin - mock_db_query = MagicMock() - mock_db_query.filter_by.return_value.first.return_value = None # No existing member - mock_db_dependencies["db"].session.query.return_value = mock_db_query + # Mock scalar for TenantAccountJoin lookup - no existing member + mock_db_dependencies["db"].session.scalar.return_value = None # Mock TenantService methods with ( @@ -1777,14 +1775,9 @@ class TestRegisterService: } mock_get_invitation_by_token.return_value = invitation_data - # Mock database queries - complex query mocking - mock_query1 = MagicMock() - mock_query1.where.return_value.first.return_value = mock_tenant - - mock_query2 = MagicMock() - mock_query2.join.return_value.where.return_value.first.return_value = (mock_account, "normal") - - mock_db_dependencies["db"].session.query.side_effect = [mock_query1, mock_query2] + # Mock scalar for tenant lookup, execute for account+role lookup + mock_db_dependencies["db"].session.scalar.return_value = mock_tenant + mock_db_dependencies["db"].session.execute.return_value.first.return_value = (mock_account, "normal") # Execute test result = RegisterService.get_invitation_if_token_valid("tenant-456", "test@example.com", "token-123") @@ -1816,10 +1809,8 @@ class TestRegisterService: } mock_redis_dependencies.get.return_value = json.dumps(invitation_data).encode() - # Mock database queries - no tenant found - mock_query = MagicMock() - mock_query.filter.return_value.first.return_value = None - mock_db_dependencies["db"].session.query.return_value = mock_query + # Mock scalar for tenant lookup - not found + mock_db_dependencies["db"].session.scalar.return_value = None # Execute test result = RegisterService.get_invitation_if_token_valid("tenant-456", "test@example.com", "token-123") @@ -1842,14 +1833,9 @@ class TestRegisterService: } mock_redis_dependencies.get.return_value = json.dumps(invitation_data).encode() - # Mock database queries - mock_query1 = MagicMock() - mock_query1.filter.return_value.first.return_value = mock_tenant - - mock_query2 = MagicMock() - mock_query2.join.return_value.where.return_value.first.return_value = None # No account found - - mock_db_dependencies["db"].session.query.side_effect = [mock_query1, mock_query2] + # Mock scalar for tenant, execute for account+role + mock_db_dependencies["db"].session.scalar.return_value = mock_tenant + mock_db_dependencies["db"].session.execute.return_value.first.return_value = None # No account found # Execute test result = RegisterService.get_invitation_if_token_valid("tenant-456", "test@example.com", "token-123") @@ -1875,14 +1861,9 @@ class TestRegisterService: } mock_redis_dependencies.get.return_value = json.dumps(invitation_data).encode() - # Mock database queries - mock_query1 = MagicMock() - mock_query1.filter.return_value.first.return_value = mock_tenant - - mock_query2 = MagicMock() - mock_query2.join.return_value.where.return_value.first.return_value = (mock_account, "normal") - - mock_db_dependencies["db"].session.query.side_effect = [mock_query1, mock_query2] + # Mock scalar for tenant, execute for account+role + mock_db_dependencies["db"].session.scalar.return_value = mock_tenant + mock_db_dependencies["db"].session.execute.return_value.first.return_value = (mock_account, "normal") # Execute test result = RegisterService.get_invitation_if_token_valid("tenant-456", "test@example.com", "token-123") From 64ddec0d67ab8bfc43a4082d9685b9d35fe7948a Mon Sep 17 00:00:00 2001 From: YBoy Date: Fri, 3 Apr 2026 08:25:52 +0200 Subject: [PATCH 10/12] refactor(api): type annotation service dicts with TypedDict (#34482) Co-authored-by: Asuka Minato --- api/services/annotation_service.py | 33 ++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/api/services/annotation_service.py b/api/services/annotation_service.py index 8ebc87a6708..b472a269505 100644 --- a/api/services/annotation_service.py +++ b/api/services/annotation_service.py @@ -4,6 +4,8 @@ import uuid import pandas as pd logger = logging.getLogger(__name__) +from typing import TypedDict + from sqlalchemy import or_, select from werkzeug.datastructures import FileStorage from werkzeug.exceptions import NotFound @@ -23,6 +25,27 @@ from tasks.annotation.enable_annotation_reply_task import enable_annotation_repl from tasks.annotation.update_annotation_to_index_task import update_annotation_to_index_task +class AnnotationJobStatusDict(TypedDict): + job_id: str + job_status: str + + +class EmbeddingModelDict(TypedDict): + embedding_provider_name: str + embedding_model_name: str + + +class AnnotationSettingDict(TypedDict): + id: str + enabled: bool + score_threshold: float + embedding_model: EmbeddingModelDict | dict + + +class AnnotationSettingDisabledDict(TypedDict): + enabled: bool + + class AppAnnotationService: @classmethod def up_insert_app_annotation_from_message(cls, args: dict, app_id: str) -> MessageAnnotation: @@ -85,7 +108,7 @@ class AppAnnotationService: return annotation @classmethod - def enable_app_annotation(cls, args: dict, app_id: str): + def enable_app_annotation(cls, args: dict, app_id: str) -> AnnotationJobStatusDict: enable_app_annotation_key = f"enable_app_annotation_{str(app_id)}" cache_result = redis_client.get(enable_app_annotation_key) if cache_result is not None: @@ -109,7 +132,7 @@ class AppAnnotationService: return {"job_id": job_id, "job_status": "waiting"} @classmethod - def disable_app_annotation(cls, app_id: str): + def disable_app_annotation(cls, app_id: str) -> AnnotationJobStatusDict: _, current_tenant_id = current_account_with_tenant() disable_app_annotation_key = f"disable_app_annotation_{str(app_id)}" cache_result = redis_client.get(disable_app_annotation_key) @@ -567,7 +590,7 @@ class AppAnnotationService: db.session.commit() @classmethod - def get_app_annotation_setting_by_app_id(cls, app_id: str): + def get_app_annotation_setting_by_app_id(cls, app_id: str) -> AnnotationSettingDict | AnnotationSettingDisabledDict: _, current_tenant_id = current_account_with_tenant() # get app info app = ( @@ -602,7 +625,9 @@ class AppAnnotationService: return {"enabled": False} @classmethod - def update_app_annotation_setting(cls, app_id: str, annotation_setting_id: str, args: dict): + def update_app_annotation_setting( + cls, app_id: str, annotation_setting_id: str, args: dict + ) -> AnnotationSettingDict: current_user, current_tenant_id = current_account_with_tenant() # get app info app = ( From a9cf8f6c5d03cc96f5f74c5c74421d7bef372df6 Mon Sep 17 00:00:00 2001 From: Matt Van Horn Date: Thu, 2 Apr 2026 23:40:26 -0700 Subject: [PATCH 11/12] refactor(web): replace react-syntax-highlighter with shiki (#33473) Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 312 ++++++++---------- pnpm-workspace.yaml | 4 +- taze.config.js | 1 - .../__tests__/code-block.spec.tsx | 36 +- .../base/markdown-blocks/code-block.tsx | 86 +++-- .../base/markdown-blocks/shiki-highlight.tsx | 29 ++ .../segment-card/__tests__/index.spec.tsx | 2 +- web/app/styles/globals.css | 15 + web/eslint-suppressions.json | 3 - web/package.json | 4 +- 10 files changed, 291 insertions(+), 201 deletions(-) create mode 100644 web/app/components/base/markdown-blocks/shiki-highlight.tsx diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d40cf6279ad..f60206104da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -213,9 +213,6 @@ catalogs: '@types/react-dom': specifier: 19.2.3 version: 19.2.3 - '@types/react-syntax-highlighter': - specifier: 15.5.13 - version: 15.5.13 '@types/react-window': specifier: 1.8.8 version: 1.8.8 @@ -333,6 +330,9 @@ catalogs: happy-dom: specifier: 20.8.9 version: 20.8.9 + hast-util-to-jsx-runtime: + specifier: 2.3.6 + version: 2.3.6 hono: specifier: 4.12.10 version: 4.12.10 @@ -450,9 +450,6 @@ catalogs: react-sortablejs: specifier: 6.1.4 version: 6.1.4 - react-syntax-highlighter: - specifier: 15.6.6 - version: 15.6.6 react-textarea-autosize: specifier: 8.5.9 version: 8.5.9 @@ -474,6 +471,9 @@ catalogs: sharp: specifier: 0.34.5 version: 0.34.5 + shiki: + specifier: 4.0.2 + version: 4.0.2 sortablejs: specifier: 1.15.7 version: 1.15.7 @@ -812,6 +812,9 @@ importers: foxact: specifier: 'catalog:' version: 0.3.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + hast-util-to-jsx-runtime: + specifier: 'catalog:' + version: 2.3.6 html-entities: specifier: 'catalog:' version: 2.6.0 @@ -914,9 +917,6 @@ importers: react-sortablejs: specifier: 'catalog:' version: 6.1.4(@types/sortablejs@1.15.9)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sortablejs@1.15.7) - react-syntax-highlighter: - specifier: 'catalog:' - version: 15.6.6(react@19.2.4) react-textarea-autosize: specifier: 'catalog:' version: 8.5.9(@types/react@19.2.14)(react@19.2.4) @@ -938,6 +938,9 @@ importers: sharp: specifier: 'catalog:' version: 0.34.5 + shiki: + specifier: 'catalog:' + version: 4.0.2 sortablejs: specifier: 'catalog:' version: 1.15.7 @@ -1095,9 +1098,6 @@ importers: '@types/react-dom': specifier: 'catalog:' version: 19.2.3(@types/react@19.2.14) - '@types/react-syntax-highlighter': - specifier: 'catalog:' - version: 15.5.13 '@types/react-window': specifier: 'catalog:' version: 1.8.8 @@ -3621,6 +3621,37 @@ packages: peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x + '@shikijs/core@4.0.2': + resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.0.2': + resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.0.2': + resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==} + engines: {node: '>=20'} + + '@shikijs/langs@4.0.2': + resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.0.2': + resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==} + engines: {node: '>=20'} + + '@shikijs/themes@4.0.2': + resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==} + engines: {node: '>=20'} + + '@shikijs/types@4.0.2': + resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@shuding/opentype.js@1.4.0-beta.0': resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} engines: {node: '>= 8.0.0'} @@ -4252,9 +4283,6 @@ packages: '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - '@types/hast@2.3.10': - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -4299,9 +4327,6 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react-syntax-highlighter@15.5.13': - resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} - '@types/react-window@1.8.8': resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==} @@ -5058,21 +5083,12 @@ packages: character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} @@ -5172,9 +5188,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -6060,9 +6073,6 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -6251,9 +6261,6 @@ packages: hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} @@ -6266,6 +6273,9 @@ packages: hast-util-to-estree@3.1.3: resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} @@ -6278,9 +6288,6 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} - hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} @@ -6288,12 +6295,6 @@ packages: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} - highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - - highlightjs-vue@1.0.0: - resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - hono@4.12.10: resolution: {integrity: sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w==} engines: {node: '>=16.9.0'} @@ -6413,15 +6414,9 @@ packages: resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} deprecated: The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019. - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} @@ -6429,9 +6424,6 @@ packages: resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} engines: {node: '>=18.20'} - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -6448,9 +6440,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -6781,9 +6770,6 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - lowlight@1.20.0: - resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} - lru-cache@11.2.7: resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} engines: {node: 20 || >=22} @@ -7234,6 +7220,12 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.5: + resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==} + open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -7307,9 +7299,6 @@ packages: parse-css-color@0.2.1: resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==} - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} @@ -7476,10 +7465,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -7490,9 +7475,6 @@ packages: property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} - property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -7670,11 +7652,6 @@ packages: '@types/react': optional: true - react-syntax-highlighter@15.6.6: - resolution: {integrity: sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==} - peerDependencies: - react: '>= 0.14.0' - react-textarea-autosize@8.5.9: resolution: {integrity: sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==} engines: {node: '>=10'} @@ -7743,8 +7720,14 @@ packages: reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - refractor@3.6.0: - resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} @@ -7941,6 +7924,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@4.0.2: + resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==} + engines: {node: '>=20'} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -7986,9 +7973,6 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -8772,10 +8756,6 @@ packages: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -11160,6 +11140,46 @@ snapshots: '@sentry/core': 10.47.0 react: 19.2.4 + '@shikijs/core@4.0.2': + dependencies: + '@shikijs/primitive': 4.0.2 + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.5 + + '@shikijs/engine-oniguruma@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + + '@shikijs/primitive@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/themes@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + + '@shikijs/types@4.0.2': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@shuding/opentype.js@1.4.0-beta.0': dependencies: fflate: 0.7.4 @@ -11853,10 +11873,6 @@ snapshots: '@types/geojson@7946.0.16': {} - '@types/hast@2.3.10': - dependencies: - '@types/unist': 2.0.11 - '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -11895,10 +11911,6 @@ snapshots: dependencies: '@types/react': 19.2.14 - '@types/react-syntax-highlighter@15.5.13': - dependencies: - '@types/react': 19.2.14 - '@types/react-window@1.8.8': dependencies: '@types/react': 19.2.14 @@ -12761,16 +12773,10 @@ snapshots: character-entities-html4@2.1.0: {} - character-entities-legacy@1.1.4: {} - character-entities-legacy@3.0.0: {} - character-entities@1.2.4: {} - character-entities@2.0.2: {} - character-reference-invalid@1.1.4: {} - character-reference-invalid@2.0.1: {} check-error@2.1.3: {} @@ -12884,8 +12890,6 @@ snapshots: color-name@1.1.4: {} - comma-separated-tokens@1.0.8: {} - comma-separated-tokens@2.0.3: {} commander@14.0.0: {} @@ -13991,10 +13995,6 @@ snapshots: dependencies: reusify: 1.1.0 - fault@1.0.4: - dependencies: - format: 0.2.2 - fault@2.0.1: dependencies: format: 0.2.2 @@ -14177,8 +14177,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hast-util-parse-selector@2.2.5: {} - hast-util-parse-selector@4.0.0: dependencies: '@types/hast': 3.0.4 @@ -14226,6 +14224,20 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + hast-util-to-jsx-runtime@2.3.6: dependencies: '@types/estree': 1.0.8 @@ -14267,14 +14279,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hastscript@6.0.0: - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 1.0.8 - hast-util-parse-selector: 2.2.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - hastscript@9.0.1: dependencies: '@types/hast': 3.0.4 @@ -14285,10 +14289,6 @@ snapshots: hex-rgb@4.3.0: {} - highlight.js@10.7.3: {} - - highlightjs-vue@1.0.0: {} - hono@4.12.10: {} hosted-git-info@9.0.2: @@ -14385,15 +14385,8 @@ snapshots: intersection-observer@0.12.2: {} - is-alphabetical@1.0.4: {} - is-alphabetical@2.0.1: {} - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - is-alphanumerical@2.0.1: dependencies: is-alphabetical: 2.0.1 @@ -14403,8 +14396,6 @@ snapshots: dependencies: builtin-modules: 5.0.0 - is-decimal@1.0.4: {} - is-decimal@2.0.1: {} is-docker@3.0.0: {} @@ -14415,8 +14406,6 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-hexadecimal@1.0.4: {} - is-hexadecimal@2.0.1: {} is-in-ssh@1.0.0: {} @@ -14692,11 +14681,6 @@ snapshots: dependencies: tslib: 2.8.1 - lowlight@1.20.0: - dependencies: - fault: 1.0.4 - highlight.js: 10.7.3 - lru-cache@11.2.7: {} lru-cache@5.1.1: @@ -15440,6 +15424,14 @@ snapshots: dependencies: mimic-function: 5.0.1 + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.5: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.1.0 + regex-recursion: 6.0.2 + open@10.2.0: dependencies: default-browser: 5.5.0 @@ -15608,15 +15600,6 @@ snapshots: color-name: 1.1.4 hex-rgb: 4.3.0 - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -15799,8 +15782,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - prismjs@1.30.0: {} - progress@2.0.3: {} prop-types@15.8.1: @@ -15811,10 +15792,6 @@ snapshots: property-expr@2.0.6: {} - property-information@5.6.0: - dependencies: - xtend: 4.0.2 - property-information@7.1.0: {} pump@3.0.4: @@ -15993,16 +15970,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - react-syntax-highlighter@15.6.6(react@19.2.4): - dependencies: - '@babel/runtime': 7.29.2 - highlight.js: 10.7.3 - highlightjs-vue: 1.0.0 - lowlight: 1.20.0 - prismjs: 1.30.0 - react: 19.2.4 - refractor: 3.6.0 - react-textarea-autosize@8.5.9(@types/react@19.2.14)(react@19.2.4): dependencies: '@babel/runtime': 7.29.2 @@ -16107,11 +16074,15 @@ snapshots: reflect-metadata@0.2.2: {} - refractor@3.6.0: + regex-recursion@6.0.2: dependencies: - hastscript: 6.0.0 - parse-entities: 2.0.0 - prismjs: 1.30.0 + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 regexp-ast-analysis@0.7.1: dependencies: @@ -16427,6 +16398,17 @@ snapshots: shebang-regex@3.0.0: {} + shiki@4.0.2: + dependencies: + '@shikijs/core': 4.0.2 + '@shikijs/engine-javascript': 4.0.2 + '@shikijs/engine-oniguruma': 4.0.2 + '@shikijs/langs': 4.0.2 + '@shikijs/themes': 4.0.2 + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + signal-exit@4.1.0: {} simple-concat@1.0.1: @@ -16470,8 +16452,6 @@ snapshots: source-map@0.7.6: {} - space-separated-tokens@1.1.5: {} - space-separated-tokens@2.0.2: {} spdx-correct@3.2.0: @@ -17341,8 +17321,6 @@ snapshots: xmlbuilder@15.1.1: {} - xtend@4.0.2: {} - yallist@3.1.1: {} yallist@5.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index cb29e2f990a..d9f6293222b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -147,7 +147,6 @@ catalog: "@types/qs": 6.15.0 "@types/react": 19.2.14 "@types/react-dom": 19.2.3 - "@types/react-syntax-highlighter": 15.5.13 "@types/react-window": 1.8.8 "@types/sortablejs": 1.15.9 "@typescript-eslint/eslint-plugin": 8.58.0 @@ -188,6 +187,7 @@ catalog: fast-deep-equal: 3.1.3 foxact: 0.3.0 happy-dom: 20.8.9 + hast-util-to-jsx-runtime: 2.3.6 hono: 4.12.10 html-entities: 2.6.0 html-to-image: 1.11.13 @@ -228,7 +228,6 @@ catalog: react-pdf-highlighter: 8.0.0-rc.0 react-server-dom-webpack: 19.2.4 react-sortablejs: 6.1.4 - react-syntax-highlighter: 15.6.6 react-textarea-autosize: 8.5.9 react-window: 1.8.11 reactflow: 11.11.4 @@ -236,6 +235,7 @@ catalog: remark-directive: 4.0.0 scheduler: 0.27.0 sharp: 0.34.5 + shiki: 4.0.2 sortablejs: 1.15.7 std-semver: 1.0.8 storybook: 10.3.4 diff --git a/taze.config.js b/taze.config.js index 73bc0b5abab..96a69acf3e6 100644 --- a/taze.config.js +++ b/taze.config.js @@ -3,7 +3,6 @@ import { defineConfig } from 'taze' export default defineConfig({ exclude: [ // We are going to replace these - 'react-syntax-highlighter', 'react-window', '@types/react-window', ], diff --git a/web/app/components/base/markdown-blocks/__tests__/code-block.spec.tsx b/web/app/components/base/markdown-blocks/__tests__/code-block.spec.tsx index a16686801c6..2eebe44af9f 100644 --- a/web/app/components/base/markdown-blocks/__tests__/code-block.spec.tsx +++ b/web/app/components/base/markdown-blocks/__tests__/code-block.spec.tsx @@ -5,6 +5,10 @@ import { Theme } from '@/types/app' import CodeBlock from '../code-block' +const { mockHighlightCode } = vi.hoisted(() => ({ + mockHighlightCode: vi.fn(), +})) + type UseThemeReturn = { theme: Theme } @@ -70,6 +74,10 @@ vi.mock('@/hooks/use-theme', () => ({ default: () => mockUseTheme(), })) +vi.mock('../shiki-highlight', () => ({ + highlightCode: mockHighlightCode, +})) + vi.mock('echarts', () => ({ getInstanceByDom: mockEcharts.getInstanceByDom, })) @@ -130,6 +138,11 @@ describe('CodeBlock', () => { beforeEach(() => { vi.clearAllMocks() mockUseTheme.mockReturnValue({ theme: Theme.light }) + mockHighlightCode.mockImplementation(async ({ code, language }) => ( +
+        {code}
+      
+ )) consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) clientWidthSpy = vi.spyOn(HTMLElement.prototype, 'clientWidth', 'get').mockReturnValue(900) @@ -198,11 +211,13 @@ describe('CodeBlock', () => { expect(container.querySelector('code')?.textContent).toBe('plain text') }) - it('should render syntax-highlighted output when language is standard', () => { + it('should render syntax-highlighted output when language is standard', async () => { render(const x = 1;) expect(screen.getByText('JavaScript')).toBeInTheDocument() - expect(document.querySelector('code.language-javascript')?.textContent).toContain('const x = 1;') + await waitFor(() => { + expect(document.querySelector('code.language-javascript')?.textContent).toContain('const x = 1;') + }) }) it('should format unknown language labels with capitalized fallback when language is not in map', () => { @@ -242,13 +257,26 @@ describe('CodeBlock', () => { expect(screen.queryByText(/Error rendering SVG/i)).not.toBeInTheDocument() }) - it('should render syntax-highlighted output when language is standard and app theme is dark', () => { + it('should render syntax-highlighted output when language is standard and app theme is dark', async () => { mockUseTheme.mockReturnValue({ theme: Theme.dark }) render(const y = 2;) expect(screen.getByText('JavaScript')).toBeInTheDocument() - expect(document.querySelector('code.language-javascript')?.textContent).toContain('const y = 2;') + await waitFor(() => { + expect(document.querySelector('code.language-javascript')?.textContent).toContain('const y = 2;') + }) + }) + + it('should fall back to plain code block when shiki highlighting fails', async () => { + mockHighlightCode.mockRejectedValueOnce(new Error('highlight failed')) + + render(const z = 3;) + + await waitFor(() => { + expect(screen.getByText('const z = 3;')).toBeInTheDocument() + }) + expect(document.querySelector('code.language-javascript')).toBeNull() }) }) diff --git a/web/app/components/base/markdown-blocks/code-block.tsx b/web/app/components/base/markdown-blocks/code-block.tsx index 412c61d52d3..679b1ca0d02 100644 --- a/web/app/components/base/markdown-blocks/code-block.tsx +++ b/web/app/components/base/markdown-blocks/code-block.tsx @@ -1,10 +1,7 @@ +import type { JSX } from 'react' +import type { BundledLanguage, BundledTheme } from 'shiki/bundle/web' import ReactEcharts from 'echarts-for-react' -import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' -import SyntaxHighlighter from 'react-syntax-highlighter' -import { - atelierHeathDark, - atelierHeathLight, -} from 'react-syntax-highlighter/dist/esm/styles/hljs' +import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react' import ActionButton from '@/app/components/base/action-button' import CopyIcon from '@/app/components/base/copy-icon' import MarkdownMusic from '@/app/components/base/markdown-blocks/music' @@ -14,6 +11,7 @@ import useTheme from '@/hooks/use-theme' import dynamic from '@/next/dynamic' import { Theme } from '@/types/app' import SVGRenderer from '../svg-gallery' // Assumes svg-gallery.tsx is in /base directory +import { highlightCode } from './shiki-highlight' const Flowchart = dynamic(() => import('@/app/components/base/mermaid'), { ssr: false }) @@ -64,6 +62,61 @@ const getCorrectCapitalizationLanguageName = (language: string) => { // visit https://reactjs.org/docs/error-decoder.html?invariant=185 for the full message // or use the non-minified dev environment for full errors and additional helpful warnings. +const ShikiCodeBlock = memo(({ code, language, theme, initial }: { code: string, language: string, theme: BundledTheme, initial?: JSX.Element }) => { + const [nodes, setNodes] = useState(initial) + + useLayoutEffect(() => { + let cancelled = false + + void highlightCode({ + code, + language: language as BundledLanguage, + theme, + }).then((result) => { + if (!cancelled) + setNodes(result) + }).catch((error) => { + console.error('Shiki highlighting failed:', error) + if (!cancelled) + setNodes(undefined) + }) + + return () => { + cancelled = true + } + }, [code, language, theme]) + + if (!nodes) { + return ( +
+        {code}
+      
+ ) + } + + return ( +
+ {nodes} +
+ ) +}) +ShikiCodeBlock.displayName = 'ShikiCodeBlock' + // Define ECharts event parameter types type EChartsEventParams = { type: string @@ -416,20 +469,11 @@ const CodeBlock: any = memo(({ inline, className, children = '', ...props }: any ) default: return ( - - {content} - + ) } }, [children, language, isSVG, finalChartOption, props, theme, match, chartState, isDarkMode, echartsStyle, echartsOpts, handleChartReady, echartsEvents]) @@ -440,7 +484,7 @@ const CodeBlock: any = memo(({ inline, className, children = '', ...props }: any return (
-
{languageShowName}
+
{languageShowName}
{language === 'svg' && } diff --git a/web/app/components/base/markdown-blocks/shiki-highlight.tsx b/web/app/components/base/markdown-blocks/shiki-highlight.tsx new file mode 100644 index 00000000000..cfc075827f4 --- /dev/null +++ b/web/app/components/base/markdown-blocks/shiki-highlight.tsx @@ -0,0 +1,29 @@ +import type { JSX } from 'react' +import type { BundledLanguage, BundledTheme } from 'shiki/bundle/web' +import { toJsxRuntime } from 'hast-util-to-jsx-runtime' +import { Fragment } from 'react' +import { jsx, jsxs } from 'react/jsx-runtime' +import { codeToHast } from 'shiki/bundle/web' + +type HighlightCodeOptions = { + code: string + language: BundledLanguage + theme: BundledTheme +} + +export const highlightCode = async ({ + code, + language, + theme, +}: HighlightCodeOptions): Promise => { + const hast = await codeToHast(code, { + lang: language, + theme, + }) + + return toJsxRuntime(hast, { + Fragment, + jsx, + jsxs, + }) as JSX.Element +} diff --git a/web/app/components/datasets/documents/detail/completed/segment-card/__tests__/index.spec.tsx b/web/app/components/datasets/documents/detail/completed/segment-card/__tests__/index.spec.tsx index 00cf9769df8..fd431af95dd 100644 --- a/web/app/components/datasets/documents/detail/completed/segment-card/__tests__/index.spec.tsx +++ b/web/app/components/datasets/documents/detail/completed/segment-card/__tests__/index.spec.tsx @@ -61,7 +61,7 @@ vi.mock('@/app/components/datasets/common/image-list', () => ({ ), })) -// Markdown uses next/dynamic and react-syntax-highlighter (ESM) +// Markdown uses next/dynamic and shiki (ESM) vi.mock('@/app/components/base/markdown', () => ({ Markdown: ({ content, className }: { content: string, className?: string }) => (
{content}
diff --git a/web/app/styles/globals.css b/web/app/styles/globals.css index 0d9c950dec3..a1a0130b87f 100644 --- a/web/app/styles/globals.css +++ b/web/app/styles/globals.css @@ -909,4 +909,19 @@ [data-theme='light'] [data-hide-on-theme='light'] { display: none; } + + /* Shiki code block line numbers */ + .shiki-line-numbers code { + counter-reset: line; + } + .shiki-line-numbers .line::before { + counter-increment: line; + content: counter(line); + display: inline-block; + width: 1rem; + margin-right: 0.75rem; + text-align: right; + color: var(--color-text-quaternary); + user-select: none; + } } diff --git a/web/eslint-suppressions.json b/web/eslint-suppressions.json index f7c0ad36ee1..1a7463b7c65 100644 --- a/web/eslint-suppressions.json +++ b/web/eslint-suppressions.json @@ -3142,9 +3142,6 @@ "react/set-state-in-effect": { "count": 7 }, - "tailwindcss/enforce-consistent-class-order": { - "count": 1 - }, "ts/no-explicit-any": { "count": 9 } diff --git a/web/package.json b/web/package.json index 1dada2bfb58..f822e874253 100644 --- a/web/package.json +++ b/web/package.json @@ -100,6 +100,7 @@ "es-toolkit": "catalog:", "fast-deep-equal": "catalog:", "foxact": "catalog:", + "hast-util-to-jsx-runtime": "catalog:", "html-entities": "catalog:", "html-to-image": "catalog:", "i18next": "catalog:", @@ -134,7 +135,6 @@ "react-papaparse": "catalog:", "react-pdf-highlighter": "catalog:", "react-sortablejs": "catalog:", - "react-syntax-highlighter": "catalog:", "react-textarea-autosize": "catalog:", "react-window": "catalog:", "reactflow": "catalog:", @@ -142,6 +142,7 @@ "remark-directive": "catalog:", "scheduler": "catalog:", "sharp": "catalog:", + "shiki": "catalog:", "sortablejs": "catalog:", "std-semver": "catalog:", "streamdown": "catalog:", @@ -196,7 +197,6 @@ "@types/qs": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", - "@types/react-syntax-highlighter": "catalog:", "@types/react-window": "catalog:", "@types/sortablejs": "catalog:", "@typescript-eslint/parser": "catalog:", From c94951b2f8136cfd74556bc2f28ff3bdefa6be42 Mon Sep 17 00:00:00 2001 From: yyh <92089059+lyzno1@users.noreply.github.com> Date: Fri, 3 Apr 2026 15:03:12 +0800 Subject: [PATCH 12/12] refactor(web): migrate notion page selectors to tanstack virtual (#34508) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- package.json | 1 - pnpm-lock.yaml | 176 +--------- pnpm-workspace.yaml | 4 +- taze.config.js | 9 - web/__mocks__/@tanstack/react-virtual.ts | 36 ++ .../base/markdown-blocks/code-block.tsx | 1 - .../__tests__/base.spec.tsx | 4 +- .../base/notion-page-selector/base.tsx | 62 ++-- .../page-selector/__tests__/index.spec.tsx | 2 + .../page-selector/index.tsx | 326 ++---------------- .../page-selector/page-row.tsx | 116 +++++++ .../page-selector/types.ts | 21 ++ .../page-selector/use-page-selector-model.ts | 88 +++++ .../page-selector/utils.ts | 163 +++++++++ .../page-selector/virtual-page-list.tsx | 93 +++++ .../data-source/online-documents/index.tsx | 4 +- .../page-selector/__tests__/index.spec.tsx | 24 +- .../page-selector/__tests__/utils.spec.ts | 4 +- .../online-documents/page-selector/index.tsx | 182 ++-------- .../online-documents/page-selector/item.tsx | 152 -------- .../online-documents/page-selector/utils.ts | 39 --- web/app/styles/markdown.css | 3 - web/eslint-suppressions.json | 23 -- web/i18n/en-US/common.json | 3 + web/package.json | 3 +- 25 files changed, 639 insertions(+), 900 deletions(-) delete mode 100644 taze.config.js create mode 100644 web/__mocks__/@tanstack/react-virtual.ts create mode 100644 web/app/components/base/notion-page-selector/page-selector/page-row.tsx create mode 100644 web/app/components/base/notion-page-selector/page-selector/types.ts create mode 100644 web/app/components/base/notion-page-selector/page-selector/use-page-selector-model.ts create mode 100644 web/app/components/base/notion-page-selector/page-selector/utils.ts create mode 100644 web/app/components/base/notion-page-selector/page-selector/virtual-page-list.tsx delete mode 100644 web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/item.tsx delete mode 100644 web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/utils.ts diff --git a/package.json b/package.json index 48c3acef021..ce3180214bf 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,6 @@ "prepare": "vp config" }, "devDependencies": { - "taze": "catalog:", "vite-plus": "catalog:" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f60206104da..57ca2e70bca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -171,6 +171,9 @@ catalogs: '@tanstack/react-query-devtools': specifier: 5.96.1 version: 5.96.1 + '@tanstack/react-virtual': + specifier: 3.13.23 + version: 3.13.23 '@testing-library/dom': specifier: 10.4.1 version: 10.4.1 @@ -213,9 +216,6 @@ catalogs: '@types/react-dom': specifier: 19.2.3 version: 19.2.3 - '@types/react-window': - specifier: 1.8.8 - version: 1.8.8 '@types/sortablejs': specifier: 1.15.9 version: 1.15.9 @@ -453,9 +453,6 @@ catalogs: react-textarea-autosize: specifier: 8.5.9 version: 8.5.9 - react-window: - specifier: 1.8.11 - version: 1.8.11 reactflow: specifier: 11.11.4 version: 11.11.4 @@ -495,9 +492,6 @@ catalogs: tailwindcss: specifier: 4.2.2 version: 4.2.2 - taze: - specifier: 19.11.0 - version: 19.11.0 tldts: specifier: 7.0.27 version: 7.0.27 @@ -605,9 +599,6 @@ importers: .: devDependencies: - taze: - specifier: 'catalog:' - version: 19.11.0 vite-plus: specifier: 'catalog:' version: 0.1.15(@types/node@25.5.0)(esbuild@0.27.2)(happy-dom@20.8.9)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.2)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) @@ -755,6 +746,9 @@ importers: '@tanstack/react-query': specifier: 'catalog:' version: 5.96.1(react@19.2.4) + '@tanstack/react-virtual': + specifier: 'catalog:' + version: 3.13.23(react-dom@19.2.4(react@19.2.4))(react@19.2.4) abcjs: specifier: 'catalog:' version: 6.6.2 @@ -920,9 +914,6 @@ importers: react-textarea-autosize: specifier: 'catalog:' version: 8.5.9(@types/react@19.2.14)(react@19.2.4) - react-window: - specifier: 'catalog:' - version: 1.8.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4) reactflow: specifier: 'catalog:' version: 11.11.4(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -1098,9 +1089,6 @@ importers: '@types/react-dom': specifier: 'catalog:' version: 19.2.3(@types/react@19.2.14) - '@types/react-window': - specifier: 'catalog:' - version: 1.8.8 '@types/sortablejs': specifier: 'catalog:' version: 1.15.9 @@ -1351,11 +1339,6 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - '@antfu/ni@30.0.0': - resolution: {integrity: sha512-DqBVB3XqXH4VsDpER7iLlEtayMC98iXrY7kwBzp1v6LGc/6U6+qnN3+X0bcPK63LMXJCRG2D/XDq7dvtKDGogg==} - engines: {node: '>=20.19.0'} - hasBin: true - '@antfu/utils@8.1.1': resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} @@ -1944,9 +1927,6 @@ packages: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - '@henrygd/queue@1.2.0': - resolution: {integrity: sha512-jW/BLSTpcvExDhqJGxtIPgGr2O0IFF8XUNDwEbfCfhrXT8a4xztQ9Lv6U/vbYzYC0xVWn+3zv6YnLUh3bEFUKA==} - '@heroicons/react@2.2.0': resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==} peerDependencies: @@ -3049,9 +3029,6 @@ packages: '@preact/signals-core@1.14.0': resolution: {integrity: sha512-AowtCcCU/33lFlh1zRFf/u+12rfrhtNakj7UpaGEsmMwUKpKWMVvcktOGcwBBNiB4lWrZWc01LhiyyzVklJyaQ==} - '@quansync/fs@1.0.0': - resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} @@ -4327,9 +4304,6 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react-window@1.8.8': - resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==} - '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} @@ -5508,9 +5482,6 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - delaunator@5.1.0: resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} @@ -5518,9 +5489,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -6161,9 +6129,6 @@ packages: functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - fzf@0.5.2: - resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -6886,9 +6851,6 @@ packages: mdn-data@2.23.0: resolution: {integrity: sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==} - memoize-one@5.2.1: - resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -7035,10 +6997,6 @@ packages: engines: {node: '>=16'} hasBin: true - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -7160,9 +7118,6 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - node-releases@2.0.36: resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} @@ -7207,19 +7162,12 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - ofetch@1.5.1: - resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} - ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} - oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} @@ -7497,9 +7445,6 @@ packages: quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - quansync@1.0.0: - resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -7658,13 +7603,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-window@1.8.11: - resolution: {integrity: sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==} - engines: {node: '>8.0.0'} - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react@19.2.4: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} @@ -7816,10 +7754,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -7928,10 +7862,6 @@ packages: resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==} engines: {node: '>=20'} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} @@ -8158,10 +8088,6 @@ packages: resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} engines: {node: '>=18'} - taze@19.11.0: - resolution: {integrity: sha512-BlfH8Z6JdoIsrUptnz4P4YuEqdYsa/bSNNDOMhTlsHZ7Bbg1/0NyYh6uPkoRREjrt/kVovV+HYdi1ilHxvChfw==} - hasBin: true - terser-webpack-plugin@5.4.0: resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} engines: {node: '>= 10.13.0'} @@ -8356,12 +8282,6 @@ packages: resolution: {integrity: sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w==} engines: {node: '>=14'} - unconfig-core@7.5.0: - resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} - - unconfig@7.5.0: - resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==} - undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} @@ -9060,13 +8980,6 @@ snapshots: package-manager-detector: 1.6.0 tinyexec: 1.0.4 - '@antfu/ni@30.0.0': - dependencies: - fzf: 0.5.2 - package-manager-detector: 1.6.0 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 - '@antfu/utils@8.1.1': {} '@babel/code-frame@7.29.0': @@ -9772,8 +9685,6 @@ snapshots: react-dom: 19.2.4(react@19.2.4) use-sync-external-store: 1.6.0(react@19.2.4) - '@henrygd/queue@1.2.0': {} - '@heroicons/react@2.2.0(react@19.2.4)': dependencies: react: 19.2.4 @@ -10662,10 +10573,6 @@ snapshots: '@preact/signals-core@1.14.0': {} - '@quansync/fs@1.0.0': - dependencies: - quansync: 1.0.0 - '@radix-ui/primitive@1.1.3': {} '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': @@ -11911,10 +11818,6 @@ snapshots: dependencies: '@types/react': 19.2.14 - '@types/react-window@1.8.8': - dependencies: - '@types/react': 19.2.14 - '@types/react@19.2.14': dependencies: csstype: 3.2.3 @@ -13209,16 +13112,12 @@ snapshots: define-lazy-prop@3.0.0: {} - defu@6.1.4: {} - delaunator@5.1.0: dependencies: robust-predicates: 3.0.3 dequal@2.0.3: {} - destr@2.0.5: {} - detect-libc@2.1.2: {} detect-node-es@1.1.0: {} @@ -14065,8 +13964,6 @@ snapshots: functional-red-black-tree@1.0.1: {} - fzf@0.5.2: {} - gensync@1.0.0-beta.2: {} get-east-asian-width@1.5.0: {} @@ -14926,8 +14823,6 @@ snapshots: mdn-data@2.23.0: {} - memoize-one@5.2.1: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -15262,8 +15157,6 @@ snapshots: mime@4.1.0: {} - mimic-function@5.0.1: {} - mimic-response@3.1.0: optional: true @@ -15379,8 +15272,6 @@ snapshots: node-addon-api@7.1.1: optional: true - node-fetch-native@1.6.7: {} - node-releases@2.0.36: {} normalize-package-data@8.0.0: @@ -15408,22 +15299,12 @@ snapshots: obug@2.1.1: {} - ofetch@1.5.1: - dependencies: - destr: 2.0.5 - node-fetch-native: 1.6.7 - ufo: 1.6.3 - ohash@2.0.11: {} once@1.4.0: dependencies: wrappy: 1.0.2 - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 - oniguruma-parser@0.12.1: {} oniguruma-to-es@4.3.5: @@ -15811,8 +15692,6 @@ snapshots: quansync@0.2.11: {} - quansync@1.0.0: {} - queue-microtask@1.2.3: {} radash@12.1.1: {} @@ -15979,13 +15858,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-window@1.8.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - '@babel/runtime': 7.29.2 - memoize-one: 5.2.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react@19.2.4: {} reactflow@11.11.4(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): @@ -16219,11 +16091,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - reusify@1.1.0: {} robust-predicates@3.0.3: {} @@ -16409,8 +16276,6 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - signal-exit@4.1.0: {} - simple-concat@1.0.1: optional: true @@ -16652,22 +16517,6 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - taze@19.11.0: - dependencies: - '@antfu/ni': 30.0.0 - '@henrygd/queue': 1.2.0 - cac: 7.0.0 - find-up-simple: 1.0.1 - ofetch: 1.5.1 - package-manager-detector: 1.6.0 - pathe: 2.0.3 - pnpm-workspace-yaml: 1.6.0 - restore-cursor: 5.1.0 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 - unconfig: 7.5.0 - yaml: 2.8.3 - terser-webpack-plugin@5.4.0(esbuild@0.27.2)(uglify-js@3.19.3)(webpack@5.105.4(esbuild@0.27.2)(uglify-js@3.19.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -16820,19 +16669,6 @@ snapshots: unbash@2.2.0: {} - unconfig-core@7.5.0: - dependencies: - '@quansync/fs': 1.0.0 - quansync: 1.0.0 - - unconfig@7.5.0: - dependencies: - '@quansync/fs': 1.0.0 - defu: 6.1.4 - jiti: 2.6.1 - quansync: 1.0.0 - unconfig-core: 7.5.0 - undici-types@7.18.2: {} undici@7.24.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d9f6293222b..585256b4a75 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -132,6 +132,7 @@ catalog: "@tanstack/react-form-devtools": 0.2.20 "@tanstack/react-query": 5.96.1 "@tanstack/react-query-devtools": 5.96.1 + "@tanstack/react-virtual": 3.13.23 "@testing-library/dom": 10.4.1 "@testing-library/jest-dom": 6.9.1 "@testing-library/react": 16.3.2 @@ -147,7 +148,6 @@ catalog: "@types/qs": 6.15.0 "@types/react": 19.2.14 "@types/react-dom": 19.2.3 - "@types/react-window": 1.8.8 "@types/sortablejs": 1.15.9 "@typescript-eslint/eslint-plugin": 8.58.0 "@typescript-eslint/parser": 8.58.0 @@ -229,7 +229,6 @@ catalog: react-server-dom-webpack: 19.2.4 react-sortablejs: 6.1.4 react-textarea-autosize: 8.5.9 - react-window: 1.8.11 reactflow: 11.11.4 remark-breaks: 4.0.0 remark-directive: 4.0.0 @@ -243,7 +242,6 @@ catalog: string-ts: 2.3.1 tailwind-merge: 3.5.0 tailwindcss: 4.2.2 - taze: 19.11.0 tldts: 7.0.27 tsdown: 0.21.7 tsx: 4.21.0 diff --git a/taze.config.js b/taze.config.js deleted file mode 100644 index 96a69acf3e6..00000000000 --- a/taze.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import { defineConfig } from 'taze' - -export default defineConfig({ - exclude: [ - // We are going to replace these - 'react-window', - '@types/react-window', - ], -}) diff --git a/web/__mocks__/@tanstack/react-virtual.ts b/web/__mocks__/@tanstack/react-virtual.ts new file mode 100644 index 00000000000..59cca5e33f6 --- /dev/null +++ b/web/__mocks__/@tanstack/react-virtual.ts @@ -0,0 +1,36 @@ +import { vi } from 'vitest' + +const mockVirtualizer = ({ + count, + estimateSize, +}: { + count: number + estimateSize?: (index: number) => number +}) => { + const getSize = (index: number) => estimateSize?.(index) ?? 0 + + return { + getTotalSize: () => Array.from({ length: count }).reduce((total, _, index) => total + getSize(index), 0), + getVirtualItems: () => { + let start = 0 + + return Array.from({ length: count }).map((_, index) => { + const size = getSize(index) + const virtualItem = { + end: start + size, + index, + key: index, + size, + start, + } + + start += size + return virtualItem + }) + }, + measureElement: vi.fn(), + scrollToIndex: vi.fn(), + } +} + +export { mockVirtualizer as useVirtualizer } diff --git a/web/app/components/base/markdown-blocks/code-block.tsx b/web/app/components/base/markdown-blocks/code-block.tsx index 679b1ca0d02..67fa11da000 100644 --- a/web/app/components/base/markdown-blocks/code-block.tsx +++ b/web/app/components/base/markdown-blocks/code-block.tsx @@ -15,7 +15,6 @@ import { highlightCode } from './shiki-highlight' const Flowchart = dynamic(() => import('@/app/components/base/mermaid'), { ssr: false }) -// Available language https://github.com/react-syntax-highlighter/react-syntax-highlighter/blob/master/AVAILABLE_LANGUAGES_HLJS.MD const capitalizationLanguageNameMap: Record = { sql: 'SQL', javascript: 'JavaScript', diff --git a/web/app/components/base/notion-page-selector/__tests__/base.spec.tsx b/web/app/components/base/notion-page-selector/__tests__/base.spec.tsx index 4afae28b792..54e33b8fbe1 100644 --- a/web/app/components/base/notion-page-selector/__tests__/base.spec.tsx +++ b/web/app/components/base/notion-page-selector/__tests__/base.spec.tsx @@ -9,6 +9,8 @@ import { useModalContextSelector } from '@/context/modal-context' import { useInvalidPreImportNotionPages, usePreImportNotionPages } from '@/service/knowledge/use-import' import NotionPageSelector from '../base' +vi.mock('@tanstack/react-virtual') + vi.mock('@/service/knowledge/use-import', () => ({ usePreImportNotionPages: vi.fn(), useInvalidPreImportNotionPages: vi.fn(), @@ -183,7 +185,7 @@ describe('NotionPageSelector Base', () => { const user = userEvent.setup() render() - await user.click(screen.getByRole('button', { name: 'Configure Notion' })) + await user.click(screen.getByRole('button', { name: 'common.dataSource.notion.selector.configure' })) expect(mockSetShowAccountSettingModal).toHaveBeenCalledWith({ payload: ACCOUNT_SETTING_TAB.DATA_SOURCE }) }) diff --git a/web/app/components/base/notion-page-selector/base.tsx b/web/app/components/base/notion-page-selector/base.tsx index 261e7940e1b..34926849a67 100644 --- a/web/app/components/base/notion-page-selector/base.tsx +++ b/web/app/components/base/notion-page-selector/base.tsx @@ -2,6 +2,7 @@ import type { DataSourceCredential } from '../../header/account-setting/data-sou import type { NotionCredential } from './credential-selector' import type { DataSourceNotionPageMap, DataSourceNotionWorkspace, NotionPage } from '@/models/common' import { useCallback, useEffect, useMemo, useState } from 'react' +import { useTranslation } from 'react-i18next' import { ACCOUNT_SETTING_TAB } from '@/app/components/header/account-setting/constants' import { useModalContextSelector } from '@/context/modal-context' import { useInvalidPreImportNotionPages, usePreImportNotionPages } from '@/service/knowledge/use-import' @@ -33,6 +34,7 @@ const NotionPageSelector = ({ credentialList, onSelectCredential, }: NotionPageSelectorProps) => { + const { t } = useTranslation() const [searchValue, setSearchValue] = useState('') const setShowAccountSettingModal = useModalContextSelector(s => s.setShowAccountSettingModal) @@ -48,27 +50,34 @@ const NotionPageSelector = ({ } }) }, [credentialList]) - const [currentCredential, setCurrentCredential] = useState(notionCredentials[0]) + const [selectedCredentialId, setSelectedCredentialId] = useState(() => notionCredentials[0]?.credentialId ?? '') + const currentCredential = useMemo(() => { + return notionCredentials.find(item => item.credentialId === selectedCredentialId) ?? notionCredentials[0] ?? null + }, [notionCredentials, selectedCredentialId]) + const currentCredentialId = currentCredential?.credentialId ?? '' useEffect(() => { - const credential = notionCredentials.find(item => item.credentialId === currentCredential?.credentialId) - if (!credential) { - const firstCredential = notionCredentials[0] - invalidPreImportNotionPages({ datasetId, credentialId: firstCredential.credentialId }) - setCurrentCredential(notionCredentials[0]) - onSelect([]) // Clear selected pages when changing credential - onSelectCredential?.(firstCredential.credentialId) + onSelectCredential?.(currentCredentialId) + }, [currentCredentialId, onSelectCredential]) + + useEffect(() => { + if (!notionCredentials.length) { + onSelect([]) + return } - else { - onSelectCredential?.(credential?.credentialId || '') - } - }, [notionCredentials]) + + if (!selectedCredentialId || selectedCredentialId === currentCredentialId) + return + + invalidPreImportNotionPages({ datasetId, credentialId: currentCredentialId }) + onSelect([]) + }, [currentCredentialId, datasetId, invalidPreImportNotionPages, notionCredentials.length, onSelect, selectedCredentialId]) const { data: notionsPages, isFetching: isFetchingNotionPages, isError: isFetchingNotionPagesError, - } = usePreImportNotionPages({ datasetId, credentialId: currentCredential.credentialId || '' }) + } = usePreImportNotionPages({ datasetId, credentialId: currentCredentialId }) const pagesMapAndSelectedPagesId: [DataSourceNotionPageMap, Set, Set] = useMemo(() => { const selectedPagesId = new Set() @@ -94,28 +103,24 @@ const NotionPageSelector = ({ const defaultSelectedPagesId = useMemo(() => { return [...Array.from(pagesMapAndSelectedPagesId[1]), ...(value || [])] }, [pagesMapAndSelectedPagesId, value]) - const [selectedPagesId, setSelectedPagesId] = useState>(() => new Set(defaultSelectedPagesId)) - - useEffect(() => { - setSelectedPagesId(new Set(defaultSelectedPagesId)) - }, [defaultSelectedPagesId]) + const selectedPagesId = useMemo(() => new Set(defaultSelectedPagesId), [defaultSelectedPagesId]) const handleSearchValueChange = useCallback((value: string) => { setSearchValue(value) }, []) const handleSelectCredential = useCallback((credentialId: string) => { - const credential = notionCredentials.find(item => item.credentialId === credentialId)! - invalidPreImportNotionPages({ datasetId, credentialId: credential.credentialId }) - setCurrentCredential(credential) + if (credentialId === currentCredentialId) + return + + invalidPreImportNotionPages({ datasetId, credentialId }) + setSelectedCredentialId(credentialId) onSelect([]) // Clear selected pages when changing credential - onSelectCredential?.(credential.credentialId) - }, [datasetId, invalidPreImportNotionPages, notionCredentials, onSelect, onSelectCredential]) + }, [currentCredentialId, datasetId, invalidPreImportNotionPages, onSelect]) const handleSelectPages = useCallback((newSelectedPagesId: Set) => { const selectedPages = Array.from(newSelectedPagesId).map(pageId => pagesMapAndSelectedPagesId[0][pageId]) - setSelectedPagesId(new Set(Array.from(newSelectedPagesId))) onSelect(selectedPages) }, [pagesMapAndSelectedPagesId, onSelect]) @@ -140,16 +145,16 @@ const NotionPageSelector = ({
@@ -168,6 +173,7 @@ const NotionPageSelector = ({ ) : ( ): DataSourceNotionPage => ({ page_id: 'page-id', page_name: 'Page name', diff --git a/web/app/components/base/notion-page-selector/page-selector/index.tsx b/web/app/components/base/notion-page-selector/page-selector/index.tsx index 50ac5671930..64645398642 100644 --- a/web/app/components/base/notion-page-selector/page-selector/index.tsx +++ b/web/app/components/base/notion-page-selector/page-selector/index.tsx @@ -1,11 +1,7 @@ -import type { ListChildComponentProps } from 'react-window' import type { DataSourceNotionPage, DataSourceNotionPageMap } from '@/models/common' -import { memo, useEffect, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' -import { areEqual, FixedSizeList as List } from 'react-window' -import { cn } from '@/utils/classnames' -import Checkbox from '../../checkbox' -import NotionIcon from '../../notion-icon' +import { usePageSelectorModel } from './use-page-selector-model' +import VirtualPageList from './virtual-page-list' type PageSelectorProps = { value: Set @@ -17,173 +13,7 @@ type PageSelectorProps = { canPreview?: boolean previewPageId?: string onPreview?: (selectedPageId: string) => void - isMultipleChoice?: boolean } -type NotionPageTreeItem = { - children: Set - descendants: Set - depth: number - ancestors: string[] -} & DataSourceNotionPage -type NotionPageTreeMap = Record -type NotionPageItem = { - expand: boolean - depth: number -} & DataSourceNotionPage - -const recursivePushInParentDescendants = ( - pagesMap: DataSourceNotionPageMap, - listTreeMap: NotionPageTreeMap, - current: NotionPageTreeItem, - leafItem: NotionPageTreeItem, -) => { - const parentId = current.parent_id - const pageId = current.page_id - - if (!parentId || !pageId) - return - - if (parentId !== 'root' && pagesMap[parentId]) { - if (!listTreeMap[parentId]) { - const children = new Set([pageId]) - const descendants = new Set([pageId, leafItem.page_id]) - listTreeMap[parentId] = { - ...pagesMap[parentId], - children, - descendants, - depth: 0, - ancestors: [], - } - } - else { - listTreeMap[parentId].children.add(pageId) - listTreeMap[parentId].descendants.add(pageId) - listTreeMap[parentId].descendants.add(leafItem.page_id) - } - leafItem.depth++ - leafItem.ancestors.unshift(listTreeMap[parentId].page_name) - - if (listTreeMap[parentId].parent_id !== 'root') - recursivePushInParentDescendants(pagesMap, listTreeMap, listTreeMap[parentId], leafItem) - } -} - -const ItemComponent = ({ index, style, data }: ListChildComponentProps<{ - dataList: NotionPageItem[] - handleToggle: (index: number) => void - checkedIds: Set - disabledCheckedIds: Set - handleCheck: (index: number) => void - canPreview?: boolean - handlePreview: (index: number) => void - listMapWithChildrenAndDescendants: NotionPageTreeMap - searchValue: string - previewPageId: string - pagesMap: DataSourceNotionPageMap -}>) => { - const { t } = useTranslation() - const { - dataList, - handleToggle, - checkedIds, - disabledCheckedIds, - handleCheck, - canPreview, - handlePreview, - listMapWithChildrenAndDescendants, - searchValue, - previewPageId, - pagesMap, - } = data - const current = dataList[index] - const currentWithChildrenAndDescendants = listMapWithChildrenAndDescendants[current.page_id] - const hasChild = currentWithChildrenAndDescendants.descendants.size > 0 - const ancestors = currentWithChildrenAndDescendants.ancestors - const breadCrumbs = ancestors.length ? [...ancestors, current.page_name] : [current.page_name] - const disabled = disabledCheckedIds.has(current.page_id) - - const renderArrow = () => { - if (hasChild) { - return ( -
handleToggle(index)} - data-testid={`notion-page-toggle-${current.page_id}`} - > - { - current.expand - ?
- :
- } -
- ) - } - if (current.parent_id === 'root' || !pagesMap[current.parent_id]) { - return ( -
- ) - } - return ( -
- ) - } - - return ( -
- { - handleCheck(index) - }} - id={`notion-page-checkbox-${current.page_id}`} - /> - {!searchValue && renderArrow()} - -
- {current.page_name} -
- { - canPreview && ( -
handlePreview(index)} - data-testid={`notion-page-preview-${current.page_id}`} - > - {t('dataSource.notion.selector.preview', { ns: 'common' })} -
- ) - } - { - searchValue && ( -
- {breadCrumbs.join(' / ')} -
- ) - } -
- ) -} -const Item = memo(ItemComponent, areEqual) const PageSelector = ({ value, @@ -197,108 +27,25 @@ const PageSelector = ({ onPreview, }: PageSelectorProps) => { const { t } = useTranslation() - const [dataList, setDataList] = useState([]) - const [localPreviewPageId, setLocalPreviewPageId] = useState('') - - useEffect(() => { - setDataList(list.filter(item => item.parent_id === 'root' || !pagesMap[item.parent_id]).map((item) => { - return { - ...item, - expand: false, - depth: 0, - } - })) - }, [list]) - - const searchDataList = list.filter((item) => { - return item.page_name.includes(searchValue) - }).map((item) => { - return { - ...item, - expand: false, - depth: 0, - } + const { + currentPreviewPageId, + effectiveSearchValue, + rows, + handlePreview, + handleSelect, + handleToggle, + } = usePageSelectorModel({ + checkedIds: value, + list, + onPreview, + onSelect, + pagesMap, + previewPageId, + searchValue, + selectionMode: 'multiple', }) - const currentDataList = searchValue ? searchDataList : dataList - const currentPreviewPageId = previewPageId === undefined ? localPreviewPageId : previewPageId - const listMapWithChildrenAndDescendants = useMemo(() => { - return list.reduce((prev: NotionPageTreeMap, next: DataSourceNotionPage) => { - const pageId = next.page_id - if (!prev[pageId]) - prev[pageId] = { ...next, children: new Set(), descendants: new Set(), depth: 0, ancestors: [] } - - recursivePushInParentDescendants(pagesMap, prev, prev[pageId], prev[pageId]) - return prev - }, {}) - }, [list, pagesMap]) - - const handleToggle = (index: number) => { - const current = dataList[index] - const pageId = current.page_id - const currentWithChildrenAndDescendants = listMapWithChildrenAndDescendants[pageId] - const descendantsIds = Array.from(currentWithChildrenAndDescendants.descendants) - const childrenIds = Array.from(currentWithChildrenAndDescendants.children) - let newDataList = [] - - if (current.expand) { - current.expand = false - - newDataList = dataList.filter(item => !descendantsIds.includes(item.page_id)) - } - else { - current.expand = true - - newDataList = [ - ...dataList.slice(0, index + 1), - ...childrenIds.map(item => ({ - ...pagesMap[item], - expand: false, - depth: listMapWithChildrenAndDescendants[item].depth, - })), - ...dataList.slice(index + 1), - ] - } - setDataList(newDataList) - } - - const copyValue = new Set(value) - const handleCheck = (index: number) => { - const current = currentDataList[index] - const pageId = current.page_id - const currentWithChildrenAndDescendants = listMapWithChildrenAndDescendants[pageId] - - if (copyValue.has(pageId)) { - if (!searchValue) { - for (const item of currentWithChildrenAndDescendants.descendants) - copyValue.delete(item) - } - - copyValue.delete(pageId) - } - else { - if (!searchValue) { - for (const item of currentWithChildrenAndDescendants.descendants) - copyValue.add(item) - } - - copyValue.add(pageId) - } - - onSelect(new Set(copyValue)) - } - - const handlePreview = (index: number) => { - const current = currentDataList[index] - const pageId = current.page_id - - setLocalPreviewPageId(pageId) - - if (onPreview) - onPreview(pageId) - } - - if (!currentDataList.length) { + if (!rows.length) { return (
{t('dataSource.notion.selector.noSearchResult', { ns: 'common' })} @@ -307,29 +54,18 @@ const PageSelector = ({ } return ( - data.dataList[index].page_id} - itemData={{ - dataList: currentDataList, - handleToggle, - checkedIds: value, - disabledCheckedIds: disabledValue, - handleCheck, - canPreview, - handlePreview, - listMapWithChildrenAndDescendants, - searchValue, - previewPageId: currentPreviewPageId, - pagesMap, - }} - > - {Item} - + ) } diff --git a/web/app/components/base/notion-page-selector/page-selector/page-row.tsx b/web/app/components/base/notion-page-selector/page-selector/page-row.tsx new file mode 100644 index 00000000000..849c8507a84 --- /dev/null +++ b/web/app/components/base/notion-page-selector/page-selector/page-row.tsx @@ -0,0 +1,116 @@ +import type { CSSProperties } from 'react' +import type { NotionPageRow as NotionPageRowData, NotionPageSelectionMode } from './types' +import { RiArrowDownSLine, RiArrowRightSLine } from '@remixicon/react' +import { memo } from 'react' +import { useTranslation } from 'react-i18next' +import Checkbox from '@/app/components/base/checkbox' +import NotionIcon from '@/app/components/base/notion-icon' +import Radio from '@/app/components/base/radio/ui' +import { cn } from '@/utils/classnames' + +type NotionPageRowProps = { + checked: boolean + disabled: boolean + isPreviewed: boolean + onPreview: (pageId: string) => void + onSelect: (pageId: string) => void + onToggle: (pageId: string) => void + row: NotionPageRowData + searchValue: string + selectionMode: NotionPageSelectionMode + showPreview: boolean + style: CSSProperties +} + +const NotionPageRow = ({ + checked, + disabled, + isPreviewed, + onPreview, + onSelect, + onToggle, + row, + searchValue, + selectionMode, + showPreview, + style, +}: NotionPageRowProps) => { + const { t } = useTranslation() + const pageId = row.page.page_id + const breadcrumbs = row.ancestors.length ? [...row.ancestors, row.page.page_name] : [row.page.page_name] + + return ( +
+ {selectionMode === 'multiple' + ? ( + onSelect(pageId)} + id={`notion-page-checkbox-${pageId}`} + /> + ) + : ( + onSelect(pageId)} + /> + )} + {!searchValue && row.hasChild && ( +
onToggle(pageId)} + data-testid={`notion-page-toggle-${pageId}`} + > + {row.expand + ? + : } +
+ )} + {!searchValue && !row.hasChild && row.parentExists && ( +
+ )} + +
+ {row.page.page_name} +
+ {showPreview && ( +
onPreview(pageId)} + data-testid={`notion-page-preview-${pageId}`} + > + {t('dataSource.notion.selector.preview', { ns: 'common' })} +
+ )} + {searchValue && ( +
+ {breadcrumbs.join(' / ')} +
+ )} +
+ ) +} + +export default memo(NotionPageRow) diff --git a/web/app/components/base/notion-page-selector/page-selector/types.ts b/web/app/components/base/notion-page-selector/page-selector/types.ts new file mode 100644 index 00000000000..c823ac3f7f4 --- /dev/null +++ b/web/app/components/base/notion-page-selector/page-selector/types.ts @@ -0,0 +1,21 @@ +import type { DataSourceNotionPage } from '@/models/common' + +export type NotionPageSelectionMode = 'multiple' | 'single' + +export type NotionPageTreeItem = { + children: Set + descendants: Set + depth: number + ancestors: string[] +} & DataSourceNotionPage + +export type NotionPageTreeMap = Record + +export type NotionPageRow = { + page: DataSourceNotionPage + parentExists: boolean + depth: number + expand: boolean + hasChild: boolean + ancestors: string[] +} diff --git a/web/app/components/base/notion-page-selector/page-selector/use-page-selector-model.ts b/web/app/components/base/notion-page-selector/page-selector/use-page-selector-model.ts new file mode 100644 index 00000000000..ec35ee05f26 --- /dev/null +++ b/web/app/components/base/notion-page-selector/page-selector/use-page-selector-model.ts @@ -0,0 +1,88 @@ +import type { NotionPageSelectionMode } from './types' +import type { DataSourceNotionPage, DataSourceNotionPageMap } from '@/models/common' +import { startTransition, useCallback, useDeferredValue, useMemo, useState } from 'react' +import { buildNotionPageTree, getNextSelectedPageIds, getRootPageIds, getVisiblePageRows } from './utils' + +type UsePageSelectorModelProps = { + checkedIds: Set + searchValue: string + pagesMap: DataSourceNotionPageMap + list: DataSourceNotionPage[] + onSelect: (selectedPagesId: Set) => void + previewPageId?: string + onPreview?: (selectedPageId: string) => void + selectionMode: NotionPageSelectionMode +} + +export const usePageSelectorModel = ({ + checkedIds, + searchValue, + pagesMap, + list, + onSelect, + previewPageId, + onPreview, + selectionMode, +}: UsePageSelectorModelProps) => { + const deferredSearchValue = useDeferredValue(searchValue) + const [expandedIds, setExpandedIds] = useState>(() => new Set()) + const [localPreviewPageId, setLocalPreviewPageId] = useState('') + + const treeMap = useMemo(() => buildNotionPageTree(list, pagesMap), [list, pagesMap]) + const rootPageIds = useMemo(() => getRootPageIds(list, pagesMap), [list, pagesMap]) + + const rows = useMemo(() => { + return getVisiblePageRows({ + list, + pagesMap, + searchValue: deferredSearchValue, + treeMap, + rootPageIds, + expandedIds, + }) + }, [deferredSearchValue, expandedIds, list, pagesMap, rootPageIds, treeMap]) + + const currentPreviewPageId = previewPageId ?? localPreviewPageId + + const handleToggle = useCallback((pageId: string) => { + startTransition(() => { + setExpandedIds((currentExpandedIds) => { + const nextExpandedIds = new Set(currentExpandedIds) + + if (nextExpandedIds.has(pageId)) { + nextExpandedIds.delete(pageId) + treeMap[pageId]?.descendants.forEach(descendantId => nextExpandedIds.delete(descendantId)) + } + else { + nextExpandedIds.add(pageId) + } + + return nextExpandedIds + }) + }) + }, [treeMap]) + + const handleSelect = useCallback((pageId: string) => { + onSelect(getNextSelectedPageIds({ + checkedIds, + pageId, + searchValue: deferredSearchValue, + selectionMode, + treeMap, + })) + }, [checkedIds, deferredSearchValue, onSelect, selectionMode, treeMap]) + + const handlePreview = useCallback((pageId: string) => { + setLocalPreviewPageId(pageId) + onPreview?.(pageId) + }, [onPreview]) + + return { + currentPreviewPageId, + effectiveSearchValue: deferredSearchValue, + rows, + handlePreview, + handleSelect, + handleToggle, + } +} diff --git a/web/app/components/base/notion-page-selector/page-selector/utils.ts b/web/app/components/base/notion-page-selector/page-selector/utils.ts new file mode 100644 index 00000000000..d9327ddb0f9 --- /dev/null +++ b/web/app/components/base/notion-page-selector/page-selector/utils.ts @@ -0,0 +1,163 @@ +import type { NotionPageRow, NotionPageSelectionMode, NotionPageTreeItem, NotionPageTreeMap } from './types' +import type { DataSourceNotionPage, DataSourceNotionPageMap } from '@/models/common' + +export const recursivePushInParentDescendants = ( + pagesMap: DataSourceNotionPageMap, + listTreeMap: NotionPageTreeMap, + current: NotionPageTreeItem, + leafItem: NotionPageTreeItem, +) => { + const parentId = current.parent_id + const pageId = current.page_id + + if (!parentId || !pageId) + return + + if (parentId !== 'root' && pagesMap[parentId]) { + if (!listTreeMap[parentId]) { + const children = new Set([pageId]) + const descendants = new Set([pageId, leafItem.page_id]) + listTreeMap[parentId] = { + ...pagesMap[parentId], + children, + descendants, + depth: 0, + ancestors: [], + } + } + else { + listTreeMap[parentId].children.add(pageId) + listTreeMap[parentId].descendants.add(pageId) + listTreeMap[parentId].descendants.add(leafItem.page_id) + } + + leafItem.depth++ + leafItem.ancestors.unshift(listTreeMap[parentId].page_name) + + if (listTreeMap[parentId].parent_id !== 'root') + recursivePushInParentDescendants(pagesMap, listTreeMap, listTreeMap[parentId], leafItem) + } +} + +export const buildNotionPageTree = ( + list: DataSourceNotionPage[], + pagesMap: DataSourceNotionPageMap, +): NotionPageTreeMap => { + return list.reduce((prev: NotionPageTreeMap, next) => { + const pageId = next.page_id + if (!prev[pageId]) + prev[pageId] = { ...next, children: new Set(), descendants: new Set(), depth: 0, ancestors: [] } + + recursivePushInParentDescendants(pagesMap, prev, prev[pageId], prev[pageId]) + return prev + }, {}) +} + +export const getRootPageIds = ( + list: DataSourceNotionPage[], + pagesMap: DataSourceNotionPageMap, +) => { + return list + .filter(item => item.parent_id === 'root' || !pagesMap[item.parent_id]) + .map(item => item.page_id) +} + +export const getVisiblePageRows = ({ + list, + pagesMap, + searchValue, + treeMap, + rootPageIds, + expandedIds, +}: { + list: DataSourceNotionPage[] + pagesMap: DataSourceNotionPageMap + searchValue: string + treeMap: NotionPageTreeMap + rootPageIds: string[] + expandedIds: Set +}): NotionPageRow[] => { + if (searchValue) { + return list + .filter(item => item.page_name.includes(searchValue)) + .map(item => ({ + page: item, + parentExists: item.parent_id !== 'root' && Boolean(pagesMap[item.parent_id]), + depth: treeMap[item.page_id]?.depth ?? 0, + expand: false, + hasChild: (treeMap[item.page_id]?.children.size ?? 0) > 0, + ancestors: treeMap[item.page_id]?.ancestors ?? [], + })) + } + + const rows: NotionPageRow[] = [] + + const visit = (pageId: string) => { + const current = treeMap[pageId] + if (!current) + return + + const expand = expandedIds.has(pageId) + rows.push({ + page: current, + parentExists: current.parent_id !== 'root' && Boolean(pagesMap[current.parent_id]), + depth: current.depth, + expand, + hasChild: current.children.size > 0, + ancestors: current.ancestors, + }) + + if (!expand) + return + + current.children.forEach(visit) + } + + rootPageIds.forEach(visit) + + return rows +} + +export const getNextSelectedPageIds = ({ + checkedIds, + pageId, + searchValue, + selectionMode, + treeMap, +}: { + checkedIds: Set + pageId: string + searchValue: string + selectionMode: NotionPageSelectionMode + treeMap: NotionPageTreeMap +}) => { + const nextCheckedIds = new Set(checkedIds) + const descendants = treeMap[pageId]?.descendants ?? new Set() + + if (selectionMode === 'single') { + if (nextCheckedIds.has(pageId)) { + nextCheckedIds.delete(pageId) + } + else { + nextCheckedIds.clear() + nextCheckedIds.add(pageId) + } + + return nextCheckedIds + } + + if (nextCheckedIds.has(pageId)) { + if (!searchValue) + descendants.forEach(item => nextCheckedIds.delete(item)) + + nextCheckedIds.delete(pageId) + return nextCheckedIds + } + + if (!searchValue) + descendants.forEach(item => nextCheckedIds.add(item)) + + nextCheckedIds.add(pageId) + + return nextCheckedIds +} diff --git a/web/app/components/base/notion-page-selector/page-selector/virtual-page-list.tsx b/web/app/components/base/notion-page-selector/page-selector/virtual-page-list.tsx new file mode 100644 index 00000000000..6fec6c0b841 --- /dev/null +++ b/web/app/components/base/notion-page-selector/page-selector/virtual-page-list.tsx @@ -0,0 +1,93 @@ +'use client' + +import type { NotionPageRow, NotionPageSelectionMode } from './types' +import { useVirtualizer } from '@tanstack/react-virtual' +import { useRef } from 'react' +import PageRow from './page-row' + +type VirtualPageListProps = { + checkedIds: Set + disabledValue: Set + onPreview: (pageId: string) => void + onSelect: (pageId: string) => void + onToggle: (pageId: string) => void + previewPageId: string + rows: NotionPageRow[] + searchValue: string + selectionMode: NotionPageSelectionMode + showPreview: boolean +} + +const rowHeight = 28 + +const VirtualPageList = ({ + checkedIds, + disabledValue, + onPreview, + onSelect, + onToggle, + previewPageId, + rows, + searchValue, + selectionMode, + showPreview, +}: VirtualPageListProps) => { + const scrollRef = useRef(null) + + const rowVirtualizer = useVirtualizer({ + count: rows.length, + estimateSize: () => rowHeight, + getScrollElement: () => scrollRef.current, + overscan: 6, + paddingEnd: 8, + paddingStart: 8, + }) + + const virtualRows = rowVirtualizer.getVirtualItems() + + return ( +
+
+ {virtualRows.map((virtualRow) => { + const row = rows[virtualRow.index] + const pageId = row.page.page_id + + return ( + + ) + })} +
+
+ ) +} + +export default VirtualPageList diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/index.tsx b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/index.tsx index 15b9ee7332c..5051d343cb5 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/index.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/index.tsx @@ -106,7 +106,7 @@ const OnlineDocuments = ({ if (!currentCredentialId) return getOnlineDocuments() - }, [currentCredentialId]) + }, [currentCredentialId, getOnlineDocuments]) const handleSearchValueChange = useCallback((value: string) => { const { setSearchValue } = dataSourceStore.getState() @@ -156,6 +156,7 @@ const OnlineDocuments = ({ {documentsData?.length ? ( ) : ( diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/__tests__/index.spec.tsx b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/__tests__/index.spec.tsx index bdfa809aed8..a6d5738e2d0 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/__tests__/index.spec.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/__tests__/index.spec.tsx @@ -1,26 +1,11 @@ -import type { NotionPageTreeItem, NotionPageTreeMap } from '../index' +import type { NotionPageTreeItem, NotionPageTreeMap } from '@/app/components/base/notion-page-selector/page-selector/types' import type { DataSourceNotionPage, DataSourceNotionPageMap } from '@/models/common' import { fireEvent, render, screen } from '@testing-library/react' import * as React from 'react' +import { recursivePushInParentDescendants } from '@/app/components/base/notion-page-selector/page-selector/utils' import PageSelector from '../index' -import { recursivePushInParentDescendants } from '../utils' -// Mock react-window FixedSizeList - renders items directly for testing -vi.mock('react-window', () => ({ - FixedSizeList: ({ children: ItemComponent, itemCount, itemData, itemKey }: { children: React.ComponentType<{ index: number, style: React.CSSProperties, data: unknown }>, itemCount: number, itemData: unknown, itemKey?: (index: number, data: unknown) => string | number }) => ( -
- {Array.from({ length: itemCount }).map((_, index) => ( - - ))} -
- ), - areEqual: (prevProps: Record, nextProps: Record) => prevProps === nextProps, -})) +vi.mock('@tanstack/react-virtual') // Note: NotionIcon from @/app/components/base/ is NOT mocked - using real component per testing guidelines @@ -70,7 +55,6 @@ const createDefaultProps = (overrides?: Partial): PageSelecto canPreview: true, onPreview: vi.fn(), isMultipleChoice: true, - currentCredentialId: 'cred-1', ...overrides, } } @@ -114,7 +98,7 @@ describe('PageSelector', () => { expect(screen.queryByTestId('virtual-list')).not.toBeInTheDocument() }) - it('should render items using FixedSizeList', () => { + it('should render items using VirtualList', () => { const pages = [ createMockPage({ page_id: 'page-1', page_name: 'Page 1' }), createMockPage({ page_id: 'page-2', page_name: 'Page 2' }), diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/__tests__/utils.spec.ts b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/__tests__/utils.spec.ts index 601dc2f5bf3..2a081ef4189 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/__tests__/utils.spec.ts +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/__tests__/utils.spec.ts @@ -1,7 +1,7 @@ -import type { NotionPageTreeItem, NotionPageTreeMap } from '../index' +import type { NotionPageTreeItem, NotionPageTreeMap } from '@/app/components/base/notion-page-selector/page-selector/types' import type { DataSourceNotionPageMap } from '@/models/common' import { describe, expect, it } from 'vitest' -import { recursivePushInParentDescendants } from '../utils' +import { recursivePushInParentDescendants } from '@/app/components/base/notion-page-selector/page-selector/utils' const makePageEntry = (overrides: Partial): NotionPageTreeItem => ({ page_icon: null, diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/index.tsx b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/index.tsx index 2ea0bd3112a..5c6cb74bce8 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/index.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/index.tsx @@ -1,9 +1,7 @@ import type { DataSourceNotionPage, DataSourceNotionPageMap } from '@/models/common' -import { useCallback, useEffect, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' -import { FixedSizeList as List } from 'react-window' -import Item from './item' -import { recursivePushInParentDescendants } from './utils' +import { usePageSelectorModel } from '@/app/components/base/notion-page-selector/page-selector/use-page-selector-model' +import VirtualPageList from '@/app/components/base/notion-page-selector/page-selector/virtual-page-list' type PageSelectorProps = { checkedIds: Set @@ -15,23 +13,9 @@ type PageSelectorProps = { canPreview?: boolean onPreview?: (selectedPageId: string) => void isMultipleChoice?: boolean - currentCredentialId: string + currentCredentialId?: string } -export type NotionPageTreeItem = { - children: Set - descendants: Set - depth: number - ancestors: string[] -} & DataSourceNotionPage - -export type NotionPageTreeMap = Record - -type NotionPageItem = { - expand: boolean - depth: number -} & DataSourceNotionPage - const PageSelector = ({ checkedIds, disabledValue, @@ -42,116 +26,28 @@ const PageSelector = ({ canPreview = true, onPreview, isMultipleChoice = true, - currentCredentialId, + currentCredentialId: _currentCredentialId, }: PageSelectorProps) => { const { t } = useTranslation() - const [dataList, setDataList] = useState([]) - const [currentPreviewPageId, setCurrentPreviewPageId] = useState('') - - useEffect(() => { - setDataList(list.filter(item => item.parent_id === 'root' || !pagesMap[item.parent_id]).map((item) => { - return { - ...item, - expand: false, - depth: 0, - } - })) - }, [currentCredentialId]) - - const searchDataList = list.filter((item) => { - return item.page_name.includes(searchValue) - }).map((item) => { - return { - ...item, - expand: false, - depth: 0, - } + const selectionMode = isMultipleChoice ? 'multiple' : 'single' + const { + currentPreviewPageId, + effectiveSearchValue, + rows, + handlePreview, + handleSelect, + handleToggle, + } = usePageSelectorModel({ + checkedIds, + list, + onPreview, + onSelect, + pagesMap, + searchValue, + selectionMode, }) - const currentDataList = searchValue ? searchDataList : dataList - const listMapWithChildrenAndDescendants = useMemo(() => { - return list.reduce((prev: NotionPageTreeMap, next: DataSourceNotionPage) => { - const pageId = next.page_id - if (!prev[pageId]) - prev[pageId] = { ...next, children: new Set(), descendants: new Set(), depth: 0, ancestors: [] } - - recursivePushInParentDescendants(pagesMap, prev, prev[pageId], prev[pageId]) - return prev - }, {}) - }, [list, pagesMap]) - - const handleToggle = useCallback((index: number) => { - const current = dataList[index] - const pageId = current.page_id - const currentWithChildrenAndDescendants = listMapWithChildrenAndDescendants[pageId] - const descendantsIds = Array.from(currentWithChildrenAndDescendants.descendants) - const childrenIds = Array.from(currentWithChildrenAndDescendants.children) - let newDataList = [] - - if (current.expand) { - current.expand = false - - newDataList = dataList.filter(item => !descendantsIds.includes(item.page_id)) - } - else { - current.expand = true - - newDataList = [ - ...dataList.slice(0, index + 1), - ...childrenIds.map(item => ({ - ...pagesMap[item], - expand: false, - depth: listMapWithChildrenAndDescendants[item].depth, - })), - ...dataList.slice(index + 1), - ] - } - setDataList(newDataList) - }, [dataList, listMapWithChildrenAndDescendants, pagesMap]) - - const handleCheck = useCallback((index: number) => { - const copyValue = new Set(checkedIds) - const current = currentDataList[index] - const pageId = current.page_id - const currentWithChildrenAndDescendants = listMapWithChildrenAndDescendants[pageId] - - if (copyValue.has(pageId)) { - if (!searchValue && isMultipleChoice) { - for (const item of currentWithChildrenAndDescendants.descendants) - copyValue.delete(item) - } - - copyValue.delete(pageId) - } - else { - if (!searchValue && isMultipleChoice) { - for (const item of currentWithChildrenAndDescendants.descendants) - copyValue.add(item) - } - // Single choice mode, clear previous selection - if (!isMultipleChoice && copyValue.size > 0) { - copyValue.clear() - copyValue.add(pageId) - } - else { - copyValue.add(pageId) - } - } - - onSelect(new Set(copyValue)) - }, [currentDataList, isMultipleChoice, listMapWithChildrenAndDescendants, onSelect, searchValue, checkedIds]) - - const handlePreview = useCallback((index: number) => { - const current = currentDataList[index] - const pageId = current.page_id - - setCurrentPreviewPageId(pageId) - - if (onPreview) - onPreview(pageId) - }, [currentDataList, onPreview]) - - if (!currentDataList.length) { + if (!rows.length) { return (
{t('dataSource.notion.selector.noSearchResult', { ns: 'common' })} @@ -160,30 +56,18 @@ const PageSelector = ({ } return ( - data.dataList[index].page_id} - itemData={{ - dataList: currentDataList, - handleToggle, - checkedIds, - disabledCheckedIds: disabledValue, - handleCheck, - canPreview, - handlePreview, - listMapWithChildrenAndDescendants, - searchValue, - previewPageId: currentPreviewPageId, - pagesMap, - isMultipleChoice, - }} - > - {Item} - + ) } diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/item.tsx b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/item.tsx deleted file mode 100644 index 29e4143e0c2..00000000000 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/item.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import type { ListChildComponentProps } from 'react-window' -import type { DataSourceNotionPage, DataSourceNotionPageMap } from '@/models/common' -import { RiArrowDownSLine, RiArrowRightSLine } from '@remixicon/react' -import * as React from 'react' -import { useTranslation } from 'react-i18next' -import { areEqual } from 'react-window' -import Checkbox from '@/app/components/base/checkbox' -import NotionIcon from '@/app/components/base/notion-icon' -import Radio from '@/app/components/base/radio/ui' -import { cn } from '@/utils/classnames' - -type NotionPageTreeItem = { - children: Set - descendants: Set - depth: number - ancestors: string[] -} & DataSourceNotionPage - -type NotionPageTreeMap = Record - -type NotionPageItem = { - expand: boolean - depth: number -} & DataSourceNotionPage - -const Item = ({ index, style, data }: ListChildComponentProps<{ - dataList: NotionPageItem[] - handleToggle: (index: number) => void - checkedIds: Set - disabledCheckedIds: Set - handleCheck: (index: number) => void - canPreview?: boolean - handlePreview: (index: number) => void - listMapWithChildrenAndDescendants: NotionPageTreeMap - searchValue: string - previewPageId: string - pagesMap: DataSourceNotionPageMap - isMultipleChoice?: boolean -}>) => { - const { t } = useTranslation() - const { - dataList, - handleToggle, - checkedIds, - disabledCheckedIds, - handleCheck, - canPreview, - handlePreview, - listMapWithChildrenAndDescendants, - searchValue, - previewPageId, - pagesMap, - isMultipleChoice, - } = data - const current = dataList[index] - const currentWithChildrenAndDescendants = listMapWithChildrenAndDescendants[current.page_id] - const hasChild = currentWithChildrenAndDescendants.descendants.size > 0 - const ancestors = currentWithChildrenAndDescendants.ancestors - const breadCrumbs = ancestors.length ? [...ancestors, current.page_name] : [current.page_name] - const disabled = disabledCheckedIds.has(current.page_id) - - const renderArrow = () => { - if (hasChild) { - return ( -
handleToggle(index)} - > - { - current.expand - ? - : - } -
- ) - } - if (current.parent_id === 'root' || !pagesMap[current.parent_id]) { - return ( -
- ) - } - return ( -
- ) - } - - return ( -
- {isMultipleChoice - ? ( - { - handleCheck(index) - }} - /> - ) - : ( - { - handleCheck(index) - }} - /> - )} - {!searchValue && renderArrow()} - -
- {current.page_name} -
- { - canPreview && ( -
handlePreview(index)} - > - {t('dataSource.notion.selector.preview', { ns: 'common' })} -
- ) - } - { - searchValue && ( -
- {breadCrumbs.join(' / ')} -
- ) - } -
- ) -} - -export default React.memo(Item, areEqual) diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/utils.ts b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/utils.ts deleted file mode 100644 index 395ef49006e..00000000000 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/utils.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { NotionPageTreeItem, NotionPageTreeMap } from './index' -import type { DataSourceNotionPageMap } from '@/models/common' - -export const recursivePushInParentDescendants = ( - pagesMap: DataSourceNotionPageMap, - listTreeMap: NotionPageTreeMap, - current: NotionPageTreeItem, - leafItem: NotionPageTreeItem, -) => { - const parentId = current.parent_id - const pageId = current.page_id - - if (!parentId || !pageId) - return - - if (parentId !== 'root' && pagesMap[parentId]) { - if (!listTreeMap[parentId]) { - const children = new Set([pageId]) - const descendants = new Set([pageId, leafItem.page_id]) - listTreeMap[parentId] = { - ...pagesMap[parentId], - children, - descendants, - depth: 0, - ancestors: [], - } - } - else { - listTreeMap[parentId].children.add(pageId) - listTreeMap[parentId].descendants.add(pageId) - listTreeMap[parentId].descendants.add(leafItem.page_id) - } - leafItem.depth++ - leafItem.ancestors.unshift(listTreeMap[parentId].page_name) - - if (listTreeMap[parentId].parent_id !== 'root') - recursivePushInParentDescendants(pagesMap, listTreeMap, listTreeMap[parentId], leafItem) - } -} diff --git a/web/app/styles/markdown.css b/web/app/styles/markdown.css index 45b3d4bad1f..bd4d413b27d 100644 --- a/web/app/styles/markdown.css +++ b/web/app/styles/markdown.css @@ -1070,9 +1070,6 @@ filter: invert(50%); } -.markdown-body .react-syntax-highlighter-line-number { - color: var(--color-text-quaternary); -} .markdown-body .abcjs-inline-audio .abcjs-btn { display: flex !important; } diff --git a/web/eslint-suppressions.json b/web/eslint-suppressions.json index 1a7463b7c65..3e5e0e26031 100644 --- a/web/eslint-suppressions.json +++ b/web/eslint-suppressions.json @@ -3328,11 +3328,6 @@ "count": 2 } }, - "app/components/base/notion-page-selector/base.tsx": { - "react/set-state-in-effect": { - "count": 2 - } - }, "app/components/base/notion-page-selector/credential-selector/index.tsx": { "tailwindcss/enforce-consistent-class-order": { "count": 2 @@ -3348,14 +3343,6 @@ "count": 1 } }, - "app/components/base/notion-page-selector/page-selector/index.tsx": { - "react/set-state-in-effect": { - "count": 1 - }, - "tailwindcss/enforce-consistent-class-order": { - "count": 3 - } - }, "app/components/base/notion-page-selector/search-input/index.tsx": { "tailwindcss/enforce-consistent-class-order": { "count": 1 @@ -4831,16 +4818,6 @@ "count": 1 } }, - "app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/index.tsx": { - "react/set-state-in-effect": { - "count": 1 - } - }, - "app/components/datasets/documents/create-from-pipeline/data-source/online-documents/page-selector/item.tsx": { - "tailwindcss/enforce-consistent-class-order": { - "count": 3 - } - }, "app/components/datasets/documents/create-from-pipeline/data-source/online-documents/title.tsx": { "tailwindcss/enforce-consistent-class-order": { "count": 1 diff --git a/web/i18n/en-US/common.json b/web/i18n/en-US/common.json index c21aa25eae2..dc8e02e66d6 100644 --- a/web/i18n/en-US/common.json +++ b/web/i18n/en-US/common.json @@ -135,6 +135,9 @@ "dataSource.notion.pagesAuthorized": "Pages authorized", "dataSource.notion.remove": "Remove", "dataSource.notion.selector.addPages": "Add pages", + "dataSource.notion.selector.configure": "Configure Notion", + "dataSource.notion.selector.docs": "Notion docs", + "dataSource.notion.selector.headerTitle": "Choose Notion pages", "dataSource.notion.selector.noSearchResult": "No search results", "dataSource.notion.selector.pageSelected": "Pages Selected", "dataSource.notion.selector.preview": "PREVIEW", diff --git a/web/package.json b/web/package.json index f822e874253..d2a9e88f4a2 100644 --- a/web/package.json +++ b/web/package.json @@ -81,6 +81,7 @@ "@tailwindcss/typography": "catalog:", "@tanstack/react-form": "catalog:", "@tanstack/react-query": "catalog:", + "@tanstack/react-virtual": "catalog:", "abcjs": "catalog:", "ahooks": "catalog:", "class-variance-authority": "catalog:", @@ -136,7 +137,6 @@ "react-pdf-highlighter": "catalog:", "react-sortablejs": "catalog:", "react-textarea-autosize": "catalog:", - "react-window": "catalog:", "reactflow": "catalog:", "remark-breaks": "catalog:", "remark-directive": "catalog:", @@ -197,7 +197,6 @@ "@types/qs": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", - "@types/react-window": "catalog:", "@types/sortablejs": "catalog:", "@typescript-eslint/parser": "catalog:", "@typescript/native-preview": "catalog:",