内部说明文档 · 正文统一使用中文

组件目录

MobileMailboxDrawer 见下方同名示例:复用批准的 Sheet、Button、Avatar、Badge,提供账号栏与文件夹选择。context 包含 accountId/folder,onSelect 由宿主负责更新来源、URL 与列表。切账号保持抽屉打开并进入该账号收件箱;切文件夹后关闭,Escape/遮罩/关闭按钮沿用 Sheet 行为。示例状态只在自身组件中,不影响原型页面。新增账号、汇总邮箱和设置均禁用;不新增原始组件。Sheet 插槽兼容修复已于 2026-10-16 获用户批准,仅同步其源码摘要。

可选 container 用于原型手机画布:通过 SheetContent asChild 与 React Portal 挂载面板,保持原有 ref、事件和无障碍属性;遮罩仍为标准全局模态。不传时采用默认视口定位,目录示例使用该默认方式。

SheetContent 内部使用官方 Slot.Slottable 标记子元素,使可选关闭按钮与 asChild 兼容。asChild 必须传入单个可接收 ref/属性的元素,不可用多个元素或 Fragment 代替实际根节点;showCloseButton=false 时可在内部组合 SheetClose。下方 Sheet 原始组件示例覆盖普通模式、asChild 默认关闭和自定义关闭;此修复不改变颜色、尺寸或默认交互。

这里是批准组件的可视化真源。先复用现有组件与变体,再考虑新增。错误使用语义色,加载状态使用 Skeleton;控件保留键盘焦点,禁用态不允许触发操作。

统一尺寸:可操作目标至少 44px;常用控件默认 44px,紧凑外观也保留触控区域。所有示例可使用键盘操作。

原始组件源码位于 src/components/ui/,示例锚点与批准清单保持一致。 业务中优先复用共享组合;目录说明与示例统一使用中文。

Button

default / outline / secondary / ghost / destructive / link;支持 default、xs、sm、lg 及对应图标尺寸,触控区域仍至少 44px。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Alert

默认信息与 destructive 错误反馈;使用明确标题与说明。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Avatar

默认 32px,可用 44/48px;无头像时使用文字回退。

林TM

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Badge

default / secondary / outline / destructive;状态标签不当作按钮。

defaultsecondaryoutlinedestructive

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Card

标题、描述、内容采用统一内边距;无随意阴影。

统一内容卡片
标题与补充说明
可复用内容区

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Checkbox

勾选 / 未选 / 禁用;标签区域至少 44px。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Dialog

打开后焦点进入对话框,Escape 关闭并返回触发器。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Form

React Hook Form + Zod;错误通过关联 ID 绑定字段。

输入有效邮箱,或提交空值查看错误。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Input

默认 / disabled / aria-invalid;44px 最小高度。

输入格式不正确

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Label

通过 htmlFor 关联对应输入框。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Popover

次级轻量内容,不替代复杂任务对话框。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Radio Group

单选互斥;不要替代多选 checkbox。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Scroll Area

独立滚动区必须保留键盘可达与明确标签。

内容项 1

内容项 2

内容项 3

内容项 4

内容项 5

内容项 6

内容项 7

内容项 8

内容项 9

内容项 10

内容项 11

内容项 12

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Select

选择器覆盖默认、禁用、错误;选项区域至少 44px。

请选择邮件范围(固定错误态示例)。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Separator

视觉分割默认 decorative;不通过分隔线表达唯一信息。

上方内容

下方内容

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Sheet

移动次级区域;含标题与说明,Escape 关闭。asChild 必须传入单个可接收 ref 与属性的元素;支持默认或自定义关闭入口。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Skeleton

加载时替代真实结构,外层提供状态说明。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Sonner

短反馈,不替代字段错误;固定 light 主题。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Switch

即时二元设置;可点击标签提供足够触控区域。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Table

数据使用语义表格;行交互需明确按钮。

页面状态
收件箱已完成

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Tabs

方向键切换 tab;面板内容保持语义关联。

全部内容

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Textarea

多行输入;保留标签、错误说明和禁用态。

内容不符合要求(固定错误态示例)。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

Tooltip

辅助提示不能成为唯一标签;支持悬停与键盘焦点。

焦点:Tab 检查可见轮廓;禁用:不可操作;错误仅用于输入/反馈;加载使用 Skeleton 或无障碍状态。非交互组件不设置伪焦点或禁用属性。

业务页面提取的组合

ChatRoom

IM 域共享聊天视图:由宿主传入群聊或单聊 room 及发送适配器 send;消息、缓存和发送归属由各自 repository/Query 管理。下方进入实际原型示例,模拟消息仅保留在各自会话内,刷新恢复。

MobileKeyboard

共享模拟键盘:聚焦下方任意输入框后体验;单行完成只收起,多行支持换行。数据与表单验证由宿主通过值适配器管理,不模拟发送邮件。

SearchInput

共享搜索框:统一图标、内边距与无障碍标签。调用方负责搜索状态和过滤;支持 Input 属性与 className。

MailResponseActions

邮件域的回复/转发按钮组,统一图标、翻译和禁用状态。stretch 让移动端按钮等宽,外层负责布局与安全区。

MobileCollaborationNav

移动协同底栏,消息和应用可导航,其他入口禁用。unread 仅传入演示计数。

MobileMailboxDrawer

组合批准的 Sheet、Button、Avatar 与 Badge。左侧账号切换,右侧五个文件夹;选择文件夹关闭抽屉。示例仅切换自身状态,不改变原型 URL。新增账号、汇总邮箱、设置禁用。

个人邮箱 · 收件箱

AsyncState · 异步页面状态

位于 src/components/system/async-state.tsx,统一展示加载、空、错误和无结果。 仅错误态且传入 onRetry 时显示重试按钮;示例重试仅展示反馈。

暂无内容

没有匹配结果

共享组合组件

共享组合位于 src/components/system/,使用已批准的原始组件及语义令牌,不依赖业务功能域。以下为现有组合的使用边界,不增加原始组件。

RootRedirect 仅用于根路径跳转,不用于业务页面。联系人名片、邀请卡、日程弹卡等仍属于各自功能域,不放入共享组件层。

维护规则

业务页面提取的组合记录在 src/registry/compositions.json,与原始组件清单分开维护,并在本目录提供对应锚点示例。当前登记如下:

提取组件只收敛已重复的结构。邮件领域文案和行为留在邮件域,共享层不得依赖业务域;不为提取操作新增原始组件或改写锁定源码。

MobileCollaborationNav

移动协同五列底栏,active 为 messages 或 apps;消息和应用可导航,其余禁用。unread 为可选演示计数,不修改已读状态。不读取数据,不依赖邮件域。通过 im/index.ts 公开引用,上方提供两种选中状态示例。