@blueking/chat-x 0.0.50 → 0.0.51-beta.1

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.
Files changed (54) hide show
  1. package/dist/ag-ui/types/contents.d.ts +2 -0
  2. package/dist/ag-ui/types/messages.d.ts +5 -0
  3. package/dist/common/constants.d.ts +1 -1
  4. package/dist/components/ai-buttons/file-upload-btn/file-upload-btn.vue.d.ts +0 -2
  5. package/dist/components/chat-content/file-content/file-content.vue.d.ts +5 -2
  6. package/dist/components/chat-content/file-content/upload-file-item.vue.d.ts +12 -0
  7. package/dist/components/chat-content/file-content/upload-image-item.vue.d.ts +21 -0
  8. package/dist/components/chat-input/ai-slash-editor/ai-slash-editor.vue.d.ts +1 -1
  9. package/dist/components/chat-input/build-default-placeholder.d.ts +7 -0
  10. package/dist/components/chat-input/chat-input.vue.d.ts +1 -1
  11. package/dist/components/chat-message/message-container/message-container.vue.d.ts +1 -0
  12. package/dist/components/chat-message/message-render/message-render.vue.d.ts +2 -0
  13. package/dist/components/chat-message/user-message/user-message.vue.d.ts +3 -1
  14. package/dist/components/index.d.ts +2 -1
  15. package/dist/components/message-tools/message-time/format-message-time.d.ts +8 -0
  16. package/dist/components/message-tools/message-time/message-time.vue.d.ts +8 -0
  17. package/dist/components/message-tools/message-tools.vue.d.ts +11 -1
  18. package/dist/composables/use-custom-tab.d.ts +5 -3
  19. package/dist/composables/use-global-config.d.ts +3 -0
  20. package/dist/composables/use-message-group.d.ts +150 -72
  21. package/dist/icons/execution.d.ts +6 -0
  22. package/dist/icons/tools.d.ts +3 -0
  23. package/dist/index.css +1 -1
  24. package/dist/index.js +3124 -2837
  25. package/dist/index.js.map +1 -1
  26. package/dist/lang/lang.d.ts +8 -7
  27. package/dist/mcp/generated/docs/ai-slash-input.md +2 -0
  28. package/dist/mcp/generated/docs/assistant-message.md +9 -7
  29. package/dist/mcp/generated/docs/chat-container.md +38 -32
  30. package/dist/mcp/generated/docs/chat-input.md +18 -12
  31. package/dist/mcp/generated/docs/cite-content.md +3 -3
  32. package/dist/mcp/generated/docs/desc-panel.md +32 -10
  33. package/dist/mcp/generated/docs/execution-summary.md +3 -3
  34. package/dist/mcp/generated/docs/file-artifact-panel.md +6 -4
  35. package/dist/mcp/generated/docs/file-content.md +89 -73
  36. package/dist/mcp/generated/docs/file-upload-btn.md +16 -18
  37. package/dist/mcp/generated/docs/message-container.md +3 -0
  38. package/dist/mcp/generated/docs/message-render.md +2 -1
  39. package/dist/mcp/generated/docs/message-time.md +180 -0
  40. package/dist/mcp/generated/docs/message-tools.md +47 -12
  41. package/dist/mcp/generated/docs/messages.md +9 -0
  42. package/dist/mcp/generated/docs/toolcall-render.md +82 -43
  43. package/dist/mcp/generated/docs/use-artifact-preview.md +19 -17
  44. package/dist/mcp/generated/docs/use-custom-tab.md +12 -8
  45. package/dist/mcp/generated/docs/use-global-config.md +15 -5
  46. package/dist/mcp/generated/docs/user-message.md +9 -0
  47. package/dist/mcp/generated/docs/user-question-card.md +2 -0
  48. package/dist/mcp/generated/index.json +46 -6
  49. package/dist/types/input.d.ts +6 -0
  50. package/dist/utils/file.d.ts +7 -1
  51. package/dist/utils/index.d.ts +2 -0
  52. package/dist/utils/merge-tools-by-id.d.ts +6 -0
  53. package/dist/utils/upload-file.d.ts +35 -0
  54. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "2.0.0",
3
- "generatedAt": "2026-08-13T08:24:18.572Z",
3
+ "generatedAt": "2026-09-01T04:15:26.001Z",
4
4
  "domains": {
5
5
  "setup": {
6
6
  "label": "对话搭建",
@@ -83,6 +83,7 @@
83
83
  "label": "工具与反馈",
84
84
  "components": [
85
85
  "delete-tool",
86
+ "message-time",
86
87
  "message-tools",
87
88
  "scroll-btn",
88
89
  "tool-btn",
@@ -434,12 +435,35 @@
434
435
  "docFile": "docs/delete-tool.md",
435
436
  "domain": "feedback"
436
437
  },
438
+ {
439
+ "name": "MessageTime 消息时间",
440
+ "slug": "message-time",
441
+ "kind": "component",
442
+ "description": "按「今天 / 昨天 / 今年内 / 跨年」四档格式展示消息创建时间。",
443
+ "aiSummary": "按 createdAt 展示消息时间,四档格式:今天 `12:00`、昨天 `昨天 12:00`、今年内更早 `3-12 12:00`、非今年 `2025-3-12 12:00`; 时区取 props.timezone,未传时回退 injectGlobalConfig().timezone(由 ChatContainer 的 timezone prop 注入),都没有则用浏览器时区; 无值或非法时间不渲染任何 DOM。通常通过 MessageTools 的 prepend / append 插槽使用。 源码位置:src/components/message-tools/message-time/message-time.vue。",
444
+ "relatedComponents": [
445
+ {
446
+ "slug": "message-tools",
447
+ "relation": "通过 prepend / append 插槽嵌入工具栏"
448
+ },
449
+ {
450
+ "slug": "user-message",
451
+ "relation": "用户消息在工具栏左侧展示时间"
452
+ },
453
+ {
454
+ "slug": "message-container",
455
+ "relation": "AI 消息组在工具栏右侧展示本轮回答时间"
456
+ }
457
+ ],
458
+ "docFile": "docs/message-time.md",
459
+ "domain": "feedback"
460
+ },
437
461
  {
438
462
  "name": "MessageTools 消息工具栏",
439
463
  "slug": "message-tools",
440
464
  "kind": "component",
441
465
  "description": "消息悬浮工具栏,组合复制、删除、反馈等工具按钮。",
442
- "aiSummary": "消息悬浮工具栏,组合复制、删除、反馈等工具按钮。 源码位置:src/components/message-tools/message-tools.vue。",
466
+ "aiSummary": "消息悬浮工具栏,组合复制、删除、反馈等工具按钮;提供 prepend / append 两端插槽承载消息时间等附加内容。 源码位置:src/components/message-tools/message-tools.vue。",
443
467
  "relatedComponents": [
444
468
  {
445
469
  "slug": "tool-btn",
@@ -452,6 +476,10 @@
452
476
  {
453
477
  "slug": "delete-tool",
454
478
  "relation": "id 为 delete 时替换为带确认的删除按钮"
479
+ },
480
+ {
481
+ "slug": "message-time",
482
+ "relation": "通过 prepend / append 插槽嵌入消息时间"
455
483
  }
456
484
  ],
457
485
  "docFile": "docs/message-tools.md",
@@ -1287,6 +1315,10 @@
1287
1315
  "slug": "message-tools",
1288
1316
  "relation": "消息工具栏交互与状态由 MessageTools 体系承载"
1289
1317
  },
1318
+ {
1319
+ "slug": "message-time",
1320
+ "relation": "createdAt 经工具栏 prepend 插槽展示"
1321
+ },
1290
1322
  {
1291
1323
  "slug": "message-container",
1292
1324
  "relation": "嵌入列表时由 MessageContainer 管理分组与多选"
@@ -1401,6 +1433,10 @@
1401
1433
  "slug": "toolcall-render",
1402
1434
  "relation": "工具调用详情中渲染描述与参数"
1403
1435
  },
1436
+ {
1437
+ "slug": "tool-message",
1438
+ "relation": "工具返回内容同样由 DescPanel 承载"
1439
+ },
1404
1440
  {
1405
1441
  "slug": "highlight-keyword",
1406
1442
  "relation": "键值与文本匹配关键词高亮"
@@ -1524,7 +1560,7 @@
1524
1560
  "slug": "chat-container",
1525
1561
  "kind": "component",
1526
1562
  "description": "完整对话容器,组合消息列表、输入区、模型选择、快捷指令、执行摘要、分享选择和自定义 Tab。",
1527
- "aiSummary": "完整对话容器,组合消息列表、输入区、模型选择、快捷指令、执行摘要、分享选择和自定义 Tab。 透传 models / selectedModel;支持 welcomeTitle 与 #welcome。 源码位置:src/components/chat-container/chat-container.vue。",
1563
+ "aiSummary": "完整对话容器,组合消息列表、输入区、模型选择、快捷指令、执行摘要、分享选择和自定义 Tab。 透传 models / selectedModel;支持 welcomeTitle 与 #welcome。 侧栏展开/折叠由外部 v-model:asideCollapsed 严格受控(传入后以外部值为准,内部展开动作仅发 update 事件),不再依赖执行数据或文件产物有无;无数据时侧栏照常展开并展示空态。 侧栏固定从右侧展开(无 placement prop),且不再内置折叠按钮。 「文件产物」Tab 常驻挂载。 源码位置:src/components/chat-container/chat-container.vue。",
1528
1564
  "relatedComponents": [
1529
1565
  {
1530
1566
  "slug": "message-container",
@@ -1686,7 +1722,7 @@
1686
1722
  "slug": "use-custom-tab",
1687
1723
  "kind": "composable",
1688
1724
  "description": "Provider/Consumer 模式的自定义 Tab 管理,用于 `ChatContainer` 侧边栏的 Tab 动态管理。Provider 在 `ChatContainer` 中创建,Consumer 在任意后代组件中注入使用。",
1689
- "aiSummary": "useCustomTabProvider 返回 tabs、selectedTab、isCollapse 及 add/ensure/remove/selectCustomTab,并通过 provide 共享;可选 onTabChange 在切换时拉取数据。 ensureCustomTab 只挂载/合并元信息,不展开侧栏、不切换选中;addCustomTab 会展开并选中。 useCustomTabConsumer 在后代注入同一套 API,常用于侧栏动态节点详情等。EXECUTION_TAB_NAME 标识默认「执行情况」Tab。 ChatContainer 侧栏集成 Provider 与 Tab UI。",
1725
+ "aiSummary": "useCustomTabProvider 返回 tabs、selectedTab、isCollapse 及 add/ensure/remove/selectCustomTab,并通过 provide 共享;可选 onTabChange 在切换时拉取数据、可选 collapsed 注入受控折叠态 ref。 ensureCustomTab 只挂载/合并元信息,不展开侧栏、不主动切换选中;addCustomTab 会展开并选中。 未被主动切换过时,选中态默认跟随 Tab 栏首位(order 最小),如常驻的「文件产物」。 useCustomTabConsumer 在后代注入同一套 API,常用于侧栏动态节点详情等。EXECUTION_TAB_NAME 标识默认「执行情况」Tab。 ChatContainer 侧栏集成 Provider 与 Tab UI。",
1690
1726
  "relatedComponents": [
1691
1727
  {
1692
1728
  "slug": "chat-container",
@@ -1731,12 +1767,16 @@
1731
1767
  "name": "useGlobalConfig",
1732
1768
  "slug": "use-global-config",
1733
1769
  "kind": "composable",
1734
- "description": "在聊天根容器与子组件之间通过 provide/inject 共享全局展示配置(字号主题档位、是否支持上传等)。",
1735
- "aiSummary": "useGlobalConfig 接收 GlobalConfig(含 size?: ComputedRef<AiSizeMode>、supportUpload: ComputedRef<boolean>),以 GLOBAL_CONFIG_TOKEN provide 给后代; injectGlobalConfig 在子组件中取出配置,无 Provider 时返回 undefined。ChatContainer 在 setup 中调用 useGlobalConfig 注入 size 与 supportUpload; 后代组件可通过 injectGlobalConfig 读取配置;字号主题主要通过根节点 data-ai-size 与 CSS 变量生效。",
1770
+ "description": "在聊天根容器与子组件之间通过 provide/inject 共享全局展示配置(字号主题档位、是否支持上传、消息时间时区等)。",
1771
+ "aiSummary": "useGlobalConfig 接收 GlobalConfig(含 size?: ComputedRef<AiSizeMode>、supportUpload: ComputedRef<boolean>、timezone?: ComputedRef<string | undefined>),以 GLOBAL_CONFIG_TOKEN provide 给后代; injectGlobalConfig 在子组件中取出配置,无 Provider 时返回 undefined。ChatContainer 在 setup 中调用 useGlobalConfig 注入 size、supportUploadtimezone; 后代组件可通过 injectGlobalConfig 读取配置;字号主题主要通过根节点 data-ai-size 与 CSS 变量生效。",
1736
1772
  "relatedComponents": [
1737
1773
  {
1738
1774
  "slug": "chat-container",
1739
1775
  "relation": "根容器调用 useGlobalConfig 注入 supportUpload"
1776
+ },
1777
+ {
1778
+ "slug": "message-time",
1779
+ "relation": "消息时间组件读取 timezone"
1740
1780
  }
1741
1781
  ],
1742
1782
  "docFile": "docs/use-global-config.md"
@@ -26,3 +26,9 @@ export type UploadFile = BinaryInputContent & {
26
26
  file?: File;
27
27
  status?: UploadStatus;
28
28
  };
29
+ /**
30
+ * 附件展示形态。图片均为定高 48px、宽度按原图比例(48~120px),差异只在圆角与描边:
31
+ * - input:输入框内待发送态(圆角 8px、浅灰描边)
32
+ * - message:消息内已发送态(圆角 4px、线条中描边,整体右对齐)
33
+ */
34
+ export type UploadFileVariant = 'input' | 'message';
@@ -16,10 +16,16 @@ export declare const getFilePreviewUrl: (file?: File) => string;
16
16
  * @returns 文件扩展名
17
17
  */
18
18
  export declare const getFileExtension: (file?: File) => string;
19
+ /**
20
+ * 格式化字节数及单位展示
21
+ * @param size 字节数
22
+ * @returns 1024B -> 1KB 1024KB -> 1M 1024M -> 1GB;大小未知时返回空串
23
+ */
24
+ export declare const formatBytes: (size?: number) => string;
19
25
  /**
20
26
  * 格式化文件大小 及 单位展示
21
27
  * @param file 文件
22
- * @returns 1024B -> 1KB 1024KB -> 1MB 1024MB -> 1GB
28
+ * @returns 1024B -> 1KB 1024KB -> 1M 1024M -> 1GB
23
29
  */
24
30
  export declare const formatFileSize: (file?: File) => string;
25
31
  /**
@@ -1,5 +1,7 @@
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';
6
+ export * from './upload-file';
5
7
  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[];
@@ -0,0 +1,35 @@
1
+ /** 附件的结构化最小契约,`Partial<UploadFile>` 可直接传入 */
2
+ export type UploadFileLike = {
3
+ file?: File;
4
+ filename?: string;
5
+ mimeType?: string;
6
+ size?: number;
7
+ url?: string;
8
+ };
9
+ /** `File` 的身份标识:同名文件靠体积与修改时间区分,用于去重与列表 key */
10
+ export declare const getFileIdentity: (file: File) => string;
11
+ /**
12
+ * 附件的稳定 key:待发送态用 `File` 身份(上传成功回填 url 后不变),
13
+ * 已发送态退回 url / 文件名。
14
+ */
15
+ export declare const getUploadFileKey: (item: UploadFileLike) => string;
16
+ /**
17
+ * 是否按图片渲染缩略图。
18
+ * 仅依据 MIME,不再因「有 url」就当图片——解除类型限制后,
19
+ * 任意文件上传成功都会拿到 url,靠 url 判断必然把 doc / pdf 渲染成破图。
20
+ */
21
+ export declare const isUploadImageFile: (item: UploadFileLike) => boolean;
22
+ /** 文件名:已发送态的 filename 优先,回退原始 `File` */
23
+ export declare const getUploadFileName: (item: UploadFileLike) => string;
24
+ /** 字节数:待发送态取 `File.size`,已发送态取消息内下发的 size */
25
+ export declare const getUploadFileSize: (item: UploadFileLike) => number | undefined;
26
+ /** 附件大小文案,无法得知大小时返回空串(消息态老数据无 size) */
27
+ export declare const formatUploadFileSize: (item: UploadFileLike) => string;
28
+ /**
29
+ * 单次遍历分出图片组与其他文件组。
30
+ * 设计稿要求图片始终排在文件前方,分组本身即承担了排序职责。
31
+ */
32
+ export declare const splitUploadFiles: <T extends UploadFileLike>(items: T[]) => {
33
+ imageFiles: T[];
34
+ otherFiles: T[];
35
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blueking/chat-x",
3
- "version": "0.0.50",
3
+ "version": "0.0.51-beta.1",
4
4
  "description": "蓝鲸智云 AI Chat 组件库 —— 遵循 AG-UI,为 AI Agent 和人类开发者共同设计的对话 UI 组件库。",
5
5
  "main": "index.js",
6
6
  "scripts": {