mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-10-02 16:01:56 +00:00
- Rails share the window fill and are separated by a hairline only; the current tab is a neutral selected step plus a semibold title instead of the blue navigation wash (the unused role is removed). - Default Light theme takes ink #0F1419 and accent #1F6BF0; the caret follows the accent. - Sidebar: 28px pill rows with 18px avatars (two-line rows keep card corners), pill search field and workspace switcher, group headings in body ink with the chevron shown only when folded. - Right panel: word tabs (Info / Changes / Files) with an underline bar on a closing hairline. The Changes count is dropped before any label is cut, and the panel floor grows with the measured labels so the chrome tiles are never pushed off the edge. - Headings are no longer uppercased; popovers use a 10px radius. - docs/design-system.md updated to match.
7.7 KiB
7.7 KiB
tty7 界面设计规范
本规范约束应用界面,不重写 shell、TUI、代码语法的颜色。实现入口是
src/ui/presets.rs 的 Neutrals、Interactions、Semantics,以及
src/ui/theme.rs 的组件映射。组件应引用这些角色,不在页面里另配颜色。
信息优先级
- 工作内容:终端、正在编辑的文档、正在查看的 diff。主区域最大,正文对比度最高。
- 当前位置与下一步:当前工作区/标签页、键盘当前选项、可执行的主操作。
- 辅助导航:右侧信息/Git/文件页签、展开收起、新建、更多。中性图标,始终可见。
- 说明与元数据:路径、分支、数量、快捷键、设置描述。次级文字,不用饱和色抢正文。
- 异常:失败、冲突、需要处理的警告。局部状态色,加文字或形状,不单靠颜色。
同屏不能把所有选中项都画成主按钮。当前标签页用中性灰底 + semibold;右侧面板当前页签用 正文色文字 + 底部 2px 横条;真正可执行的主按钮才使用实色强调色。每个任务区只突出一个主操作。
颜色角色
| 角色 | 使用位置 | 规则 |
|---|---|---|
Neutrals.background |
工作内容、设置内容、输入框 | 安静的基础表面。输入框未聚焦时不能像已选中列表行 |
Neutrals.sidebar |
两侧导航 | 与内容同色,连成一整块表面;只用细分隔线划界 |
Neutrals.popover |
菜单、命令面板、对话框 | 浅色下保持明亮,深色下抬高亮度;只给浮层阴影 |
foreground |
正文、标题、当前项 | 正常文字至少 4.5:1;不把普通正文全部加粗 |
muted_foreground |
描述、路径、快捷键 | 与主文字明确区分,但仍保持可读性 |
border / divider |
控件边界 / 区域分隔 | 控件边界较强,区域分隔较弱;不能把页面画成表格线框 |
Interactions.input_border |
输入框与普通按钮轮廓 | 对应组件库的 input 边框角色,不能误用内容背景色导致边界消失 |
Interactions.primary |
保存、连接、有效的提交等主操作 | 强调色实底,成对配置前景色;hover/pressed 保持标签对比度 |
Surfaces.sidebar.selected |
当前标签页 | 中性 selected 阶 + semibold;不用强调色,蓝色留给可按的东西 |
Interactions.choice |
菜单、命令面板的键盘当前行 | 强调色浅底,区别于鼠标经过的中性 hover |
中性 secondary |
面板页签、分段选项、普通按钮 | 次级导航不能与主要操作争夺注意力 |
Semantics.danger |
失败、Git 冲突、破坏性动作 | 红;必须同时有文字/图标/确认语义 |
Semantics.warning |
需要留意的状态 | 琥珀;Git 普通修改只用于尾部标记,不能染黄整个文件树 |
Semantics.success |
成功、Git 新增标记 | 绿;不用于装饰性按钮 |
Semantics.info/link |
信息、可点击链接 | 使用当前主题的强调色,与焦点指示同族 |
默认浅色以纯白为底,正文 #0F1419,蓝色 #1F6BF0 为强调色(光标同强调色)。
默认深色以 #191B20 为内容底,#E2E5EB 为正文,#78A8F5 为强调色。
其他主题保留自己的背景与强调色,但红/绿/琥珀的状态含义不随 ANSI 槽位变化。
所有文字、状态色和主按钮前景色须在实际背景上验证对比度。
状态不能混用
- Rest:中性、稳定。工具按钮不因鼠标移出而消失。
- Hover:轻微中性填充,只用于可交互目标。设置说明行不整体发亮。
- Selected:表达持久的当前位置。侧栏当前行用中性底 + semibold,右侧页签用文字色 + 底部横条。
- Keyboard focus:清晰的强调色焦点环/当前行,不能仅靠 hover 表达。
- Pressed:同一色系的短暂加深,不能跳到另一个主题色。
- Disabled:保留边界与标签;降低对比,不能像可执行的主按钮。
- Error:状态色、说明和恢复入口一起出现。普通 Git 修改不升级为错误/警报。
标签页关闭按钮、渐变遮挡等局部覆盖层必须使用所在行的实际背景,不能复用过期色值。
图标、文字与间距
- 界面 SVG 使用 24×24 坐标系、1.8 线宽、圆端点;工具栏按 16px 显示,命中区 32px。
- 行内辅助按钮至少保留现有 24px 命中区域;增大图标不能挤掉文本预算。
- 工具图标使用中性文字色。品牌用小图形识别,饱和色留给状态点。
- 字号跟随界面缩放;正文 14/16rem,说明 12/16rem,章节标题 16/16rem。
- 左右侧栏的紧凑分组标题统一为 12/16rem、semibold;设置页章节标题仍为 16/16rem。Session 字段名和值同为正文尺寸,以颜色区分层级。
- 辅助文字必须在实际的内容、侧栏、浮层背景上均达到 4.5:1;普通路径、数量和说明不再叠加透明度。静态 PID 使用中性文字。
- 放大界面字号时,Git 行高与设置导航宽度同步调整;窄侧栏优先保留分支名,长文件名须明确省略并可查看完整路径。
- 侧栏当前标签页标题用 semibold(测宽与渲染同一字重),章节/分组标题用 semibold;正文和辅助说明保持 regular。
- 右侧面板和侧栏的紧凑标题不再大写,靠字重与颜色区分层级。
- 以 4px 为间距基础:紧密内容 4–8,行内 8–12,区块 24–32。列表外边距与文字预算同步。
- 形状(2026-09 v5 风格):单行导航行、侧栏搜索框、工作区切换用胶囊
(
rounding::PILL_RADIUS);图标按钮保持圆角方形(rounded_lg/ 小号 4px);会长出第二行(分支行)的标签页行保持CARD_RADIUS,全圆角会把两行文字的两端挤窄。浮层POPOVER_RADIUS10px。 - 侧栏单行标签页行高 28px,头像 18px 圆形品牌底;搜索框与工作区切换同为 28px。
各界面约束
- 侧栏:名称优先于分支和 diff 数量;当前项清晰,品牌头像不形成彩色墙。分组标题用正文色 semibold,分支与 diff 数量右对齐作次级信息;展开的分组不画 chevron,折叠后才显示。
- 侧栏顶部:导航与内容用留白衔接,不加贯穿的 header 底部分隔线;左右侧栏保持连续表面。
- 右侧面板页签:文字页签(信息 / 更改 / 文件),当前页签正文色 + 底部 2px 横条落在 页签栏底部的细分隔线上;「更改」后附改动数。
- 右侧文字层级:文件树名称使用侧栏标题色,不能整体降为辅助灰;当前项使用 selected 文字色与 medium 字重,根目录以字重区分。Git 普通文件名使用 resting 文字色与界面字体,路径、数量与说明保持次级;信息页的路径前缀弱化,末级名称突出。
- 文件树:文件名中性;A/M/? 等尾部字符承载 Git 状态;目录用小点表示子项变化;冲突才整行提升。
- Git 面板:改动列表是主体。可执行的提交按钮才突出;未填写信息或不可提交时保持次级。
- 设置:章节标题 > 标签 > 描述;开关/滑块/主操作共享强调色;分隔线弱于控件边界。
- 菜单与命令面板:亮度抬升、有限阴影;当前键盘行清楚,普通项不着色;小窗口内可滚动。
- 终端:ANSI 是用户内容,不拿来充当 UI 错误/成功配色;应用设计调整不得反转状态含义。
验证要求
cargo test -p tty7 --bin tty7-app --locked ui:: 覆盖内置主题的文字、语义色、
交互状态对比度及已有 UI 行为。另需在真实窗口检查浅色/深色、宽/窄窗口、侧栏、文件、
Git、设置、菜单与命令面板。测试通过不能替代视觉层级检查。