525 lines
16 KiB
Markdown
525 lines
16 KiB
Markdown
# OpenCreator 视觉与组件规范
|
||||
|
|
|
|||
|
|
本文档整理当前 Web 客户端已经形成的视觉语言和组件规则,后续新增功能或页面时优先延续这些规范。对应实现主要位于:
|
|||
|
|
|
|||
|
|
- `apps/web/src/styles/tokens.css`
|
|||
|
|
- `apps/web/src/styles/app.css`
|
|||
|
|
- `apps/web/src/features/shell/OpenCreatorSidebar.tsx`
|
|||
|
|
- `apps/web/src/features/runs/Composer.tsx`
|
|||
|
|
- `apps/web/src/features/files/FileTopBar.tsx`
|
|||
|
|
- `apps/web/src/components/timeline/Timeline.tsx`
|
|||
|
|
|
|||
|
|
## 1. 视觉基调
|
|||
|
|
|
|||
|
|
OpenCreator 当前是深色、低噪声、偏工具型的桌面应用界面。整体气质应该克制、轻量、专注,不做营销页式大卡片和强装饰。
|
|||
|
|
|
|||
|
|
核心方向:
|
|||
|
|
|
|||
|
|
- 深色背景为主,避免大面积纯黑以外的单一色块。
|
|||
|
|
- 主题高亮统一使用暖橙色,不再使用紫色作为主高亮。
|
|||
|
|
- 面板、输入框、弹层使用轻微半透明和模糊,形成“玻璃感”,但不要过亮。
|
|||
|
|
- 交互动效保持短、轻,主要用于 hover、active、侧栏收起展开、toast 自动消失等。
|
|||
|
|
- 页面主体不要堆叠卡片。卡片只用于设置项、代码块、重复列表项、弹层和实际需要框定的工具区域。
|
|||
|
|
|
|||
|
|
## 2. Design Tokens
|
|||
|
|
|
|||
|
|
所有新增样式应优先使用 `tokens.css` 中的 CSS 变量。
|
|||
|
|
|
|||
|
|
### 颜色
|
|||
|
|
|
|||
|
|
| 用途 | Token | 当前值 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| 全局背景 | `--bg` | `#0e1116` |
|
|||
|
|
| 对话区背景 | `--conversation-bg` | `#090d12` |
|
|||
|
|
| 侧栏背景 | `--sidebar` | `#080d12` |
|
|||
|
|
| 默认面板 | `--surface` | `#16191e` |
|
|||
|
|
| 次级面板 | `--surface-2` | `#1c2026` |
|
|||
|
|
| 悬浮/活跃面 | `--surface-3` | `#24282e` |
|
|||
|
|
| 弹层 | `--popover` | `#24282e` |
|
|||
|
|
| 主文字 | `--text` | `#fcfdff` |
|
|||
|
|
| 次文字 | `--muted` | `rgba(252, 253, 255, 0.68)` |
|
|||
|
|
| 弱文字/图标 | `--subtle` | `rgba(252, 253, 255, 0.42)` |
|
|||
|
|
| 主题色 | `--accent` | `#AD4D1F` |
|
|||
|
|
| 强主题色 | `--accent-strong` | `#D86532` |
|
|||
|
|
| 主题弱背景 | `--accent-soft` | `rgba(173, 77, 31, 0.18)` |
|
|||
|
|
| 主题辉光 | `--accent-glow` | `rgba(173, 77, 31, 0.34)` |
|
|||
|
|
| 危险 | `--danger` | `#ff766e` |
|
|||
|
|
| 警告 | `--warning` | `#f0a866` |
|
|||
|
|
| 成功 | `--success` | `#72d6a7` |
|
|||
|
|
|
|||
|
|
使用规则:
|
|||
|
|
|
|||
|
|
- 主操作按钮、选中态、当前项目 icon、输入框渐变描边都使用 `--accent` / `--accent-strong`。
|
|||
|
|
- 非主操作按钮不要直接大面积使用主题色,只在 hover 或 selected 时轻微提示。
|
|||
|
|
- 警告、错误、成功状态使用专用 token,不要复用主题色表达状态。
|
|||
|
|
- 新增渐变建议使用 `linear-gradient(180deg, var(--accent-strong), var(--accent))` 或现有发送按钮渐变。
|
|||
|
|
|
|||
|
|
### 字体
|
|||
|
|
|
|||
|
|
| 用途 | Token |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 默认字体 | `--font` |
|
|||
|
|
| 展示标题 | `--font-display` |
|
|||
|
|
| 代码/路径/命令 | `--font-mono` |
|
|||
|
|
|
|||
|
|
使用规则:
|
|||
|
|
|
|||
|
|
- 普通 UI 文本使用 Inter 系列,即 `var(--font)`。
|
|||
|
|
- 初始页大标题、少量展示型标题可以使用 `var(--font-display)`。
|
|||
|
|
- 文件路径、代码块、命令、技术状态使用 `var(--font-mono)`。
|
|||
|
|
- 不使用 viewport 宽度动态缩放字体。
|
|||
|
|
- 字间距保持默认,不使用负字距。
|
|||
|
|
|
|||
|
|
### 圆角与阴影
|
|||
|
|
|
|||
|
|
- 默认圆角:`--radius: 10px`。
|
|||
|
|
- 常规按钮:`7px` 到 `10px`。
|
|||
|
|
- 图标圆按钮:圆形或 `12px`。
|
|||
|
|
- 输入框主容器:桌面 `22px`,移动端 `10px`。
|
|||
|
|
- 选项卡、工具按钮、文件树行:`7px` 到 `9px`。
|
|||
|
|
- 阴影使用深色低透明阴影,避免亮色厚重投影。
|
|||
|
|
|
|||
|
|
## 3. 全局布局
|
|||
|
|
|
|||
|
|
主应用布局:
|
|||
|
|
|
|||
|
|
- 展开侧栏:`248px + main`。
|
|||
|
|
- 右侧详情展开:`248px + main + 320-400px`。
|
|||
|
|
- 收起侧栏:`72px + main`。
|
|||
|
|
- 文件工作区内:对话区和文件区之间使用 `6px` resize handle。
|
|||
|
|
|
|||
|
|
页面结构原则:
|
|||
|
|
|
|||
|
|
- 顶部 header 高度通常在 `56px` 到 `72px`。
|
|||
|
|
- 主内容区必须 `min-width: 0`、`min-height: 0`,滚动交给内部区域。
|
|||
|
|
- 新功能页应使用 `var(--bg)` 或 `var(--conversation-bg)` 作为底色,内容面板使用 `var(--surface)`。
|
|||
|
|
- 宽屏不要把内容拉满,列表或正文区域建议设置合理 `max-width`。
|
|||
|
|
|
|||
|
|
响应式:
|
|||
|
|
|
|||
|
|
- `920px` 以下主布局变为单列,详情面板隐藏。
|
|||
|
|
- `480px` 以下侧栏导航变紧凑,部分文字可隐藏,输入框和工具栏允许换行。
|
|||
|
|
|
|||
|
|
## 4. 背景规范
|
|||
|
|
|
|||
|
|
### 对话默认态背景
|
|||
|
|
|
|||
|
|
动态背景只在“初始状态,无选中会话且暂无 timeline 内容”时展示。
|
|||
|
|
|
|||
|
|
当前参数:
|
|||
|
|
|
|||
|
|
- 颜色:`#AD4D1F`、`#D86532`、`#F0A866`
|
|||
|
|
- `speed: 0.28`
|
|||
|
|
- `streakCount: 3`
|
|||
|
|
- `density: 0.12`
|
|||
|
|
- `glow: 0.48`
|
|||
|
|
- `backgroundGlow: 0.34`
|
|||
|
|
- `opacity: 0.72`
|
|||
|
|
- 禁用鼠标交互:`mouseInteraction={false}`
|
|||
|
|
|
|||
|
|
使用规则:
|
|||
|
|
|
|||
|
|
- 开始对话后或加载已有会话时,背景切换为纯色 `var(--conversation-bg)`。
|
|||
|
|
- 设置页中的“动态背景”开关关闭后,默认态也使用纯色背景。
|
|||
|
|
- resize 时背景底色必须保持 `var(--conversation-bg)`,避免纯色和动态背景之间闪白或变色。
|
|||
|
|
- 动态背景只作为氛围,不能抢占文字层级。
|
|||
|
|
|
|||
|
|
### 对话底部渐变
|
|||
|
|
|
|||
|
|
输入框上方使用柔和遮罩:
|
|||
|
|
|
|||
|
|
- `.composer-wrap` 承接底部背景。
|
|||
|
|
- `.composer-wrap::before` 向上延伸渐变,避免消息列表和输入框硬切。
|
|||
|
|
|
|||
|
|
新增对话页底部内容时,要保留这层渐变过渡。
|
|||
|
|
|
|||
|
|
## 5. 滚动条
|
|||
|
|
|
|||
|
|
全局滚动条:
|
|||
|
|
|
|||
|
|
- 宽度和高度:`6px`。
|
|||
|
|
- track 透明,不展示背景轨道。
|
|||
|
|
- thumb:`rgba(145, 153, 168, 0.28)`。
|
|||
|
|
- hover:`rgba(161, 170, 186, 0.38)`。
|
|||
|
|
- Firefox 使用 `scrollbar-color: rgba(145, 153, 168, 0.3) transparent`。
|
|||
|
|
|
|||
|
|
使用规则:
|
|||
|
|
|
|||
|
|
- 不要给局部滚动区域额外添加可见 track。
|
|||
|
|
- 侧栏项目列表滚动条尽量靠右,保持 `.sidebar-project-tree` 当前负 margin 和右侧 padding 的思路。
|
|||
|
|
- 新增滚动容器应保持 `overflow: auto`,避免整个页面滚动导致布局跳动。
|
|||
|
|
|
|||
|
|
## 6. 左侧导航
|
|||
|
|
|
|||
|
|
### 品牌区
|
|||
|
|
|
|||
|
|
展开态:
|
|||
|
|
|
|||
|
|
- 使用 `OpenCreator` 文字品牌,不加载图片标识。
|
|||
|
|
- 品牌文字宽度约 `124px`,高度约 `24px`。
|
|||
|
|
- 右侧展示收起按钮。
|
|||
|
|
|
|||
|
|
收起态:
|
|||
|
|
|
|||
|
|
- 宽度 `72px`。
|
|||
|
|
- 展示通用菜单图标。
|
|||
|
|
- hover 或 focus 时切换为展开 icon。
|
|||
|
|
|
|||
|
|
### 顶部主导航
|
|||
|
|
|
|||
|
|
当前入口:
|
|||
|
|
|
|||
|
|
- 新对话
|
|||
|
|
- 搜索
|
|||
|
|
- 已安排
|
|||
|
|
- 插件
|
|||
|
|
|
|||
|
|
样式规则:
|
|||
|
|
|
|||
|
|
- 行高固定:`40px`。
|
|||
|
|
- icon 列宽:`22px`。
|
|||
|
|
- icon 与文本间距:`4px`。
|
|||
|
|
- 默认文字权重较高,项目标题除外。
|
|||
|
|
- hover 背景:`rgba(252, 253, 255, 0.07)`。
|
|||
|
|
- 当前页可用主题弱背景和轻描边。
|
|||
|
|
|
|||
|
|
### 项目与会话
|
|||
|
|
|
|||
|
|
项目行:
|
|||
|
|
|
|||
|
|
- 项目标题不加粗,使用 `font-weight: 520`。
|
|||
|
|
- 当前项目只改变 folder icon 颜色为 `var(--accent)`,项目整行不高亮。
|
|||
|
|
- 展开项目使用 `FolderOpen`,收起项目使用 `Folder`。
|
|||
|
|
|
|||
|
|
会话行:
|
|||
|
|
|
|||
|
|
- 与项目文本左侧对齐。
|
|||
|
|
- 高度固定,避免刷新前后间距跳动。
|
|||
|
|
- 只有选中的会话高亮,项目和会话不能同时整行高亮。
|
|||
|
|
- 选中会话使用 `rgba(173, 77, 31, 0.14)` 背景,不要添加高亮描边。
|
|||
|
|
|
|||
|
|
底部设置:
|
|||
|
|
|
|||
|
|
- 与 logo 左侧视觉对齐。
|
|||
|
|
- icon 与文本间距保持紧凑。
|
|||
|
|
- “更新”入口当前已移除,后续没有真实功能不要提前放置入口。
|
|||
|
|
|
|||
|
|
## 7. 对话 Header
|
|||
|
|
|
|||
|
|
高度和布局:
|
|||
|
|
|
|||
|
|
- 最小高度 `64px`。
|
|||
|
|
- 左侧标题和项目名,右侧文件按钮与详情按钮。
|
|||
|
|
- 背景为深色透明渐变,并带 `backdrop-filter: blur(18px)`。
|
|||
|
|
- 底部分割线使用低透明白色,不要过亮。
|
|||
|
|
|
|||
|
|
标题:
|
|||
|
|
|
|||
|
|
- 对话标题 `17px`,`font-weight: 680`。
|
|||
|
|
- 项目名 `12px`,使用 `--muted`。
|
|||
|
|
- 状态 pill 使用小号圆角胶囊,包含成功状态圆点。
|
|||
|
|
|
|||
|
|
工具按钮:
|
|||
|
|
|
|||
|
|
- 图标优先使用 `lucide-react`。
|
|||
|
|
- icon-only 按钮尺寸 `32px`。
|
|||
|
|
- 文本按钮高度 `32px`,左右 padding `11px`。
|
|||
|
|
|
|||
|
|
## 8. 对话消息列表
|
|||
|
|
|
|||
|
|
消息区域:
|
|||
|
|
|
|||
|
|
- 背景使用 `var(--conversation-bg)`。
|
|||
|
|
- 有动态背景时 body 透明,无动态背景时 body 使用纯色。
|
|||
|
|
- 历史加载时使用半透明深色 overlay,不清空原有内容,避免闪白。
|
|||
|
|
|
|||
|
|
消息栈:
|
|||
|
|
|
|||
|
|
- 最大宽度约 `960px`。
|
|||
|
|
- 消息间距约 `28px`。
|
|||
|
|
- 气泡最大宽度约 `820px`。
|
|||
|
|
|
|||
|
|
用户消息:
|
|||
|
|
|
|||
|
|
- 右对齐。
|
|||
|
|
- 不展示头像和昵称。
|
|||
|
|
- 气泡右上角保持直角:`border-top-right-radius: 0`。
|
|||
|
|
- 背景为 `surface-3` 混合少量主题色。
|
|||
|
|
|
|||
|
|
Agent 消息:
|
|||
|
|
|
|||
|
|
- 不展示头像和昵称,回复正文直接进入消息区。
|
|||
|
|
- 气泡左上角保持直角:`border-top-left-radius: 0`。
|
|||
|
|
- 默认背景:`rgba(36, 40, 46, 0.88)`。
|
|||
|
|
- 可使用轻微玻璃模糊和深色阴影。
|
|||
|
|
|
|||
|
|
过程消息:
|
|||
|
|
|
|||
|
|
- reasoning、tool、diagnostic 等内容使用更小字号和更弱颜色。
|
|||
|
|
- 过程 details 保持扁平,不要做重卡片。
|
|||
|
|
- 命令和 payload 使用 monospace。
|
|||
|
|
|
|||
|
|
## 9. 输入框 Composer
|
|||
|
|
|
|||
|
|
主输入框是当前产品最重要的交互组件,新增页面如果需要任务输入,应复用该形态。
|
|||
|
|
|
|||
|
|
容器:
|
|||
|
|
|
|||
|
|
- 类名:`.opencreator-composer`。
|
|||
|
|
- 最大宽度:`980px`。
|
|||
|
|
- 背景为深色半透明渐变。
|
|||
|
|
- 边框使用渐变色:白色亮边到暖橙色,再回到低透明白色。
|
|||
|
|
- `backdrop-filter: blur(22px)`。
|
|||
|
|
- 桌面圆角 `22px`,移动端 `10px`。
|
|||
|
|
- 不使用 focus 后的高亮边框。
|
|||
|
|
|
|||
|
|
textarea:
|
|||
|
|
|
|||
|
|
- 默认一行,高度约 `28px`。
|
|||
|
|
- 自动根据内容增高。
|
|||
|
|
- 最高为 3 行,超过后内部滚动。
|
|||
|
|
- 手动 resize 关闭:`resize: none`。
|
|||
|
|
- 输入时保证当前行可见。
|
|||
|
|
- placeholder 使用 `--subtle`。
|
|||
|
|
- focus 和 focus-visible 不显示 outline 或额外 box-shadow。
|
|||
|
|
|
|||
|
|
工具栏:
|
|||
|
|
|
|||
|
|
- 左侧:添加上下文、权限选择。
|
|||
|
|
- 右侧:模型选择、发送按钮。
|
|||
|
|
- “完全访问”和“默认模型”只展示图标和文字,不加圆角矩形背景。
|
|||
|
|
- 附件按钮为圆形 icon button。
|
|||
|
|
|
|||
|
|
发送按钮:
|
|||
|
|
|
|||
|
|
- 尺寸 `38px * 38px`。
|
|||
|
|
- 圆角方形,`border-radius: 12px`。
|
|||
|
|
- 可发送状态使用紫色以外的暖橙渐变:
|
|||
|
|
`linear-gradient(180deg, #DF7440 0%, #AD4D1F 54%, #7C3217 100%)`。
|
|||
|
|
- icon 为白色。
|
|||
|
|
- 输入为空或禁用时按钮置灰。
|
|||
|
|
|
|||
|
|
弹层:
|
|||
|
|
|
|||
|
|
- 背景使用 `var(--popover)` 混合透明。
|
|||
|
|
- 圆角 `14px`。
|
|||
|
|
- `backdrop-filter: blur(20px)`。
|
|||
|
|
- 菜单项高度 `38px`,hover 使用 `var(--surface-3)`。
|
|||
|
|
|
|||
|
|
## 10. 文件工作区
|
|||
|
|
|
|||
|
|
### 顶部栏
|
|||
|
|
|
|||
|
|
高度:
|
|||
|
|
|
|||
|
|
- 文件顶部栏最小高度 `72px`。
|
|||
|
|
- 左侧标题与路径上下排列。
|
|||
|
|
- 右侧为模式切换、保存、打开目录、目录树切换、关闭。
|
|||
|
|
|
|||
|
|
路径区:
|
|||
|
|
|
|||
|
|
- 使用小字号 `12px` 和 `--muted`。
|
|||
|
|
- 路径分隔符使用 `--subtle`。
|
|||
|
|
- 复制路径按钮跟在路径后面。
|
|||
|
|
- 复制按钮只展示 icon,不要矩形外轮廓。
|
|||
|
|
- icon 尺寸约 `14px`,按钮尺寸约 `18px`。
|
|||
|
|
|
|||
|
|
Toast:
|
|||
|
|
|
|||
|
|
- 复制路径后的提示展示在复制按钮右侧。
|
|||
|
|
- 使用 inline pill,不占用预览区顶部空间。
|
|||
|
|
- 自动隐藏时间:`2200ms`。
|
|||
|
|
- 背景:`rgba(22, 25, 30, 0.92)`。
|
|||
|
|
- 圆角胶囊,轻阴影,`backdrop-filter: blur(16px)`。
|
|||
|
|
|
|||
|
|
### 编辑/预览模式
|
|||
|
|
|
|||
|
|
模式切换:
|
|||
|
|
|
|||
|
|
- 使用 segmented control。
|
|||
|
|
- 外层背景 `var(--surface-2)`。
|
|||
|
|
- 当前状态高亮为暖橙渐变,并使用白色文字。
|
|||
|
|
- 未选中项使用 `--muted`。
|
|||
|
|
|
|||
|
|
保存按钮:
|
|||
|
|
|
|||
|
|
- 有可保存内容时使用主操作渐变。
|
|||
|
|
- 无法保存时置灰。
|
|||
|
|
- 不要只靠文字提示状态,禁用态应明显。
|
|||
|
|
|
|||
|
|
### 文件树
|
|||
|
|
|
|||
|
|
目录树:
|
|||
|
|
|
|||
|
|
- 行高 `32px` 左右。
|
|||
|
|
- hover 使用 `var(--surface-3)`。
|
|||
|
|
- 当前文件使用 `--accent-soft` 背景和左侧 `2px` accent 指示。
|
|||
|
|
- 文件名必须省略号截断。
|
|||
|
|
|
|||
|
|
编辑器:
|
|||
|
|
|
|||
|
|
- CodeMirror 背景使用 `var(--surface)`。
|
|||
|
|
- gutter 使用 `var(--surface-2)`。
|
|||
|
|
- 选择色使用 `color-mix(in srgb, var(--accent) 42%, transparent)`。
|
|||
|
|
|
|||
|
|
## 11. 设置页
|
|||
|
|
|
|||
|
|
布局:
|
|||
|
|
|
|||
|
|
- 左侧设置导航 `240px`。
|
|||
|
|
- 右侧内容 padding:桌面 `48px clamp(24px, 6vw, 72px)`。
|
|||
|
|
- 移动端单列布局。
|
|||
|
|
|
|||
|
|
设置卡片:
|
|||
|
|
|
|||
|
|
- 使用 `var(--surface)`。
|
|||
|
|
- 边框使用 `var(--border)`。
|
|||
|
|
- 圆角 `12px`。
|
|||
|
|
- 行高度不低于 `48px`。
|
|||
|
|
|
|||
|
|
开关:
|
|||
|
|
|
|||
|
|
- 宽 `42px`,高 `24px`。
|
|||
|
|
- 关闭态为低透明白色背景。
|
|||
|
|
- 开启态使用 `rgba(173, 77, 31, 0.86)`。
|
|||
|
|
- 圆点位移 `18px`。
|
|||
|
|
|
|||
|
|
设置导航当前态:
|
|||
|
|
|
|||
|
|
- 背景 `var(--accent-soft)`。
|
|||
|
|
- 左侧 `2px` accent 指示。
|
|||
|
|
|
|||
|
|
## 12. Markdown 与代码块
|
|||
|
|
|
|||
|
|
正文:
|
|||
|
|
|
|||
|
|
- 默认 `14px / 1.68`。
|
|||
|
|
- assistant/document 变体可使用 `14.5px / 1.72`。
|
|||
|
|
- process/tool/diagnostic 使用 `12.5px / 1.58` 和 `--muted`。
|
|||
|
|
|
|||
|
|
代码块:
|
|||
|
|
|
|||
|
|
- 外层使用 `var(--surface-2)`,边框 `var(--border)`。
|
|||
|
|
- 圆角使用 `var(--radius)`。
|
|||
|
|
- 代码字体使用 `var(--font-mono)`。
|
|||
|
|
- header 高度约 `34px`。
|
|||
|
|
- 复制等 action 按钮采用轻量 icon/text,不做重背景。
|
|||
|
|
|
|||
|
|
链接:
|
|||
|
|
|
|||
|
|
- 颜色 `var(--accent)`。
|
|||
|
|
- 使用低透明底边线,不使用默认蓝色。
|
|||
|
|
|
|||
|
|
表格:
|
|||
|
|
|
|||
|
|
- 外层可横向滚动。
|
|||
|
|
- 表头背景 `var(--surface-2)`。
|
|||
|
|
- 单元格边框使用 `var(--border)`。
|
|||
|
|
|
|||
|
|
## 13. 按钮规范
|
|||
|
|
|
|||
|
|
主按钮:
|
|||
|
|
|
|||
|
|
- 用于发送、保存、关键确认。
|
|||
|
|
- 背景:暖橙垂直渐变。
|
|||
|
|
- 文字和 icon 使用白色。
|
|||
|
|
- hover 稍微提亮,不改变色相。
|
|||
|
|
- disabled 使用灰色渐变或 `var(--surface-3)`,文字使用 `--subtle`。
|
|||
|
|
|
|||
|
|
次级按钮:
|
|||
|
|
|
|||
|
|
- 背景为深色半透明或 `var(--surface-2)`。
|
|||
|
|
- 边框使用 `var(--border)`。
|
|||
|
|
- hover 时可加入很淡的 accent ring:`rgba(173, 77, 31, 0.08)`。
|
|||
|
|
|
|||
|
|
图标按钮:
|
|||
|
|
|
|||
|
|
- 优先使用 `lucide-react`。
|
|||
|
|
- 常规尺寸 `32px` 到 `38px`。
|
|||
|
|
- 不熟悉的 icon 必须有 `aria-label` 和 `title`。
|
|||
|
|
- 能用 icon 表达的工具命令优先用 icon,不强行放文字。
|
|||
|
|
|
|||
|
|
## 14. 表单与输入
|
|||
|
|
|
|||
|
|
输入框:
|
|||
|
|
|
|||
|
|
- 默认深色背景。
|
|||
|
|
- focus 后不要出现明显高亮边框。
|
|||
|
|
- 需要强调时用容器级渐变边框,而不是 input 自身的焦点边框。
|
|||
|
|
- placeholder 使用 `--subtle`。
|
|||
|
|
|
|||
|
|
搜索框:
|
|||
|
|
|
|||
|
|
- 高度 `32px` 到 `34px`。
|
|||
|
|
- 背景 `var(--surface-2)`。
|
|||
|
|
- 边框 `var(--border)`。
|
|||
|
|
- 左侧搜索 icon 时 padding 预留 `34px`。
|
|||
|
|
|
|||
|
|
下拉菜单:
|
|||
|
|
|
|||
|
|
- 使用 popover 样式。
|
|||
|
|
- 当前项可用 check icon,不需要整行强高亮。
|
|||
|
|
|
|||
|
|
## 15. 状态反馈
|
|||
|
|
|
|||
|
|
Toast:
|
|||
|
|
|
|||
|
|
- 用于轻量成功、复制、短反馈。
|
|||
|
|
- 就近出现,优先贴近触发按钮。
|
|||
|
|
- 自动隐藏。
|
|||
|
|
- 不占用主内容布局高度。
|
|||
|
|
|
|||
|
|
Notice / Error bar:
|
|||
|
|
|
|||
|
|
- 只用于需要用户处理或持续可见的状态,例如冲突、错误。
|
|||
|
|
- 可以占用顶部空间。
|
|||
|
|
- 错误使用 `--danger-soft` 与 `--danger`。
|
|||
|
|
- 冲突或保存状态使用 `--warning-soft` 与 `--warning`。
|
|||
|
|
|
|||
|
|
Loading:
|
|||
|
|
|
|||
|
|
- 切换会话或加载历史时,不清空右侧内容后再渲染。
|
|||
|
|
- 使用 overlay 或原内容保持策略,避免闪白。
|
|||
|
|
- overlay 背景使用 `rgba(9, 13, 18, 0.72)` 和模糊。
|
|||
|
|
|
|||
|
|
## 16. 图标与品牌资产
|
|||
|
|
|
|||
|
|
当前品牌资产:
|
|||
|
|
|
|||
|
|
- `apps/desktop/resources/icon.png`:桌面应用图标,使用深色圆角底板和白色 v2 图标。
|
|||
|
|
- `apps/desktop/resources/tray.png`:macOS 菜单栏模板图,只保留透明背景的 v2 图标。
|
|||
|
|
- Web 不提供旧 OpenCreator logo 或历史兼容路径;Agent 消息不加载品牌图片。
|
|||
|
|
|
|||
|
|
使用规则:
|
|||
|
|
|
|||
|
|
- Web 暂不加载品牌 favicon。
|
|||
|
|
- Agent 消息不展示头像或品牌图片。
|
|||
|
|
- 品牌图不要拉伸,保持 `object-fit: contain`。
|
|||
|
|
- 不再保留 `logo.png`、`logo-cor.png`、`logo-all.png` 等旧 OpenCreator 静态资源或兼容路径。
|
|||
|
|
- 新增 icon 优先从 `lucide-react` 选取。
|
|||
|
|
|
|||
|
|
## 17. 新增页面检查清单
|
|||
|
|
|
|||
|
|
新增功能或页面前,先检查:
|
|||
|
|
|
|||
|
|
- 是否复用了 `tokens.css`,没有写新的主色。
|
|||
|
|
- 是否仍然使用 `#AD4D1F` 作为主题高亮,而不是紫色。
|
|||
|
|
- 是否有可见滚动条 track,如果有则移除。
|
|||
|
|
- 是否有输入框 focus 高亮边框,如果有则改为无 outline 或容器级效果。
|
|||
|
|
- 是否有页面切换闪白,如果有则保持底色或 overlay。
|
|||
|
|
- 是否出现卡片套卡片,如果有则改为 full-width band 或简单分组。
|
|||
|
|
- 是否所有按钮有 disabled、hover、active 状态。
|
|||
|
|
- 是否 icon-only 按钮有 `aria-label`。
|
|||
|
|
- 是否长标题、路径、文件名会省略号截断。
|
|||
|
|
- 是否移动端 `920px`、`480px` 下不重叠、不溢出。
|
|||
|
|
|
|||
|
|
## 18. 命名建议
|
|||
|
|
|
|||
|
|
继续沿用当前语义化 class 命名:
|
|||
|
|
|
|||
|
|
- 页面级:`*-page`、`*-shell`、`*-layout`
|
|||
|
|
- 区域级:`*-header`、`*-body`、`*-content`、`*-sidebar`
|
|||
|
|
- 组件级:`*-button`、`*-row`、`*-card`、`*-popover`、`*-toast`
|
|||
|
|
- 状态:使用 `data-*`、`aria-current`、`aria-pressed`、`aria-checked`,少用额外 JS class
|
|||
|
|
|
|||
|
|
新增组件优先让状态通过可访问属性表达,CSS 再基于这些属性设置视觉。
|