feat(ui): 创建共享 UI 组件包

将 web 和 desktop 的重复代码抽取到 @ai-assistant/ui 包:

- 添加可配置的 API 客户端 (configureApiClient)
- 迁移共享组件: ChatMessage, ChatInput, Sidebar, FileBrowser, ConfigPanel
- 迁移共享 hook: useChat
- 添加 responsive prop 支持响应式布局
- 更新 web/desktop 依赖并删除重复代码
This commit is contained in:
2025-12-12 15:52:53 +08:00
parent 563224fa73
commit 68ab6a2016
30 changed files with 711 additions and 1388 deletions
+46 -14
View File
@@ -114,16 +114,19 @@ importers:
version: 10.0.0
'@vitest/coverage-v8':
specifier: ^4.0.15
version: 4.0.15(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2))
version: 4.0.15(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2))
typescript:
specifier: ^5.6.0
version: 5.9.3
vitest:
specifier: ^4.0.15
version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2)
version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2)
packages/desktop:
dependencies:
'@ai-assistant/ui':
specifier: workspace:*
version: link:../ui
'@tauri-apps/api':
specifier: ^2.1.1
version: 2.9.1
@@ -166,7 +169,7 @@ importers:
version: 18.3.7(@types/react@18.3.27)
'@vitejs/plugin-react':
specifier: ^4.2.1
version: 4.7.0(vite@5.4.21(@types/node@22.19.2))
version: 4.7.0(vite@5.4.21(@types/node@22.19.2)(terser@5.44.1))
autoprefixer:
specifier: ^10.4.18
version: 10.4.22(postcss@8.5.6)
@@ -212,10 +215,38 @@ importers:
version: 5.9.3
vitest:
specifier: ^4.0.15
version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2)
version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2)
packages/ui:
dependencies:
clsx:
specifier: ^2.1.0
version: 2.1.1
lucide-react:
specifier: ^0.344.0
version: 0.344.0(react@18.3.1)
react:
specifier: ^18.0.0
version: 18.3.1
react-dom:
specifier: ^18.0.0
version: 18.3.1(react@18.3.1)
devDependencies:
'@types/react':
specifier: ^18.3.0
version: 18.3.27
'@types/react-dom':
specifier: ^18.3.0
version: 18.3.7(@types/react@18.3.27)
typescript:
specifier: ^5.3.3
version: 5.9.3
packages/web:
dependencies:
'@ai-assistant/ui':
specifier: workspace:*
version: link:../ui
clsx:
specifier: ^2.1.0
version: 2.1.1
@@ -243,7 +274,7 @@ importers:
version: 18.3.7(@types/react@18.3.27)
'@vitejs/plugin-react':
specifier: ^4.2.1
version: 4.7.0(vite@5.4.21(@types/node@22.19.2))
version: 4.7.0(vite@5.4.21(@types/node@22.19.2)(terser@5.44.1))
autoprefixer:
specifier: ^10.4.18
version: 10.4.22(postcss@8.5.6)
@@ -4520,7 +4551,7 @@ snapshots:
'@vercel/oidc@3.0.5': {}
'@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.2))':
'@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.2)(terser@5.44.1))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
@@ -4532,7 +4563,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@vitest/coverage-v8@4.0.15(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2))':
'@vitest/coverage-v8@4.0.15(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2))':
dependencies:
'@bcoe/v8-coverage': 1.0.2
'@vitest/utils': 4.0.15
@@ -4545,7 +4576,7 @@ snapshots:
obug: 2.1.1
std-env: 3.10.0
tinyrainbow: 3.0.3
vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2)
vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
@@ -4558,13 +4589,13 @@ snapshots:
chai: 6.2.1
tinyrainbow: 3.0.3
'@vitest/mocker@4.0.15(vite@7.2.7(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2))':
'@vitest/mocker@4.0.15(vite@7.2.7(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 4.0.15
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
vite: 7.2.7(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2)
vite: 7.2.7(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2)
'@vitest/pretty-format@4.0.15':
dependencies:
@@ -6254,7 +6285,7 @@ snapshots:
fsevents: 2.3.3
terser: 5.44.1
vite@7.2.7(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2):
vite@7.2.7(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
@@ -6266,12 +6297,13 @@ snapshots:
'@types/node': 22.19.2
fsevents: 2.3.3
jiti: 1.21.7
terser: 5.44.1
yaml: 2.8.2
vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2):
vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2):
dependencies:
'@vitest/expect': 4.0.15
'@vitest/mocker': 4.0.15(vite@7.2.7(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2))
'@vitest/mocker': 4.0.15(vite@7.2.7(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2))
'@vitest/pretty-format': 4.0.15
'@vitest/runner': 4.0.15
'@vitest/snapshot': 4.0.15
@@ -6288,7 +6320,7 @@ snapshots:
tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
vite: 7.2.7(@types/node@22.19.2)(jiti@1.21.7)(yaml@2.8.2)
vite: 7.2.7(@types/node@22.19.2)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@opentelemetry/api': 1.9.0