@ai-group/chat-sdk 2.0.3 → 2.1.0
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/cjs/client/base.d.ts +2 -2
- package/dist/cjs/client/base.js.map +1 -1
- package/dist/cjs/components/DislikeFeedback.js +16 -1
- package/dist/cjs/components/DislikeFeedback.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.d.ts +6 -0
- package/dist/cjs/components/{XAiWebSDKWrapper.js → XAdkChatbot/XAdkChatbot.stories.js} +29 -40
- package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +9 -0
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +158 -0
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts +40 -0
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js +59 -0
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +6 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +95 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.d.ts +8 -0
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.js +49 -0
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/index.d.ts +4 -0
- package/dist/cjs/components/XAdkChatbot/index.js +232 -0
- package/dist/cjs/components/XAdkChatbot/index.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/styles.d.ts +51 -0
- package/dist/cjs/components/XAdkChatbot/styles.js +160 -0
- package/dist/cjs/components/XAdkChatbot/styles.js.map +7 -0
- package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.d.ts +7 -0
- package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js +144 -0
- package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +7 -0
- package/dist/cjs/components/XAdkWebProvider/index.d.ts +4 -0
- package/dist/cjs/components/XAdkWebProvider/index.js +349 -0
- package/dist/cjs/components/XAdkWebProvider/index.js.map +7 -0
- package/dist/cjs/components/XAdkWebProvider/styles.d.ts +37 -0
- package/dist/cjs/components/XAdkWebProvider/styles.js +44 -0
- package/dist/cjs/components/XAdkWebProvider/styles.js.map +7 -0
- package/dist/cjs/components/XAiChatbot/index.js +27 -7
- package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAiChatbot/styles.js +31 -0
- package/dist/cjs/components/XAiChatbot/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/XAiConversations.stories.js +1 -0
- package/dist/cjs/components/XAiConversations/XAiConversations.stories.js.map +2 -2
- package/dist/cjs/components/XAiJsonView/index.d.ts +8 -0
- package/dist/cjs/components/XAiJsonView/index.js +81 -0
- package/dist/cjs/components/XAiJsonView/index.js.map +7 -0
- package/dist/cjs/components/XAiJsonView/styles.d.ts +39 -0
- package/dist/cjs/components/XAiJsonView/styles.js +58 -0
- package/dist/cjs/components/XAiJsonView/styles.js.map +7 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +1 -1
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +1 -1
- package/dist/cjs/components/XAiSender/index.js +23 -17
- package/dist/cjs/components/XAiSender/index.js.map +2 -2
- package/dist/cjs/components/XAiSender/styles.js +0 -1
- package/dist/cjs/components/XAiSender/styles.js.map +2 -2
- package/dist/cjs/context/AiProviderContext.d.ts +3 -2
- package/dist/cjs/context/AiProviderContext.js.map +1 -1
- package/dist/cjs/hooks/useADKChat.d.ts +38 -0
- package/dist/cjs/hooks/useADKChat.js +595 -0
- package/dist/cjs/hooks/useADKChat.js.map +7 -0
- package/dist/cjs/hooks/useAgentGenerator.js +6 -6
- package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
- package/dist/cjs/hooks/useEventStreamRequest.js +6 -3
- package/dist/cjs/hooks/useEventStreamRequest.js.map +2 -2
- package/dist/cjs/index.d.ts +1 -2
- package/dist/cjs/index.js +0 -3
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/services/api.d.ts +36 -19
- package/dist/cjs/services/api.js +7 -7
- package/dist/cjs/services/api.js.map +2 -2
- package/dist/cjs/types/XAdkChatbot.d.ts +197 -0
- package/dist/cjs/types/XAdkChatbot.js +18 -0
- package/dist/cjs/types/XAdkChatbot.js.map +7 -0
- package/dist/cjs/types/XAdkProvider.d.ts +117 -0
- package/dist/cjs/types/XAdkProvider.js +18 -0
- package/dist/cjs/types/XAdkProvider.js.map +7 -0
- package/dist/cjs/types/XAiChatbot.d.ts +2 -2
- package/dist/cjs/types/XAiChatbot.js.map +1 -1
- package/dist/cjs/types/XAiConversations.d.ts +2 -2
- package/dist/cjs/types/XAiConversations.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/providerManager.d.ts +7 -6
- package/dist/cjs/utils/providerManager.js.map +2 -2
- package/dist/cjs/utils/umdEntry.d.ts +6 -8
- package/dist/cjs/utils/umdEntry.js +4 -18
- package/dist/cjs/utils/umdEntry.js.map +3 -3
- package/dist/esm/client/base.d.ts +2 -2
- package/dist/esm/client/base.js.map +1 -1
- package/dist/esm/components/DislikeFeedback.js +18 -5
- package/dist/esm/components/DislikeFeedback.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.d.ts +6 -0
- package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js +21 -0
- package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +9 -0
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +183 -0
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts +40 -0
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js +14 -0
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +6 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +70 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.d.ts +8 -0
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.js +32 -0
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/index.d.ts +4 -0
- package/dist/esm/components/XAdkChatbot/index.js +280 -0
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/styles.d.ts +51 -0
- package/dist/esm/components/XAdkChatbot/styles.js +25 -0
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -0
- package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.d.ts +7 -0
- package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js +148 -0
- package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -0
- package/dist/esm/components/XAdkWebProvider/index.d.ts +4 -0
- package/dist/esm/components/XAdkWebProvider/index.js +447 -0
- package/dist/esm/components/XAdkWebProvider/index.js.map +1 -0
- package/dist/esm/components/XAdkWebProvider/styles.d.ts +37 -0
- package/dist/esm/components/XAdkWebProvider/styles.js +11 -0
- package/dist/esm/components/XAdkWebProvider/styles.js.map +1 -0
- package/dist/esm/components/XAiChatbot/index.js +39 -21
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiChatbot/styles.js +1 -1
- package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/XAiConversations.stories.js +3 -3
- package/dist/esm/components/XAiConversations/XAiConversations.stories.js.map +1 -1
- package/dist/esm/components/XAiJsonView/index.d.ts +8 -0
- package/dist/esm/components/XAiJsonView/index.js +44 -0
- package/dist/esm/components/XAiJsonView/index.js.map +1 -0
- package/dist/esm/components/XAiJsonView/styles.d.ts +39 -0
- package/dist/esm/components/XAiJsonView/styles.js +19 -0
- package/dist/esm/components/XAiJsonView/styles.js.map +1 -0
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js +1 -1
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
- package/dist/esm/components/XAiSender/index.js +2 -2
- package/dist/esm/components/XAiSender/index.js.map +1 -1
- package/dist/esm/components/XAiSender/styles.js +1 -1
- package/dist/esm/components/XAiSender/styles.js.map +1 -1
- package/dist/esm/context/AiProviderContext.d.ts +3 -2
- package/dist/esm/context/AiProviderContext.js.map +1 -1
- package/dist/esm/hooks/useADKChat.d.ts +38 -0
- package/dist/esm/hooks/useADKChat.js +855 -0
- package/dist/esm/hooks/useADKChat.js.map +1 -0
- package/dist/esm/hooks/useAgentGenerator.js +11 -10
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/hooks/useEventStreamRequest.js +5 -2
- package/dist/esm/hooks/useEventStreamRequest.js.map +1 -1
- package/dist/esm/index.d.ts +1 -2
- package/dist/esm/index.js +1 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/api.d.ts +36 -19
- package/dist/esm/services/api.js +8 -8
- package/dist/esm/services/api.js.map +1 -1
- package/dist/esm/types/XAdkChatbot.d.ts +197 -0
- package/dist/esm/types/XAdkChatbot.js +2 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -0
- package/dist/esm/types/XAdkProvider.d.ts +117 -0
- package/dist/esm/types/XAdkProvider.js +2 -0
- package/dist/esm/types/XAdkProvider.js.map +1 -0
- package/dist/esm/types/XAiChatbot.d.ts +2 -2
- package/dist/esm/types/XAiChatbot.js.map +1 -1
- package/dist/esm/types/XAiConversations.d.ts +2 -2
- package/dist/esm/types/XAiConversations.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/providerManager.d.ts +7 -6
- package/dist/esm/utils/providerManager.js.map +1 -1
- package/dist/esm/utils/umdEntry.d.ts +6 -8
- package/dist/esm/utils/umdEntry.js +8 -37
- package/dist/esm/utils/umdEntry.js.map +1 -1
- package/dist/umd/chat-sdk.min.css +1 -0
- package/dist/umd/chat-sdk.min.js +1 -1
- package/dist/umd/static/KaTeX_AMS-Regular.1608a09b.woff +0 -0
- package/dist/umd/static/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
- package/dist/umd/static/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
- package/dist/umd/static/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
- package/dist/umd/static/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
- package/dist/umd/static/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
- package/dist/umd/static/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
- package/dist/umd/static/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
- package/dist/umd/static/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
- package/dist/umd/static/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
- package/dist/umd/static/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
- package/dist/umd/static/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
- package/dist/umd/static/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
- package/dist/umd/static/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
- package/dist/umd/static/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
- package/dist/umd/static/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
- package/dist/umd/static/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
- package/dist/umd/static/KaTeX_Main-Bold.d181c465.woff +0 -0
- package/dist/umd/static/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
- package/dist/umd/static/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
- package/dist/umd/static/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
- package/dist/umd/static/KaTeX_Main-Italic.47373d1e.ttf +0 -0
- package/dist/umd/static/KaTeX_Main-Italic.8916142b.woff2 +0 -0
- package/dist/umd/static/KaTeX_Main-Italic.9024d815.woff +0 -0
- package/dist/umd/static/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
- package/dist/umd/static/KaTeX_Main-Regular.7f51fe03.woff +0 -0
- package/dist/umd/static/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
- package/dist/umd/static/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
- package/dist/umd/static/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
- package/dist/umd/static/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
- package/dist/umd/static/KaTeX_Math-Italic.5295ba48.woff +0 -0
- package/dist/umd/static/KaTeX_Math-Italic.939bc644.ttf +0 -0
- package/dist/umd/static/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Regular.74048478.woff +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
- package/dist/umd/static/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
- package/dist/umd/static/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
- package/dist/umd/static/KaTeX_Script-Regular.07505710.woff +0 -0
- package/dist/umd/static/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
- package/dist/umd/static/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
- package/dist/umd/static/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
- package/dist/umd/static/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
- package/dist/umd/static/KaTeX_Size2-Regular.57727022.woff +0 -0
- package/dist/umd/static/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
- package/dist/umd/static/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
- package/dist/umd/static/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
- package/dist/umd/static/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
- package/dist/umd/static/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
- package/dist/umd/static/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
- package/dist/umd/static/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
- package/dist/umd/static/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
- package/dist/umd/static/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
- package/dist/umd/static/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
- package/dist/umd/static/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
- package/package.json +26 -19
- package/dist/cjs/components/XAiWebSDKWrapper.d.ts +0 -9
- package/dist/cjs/components/XAiWebSDKWrapper.js.map +0 -7
- package/dist/esm/components/XAiWebSDKWrapper.d.ts +0 -9
- package/dist/esm/components/XAiWebSDKWrapper.js +0 -45
- package/dist/esm/components/XAiWebSDKWrapper.js.map +0 -1
|
@@ -212,8 +212,10 @@ var XAiChatbot = (props) => {
|
|
|
212
212
|
const rolesObject = {
|
|
213
213
|
assistant: {
|
|
214
214
|
placement: "start",
|
|
215
|
-
avatar:
|
|
216
|
-
|
|
215
|
+
avatar: () => {
|
|
216
|
+
return avatar || /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.UserOutlined, { className: (0, import_clsx.default)(styles.bg("#fde3cf"), styles.userAvatar) });
|
|
217
|
+
},
|
|
218
|
+
typing: { step: 5, interval: 20, effect: "typing" },
|
|
217
219
|
style: {
|
|
218
220
|
maxWidth: 600
|
|
219
221
|
},
|
|
@@ -223,14 +225,18 @@ var XAiChatbot = (props) => {
|
|
|
223
225
|
},
|
|
224
226
|
user: {
|
|
225
227
|
placement: "end",
|
|
226
|
-
avatar:
|
|
228
|
+
avatar: () => {
|
|
229
|
+
return userAvatar || /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.UserOutlined, { className: (0, import_clsx.default)(styles.bg("#87d068"), styles.userAvatar) });
|
|
230
|
+
},
|
|
227
231
|
classNames: {
|
|
228
232
|
content: "user-content"
|
|
229
233
|
}
|
|
230
234
|
},
|
|
231
235
|
suggestion: {
|
|
232
236
|
placement: "start",
|
|
233
|
-
avatar:
|
|
237
|
+
avatar: () => {
|
|
238
|
+
return avatar || /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.UserOutlined, { className: (0, import_clsx.default)(styles.bg("#fde3cf"), styles.userAvatar) });
|
|
239
|
+
},
|
|
234
240
|
variant: "borderless"
|
|
235
241
|
}
|
|
236
242
|
};
|
|
@@ -277,7 +283,7 @@ var XAiChatbot = (props) => {
|
|
|
277
283
|
import_x.Bubble.List,
|
|
278
284
|
{
|
|
279
285
|
id: chatId,
|
|
280
|
-
|
|
286
|
+
role: rolesObject,
|
|
281
287
|
className: styles.messageList,
|
|
282
288
|
items: messages.map((msg) => {
|
|
283
289
|
const { id, role, status, type, execute = [], thinks = "", extra = { noFooter: false }, stepContent } = msg;
|
|
@@ -353,7 +359,7 @@ var XAiChatbot = (props) => {
|
|
|
353
359
|
vertical: true,
|
|
354
360
|
items: msg.content,
|
|
355
361
|
onItemClick: (info) => {
|
|
356
|
-
onSuggestMessageClick == null ? void 0 : onSuggestMessageClick(info.data, id);
|
|
362
|
+
onSuggestMessageClick == null ? void 0 : onSuggestMessageClick(info == null ? void 0 : info.data, id);
|
|
357
363
|
if (info.data.description) {
|
|
358
364
|
onSend == null ? void 0 : onSend({ text: info.data.description });
|
|
359
365
|
}
|
|
@@ -366,7 +372,21 @@ var XAiChatbot = (props) => {
|
|
|
366
372
|
};
|
|
367
373
|
if (!extra.noFooter) {
|
|
368
374
|
bubbleContent.footer = () => {
|
|
369
|
-
|
|
375
|
+
var _a;
|
|
376
|
+
const msgFiles = ((_a = msg.content) == null ? void 0 : _a.files) || [];
|
|
377
|
+
if (role === import_XAiMessage.MessageRole.user && msgFiles.length) {
|
|
378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Flex, { gap: 8, wrap: true, justify: "flex-end", style: { maxWidth: 600 }, children: msgFiles.map((f) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
379
|
+
import_x.FileCard,
|
|
380
|
+
{
|
|
381
|
+
name: f.fileName,
|
|
382
|
+
size: f.fileSize
|
|
383
|
+
},
|
|
384
|
+
f.fileId
|
|
385
|
+
)) });
|
|
386
|
+
}
|
|
387
|
+
if (role === import_XAiMessage.MessageRole.assistant && status !== import_XAiMessage.MessageStatus.failed) {
|
|
388
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MessageFooter, { data: msg, lastMessage: lastMessageId.current === id });
|
|
389
|
+
}
|
|
370
390
|
};
|
|
371
391
|
}
|
|
372
392
|
return bubbleContent;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiChatbot/index.tsx"],
|
|
4
|
-
"sourcesContent": ["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Tooltip,\n GetProp,\n} from 'antd';\nimport {\n Bubble,\n Prompts,\n} from '@ant-design/x';\nimport {\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport type { Attachment } from '@ant-design/x/es/attachments';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport thinkIcon from '@/assets/think.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowDownBlue from '@/assets/arrow-down-blue.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\nimport XAiSender from '../XAiSender';\nimport type { SendContent } from '@/types';\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n execute: any[];\n thinks: string;\n}\n\n// ActionHeader 组件\nexport const ActionHeader: React.FC<ActionHeaderProps> = ({ execute = [], thinks = '' }) => {\n const styles = useStyles();\n const [expanded, setExpanded] = useState(true);\n const [executeExpanded, setExecuteExpanded] = useState(false);\n\n // 关键修复:只要有思考内容或执行过程就显示,不要同时要求两者都有\n if (!thinks && (!execute || execute.length === 0)) return null;\n\n const last = execute[execute.length - 1] || {};\n const { name } = last;\n const icon = last?.icon || last?.extra?.icon;\n\n return (\n <div className={styles.actionHeaderWrapper}>\n {!expanded && (\n <div className={styles.actionTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} />\n <span className={styles.flex1}>运行过程</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n )}\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={thinkIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n\n {thinks && (\n <div className={styles.actionDetailContent} style={{ whiteSpace: 'pre-line' }}>\n {thinks}\n </div>\n )}\n\n {execute && execute.length > 0 && (\n <>\n {!executeExpanded && (\n <div className={styles.executeHiddenWrapper} onClick={() => setExecuteExpanded((v) => !v)}>\n {icon && <img src={icon} alt=\"icon\" className={styles.h(15)} />}\n <span className={styles.flex1}>{name}</span>\n <img alt=\"工具icon\" src={arrowDownBlue} className={styles.w('16px')} />\n </div>\n )}\n {executeExpanded && (\n <div className={styles.executeWrapper}>\n <div className={styles.executeTitle} onClick={() => setExecuteExpanded((v) => !v)}>\n <img src={groupIcon} alt=\"icon\" className={styles.executeHeaderIcon} />\n <span className={styles.flex1}>隐藏运行详情</span>\n <img alt=\"展开详情icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n <div className={styles.executeContent}>\n {execute.map((action: any, idx: number) => {\n const thinkIcon2 = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n {thinkIcon2 && <img src={thinkIcon2} alt=\"icon\" className={styles.actionHeaderIcon} />}\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n )}\n </div>\n );\n};\n\n// 默认消息功能区\nexport const defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n const styles = useStyles();\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n clearBtnShow = true,\n inputShow = true,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n footerTips = '',\n empty = null,\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n providerId,\n // 消息顶部\n messageTop,\n enableUpload,\n uploadRequest,\n } = mergedProps as XAiChatbotProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [content, setContent] = useState<string>(text); // 输入框文本\n const [files, setFiles] = useState<Attachment[]>([]);\n const lastMessageId = useRef<string>('');\n const isScriptScrolling = useRef<boolean>(false);\n const chatId = providerId ? `za-chatbot-container-${providerId}` : 'za-chatbot-container';\n\n // 滚动到最底部\n const scrollToBottom = () => {\n isScriptScrolling.current = true;\n setTimeout(() => {\n const mainChatWrapper = document.getElementById(chatId);\n if (mainChatWrapper) {\n mainChatWrapper.scrollTop = mainChatWrapper?.scrollHeight;\n }\n isScriptScrolling.current = false;\n }, 0);\n };\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => {\n if (!lastMessage && action.key === 'redo') return null;\n return (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n {action.render?.(index, data)}\n </span>\n </Tooltip>\n );\n })}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} lastMessage={lastMessage} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'roles'> = {\n assistant: {\n placement: 'start',\n avatar: { icon: avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} /> },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} /> },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: { icon: <UserOutlined />, style: { visibility: 'hidden' } },\n variant: 'borderless',\n },\n };\n\n // 触发发送\n const handleSend = (obj: SendContent) => {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.(obj);\n setContent(''); // 发送后清空输入框内容\n setFiles([]); // 发送后清空文件\n scrollToBottom();\n };\n\n // 输出内容\n const handleChange = (str: string) => {\n setContent(str);\n };\n\n // 停止生成\n const handleStop = () => {\n onStop?.();\n };\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 确认清除\n const confirmClear = () => {\n onClear?.();\n };\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n empty || (\n <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div id=\"x-ai-chatbot\" className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n {/** 消息容器 */}\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n id={chatId}\n roles={rolesObject}\n className={styles.messageList}\n items={messages.map((msg: any) => {\n const { id, role, status, type, execute = [], thinks = '', extra = { noFooter: false }, stepContent } = msg as Messages;\n // 最后一条 AI消息标识\n if (role === MessageRole.assistant) {\n lastMessageId.current = id;\n }\n // 会话内容\n const bubbleContent: any = {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => messageTop\n || (\n <ActionHeader\n execute={execute}\n thinks={thinks}\n />\n )),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"ai-markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n {/* 输出阶段性回答内容 */}\n {stepContent?.length && stepContent.map((item) => {\n // 输出html字符串\n const html2 = md.render(item.content || '');\n // 生成React节点\n const stepHtmlString = reactHtmlParser(html2);\n return (\n <div\n key={item.id}\n className=\"ai-markdown-body step-content\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n <div>\n {stepHtmlString}\n </div>\n <div className={styles.stepLine} />\n </div>\n );\n })}\n {/** 输出最终回答内容 */}\n <div\n className=\"ai-markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info.data, id);\n if (info.data.description) {\n onSend?.({ text: info.data.description as string });\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n };\n\n if (!extra.noFooter) {\n bubbleContent.footer = (() => {\n return (\n role === MessageRole.assistant && status !== MessageStatus.failed && (\n <>\n <MessageFooter data={msg as Messages} lastMessage={lastMessageId.current === id} />\n </>\n )\n );\n });\n }\n\n return bubbleContent;\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n {/* 输入框 */}\n { inputShow && (\n <XAiSender\n value={content}\n loading={loading}\n footerTips={footerTips}\n clearBtnShow={clearBtnShow}\n enableUpload={enableUpload}\n files={files}\n onChangeFiles={setFiles}\n uploadRequest={uploadRequest}\n onChange={handleChange}\n onSubmit={handleSend}\n onStop={handleStop}\n onClear={confirmClear}\n />\n ) }\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAIO;AACP,
|
|
4
|
+
"sourcesContent": ["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Tooltip,\n GetProp,\n Flex,\n} from 'antd';\nimport {\n Bubble,\n Prompts,\n Attachments,\n FileCard\n} from '@ant-design/x';\nimport {\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport type { Attachment } from '@ant-design/x/es/attachments';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport thinkIcon from '@/assets/think.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowDownBlue from '@/assets/arrow-down-blue.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\nimport XAiSender from '../XAiSender';\nimport type { SendContent } from '@/types';\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n execute: any[];\n thinks: string;\n}\n\n// ActionHeader 组件\nexport const ActionHeader: React.FC<ActionHeaderProps> = ({ execute = [], thinks = '' }) => {\n const styles = useStyles();\n const [expanded, setExpanded] = useState(true);\n const [executeExpanded, setExecuteExpanded] = useState(false);\n\n // 关键修复:只要有思考内容或执行过程就显示,不要同时要求两者都有\n if (!thinks && (!execute || execute.length === 0)) return null;\n\n const last = execute[execute.length - 1] || {};\n const { name } = last;\n const icon = last?.icon || last?.extra?.icon;\n\n return (\n <div className={styles.actionHeaderWrapper}>\n {!expanded && (\n <div className={styles.actionTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} />\n <span className={styles.flex1}>运行过程</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n )}\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={thinkIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n\n {thinks && (\n <div className={styles.actionDetailContent} style={{ whiteSpace: 'pre-line' }}>\n {thinks}\n </div>\n )}\n\n {execute && execute.length > 0 && (\n <>\n {!executeExpanded && (\n <div className={styles.executeHiddenWrapper} onClick={() => setExecuteExpanded((v) => !v)}>\n {icon && <img src={icon} alt=\"icon\" className={styles.h(15)} />}\n <span className={styles.flex1}>{name}</span>\n <img alt=\"工具icon\" src={arrowDownBlue} className={styles.w('16px')} />\n </div>\n )}\n {executeExpanded && (\n <div className={styles.executeWrapper}>\n <div className={styles.executeTitle} onClick={() => setExecuteExpanded((v) => !v)}>\n <img src={groupIcon} alt=\"icon\" className={styles.executeHeaderIcon} />\n <span className={styles.flex1}>隐藏运行详情</span>\n <img alt=\"展开详情icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n <div className={styles.executeContent}>\n {execute.map((action: any, idx: number) => {\n const thinkIcon2 = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n {thinkIcon2 && <img src={thinkIcon2} alt=\"icon\" className={styles.actionHeaderIcon} />}\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n )}\n </div>\n );\n};\n\n// 默认消息功能区\nexport const defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n const styles = useStyles();\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n clearBtnShow = true,\n inputShow = true,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n footerTips = '',\n empty = null,\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n providerId,\n // 消息顶部\n messageTop,\n enableUpload,\n uploadRequest,\n } = mergedProps as XAiChatbotProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [content, setContent] = useState<string>(text); // 输入框文本\n const [files, setFiles] = useState<Attachment[]>([]);\n const lastMessageId = useRef<string>('');\n const isScriptScrolling = useRef<boolean>(false);\n const chatId = providerId ? `za-chatbot-container-${providerId}` : 'za-chatbot-container';\n\n // 滚动到最底部\n const scrollToBottom = () => {\n isScriptScrolling.current = true;\n setTimeout(() => {\n const mainChatWrapper = document.getElementById(chatId);\n if (mainChatWrapper) {\n mainChatWrapper.scrollTop = mainChatWrapper?.scrollHeight;\n }\n isScriptScrolling.current = false;\n }, 0);\n };\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => {\n if (!lastMessage && action.key === 'redo') return null;\n return (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n {action.render?.(index, data)}\n </span>\n </Tooltip>\n );\n })}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} lastMessage={lastMessage} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'role'> = {\n assistant: {\n placement: 'start',\n avatar: () => {\n return avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} />;\n },\n typing: { step: 5, interval: 20, effect: 'typing' },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: () => {\n return userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} />;\n },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: () => {\n return avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} />;\n },\n variant: 'borderless',\n },\n };\n\n // 触发发送\n const handleSend = (obj: SendContent) => {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.(obj);\n setContent(''); // 发送后清空输入框内容\n setFiles([]); // 发送后清空文件\n scrollToBottom();\n };\n\n // 输出内容\n const handleChange = (str: string) => {\n setContent(str);\n };\n\n // 停止生成\n const handleStop = () => {\n onStop?.();\n };\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 确认清除\n const confirmClear = () => {\n onClear?.();\n };\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n empty || (\n <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div id=\"x-ai-chatbot\" className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n {/** 消息容器 */}\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n id={chatId}\n role={rolesObject}\n className={styles.messageList}\n items={messages.map((msg: any) => {\n const { id, role, status, type, execute = [], thinks = '', extra = { noFooter: false }, stepContent } = msg as Messages;\n // 最后一条 AI消息标识\n if (role === MessageRole.assistant) {\n lastMessageId.current = id;\n }\n // 会话内容\n const bubbleContent: any = {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => messageTop\n || (\n <ActionHeader\n execute={execute}\n thinks={thinks}\n />\n )),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"ai-markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n {/* 输出阶段性回答内容 */}\n {stepContent?.length && stepContent.map((item) => {\n // 输出html字符串\n const html2 = md.render(item.content || '');\n // 生成React节点\n const stepHtmlString = reactHtmlParser(html2);\n return (\n <div\n key={item.id}\n className=\"ai-markdown-body step-content\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n <div>\n {stepHtmlString}\n </div>\n <div className={styles.stepLine} />\n </div>\n );\n })}\n {/** 输出最终回答内容 */}\n <div\n className=\"ai-markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info?.data, id);\n if (info.data.description) {\n onSend?.({ text: info.data.description as string });\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n };\n\n if (!extra.noFooter) {\n bubbleContent.footer = (() => {\n const msgFiles = msg.content?.files || [];\n if (role === MessageRole.user && msgFiles.length) {\n return (\n <Flex gap={8} wrap justify=\"flex-end\" style={{ maxWidth: 600 }}>\n {msgFiles.map((f: any) => (\n <FileCard\n key={f.fileId}\n name={f.fileName}\n size={f.fileSize}\n />\n ))}\n </Flex>\n );\n }\n if (role === MessageRole.assistant && status !== MessageStatus.failed) {\n return <MessageFooter data={msg as Messages} lastMessage={lastMessageId.current === id} />;\n }\n });\n }\n\n return bubbleContent;\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n {/* 输入框 */}\n { inputShow && (\n <XAiSender\n value={content}\n loading={loading}\n footerTips={footerTips}\n clearBtnShow={clearBtnShow}\n enableUpload={enableUpload}\n files={files}\n onChangeFiles={setFiles}\n uploadRequest={uploadRequest}\n onChange={handleChange}\n onSubmit={handleSend}\n onStop={handleStop}\n onClear={confirmClear}\n />\n ) }\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["MarkdownIt", "thinkIcon", "arrowDown", "clsx", "arrowUp", "arrowDownBlue", "groupIcon", "_a", "emptyIcon", "MarkdownGlobalStyle", "reactHtmlParser", "XAiSender"]
|
|
7
7
|
}
|
|
@@ -95,6 +95,37 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
95
95
|
&::-webkit-scrollbar {
|
|
96
96
|
display: none;
|
|
97
97
|
}
|
|
98
|
+
|
|
99
|
+
.ant-attachment-list-card-type-preview {
|
|
100
|
+
width: 52px;
|
|
101
|
+
height: 52px;
|
|
102
|
+
}
|
|
103
|
+
.ant-attachment .ant-attachment-list-upload-btn {
|
|
104
|
+
width: 52px;
|
|
105
|
+
height: 52px;
|
|
106
|
+
font-size: 24px;
|
|
107
|
+
}
|
|
108
|
+
.ant-attachment-list-card-type-overview {
|
|
109
|
+
padding: 9px;
|
|
110
|
+
line-height: 1;
|
|
111
|
+
}
|
|
112
|
+
.ant-attachment-list-card-type-overview .ant-attachment-list-card-icon {
|
|
113
|
+
display: flex;
|
|
114
|
+
padding-top: 0px;
|
|
115
|
+
}
|
|
116
|
+
.ant-attachment-list-card .ant-attachment-list-card-name {
|
|
117
|
+
margin-bottom: 4px;
|
|
118
|
+
}
|
|
119
|
+
.ant-attachment-list-card-motion-leave-active {
|
|
120
|
+
display: none;
|
|
121
|
+
}
|
|
122
|
+
.ant-progress-inner {
|
|
123
|
+
width: 44px!important;
|
|
124
|
+
height: 44px!important;
|
|
125
|
+
}
|
|
126
|
+
.ant-progress-text {
|
|
127
|
+
font-size: 12px;
|
|
128
|
+
}
|
|
98
129
|
`,
|
|
99
130
|
messageList: import_css.css`
|
|
100
131
|
padding: 0 16px;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiChatbot/styles.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport { css } from '@emotion/css';\nimport { css as globalCss, Global } from '@emotion/react';\nimport { withBasicStyles, primaryBlue, lightBlue, darkGray, lightGray, borderGray
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAAoB;AACpB,mBAAyC;AACzC,
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport { css } from '@emotion/css';\nimport { css as globalCss, Global } from '@emotion/react';\nimport { withBasicStyles, primaryBlue, lightBlue, darkGray, lightGray, borderGray } from '@/styles/common';\n\nexport const useStyles = withBasicStyles(() => ({\n // 静态样式\n wrapper: css`\n display: flex;\n flex-direction: column;\n // max-height: 812px;\n min-height: 300px;\n max-width: 800px;\n width: 100%;\n height: 100%;\n min-width: 375px;\n // background-color: #fff;\n // border: 1px solid rgba(80,96,122,.15);\n border-radius: 12px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,\n Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n `,\n\n navbar: css`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 16px;\n border-bottom: 1px solid ${borderGray};\n // background-color: #fff;\n `,\n\n userAvatar: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n width: 32px;\n border-radius: 50%;\n object-fit: cover;\n margin-right: 12px;\n `,\n\n avatar: css`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n object-fit: cover;\n margin-right: 12px;\n border: 1px solid ${borderGray};\n `,\n\n title: css`\n font-weight: 600;\n font-size: 16px;\n color: ${darkGray};\n `,\n\n subtitle: css`\n font-size: 12px;\n color: ${lightGray};\n margin-top: 2px;\n `,\n\n messageContainer: css`\n flex: 1;\n overflow-y: auto;\n padding: 16px 0;\n // background-color: #fff;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n position: relative;\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n .ant-attachment-list-card-type-preview {\n width: 52px;\n height: 52px;\n }\n .ant-attachment .ant-attachment-list-upload-btn {\n width: 52px;\n height: 52px;\n font-size: 24px;\n }\n .ant-attachment-list-card-type-overview {\n padding: 9px;\n line-height: 1;\n }\n .ant-attachment-list-card-type-overview .ant-attachment-list-card-icon {\n display: flex;\n padding-top: 0px;\n }\n .ant-attachment-list-card .ant-attachment-list-card-name {\n margin-bottom: 4px;\n }\n .ant-attachment-list-card-motion-leave-active {\n display: none;\n }\n .ant-progress-inner {\n width: 44px!important;\n height: 44px!important;\n }\n .ant-progress-text {\n font-size: 12px;\n }\n `,\n\n messageList: css`\n padding: 0 16px;\n /* 隐藏 webkit 浏览器的滚动条 */\n &::-webkit-scrollbar {\n display: none;\n }\n \n /* 隐藏 Firefox 的滚动条 */\n scrollbar-width: none;\n \n /* 隐藏 IE 的滚动条 */\n -ms-overflow-style: none;\n `,\n\n emptyWrapper: css`\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: '#222';\n user-select: none;\n `,\n\n emptyImg: css`\n width: 60px;\n height: 60px;\n border-radius: 8px;\n margin-bottom: 16px;\n `,\n\n message: css`\n max-width: 70%;\n padding: 10px 14px;\n border-radius: 20px;\n background-color: ${lightBlue};\n color: ${darkGray};\n font-size: 14px;\n line-height: 1.4;\n word-break: break-word;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n `,\n\n messageRight: css`\n align-self: flex-end;\n background-color: ${primaryBlue};\n color: white;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 20px;\n border-top-left-radius: 20px;\n border-top-right-radius: 20px;\n `,\n\n quickReplies: css`\n display: flex;\n gap: 8px;\n padding: 10px 16px;\n border-top: 1px solid ${borderGray};\n background-color: #fff;\n overflow-x: auto;\n `,\n\n replyItem: css`\n padding: 6px 12px;\n font-size: 13px;\n border: 1px solid ${primaryBlue};\n border-radius: 20px;\n background-color: #fff;\n color: ${primaryBlue};\n cursor: pointer;\n white-space: nowrap;\n user-select: none;\n transition: all 0.2s ease;\n \n &:hover {\n background-color: ${primaryBlue};\n color: #fff;\n }\n `,\n\n highlight: css`\n background-color: ${primaryBlue};\n color: white;\n border-color: ${primaryBlue};\n `,\n\n stepLine: css`\n border-top: 1px dashed #C3CFFB;\n width: 100%;\n margin: 16px 0;\n `,\n\n inputBar: css`\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-top: 1px solid ${borderGray};\n background-color: #fff;\n `,\n\n input: css`\n flex: 1;\n padding: 8px 12px;\n border: 1px solid ${borderGray};\n border-radius: 20px;\n font-size: 14px;\n outline: none;\n \n &:focus {\n border-color: ${primaryBlue};\n box-shadow: 0 0 3px ${primaryBlue};\n }\n `,\n actionDetailContent: css`\n border-left: 1px solid #C1C3CD;\n padding-right: 16px;\n padding-left: 11px;\n margin-bottom: 12px;\n margin-left: 25px;\n font-weight: 400;\n font-size: 14px;\n color: #767985;\n line-height: 20px;\n display: inline-block;\n white-space: 'pre-line';\n `,\n actionHeaderWrapper: css`\n margin-bottom: 12px;\n `,\n actionHeaderIcon: css`\n height: 14px;\n margin-right: 5px;\n `,\n actionHeaderDetail: css`\n background: #F3F5FA;\n border-radius: 8px;\n overflow: hidden;\n `,\n actionDetailTitle: css`\n display: flex;\n align-items: center;\n padding: 0 16px;\n box-sizing: border-box;\n background: #EDEFF5;\n height: 32px;\n margin-bottom: 12px;\n cursor: pointer;\n `,\n executeHeaderIcon: css`\n height: 12px;\n padding-right: 10px !important;\n `,\n actionTitle: css`\n display: flex;\n align-items: center;\n padding: 0 16px;\n box-sizing: border-box;\n background: #EDEFF5;\n height: 32px;\n margin-bottom: 12px;\n cursor: pointer;\n border-radius: 8px;\n min-width: 200px;\n `,\n actionHeaderDetailItem: css`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n padding: 0 16px;\n margin-bottom: 12px;\n color: #949494;\n `,\n actionHeaderCost: css`\n margin-left: auto;\n color: #888;\n font-size: 12px;\n min-width: 32px;\n text-align: right;\n `,\n executeHiddenWrapper: css`\n background: #FFFFFF;\n border-radius: 8px;\n margin: 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n height: 40px;\n box-sizing: border-box;\n padding: 0px 16px;\n font-size: 14px;\n margin-bottom: 12px;\n color: #3961F2;\n `,\n executeTitle: css`\n display: flex;\n align-items: center;\n padding: 6px 16px;\n height: 40px;\n box-sizing: border-box;\n cursor: pointer;\n `,\n executeContent: css`\n border-top: 1px solid rgba(0,0,0,0.08);\n padding-top: 10px;\n `,\n executeWrapper: css`\n background: #FFFFFF;\n border-radius: 8px;\n padding-bottom: 1px;\n margin: 12px;\n `,\n}));\n\nexport const GlobalStyle: React.FC = () => (\n <Global\n styles={globalCss`\n .ant-bubble-footer {\n display: flex;\n align-items: center;\n min-width: 0,\n max-width: 600,\n /* 你想覆盖的其他样式 */\n }\n\n .ant-sender-content {\n textarea {\n word-break: break-all;\n }\n }\n\n .ant-avatar {\n background-color: transparent;\n }\n\n .ant-sender-actions-list {\n margin-left: -40px;\n }\n\n .ant-sender {\n box-shadow: none !important;\n }\n\n .ant-prompts-item {\n padding-block: 8px !important;\n }\n\n /* 用户消息气泡背景色 */\n .ant-bubble .user-content {\n background-color: #D8E0FD;\n }\n\n /* 助手消息气泡背景色 */\n .ant-bubble .assistant-content {\n background-color: transparent;\n min-height: 0;\n padding: 0;\n }\n `}\n />\n);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAAoB;AACpB,mBAAyC;AACzC,oBAAyF;AAoUvF;AAlUK,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAE9C,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBT,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKqB;AAAA;AAAA;AAAA,EAI7B,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWZ,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAMc;AAAA;AAAA,EAGtB,OAAO;AAAA;AAAA;AAAA,aAGI;AAAA;AAAA,EAGX,UAAU;AAAA;AAAA,aAEC;AAAA;AAAA;AAAA,EAIX,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+ClB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcb,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUd,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOV,SAAS;AAAA;AAAA;AAAA;AAAA,wBAIa;AAAA,aACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOX,cAAc;AAAA;AAAA,wBAEQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQtB,cAAc;AAAA;AAAA;AAAA;AAAA,4BAIY;AAAA;AAAA;AAAA;AAAA,EAK1B,WAAW;AAAA;AAAA;AAAA,wBAGW;AAAA;AAAA;AAAA,aAGX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAOa;AAAA;AAAA;AAAA;AAAA,EAKxB,WAAW;AAAA,wBACW;AAAA;AAAA,oBAEJ;AAAA;AAAA,EAGlB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAMV,UAAU;AAAA;AAAA;AAAA;AAAA,4BAIgB;AAAA;AAAA;AAAA,EAI1B,OAAO;AAAA;AAAA;AAAA,wBAGe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMF;AAAA,4BACM;AAAA;AAAA;AAAA,EAG1B,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAarB,qBAAqB;AAAA;AAAA;AAAA,EAGrB,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAIlB,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUnB,mBAAmB;AAAA;AAAA;AAAA;AAAA,EAInB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYb,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EActB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAIhB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAMlB,EAAE;AAEK,IAAM,cAAwB,MACnC;AAAA,EAAC;AAAA;AAAA,IACC,QAAQ,aAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CV;",
|
|
6
6
|
"names": ["globalCss"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiConversations/XAiConversations.stories.tsx"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import type { ConversationsProps } from '@ant-design/x';\nimport { type GetProp } from 'antd';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport XAiConversations from '.';\n\nconst meta: Meta<typeof XAiConversations> = {\n title: 'AI组件/XAiConversations 对话记录管理',\n component: XAiConversations,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n },\n};\n\nexport default meta;\n type Story = StoryObj<typeof meta>;\n\nconst BasicUsageStory = (args: any) => {\n const items: GetProp<ConversationsProps, 'items'> = Array.from({ length: 4 }).map((_, index) => ({\n key: `item${index + 1}`,\n label: `聊天记录 ${index + 1}`,\n disabled: index === 3,\n }));\n\n return (\n <div style={{\n backgroundColor: 'rgb(240, 242, 245)',\n minHeight: '300px',\n minWidth: '700px',\n display: 'flex',\n alignItems: 'center',\n paddingInline: '50px',\n }}\n >\n <XAiConversations\n {...args}\n sessionList={items}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n },\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,eAA6B;AAiCvB;AA/BN,IAAM,OAAsC;AAAA,EAC1C,OAAO;AAAA,EACP,WAAW,SAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU,CACV;AACF;AAEA,IAAO,mCAAQ;AAGf,IAAM,kBAAkB,CAAC,SAAc;AACrC,QAAM,QAA8C,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,WAAW;AAAA,IAC/F,KAAK,OAAO,QAAQ;AAAA,IACpB,OAAO,QAAQ,QAAQ;AAAA,IACvB,UAAU,UAAU;AAAA,EACtB,EAAE;AAEF,SACE;AAAA,IAAC;AAAA;AAAA,MAAI,OAAO;AAAA,QACV,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,eAAe;AAAA,MACjB;AAAA,MAEE;AAAA,QAAC,SAAAA;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ,aAAa;AAAA;AAAA,MACf;AAAA;AAAA,EACF;AAEJ;AAEO,IAAM,OAAc;AAAA,EACzB,QAAQ;AAAA,EACR,MAAM,CACN;AACF;",
|
|
6
6
|
"names": ["XAiConversations"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,81 @@
|
|
|
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/XAiJsonView/index.tsx
|
|
30
|
+
var XAiJsonView_exports = {};
|
|
31
|
+
__export(XAiJsonView_exports, {
|
|
32
|
+
default: () => XAiJsonView_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(XAiJsonView_exports);
|
|
35
|
+
var import_react_codemirror = __toESM(require("@uiw/react-codemirror"));
|
|
36
|
+
var import_view = require("@codemirror/view");
|
|
37
|
+
var import_lang_json = require("@codemirror/lang-json");
|
|
38
|
+
var import_lang_markdown = require("@codemirror/lang-markdown");
|
|
39
|
+
var import_language_data = require("@codemirror/language-data");
|
|
40
|
+
var import_codemirror_theme_github = require("@uiw/codemirror-theme-github");
|
|
41
|
+
var import_styles = require("./styles");
|
|
42
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
43
|
+
var formatValue = (v) => {
|
|
44
|
+
if (!v)
|
|
45
|
+
return "";
|
|
46
|
+
try {
|
|
47
|
+
const obj = JSON.parse(v);
|
|
48
|
+
return JSON.stringify(obj, null, 2);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
return v;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
var JsonView = ({ value, height, lineNumbers = true }) => {
|
|
54
|
+
const styles = (0, import_styles.useStyles)();
|
|
55
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
56
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
57
|
+
import_react_codemirror.default,
|
|
58
|
+
{
|
|
59
|
+
lang: "json",
|
|
60
|
+
readOnly: true,
|
|
61
|
+
className: styles.view,
|
|
62
|
+
theme: import_codemirror_theme_github.githubLight,
|
|
63
|
+
value: formatValue(value),
|
|
64
|
+
height: height || "160px",
|
|
65
|
+
extensions: [
|
|
66
|
+
(0, import_lang_json.json)(),
|
|
67
|
+
import_view.EditorView.lineWrapping,
|
|
68
|
+
(0, import_lang_markdown.markdown)({
|
|
69
|
+
codeLanguages: import_language_data.languages
|
|
70
|
+
})
|
|
71
|
+
],
|
|
72
|
+
basicSetup: {
|
|
73
|
+
lineNumbers
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.GlobalStyle, {})
|
|
78
|
+
] });
|
|
79
|
+
};
|
|
80
|
+
var XAiJsonView_default = JsonView;
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/XAiJsonView/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import ReactCodeMirror from '@uiw/react-codemirror';\nimport { EditorView } from '@codemirror/view';\nimport { json } from '@codemirror/lang-json';\nimport { markdown } from '@codemirror/lang-markdown';\nimport { languages } from '@codemirror/language-data';\nimport { githubLight } from '@uiw/codemirror-theme-github';\nimport { useStyles, GlobalStyle } from './styles';\n\nconst formatValue = (v: string) => {\n if (!v) return '';\n try {\n const obj = JSON.parse(v);\n return JSON.stringify(obj, null, 2);\n } catch (error) {\n return v;\n }\n};\n\nexport interface JsonViewProps {\n value: string;\n lineNumbers?: boolean;\n height?: string;\n}\n\nconst JsonView: React.FC<JsonViewProps> = ({ value, height, lineNumbers = true }) => {\n const styles = useStyles();\n\n return (\n <>\n <ReactCodeMirror\n lang=\"json\"\n readOnly\n className={styles.view}\n theme={githubLight}\n value={formatValue(value)}\n height={height || '160px'}\n extensions={[\n json(),\n EditorView.lineWrapping,\n markdown({\n codeLanguages: languages,\n }),\n ]}\n basicSetup={{\n lineNumbers,\n }}\n />\n <GlobalStyle />\n </>\n );\n};\n\nexport default JsonView;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAA4B;AAC5B,kBAA2B;AAC3B,uBAAqB;AACrB,2BAAyB;AACzB,2BAA0B;AAC1B,qCAA4B;AAC5B,oBAAuC;AAsBnC;AApBJ,IAAM,cAAc,CAAC,MAAc;AACjC,MAAI,CAAC;AAAG,WAAO;AACf,MAAI;AACF,UAAM,MAAM,KAAK,MAAM,CAAC;AACxB,WAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,EACpC,SAAS,OAAP;AACA,WAAO;AAAA,EACT;AACF;AAQA,IAAM,WAAoC,CAAC,EAAE,OAAO,QAAQ,cAAc,KAAK,MAAM;AACnF,QAAM,aAAS,yBAAU;AAEzB,SACE,4EACE;AAAA;AAAA,MAAC,wBAAAA;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAQ;AAAA,QACR,WAAW,OAAO;AAAA,QAClB,OAAO;AAAA,QACP,OAAO,YAAY,KAAK;AAAA,QACxB,QAAQ,UAAU;AAAA,QAClB,YAAY;AAAA,cACV,uBAAK;AAAA,UACL,uBAAW;AAAA,cACX,+BAAS;AAAA,YACP,eAAe;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,QACA,YAAY;AAAA,UACV;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA,4CAAC,6BAAY;AAAA,KACf;AAEJ;AAEA,IAAO,sBAAQ;",
|
|
6
|
+
"names": ["ReactCodeMirror"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const useStyles: () => {
|
|
3
|
+
view: string;
|
|
4
|
+
} & {
|
|
5
|
+
w: (width: string | number) => string;
|
|
6
|
+
h: (height: string | number) => string;
|
|
7
|
+
p: (padding: string) => string;
|
|
8
|
+
pb: (padding: string | number) => string;
|
|
9
|
+
pt: (padding: string | number) => string;
|
|
10
|
+
pl: (padding: string | number) => string;
|
|
11
|
+
pr: (padding: string | number) => string;
|
|
12
|
+
m: (margin: string) => string;
|
|
13
|
+
mb: (margin: string | number) => string;
|
|
14
|
+
mt: (margin: string | number) => string;
|
|
15
|
+
ml: (margin: string | number) => string;
|
|
16
|
+
mr: (margin: string | number) => string;
|
|
17
|
+
text: (size: string | number) => string;
|
|
18
|
+
weight: (size: number) => string;
|
|
19
|
+
textColor: (c: string) => string;
|
|
20
|
+
bg: (c: string) => string;
|
|
21
|
+
rs: (radius: string | number) => string;
|
|
22
|
+
gap: (g: string | number) => string;
|
|
23
|
+
flex: string;
|
|
24
|
+
flexCenter: string;
|
|
25
|
+
flexBetween: string;
|
|
26
|
+
flexColumn: string;
|
|
27
|
+
flex1: string;
|
|
28
|
+
cursor: (type: string) => string;
|
|
29
|
+
border: (color: string, width?: string) => string;
|
|
30
|
+
boxShadow: (shadow: string) => string;
|
|
31
|
+
transition: (property?: string, duration?: string) => string;
|
|
32
|
+
overflow: (type: string) => string;
|
|
33
|
+
position: (type: string) => string;
|
|
34
|
+
zIndex: (index: number) => string;
|
|
35
|
+
flexCenterGap2: string;
|
|
36
|
+
flexCenterGap4: string;
|
|
37
|
+
};
|
|
38
|
+
export declare const GlobalStyle: React.FC;
|
|
39
|
+
export default useStyles;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/components/XAiJsonView/styles.tsx
|
|
20
|
+
var styles_exports = {};
|
|
21
|
+
__export(styles_exports, {
|
|
22
|
+
GlobalStyle: () => GlobalStyle,
|
|
23
|
+
default: () => styles_default,
|
|
24
|
+
useStyles: () => useStyles
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(styles_exports);
|
|
27
|
+
var import_css = require("@emotion/css");
|
|
28
|
+
var import_react = require("@emotion/react");
|
|
29
|
+
var import_common = require("../../styles/common");
|
|
30
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
31
|
+
var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
32
|
+
view: import_css.css`
|
|
33
|
+
/* view container */
|
|
34
|
+
`
|
|
35
|
+
}));
|
|
36
|
+
var GlobalStyle = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
37
|
+
import_react.Global,
|
|
38
|
+
{
|
|
39
|
+
styles: import_react.css`
|
|
40
|
+
.cm-editor {
|
|
41
|
+
background: #fff;
|
|
42
|
+
border-radius: 8px;
|
|
43
|
+
border: 1px solid #d9d9d9;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.cm-scroller {
|
|
47
|
+
border-radius: 8px;
|
|
48
|
+
}
|
|
49
|
+
`
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
var styles_default = useStyles;
|
|
53
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
54
|
+
0 && (module.exports = {
|
|
55
|
+
GlobalStyle,
|
|
56
|
+
useStyles
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/XAiJsonView/styles.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport { css } from '@emotion/css';\nimport { css as globalCss, Global } from '@emotion/react';\nimport { withBasicStyles } from '@/styles/common';\n\nexport const useStyles = withBasicStyles(() => ({\n view: css`\n /* view container */\n `,\n}));\n\nexport const GlobalStyle: React.FC = () => (\n <Global\n styles={globalCss`\n .cm-editor {\n background: #fff;\n border-radius: 8px;\n border: 1px solid #d9d9d9;\n }\n\n .cm-scroller {\n border-radius: 8px;\n }\n `}\n />\n);\n\nexport default useStyles;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAAoB;AACpB,mBAAyC;AACzC,oBAAgC;AAS9B;AAPK,IAAM,gBAAY,+BAAgB,OAAO;AAAA,EAC9C,MAAM;AAAA;AAAA;AAGR,EAAE;AAEK,IAAM,cAAwB,MACnC;AAAA,EAAC;AAAA;AAAA,IACC,QAAQ,aAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWV;AAGF,IAAO,iBAAQ;",
|
|
6
|
+
"names": ["globalCss"]
|
|
7
|
+
}
|
|
@@ -175,7 +175,7 @@ var 携带历史记录示例 = {
|
|
|
175
175
|
},
|
|
176
176
|
args: {
|
|
177
177
|
url: "https://m-poc-dev.zaxline.com",
|
|
178
|
-
token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
|
|
178
|
+
token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIl0sImV4cCI6MTc2NTI3ODg4NiwianRpIjoiNFRTcWdfV3NJOHlqSEdZUmRRVEtuT0dPbjU4IiwiY2xpZW50X2lkIjoicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIn0.duUIEPpHmyMwaZYtvM5BlAs1e1ZEco_DaD2NI-Ht2m0OE8khQBe284vRSPxgvxKm7aHOcAo_Kla9DE0YBPUxKeN1c0qgRepIacLB7AvTWFZtb59OjdGMfMHQbbZiuy4wu5W81dVoOpZWCjIkOomCtvCsIZpUQY7vdIZBCB9sygmwTJ7S_9oF10iUtK90AdZHX-_9jdlKNJC-Fulg9ab88Z33rnmW8jhhqpEkYYzGnccXNQuomxswMo_MgyplV_B9wpfs90tEnPWC623dcdfJHcRJZBtC-NU6RomkPLewdz3dEM-LaWBkP6FMI60C0VQW-fvwWkWC1GKBrUeaXzbgWg",
|
|
179
179
|
config: {
|
|
180
180
|
appNo: "rcxjpbmN8UX1UTQm54oFMLKp",
|
|
181
181
|
chatProps: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Button } from 'antd';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n config: {\n description: '配置信息',\n table: {\n type: {\n summary: 'XAiProviderConfig',\n detail: `{\n appNo?: string; // 应用唯一编号\n }`,\n },\n category: '配置选项',\n },\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({ text: '你好,AI!' });\n } else {\n console.log('XAiProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px', marginRight: '24px', justifyContent: 'center' }}>\n <Button type=\"primary\" onClick={handleSendMessage}>发送消息</Button>\n </div>\n <div style={{ maxWidth: '800px', height: '600px' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIl0sImV4cCI6MTc2NDY3MTc2MSwianRpIjoiRl9Zb0JBXzhIN01XempDZUxQenEzNTBXRnNrIiwiY2xpZW50X2lkIjoiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIn0.mtGBQfwNtIkhcOumsOvzMj2BdYUxAPwZ9GcvNLuCNGVzFkqkLkfy_LALjYR2B-RaNj11_Cx7DcewtmLceG31KfnCiFY24BD_CbwoahdFh40SYRTFnjDf8XQI22E63h5NxTuldPx0itYLUPaUO6NAubnRON40eQPGZKygM0i72ULsQQAyRpJLYAaTjUxyPIW3JmMzQmYiRx641JeAYAup4-ZNw-Fqmd-8_xK3kN-a832xM-M_eqXgn8yMttn0uFv95lxPdJ1_-mp2zx8N4TBCYVkHo3u_PjM65S3_p4u1dFGXBDAsxtVMgmVGeUvubTLFuDM153rz9MZ7aOuu_c8K7w',\n config: {\n appNo: 'PGlA63A1Gt9oZpxa6YCWMciH',\n },\n providerId: 'demo-provider',\n },\n};\n\n// 多个 Provider 示例\nexport const 多容器示例: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录示例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n return (\n <div style={{ width: '1080px', height: '600px', overflow: 'hidden' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiConversations />\n <div style={{ flex: 1, display: 'flex', justifyContent: 'center' }}>\n <XAiChatbot\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Button } from 'antd';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n config: {\n description: '配置信息',\n table: {\n type: {\n summary: 'XAiProviderConfig',\n detail: `{\n appNo?: string; // 应用唯一编号\n }`,\n },\n category: '配置选项',\n },\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({ text: '你好,AI!' });\n } else {\n console.log('XAiProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px', marginRight: '24px', justifyContent: 'center' }}>\n <Button type=\"primary\" onClick={handleSendMessage}>发送消息</Button>\n </div>\n <div style={{ maxWidth: '800px', height: '600px' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIl0sImV4cCI6MTc2NDY3MTc2MSwianRpIjoiRl9Zb0JBXzhIN01XempDZUxQenEzNTBXRnNrIiwiY2xpZW50X2lkIjoiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIn0.mtGBQfwNtIkhcOumsOvzMj2BdYUxAPwZ9GcvNLuCNGVzFkqkLkfy_LALjYR2B-RaNj11_Cx7DcewtmLceG31KfnCiFY24BD_CbwoahdFh40SYRTFnjDf8XQI22E63h5NxTuldPx0itYLUPaUO6NAubnRON40eQPGZKygM0i72ULsQQAyRpJLYAaTjUxyPIW3JmMzQmYiRx641JeAYAup4-ZNw-Fqmd-8_xK3kN-a832xM-M_eqXgn8yMttn0uFv95lxPdJ1_-mp2zx8N4TBCYVkHo3u_PjM65S3_p4u1dFGXBDAsxtVMgmVGeUvubTLFuDM153rz9MZ7aOuu_c8K7w',\n config: {\n appNo: 'PGlA63A1Gt9oZpxa6YCWMciH',\n },\n providerId: 'demo-provider',\n },\n};\n\n// 多个 Provider 示例\nexport const 多容器示例: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录示例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n return (\n <div style={{ width: '1080px', height: '600px', overflow: 'hidden' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiConversations />\n <div style={{ flex: 1, display: 'flex', justifyContent: 'center' }}>\n <XAiChatbot\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIl0sImV4cCI6MTc2NTI3ODg4NiwianRpIjoiNFRTcWdfV3NJOHlqSEdZUmRRVEtuT0dPbjU4IiwiY2xpZW50X2lkIjoicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIn0.duUIEPpHmyMwaZYtvM5BlAs1e1ZEco_DaD2NI-Ht2m0OE8khQBe284vRSPxgvxKm7aHOcAo_Kla9DE0YBPUxKeN1c0qgRepIacLB7AvTWFZtb59OjdGMfMHQbbZiuy4wu5W81dVoOpZWCjIkOomCtvCsIZpUQY7vdIZBCB9sygmwTJ7S_9oF10iUtK90AdZHX-_9jdlKNJC-Fulg9ab88Z33rnmW8jhhqpEkYYzGnccXNQuomxswMo_MgyplV_B9wpfs90tEnPWC623dcdfJHcRJZBtC-NU6RomkPLewdz3dEM-LaWBkP6FMI60C0VQW-fvwWkWC1GKBrUeaXzbgWg',\n config: {\n appNo: 'rcxjpbmN8UX1UTQm54oFMLKp',\n chatProps: {\n clearBtnShow: false,\n },\n },\n providerId: 'demo-provider',\n },\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["XAiProvider", "React", "XAiChatbot", "XAiConversations"]
|
|
7
7
|
}
|