雨霖铃
aa23a263fe
refactor: 迁移 i18n 系统从 react-i18next 到 chrome.i18n
...
- 移除 react-i18next、i18next 及相关依赖
- 删除旧的 i18n/ 目录和 useLazyTranslation 工具
- 新增 utils/chromeI18n.ts 类型安全 wrapper(useI18n Hook + getMessage)
- 生成 public/_locales/{zh,en}/messages.json(298 个翻译 key)
- 批量更新 39+ 组件文件的导入和翻译调用
- 转换翻译键格式:namespace:key → namespace_key
- 修复 ErrorBoundary/PageErrorBoundary 从 withTranslation HOC 改为直接调用 getMessage
- 更新 vitest.setup.ts mock 加载实际翻译文本
- 修复 11 个测试文件的断言以匹配中文翻译
- TypeScript、ESLint、547 项测试全部通过
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-28 19:21:54 +08:00
雨霖铃
c735a0aa1a
refactor(TextInputArea): 复用 CopyButton 组件替换内联复制逻辑
2026-05-27 22:55:28 +08:00
雨霖铃
62c880b0a8
fix(CopyButton, LiveClock): 修改按钮大小为 'icon',移除硬编码颜色配置
2026-05-27 17:07:39 +08:00
雨霖铃
1e4b6eddc7
fix(RouterContainer): replace hardcoded Chinese with i18n t() calls
...
Use useTranslation('common') for 404 page title and description with
entryPointType interpolation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 14:14:19 +08:00
雨霖铃
4316bb57d2
fix(PageErrorBoundary): replace hardcoded Chinese with i18n via withTranslation HOC
...
Use react-i18next withTranslation HOC for class component to translate
title, description, and retry button text.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 14:11:44 +08:00
雨霖铃
f40485e2dc
fix(ErrorBoundary): replace hardcoded Chinese with i18n via withTranslation HOC
...
Use react-i18next withTranslation HOC for class component to translate
title, description, and refresh button text.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 14:10:11 +08:00
雨霖铃
0908358f97
fix(CopyButton): replace hardcoded Chinese strings with i18n t() calls
...
Use useTranslation('common') for tooltip, copy empty/success/error
toast messages.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 14:08:10 +08:00
雨霖铃
003dad5d8b
fix(RouterContainer): remove unnecessary empty-dep useMemo
...
getEntryPointType() is a simple config getter. Replace useMemo(() => ..., [])
with a direct call — the empty dep array made the memo pointless.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:55:54 +08:00
雨霖铃
27d3360f9d
fix(TopBar): add selectedIndex boundary protection in keyboard nav
...
Guard against out-of-bounds access when search results change during
keyboard navigation. Check selectedIndex < totalItems before accessing
arrays.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:54:38 +08:00
雨霖铃
67629263f9
fix(TopBar): add missing openExtensionPage import
...
The function was called in handleOpenInTab but never imported from
utils/chromeTabs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:53:48 +08:00
雨霖铃
8b58dcf02e
fix(SwitchButtonGroup): remove redundant containerPadding conditional
...
Both branches of the ternary returned 'p-1'. Inline the constant
directly into the className string.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:53:11 +08:00
雨霖铃
2e2f6e9835
fix(ImageUploader): wrap handleClearFile with useCallback
...
Prevents unnecessary re-renders by memoizing the callback, consistent
with handleFileChange which already uses useCallback.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:52:11 +08:00
雨霖铃
cdad9bda68
docs(GlobalSnackbar): clarify relationship with sonner toast
...
Add note explaining when to use GlobalSnackbar (provider context,
severity levels, custom positioning) vs sonner toast (simple one-off
messages).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:51:30 +08:00
雨霖铃
fae8dea971
fix(QrCodePreview): use shadcn Button instead of manual button styles
...
Replace hand-written button class strings with shadcn Button component
using outline and default variants. Removes ~15 lines of duplicated
Tailwind classes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:50:36 +08:00
雨霖铃
e0de152645
fix(TextInputArea): replace hardcoded Chinese strings with i18n t() calls
...
Use existing translation keys for clear success, copy success, and
copy error messages instead of hardcoded Chinese text.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:49:31 +08:00
雨霖铃
e005d4d95d
fix(ErrorBoundary): use shadcn destructive tokens instead of hardcoded red colors
...
Replace hardcoded red-200/red-50/red-600 with border-destructive,
bg-destructive/5, text-destructive. Use variant='destructive' on
Button. Align error log styling with PageErrorBoundary.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:48:30 +08:00
雨霖铃
601260797e
fix(CopyButton): use shadcn buttonVariants instead of duplicated variant classes
...
Remove hand-written variantClasses/sizeClasses that duplicated shadcn's
buttonVariants. Now extends ButtonProps and imports buttonVariants from
components/ui/button for consistent styling.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 13:48:02 +08:00
雨霖铃
c61b599287
docs: 添加项目文档(copilot-instructions、编码规范、各目录 README)
...
- 新增 .github/copilot-instructions.md:Copilot 指令文件,涵盖构建命令、CI 流水线、项目架构、关键规范
- 新增 .github/CODING_STANDARDS.md:完整的代码编写规范文档(TypeScript、React、样式、错误处理、命名、测试、Hook、i18n、存储等 12 个章节)
- 新增 11 个目录的 README.md:components、components/ui、config、entrypoints、i18n、lib、pages、providers、public、src、types、utils
- 更新 AGENTS.md:补充页面组件模式说明和 components/ui 目录
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-27 11:54:21 +08:00
雨霖铃
8ec36ac3b3
test: fix i18n namespace assertions in Base64Converter and QrCode tests
...
Align test selectors with useLazyTranslation mock which prefixes keys
with namespace (e.g. base64Converter:encode). Also remove obsolete
page title assertions for components that no longer render titles.
2026-05-23 14:04:10 +08:00
雨霖铃
df3eee8749
refactor: 移除所有页面的 PageHeader 组件
...
删除 PageHeader 组件及其测试文件,清理相关不再使用的导入和变量。
2026-05-23 13:15:25 +08:00
雨霖铃
cf05df7022
fix(i18n): replace useTranslation with useLazyTranslation in Base64Converter
...
Fix missing translations by ensuring base64Converter namespace is dynamically loaded.
2026-05-23 13:07:31 +08:00
雨霖铃
5e23b29a25
refactor: use regex matchers for i18n text and add uniform mocks in test files
2026-05-22 23:51:16 +08:00
雨霖铃
cc9162f601
refactor: use regex matchers in StorageCleanerConfirm tests and add chrome/browser mocks
2026-05-22 23:45:41 +08:00
雨霖铃
89e33f6273
refactor: 抽离 useBase64Converter hook 并新增 Base64ConverterSection 组件,统一 Base64 转换页面的 shadcn 样式
2026-05-22 22:26:35 +08:00
雨霖铃
ae0b923e11
refactor: 重构 Dashboard 页面和 ToolCard 组件,全面迁移至 shadcn 样式并优化布局
2026-05-22 21:56:09 +08:00
雨霖铃
7ddc761df4
feat: add Badge, Checkbox, Label, and Switch shadcn UI components
2026-05-22 21:25:29 +08:00
雨霖铃
67553afe9c
refactor: 将 TextStatistics 页面和 TextInputArea 组件全面迁移至 shadcn 样式并优化布局
2026-05-22 21:10:52 +08:00
雨霖铃
94158f016b
feat: add Input and Select shadcn UI components
2026-05-22 21:03:06 +08:00
雨霖铃
b3dd7146ad
refactor: 重构 CopyButton 与 RouterContainer 组件,移除 GlobalSnackbar 并统一使用 sonner toast 和 cn 工具函数
2026-05-22 20:51:13 +08:00
雨霖铃
2ced38769b
refactor: 更新PageErrorBoundary的文案和样式以对齐shadcn主题
...
- 错误提示从“该页面加载失败”改为“该功能运行异常”
- 重试按钮文字从“重试”改为“重新尝试”
- 使用border-destructive, bg-destructive等语义化类名替换硬编码颜色
- 更新对应测试断言
2026-05-22 20:49:46 +08:00
雨霖铃
8406b03dd6
refactor: 将 PageHeader 组件样式从 MUI sx 迁移至 Tailwind 类名,并更新测试
2026-05-22 20:49:07 +08:00
雨霖铃
da667ccb13
refactor: 重构 QrCodePreview 组件,继承 HTMLDiv 属性并统一 shadcn 样式
...
- 组件改为继承 `React.HTMLAttributes<HTMLDivElement>`,支持外部传入 className 和事件
- 使用 `cn()` 函数合并外部类名
- 空白状态改用 `border border-dashed` 和更浅的 `bg-muted/40` 背景
- 正常状态改为纯白背景柔边圆角容器包裹二维码,确保暗黑模式下黑白对比度
- 下载/复制按钮完全对齐 shadcn 的 Outline 与 Default 样式规范
- 更新测试用例中的 alt 文本为 "QR Code Preview"
2026-05-22 20:48:14 +08:00
雨霖铃
1bfb7d4e6d
refactor: 简化 TextInputArea,移除 showMessage 和 MUI 样式,改用 shadcn 样式和 sonner toast
2026-05-22 20:47:04 +08:00
雨霖铃
b3c2fbccf5
refactor: 简化 TextInputArea,移除 showMessage 和 MUI 样式,改用 shadcn 样式和 sonner toast
2026-05-22 20:46:43 +08:00
雨霖铃
b29e9417cc
refactor: 使用 className 替换 sx/buttonSx 并优化 SwitchButtonGroup 选中动画
2026-05-22 20:45:31 +08:00
雨霖铃
72883b5d1d
fix: 增强 SwitchButtonGroup 和立即转换按钮的视觉层级
...
- SwitchButtonGroup 选中按钮阴影从 shadow-sm 升级到 shadow-md
- 同步更新单元测试中断言
- Timestamp 立即转换按钮添加 shadow-md 增强边界感
2026-05-22 18:08:44 +08:00
雨霖铃
c7beebf6e0
fix: 修复输入框和按钮在暗色模式下的样式问题
...
- 为 :root 和 .dark 添加 color-scheme,使浏览器表单控件默认样式适配暗色模式
- 将 bg-primary 搭配 text-white 的按钮改为 text-primary-foreground
- 替换残留的 hover:bg-blue-700、text-blue-500、bg-gray-200 等硬编码颜色
- 同步更新 TextInputArea 单元测试
2026-05-22 17:36:37 +08:00
雨霖铃
de7da9f1db
fix: 修复暗黑模式样式兼容性
...
- 在 tailwind.config.js 中启用 darkMode: 'class' 并扩展语义化颜色变量
- 将全项目硬编码颜色(bg-white、text-gray-*、border-gray-* 等)替换为语义化类名
- 修复 popup/index.html 硬编码浅色背景色
- 同步更新相关单元测试中的类名断言
2026-05-22 16:04:50 +08:00
雨霖铃
5b9a0f59d3
为 Dialog 组件添加暗黑模式背景色支持
2026-05-22 08:55:23 +08:00
雨霖铃
e2dd5f5915
重写所有页面和组件:用纯 Tailwind CSS 替换 MUI 组件和图标
2026-05-22 00:51:11 +08:00
雨霖铃
427e668e7c
用 Tailwind CSS 重构所有共享组件
2026-05-22 00:31:52 +08:00
雨霖铃
d2334c5e95
用 Tailwind CSS 重写 StorageCleaner 页面,创建 shadcn/ui Dialog 组件
2026-05-22 00:00:04 +08:00
雨霖铃
83bf9dd342
用 Tailwind CSS 重写 QrCode 页面及相关组件
2026-05-21 23:46:44 +08:00
雨霖铃
3eb00d8a29
引入 Tailwind CSS 和 shadcn/ui
2026-05-21 22:57:23 +08:00
雨霖铃
f1f0047928
test: 修复测试中的 act() 警告和 clipboard mock 问题
...
- TextInputArea: 使用 userEvent 替代 fireEvent,用 vi.spyOn 替代 Object.assign mock clipboard
- ImageMode/FileMode: 添加 waitForStorageReady() 等待 useStorageState 异步初始化
2026-05-21 22:06:09 +08:00
雨霖铃
8e2ac5200d
fix(i18n): 统一使用 useLazyTranslation 避免翻译 key 闪烁
2026-05-21 00:50:01 +08:00
雨霖铃
604fbb4d1f
feat(pageHeader): popup 模式下隐藏 PageHeader 组件
2026-05-21 00:38:00 +08:00
雨霖铃
704ec7289d
fix(pageHeader): 使用 MUI 主题色替代硬编码颜色,支持暗色模式
2026-05-21 00:34:02 +08:00
雨霖铃
70580a9a63
fix(qrcode): 修复切换 tab 后二维码图片失效问题
...
- 移除 ImageUploader 组件卸载时的预览 URL 释放逻辑
- 在 useQrCode hook 中统一管理预览 URL 生命周期
- 创建新预览 URL 前释放旧的,避免内存泄漏
2026-05-21 00:12:06 +08:00
雨霖铃
2870e01610
refactor(qrcode): 提取独立组件并添加单元测试
...
- 创建 pages/QrCode/types.ts 定义状态类型接口
- 提取 QrCodePreview 组件用于二维码预览和操作
- 提取 ImageUploader 组件封装图片上传、拖拽、粘贴逻辑
- 重构 UrlToQrCodeSection 状态提升到父组件
- 重构 QrCodeToUrlSection 通过回调传递解析结果
- 更新主页面 index.tsx 集中管理所有状态
- 为 QrCodePreview 和 ImageUploader 添加单元测试 (23 个用例)
2026-05-20 21:59:57 +08:00