@blueking/chat-x 0.0.5 → 0.0.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/dist/components/ai-selection/ai-selection.vue.d.ts +2 -2
- package/dist/components/index.d.ts +2 -1
- package/dist/index.css +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/mcp/generated/docs/activity-message.md +428 -0
- package/dist/mcp/generated/docs/ai-image.md +227 -0
- package/dist/mcp/generated/docs/ai-loading.md +129 -0
- package/dist/mcp/generated/docs/ai-selection.md +436 -0
- package/dist/mcp/generated/docs/animation-text.md +199 -0
- package/dist/mcp/generated/docs/assistant-message.md +424 -0
- package/dist/mcp/generated/docs/chat-container.md +402 -0
- package/dist/mcp/generated/docs/chat-input.md +625 -0
- package/dist/mcp/generated/docs/cite-content.md +138 -0
- package/dist/mcp/generated/docs/code-content.md +199 -0
- package/dist/mcp/generated/docs/common-error-content.md +70 -0
- package/dist/mcp/generated/docs/constants.md +216 -0
- package/dist/mcp/generated/docs/content-render.md +238 -0
- package/dist/mcp/generated/docs/delete-tool.md +188 -0
- package/dist/mcp/generated/docs/desc-panel.md +139 -0
- package/dist/mcp/generated/docs/execution-summary.md +126 -0
- package/dist/mcp/generated/docs/file-content.md +300 -0
- package/dist/mcp/generated/docs/file-upload-btn.md +174 -0
- package/dist/mcp/generated/docs/flow-message.md +305 -0
- package/dist/mcp/generated/docs/highlight-keyword.md +144 -0
- package/dist/mcp/generated/docs/image-content.md +178 -0
- package/dist/mcp/generated/docs/image-preview-group.md +181 -0
- package/dist/mcp/generated/docs/image-preview.md +224 -0
- package/dist/mcp/generated/docs/info-message.md +124 -0
- package/dist/mcp/generated/docs/key-value-content.md +124 -0
- package/dist/mcp/generated/docs/latex-content.md +196 -0
- package/dist/mcp/generated/docs/loading-message.md +171 -0
- package/dist/mcp/generated/docs/markdown-content.md +186 -0
- package/dist/mcp/generated/docs/markdown-latex.md +208 -0
- package/dist/mcp/generated/docs/markdown-mermaid.md +250 -0
- package/dist/mcp/generated/docs/mermaid-content.md +185 -0
- package/dist/mcp/generated/docs/message-container.md +534 -0
- package/dist/mcp/generated/docs/message-render.md +329 -0
- package/dist/mcp/generated/docs/message-tools.md +376 -0
- package/dist/mcp/generated/docs/messages.md +472 -0
- package/dist/mcp/generated/docs/overflow-tips.md +209 -0
- package/dist/mcp/generated/docs/reasoning-message.md +233 -0
- package/dist/mcp/generated/docs/reference-content.md +132 -0
- package/dist/mcp/generated/docs/scroll-btn.md +155 -0
- package/dist/mcp/generated/docs/selection-footer.md +75 -0
- package/dist/mcp/generated/docs/shortcut-btn.md +202 -0
- package/dist/mcp/generated/docs/shortcut-btns.md +264 -0
- package/dist/mcp/generated/docs/shortcut-render.md +418 -0
- package/dist/mcp/generated/docs/text-content.md +74 -0
- package/dist/mcp/generated/docs/theme.md +388 -0
- package/dist/mcp/generated/docs/tool-btn.md +254 -0
- package/dist/mcp/generated/docs/tool-message.md +217 -0
- package/dist/mcp/generated/docs/toolcall-render.md +299 -0
- package/dist/mcp/generated/docs/use-animation-text.md +198 -0
- package/dist/mcp/generated/docs/use-clipboard.md +206 -0
- package/dist/mcp/generated/docs/use-command-selection.md +128 -0
- package/dist/mcp/generated/docs/use-container-scroll.md +56 -0
- package/dist/mcp/generated/docs/use-custom-tab.md +122 -0
- package/dist/mcp/generated/docs/use-global-config.md +154 -0
- package/dist/mcp/generated/docs/use-menu-keydown.md +164 -0
- package/dist/mcp/generated/docs/use-message-group.md +175 -0
- package/dist/mcp/generated/docs/use-observer-visible-list.md +189 -0
- package/dist/mcp/generated/docs/use-parent-scrolling.md +46 -0
- package/dist/mcp/generated/docs/user-feedback.md +229 -0
- package/dist/mcp/generated/docs/user-message.md +347 -0
- package/dist/mcp/generated/index.json +1311 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.js +42 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.js +43 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/get-component-doc.d.ts +19 -0
- package/dist/mcp/tools/get-component-doc.js +60 -0
- package/dist/mcp/tools/get-component-doc.js.map +1 -0
- package/dist/mcp/tools/list-components.d.ts +35 -0
- package/dist/mcp/tools/list-components.js +147 -0
- package/dist/mcp/tools/list-components.js.map +1 -0
- package/dist/mcp/tools/search-docs.d.ts +14 -0
- package/dist/mcp/tools/search-docs.js +82 -0
- package/dist/mcp/tools/search-docs.js.map +1 -0
- package/dist/mcp/utils/doc-loader.d.ts +35 -0
- package/dist/mcp/utils/doc-loader.js +64 -0
- package/dist/mcp/utils/doc-loader.js.map +1 -0
- package/package.json +5 -7
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
<!-- AI SUMMARY -->
|
|
2
|
+
## 快速了解
|
|
3
|
+
|
|
4
|
+
ChatContainer 提供完整 AI 对话布局:分栏(ResizeLayout)、消息列表(MessageContainer)、输入(ChatInput)、执行摘要(ExecutionSummary)、快捷表单(ShortcutRender)与多选栏(SelectionFooter)。 内置 useMessageGroup、分享与自定义 Tab 等能力,适合一站式接入。 通过 props 传入 messages、shortcuts 等,事件与 ChatInput/MessageContainer 对齐。
|
|
5
|
+
|
|
6
|
+
### 关联组件
|
|
7
|
+
- **message-container** — 消息列表与滚动区域
|
|
8
|
+
- **chat-input** — 对话输入与快捷指令入口
|
|
9
|
+
- **shortcut-render** — 快捷指令表单浮层
|
|
10
|
+
- **execution-summary** — 执行摘要侧栏与定位
|
|
11
|
+
- **selection-footer** — 多选分享底部操作栏
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
<!-- FULL DOC -->
|
|
15
|
+
|
|
16
|
+
# ChatContainer 聊天容器
|
|
17
|
+
|
|
18
|
+
> **层级**:分子组件 · **功能域**:输入交互
|
|
19
|
+
|
|
20
|
+
顶层聊天容器组件,整合了 `MessageContainer`(消息列表)、`ChatInput`(输入框)、`ExecutionSummary`(执行摘要面板)、`ShortcutRender`(快捷指令表单)和 `SelectionFooter`(多选操作栏)。提供完整的 AI 对话界面布局能力。
|
|
21
|
+
|
|
22
|
+
## 核心能力
|
|
23
|
+
|
|
24
|
+
- **分栏布局**:基于 `ResizeLayout` 的可拖拽分栏,侧边栏展示执行摘要 / 自定义 Tab
|
|
25
|
+
- **消息分组**:内置 `useMessageGroup` 自动处理消息分组、Tool 合并、Loading 注入
|
|
26
|
+
- **执行摘要**:侧边栏展示工具调用 / FlowAgent 执行记录,支持关键词搜索和对话定位
|
|
27
|
+
- **自定义 Tab**:通过 `useCustomTabProvider` 支持动态添加自定义 Tab(如节点详情)
|
|
28
|
+
- **分享模式**:内置消息多选分享流程,选中用户消息后确认分享
|
|
29
|
+
- **空状态欢迎页**:无消息时展示欢迎语和开场白
|
|
30
|
+
|
|
31
|
+
## 组件结构
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
ai-chat-container
|
|
35
|
+
├── Loading(chatLoading 时)
|
|
36
|
+
└── ResizeLayout
|
|
37
|
+
├── aside(侧边栏)
|
|
38
|
+
│ ├── Tab 标签页
|
|
39
|
+
│ │ ├── 执行情况(默认 Tab)
|
|
40
|
+
│ │ └── 自定义 Tab × N(可关闭)
|
|
41
|
+
│ ├── ExecutionSummary(执行情况 Tab 内容)
|
|
42
|
+
│ ├── 自定义 Tab 组件(通过 component :is 渲染)
|
|
43
|
+
│ └── collapse-button(折叠按钮)
|
|
44
|
+
└── main(主内容区)
|
|
45
|
+
├── MessageContainer(有消息时)
|
|
46
|
+
│ └── 消息列表 + 工具栏
|
|
47
|
+
├── 欢迎页(无消息时)
|
|
48
|
+
│ ├── AIBluekingBannerIcon
|
|
49
|
+
│ ├── 欢迎标题
|
|
50
|
+
│ └── welcome 插槽(默认:开场白 ContentRender)
|
|
51
|
+
├── SelectionFooter(分享模式时)
|
|
52
|
+
├── ShortcutRender(有快捷指令时)
|
|
53
|
+
└── ChatInput(默认状态)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 基础用法
|
|
57
|
+
|
|
58
|
+
```vue
|
|
59
|
+
<template>
|
|
60
|
+
<ChatContainer
|
|
61
|
+
v-model="inputValue"
|
|
62
|
+
:messages="messages"
|
|
63
|
+
:message-status="messageStatus"
|
|
64
|
+
:on-send-message="handleSendMessage"
|
|
65
|
+
:on-stop-sending="handleStopSending"
|
|
66
|
+
:on-agent-action="handleAgentAction"
|
|
67
|
+
:on-agent-feedback="handleAgentFeedback"
|
|
68
|
+
:on-user-action="handleUserAction"
|
|
69
|
+
@stop-streaming="handleStopStreaming"
|
|
70
|
+
/>
|
|
71
|
+
</template>
|
|
72
|
+
|
|
73
|
+
<script setup lang="ts">
|
|
74
|
+
import { ref } from 'vue';
|
|
75
|
+
import { ChatContainer, MessageStatus, type Message, type IToolBtn, type TagSchema } from '@blueking/chat-x';
|
|
76
|
+
|
|
77
|
+
const inputValue = ref('');
|
|
78
|
+
const messageStatus = ref(MessageStatus.Complete);
|
|
79
|
+
const messages = ref<Message[]>([]);
|
|
80
|
+
|
|
81
|
+
const handleSendMessage = async (content: string, docSchema: TagSchema) => {
|
|
82
|
+
messageStatus.value = MessageStatus.Streaming;
|
|
83
|
+
// ... 发送 AI 请求
|
|
84
|
+
messageStatus.value = MessageStatus.Complete;
|
|
85
|
+
};
|
|
86
|
+
const handleStopSending = async () => {
|
|
87
|
+
messageStatus.value = MessageStatus.Stop;
|
|
88
|
+
};
|
|
89
|
+
const handleAgentAction = async (tool: IToolBtn, messages: Message[]) => {
|
|
90
|
+
if (tool.id === 'like' || tool.id === 'unlike') {
|
|
91
|
+
return ['回答准确', '信息全面', '表达清晰'];
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const handleAgentFeedback = (tool: IToolBtn, messages: Message[], reasonList: string[], otherReason: string) => {
|
|
95
|
+
console.log('反馈:', tool.id, reasonList, otherReason);
|
|
96
|
+
};
|
|
97
|
+
const handleUserAction = async (tool: IToolBtn, message: Message) => {
|
|
98
|
+
console.log('用户操作:', tool.id);
|
|
99
|
+
};
|
|
100
|
+
const handleStopStreaming = () => {
|
|
101
|
+
messageStatus.value = MessageStatus.Stop;
|
|
102
|
+
};
|
|
103
|
+
</script>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**渲染效果**
|
|
107
|
+
|
|
108
|
+
## 侧边栏与执行摘要
|
|
109
|
+
|
|
110
|
+
侧边栏默认包含「执行情况」Tab,展示所有工具调用和 FlowAgent 类型的 Activity 消息。支持关键词搜索过滤和点击定位到对话中的消息位置。
|
|
111
|
+
|
|
112
|
+
```vue
|
|
113
|
+
<template>
|
|
114
|
+
<ChatContainer
|
|
115
|
+
v-model="inputValue"
|
|
116
|
+
:messages="messages"
|
|
117
|
+
:message-status="messageStatus"
|
|
118
|
+
placement="left"
|
|
119
|
+
:on-send-message="handleSendMessage"
|
|
120
|
+
:on-agent-action="handleAgentAction"
|
|
121
|
+
@stop-streaming="handleStopStreaming"
|
|
122
|
+
@collapse-change="handleCollapseChange"
|
|
123
|
+
/>
|
|
124
|
+
</template>
|
|
125
|
+
|
|
126
|
+
<script setup lang="ts">
|
|
127
|
+
const handleCollapseChange = (isCollapse: boolean, resizeAsideWidth: number) => {
|
|
128
|
+
console.log('侧边栏折叠:', isCollapse, '宽度:', resizeAsideWidth);
|
|
129
|
+
};
|
|
130
|
+
</script>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**渲染效果**(包含工具调用消息时,侧边栏自动展示「执行情况」)
|
|
134
|
+
|
|
135
|
+
侧边栏放置方向通过 `placement` 控制:
|
|
136
|
+
|
|
137
|
+
| `placement` | 侧边栏位置 | 折叠按钮位置 |
|
|
138
|
+
| ----------- | ------------ | ------------ |
|
|
139
|
+
| `left` | 左侧(默认) | 主区域左边缘 |
|
|
140
|
+
| `right` | 右侧 | 主区域右边缘 |
|
|
141
|
+
|
|
142
|
+
**placement 对比**(左右两种布局)
|
|
143
|
+
|
|
144
|
+
## 自定义 Tab
|
|
145
|
+
|
|
146
|
+
通过 `ref` 获取组件实例后,使用 `addCustomTab` / `removeCustomTab` 动态管理侧边栏 Tab:
|
|
147
|
+
|
|
148
|
+
```vue
|
|
149
|
+
<template>
|
|
150
|
+
<ChatContainer
|
|
151
|
+
ref="chatContainerRef"
|
|
152
|
+
v-model="inputValue"
|
|
153
|
+
:messages="messages"
|
|
154
|
+
:message-status="messageStatus"
|
|
155
|
+
:on-custom-tab-change="handleCustomTabChange"
|
|
156
|
+
:on-send-message="handleSendMessage"
|
|
157
|
+
@stop-streaming="handleStopStreaming"
|
|
158
|
+
/>
|
|
159
|
+
</template>
|
|
160
|
+
|
|
161
|
+
<script setup lang="ts">
|
|
162
|
+
import { useTemplateRef } from 'vue';
|
|
163
|
+
import { ChatContainer, type CustomTab } from '@blueking/chat-x';
|
|
164
|
+
|
|
165
|
+
const chatContainerRef = useTemplateRef<InstanceType<typeof ChatContainer>>('chatContainerRef');
|
|
166
|
+
|
|
167
|
+
// 添加自定义 Tab(如 FlowAgent 节点详情)
|
|
168
|
+
const addNodeDetailTab = (nodeId: string, nodeName: string) => {
|
|
169
|
+
chatContainerRef.value?.addCustomTab({
|
|
170
|
+
name: `node-${nodeId}`,
|
|
171
|
+
label: nodeName,
|
|
172
|
+
data: {
|
|
173
|
+
component: MyNodeDetail, // 自定义组件
|
|
174
|
+
props: { loading: true, data: {} },
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// Tab 切换时加载数据
|
|
180
|
+
const handleCustomTabChange = async (tab: CustomTab) => {
|
|
181
|
+
const data = await fetchTabData(tab.name);
|
|
182
|
+
return data;
|
|
183
|
+
};
|
|
184
|
+
</script>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## 开场白
|
|
188
|
+
|
|
189
|
+
无消息时展示欢迎页,通过 `openingRemark` 设置开场白内容(支持 Markdown):
|
|
190
|
+
|
|
191
|
+
```vue
|
|
192
|
+
<template>
|
|
193
|
+
<ChatContainer
|
|
194
|
+
v-model="inputValue"
|
|
195
|
+
:messages="[]"
|
|
196
|
+
:message-status="messageStatus"
|
|
197
|
+
opening-remark="你好!我是 AI 小鲸 🐳,可以帮你:\n\n- 编写和优化代码\n- 解答技术问题\n- 分析和调试错误"
|
|
198
|
+
:on-send-message="handleSendMessage"
|
|
199
|
+
/>
|
|
200
|
+
</template>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 自定义欢迎内容
|
|
204
|
+
|
|
205
|
+
通过 `welcome` 插槽可完全自定义欢迎页内容,插槽参数 `openingRemark` 为传入的开场白文本:
|
|
206
|
+
|
|
207
|
+
```vue
|
|
208
|
+
<template>
|
|
209
|
+
<ChatContainer
|
|
210
|
+
v-model="inputValue"
|
|
211
|
+
:messages="[]"
|
|
212
|
+
:message-status="messageStatus"
|
|
213
|
+
opening-remark="欢迎使用 AI 助手"
|
|
214
|
+
:on-send-message="handleSendMessage"
|
|
215
|
+
>
|
|
216
|
+
<template #welcome="{ openingRemark }">
|
|
217
|
+
<div class="my-welcome">
|
|
218
|
+
<h3>{{ openingRemark }}</h3>
|
|
219
|
+
<div class="quick-actions">
|
|
220
|
+
<button @click="handleQuickAction('code')">写代码</button>
|
|
221
|
+
<button @click="handleQuickAction('debug')">调试</button>
|
|
222
|
+
<button @click="handleQuickAction('explain')">解释</button>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
</template>
|
|
226
|
+
</ChatContainer>
|
|
227
|
+
</template>
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
> **注意**:使用 `welcome` 插槽后,默认的 `openingRemark` 渲染(`ContentRender`)将被替换,需要自行处理开场白展示逻辑。
|
|
231
|
+
|
|
232
|
+
**渲染效果**
|
|
233
|
+
|
|
234
|
+
## 加载状态
|
|
235
|
+
|
|
236
|
+
`chatLoading` 为 `true` 时,整个容器显示 Loading 遮罩,适用于初始化加载场景(如拉取历史消息):
|
|
237
|
+
|
|
238
|
+
```vue
|
|
239
|
+
<template>
|
|
240
|
+
<ChatContainer
|
|
241
|
+
v-model="inputValue"
|
|
242
|
+
:messages="[]"
|
|
243
|
+
:chat-loading="true"
|
|
244
|
+
/>
|
|
245
|
+
</template>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**渲染效果**
|
|
249
|
+
|
|
250
|
+
## 流式输出
|
|
251
|
+
|
|
252
|
+
`messageStatus` 为 `streaming` 时,底部固定区域显示「停止生成」按钮,点击后触发 `@stop-streaming` 事件:
|
|
253
|
+
|
|
254
|
+
## 分享模式
|
|
255
|
+
|
|
256
|
+
点击消息工具栏的「分享」按钮后进入分享模式,底部出现 `SelectionFooter` 操作栏:
|
|
257
|
+
|
|
258
|
+
```vue
|
|
259
|
+
<template>
|
|
260
|
+
<ChatContainer
|
|
261
|
+
v-model="inputValue"
|
|
262
|
+
:messages="messages"
|
|
263
|
+
:message-status="messageStatus"
|
|
264
|
+
:on-send-message="handleSendMessage"
|
|
265
|
+
:on-agent-action="handleAgentAction"
|
|
266
|
+
@confirm-share="handleConfirmShare"
|
|
267
|
+
@stop-streaming="handleStopStreaming"
|
|
268
|
+
/>
|
|
269
|
+
</template>
|
|
270
|
+
|
|
271
|
+
<script setup lang="ts">
|
|
272
|
+
import { type Message } from '@blueking/chat-x';
|
|
273
|
+
|
|
274
|
+
const handleConfirmShare = (selectedMessages: Message[]) => {
|
|
275
|
+
console.log('分享消息:', selectedMessages);
|
|
276
|
+
};
|
|
277
|
+
</script>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**渲染效果**(点击 AI 回复工具栏中的「分享」按钮进入多选模式)
|
|
281
|
+
|
|
282
|
+
**分享流程**:
|
|
283
|
+
|
|
284
|
+
1. 用户点击消息工具栏中的「分享」按钮
|
|
285
|
+
2. 进入多选模式,用户勾选要分享的消息
|
|
286
|
+
3. 底部 `SelectionFooter` 提供全选、取消、确认操作
|
|
287
|
+
4. 确认后触发 `confirmShare` 事件,携带选中的消息列表
|
|
288
|
+
|
|
289
|
+
## 快捷指令
|
|
290
|
+
|
|
291
|
+
通过 `v-model:selectedShortcut` 管理快捷指令选中状态:
|
|
292
|
+
|
|
293
|
+
```vue
|
|
294
|
+
<template>
|
|
295
|
+
<ChatContainer
|
|
296
|
+
v-model="inputValue"
|
|
297
|
+
v-model:selected-shortcut="selectedShortcut"
|
|
298
|
+
:messages="messages"
|
|
299
|
+
:message-status="messageStatus"
|
|
300
|
+
:shortcuts="shortcuts"
|
|
301
|
+
:on-send-message="handleSendMessage"
|
|
302
|
+
@shortcut-close="handleShortcutClose"
|
|
303
|
+
@shortcut-submit="handleShortcutSubmit"
|
|
304
|
+
@stop-streaming="handleStopStreaming"
|
|
305
|
+
/>
|
|
306
|
+
</template>
|
|
307
|
+
|
|
308
|
+
<script setup lang="ts">
|
|
309
|
+
import { ref } from 'vue';
|
|
310
|
+
import { type Shortcut } from '@blueking/chat-x';
|
|
311
|
+
|
|
312
|
+
const selectedShortcut = ref<Shortcut | null>(null);
|
|
313
|
+
|
|
314
|
+
const handleShortcutClose = () => {
|
|
315
|
+
selectedShortcut.value = null;
|
|
316
|
+
};
|
|
317
|
+
const handleShortcutSubmit = (formModel: Record<string, unknown>) => {
|
|
318
|
+
console.log('快捷指令提交:', formModel);
|
|
319
|
+
};
|
|
320
|
+
</script>
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## API
|
|
324
|
+
|
|
325
|
+
### Props
|
|
326
|
+
|
|
327
|
+
ChatContainer 的 Props 继承自 `ChatInputProps` 和 `MessageContainerProps`(排除 `enableSelection` 和 `messageGroups`),另外新增:
|
|
328
|
+
|
|
329
|
+
| 属性名 | 类型 | 默认值 | 说明 |
|
|
330
|
+
| ------------------ | ---------------------------------- | -------- | ------------------------------------------------------------------------ |
|
|
331
|
+
| chatLoading | `boolean` | — | 整体加载状态,`true` 时显示 Loading 遮罩 |
|
|
332
|
+
| commonTippyOptions | `AITippyProps` | — | 通用 Tippy 配置,传入的选项会注入到所有使用 `v-overflow-tips` 的子组件中 |
|
|
333
|
+
| openingRemark | `string` | — | 开场白,无消息时显示,支持 Markdown |
|
|
334
|
+
| placement | `'left' \| 'right'` | `'left'` | 侧边栏位置 |
|
|
335
|
+
| onCustomTabChange | `(tab: CustomTab) => Promise<any>` | — | 自定义 Tab 切换回调,返回值作为 Tab 组件 props |
|
|
336
|
+
|
|
337
|
+
> 完整 Props 列表请参考 [ChatInput](./chat-input.md) 和 [MessageContainer](./message-container.md) 文档。
|
|
338
|
+
|
|
339
|
+
### v-model
|
|
340
|
+
|
|
341
|
+
| 属性名 | 类型 | 说明 |
|
|
342
|
+
| ---------------- | --------------------- | -------------------------------- |
|
|
343
|
+
| modelValue | `string \| TagSchema` | 输入框内容,支持纯文本或标签结构 |
|
|
344
|
+
| selectedShortcut | `Shortcut \| null` | 当前选中的快捷指令 |
|
|
345
|
+
| cite | `string` | 引用内容 |
|
|
346
|
+
|
|
347
|
+
### Events
|
|
348
|
+
|
|
349
|
+
| 事件名 | 参数 | 说明 |
|
|
350
|
+
| -------------- | -------------------------------------- | ------------------------------------ |
|
|
351
|
+
| stopStreaming | — | 点击「停止生成」按钮 |
|
|
352
|
+
| shortcutClose | — | 关闭快捷指令表单 |
|
|
353
|
+
| shortcutSubmit | `(formModel: Record<string, unknown>)` | 提交快捷指令表单 |
|
|
354
|
+
| confirmShare | `(messages: Message[])` | 确认分享,携带选中的消息 |
|
|
355
|
+
| collapseChange | `(isCollapse: boolean, width: number)` | 侧边栏折叠/展开状态变化 |
|
|
356
|
+
| selectShortcut | `(shortcut: Shortcut)` | 选择快捷指令(继承自 ChatInput) |
|
|
357
|
+
| deleteShortcut | `(shortcut: Shortcut)` | 删除已选快捷指令(继承自 ChatInput) |
|
|
358
|
+
|
|
359
|
+
### Slots
|
|
360
|
+
|
|
361
|
+
| 插槽名 | 参数 | 说明 |
|
|
362
|
+
| ------- | --------------------------------- | ------------------------------------------------------------- |
|
|
363
|
+
| default | 消息列表相关绑定(messages 等) | 自定义消息列表区域 |
|
|
364
|
+
| message | `{ message, messageToolsStatus }` | 自定义单条消息渲染 |
|
|
365
|
+
| welcome | `{ openingRemark: string }` | 自定义欢迎页内容,替换默认的 openingRemark 渲染,无消息时显示 |
|
|
366
|
+
|
|
367
|
+
### Expose
|
|
368
|
+
|
|
369
|
+
| 方法/属性名 | 类型 | 说明 |
|
|
370
|
+
| --------------- | --------------------------- | -------------- |
|
|
371
|
+
| selectedTab | `Ref<CustomTab>` | 当前选中的 Tab |
|
|
372
|
+
| addCustomTab | `(tab: CustomTab) => void` | 添加自定义 Tab |
|
|
373
|
+
| removeCustomTab | `(tabName: string) => void` | 移除自定义 Tab |
|
|
374
|
+
| selectCustomTab | `(tab: CustomTab) => void` | 切换到指定 Tab |
|
|
375
|
+
|
|
376
|
+
## 类型定义
|
|
377
|
+
|
|
378
|
+
```typescript
|
|
379
|
+
import { ChatContainer, type CustomTab, type Shortcut, type Message } from '@blueking/chat-x';
|
|
380
|
+
|
|
381
|
+
// 自定义 Tab
|
|
382
|
+
interface CustomTab<T = Record<string, unknown>> {
|
|
383
|
+
label: string;
|
|
384
|
+
name: string;
|
|
385
|
+
data?: T;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// 快捷指令
|
|
389
|
+
interface Shortcut {
|
|
390
|
+
id: string;
|
|
391
|
+
name: string;
|
|
392
|
+
components?: ShortcutComponent[];
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
## 关联组件
|
|
397
|
+
|
|
398
|
+
- [MessageContainer](./message-container.md) — 消息列表区域
|
|
399
|
+
- [ChatInput](./chat-input.md) — 输入与快捷指令
|
|
400
|
+
- [ShortcutRender](./shortcut-render.md) — 快捷指令表单
|
|
401
|
+
- [ExecutionSummary](./execution-summary.md) — 执行摘要侧栏
|
|
402
|
+
- [SelectionFooter](../atomic/selection-footer.md) — 多选操作栏
|