Commit 2e225db
authored
test/docs: 补充 WalletConfig 测试和白皮书文档 (#127)
* feat(wallet): 三页合一 - 3D钱包卡片、轮播、动态主题色
BREAKING CHANGE: 移除首页/转账/钱包三个独立tab,合并为统一的钱包页面
新增功能:
- 3D钱包卡片,支持重力感应和触摸交互的倾斜效果
- 炫光防伪层,彩虹折射效果随手指/设备移动
- Swiper轮播切换多个钱包
- 每个钱包可独立设置主题色,影响全局primary颜色
- 资产/交易Tab切换,支持滑动动画
- 钱包列表Sheet,支持快速切换和主题色选择
新增组件:
- WalletCard: 3D卡片组件
- WalletCardCarousel: Swiper轮播组件
- WalletListSheet: 钱包列表Sheet
- ContentTabs/SwipeableContentTabs: Tab切换组件
- useCardInteraction: 重力感应+触摸hook
- useWalletTheme: 主题色管理hook
UI变更:
- TabBar从4个tab简化为2个(钱包/设置)
- globals.css添加动态--primary-hue CSS变量
测试覆盖:
- 新增6个单元测试文件
- 新增4个Storybook stories
- 新增1个E2E测试文件
* fix: 修复类型错误和测试问题
- 修复 WalletInfo 类型兼容性,保留向后兼容接口
- 修复 WalletCardProps 可选属性的精确类型
- 修复数组索引可能为 undefined 的问题
- 修复未使用导入的警告
- 修复 useCardInteraction 中 touches[0] 可能为 undefined 的问题
- 修复 ringColor CSS 属性问题,改用 --tw-ring-color CSS变量
- 从 index.ts 导出 WalletSelector 组件
* refactor: 清理残留的 tanstack-router 代码,修复 stackflow 路由
- 删除未使用的 src/routes/ 目录(tanstack-router)
- 删除未使用的 app-layout.tsx
- 删除未使用的 pages/home/index.tsx
- 修改正确的 stackflow TabBar:4 tabs → 2 tabs
- 修改 MainTabsActivity:移除 HomeTab/TransferTab
- 重写 WalletTab:集成 3D 卡片轮播、资产/交易 Tab
* refactor: 使用 stackflow Job 模式重构钱包列表底部弹窗
- 创建 WalletListJob 替代 WalletListSheet
- 在 stackflow.ts 注册新的 Job 路由
- 更新 WalletTab 使用 push('WalletListJob') 打开钱包列表
- 删除不再使用的 wallet-list-sheet 组件及其测试/story
* fix: 优化3D卡片视觉效果和主题色跟随
- 卡片添加默认光泽层(不依赖交互也可见)
- 添加彩虹全息效果、噪点纹理、边缘高光
- 添加微弱呼吸动画增加动态感
- 快捷按钮颜色跟随 --primary-hue 主题色
- 增大卡片尺寸 280x180 → 340x200
- 分页指示器跟随主题色
- 导出 WALLET_THEME_COLORS 供钱包列表使用
* fix: 修复主题色跟随和间距问题
- 主题色根据钱包索引自动分配(无需手动设置)
- 减少卡片区域、快捷按钮、Tab栏之间的间距
- Tab指示器和文字颜色跟随主题色
- 快捷按钮颜色跟随主题色
- 优化整体布局紧凑度
* fix: 优化卡片尺寸、防伪图层和多钱包入口位置
- 卡片尺寸增大: 340x200 → 380x220
- 防伪图层增强: 斜纹底纹 + 细密网格 + 大Logo水印
- 移除 Swiper 分页指示器
- 多钱包管理入口移至左上角,带钱包图标
* fix: 修复重力感应和卡片尺寸问题
- 重力感应时也设置 isActive=true,让卡片能响应倾斜
- 卡片使用 h-full w-full 填满 Swiper slide
- Swiper slide 使用 !important 强制 100% 宽高
- 调整卡片尺寸为 360x212px (1.7:1比例)
* refactor: 移除卡片呼吸动画,已有重力感应
* feat: 添加全息防伪水印效果
- 用链 logo 作为 CSS mask 平铺
- 彩虹折射层跟随指针/重力移动
- 新增 watermarkLogoSize 参数控制 logo 平铺尺寸(默认 32px)
- 从 chainConfigs 获取链图标 URL
* fix: 修复防伪水印效果
1. 添加 logo 间距 - watermarkLogoSize(40px) vs watermarkLogoActualSize(24px)
2. 生成黑白透明遮罩 - useMonochromeMask hook 将彩色 logo 转为亮度透明
3. 独立渲染上下文 - 添加 isolation: isolate 确保每个卡片混合模式独立
4. 每个钱包独立链偏好 - 使用 chainPreferences 让每个卡片显示自己的链
5. 添加 useChainPreferences hook
* fix: 修复防伪折射层截断问题
- 使用 radial-gradient at 动态位置代替 scale+translate
- 渐变始终覆盖整个卡片区域,通过移动渐变中心点实现动态效果
- 避免了边缘截断的视觉问题
* feat: 实现原版防伪效果 - 双层纹理 + 默认无色
1. 三角形底纹层 - 灰色背景 + 小三角形 mask,mix-blend-mode: multiply
2. Logo 水印层 - 白色半透明背景 + logo mask,默认可见(灰色)
3. 彩虹折射层 - 默认 opacity: 0,只有激活时才显示彩虹色
* refactor: 按照简化 DEMO 重新实现防伪效果
关键改进:
1. mix-blend-mode: color-dodge - 深色背景下透明,有亮光时显色
2. 线性渐变 200% 大小 - 通过 translate 移动产生视差
3. 动态透明度 - opacity: 0.1 + max(abs(x), abs(y)) * 0.9
默认几乎不可见,倾斜越大越亮
4. 双层纹理:三角底纹(color-dodge) + Logo水印(overlay)
5. 表面高光 glare - radial-gradient 跟随指针
* refactor: 优化防伪效果 - 使用 hypot 控制显影强度
关键改进:
1. hypot = sqrt(x² + y²) - 移动幅度控制显影强度
2. 三角纹理层:默认 opacity: 0.2,激活时 0.3 + hypot * 0.7
3. Logo 水印层:默认 opacity: 0(完全隐藏),激活时 hypot * 0.8
4. 径向渐变 + blur(20px) - 更柔和的光栅效果
5. Logo 层使用金色渐变,与三角层差异化
6. 高光层 opacity 也由 hypot 控制
* fix: 调整防伪效果
1. 使用 DEMO 的 figma-texture.png 作为三角纹理
2. 降低三角层强度:默认 0.15,激活 0.2 + hypot * 0.5
3. 提高 Logo 层强度:默认 0,激活 0.2 + hypot * 0.8
* fix: 使用直角三角形纹理(直角边在横轴和纵轴)
SVG 路径: M0 10 L10 10 L10 0 Z
- 底边(水平)+ 右边(垂直)= 直角
- 平铺后形成类似正方形的层叠效果
* perf: 优化动画性能
1. 添加 will-change: transform 到需要动画的元素
2. 抽取静态样式常量(TRIANGLE_MASK_SVG, REFRACTION_GRADIENT, GOLD_GRADIENT)
3. 使用 useMemo 缓存 bgGradient 和 logoMaskStyle
4. 移除不必要的 transition(opacity 变化由 React 重渲染驱动)
* refactor: 使用 AddressDisplay 组件的响应式显示
- 用 AddressDisplay (copyable={false}) 替换手动截断
- 保留原有的复制按钮
- 删除不再使用的 truncateAddress 函数
* fix: 切换钱包时 --primary-hue 没有更新
问题:useWalletTheme 中的 themeHue 直接读取 wallet.themeHue,
如果没有就用默认值,而不是像 getWalletTheme 那样根据索引选择。
修复:抽取 getThemeHueForWallet 函数,统一 themeHue 和 getWalletTheme 的逻辑,
都是先检查存储的值,没有的话根据钱包索引从预设中选择。
* style: 钱包管理按钮使用 primary 风格
* refactor: 将 style 标签转换为 tailwind 类
- .wallet-carousel → w-full pt-8 pb-2
- .wallet-swiper → mx-auto h-[212px] w-[min(92vw,360px)] overflow-visible
- .swiper-slide → [&_.swiper-slide]:size-full [&_.swiper-slide]:rounded-2xl
* refactor: 使用主题变量 bg-primary/10 text-primary 替代自定义 oklch
遵循主题系统,不再自定义 lightness/chroma,直接用 --primary 配合透明度
* fix: 卡片背景渐变使用 oklch 替代 hsl
* fix: 交易历史按当前选中的链过滤
* feat: 交易列表添加'查看更多'入口
- 首页交易列表只显示最近 5 条
- 超过 5 条时显示'查看全部 N 条记录'按钮
- 点击进入完整的交易历史页面(含过滤器)
* fix: 添加缺失的 useEffect 导入
* fix: 始终显示查看全部交易按钮
- 有记录时显示'查看全部 N 条记录'
- 无记录时显示'查看全部网络交易'
* feat: History页面支持传递初始链过滤参数
- HistoryActivity 支持 chain 参数
- TransactionHistoryPage 接收 initialChain prop
- 有记录时传递当前链,无记录时传递 'all'
* feat: 交易列表支持显示链图标
- TransactionInfo 添加 chain 字段
- TransactionItem 添加 showChainIcon prop
- 链图标显示在类型图标右下角(类似 TokenIcon)
- History 页面启用 showChainIcon
* fix: 修复类型错误
- useMonochromeMask: 添加亮度归一化,映射到完整 0~255 范围
- useWalletTheme: 添加默认值防止 undefined
- TransactionHistoryPageProps: 添加 undefined 类型
- WalletListJob: 使用 getWalletTheme 获取主题色
- WalletTab: 移除未使用的 ChainType 导入
* feat: 禁用右键菜单事件
* fix: 修复 history 页面 select 显示问题,添加配套 Label
* fix: 移除 SelectValue 不支持的 placeholder 属性
* refactor: 基于物理角度重构卡片光影算法
- 使用倾斜角度(tiltX/Y)替代指针位置计算光影效果
- 添加菲涅尔效应:倾斜角度越大,反射越强
- 高光位置基于入射角=反射角原理移动
- 彩虹色带随倾斜方向旋转,模拟光栅衍射
- 各层透明度基于物理角度而非距离
* fix: 使用CSS变量统一驱动光影动画,与卡片回弹同步
- 所有光影效果通过 CSS 变量 (--tilt-x/y/intensity) 驱动
- 统一过渡配置: cubic-bezier(0.34, 1.56, 0.64, 1) 回弹曲线
- 激活时无过渡(即时响应),松手时 GPU 驱动动画回弹
- 高光、透明度、视差位移都与卡片旋转同步过渡
* fix: 注册CSS自定义属性使其可动画插值
使用 CSS.registerProperty 注册 --tilt-* 变量为 <number> 类型,
使浏览器能够对其进行插值动画
* fix: 为Logo水印添加基础透明度,确保静止时可见
* fix: 覆盖 Swiper slide 的 overflow:hidden,避免裁剪 3D 变换
* refactor: 使用双层折射重构卡片光影效果
* feat: 添加钱包主题色选择功能
- Wallet 类型添加必需的 themeHue 属性
- 基于助记词/密钥稳定派生默认主题色
- 创建和导入钱包流程增加主题色选择步骤
- 添加 ThemeSelector 组件支持预览和选择
* feat: 添加清空应用数据功能
- 新增 ClearDataConfirmJob 确认弹窗
- 设置页面添加清空数据入口
- 清空 localStorage/sessionStorage/IndexedDB
* refactor: 将清空数据功能移至存储空间页面
- 新增存储空间页面,显示 navigator.storage.estimate() 配额信息
- 设置页面 -> 关于 -> 存储空间
- 存储页面显示使用率进度条和详细信息
- 清理数据按钮移至存储页面
- 修复路由映射缺失问题
* refactor: 使用 Vite 多入口配置清理数据页面
- 创建 clear.html 和 src/clear/ 作为独立入口
- 配置 vite.config.ts rollupOptions.input 多入口
- 使用 TypeScript 重写清理逻辑
- 修复 check 图标意外旋转问题
* feat: 统一钱包配置组件与主题色增强
WalletConfig 组件:
- 三模式支持 (edit-only/default/edit)
- 实时名称和主题色预览
- 嵌入创建/恢复流程最后一步
主题色系统:
- deriveThemeHue() 从地址稳定派生主题色
- 动态 --primary-hue CSS 变量
- 确认/保存按钮跟随主题色
UI 增强:
- 彩虹渐变进度条 (animate-rainbow-flow)
- useChainIconUrls hook 统一链图标
- 触摸手势隔离 (touch-none + stopPropagation)
重构:
- WalletDetailActivity → WalletConfigActivity
- 简化 WalletCardCarousel 内部使用 hook
- 删除 HomeTab/TransferTab 等未使用组件
* feat: 使用 @Property 注册 --primary* CSS 属性类型
注册 5 个可继承的 CSS 自定义属性:
- --primary-hue: <number>
- --primary-saturation: <number>
- --primary-lightness: <number>
- --primary: <color>
- --primary-foreground: <color>
支持 CSS 动画过渡和属性继承
* fix: 修复 WalletConfig 链网络切换
- 使用 useSelectedChain() 替代 chainAddresses[0]
- 同步修复 --primary CSS 变量覆盖
* fix: 修复进度条彩虹效果和 recover 页面缺失进度条
1. ProgressSteps 最后一步始终显示彩虹渐变
- 激活时: 彩虹流动动画
- 非激活时: 静态彩虹渐变,轻微淡化 (opacity: 0.6, 降低饱和度)
2. recover.tsx 添加 ProgressSteps 进度条
- 5步流程: keyType -> mnemonic/arbitrary -> pattern -> chains -> theme
- collision 步骤共用第2步指示
* fix: 补全 zh-TW 和 ar 语言的缺失翻译
添加以下缺失的 i18n 键:
- common: a11y.addWallet
- onboarding: create.themeTitle/themeSubtitle, theme.*
- settings: items.storage/clearData, clearData.*, storage.*
- wallet: defaultName, detail.editTheme/editTitle
* fix: 补全 en 语言的缺失翻译
添加 onboarding.theme.* 和 wallet.defaultName/detail.editTheme/editTitle
* fix: 修复单元测试
- step-indicator: 更新彩虹渐变测试断言
- wallet-card-carousel: 单钱包不显示计数按钮,修复 chainPreferences 测试
* fix: 修复 wallet-card 和 content-tabs 单元测试
- wallet-card: 更新地址显示、主题色和透视容器测试
- content-tabs: 修复活动标签和圆角指示器类名
* fix: 修复 step-indicator 测试 TypeScript 类型错误
* test/docs: 补充 WalletConfig 测试和白皮书文档
测试:
- wallet-config.test.tsx: 20 个单元测试覆盖三种模式
- useChainIconUrls.test.ts: 5 个 hook 测试
- wallet-config.stories.tsx: 5 个 Storybook 故事
白皮书:
- 更新 WalletCard.md: 3D 效果、主题色、防伪水印规范
- 新建 WalletConfig.md: 三模式配置组件文档
- 更新 theme-colors.md: 添加钱包个性化主题色章节1 parent e6452f1 commit 2e225db
File tree
6 files changed
+1084
-76
lines changed- docs/white-book
- 02-设计篇/02-视觉设计
- 05-组件篇/03-钱包组件
- src
- components/wallet
- hooks
6 files changed
+1084
-76
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
234 | 234 | | |
235 | 235 | | |
236 | 236 | | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
237 | 340 | | |
238 | 341 | | |
239 | 342 | | |
240 | 343 | | |
| 344 | + | |
| 345 | + | |
0 commit comments