Open Claude UI
Open Claude UI 组件演示

会话与输入

Open Claude UI 组件演示:消息气泡、思考折叠、输入框、模型切换、MCP 工具卡片(手册 v1 第三篇)。每个演示附规格和源码出处。

View as Markdown最后更新:

会话与输入是 Claude 对话界面的核心:消息气泡、思考过程折叠、输入框、斜杠指令与 @ 引用、模型切换,以及 MCP 工具调用的授权卡片。本页 6 个演示对应手册 v1 第三篇,输入框圆角按 2.0 的 14px 取值。

关键数值

项目数值出处
输入框圆角2.0 舒适 14px · 紧凑 12px(1.x 为 20px)v2/03 §3.3
思考展开方式CSS Grid 0fr → 1frv1/03 §3.2
输入法合成守卫compositionend 后 500ms 内忽略 Enterv1/03 §3.3.2
MCP 授权按钮允许一次 / 始终允许 / 拒绝v1/03 §3.5

消息气泡

用户消息用气泡,助手回复不加底色,直接铺在画布上。

js
config.js
2 KB
帮我把这段配置改成 TypeScript,并解释一下每个字段。
10:24
Claudemodel-name•10:24
> 读取 config.js
> 推断字段类型
> 生成 TS 版本
下面是改好的版本。每个字段都加了类型,可选字段用了 `?`。
ts
export interface Config {
  port: number;
  host?: string;
}
</>
config.ts
v1 • TypeScript 配置
用户气泡圆角 = --cds-radius + .25rem,最大宽 85%,长文可折叠;回答正文 4px 内缩,message-fade-up 450ms overshoot 入场。头像为中性占位(lucide Bot),不使用官方图标。出处:v1/03 §3.1 · code-examples/ChatMessageBubbles.tsx

思考折叠面板

模型思考时显示计时和三点波浪,结束后折叠,可以点开看全文。

Thinking…
先看清需求:要一个文档官网。 确认仓库组件的写法,再决定直接引入还是移植 CSS。 组件是 React + Tailwind,可以直接引入。
思考中显示 3 点静默波浪与计时;结束后可展开,展开用 CSS Grid 0fr→1fr,不抖动。出处:v1/03 §3.2 · code-examples/ThinkingAccordion.tsx

输入框

输入框是界面里圆角最大的元素,2.0 从 20px 收到 14px。

圆角 14px(2.0 舒适密度,v2/03 §3.3;v1 为 20px)、三态双环投影(默认 / hover / focus-within);field-sizing 自适应高度 48–384px;Enter 发送、Shift+Enter 换行,输入法合成中不发送。出处:v1/03 §3.3 · v2/03 §3.3 · code-examples/ChatComposer.tsx

指令与引用输入

输入 / 唤出指令,输入 @ 引用文件;中文输入法选词时按 Enter 不会误发送。

输入 / 唤出指令列表,输入 @ 引用文件;方向键选择、Enter 确认。compositionend 后 500ms 内的 Enter 被忽略(WebKit 合成守卫)。出处:v1/03 §3.3.2 · code-examples/RichComposerWithMentions.tsx

模型切换与 Token 仪表盘

模型下拉旁边有一个环形仪表盘,按上下文用量显示进度,并区分缓存读取和写入。

模型梯队下拉 + 环形 SVG 上下文仪表盘(strokeDashoffset 按用量计算),区分缓存读取 / 写入。拖动滑杆模拟用量。出处:v1/03 §3.4 · code-examples/ModelSwitcherWithTokenGauge.tsx

MCP 工具决策卡片

代理通过 MCP 调用工具前会弹出授权卡片,状态从等待批准走到运行中,再到成功、拒绝或失败。

read_filemcp://filesystem
等待授权 (Pending)
2 fields
{
  "path": "~/projects/app/README.md",
  "encoding": "utf-8"
}
三态授权:等待批准(陶土描边)→ 运行中 → 成功 / 拒绝 / 失败;三个决议按钮:允许一次 / 始终允许 / 拒绝。出处:v1/03 §3.5 · code-examples/McpToolDecisionCard.tsx

怎么在项目里使用?

复制 code-examples/ 里对应的文件,并引入 cds-theme.css。例如:

import { ChatComposer } from './ChatComposer';

<ChatComposer onSendMessage={(text) => console.log(text)} />

相关页面

On this page