♻️ 新 UI 重写:shadcn/ui + Tailwind v4 + React 19 全面重构表现层#1514
Conversation
移除基于 Arco Design + UnoCSS 的旧 UI 层与相关依赖,为下一版
基于 Tailwind CSS + shadcn/ui 的 UI 重构做准备。
- 删除 6 个页面(options/popup/install/confirm/import/batchupdate)、所有 UI 组件、HTML 模板和 CSS
- 卸载 16 个 UI 相关依赖(@arco-design/web-react、unocss、@dnd-kit/*、react-dropzone、react-joyride、react-router-dom、react-icons、react-i18next、@playwright/test 等)
- 删除 e2e 测试目录与 Playwright 配置
- 更新 rspack.config.ts 移除 UI entry 和 HtmlRspackPlugin
- 更新技术栈文档(CLAUDE.md、copilot-instructions、CONTRIBUTING)
保留:非 UI 入口(service_worker/content/inject/offscreen/sandbox)、
monaco-editor、i18next、pages/store/{global,favicons,features/script}.ts
- 使用 Tailwind CSS + shadcn/ui 重构 popup 页面 - 实现完整业务逻辑:脚本列表、启用/禁用、删除、排除、GM 菜单等 - 添加 usePopupData hook 对接 service worker 后端 API 和实时订阅 - 新增 Popconfirm 组件用于删除确认 - 配置设计系统色彩令牌(品牌蓝、状态色、暗色模式) - 搭建 options 页面入口(骨架)
- 新增 Sidebar 组件:导航、帮助中心菜单(hover触发)、主题切换、折叠 - 使用 HashRouter 配置路由(脚本列表/订阅/日志/工具/设置/编辑器) - 提取 GithubIcon 组件替代 popup 和 sidebar 中的 inline SVG - i18n 使用已有翻译 key,与 release/v1.4 保持一致
- 将 translation.json 拆分为 11 个命名空间(common/agent/script/editor/settings/install/popup/logs/guide/tools/permission) - 升级 React 18→19、i18next 23→26,引入 react-i18next - 还原 SW 层 popup 逻辑至 v1.5(不在 SW 中处理 i18n) - 删除 Crowdin 配置、伪语言 ach-UG 及相关文档引用 - 修复 React 19 类型兼容(useRef、cloneElement)
# Conflicts: # package.json # pnpm-lock.yaml # src/app/service/service_worker/gm_api/gm_api.ts # src/app/service/service_worker/index.ts # src/locales/ach-UG/translation.json # src/locales/de-DE/translation.json # src/locales/en-US/translation.json # src/locales/ja-JP/translation.json # src/locales/ru-RU/translation.json # src/locales/vi-VN/translation.json # src/locales/zh-CN/translation.json # src/locales/zh-TW/translation.json # src/pages/components/CodeEditor/index.tsx # src/pages/components/UserConfigPanel/index.tsx # src/pages/components/layout/MainLayout.tsx # src/pages/install/App.tsx # src/pages/options/index.css # src/pages/options/routes/Logger.tsx # src/pages/options/routes/Setting.tsx # src/pages/options/routes/script/ScriptEditor.tsx # src/pages/popup/App.tsx
# Conflicts: # CONTRIBUTING.md # README.md # docs/CONTRIBUTING_EN.md # docs/CONTRIBUTING_RU.md # docs/README_RU.md # docs/README_ja.md # docs/README_zh-CN.md # docs/README_zh-TW.md # e2e/install.spec.ts # e2e/popup.spec.ts # e2e/script-editor.spec.ts # e2e/script-management.spec.ts # e2e/settings.spec.ts # e2e/vscode-connect.spec.ts # package.json # playwright.config.ts # pnpm-lock.yaml # src/app/service/content/scripting.ts # src/app/service/service_worker/gm_api/gm_api.ts # src/app/service/service_worker/index.ts # src/index.css # src/locales/README.md # src/locales/de-DE/translation.json # src/locales/en-US/translation.json # src/locales/ja-JP/translation.json # src/locales/locales.ts # src/locales/ru-RU/translation.json # src/locales/vi-VN/translation.json # src/locales/zh-CN/translation.json # src/locales/zh-TW/translation.json # src/manifest.json # src/pages/components/CodeEditor/index.tsx # src/pages/components/ScriptMenuList/index.tsx # src/pages/components/layout/MainLayout.tsx # src/pages/components/layout/Sider.tsx # src/pages/components/layout/SiderGuide.tsx # src/pages/confirm/App.tsx # src/pages/install/App.tsx # src/pages/install/hooks.tsx # src/pages/install/utils.ts # src/pages/options.html # src/pages/options/routes/AgentChat/ChatArea.tsx # src/pages/options/routes/AgentMcp.tsx # src/pages/options/routes/AgentOPFS.tsx # src/pages/options/routes/AgentProvider.tsx # src/pages/options/routes/AgentSettings.tsx # src/pages/options/routes/AgentSkills.tsx # src/pages/options/routes/AgentTasks.tsx # src/pages/options/routes/ScriptList/components.tsx # src/pages/options/routes/ScriptList/index.tsx # src/pages/options/routes/Setting.tsx # src/pages/options/routes/SubscribeList.tsx # src/pages/options/routes/Tools.tsx # src/pages/options/routes/script/ScriptEditor.tsx # src/pages/options/routes/script/index.css # src/pages/popup.html # src/pages/popup/App.tsx # src/pages/template.html # tests/pages/options/MainLayout.test.tsx
|
「脚本垃圾回收站功能」不在这一版做吗 |
做 合并了这个再处理 |
为 new-ui options 页实现「首次自动 + 可手动重看」的新手引导: - 控制器 OnboardingProvider + useOnboarding,首次(非隐身、onboarding_done=false、非全屏编辑器)自动弹欢迎;标志存 SystemConfig.onboarding_done(chrome.storage.local,按设备) - 欢迎弹窗(桌面 Dialog / 移动 Sheet),真实 logo - 巡览:桌面 6 步 / 移动 3 步 Coachmark,data-tour 锚点定位;自研聚光灯遮罩 + 自定位步骤卡;Esc 退出与焦点管理;observeTarget 保证跨路由目标定位 - 巡览时在脚本列表注入演示脚本(表现层、不落库、结束即恢复;整屏遮罩拦截点击避免误触发真实动作) - 入口位于帮助中心(侧栏 hover 二级菜单 + 移动抽屉),名为「新手引导」 - 步骤关联文档站(市场/后台/UserConfig/备份/迁移/同步/订阅),en 用 /en/docs 其余 /docs - 明暗双主题;guide 命名空间文案 7 语言
- 新手引导首次进入标志由 SystemConfig(onboarding_done) 改为 localStorage(firstUse), 移除相关 config 读写与 STORAGE_LOCAL_KEYS 常量 - 清理 7 个语言包中未使用的翻译键;修复 cron.ts 缺失的 script: 命名空间前缀 (此前 nextTimeDisplay 渲染的是未翻译的 key) - 安装页后台/定时/反特性标签补充 title 提示;脚本列表新增定时脚本下次运行时间展示
|
整理了一轮与本次 UI/UX 重构分支直接相关的 open issues。这里的“是否可以关闭”按 issue 原始诉求判断;有相关 UI 改善但没覆盖核心诉求的,先标 ❌。
汇总:当前可以直接关闭的是 #1496、#1482、#1456、#1447、#1363、#1321、#1108、#913、#633、#961、#814、#576;#1399 仍未完整覆盖。已从本表移除纯新功能/运行时能力/后台逻辑/特定浏览器兼容类 issue:#1495、#1453、#1351、#1063、#992、#991、#941、#907、#864、#830、#684。 |
把 main 的 SC_DISABLE_AGENT / EnableAgent 屏蔽机制(2a83fd2)落到新 UI: - 版本冲突保留 develop 的 1.5.0-beta / 1.5.0.1100 - script.ts 保留 develop 仅 .cat.md 的 Web 安装规则,并按 EnableAgent 收敛 - 新 UI 入口按 EnableAgent 屏蔽:侧栏/移动抽屉 agent 菜单、/agent 路由、 安装页 ?skill= 与 .cat.md 入口、导入 .zip Skill 包 - 删除被新 UI 重构替换的旧文件(Sider/MainLayout/install hooks/utils)
|
翻译的部份,合并前要用AI跟现时版本和 terminology 一起对比一下。 |
根据文档处理过,有没有具体的地方? |
代码审查(对比
|
LogClient.deleteLogs/clearLogs 服务端返回 void,doThrow 对空返回值一律抛错, 导致删除/清空虽已成功但客户端抛错、成功提示不显示且产生未处理 rejection。 改用 do;补 LogClient 经消息通道的端到端回归测试。
在 src/types/main.d.ts 声明 Window.showOpenFilePicker 与 DataTransferItem.getAsFileSystemHandle,去掉调用处两处 as any 强转。
Checklist / 检查清单
设计稿.pen.zip
Description / 描述
使用 shadcn/ui + Tailwind CSS v4 + React 19 对
src/pages/表现层进行从零重写,替换原有的 Arco Design + UnoCSS 技术栈。设计系统(颜色令牌、组件、布局/动效/状态规范)统一沉淀在docs/DESIGN.md,所有页面同时适配亮色/暗色主题(Tailwinddark:变体 +src/index.css设计令牌)。已完成页面
核心管理页
独立页面
Agent 套件(7 页)
其它
docs/DESIGN.md,更新docs/DEVELOP.md/docs/README.md等贡献者文档待办(转正式 PR 前)
Screenshots / 截图