@corbits/react-ui

中文文档
0.5.1发布于 2026/11/02LGPL-2.1-onlyTypeScriptES Module近 30 天下载 4681

反应组件用于代理和工作流程表面.

中文使用文档
文档目录12 节
  1. 为什么?
  2. 安装
  3. 快速启动
  4. 合适的话
  5. 参考文献
  6. 他们
  7. 构成部分
  8. 编码代理
  9. 使用互换
  10. 从0.3升级
  11. 从0.1升级
  12. 许可证

@c轨道/反应-ui

代理产品的回放组件:与推理的对话,工具调用和批准,运行状态,文物和图表,由一个Tailwind v4符号主题来作风格. 轨道的UI软件包:它使数据成为来自Interchange的主机网络应用负载,并在任何React 18或19应用中工作而无需Interchange.

为什么?

  1. 推进,加注出局. 没有组件获取、订阅或持有客户端 。 你的数据层是属于你的,每个组件在故事,测试和制作上都是一样的.
  2. 特工形状的构件. Message 转一转 Tool, (中文(简体) ), Reasoning 财务报告和审定财务报表 Activity 将其部分(文本、推理、工具调用), ToolApproval 在电话之前问一个人 GateBlock 财务报告和审定财务报表 StepList 掩护一个人的跑道.
  3. 付你进口的东西. 一个根条目,包除了它的 CSS 外是无副作用的,还有重同位素(Radix 对话框,下放菜单,工具提示, sonner)是可选的.
  4. 服务器组件准备 . 状态模块船 "use client"因此,一个 React Server 组件应用程序直接导入它们。 在RSC之外,指令是禁止的.

安装

bun add @corbits/react-ui react react-dom lucide-react @radix-ui/react-slot

需要节点 24 或以后。 在React 19上被测试;对等范围也接受React 18.2+.

只有导入它们的模块需要可选同伴。 这些模块不在根项中, 因此通过子路径导入 :

端点子路径
@radix-ui/react-dialogui/dialog, (中文(简体) ), ui/command-palette, (中文(简体) ), ui/sidebar-search, (中文(简体) ), ui/mic-permission-dialog
@radix-ui/react-dropdown-menuui/menu
@radix-ui/react-tooltipui/tooltip
sonnerui/toast

快速启动

在应用程序根导入样式表, 在您的 CSS 之前, 并挂载 ThemeProvider 靠近根 :

import "@corbits/react-ui/styles.css";

import {
  Activity,
  Conversation,
  ConversationContent,
  ConversationItem,
  ConversationScrollButton,
  Message,
  MessageContent,
  MessageHeader,
  ThemeProvider,
  groupActivity,
  type ConversationMessage,
  type ConversationParticipant,
} from "@corbits/react-ui";

const you: ConversationParticipant = { id: "u1", kind: "person", name: "You" };
const scout: ConversationParticipant = {
  id: "a1",
  kind: "agent",
  name: "Scout",
};

const messages: ConversationMessage[] = [
  {
    id: "m1",
    author: you,
    at: "2026-01-01T09:00:00Z",
    status: "sent",
    parts: [{ kind: "text", text: "What changed in the repo today?" }],
  },
  {
    id: "m2",
    author: scout,
    at: "2026-01-01T09:00:04Z",
    status: "sent",
    parts: [
      {
        kind: "reasoning",
        text: "Check the commit log first.",
        durationMs: 1200,
      },
      {
        kind: "tool-trace",
        toolCallId: "t1",
        name: "git__log",
        status: "output-available",
        output: "3 commits",
      },
      { kind: "text", text: "Three commits landed today, all in the docs." },
    ],
  },
];

function Turn({ message }: { message: ConversationMessage }) {
  const own = message.author.id === you.id;
  return (
    <Message
      from={own ? "own" : message.author.kind}
      status={message.status}
      aria-label={own ? "You" : undefined}
    >
      {own ? null : (
        <MessageHeader name={message.author.name} at={message.at} />
      )}
      {groupActivity(message.parts).map((group) => {
        if (group.kind === "activity")
          return <Activity key={group.key} steps={group.steps} />;
        if (group.part.kind === "text")
          return <MessageContent key={group.key} text={group.part.text} />;
        return null;
      })}
    </Message>
  );
}

export function App() {
  return (
    <ThemeProvider>
      <div style={{ display: "flex", flexDirection: "column", height: 480 }}>
        <Conversation>
          <ConversationContent>
            {messages.map((message) => (
              <ConversationItem key={message.id} itemId={message.id}>
                <Turn message={message} />
              </ConversationItem>
            ))}
          </ConversationContent>
          <ConversationScrollButton />
        </Conversation>
      </div>
    </ThemeProvider>
  );
}

这使得用户消息在泡沫中,代理商的思维和工具调用被折叠成一个活动行并打开到两者,代理商的回复. 所有其他部分(工具呼叫等待一个人、图像、来源、文件)都有自己的组件;见 聊天。 。 。 .

styles.css 包括Tailwind预飞和一基层,因此它重新塑造了页面. 如果您已经运行 Tailwind v4, 导入 @corbits/react-ui/theme.css 让你的建筑 产生公用事业。 导入其中之一,绝不是两者兼有;没有两者之一,组件就变得不具有样式.

合适的话

  • 互换 管理AI代理作为主要负责人(拥有自己权限和资格的一等身份). 该枢纽是其多租户控制平面:租户、校长、赠款(授权持有本金)和证书。 侧车是便携式代理运行时间.
  • 轨道 是一个将代理产品转化为产品的套件。 这个包是UI桶:它在主机网络应用中运行并插入主机的数据层,而不是插入中枢或侧车.
  • 它与它所生成的数据的枢纽模块相配,例如: @corbits/artifacts, (中文(简体) ), @corbits/mailbox 财务报告和审定财务报表 @corbits/cron。 。 。 .

参考文献

从根部导入;它会树摇动到您使用的东西. 只有可选的对等模块有自己的子路径:

import { Button } from "@corbits/react-ui";
import { Toaster, toast } from "@corbits/react-ui/ui/toast";

export function SignOut() {
  return (
    <>
      <Button onClick={() => toast("Signed out.")}>Sign out</Button>
      <Toaster position="bottom-right" />
    </>
  );
}

他们

暗模式是一个 .dark 班级的祖先。 没有 .dark 也没有 .light 在根上,符号跟着 prefers-color-scheme 设置 color-scheme 当地控制; dark: 公用事业仍然需要 .dark 祖师相.

ThemeProvider 切换两个类并坚持选择 storageKey。管理类本身的主机添加 .light 自去除后 .dark 回到操作系统。 为避免黑暗OS上存储的光选择,添加 .light 仅当存储的选择是轻而易举时,在第一次油漆之前:

<script>
  if (localStorage.getItem("corbits-theme")?.includes('"light"'))
    document.documentElement.classList.add("light");
</script>

主题名称为"红色帽子"(Red Hat Display)和"空间单曲"(Space Mono),但没有将它们捆绑. 自己装入或堆栈倒回系统字体; 覆盖 --font-sans 财务报告和审定财务报表 --font-mono 以另一个名字装入的脸.

构成部分

所有从 @corbits/react-ui,但标记“可选对等点”的行除外,该行从显示的子路径导入;见 安装。 。 。 .

聊天

构成部分这是什么
Conversation整理或跟踪新消息的对话; useConversation
ConversationContent滚动日志; a ConversationItem 覆盖每个条目
ConversationScrollButton跳回到最近的消息中
ConversationEmptyState还没有消息
ConversationDivider有可选标签的规则,例如一天; ConversationNotice 系统行
ConversationEarlier在阅读器滚动时装入旧信件; useHistoryWindow
ConversationMap每转一圈,一圈一圈; useReadingPosition
ConversationThread以父信件为首的回覆线索
Message一个消息,从 MessageAvatar, (中文(简体) ), MessageHeader, (中文(简体) ), MessageContent, (中文(简体) ), MessageSendStatus 财务报告和审定财务报表 MessageFooter
MessageFold粉碎一个很长的答案 打开它
MessageParts信件的部件作为其组件, 任何类型的可替换; 当决定的调用折叠时保持焦点
MessageActions消息下的行行动 : MessageAction, (中文(简体) ), MessageActionMenu
MessageReactionsEmoji对数的反应
MessageReplies回覆数和打开线程的时间
Activity一系列思维和工具呼叫折叠成一行; groupActivity
Reasoning一个特工的想法,折叠
Tool一个打开输入和输出的工具呼叫
ToolGroup工具调用同时运行
ToolApproval批准、批准或拒绝工具召唤等待某人
GeneratedImages生成时带有占位符的代理图像
Sources答案的编号引用
MediaViewer图片、视频、音频、PDF和全文; useMediaViewer
Attachments文件为堆栈、平板或列表; useAttachments
AttachmentDropZone取掉的文件和文件夹的区域; useFileDrop
PromptInput信息框: PromptInputTextarea, (中文(简体) ), PromptInputSubmit, (中文(简体) ), PromptInputSuggestions· ; usePromptInput
PromptInputToolbar文本下的控件: 添加菜单、 模式和模式选择、 注释
ToolPicker浏览、搜索和选择工具
TypingIndicator代理脚印点
ThinkingIndicator带有状态标签的动画轨道标记
ThinkingMark装饰动画轨道标记
ThinkingLabel旋转动词状态标签
ShimmerText闪光扫描文本
MicButton允许的麦克风切换
VoiceWaveform直播音频关卡栏
DictationStatusLine作曲者拼写状态行
MicPermissionDialog麦克风权限提示( 可选的对等点, ui/mic-permission-dialog(中文(简体) )
Panel侧面板从边缘调整大小; 隐藏面板保持状态
PanelTabs面板的标签行: 选择、 关闭、 拖放或键盘重排 ; useTabs

运行

构成部分这是什么
LiveRunBanner运行中的状况
LiveStatusLine单行"现在发生什么"
GateBlock{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}要是有人决定就停在车站
StepList运行步骤及其状态的垂直列表
HorizontalStepper横向步骤进展
ProgressChecklist长期行动的步骤和进展有多远
TraceWaterfall运行跟踪时间表, 每段一行
IntakeForm运行前输入工作流程要求
RunNowButton立即运行一些东西
ConfirmButton需要第二次点击的按钮
NowCards需要采取行动的项目的注意范围
NotificationsBell有计数和面板槽的铃声

艺术品

构成部分这是什么
ArtifactBody一件艺术品,画的就是它的意思
ArtifactNotice"这里没什么可画"给文物观众的留言
BlockCard基因- UI 块框
ResearchBody研究简报和报告
CompareBody逐一比较
EmbedBody嵌入了沙盒的第三方
CsvTableCSV 文本的封面预览
QuoteCard旋转引用
ProfileCard身份、地位、行动和渠道

图表

构成部分这是什么
ChartFrame说明、传说、图案和与表格相同的数据
TimeSeriesChart随时间演变的数值
BarChart垂直条
CategoryBars水平等级
Sparkline内在趋势线
TokenMosaic整体份额为一叠条
StatGrid标题编号网格
AnimatedNumber算入新值的数字

版式

构成部分这是什么
PageShell页面边距和滚动属性
PagePanel相邻的页面内容框架
TopBar标题、面包屑和动作行
Sidebar可折叠的导航侧边栏
SidebarSearch搜索已标注为 Cmd+K (可选的对等点, ui/sidebar-search(中文(简体) )
SidebarPanel有针头、身体和脚的边栏
SidebarItemRow一个侧行
ListDetail左边索引,右边打开的项目
InspectorShell副巡视员铁路
Section标题内容块
SettingsPanel可选保存的设置框架
LibraryPageHeader库页的标题、数和控制
Card边框内容卡
EmptyState标题、说明、图标和行动
RichEmptyState带有建议下一步行动的空状态
BootScreen应用程序加载前显示的屏幕
DitherCanvas动画抖动背景
CorbitsMark轨道标志
AuthLayout签名页面布局
LoginForm签名和注册表,可选 SSO

控件

构成部分这是什么
Button有变体和大小的按钮
Input文本输入
Textarea多行输入
Select本地选择
Checkbox复选框
SelectionCheckbox行选择复选框
Switch打开/关闭切换
FileInput文件拾取器
Tabs标签条
ViewToggle网格或行分割控制
FilterBar带有活动过滤摘要的过滤行
FilterChip一个可切换的过滤器
KindCardGrid可选择的牌网格
ActionBar组合视图控件, 内置或浮动
BulkActionBar多行选择动作
Table原始表格
SortableTable可排序列的表格
Badge状态标签
StatusDot有色状态点
Avatar缩写或图像化
ProviderMark动作要经过哪些服务
Skeleton正在装入占位符
DialogModal 对话框( 可选对等点 , ui/dialog(中文(简体) )
CommandPalette全局搜索覆盖( 可选的对等者, ui/command-palette(中文(简体) )
Menu下放菜单( 可选的对等点, ui/menu(中文(简体) )
Tooltip, (中文(简体) ), InfoTooltip任何触发器周围的通用工具提示,以及徘徊信息glyph(可选对等点, ui/tooltip(中文(简体) )
Toaster烤面包主机; 调用 toast() 任何地方(可选对等点, ui/toast(中文(简体) )
ThemeProvider持久光线、 黑暗或系统模式和预设
ThemeToggle光、暗或系统开关

编码代理

包裹载有一种代理技能:一个简短的指南、使用规则和每个部件的道具参考。 对准你的经纪人 node_modules/@corbits/react-ui/skills/react-ui (从 SKILL.md),或将该文件夹复制到您的代理技能目录中.

使用互换

主机应用程序拥有与枢纽的连接;组件仅取道具.

  1. 装入运行状态 @intx/hub-client数字 : createRunSession 民意调查 工作流程记录 并披露以下顺序 WorkflowRunEvent 时间表.
  2. 将时间线映射到道具: 代理输出到 ConversationMessage 提供部件 Message 内置 a Conversation一个工具呼叫等待一个人到 PartTool 携带 ToolApprovalRecord 页:1 ToolApproval,步骤事件 StepList ,并运行在一个人停 GateBlock。 。 。 .
  3. 电线回调回枢纽. ToolApproval是因为 onDecide 呼叫您的中枢路线,以决定的结果和范围解决等待的批准;中枢检查呼叫者的赠款,而不是组件. 和解记录又回来了 ToolApproval 显示什么是决定.

从0.3升级

旧聊家取出. 对话家庭代替它:一个信息就是一个 ConversationMessage 谁 parts 为 a ConversationPart[] (歧视 kind),组件由您所编的部件构建,而不是每个屏幕的一个组件.

  • Part, (中文(简体) ), PartText, (中文(简体) ), PartReasoning, (中文(简体) ), PartToolTrace, (中文(简体) ), PartBlock, (中文(简体) ), PartFile, (中文(简体) ), PartEvent 财务报告和审定财务报表 ToolTraceStatus 不变,仍从根导入.

删除了出口和替换出口的内容:

删除改为使用
ChatThread, (中文(简体) ), ChatThreadPropsConversation 与 ConversationContent页:1 ConversationItem 每个消息和 ConversationScrollButton
AgentTurn, (中文(简体) ), AgentTurnPropsMessage 与 from="agent", (中文(简体) ), MessageAvatar, (中文(简体) ), MessageHeader 财务报告和审定财务报表 MessageContent,与 MessageParts 各编
MessageBubble, (中文(简体) ), MessageBubblePropsMessage 与 MessageContent· ; from="own" 画出气泡
PartsRenderer, (中文(简体) ), PartsRendererPropsMessageParts 内置 a Message· ; renderBlock 页:1 block 组件
toolTraceToBlockState无替换 : Tool 读取 ToolTraceStatus 和直接批准记录
ReasoningBlock, (中文(简体) ), ReasoningBlockPropsReasoning (单位:千美元)ReasoningTrigger, (中文(简体) ), ReasoningContent在一个 PartReasoning
ToolBlock, (中文(简体) ), ToolBlockProps, (中文(简体) ), ToolBlockStateTool (单位:千美元)ToolHeader, (中文(简体) ), ToolInput, (中文(简体) ), ToolOutput在一个 PartTool国家是它的 ToolTraceStatus
ToolNarrative, (中文(简体) ), ToolNarrativePropsTool,或 ToolGroup {\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1}因为电话是一起打来的
ApprovalCard, (中文(简体) ), ApprovalCardPropsToolApproval 编号 PartTool 带有 ToolApprovalRecord· ; onApprove, (中文(简体) ), onReject 财务报告和审定财务报表 onAllowAlways 变成 onDecide(ToolApprovalDecision),还有忙碌 state 变成 disabled
ApprovalRequest, (中文(简体) ), ApprovalDetail这个 PartTool 本身: name 财务报告和审定财务报表 input,以主机本身对动作的描述为 ToolApproval孩子们
ApprovalStateToolApprovalRecord是因为 status 成果, ToolApproval是因为 disabled 当决定被记录时
ChatInput, (中文(简体) ), ChatInputPropsPromptInput 与 PromptInputTextarea 财务报告和审定财务报表 PromptInputSubmit· ; PromptInputToolbar 用于文本下的控件
ChatAttachmentAttachmentData 页:1 Attachments, (中文(简体) ), AttachmentItem 从 useAttachments
ChatComposer, (中文(简体) ), ChatComposerPropsPromptInput,与 ConversationEmptyState 空话
QuickReplyChips, (中文(简体) ), QuickReply没有替换 : 建议的回复是主机自己的按钮, 例如内部 ConversationEmptyState
ChatPanel, (中文(简体) ), ChatPanelHeader, (中文(简体) ), ChatPanelFooterPanel, (中文(简体) ), PanelHeader 财务报告和审定财务报表 PanelContent 用于侧面板; 置入 Conversation 财务报告和审定财务报表 PromptInput 在自己的画框中
ChatMessageConversationMessage数字 : role 变成 author (单位:千美元)ConversationParticipant, (中文(简体) ), createdAt 变成 at, (中文(简体) ), status 需要时间
ChatRoleConversationParticipant是因为 kind (单位:千美元)person 或者说 agent);系统行是 PartEvent,显示为 ConversationNotice
MessageStatusConversationMessageStatus,则添加 streaming
MessagePartConversationPart歧视 kind 改为 type
TextPart, (中文(简体) ), ReasoningPart, (中文(简体) ), FilePartPartText, (中文(简体) ), PartReasoning, (中文(简体) ), PartFile
ToolPartPartTool数字 : toolName 变成 name, (中文(简体) ), state 变成 status,以及 label 移动到 ToolHeader是因为 label
ToolPartStateToolTraceStatus数字 : done 变成 output-available
AgentIdentityConversationParticipant 与 kind: "agent"· ; tagline 变成 role,以及 MessageAvatar 带 initials
agentInitialsMessageAvatar的缩写 name
SubagentRun, (中文(简体) ), SubagentState没有替换: 对话模式没有子代理类型; 显示助手的呼叫为 PartTools或 a 类型 PartToolBatch
ChatThreadSummary没有替换: 对话列表是主机自己的数据
messageText, (中文(简体) ), reasoningText, (中文(简体) ), toolParts无替换:过滤器 message.parts 以 kind
isTurnWorkingparts.some((p) => p.kind === "tool-trace" && p.status === "running") (任何仍在运行的工具; message.status === "streaming" 是整个消息)
toolLabel无替换 : ToolHeader 显示原始工具名称,在 label 你通过
ToolProviderMarkProviderMark 由提供者读取工具代号(name.split("__")[0],用于标识形状 provider__operation(中文(简体) )
useDelayedAutofocus无替换: 元素进入完成后从效果中聚焦

从0.1升级

  • 从 npm 安装 。 Git 安装( E)github:corbitsdev/react-ui#<sha>不再建设 dist/。 。 。 .
  • 每个模块子路径已消失: 从 @corbits/react-ui (单位:千美元)import { Button } from "@corbits/react-ui") (中文(简体) ).
  • ui/dialog, (中文(简体) ), ui/command-palette, (中文(简体) ), ui/sidebar-search, (中文(简体) ), ui/mic-permission-dialog, (中文(简体) ), ui/menu, (中文(简体) ), ui/tooltip 财务报告和审定财务报表 ui/toast 只能是子路径,而他们的同伴是可选的: import { Toaster, toast } from "@corbits/react-ui/ui/toast"。为您保存的每个子路径安装对等点.
  • lib/csv, (中文(简体) ), lib/url, (中文(简体) ), lib/utils, (中文(简体) ), lib/workflow-registry 财务报告和审定财务报表 ui/chat-dock-timing (去除于0.4)为内. 替换 cn 与 twMerge(clsx(...))。 。 。 .
  • 国有部件船 "use client"客户端的包装纸你为它们写了,还可以去.
  • 删除了84个未使用的模块, ui/command 被删除, ActivityBlock 重新命名为 ReasoningBlock (删除为0.4;使用) Reasoning,参见 从0.3升级),以及 AuthLayout 不再计算 DitherCanvas 默认.
  • 没有 .dark 也没有 .light 在根上,主题遵循OS. 切换的主机 .dark 必须添加 .light 或挂载 ThemeProvider。 。 。 .

许可证

LGPL-2.1-仅限. 见 自由主义。 。 。 .

版本与发布记录

@corbits/react-ui 共发布 8 个版本,首次发布于 2026/09/25;过去 12 个月发布了 8 个版本。

版本发布日期距今
0.5.1latest2026/11/028 天前
0.5.02026/11/019 天前
0.4.02026/10/2912 天前
0.3.22026/10/2714 天前
0.3.12026/10/091 个月前
0.3.02026/10/011 个月前

关于 @corbits/react-ui 的常见问题

@corbits/react-ui 是什么?

反应组件用于代理和工作流程表面.

如何安装 @corbits/react-ui?

在项目目录运行 npm install @corbits/react-ui,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^18.2.0 || ^19.0.0)、react-dom(^18.2.0 || ^19.0.0)、lucide-react(^0.545.0 || ^1.0.0)、@radix-ui/react-slot(^1.2.3)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@corbits/react-ui 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@corbits/react-ui 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@corbits/react-ui 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@corbits/react-ui 可以商用吗?

@corbits/react-ui 使用 LGPL-2.1-only 许可。弱 Copyleft:作为库被调用时通常不要求开源你自己的代码,但修改库本身需以 LGPL 开源;前端打包合并后的适用边界存在不同理解。以上为概括,不构成法律意见,请以许可原文为准。

@corbits/react-ui 的下载量有多少?

根据 npm 官方下载统计,@corbits/react-ui 在 2026/10/11 – 2026/11/09 这 30 天内被下载 4,681 次,日均约 156 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@corbits/react-ui 还在维护吗?

最新版本 0.5.1 发布于 2026/11/02(8 天前);至今共发布 8 个版本,其中过去 12 个月发布了 8 个;首次发布于 2026/09/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。