@blueking/chat-x 0.0.45-beta.5 → 0.0.45-beta.7
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.
- package/README.md +1 -1
- package/dist/ag-ui/types/constants.d.ts +0 -16
- package/dist/ag-ui/types/contents.d.ts +0 -2
- package/dist/ag-ui/types/index.d.ts +0 -2
- package/dist/ag-ui/types/messages.d.ts +0 -2
- package/dist/components/chat-content/flow-agent-content/flow-agent-content.vue.d.ts +0 -3
- package/dist/components/chat-content/flow-agent-content/use-flow-agent.d.ts +0 -4
- package/dist/components/chat-input/ai-slash-input/command.d.ts +2 -1
- package/dist/components/chat-input/ai-slash-input/constants.d.ts +4 -0
- package/dist/components/chat-input/chat-input.vue.d.ts +8 -14
- package/dist/components/chat-input/input-attachment/input-attachment.vue.d.ts +0 -1
- package/dist/components/chat-message/activity-message/activity-message.vue.d.ts +1 -4
- package/dist/components/chat-message/assistant-message/assistant-message.vue.d.ts +1 -1
- package/dist/components/chat-message/message-container/message-container.vue.d.ts +7 -14
- package/dist/components/chat-message/message-render/message-render.vue.d.ts +0 -4
- package/dist/components/index.d.ts +2 -3
- package/dist/composables/use-global-config.d.ts +0 -3
- package/dist/composables/use-message-group.d.ts +823 -2609
- package/dist/icons/index.d.ts +0 -1
- package/dist/index.css +1 -1
- package/dist/index.js +1935 -2537
- package/dist/index.js.map +1 -1
- package/dist/lang/lang.d.ts +2 -34
- package/dist/mcp/generated/docs/activity-message.md +7 -21
- package/dist/mcp/generated/docs/ai-image.md +4 -9
- package/dist/mcp/generated/docs/ai-loading.md +6 -11
- package/dist/mcp/generated/docs/ai-selection.md +5 -10
- package/dist/mcp/generated/docs/animation-text.md +4 -9
- package/dist/mcp/generated/docs/assistant-message.md +5 -10
- package/dist/mcp/generated/docs/chat-container.md +19 -173
- package/dist/mcp/generated/docs/chat-input.md +10 -78
- package/dist/mcp/generated/docs/cite-content.md +3 -8
- package/dist/mcp/generated/docs/code-content.md +4 -9
- package/dist/mcp/generated/docs/common-error-content.md +5 -10
- package/dist/mcp/generated/docs/constants.md +3 -68
- package/dist/mcp/generated/docs/content-render.md +5 -10
- package/dist/mcp/generated/docs/delete-tool.md +4 -9
- package/dist/mcp/generated/docs/desc-panel.md +4 -9
- package/dist/mcp/generated/docs/execution-summary.md +5 -10
- package/dist/mcp/generated/docs/file-content.md +4 -9
- package/dist/mcp/generated/docs/file-upload-btn.md +5 -10
- package/dist/mcp/generated/docs/highlight-keyword.md +5 -10
- package/dist/mcp/generated/docs/image-content.md +4 -9
- package/dist/mcp/generated/docs/image-preview-group.md +4 -9
- package/dist/mcp/generated/docs/image-preview.md +5 -10
- package/dist/mcp/generated/docs/info-message.md +2 -7
- package/dist/mcp/generated/docs/key-value-content.md +4 -9
- package/dist/mcp/generated/docs/latex-content.md +4 -9
- package/dist/mcp/generated/docs/loading-message.md +6 -11
- package/dist/mcp/generated/docs/markdown-container.md +1 -1
- package/dist/mcp/generated/docs/markdown-content.md +8 -13
- package/dist/mcp/generated/docs/markdown-latex.md +3 -3
- package/dist/mcp/generated/docs/markdown-mermaid.md +3 -3
- package/dist/mcp/generated/docs/mermaid-content.md +4 -9
- package/dist/mcp/generated/docs/message-container.md +11 -69
- package/dist/mcp/generated/docs/message-render.md +11 -23
- package/dist/mcp/generated/docs/message-tools.md +5 -10
- package/dist/mcp/generated/docs/messages.md +11 -75
- package/dist/mcp/generated/docs/overflow-tips.md +4 -4
- package/dist/mcp/generated/docs/reasoning-message.md +5 -10
- package/dist/mcp/generated/docs/reference-content.md +5 -10
- package/dist/mcp/generated/docs/scroll-btn.md +3 -8
- package/dist/mcp/generated/docs/selection-footer.md +4 -9
- package/dist/mcp/generated/docs/shortcut-btn.md +5 -10
- package/dist/mcp/generated/docs/shortcut-btns.md +5 -10
- package/dist/mcp/generated/docs/shortcut-render.md +5 -10
- package/dist/mcp/generated/docs/text-content.md +4 -9
- package/dist/mcp/generated/docs/theme.md +4 -50
- package/dist/mcp/generated/docs/tool-btn.md +4 -9
- package/dist/mcp/generated/docs/tool-message.md +5 -10
- package/dist/mcp/generated/docs/toolcall-render.md +5 -10
- package/dist/mcp/generated/docs/use-animation-text.md +4 -4
- package/dist/mcp/generated/docs/use-clipboard.md +3 -3
- package/dist/mcp/generated/docs/use-command-selection.md +1 -1
- package/dist/mcp/generated/docs/use-custom-tab.md +1 -1
- package/dist/mcp/generated/docs/use-full-screen.md +3 -3
- package/dist/mcp/generated/docs/use-global-config.md +5 -20
- package/dist/mcp/generated/docs/use-menu-keydown.md +1 -1
- package/dist/mcp/generated/docs/use-message-group.md +9 -40
- package/dist/mcp/generated/docs/use-observer-visible-list.md +1 -1
- package/dist/mcp/generated/docs/user-feedback.md +3 -8
- package/dist/mcp/generated/docs/user-message.md +13 -18
- package/dist/mcp/generated/index.json +560 -1103
- package/dist/mcp/index.js +0 -0
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/list-components.d.ts +6 -7
- package/dist/mcp/tools/list-components.js +29 -23
- package/dist/mcp/tools/list-components.js.map +1 -1
- package/dist/mcp/tools/search-docs.js +1 -1
- package/dist/mcp/tools/search-docs.js.map +1 -1
- package/dist/mcp/utils/doc-loader.d.ts +1 -1
- package/dist/types/editor.d.ts +1 -0
- package/package.json +21 -23
- package/dist/ag-ui/types/interrupt.d.ts +0 -137
- package/dist/ag-ui/types/schema.d.ts +0 -42
- package/dist/components/ai-questions/questions-container.vue.d.ts +0 -3
- package/dist/components/ai-questions/selection-question.vue.d.ts +0 -3
- package/dist/components/chat-content/flow-agent-content/use-flow-node-actions.d.ts +0 -32
- package/dist/components/chat-content/index.d.ts +0 -2
- package/dist/components/chat-input/input-info-alert.vue.d.ts +0 -6
- package/dist/components/chat-message/interrupt-message/index.d.ts +0 -2
- package/dist/components/chat-message/interrupt-message/interrupt-message.vue.d.ts +0 -17
- package/dist/components/chat-message/interrupt-message/tool-approval-card.vue.d.ts +0 -8
- package/dist/components/chat-message/interrupt-message/user-question/index.d.ts +0 -5
- package/dist/components/chat-message/interrupt-message/user-question/use-user-question.d.ts +0 -35
- package/dist/components/chat-message/interrupt-message/user-question/user-question-answered-card.vue.d.ts +0 -25
- package/dist/components/chat-message/interrupt-message/user-question/user-question-card.vue.d.ts +0 -25
- package/dist/components/chat-message/interrupt-message/user-question/user-question-choice.vue.d.ts +0 -13
- package/dist/components/chat-message/interrupt-message/user-question/user-question-option.vue.d.ts +0 -17
- package/dist/icons/interrupt.d.ts +0 -24
- package/dist/mcp/generated/docs/activity-layout.md +0 -138
- package/dist/mcp/generated/docs/ai-prompt-list.md +0 -42
- package/dist/mcp/generated/docs/ai-slash-editor.md +0 -43
- package/dist/mcp/generated/docs/ai-slash-input.md +0 -43
- package/dist/mcp/generated/docs/ai-slash-menu.md +0 -42
- package/dist/mcp/generated/docs/detail-section.md +0 -93
- package/dist/mcp/generated/docs/flow-agent-content.md +0 -252
- package/dist/mcp/generated/docs/flow-agent-node-detail.md +0 -240
- package/dist/mcp/generated/docs/input-attachment.md +0 -43
- package/dist/mcp/generated/docs/input-info-alert.md +0 -42
- package/dist/mcp/generated/docs/interrupt-message.md +0 -204
- package/dist/mcp/generated/docs/interrupt.md +0 -354
- package/dist/mcp/generated/docs/knowledge-rag-content.md +0 -126
- package/dist/mcp/generated/docs/message-loading.md +0 -120
- package/dist/mcp/generated/docs/preview-toolbar.md +0 -42
- package/dist/mcp/generated/docs/questions-container.md +0 -88
- package/dist/mcp/generated/docs/reference-doc-content.md +0 -112
- package/dist/mcp/generated/docs/schema.md +0 -93
- package/dist/mcp/generated/docs/selection-question.md +0 -91
- package/dist/mcp/generated/docs/simple-table.md +0 -103
- package/dist/mcp/generated/docs/tool-approval-card.md +0 -148
- package/dist/mcp/generated/docs/use-flow-node-actions.md +0 -124
- package/dist/mcp/generated/docs/user-question-answered-card.md +0 -106
- package/dist/mcp/generated/docs/user-question-card.md +0 -228
- package/dist/mcp/generated/docs/user-question-choice.md +0 -108
- package/dist/mcp/generated/docs/user-question-option.md +0 -42
- package/dist/mcp/generated/docs/vnode-renderer.md +0 -126
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
useGlobalConfig 接收 GlobalConfig(含
|
|
4
|
+
useGlobalConfig 接收 GlobalConfig(含 supportUpload: ComputedRef<boolean>),以 GLOBAL_CONFIG_TOKEN provide 给后代; injectGlobalConfig 在子组件中取出配置,无 Provider 时返回 undefined。ChatContainer 在 setup 中调用 useGlobalConfig; UserMessage 等通过 injectGlobalConfig 读取 supportUpload。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **chat-container** — 根容器调用 useGlobalConfig 注入 supportUpload
|
|
@@ -13,20 +13,14 @@ useGlobalConfig 接收 GlobalConfig(含 size?: ComputedRef<AiSizeMode>、suppo
|
|
|
13
13
|
|
|
14
14
|
> **分类**:composable
|
|
15
15
|
|
|
16
|
-
在聊天容器根组件与子组件之间通过 Vue `provide` / `inject`
|
|
17
|
-
|
|
18
|
-
> 字号主题主要通过 `ChatContainer` 根节点的 `data-ai-size` 与 CSS 变量(`--ai-font-size` 等)生效;`GlobalConfig.size` 供后代在逻辑层读取当前档位,样式层无需逐组件传参。
|
|
16
|
+
在聊天容器根组件与子组件之间通过 Vue `provide` / `inject` 共享**全局展示相关配置**(当前主要为是否支持上传 `supportUpload`)。与 Teleport 插槽 ID 无关。
|
|
19
17
|
|
|
20
18
|
## 工作原理
|
|
21
19
|
|
|
22
20
|
```
|
|
23
21
|
ChatContainer(根)
|
|
24
|
-
├── :
|
|
25
|
-
|
|
26
|
-
│ size: computed(() => props.size ?? 'small'),
|
|
27
|
-
│ supportUpload: computed(() => props.supportUpload ?? false),
|
|
28
|
-
│ })
|
|
29
|
-
│ └── provide(GLOBAL_CONFIG_TOKEN, { size, supportUpload })
|
|
22
|
+
├── useGlobalConfig({ supportUpload: computed(() => props.supportUpload ?? false) })
|
|
23
|
+
│ └── provide(GLOBAL_CONFIG_TOKEN, { supportUpload })
|
|
30
24
|
│
|
|
31
25
|
└── MessageContainer → … → UserMessage 等
|
|
32
26
|
|
|
@@ -49,12 +43,10 @@ UserMessage(后代)
|
|
|
49
43
|
import { useGlobalConfig } from '@blueking/chat-x';
|
|
50
44
|
|
|
51
45
|
const props = defineProps<{
|
|
52
|
-
size?: 'normal' | 'small';
|
|
53
46
|
supportUpload?: boolean;
|
|
54
47
|
}>();
|
|
55
48
|
|
|
56
49
|
useGlobalConfig({
|
|
57
|
-
size: computed(() => props.size ?? 'small'),
|
|
58
50
|
supportUpload: computed(() => props.supportUpload ?? false),
|
|
59
51
|
});
|
|
60
52
|
</script>
|
|
@@ -83,15 +75,11 @@ import type { ComputedRef } from 'vue';
|
|
|
83
75
|
|
|
84
76
|
export const GLOBAL_CONFIG_TOKEN: unique symbol;
|
|
85
77
|
|
|
86
|
-
export type AiSizeMode = 'normal' | 'small';
|
|
87
|
-
|
|
88
78
|
export type GlobalConfig = {
|
|
89
|
-
size?: ComputedRef<AiSizeMode>;
|
|
90
79
|
supportUpload: ComputedRef<boolean>;
|
|
91
80
|
};
|
|
92
81
|
|
|
93
82
|
export function useGlobalConfig(options: GlobalConfig): {
|
|
94
|
-
size?: ComputedRef<AiSizeMode>;
|
|
95
83
|
supportUpload: ComputedRef<boolean>;
|
|
96
84
|
};
|
|
97
85
|
|
|
@@ -108,14 +96,12 @@ export function injectGlobalConfig(): GlobalConfig | undefined;
|
|
|
108
96
|
|
|
109
97
|
| 字段 | 说明 |
|
|
110
98
|
| --------------- | ------------------------------------------------------------------------ |
|
|
111
|
-
| `size` | 可选。字号主题档位 `normal`(14px)/ `small`(12px),与 `ChatContainer.size` 对齐 |
|
|
112
99
|
| `supportUpload` | 是否支持上传,与根容器 `ChatContainer` 的 `supportUpload` 等展示策略对齐 |
|
|
113
100
|
|
|
114
101
|
### `useGlobalConfig(options)`
|
|
115
102
|
|
|
116
103
|
| 参数 | 说明 |
|
|
117
104
|
| ----------------------- | ------------------------------------------------------------------------------------- |
|
|
118
|
-
| `options.size` | 可选。字号主题档位,建议使用 `computed(() => props.size ?? 'small')` 与根 props 同步 |
|
|
119
105
|
| `options.supportUpload` | 是否支持上传,建议使用 `computed(() => props.supportUpload ?? false)` 与根 props 同步 |
|
|
120
106
|
|
|
121
107
|
- 调用后立即 `provide(GLOBAL_CONFIG_TOKEN, options)`。
|
|
@@ -136,5 +122,4 @@ export function injectGlobalConfig(): GlobalConfig | undefined;
|
|
|
136
122
|
|
|
137
123
|
## 关联组件
|
|
138
124
|
|
|
139
|
-
- [ChatContainer](../components/
|
|
140
|
-
- [主题配置](../theme/theme) — `data-ai-size` 与 CSS 变量说明
|
|
125
|
+
- [ChatContainer](../components/molecular/chat-container.md) — 调用 `useGlobalConfig` 注入 `supportUpload`
|
|
@@ -27,8 +27,6 @@ function useMessageGroup(options: {
|
|
|
27
27
|
}): {
|
|
28
28
|
messageGroups: Ref<MessageGroup[]>;
|
|
29
29
|
executionGroups: ComputedRef<MessageGroup[]>;
|
|
30
|
-
pendingApprovalCount: ComputedRef<number>;
|
|
31
|
-
pendingApprovalTipText: ComputedRef<string>;
|
|
32
30
|
isShareMode: ShallowRef<boolean>;
|
|
33
31
|
isAllSelected: ComputedRef<boolean>;
|
|
34
32
|
onToggleShareAll: (isAllSelected: boolean) => void;
|
|
@@ -115,24 +113,6 @@ const isExecutionMessage = (m: Message): boolean => {
|
|
|
115
113
|
| toolCall | `function.name`、`mcpName`、`description`、`arguments`、`id` |
|
|
116
114
|
| flow_agent | 各任务 `task_name`、各节点 `name` |
|
|
117
115
|
|
|
118
|
-
## 待审批统计
|
|
119
|
-
|
|
120
|
-
`useMessageGroup` 会统计消息列表中处于待审批状态的 AI Dev 审批中断:
|
|
121
|
-
|
|
122
|
-
```typescript
|
|
123
|
-
const pendingApprovalStatusSet = new Set([APPROVAL_STATUS.PENDING, APPROVAL_STATUS.DRAFT]);
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
当 `MessageRole.Interrupt` 消息的 `content.outcome.type === 'interrupt'`,且其中断项满足 `reason === InterruptReason.AIDevToolApproval`、`metadata.ticket.status` 为 `pending` 或 `draft` 时,计入 `pendingApprovalCount`。
|
|
127
|
-
|
|
128
|
-
`pendingApprovalTipText` 根据数量生成输入区提示文案:
|
|
129
|
-
|
|
130
|
-
```typescript
|
|
131
|
-
'当前会话有 {count} 个待审批单,如需继续,请先取消审批'
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
`ChatContainer` 会消费该返回值,向 `ChatInput` 传入 `sendDisabledTip` 并在输入区上方展示提示,从而阻止继续发送。
|
|
135
|
-
|
|
136
116
|
## 分享模式
|
|
137
117
|
|
|
138
118
|
`useMessageGroup` 提供完整的分享模式支持:
|
|
@@ -162,21 +142,12 @@ const keyword = shallowRef('');
|
|
|
162
142
|
const messages = computed(() => props.messages);
|
|
163
143
|
const selectedUserMessages = deepRef<Message[]>([]);
|
|
164
144
|
|
|
165
|
-
const {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
isAllSelected,
|
|
172
|
-
onToggleShareAll,
|
|
173
|
-
onCancelShare,
|
|
174
|
-
onConfirmShare,
|
|
175
|
-
} = useMessageGroup({
|
|
176
|
-
keyword,
|
|
177
|
-
messages,
|
|
178
|
-
selectedUserMessages,
|
|
179
|
-
});
|
|
145
|
+
const { messageGroups, executionGroups, isShareMode, isAllSelected, onToggleShareAll, onCancelShare, onConfirmShare } =
|
|
146
|
+
useMessageGroup({
|
|
147
|
+
keyword,
|
|
148
|
+
messages,
|
|
149
|
+
selectedUserMessages,
|
|
150
|
+
});
|
|
180
151
|
```
|
|
181
152
|
|
|
182
153
|
## 返回值说明
|
|
@@ -185,8 +156,6 @@ const {
|
|
|
185
156
|
| ---------------- | ----------------------------- | --------------------------------------------------------------------------- |
|
|
186
157
|
| messageGroups | `Ref<MessageGroup[]>` | 完整消息分组列表 |
|
|
187
158
|
| executionGroups | `ComputedRef<MessageGroup[]>` | 仅包含执行类消息的分组(工具调用 + FlowAgent),自动提取 `userMessageTitle` |
|
|
188
|
-
| pendingApprovalCount | `ComputedRef<number>` | 当前消息中待审批 AI Dev 审批中断的数量 |
|
|
189
|
-
| pendingApprovalTipText | `ComputedRef<string>` | 待审批阻塞发送提示文案;无待审批时为空字符串 |
|
|
190
159
|
| isShareMode | `ShallowRef<boolean>` | 是否处于分享模式 |
|
|
191
160
|
| isAllSelected | `ComputedRef<boolean>` | 所有用户消息组是否全部选中 |
|
|
192
161
|
| onToggleShareAll | `(checked: boolean) => void` | 切换全选 |
|
|
@@ -212,6 +181,6 @@ interface MessageGroup {
|
|
|
212
181
|
|
|
213
182
|
## 关联组件
|
|
214
183
|
|
|
215
|
-
- [ChatContainer](../components/
|
|
216
|
-
- [MessageContainer](../components/
|
|
217
|
-
- [ExecutionSummary](../components/
|
|
184
|
+
- [ChatContainer](../components/molecular/chat-container.md) — 调用 useMessageGroup 并下传分组
|
|
185
|
+
- [MessageContainer](../components/molecular/message-container.md) — 渲染 messageGroups
|
|
186
|
+
- [ExecutionSummary](../components/molecular/execution-summary.md) — 消费 executionGroups
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
UserFeedback 在点赞或踩之后展示原因收集面板:多选预设标签、补充说明与异步加载原因列表(骨架屏)。 由 MessageTools 在 like/unlike 流程中挂载,提交后向父级回传原因列表与备注。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **message-tools** — 点赞/踩操作触发并收集反馈
|
|
@@ -10,13 +10,8 @@
|
|
|
10
10
|
<!-- FULL DOC -->
|
|
11
11
|
|
|
12
12
|
# MessageUserFeedback 用户反馈
|
|
13
|
-
## 源码事实
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
- **能力域**:工具与反馈
|
|
17
|
-
- **能力说明**:用户反馈弹层,提交踩/反馈原因。
|
|
18
|
-
|
|
19
|
-
> **能力域**:工具与反馈
|
|
14
|
+
> **层级**:分子组件 · **功能域**:工具与反馈
|
|
20
15
|
|
|
21
16
|
AI 消息点赞/踩后收集用户具体反馈原因的弹出面板。支持多选预设原因标签、补充文字说明(textarea)、异步加载原因列表(骨架屏)。
|
|
22
17
|
|
|
@@ -231,4 +226,4 @@ loading=false,展示原因标签列表
|
|
|
231
226
|
|
|
232
227
|
## 关联组件
|
|
233
228
|
|
|
234
|
-
- [MessageTools](
|
|
229
|
+
- [MessageTools](./message-tools.md) — 点赞/踩入口与反馈联动
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
UserMessage 渲染右对齐用户消息,支持文本、附件、文本/结构化引用、快捷指令与内联编辑。需处理 onAction、onInputConfirm、 onShortcutConfirm 等回调;messageToolsStatus 控制工具栏。由 MessageRender 在 user 角色下使用,常与多选联动。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **message-render** — 由 MessageRender 在 role 为 user 时创建
|
|
@@ -12,13 +12,8 @@
|
|
|
12
12
|
<!-- FULL DOC -->
|
|
13
13
|
|
|
14
14
|
# UserMessage 用户消息
|
|
15
|
-
## 源码事实
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
- **能力域**:消息系统
|
|
19
|
-
- **能力说明**:渲染用户消息,支持文本、键值、Markdown、引用、文件和编辑态输入。
|
|
20
|
-
|
|
21
|
-
> **能力域**:消息系统
|
|
16
|
+
> **层级**:分子组件 · **功能域**:消息展示
|
|
22
17
|
|
|
23
18
|
用户消息展示组件,右对齐显示用户发送的消息内容。支持纯文本、多媒体(图片/文件)、文本引用、结构化引用、快捷指令等多种内容形式,以及消息的内联编辑功能。
|
|
24
19
|
|
|
@@ -39,7 +34,7 @@
|
|
|
39
34
|
│
|
|
40
35
|
├── .ai-user-message-content(气泡:bg #e1ecff,padding 8×12,border-radius 4px)
|
|
41
36
|
│ v-if: cite 为数组 → KeyValueContent(title + key/value 列表)
|
|
42
|
-
│ v-else-if: content →
|
|
37
|
+
│ v-else-if: content → TextContent × N(textParts 中每个文本片段一个实例)
|
|
43
38
|
│
|
|
44
39
|
└── MessageTools(.ai-user-message-tools)
|
|
45
40
|
v-if: messageToolsStatus !== 'hidden'
|
|
@@ -58,7 +53,7 @@
|
|
|
58
53
|
│ @submit(formModel) → onShortcutConfirm(formModel) + isEdit=false
|
|
59
54
|
│
|
|
60
55
|
└── ChatInput(v-else,带自定义 #send-icon slot)
|
|
61
|
-
v-model: editContent
|
|
56
|
+
v-model: editContent(取 textParts[0],即第一个文本片段)
|
|
62
57
|
defaultUploadFiles: binaryFiles
|
|
63
58
|
#send-icon slot → .user-edit-footer
|
|
64
59
|
Button "取消" → isEdit=false
|
|
@@ -67,7 +62,7 @@
|
|
|
67
62
|
|
|
68
63
|
## 基础用法
|
|
69
64
|
|
|
70
|
-
`content` 为字符串时,通过 `
|
|
65
|
+
`content` 为字符串时,通过 `TextContent` 渲染(内部使用 `MarkdownContent`,支持 Markdown 语法)。
|
|
71
66
|
|
|
72
67
|
```vue
|
|
73
68
|
<template>
|
|
@@ -97,7 +92,7 @@
|
|
|
97
92
|
- **图片文件**(`binaryImageFiles`):判断 `url` 存在或 `mimeType` / `file.type` 以 `image/` 开头的文件,统一放入一个 `FileContent`(`readonly=true`)中渲染,支持点击缩略图全屏预览
|
|
98
93
|
- **非图片文件**(`binaryNonImageFiles`):每个文件单独渲染在 `FileContent`(`readonly=true`)中
|
|
99
94
|
|
|
100
|
-
`text`
|
|
95
|
+
`text` 项经 `textParts` 计算属性统一为 `string[]`,按顺序各渲染一个 `TextContent`。
|
|
101
96
|
|
|
102
97
|
```vue
|
|
103
98
|
<script setup lang="ts">
|
|
@@ -228,12 +223,12 @@
|
|
|
228
223
|
**`editContent` 的初始化逻辑**(仅文本部分,二进制文件通过 `defaultUploadFiles` 恢复):
|
|
229
224
|
|
|
230
225
|
```
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
textContent 为 array → editContent = textContent[0]?.text(取第一个文本项)
|
|
234
|
-
binaryFiles 有值 → 进入编辑模式(editContent 可为空)
|
|
226
|
+
textParts 有值 → editContent = textParts[0](取第一个文本片段)
|
|
227
|
+
binaryFiles 有值 → 进入编辑模式(editContent 可为空)
|
|
235
228
|
```
|
|
236
229
|
|
|
230
|
+
`textParts` 由 `content` 统一计算:`string` 转为单元素数组,`InputContent[]` 则过滤出 `type: 'text'` 且非空的项并映射为 `string[]`。
|
|
231
|
+
|
|
237
232
|
```vue
|
|
238
233
|
<template>
|
|
239
234
|
<UserMessage
|
|
@@ -351,6 +346,6 @@ interface MessageExtra {
|
|
|
351
346
|
|
|
352
347
|
## 关联组件
|
|
353
348
|
|
|
354
|
-
- [MessageRender](
|
|
355
|
-
- [MessageTools](
|
|
356
|
-
- [MessageContainer](
|
|
349
|
+
- [MessageRender](./message-render.md) — user 角色由其实例化
|
|
350
|
+
- [MessageTools](./message-tools.md) — 工具栏交互
|
|
351
|
+
- [MessageContainer](./message-container.md) — 列表与多选容器
|