From 3bc6f718eb4f8426c6749166a30449d304a3def4 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Thu, 28 May 2026 03:53:49 +0800 Subject: [PATCH] feat(ui): refine sidebar workspace and code blocks --- agentskills/ui-aesthetic-design/SKILL.md | 150 + docs/code_block_demo.html | 200 + docs/sidebar_overlay_demo.html | 581 ++ docs/sidebar_workspace_demo.html | 556 ++ static/src/components/panels/LeftPanel.vue | 9 +- .../sidebar/ConversationSidebar.vue | 379 +- .../styles/components/chat/_chat-area.scss | 1646 ++--- .../styles/components/overlays/_overlays.scss | 5468 ++++++++--------- .../styles/components/panels/_left-panel.scss | 1101 ++-- .../components/sidebar/_conversation.scss | 1117 ++-- static/src/styles/utilities/_responsive.scss | 56 +- static/src/utils/icons.ts | 1 + 12 files changed, 6280 insertions(+), 4984 deletions(-) create mode 100644 agentskills/ui-aesthetic-design/SKILL.md create mode 100644 docs/code_block_demo.html create mode 100644 docs/sidebar_overlay_demo.html create mode 100644 docs/sidebar_workspace_demo.html diff --git a/agentskills/ui-aesthetic-design/SKILL.md b/agentskills/ui-aesthetic-design/SKILL.md new file mode 100644 index 0000000..c4ac63c --- /dev/null +++ b/agentskills/ui-aesthetic-design/SKILL.md @@ -0,0 +1,150 @@ +--- +name: ui-aesthetic-design +description: 用于进行高质量 UI 美学设计、界面精致化、组件视觉评审与前端 demo 设计的通用设计规范。当任务涉及现代系统界面、侧边栏、资源面板、消息流、代码展示、按钮、hover/active 状态、二级菜单、展示项/可选项区分、内容对齐、图标视觉体积对齐、浅色/深色主题等 UI 美学问题时使用。 +--- + +# UI Aesthetic Design + +当设计、评审或实现 UI 改动时使用此 skill。目标不是做通用 SaaS 模板,而是形成克制、现代、精致、像成熟 AI 系统产品的界面。 + +## 核心审美方向 + +整体风格参考 ChatGPT / Claude / Linear 一类现代 AI 系统的克制感: + +- 使用干净的浅色/深色表面、细边框、轻量阴影和安静的 hover 状态。 +- 避免过度发光、重阴影、毛玻璃、强模糊、圆角矩形套圆角矩形、霓虹渐变和无意义装饰。 +- 优先使用细线图标、浅灰 hover 底色、短而稳定的动效。 +- 布局要紧凑但不拥挤,信息密度可以高,但不能乱。 +- 精致感来自准确的间距、对齐、命中区域、状态反馈和微交互,而不是视觉噪音。 + +## 颜色与字体层级 + +使用少量语义化颜色: + +- 背景/表面:浅色模式使用白色或近白;深色模式使用近黑或炭黑。 +- 主文字:高对比,用于主要内容。 +- 次文字:浅灰,用于路径、状态、元信息、辅助说明。 +- 边框:中性 1px 细边框。 +- Hover:低透明度灰色填充。 +- Active/当前项:略强的低透明度灰色,或明确但克制的选择标记。 +- Danger:只用于删除等破坏性操作。 + +字体层级: + +- 主内容文字应更深、更大或更有字重。 +- 次内容文字应更浅、更小。 +- 不要为了“丰富界面”凭空添加解释性次级文本;只有真实数据结构里存在时才显示。 +- 紧凑面板里的行默认单行显示,长文本截断;不要因为某条内容更长就撑高行高,除非产品信息结构明确需要多行。 + +## 对齐原则 + +追求**内容对齐**,不是容器对齐,也不是机械文字左对齐。 + +- 对齐有意义的视觉内容,而不是外层矩形框。 +- 如果某一行由 SVG + 文字组成,标题或相关内容应根据 SVG 的视觉位置做对齐,而不是盲目对齐文字边缘。 +- 如果下方具体内容本身没有图标,不要为了凑齐文字起点而乱加假图标。 +- 按实际视觉体积对齐:不同 SVG 的 viewBox 和形状不同,真实尺寸可以不同,只要视觉大小一致。 +- 不要强行把所有 SVG 设成同样宽高。 +- 可以统一按钮命中区域,但图标本身大小要按视觉体积校准。 + +## 组件状态原则 + +状态设计必须反映真实语义: + +- Hover:只用于可交互项。 +- Active/当前:只用于当前选择、当前模式或当前项。 +- Disabled:降低对比度,并移除点击暗示。 +- 展示内容:不要看起来像按钮;避免 hover 底色、阴影、指针光标。 +- 可点击内容:可以使用轻量 hover 底色、指针光标和当前项标记。 + +不要把“有没有阴影”当成唯一状态区别。状态语义应该通过结构、标记、间距和交互暗示共同表达。 + +## 可选项 vs 展示项 + +设计前必须先判断内容类型。 + +### 可选项 + +用于用户从多个选项中选择一个,例如环境切换、资源位置切换、账号/空间切换、筛选条件切换。 + +- 必须有明确的“可选择”视觉语义,例如 radio 圆点、check 标记或清晰的选中行。 +- 当前项必须一眼能看出来。 +- 可以有浅灰 hover 底色。 +- 行本身可以是可点击的。 +- `默认`、`当前` 这类 badge 只是元信息,不能单独承担“这是可选项”的职责。 + +### 展示项 + +用于展示状态或列表数据,例如任务条目、命令摘要、进程摘要、通知摘要,除非真实组件会打开详情。 + +- 保持安静,不要做成按钮或卡片。 +- 不要乱加假图标。 +- 不要加卡片阴影或嵌套圆角容器。 +- 如果真实产品里不是可点击项,就不要加 hover 效果。 +- 紧凑面板中使用统一行高和单行截断。 +- 只显示真实数据模型里存在的字段。 + +## 二级菜单与更多操作 + +二级菜单要一致、克制、可读: + +- 使用紧凑浮层,带轻量边框、适中圆角和轻阴影。 +- 菜单选项无论文字长短,hover 背景宽度必须一样长。 +- 菜单宽度由最长内容决定,所有选项填满同一宽度。 +- 不要让每个选项的阴影/hover 背景长度随文字变短变长。 +- 文案要短。 +- 删除等破坏性项只用 danger 色区分,不要用更大尺寸或更重阴影。 +- 列表行右侧 `...` 使用简单圆点视觉;hover 可以只变色,不一定加背景。 + +## 侧边栏展开原则 + +消息类/导航类侧边栏可使用“遮罩露出”模型,而不是新建一个展开浮层: + +- 把侧边栏理解为一张完整面板,被一个移动边界遮住。 +- 收起态只露出固定图标列。 +- 展开时右侧竖线向右移动,内容被裁切后逐渐露出。 +- 每个动作从始至终只有一个图标,不要展开后再出现第二个图标。 +- 图标右侧文字和新出现的列表内容同时执行两种效果:淡入 + 随移动边界逐渐露出。 +- 展开时不应挤压主内容布局;如设计目标是覆盖/露出,就保持主布局稳定。 +- 收起态 hover 只作用在图标的圆角正方形上,不要露出被裁切的大圆角整行背景。 +- 展开态 hover 才可以作用于整行。 + +## 资源面板原则 + +资源面板、管理面板、辅助面板应避免旧式“圆角矩形套圆角矩形套圆角矩形”的低级感。 + +- 优先做窄而扁平的面板;如果它位于主导航旁边,可以让展开后的侧边栏完整覆盖它。 +- 顶部标题显示当前内容类型,例如资源、环境、任务、命令、通知、日志等。不要把所有模式标题硬塞到同一种视觉层级里。 +- 标题下方可放一个“模式切换按钮”,点击展开二级菜单;旁边按需放紧凑管理图标按钮。 +- 不要把浅色小号“管理”文字按钮放在大标题同一行,容易层级违和;优先使用图标按钮。 +- 不要无意义增加搜索框;只有真实工作流需要搜索或过滤时才加。 +- 层级资源树可以使用文件/文件夹/类别图标,因为这类图标本身承载结构语义。 +- 环境/空间/资源位置切换属于可选项 UI,不是普通展示文本。 +- 任务、命令、进程、通知等区域按真实数据字段显示: + - 任务/进程:标识、摘要、状态、可选当前步骤。 + - 命令/作业:命令或作业预览、状态、返回码/结果码。 + - 清单/待办:序号、标题、状态;如果存在总说明,可单独显示。 +- 内容行默认统一高度,除非真实信息结构明确需要展开。 + +## 代码展示原则 + +代码块、日志块或等宽文本展示精致化时: + +- 做成现代 artifact/card 感:1px 细边框、较大圆角、清晰 header/body 分区。 +- 避免粗边框和重嵌套面板。 +- 复制/运行按钮要遵循同一套按钮系统。 +- Header 里的语言名称是次级信息;代码内容才是主内容。 +- padding、等宽字体、行高要统一;流式输出时避免视觉抖动。 + +## 实现前检查清单 + +修改 UI 前必须: + +1. 先读取真实组件、状态或数据结构,不准凭印象设计假数据。 +2. 判断每个内容是可选项、可点击动作,还是展示内容。 +3. 按视觉内容对齐,而不是按容器边缘或文字边缘机械对齐。 +4. 复用产品已有图标资源或统一图标库,不要自己编造 SVG。 +5. 统一图标命中区域,但按视觉体积调整真实图标大小。 +6. 避免嵌套卡片、大阴影和假的 hover 暗示。 +7. 同时检查浅色和深色模式。 +8. 写 demo 时也要贴近真实产品结构和真实字段;如必须使用示例数据,要保持字段语义真实,不要写臆想说明。 diff --git a/docs/code_block_demo.html b/docs/code_block_demo.html new file mode 100644 index 0000000..21c78a4 --- /dev/null +++ b/docs/code_block_demo.html @@ -0,0 +1,200 @@ + + + + + + Code Block Demo + + + +
+
+
+

代码块 Demo

+

顶部更矮;顶部和代码区同色;只用一条细线分割;不添加不存在的功能。

+
+ +
+ +
+

示例代码块:

+ +
+
+ Python + +
+
import random
+from datetime import datetime
+
+quotes = [
+    "Stay curious.",
+    "Code is poetry.",
+    "Small steps every day.",
+    "Debugging is detective work.",
+]
+
+def random_quote():
+    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+    quote = random.choice(quotes)
+    return f"[{now}] {quote}"
+
+if __name__ == "__main__":
+    for i in range(3):
+        print(random_quote())
+
+ +
+
+ powershell + +
+
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
+
+
+
+ + + + diff --git a/docs/sidebar_overlay_demo.html b/docs/sidebar_overlay_demo.html new file mode 100644 index 0000000..88fbbfd --- /dev/null +++ b/docs/sidebar_overlay_demo.html @@ -0,0 +1,581 @@ + + + + + + Sidebar Reveal Demo + + + +
+ + +
+

AI Agent Auto

+
+ + +
+ +
点击第一个按钮折叠/露出;对话行 hover 后显示 ...;点击 ... 打开二级菜单。
+ + + + diff --git a/docs/sidebar_workspace_demo.html b/docs/sidebar_workspace_demo.html new file mode 100644 index 0000000..c4b99c4 --- /dev/null +++ b/docs/sidebar_workspace_demo.html @@ -0,0 +1,556 @@ + + + + + + Sidebar + Workspace Demo + + + +
+ + + + +

AI Agent Auto

+ + + + +
+ +
工作区为扁平窄面板;展开侧边栏会完整盖住工作区。
+ + + + diff --git a/static/src/components/panels/LeftPanel.vue b/static/src/components/panels/LeftPanel.vue index 07d9c23..16a8f95 100644 --- a/static/src/components/panels/LeftPanel.vue +++ b/static/src/components/panels/LeftPanel.vue @@ -226,7 +226,10 @@ > 默认工作区 - + 当前 @@ -237,7 +240,9 @@
暂无工作区,点击右侧 + 新建
-
正在切换,请稍候…
+
+ 正在切换,请稍候… +
{{ fileTreeMessage }}
diff --git a/static/src/components/sidebar/ConversationSidebar.vue b/static/src/components/sidebar/ConversationSidebar.vue index bb52637..f06dda3 100644 --- a/static/src/components/sidebar/ConversationSidebar.vue +++ b/static/src/components/sidebar/ConversationSidebar.vue @@ -1,181 +1,106 @@ @@ -290,7 +227,7 @@