@ai-group/chat-sdk 3.0.8 → 3.0.10

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 (86) hide show
  1. package/dist/cjs/components/FileGallery/index.js +7 -5
  2. package/dist/cjs/components/FileGallery/index.js.map +2 -2
  3. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +34 -26
  4. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
  5. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js +1 -1
  6. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +1 -1
  7. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +3 -0
  8. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +74 -2
  9. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +3 -3
  10. package/dist/cjs/components/XAdkChatbot/index.js +10 -7
  11. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  12. package/dist/cjs/types/FileGallery.d.ts +2 -0
  13. package/dist/cjs/types/FileGallery.js.map +1 -1
  14. package/dist/cjs/types/XAdkChatbot.d.ts +3 -0
  15. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  16. package/dist/esm/components/FileGallery/index.js +12 -5
  17. package/dist/esm/components/FileGallery/index.js.map +1 -1
  18. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +3 -0
  19. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
  20. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js +1 -1
  21. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +1 -1
  22. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +3 -0
  23. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +81 -2
  24. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  25. package/dist/esm/components/XAdkChatbot/index.js +14 -8
  26. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  27. package/dist/esm/types/FileGallery.d.ts +2 -0
  28. package/dist/esm/types/FileGallery.js.map +1 -1
  29. package/dist/esm/types/XAdkChatbot.d.ts +3 -0
  30. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  31. package/dist/umd/chat-sdk.min.js +1 -1
  32. package/package.json +2 -3
  33. package/dist/cjs/components/FileGallery/FileGallery.stories.d.ts +0 -6
  34. package/dist/cjs/components/FileGallery/FileGallery.stories.js +0 -143
  35. package/dist/cjs/components/FileGallery/FileGallery.stories.js.map +0 -7
  36. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.d.ts +0 -13
  37. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js +0 -633
  38. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js.map +0 -7
  39. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.d.ts +0 -10
  40. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js +0 -394
  41. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js.map +0 -7
  42. package/dist/cjs/components/XAdkSender/XAdkSender.stories.d.ts +0 -6
  43. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js +0 -121
  44. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js.map +0 -7
  45. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.d.ts +0 -10
  46. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +0 -773
  47. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +0 -7
  48. package/dist/cjs/components/XAiConversations/XAiConversations.stories.d.ts +0 -6
  49. package/dist/cjs/components/XAiConversations/XAiConversations.stories.js +0 -83
  50. package/dist/cjs/components/XAiConversations/XAiConversations.stories.js.map +0 -7
  51. package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +0 -8
  52. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +0 -206
  53. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +0 -7
  54. package/dist/cjs/components/XAiSender/XAiSender.stories.d.ts +0 -6
  55. package/dist/cjs/components/XAiSender/XAiSender.stories.js +0 -102
  56. package/dist/cjs/components/XAiSender/XAiSender.stories.js.map +0 -7
  57. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.d.ts +0 -6
  58. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.js +0 -180
  59. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.js.map +0 -7
  60. package/dist/esm/components/FileGallery/FileGallery.stories.d.ts +0 -6
  61. package/dist/esm/components/FileGallery/FileGallery.stories.js +0 -48
  62. package/dist/esm/components/FileGallery/FileGallery.stories.js.map +0 -1
  63. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.d.ts +0 -13
  64. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js +0 -510
  65. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js.map +0 -1
  66. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.d.ts +0 -10
  67. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js +0 -338
  68. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js.map +0 -1
  69. package/dist/esm/components/XAdkSender/XAdkSender.stories.d.ts +0 -6
  70. package/dist/esm/components/XAdkSender/XAdkSender.stories.js +0 -128
  71. package/dist/esm/components/XAdkSender/XAdkSender.stories.js.map +0 -1
  72. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.d.ts +0 -10
  73. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js +0 -636
  74. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js.map +0 -1
  75. package/dist/esm/components/XAiConversations/XAiConversations.stories.d.ts +0 -6
  76. package/dist/esm/components/XAiConversations/XAiConversations.stories.js +0 -42
  77. package/dist/esm/components/XAiConversations/XAiConversations.stories.js.map +0 -1
  78. package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +0 -8
  79. package/dist/esm/components/XAiProvider/XAiProvider.stories.js +0 -208
  80. package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +0 -1
  81. package/dist/esm/components/XAiSender/XAiSender.stories.d.ts +0 -6
  82. package/dist/esm/components/XAiSender/XAiSender.stories.js +0 -87
  83. package/dist/esm/components/XAiSender/XAiSender.stories.js.map +0 -1
  84. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.d.ts +0 -6
  85. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.js +0 -159
  86. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.js.map +0 -1
@@ -1,633 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
-
29
- // src/components/XAdkChatbot/XAdkChatbot.stories.tsx
30
- var XAdkChatbot_stories_exports = {};
31
- __export(XAdkChatbot_stories_exports, {
32
- default: () => XAdkChatbot_stories_default,
33
- 代码高亮: () => 代码高亮,
34
- 函数调用: () => 函数调用,
35
- 基础用法: () => 基础用法,
36
- 多轮对话: () => 多轮对话,
37
- 开场白和建议: () => 开场白和建议,
38
- 思维链: () => 思维链,
39
- 流式输出: () => 流式输出,
40
- 自定义Footer: () => 自定义Footer
41
- });
42
- module.exports = __toCommonJS(XAdkChatbot_stories_exports);
43
- var import_react = require("react");
44
- var import_antd = require("antd");
45
- var import_index = __toESM(require("./index"));
46
- var import_jsx_runtime = require("react/jsx-runtime");
47
- var meta = {
48
- title: "AI组件/XAdkChatbot 聊天消息组件",
49
- component: import_index.default,
50
- parameters: {
51
- layout: "padded",
52
- docs: {
53
- description: {
54
- component: `
55
-
56
- 独立的聊天消息显示组件,用于渲染消息列表和建议问题。
57
-
58
- ## 核心功能
59
-
60
- - 📝 **消息渲染**: 支持文本、Markdown、代码块、函数调用等
61
- - 💭 **思维链**: 支持显示 AI 推理过程
62
- - 🎯 **建议问题**: 显示和点击建议问题
63
- - 📌 **开场白**: 支持显示欢迎消息
64
- - 🔄 **加载状态**: 实时显示 AI 生成状态
65
- - 🎨 **自定义渲染**: 支持自定义消息底部内容
66
-
67
- ## Props
68
-
69
- | 属性 | 类型 | 默认值 | 说明 |
70
- |------|------|--------|------|
71
- | messages | IMessage[] | [] | 消息列表 |
72
- | loading | boolean | false | 是否正在加载 |
73
- | prologue | string | - | 开场白 |
74
- | suggestions | string[] | [] | 建议问题 |
75
- | showFnCallDetail | boolean | false | 显示函数调用详情 |
76
- | footer | (msg) => ReactNode | - | 自定义消息底部 |
77
- | onSubmit | (content) => void | - | 发送消息回调 |
78
- | onStop | () => void | - | 停止生成回调 |
79
- | onClear | () => void | - | 清空消息回调 |
80
- | onSuggest | (text) => void | - | 点击建议回调 |
81
- | onConfirm | (fnCall, confirmed) => void | - | 确认函数调用 |
82
- `
83
- }
84
- }
85
- },
86
- tags: ["autodocs"],
87
- argTypes: {
88
- loading: {
89
- description: "是否正在加载(AI 生成中)",
90
- control: "boolean"
91
- },
92
- showFnCallDetail: {
93
- description: "是否显示函数调用详情",
94
- control: "boolean"
95
- }
96
- }
97
- };
98
- var XAdkChatbot_stories_default = meta;
99
- var mockMessages = [
100
- {
101
- id: "1",
102
- role: "user",
103
- text: "你好"
104
- },
105
- {
106
- id: "2",
107
- role: "bot",
108
- text: "你好!我是 AI 助手,很高兴为你服务。有什么我可以帮助你的吗?",
109
- invocationId: "inv-1"
110
- },
111
- {
112
- id: "3",
113
- role: "user",
114
- text: "介绍一下 React Hooks"
115
- },
116
- {
117
- id: "4",
118
- role: "bot",
119
- text: `React Hooks 是 React 16.8 引入的新特性,它让你在不编写 class 的情况下使用 state 和其他 React 特性。
120
-
121
- ## 常用的 Hooks
122
-
123
- ### 1. useState
124
- 用于在函数组件中添加状态:
125
-
126
- \`\`\`jsx
127
- const [count, setCount] = useState(0);
128
- \`\`\`
129
-
130
- ### 2. useEffect
131
- 用于处理副作用:
132
-
133
- \`\`\`jsx
134
- useEffect(() => {
135
- document.title = \`Count: \${count}\`;
136
- }, [count]);
137
- \`\`\`
138
-
139
- ### 3. useContext
140
- 用于访问 Context:
141
-
142
- \`\`\`jsx
143
- const theme = useContext(ThemeContext);
144
- \`\`\`
145
-
146
- ## 优势
147
-
148
- - ✅ 代码更简洁
149
- - ✅ 逻辑复用更容易
150
- - ✅ 避免 this 相关问题
151
- - ✅ 更好的代码组织`,
152
- invocationId: "inv-2"
153
- },
154
- {
155
- id: "5",
156
- role: "user",
157
- text: "来一段富文本"
158
- },
159
- {
160
- id: "6",
161
- role: "bot",
162
- text: "# 我是标题\n\n我是正文\n\n**我是加粗**\n\n*我是斜体*\n\n<u>我是下划线</u>\n\n- 我是无序列表\n \n- 1\n \n- 2\n \n\n1. 我是有序列表\n \n2. 1\n \n3. 2\n \n\n> 我是引用\n\n[我是链接](https://www.baidu.com)\n\n```\n我是代码库\n```"
163
- }
164
- ];
165
- var 基础用法 = {
166
- render: () => {
167
- const [messages, setMessages] = (0, import_react.useState)(mockMessages);
168
- const [loading, setLoading] = (0, import_react.useState)(false);
169
- (0, import_react.useEffect)(() => {
170
- const userMsg = {
171
- id: Date.now().toString(),
172
- role: "user",
173
- text: "你好",
174
- fileData: [
175
- {
176
- displayName: "06f26c566fe4a3b5eaad678d0d270c97_origin.jpg",
177
- fileUri: "https://ai-platform-test.oss-cn-hangzhou.aliyuncs.com/ZABX/vidfnxlkpzxoa.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260317T083458Z&X-Amz-SignedHeaders=host&X-Amz-Credential=LTAI5tSfMvkvWhU43Ev1cFJo%2F20260317%2Foss-cn-hangzhou%2Fs3%2Faws4_request&X-Amz-Expires=518400&X-Amz-Signature=14439e184614d76f1ca19437f76496a6d24a8aa537a29ebf61fb2af9d3f9b285",
178
- mimeType: "image/jpeg"
179
- },
180
- {
181
- displayName: "06f26c566fe4a3b5eaad678d0d270c98_origin.jpg",
182
- fileUri: "https://ai-platform-test.oss-cn-hangzhou.aliyuncs.com/ZABX/vidfnxlkpzxoa.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260317T083458Z&X-Amz-SignedHeaders=host&X-Amz-Credential=LTAI5tSfMvkvWhU43Ev1cFJo%2F20260317%2Foss-cn-hangzhou%2Fs3%2Faws4_request&X-Amz-Expires=518400&X-Amz-Signature=14439e184614d76f1ca19437f76496a6d24a8aa537a29ebf61fb2af9d3f9b285",
183
- mimeType: "image/jpeg"
184
- }
185
- ]
186
- };
187
- setMessages((prev) => [...prev, userMsg]);
188
- setLoading(true);
189
- setTimeout(() => {
190
- const botMsg = {
191
- id: (Date.now() + 1).toString(),
192
- role: "bot",
193
- text: `这是对 "用户" 的模拟回复。`,
194
- invocationId: `inv-${Date.now()}`
195
- };
196
- setMessages((prev) => [...prev, botMsg]);
197
- setLoading(false);
198
- }, 1e3);
199
- }, []);
200
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
201
- "div",
202
- {
203
- style: {
204
- width: 700,
205
- height: "600px",
206
- padding: "20px",
207
- border: "1px solid #f0f0f0",
208
- borderRadius: "8px",
209
- overflow: "hidden"
210
- },
211
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
212
- import_index.default,
213
- {
214
- messages,
215
- loading,
216
- initialized: true,
217
- style: { width: "670px" }
218
- }
219
- )
220
- }
221
- );
222
- }
223
- };
224
- var 开场白和建议 = {
225
- render: () => {
226
- const [messages, setMessages] = (0, import_react.useState)([]);
227
- const [suggestions, setSuggestions] = (0, import_react.useState)([
228
- "什么是 React Hooks?",
229
- "如何使用 useState?",
230
- "useEffect 的作用是什么?"
231
- ]);
232
- const prologue = "你好!我是 AI 助手,专注于 React 开发相关的问题。";
233
- const handleSuggest = (text) => {
234
- const userMsg = {
235
- id: Date.now().toString(),
236
- role: "user",
237
- text
238
- };
239
- setMessages([userMsg]);
240
- setSuggestions([]);
241
- setTimeout(() => {
242
- const botMsg = {
243
- id: (Date.now() + 1).toString(),
244
- role: "bot",
245
- text: `这是对 "${text}" 的回答...`,
246
- invocationId: `inv-${Date.now()}`
247
- };
248
- setMessages((prev) => [...prev, botMsg]);
249
- }, 1e3);
250
- };
251
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
252
- "div",
253
- {
254
- style: {
255
- width: 700,
256
- height: "600px",
257
- border: "1px solid #f0f0f0",
258
- borderRadius: "8px",
259
- overflow: "hidden"
260
- },
261
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
262
- import_index.default,
263
- {
264
- messages,
265
- loading: false,
266
- initialized: true,
267
- prologue,
268
- suggestions,
269
- onSuggest: handleSuggest
270
- }
271
- )
272
- }
273
- );
274
- }
275
- };
276
- var 流式输出 = {
277
- render: () => {
278
- const [messages, setMessages] = (0, import_react.useState)([
279
- {
280
- id: "1",
281
- role: "user",
282
- text: "给我讲一个故事"
283
- }
284
- ]);
285
- const [loading, setLoading] = (0, import_react.useState)(false);
286
- const handleStart = () => {
287
- setLoading(true);
288
- const fullText = "从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事。讲什么呢?从前有座山,山里有座庙...";
289
- let currentText = "";
290
- let index = 0;
291
- const botMsg = {
292
- id: "2",
293
- role: "bot",
294
- text: "",
295
- invocationId: "inv-1"
296
- };
297
- setMessages((prev) => [...prev, botMsg]);
298
- const interval = setInterval(() => {
299
- if (index < fullText.length) {
300
- currentText += fullText[index];
301
- setMessages((prev) => {
302
- const newMessages = [...prev];
303
- newMessages[newMessages.length - 1] = {
304
- ...botMsg,
305
- text: currentText
306
- };
307
- return newMessages;
308
- });
309
- index++;
310
- } else {
311
- clearInterval(interval);
312
- setLoading(false);
313
- }
314
- }, 50);
315
- };
316
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { width: 700 }, children: [
317
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { marginBottom: "16px" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "primary", onClick: handleStart, disabled: loading, children: "开始流式输出演示" }) }),
318
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
319
- "div",
320
- {
321
- style: {
322
- height: "550px",
323
- border: "1px solid #f0f0f0",
324
- borderRadius: "8px",
325
- overflow: "hidden"
326
- },
327
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
328
- import_index.default,
329
- {
330
- messages,
331
- loading,
332
- initialized: true,
333
- onStop: () => setLoading(false)
334
- }
335
- )
336
- }
337
- )
338
- ] });
339
- }
340
- };
341
- var 自定义Footer = {
342
- render: () => {
343
- const [messages] = (0, import_react.useState)(mockMessages);
344
- const [likedMessages, setLikedMessages] = (0, import_react.useState)(/* @__PURE__ */ new Set());
345
- const handleLike = (messageId) => {
346
- setLikedMessages((prev) => {
347
- const newSet = new Set(prev);
348
- if (newSet.has(messageId)) {
349
- newSet.delete(messageId);
350
- } else {
351
- newSet.add(messageId);
352
- }
353
- return newSet;
354
- });
355
- };
356
- const customFooter = (data) => {
357
- const { message, isLastBotMsg } = data;
358
- if (!isLastBotMsg)
359
- return null;
360
- const isLiked = likedMessages.has(message.id);
361
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { padding: "8px 0" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_antd.Space, { size: "small", children: [
362
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
363
- import_antd.Button,
364
- {
365
- size: "small",
366
- type: isLiked ? "primary" : "text",
367
- onClick: () => handleLike(message.id),
368
- children: isLiked ? "👍 已赞" : "👍 赞"
369
- }
370
- ),
371
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { size: "small", type: "text", children: "👎 踩" }),
372
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { size: "small", type: "text", children: "📋 复制" }),
373
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { size: "small", type: "text", children: "🔄 重新生成" })
374
- ] }) });
375
- };
376
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
377
- "div",
378
- {
379
- style: {
380
- width: 700,
381
- height: "600px",
382
- border: "1px solid #f0f0f0",
383
- borderRadius: "8px",
384
- overflow: "hidden"
385
- },
386
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
387
- import_index.default,
388
- {
389
- messages,
390
- loading: false,
391
- initialized: true,
392
- actions: customFooter
393
- }
394
- )
395
- }
396
- );
397
- }
398
- };
399
- var 函数调用 = {
400
- render: () => {
401
- const messagesWithFunctionCall = [
402
- {
403
- id: "1",
404
- role: "user",
405
- text: "今天北京的天气怎么样?"
406
- },
407
- {
408
- id: "2",
409
- role: "bot",
410
- functionCall: {
411
- id: "call-1",
412
- name: "get_weather",
413
- args: {
414
- city: "北京",
415
- date: "2024-03-05"
416
- }
417
- },
418
- invocationId: "inv-1"
419
- },
420
- {
421
- id: "3",
422
- role: "bot",
423
- text: "根据天气查询,今天北京的天气是晴天,温度 15-25°C,空气质量良好,适合户外活动。",
424
- invocationId: "inv-1"
425
- }
426
- ];
427
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
428
- "div",
429
- {
430
- style: {
431
- width: 700,
432
- height: "600px",
433
- border: "1px solid #f0f0f0",
434
- borderRadius: "8px",
435
- overflow: "hidden"
436
- },
437
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
438
- import_index.default,
439
- {
440
- messages: messagesWithFunctionCall,
441
- loading: false,
442
- initialized: true,
443
- showFnCallDetail: true
444
- }
445
- )
446
- }
447
- );
448
- }
449
- };
450
- var 思维链 = {
451
- render: () => {
452
- const messagesWithThought = [
453
- {
454
- id: "1",
455
- role: "user",
456
- text: "帮我分析一下这个问题"
457
- },
458
- {
459
- id: "2",
460
- role: "bot",
461
- text: "让我分析一下这个问题...",
462
- thought: true,
463
- invocationId: "inv-1"
464
- },
465
- {
466
- id: "3",
467
- role: "bot",
468
- text: "首先,我需要理解问题的核心...",
469
- thought: true,
470
- invocationId: "inv-1"
471
- },
472
- {
473
- id: "4",
474
- role: "bot",
475
- text: "根据分析,我的结论是...(这是最终回答)",
476
- thought: false,
477
- invocationId: "inv-1"
478
- }
479
- ];
480
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
481
- "div",
482
- {
483
- style: {
484
- width: 700,
485
- height: "600px",
486
- border: "1px solid #f0f0f0",
487
- borderRadius: "8px",
488
- overflow: "hidden"
489
- },
490
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
491
- import_index.default,
492
- {
493
- messages: messagesWithThought,
494
- loading: false,
495
- initialized: true
496
- }
497
- )
498
- }
499
- );
500
- }
501
- };
502
- var 代码高亮 = {
503
- render: () => {
504
- const messagesWithCode = [
505
- {
506
- id: "1",
507
- role: "user",
508
- text: "写一个 React 组件"
509
- },
510
- {
511
- id: "2",
512
- role: "bot",
513
- text: `这是一个简单的 React 计数器组件:
514
-
515
- \`\`\`jsx
516
- import React, { useState } from 'react';
517
-
518
- function Counter() {
519
- const [count, setCount] = useState(0);
520
-
521
- return (
522
- <div>
523
- <h1>Count: {count}</h1>
524
- <button onClick={() => setCount(count + 1)}>
525
- +1
526
- </button>
527
- <button onClick={() => setCount(count - 1)}>
528
- -1
529
- </button>
530
- </div>
531
- );
532
- }
533
-
534
- export default Counter;
535
- \`\`\`
536
-
537
- 这个组件使用了 \`useState\` Hook 来管理计数器状态。`,
538
- invocationId: "inv-1"
539
- }
540
- ];
541
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
542
- "div",
543
- {
544
- style: {
545
- width: 700,
546
- height: "600px",
547
- border: "1px solid #f0f0f0",
548
- borderRadius: "8px",
549
- overflow: "hidden"
550
- },
551
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
552
- import_index.default,
553
- {
554
- messages: messagesWithCode,
555
- loading: false,
556
- initialized: true
557
- }
558
- )
559
- }
560
- );
561
- }
562
- };
563
- var 多轮对话 = {
564
- render: () => {
565
- const multiRoundMessages = [
566
- {
567
- id: "1",
568
- role: "user",
569
- text: "React 是什么?"
570
- },
571
- {
572
- id: "2",
573
- role: "bot",
574
- text: "React 是一个用于构建用户界面的 JavaScript 库。",
575
- invocationId: "inv-1"
576
- },
577
- {
578
- id: "3",
579
- role: "user",
580
- text: "它有什么特点?"
581
- },
582
- {
583
- id: "4",
584
- role: "bot",
585
- text: "React 的主要特点包括:\n1. 组件化\n2. 虚拟 DOM\n3. 单向数据流\n4. JSX 语法",
586
- invocationId: "inv-2"
587
- },
588
- {
589
- id: "5",
590
- role: "user",
591
- text: "什么是虚拟 DOM?"
592
- },
593
- {
594
- id: "6",
595
- role: "bot",
596
- text: "虚拟 DOM 是真实 DOM 的 JavaScript 对象表示,React 通过对比虚拟 DOM 的变化来高效更新真实 DOM。",
597
- invocationId: "inv-3"
598
- }
599
- ];
600
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
601
- "div",
602
- {
603
- style: {
604
- width: 700,
605
- height: "600px",
606
- border: "1px solid #f0f0f0",
607
- borderRadius: "8px",
608
- overflow: "hidden"
609
- },
610
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
611
- import_index.default,
612
- {
613
- messages: multiRoundMessages,
614
- loading: false,
615
- initialized: true
616
- }
617
- )
618
- }
619
- );
620
- }
621
- };
622
- // Annotate the CommonJS export names for ESM import in node:
623
- 0 && (module.exports = {
624
- 代码高亮,
625
- 函数调用,
626
- 基础用法,
627
- 多轮对话,
628
- 开场白和建议,
629
- 思维链,
630
- 流式输出,
631
- 自定义Footer
632
- });
633
- //# sourceMappingURL=XAdkChatbot.stories.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/XAdkChatbot/XAdkChatbot.stories.tsx"],
4
- "sourcesContent": ["import React, { useEffect, useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { Button, Space } from \"antd\";\nimport XAdkChatbot from \"./index\";\nimport type { IMessage } from \"@/types\";\n\nconst meta: Meta<typeof XAdkChatbot> = {\n title: \"AI组件/XAdkChatbot 聊天消息组件\",\n component: XAdkChatbot,\n parameters: {\n layout: \"padded\",\n docs: {\n description: {\n component: `\n\n独立的聊天消息显示组件,用于渲染消息列表和建议问题。\n\n## 核心功能\n\n- 📝 **消息渲染**: 支持文本、Markdown、代码块、函数调用等\n- 💭 **思维链**: 支持显示 AI 推理过程\n- 🎯 **建议问题**: 显示和点击建议问题\n- 📌 **开场白**: 支持显示欢迎消息\n- 🔄 **加载状态**: 实时显示 AI 生成状态\n- 🎨 **自定义渲染**: 支持自定义消息底部内容\n\n## Props\n\n| 属性 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| messages | IMessage[] | [] | 消息列表 |\n| loading | boolean | false | 是否正在加载 |\n| prologue | string | - | 开场白 |\n| suggestions | string[] | [] | 建议问题 |\n| showFnCallDetail | boolean | false | 显示函数调用详情 |\n| footer | (msg) => ReactNode | - | 自定义消息底部 |\n| onSubmit | (content) => void | - | 发送消息回调 |\n| onStop | () => void | - | 停止生成回调 |\n| onClear | () => void | - | 清空消息回调 |\n| onSuggest | (text) => void | - | 点击建议回调 |\n| onConfirm | (fnCall, confirmed) => void | - | 确认函数调用 |\n `,\n },\n },\n },\n tags: [\"autodocs\"],\n argTypes: {\n loading: {\n description: \"是否正在加载(AI 生成中)\",\n control: \"boolean\",\n },\n showFnCallDetail: {\n description: \"是否显示函数调用详情\",\n control: \"boolean\",\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// Mock 消息数据\nconst mockMessages: IMessage[] = [\n {\n id: \"1\",\n role: \"user\",\n text: \"你好\",\n },\n {\n id: \"2\",\n role: \"bot\",\n text: \"你好!我是 AI 助手,很高兴为你服务。有什么我可以帮助你的吗?\",\n invocationId: \"inv-1\",\n },\n {\n id: \"3\",\n role: \"user\",\n text: \"介绍一下 React Hooks\",\n },\n {\n id: \"4\",\n role: \"bot\",\n text: `React Hooks 是 React 16.8 引入的新特性,它让你在不编写 class 的情况下使用 state 和其他 React 特性。\n\n## 常用的 Hooks\n\n### 1. useState\n用于在函数组件中添加状态:\n\n\\`\\`\\`jsx\nconst [count, setCount] = useState(0);\n\\`\\`\\`\n\n### 2. useEffect\n用于处理副作用:\n\n\\`\\`\\`jsx\nuseEffect(() => {\n document.title = \\`Count: \\${count}\\`;\n}, [count]);\n\\`\\`\\`\n\n### 3. useContext\n用于访问 Context:\n\n\\`\\`\\`jsx\nconst theme = useContext(ThemeContext);\n\\`\\`\\`\n\n## 优势\n\n- ✅ 代码更简洁\n- ✅ 逻辑复用更容易\n- ✅ 避免 this 相关问题\n- ✅ 更好的代码组织`,\n invocationId: \"inv-2\",\n },\n {\n id: \"5\",\n role: \"user\",\n text: \"来一段富文本\",\n },\n {\n id: \"6\",\n role: \"bot\",\n text: \"# 我是标题\\n\\n我是正文\\n\\n**我是加粗**\\n\\n*我是斜体*\\n\\n<u>我是下划线</u>\\n\\n- 我是无序列表\\n \\n- 1\\n \\n- 2\\n \\n\\n1. 我是有序列表\\n \\n2. 1\\n \\n3. 2\\n \\n\\n> 我是引用\\n\\n[我是链接](https://www.baidu.com)\\n\\n```\\n我是代码库\\n```\",\n },\n];\n\n// ============================================\n// 示例 1: 基础用法\n// ============================================\nexport const 基础用法: Story = {\n render: () => {\n const [messages, setMessages] = useState<IMessage[]>(mockMessages);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const userMsg: IMessage = {\n id: Date.now().toString(),\n role: \"user\",\n text: \"你好\",\n fileData: [\n {\n displayName: \"06f26c566fe4a3b5eaad678d0d270c97_origin.jpg\",\n fileUri:\n \"https://ai-platform-test.oss-cn-hangzhou.aliyuncs.com/ZABX/vidfnxlkpzxoa.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260317T083458Z&X-Amz-SignedHeaders=host&X-Amz-Credential=LTAI5tSfMvkvWhU43Ev1cFJo%2F20260317%2Foss-cn-hangzhou%2Fs3%2Faws4_request&X-Amz-Expires=518400&X-Amz-Signature=14439e184614d76f1ca19437f76496a6d24a8aa537a29ebf61fb2af9d3f9b285\",\n mimeType: \"image/jpeg\",\n },\n {\n displayName: \"06f26c566fe4a3b5eaad678d0d270c98_origin.jpg\",\n fileUri:\n \"https://ai-platform-test.oss-cn-hangzhou.aliyuncs.com/ZABX/vidfnxlkpzxoa.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260317T083458Z&X-Amz-SignedHeaders=host&X-Amz-Credential=LTAI5tSfMvkvWhU43Ev1cFJo%2F20260317%2Foss-cn-hangzhou%2Fs3%2Faws4_request&X-Amz-Expires=518400&X-Amz-Signature=14439e184614d76f1ca19437f76496a6d24a8aa537a29ebf61fb2af9d3f9b285\",\n mimeType: \"image/jpeg\",\n },\n ],\n };\n setMessages((prev) => [...prev, userMsg]);\n\n setLoading(true);\n setTimeout(() => {\n const botMsg: IMessage = {\n id: (Date.now() + 1).toString(),\n role: \"bot\",\n text: `这是对 \"用户\" 的模拟回复。`,\n invocationId: `inv-${Date.now()}`,\n };\n setMessages((prev) => [...prev, botMsg]);\n setLoading(false);\n }, 1000);\n }, []);\n\n return (\n <div\n style={{\n width: 700,\n height: \"600px\",\n padding: \"20px\",\n border: \"1px solid #f0f0f0\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n }}\n >\n <XAdkChatbot\n messages={messages}\n loading={loading}\n initialized={true}\n style={{ width: \"670px\" }}\n />\n </div>\n );\n },\n};\n\n// ============================================\n// 示例 2: 开场白和建议问题\n// ============================================\nexport const 开场白和建议: Story = {\n render: () => {\n const [messages, setMessages] = useState<IMessage[]>([]);\n const [suggestions, setSuggestions] = useState([\n \"什么是 React Hooks?\",\n \"如何使用 useState?\",\n \"useEffect 的作用是什么?\",\n ]);\n\n const prologue = \"你好!我是 AI 助手,专注于 React 开发相关的问题。\";\n\n const handleSuggest = (text: string) => {\n const userMsg: IMessage = {\n id: Date.now().toString(),\n role: \"user\",\n text,\n };\n setMessages([userMsg]);\n setSuggestions([]);\n\n setTimeout(() => {\n const botMsg: IMessage = {\n id: (Date.now() + 1).toString(),\n role: \"bot\",\n text: `这是对 \"${text}\" 的回答...`,\n invocationId: `inv-${Date.now()}`,\n };\n setMessages((prev) => [...prev, botMsg]);\n }, 1000);\n };\n\n return (\n <div\n style={{\n width: 700,\n height: \"600px\",\n border: \"1px solid #f0f0f0\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n }}\n >\n <XAdkChatbot\n messages={messages}\n loading={false}\n initialized={true}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={handleSuggest}\n />\n </div>\n );\n },\n};\n\n// ============================================\n// 示例 3: 流式输出\n// ============================================\nexport const 流式输出: Story = {\n render: () => {\n const [messages, setMessages] = useState<IMessage[]>([\n {\n id: \"1\",\n role: \"user\",\n text: \"给我讲一个故事\",\n },\n ]);\n const [loading, setLoading] = useState(false);\n\n const handleStart = () => {\n setLoading(true);\n\n const fullText =\n \"从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事。讲什么呢?从前有座山,山里有座庙...\";\n let currentText = \"\";\n let index = 0;\n\n const botMsg: IMessage = {\n id: \"2\",\n role: \"bot\",\n text: \"\",\n invocationId: \"inv-1\",\n };\n\n setMessages((prev) => [...prev, botMsg]);\n\n const interval = setInterval(() => {\n if (index < fullText.length) {\n currentText += fullText[index];\n setMessages((prev) => {\n const newMessages = [...prev];\n newMessages[newMessages.length - 1] = {\n ...botMsg,\n text: currentText,\n };\n return newMessages;\n });\n index++;\n } else {\n clearInterval(interval);\n setLoading(false);\n }\n }, 50);\n };\n\n return (\n <div style={{ width: 700 }}>\n <div style={{ marginBottom: \"16px\" }}>\n <Button type=\"primary\" onClick={handleStart} disabled={loading}>\n 开始流式输出演示\n </Button>\n </div>\n <div\n style={{\n height: \"550px\",\n border: \"1px solid #f0f0f0\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n }}\n >\n <XAdkChatbot\n messages={messages}\n loading={loading}\n initialized={true}\n onStop={() => setLoading(false)}\n />\n </div>\n </div>\n );\n },\n};\n\n// ============================================\n// 示例 4: 自定义消息 Footer\n// ============================================\nexport const 自定义Footer: Story = {\n render: () => {\n const [messages] = useState<IMessage[]>(mockMessages);\n const [likedMessages, setLikedMessages] = useState<Set<string>>(new Set());\n\n const handleLike = (messageId: string) => {\n setLikedMessages((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(messageId)) {\n newSet.delete(messageId);\n } else {\n newSet.add(messageId);\n }\n return newSet;\n });\n };\n\n const customFooter = (data: any) => {\n const { message, isLastBotMsg } = data;\n\n if (!isLastBotMsg) return null;\n\n const isLiked = likedMessages.has(message.id);\n\n return (\n <div style={{ padding: \"8px 0\" }}>\n <Space size=\"small\">\n <Button\n size=\"small\"\n type={isLiked ? \"primary\" : \"text\"}\n onClick={() => handleLike(message.id)}\n >\n {isLiked ? \"👍 已赞\" : \"👍 赞\"}\n </Button>\n <Button size=\"small\" type=\"text\">\n 👎 踩\n </Button>\n <Button size=\"small\" type=\"text\">\n 📋 复制\n </Button>\n <Button size=\"small\" type=\"text\">\n 🔄 重新生成\n </Button>\n </Space>\n </div>\n );\n };\n\n return (\n <div\n style={{\n width: 700,\n height: \"600px\",\n border: \"1px solid #f0f0f0\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n }}\n >\n <XAdkChatbot\n messages={messages}\n loading={false}\n initialized={true}\n actions={customFooter}\n />\n </div>\n );\n },\n};\n\n// ============================================\n// 示例 5: 函数调用\n// ============================================\nexport const 函数调用: Story = {\n render: () => {\n const messagesWithFunctionCall: IMessage[] = [\n {\n id: \"1\",\n role: \"user\",\n text: \"今天北京的天气怎么样?\",\n },\n {\n id: \"2\",\n role: \"bot\",\n functionCall: {\n id: \"call-1\",\n name: \"get_weather\",\n args: {\n city: \"北京\",\n date: \"2024-03-05\",\n },\n },\n invocationId: \"inv-1\",\n },\n {\n id: \"3\",\n role: \"bot\",\n text: \"根据天气查询,今天北京的天气是晴天,温度 15-25°C,空气质量良好,适合户外活动。\",\n invocationId: \"inv-1\",\n },\n ];\n\n return (\n <div\n style={{\n width: 700,\n height: \"600px\",\n border: \"1px solid #f0f0f0\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n }}\n >\n <XAdkChatbot\n messages={messagesWithFunctionCall}\n loading={false}\n initialized={true}\n showFnCallDetail={true}\n />\n </div>\n );\n },\n};\n\n// ============================================\n// 示例 6: 思维链\n// ============================================\nexport const 思维链: Story = {\n render: () => {\n const messagesWithThought: IMessage[] = [\n {\n id: \"1\",\n role: \"user\",\n text: \"帮我分析一下这个问题\",\n },\n {\n id: \"2\",\n role: \"bot\",\n text: \"让我分析一下这个问题...\",\n thought: true,\n invocationId: \"inv-1\",\n },\n {\n id: \"3\",\n role: \"bot\",\n text: \"首先,我需要理解问题的核心...\",\n thought: true,\n invocationId: \"inv-1\",\n },\n {\n id: \"4\",\n role: \"bot\",\n text: \"根据分析,我的结论是...(这是最终回答)\",\n thought: false,\n invocationId: \"inv-1\",\n },\n ];\n\n return (\n <div\n style={{\n width: 700,\n height: \"600px\",\n border: \"1px solid #f0f0f0\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n }}\n >\n <XAdkChatbot\n messages={messagesWithThought}\n loading={false}\n initialized={true}\n />\n </div>\n );\n },\n};\n\n// ============================================\n// 示例 7: 代码高亮\n// ============================================\nexport const 代码高亮: Story = {\n render: () => {\n const messagesWithCode: IMessage[] = [\n {\n id: \"1\",\n role: \"user\",\n text: \"写一个 React 组件\",\n },\n {\n id: \"2\",\n role: \"bot\",\n text: `这是一个简单的 React 计数器组件:\n\n\\`\\`\\`jsx\nimport React, { useState } from 'react';\n\nfunction Counter() {\n const [count, setCount] = useState(0);\n\n return (\n <div>\n <h1>Count: {count}</h1>\n <button onClick={() => setCount(count + 1)}>\n +1\n </button>\n <button onClick={() => setCount(count - 1)}>\n -1\n </button>\n </div>\n );\n}\n\nexport default Counter;\n\\`\\`\\`\n\n这个组件使用了 \\`useState\\` Hook 来管理计数器状态。`,\n invocationId: \"inv-1\",\n },\n ];\n\n return (\n <div\n style={{\n width: 700,\n height: \"600px\",\n border: \"1px solid #f0f0f0\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n }}\n >\n <XAdkChatbot\n messages={messagesWithCode}\n loading={false}\n initialized={true}\n />\n </div>\n );\n },\n};\n\n// ============================================\n// 示例 8: 多轮对话\n// ============================================\nexport const 多轮对话: Story = {\n render: () => {\n const multiRoundMessages: IMessage[] = [\n {\n id: \"1\",\n role: \"user\",\n text: \"React 是什么?\",\n },\n {\n id: \"2\",\n role: \"bot\",\n text: \"React 是一个用于构建用户界面的 JavaScript 库。\",\n invocationId: \"inv-1\",\n },\n {\n id: \"3\",\n role: \"user\",\n text: \"它有什么特点?\",\n },\n {\n id: \"4\",\n role: \"bot\",\n text: \"React 的主要特点包括:\\n1. 组件化\\n2. 虚拟 DOM\\n3. 单向数据流\\n4. JSX 语法\",\n invocationId: \"inv-2\",\n },\n {\n id: \"5\",\n role: \"user\",\n text: \"什么是虚拟 DOM?\",\n },\n {\n id: \"6\",\n role: \"bot\",\n text: \"虚拟 DOM 是真实 DOM 的 JavaScript 对象表示,React 通过对比虚拟 DOM 的变化来高效更新真实 DOM。\",\n invocationId: \"inv-3\",\n },\n ];\n\n return (\n <div\n style={{\n width: 700,\n height: \"600px\",\n border: \"1px solid #f0f0f0\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n }}\n >\n <XAdkChatbot\n messages={multiRoundMessages}\n loading={false}\n initialized={true}\n />\n </div>\n );\n },\n};\n"],
5
- "mappings": "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",
6
- "names": ["XAdkChatbot"]
7
- }