@blueking/chat-x 0.0.49-beta.14 → 0.0.49-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -577,7 +577,7 @@ ai-chat-container(:data-ai-size="size")
577
577
 
578
578
  ### 自定义按钮触发多选(triggerSelection)
579
579
 
580
- 除内置「分享」外,任意自定义工具按钮标记 `triggerSelection: true` 后,点击即可复用同一套多选流程(勾选消息 → `SelectionFooter` 确认),确认时同样触发 `confirmShare`。配合 `messageTools` / `updateTools`(合并规则见 [MessageContainer · 自定义消息工具栏](/components/setup/message-container))即可扩展如「保存」「收藏到空间」等批量操作。
580
+ 除内置「分享」外,任意自定义工具按钮标记 `triggerSelection: true` 后,点击即可复用同一套多选流程(勾选消息 → `SelectionFooter` 确认),确认时同样触发 `confirmShare`。配合 `messageTools` / `updateTools` / `userMessageTools`(合并规则见 [MessageContainer · 自定义消息工具栏](/components/setup/message-container))即可扩展如「保存」「收藏到空间」等批量操作,或隐藏用户消息上的编辑 / 删除。
581
581
 
582
582
  ```vue
583
583
  <template>
@@ -716,7 +716,7 @@ ChatContainer 的 Props 继承自 `ChatInputProps` 和 `MessageContainerProps`
716
716
  | onCustomTabChange | `(tab: CustomTab) => Promise<any>` | — | 自定义 Tab 切换回调,返回值作为 Tab 组件 props |
717
717
  | onArtifactClick | `(file: AIFileInfo) => Promise<{ download_url?: string; preview_url?: string }>` | — | 异步获取下载 / 预览链接(每次调用重新获取,无缓存;同文件并发去重)。文本类预览依赖 `download_url`,iframe 类依赖 `preview_url`;未传则隐藏下载、预览无数据 |
718
718
 
719
- > 其余 Props(如 `messages`、`messageStatus`、`onSendMessage`、`shortcuts` 等)继承自 [ChatInput](/components/input/chat-input) 与 [MessageContainer](/components/setup/message-container)。
719
+ > 其余 Props(如 `messages`、`messageStatus`、`onSendMessage`、`shortcuts`、`userMessageTools` 等)继承自 [ChatInput](/components/input/chat-input) 与 [MessageContainer](/components/setup/message-container)。`userMessageTools` 透传给内部 `MessageContainer`,用于按 id 覆盖或隐藏用户消息工具栏。
720
720
 
721
721
  ### v-model
722
722
 
@@ -568,6 +568,7 @@ AI 回复状态为 `error` 时,消息以错误样式展示:
568
568
  | messageStatus | `MessageStatus` | — | 当前整体消息状态,控制底部「停止生成」按钮显示;`ChatContainer` 会结合末尾 Loading 占位推导 `fetching` 等再传入 |
569
569
  | messageTools | `IToolBtn[]` | — | AI 消息左侧工具(复制/引用等)的自定义配置;按 `id` 与内置 `CONST_MESSAGE_TOOLS` 合并(覆盖同 id、追加新 id、`hidden` 过滤),详见「自定义消息工具栏」 |
570
570
  | updateTools | `IToolBtn[]` | — | AI 消息右侧反馈工具(点赞/踩/删除等)的自定义配置;按 `id` 与内置 `CONST_UPDATE_TOOLS` 合并,规则同上 |
571
+ | userMessageTools | `IToolBtn[]` | — | 自定义用户消息工具组,透传给 `MessageRender` → `UserMessage`;按 id 与 `CONST_USER_MESSAGE_TOOLS` 合并,`{ id, hidden: true }` 可隐藏 |
571
572
  | messageToolsStatus | `MessageToolsStatus` | — | 工具栏状态,透传给 `MessageTools` 和 `MessageRender` |
572
573
  | messageToolsTippyOptions | `AITippyProps` | — | 透传给 `MessageTools` 和 `MessageRender`(进而透传给 `UserMessage` 的工具栏)的 Tippy 配置,用于自定义 tooltip 挂载点、位置等(如 `appendTo`、`placement`、`zIndex`) |
573
574
  | enableSelection | `boolean` | `false` | 是否启用多选模式 |
@@ -281,6 +281,7 @@ h(ContentRender, { content: message.content || '', status: message.status }, /*
281
281
  | 属性名 | 类型 | 默认值 | 说明 |
282
282
  | ------------------ | -------------------------------------------------------------------------- | ------ | ------------------------------------------------- |
283
283
  | message | `Partial<Message>` | — | **必填**,消息对象,`role` 字段决定渲染哪个子组件 |
284
+ | messageTools | `IToolBtn[]` | — | 自定义用户消息工具组;**仅转发给 `UserMessage`** |
284
285
  | messageToolsStatus | `MessageToolsStatus` | — | 工具按钮状态;**仅转发给 `UserMessage`** |
285
286
  | onAction | `(tool: IToolBtn) => Promise<string[] \| void>` | — | 工具操作回调;**仅转发给 `UserMessage`** |
286
287
  | onInputConfirm | `(content: UserMessage['content'], docSchema: TagSchema) => Promise<void>` | — | 用户编辑确认回调;**仅转发给 `UserMessage`** |
@@ -300,7 +301,7 @@ h(ContentRender, { content: message.content || '', status: message.status }, /*
300
301
 
301
302
  | `MessageRole` | 渲染组件 | prop 路由 | 说明 |
302
303
  | ------------- | ------------------ | ------------------------------------------------------------------------------------------------------- | --------------------- |
303
- | `user` | `UserMessage` | `message` + `onAction` + `onInputConfirm` + `onShortcutConfirm` + `messageToolsStatus` + `tippyOptions` | 用户发送的消息 |
304
+ | `user` | `UserMessage` | `message` + `onAction` + `onInputConfirm` + `onShortcutConfirm` + `messageTools` + `messageToolsStatus` + `tippyOptions` | 用户发送的消息 |
304
305
  | `assistant` | `AssistantMessage` | `message` + `default slot` | AI 助手回复消息 |
305
306
  | `info` | `InfoMessage` | `message` | 系统信息 / 会话分隔符 |
306
307
  | `reasoning` | `ReasoningMessage` | `message` | AI 思考过程(可折叠) |
@@ -315,6 +315,8 @@ binaryFiles 有值 → 进入编辑模式(editContent 可为空)
315
315
  | `edit` | 编辑 | 切换 `isEdit=true`,进入编辑模式 |
316
316
  | `delete` | 删除 | 无内置行为,需通过 `onAction` 外部处理 |
317
317
 
318
+ 可通过 `messageTools` 按 id 覆盖/追加,`{ id: 'edit', hidden: true }` 可隐藏内置项。
319
+
318
320
  ```vue
319
321
  <!-- 经 MessageRender 控制工具栏状态 -->
320
322
  <MessageRender
@@ -362,6 +364,7 @@ binaryFiles 有值 → 进入编辑模式(editContent 可为空)
362
364
  | content | `string \| InputContent[]` | 消息内容,字符串或含 text/binary 的数组 |
363
365
  | createdAt | `number \| string` | 消息创建时间,经 `MessageTools` 的 `#prepend` 插槽交给 `MessageTime` 渲染在工具图标左侧;无值时不展示 |
364
366
  | property | `{ extra?: MessageExtra; artifacts?: AIFileInfo[] }` | 附加属性;本组件消费 `extra.cite` / `shortcut` / `context` |
367
+ | messageTools | `IToolBtn[]` | 自定义用户消息工具组;按 id 与 `CONST_USER_MESSAGE_TOOLS` 合并,`{ id, hidden: true }` 可隐藏 |
365
368
  | messageToolsStatus | `MessageToolsStatus` | 工具按钮状态,`disabled` 禁用、`hidden` 从 DOM 移除 |
366
369
  | onAction | `MessageToolsProps['onAction']` | 工具回调;`copy`/`edit` 有内置行为,`cite`/`delete` 需外部处理 |
367
370
  | onInputConfirm | `(content: UserMessage['content'], docSchema: TagSchema) => Promise<void>` | 普通消息编辑确认回调 |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "2.0.0",
3
- "generatedAt": "2026-08-26T07:26:09.363Z",
3
+ "generatedAt": "2026-08-27T03:38:04.699Z",
4
4
  "domains": {
5
5
  "setup": {
6
6
  "label": "对话搭建",
@@ -1,5 +1,6 @@
1
1
  export * from './file';
2
2
  export * from './file-type';
3
3
  export * from './markdown-completer';
4
+ export * from './merge-tools-by-id';
4
5
  export { completeMarkdownSyntax } from './stream-markdown-completer';
5
6
  export * from './utils';
@@ -0,0 +1,6 @@
1
+ import type { IToolBtn } from '../types';
2
+ /**
3
+ * 按 id 合并工具列表:以内置列表为基底,同 id 覆盖(字段级合并)、新 id 追加,其余保留;
4
+ * 最后过滤掉标记 hidden 的项,实现「隐藏内置按钮」(如 { id: 'share', hidden: true })。
5
+ */
6
+ export declare const mergeToolsById: (base: IToolBtn[], extra?: IToolBtn[]) => IToolBtn[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blueking/chat-x",
3
- "version": "0.0.49-beta.14",
3
+ "version": "0.0.49-beta.16",
4
4
  "description": "蓝鲸智云 AI Chat 组件库 —— 遵循 AG-UI,为 AI Agent 和人类开发者共同设计的对话 UI 组件库。",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -79,7 +79,7 @@
79
79
  "vitepress": "2.0.0-alpha.16",
80
80
  "vitest": "^4.0.18",
81
81
  "vue-tsc": "^3.1.4",
82
- "@blueking/chat-helper": "0.0.12-beta.25"
82
+ "@blueking/chat-helper": "0.0.12-beta.27"
83
83
  },
84
84
  "scripts": {
85
85
  "dev": "vite --config vite.config.ts",