@ai-group/chat-sdk 2.0.2 → 2.0.4

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 (72) hide show
  1. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +44 -4
  2. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +2 -2
  3. package/dist/cjs/components/XAiChatbot/index.js +34 -10
  4. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  5. package/dist/cjs/components/XAiChatbot/styles.js +31 -0
  6. package/dist/cjs/components/XAiChatbot/styles.js.map +2 -2
  7. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +1 -1
  8. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +2 -2
  9. package/dist/cjs/components/XAiProvider/index.js +1 -1
  10. package/dist/cjs/components/XAiProvider/index.js.map +2 -2
  11. package/dist/cjs/components/XAiSender/XAiSender.stories.js +3 -2
  12. package/dist/cjs/components/XAiSender/XAiSender.stories.js.map +2 -2
  13. package/dist/cjs/components/XAiSender/index.js +13 -3
  14. package/dist/cjs/components/XAiSender/index.js.map +2 -2
  15. package/dist/cjs/components/XAiSender/styles.js +0 -1
  16. package/dist/cjs/components/XAiSender/styles.js.map +2 -2
  17. package/dist/cjs/hooks/useAgentGenerator.d.ts +3 -3
  18. package/dist/cjs/hooks/useAgentGenerator.js +5 -5
  19. package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
  20. package/dist/cjs/hooks/useProviderContext.d.ts +2 -1
  21. package/dist/cjs/hooks/useProviderContext.js.map +2 -2
  22. package/dist/cjs/types/XAiChatbot.d.ts +8 -6
  23. package/dist/cjs/types/XAiChatbot.js.map +1 -1
  24. package/dist/cjs/types/XAiConversations.d.ts +2 -2
  25. package/dist/cjs/types/XAiConversations.js.map +1 -1
  26. package/dist/cjs/types/XAiMessage.d.ts +2 -1
  27. package/dist/cjs/types/XAiMessage.js.map +2 -2
  28. package/dist/cjs/types/XAiProvider.d.ts +3 -3
  29. package/dist/cjs/types/XAiProvider.js.map +2 -2
  30. package/dist/cjs/types/XAiSender.d.ts +5 -1
  31. package/dist/cjs/types/XAiSender.js.map +1 -1
  32. package/dist/cjs/types/index.js.map +1 -1
  33. package/dist/cjs/utils/umdEntry.d.ts +3 -2
  34. package/dist/cjs/utils/umdEntry.js +2 -2
  35. package/dist/cjs/utils/umdEntry.js.map +2 -2
  36. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js +60 -6
  37. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js.map +1 -1
  38. package/dist/esm/components/XAiChatbot/index.js +104 -70
  39. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  40. package/dist/esm/components/XAiChatbot/styles.js +1 -1
  41. package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
  42. package/dist/esm/components/XAiProvider/XAiProvider.stories.js +3 -1
  43. package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
  44. package/dist/esm/components/XAiProvider/index.js +1 -1
  45. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  46. package/dist/esm/components/XAiSender/XAiSender.stories.js +3 -2
  47. package/dist/esm/components/XAiSender/XAiSender.stories.js.map +1 -1
  48. package/dist/esm/components/XAiSender/index.js +16 -4
  49. package/dist/esm/components/XAiSender/index.js.map +1 -1
  50. package/dist/esm/components/XAiSender/styles.js +1 -1
  51. package/dist/esm/components/XAiSender/styles.js.map +1 -1
  52. package/dist/esm/hooks/useAgentGenerator.d.ts +3 -3
  53. package/dist/esm/hooks/useAgentGenerator.js +8 -8
  54. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  55. package/dist/esm/hooks/useProviderContext.d.ts +2 -1
  56. package/dist/esm/hooks/useProviderContext.js.map +1 -1
  57. package/dist/esm/types/XAiChatbot.d.ts +8 -6
  58. package/dist/esm/types/XAiChatbot.js.map +1 -1
  59. package/dist/esm/types/XAiConversations.d.ts +2 -2
  60. package/dist/esm/types/XAiConversations.js.map +1 -1
  61. package/dist/esm/types/XAiMessage.d.ts +2 -1
  62. package/dist/esm/types/XAiMessage.js.map +1 -1
  63. package/dist/esm/types/XAiProvider.d.ts +3 -3
  64. package/dist/esm/types/XAiProvider.js.map +1 -1
  65. package/dist/esm/types/XAiSender.d.ts +5 -1
  66. package/dist/esm/types/XAiSender.js.map +1 -1
  67. package/dist/esm/types/index.js.map +1 -1
  68. package/dist/esm/utils/umdEntry.d.ts +3 -2
  69. package/dist/esm/utils/umdEntry.js +2 -2
  70. package/dist/esm/utils/umdEntry.js.map +1 -1
  71. package/dist/umd/chat-sdk.min.js +1 -1
  72. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/utils/umdEntry.tsx"],
4
- "sourcesContent": ["import React, { createRef } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { XAiSDKProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport { Messages } from '@/types/XAiMessage';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '@/components/XAiChatbot';\nimport XAiConversations from '@/components/XAiConversations';\n\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAiSDKProps;\n\n root: any;\n\n providerRef = createRef<XAiProviderHandle>();\n\n // ———— hook ————\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n onMessage?: (content: string, data: Messages) => void;\n\n constructor(container: HTMLElement, props: XAiSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.onMessage = props.onMessage;\n this.mount();\n }\n\n mount() {\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <div style={{ width: '100%', height: '100%' }}>\n <XAiProvider ref={this.providerRef} {...this.props}>\n { this.props.config?.session?.showSessionList && <XAiConversations />}\n <div style={{ display: 'flex', justifyContent: 'center', flex: 1 }}>\n <XAiChatbot />\n </div>\n </XAiProvider>\n </div>,\n );\n } else {\n // @ts-ignore\n ReactDOM.render(\n <div style={{ width: '100%', height: '100%' }}>\n <XAiProvider ref={this.providerRef} {...this.props}>\n { this.props.config?.session?.showSessionList && <XAiConversations />}\n <div style={{ display: 'flex', justifyContent: 'center', flex: 1 }}>\n <XAiChatbot />\n </div>\n </XAiProvider>\n </div>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n // 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()\n static initChatbot(props: XAiSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(props.componentProps.id);\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement('div');\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement('div');\n container.id = 'xai-chatbot-container';\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n // 兼容旧版本的静态方法\n static create(props: XAiSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n\n // ————对外暴露的方法————\n getData() {\n return {\n appInfo: this.providerRef.current?.getAppInfo(),\n messages: this.providerRef.current?.getMessages(),\n sessions: this.providerRef.current?.getSessions(),\n };\n }\n\n chat(text: string) {\n this.providerRef.current?.chat(text);\n }\n\n stop() {\n this.providerRef.current?.stopChat();\n }\n\n reChat() {\n this.providerRef.current?.reChat();\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiC;AACjC,oBAAqB;AAGrB,yBAAwB;AACxB,wBAAuB;AACvB,8BAA6B;AAgCnB;AA9BV,IAAM,YAAN,MAAgB;AAAA,EAgBd,YAAY,WAAwB,OAAoB;AATxD,2BAAc,wBAA6B;AAUzC,SAAK,YAAY;AACjB,SAAK,QAAQ;AACb,SAAK,UAAU,MAAM;AACrB,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,QAAQ;AAjCV;AAkCI,QAAI,cAAAA,QAAS,YAAY;AACvB,WAAK,OAAO,cAAAA,QAAS,WAAW,KAAK,SAAS;AAC9C,WAAK,KAAK;AAAA,QACR,4CAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,GAC1C,uDAAC,mBAAAC,SAAA,EAAY,KAAK,KAAK,aAAc,GAAG,KAAK,OACvC;AAAA,4BAAK,MAAM,WAAX,mBAAmB,YAAnB,mBAA4B,oBAAmB,4CAAC,wBAAAC,SAAA,EAAiB;AAAA,UACnE,4CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,gBAAgB,UAAU,MAAM,EAAE,GAC/D,sDAAC,kBAAAC,SAAA,EAAW,GACd;AAAA,WACJ,GACF;AAAA,MACF;AAAA,IACF,OAAO;AAEL,oBAAAH,QAAS;AAAA,QACP,4CAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,GAC1C,uDAAC,mBAAAC,SAAA,EAAY,KAAK,KAAK,aAAc,GAAG,KAAK,OACvC;AAAA,4BAAK,MAAM,WAAX,mBAAmB,YAAnB,mBAA4B,oBAAmB,4CAAC,wBAAAC,SAAA,EAAiB;AAAA,UACnE,4CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,gBAAgB,UAAU,MAAM,EAAE,GAC/D,sDAAC,kBAAAC,SAAA,EAAW,GACd;AAAA,WACJ,GACF;AAAA,QACA,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,QAAQ,KAAK,KAAK,SAAS;AAClC,WAAK,KAAK,QAAQ;AAAA,IACpB;AAAA,EACF;AAAA;AAAA,EAGA,OAAO,YAAY,OAA+B;AArEpD;AAsEI,QAAI;AAGJ,SAAI,WAAM,mBAAN,mBAAsB,IAAI;AAC5B,YAAM,oBAAoB,SAAS,eAAe,MAAM,eAAe,EAAE;AACzE,UAAI,mBAAmB;AACrB,oBAAY;AAAA,MACd,OAAO;AAEL,oBAAY,SAAS,cAAc,KAAK;AACxC,kBAAU,KAAK,MAAM,eAAe;AAAA,MACtC;AAAA,IACF,OAAO;AAEL,kBAAY,SAAS,cAAc,KAAK;AACxC,gBAAU,KAAK;AAAA,IACjB;AAGA,QAAI,MAAM,gBAAgB;AACxB,YAAM,EAAE,IAAI,GAAG,WAAW,IAAI,MAAM;AACpC,aAAO,OAAO,UAAU,OAAO,UAAU;AAAA,IAC3C;AAGA,QAAI,CAAC,UAAU,YAAY;AACzB,eAAS,KAAK,YAAY,SAAS;AAAA,IACrC;AAEA,WAAO,IAAI,UAAU,WAAW,KAAK;AAAA,EACvC;AAAA;AAAA,EAGA,OAAO,OAAO,OAA+B;AAC3C,WAAO,KAAK,YAAY,KAAK;AAAA,EAC/B;AAAA;AAAA,EAGA,UAAU;AA5GZ;AA6GI,WAAO;AAAA,MACL,UAAS,UAAK,YAAY,YAAjB,mBAA0B;AAAA,MACnC,WAAU,UAAK,YAAY,YAAjB,mBAA0B;AAAA,MACpC,WAAU,UAAK,YAAY,YAAjB,mBAA0B;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,KAAK,MAAc;AApHrB;AAqHI,eAAK,YAAY,YAAjB,mBAA0B,KAAK;AAAA,EACjC;AAAA,EAEA,OAAO;AAxHT;AAyHI,eAAK,YAAY,YAAjB,mBAA0B;AAAA,EAC5B;AAAA,EAEA,SAAS;AA5HX;AA6HI,eAAK,YAAY,YAAjB,mBAA0B;AAAA,EAC5B;AACF;AAIA,OAAO,YAAY;AAGnB,IAAO,mBAAQ;",
4
+ "sourcesContent": ["import React, { createRef } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { XAiSDKProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport { Messages } from '@/types/XAiMessage';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '@/components/XAiChatbot';\nimport XAiConversations from '@/components/XAiConversations';\nimport type { SendContent } from '@/types';\n\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAiSDKProps;\n\n root: any;\n\n providerRef = createRef<XAiProviderHandle>();\n\n // ———— hook ————\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n onMessage?: (content: string, data: Messages) => void;\n\n constructor(container: HTMLElement, props: XAiSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.onMessage = props.onMessage;\n this.mount();\n }\n\n mount() {\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <div style={{ width: '100%', height: '100%' }}>\n <XAiProvider ref={this.providerRef} {...this.props}>\n { this.props.config?.session?.showSessionList && <XAiConversations />}\n <div style={{ display: 'flex', justifyContent: 'center', flex: 1 }}>\n <XAiChatbot />\n </div>\n </XAiProvider>\n </div>,\n );\n } else {\n // @ts-ignore\n ReactDOM.render(\n <div style={{ width: '100%', height: '100%' }}>\n <XAiProvider ref={this.providerRef} {...this.props}>\n { this.props.config?.session?.showSessionList && <XAiConversations />}\n <div style={{ display: 'flex', justifyContent: 'center', flex: 1 }}>\n <XAiChatbot />\n </div>\n </XAiProvider>\n </div>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n // 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()\n static initChatbot(props: XAiSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(props.componentProps.id);\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement('div');\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement('div');\n container.id = 'xai-chatbot-container';\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n // 兼容旧版本的静态方法\n static create(props: XAiSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n\n // ————对外暴露的方法————\n getData() {\n return {\n appInfo: this.providerRef.current?.getAppInfo(),\n messages: this.providerRef.current?.getMessages(),\n sessions: this.providerRef.current?.getSessions(),\n };\n }\n\n chat(content: SendContent) {\n this.providerRef.current?.chat(content);\n }\n\n stop() {\n this.providerRef.current?.stopChat();\n }\n\n reChat() {\n this.providerRef.current?.reChat();\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],
5
+ "mappings": "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",
6
6
  "names": ["ReactDOM", "XAiProvider", "XAiConversations", "XAiChatbot"]
7
7
  }
@@ -290,7 +290,20 @@ var BasicUsageStory = function BasicUsageStory(args) {
290
290
  onClear: handleClear,
291
291
  onSuggestMessageClick: handleSuggestMessageClick,
292
292
  onSend: handleSendMessage,
293
- onMessagesActionsCallback: handleActions
293
+ onMessagesActionsCallback: handleActions,
294
+ enableUpload: true,
295
+ uploadRequest: function uploadRequest(_ref2) {
296
+ var file = _ref2.file,
297
+ onProgress = _ref2.onProgress,
298
+ onSuccess = _ref2.onSuccess;
299
+ console.info(file);
300
+ onProgress === null || onProgress === void 0 || onProgress({
301
+ percent: 50
302
+ });
303
+ setTimeout(function () {
304
+ onSuccess === null || onSuccess === void 0 || onSuccess({});
305
+ }, 1000);
306
+ }
294
307
  }))
295
308
  });
296
309
  };
@@ -362,9 +375,9 @@ export var 多个Provider实例 = {
362
375
  };
363
376
 
364
377
  // 展示新架构的示例组件
365
- var ArchitectureDemoComponent = function ArchitectureDemoComponent(_ref2) {
378
+ var ArchitectureDemoComponent = function ArchitectureDemoComponent(_ref3) {
366
379
  var _getProviderValue;
367
- var title = _ref2.title;
380
+ var title = _ref3.title;
368
381
  var _useProviderContext = useProviderContext({
369
382
  props: {
370
383
  title: title
@@ -412,7 +425,9 @@ var ArchitectureDemoComponent = function ArchitectureDemoComponent(_ref2) {
412
425
  }), /*#__PURE__*/_jsx("button", {
413
426
  onClick: function onClick() {
414
427
  var _providerMethods$send;
415
- return (_providerMethods$send = providerMethods.sendMessage) === null || _providerMethods$send === void 0 ? void 0 : _providerMethods$send.call(providerMethods, '来自架构演示组件的消息');
428
+ return (_providerMethods$send = providerMethods.sendMessage) === null || _providerMethods$send === void 0 ? void 0 : _providerMethods$send.call(providerMethods, {
429
+ text: '来自架构演示组件的消息'
430
+ });
416
431
  },
417
432
  disabled: !isInProvider,
418
433
  style: {
@@ -473,6 +488,19 @@ export var 新架构演示 = {
473
488
  navbar: {
474
489
  title: '架构演示聊天机器人',
475
490
  subtitle: '展示新 Hook 的使用'
491
+ },
492
+ enableUpload: true,
493
+ uploadRequest: function uploadRequest(_ref4) {
494
+ var file = _ref4.file,
495
+ onProgress = _ref4.onProgress,
496
+ onSuccess = _ref4.onSuccess;
497
+ console.info(file);
498
+ onProgress === null || onProgress === void 0 || onProgress({
499
+ percent: 50
500
+ });
501
+ setTimeout(function () {
502
+ onSuccess === null || onSuccess === void 0 || onSuccess({});
503
+ }, 1000);
476
504
  }
477
505
  }))]
478
506
  })
@@ -515,11 +543,24 @@ export var 架构对比演示 = {
515
543
  title: '独立聊天机器人',
516
544
  subtitle: '不依赖 Provider'
517
545
  },
518
- onSend: function onSend(type, content) {
519
- console.log('独立模式发送:', type, content);
546
+ onSend: function onSend(content) {
547
+ console.log('独立模式发送:', content);
520
548
  },
521
549
  onClear: function onClear() {
522
550
  console.log('独立模式清空');
551
+ },
552
+ enableUpload: true,
553
+ uploadRequest: function uploadRequest(_ref5) {
554
+ var file = _ref5.file,
555
+ onProgress = _ref5.onProgress,
556
+ onSuccess = _ref5.onSuccess;
557
+ console.info(file);
558
+ onProgress === null || onProgress === void 0 || onProgress({
559
+ percent: 50
560
+ });
561
+ setTimeout(function () {
562
+ onSuccess === null || onSuccess === void 0 || onSuccess({});
563
+ }, 1000);
523
564
  }
524
565
  }))]
525
566
  })]
@@ -546,6 +587,19 @@ export var 架构对比演示 = {
546
587
  navbar: {
547
588
  title: 'Provider 聊天机器人',
548
589
  subtitle: '由 Provider 管理'
590
+ },
591
+ enableUpload: true,
592
+ uploadRequest: function uploadRequest(_ref6) {
593
+ var file = _ref6.file,
594
+ onProgress = _ref6.onProgress,
595
+ onSuccess = _ref6.onSuccess;
596
+ console.info(file);
597
+ onProgress === null || onProgress === void 0 || onProgress({
598
+ percent: 50
599
+ });
600
+ setTimeout(function () {
601
+ onSuccess === null || onSuccess === void 0 || onSuccess({});
602
+ }, 1000);
549
603
  }
550
604
  }))]
551
605
  })
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useState","Divider","MessageRole","MessageStatus","documentIcon","XAiProvider","XAiChatbot","useProviderContext","useProviderMethods","jsxs","_jsxs","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","navbar","description","messages","mockMessages","id","type","createdAt","Date","status","done","role","assistant","content","text","user","parentMessageId","thinks","extra","noFooter","suggestion","key","BasicUsageStory","args","_useState","_useState2","_slicedToArray","setMessages","_useState3","_useState4","loading","setLoading","handleSendMessage","stream","forEach","chunk","idx","setTimeout","prev","updated","_toConsumableArray","targetIndex","targetMsg","_objectSpread","Math","random","toString","slice","pending","length","_updated$targetIndex$","execute","push","icon","name","handleClear","handleActions","index","data","console","log","handleSuggestMessageClick","_item","filter","m","ToolTip","_ref","cost","token","style","display","alignItems","fontSize","color","flex","paddingRight","children","height","width","border","borderRadius","inputShow","messageTooltip","onClear","onSuggestMessageClick","onSend","onMessagesActionsCallback","基础用法","render","emptyStateText","在Provider中使用","decorators","Story","url","多个Provider实例","gap","providerId","marginRight","ArchitectureDemoComponent","_ref2","_getProviderValue","_useProviderContext","props","mergeLogic","context","_context$messages","isInProvider","customData","mergedProps","getProviderValue","providerMethods","padding","marginBottom","backgroundColor","margin","onClick","_providerMethods$send","sendMessage","call","disabled","cursor","新架构演示","navbarShow","subtitle","架构对比演示"],"sources":["../../../../src/components/XAiChatbot/XAiChatbot.stories.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Divider } from 'antd';\nimport { MessageRole, MessageStatus } from '@/types/XAiMessage';\nimport type { Messages } from '@/types/XAiMessage';\nimport documentIcon from '@/assets/document.svg';\nimport XAiProvider from '../XAiProvider';\nimport XAiChatbot from '.';\nimport { useProviderContext, useProviderMethods } from '@/hooks/useProviderContext';\n\nconst meta: Meta<typeof XAiChatbot> = {\n title: 'AI组件/XAiChatbot 聊天框',\n component: XAiChatbot,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n navbar: {\n description: '导航栏配置',\n },\n messages: {\n description: '消息列表',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// mock 消息数据,严格符合 Messages 类型\nconst mockMessages: Messages[] = [\n {\n id: '1',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '你好,有什么我能帮助你的吗?',\n },\n },\n {\n id: '2',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '检索从北京到上海的车票数据给我',\n },\n parentMessageId: '1',\n },\n {\n id: '22',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '',\n },\n thinks: '',\n // execute: [\n // // 工具库调用(MCP_TOOL)\n // {\n // type: 'ActionExecutionMessage',\n // createdAt: new Date(),\n // id: 'tool-1',\n // name: '已调用MCP智能工具',\n // arguments: { param1: 'foo' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // icon: documentIcon,\n // type: 'MCP_TOOL',\n // cost: '3.9',\n // },\n // },\n // // // 工具库调用(PLUGIN_TOOL)\n // {\n // type: 'ActionExecutionMessage',\n // createdAt: new Date(),\n // id: 'tool-2',\n // name: '已调用插件工具',\n // arguments: { param1: 'foo' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // icon: documentIcon,\n // type: 'MCP_TOOL',\n // cost: '3.9',\n // },\n // },\n // // // 工具库调用(SKILL)\n // // {\n // // action: 'INVOKE_AGENT_TOOL_START',\n // // id: 'tool-3',\n // // toolType: 'SKILL',\n // // agentToolName: '技能工具',\n // // args: { param3: 'baz' },\n\n // // },\n // // // 知识库调用(FAQ)\n // // {\n // // action: 'RECALL_KNOWLEDGE_START',\n // // uniqueId: 'kb-1',\n // // processStatus: 'START',\n // // args: { question: '什么是FAQ?' },\n // // knowledgeType: 'FAQ',\n // // },\n // {\n // type: 'ActionExecutionMessage',\n // createdAt: new Date(),\n // id: 'tool-3',\n // name: '已调用文档知识库',\n // arguments: { param1: 'foo' },\n // extra: {\n // action: 'RECALL_KNOWLEDGE_START',\n // icon: documentIcon,\n // type: 'MCP_TOOL',\n // cost: '3.9',\n // },\n // },\n // // // 知识库调用(DOCUMENT)\n // // {\n // // action: 'RECALL_KNOWLEDGE_START',\n // // uniqueId: 'kb-2',\n // // processStatus: 'START',\n // // args: { question: '文档库介绍' },\n // // knowledgeType: 'DOCUMENT',\n // // },\n // // 运行完毕\n // ],\n extra: {\n noFooter: true,\n },\n },\n {\n id: '4',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '能否生成一段明年的产品计划开发计划文档给我',\n },\n },\n {\n id: '0',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: `\n# 项目开发计划\n\n本文档概述了 2025 年第三季度的产品开发计划,包括目标、里程碑、团队分工和风险预案。\n\n---\n\n## 🎯 核心目标\n\n- 提升用户留存率至 **45%**\n- 完成 Web 端新版上线\n- 建立 AI 推荐模块 MVP\n- 优化数据库访问性能\n\n---\n\n## 📅 关键时间节点\n\n| 里程碑 | 截止日期 | 负责人 | 代理人 | 截止日期 | 负责人 |\n|------------------|--------------|----------|------------------|--------------|----------|\n| 产品需求冻结 | 2025-08-01 | Alice | 产品需求冻结 | 2025-08-01 | Alice |\n| UI 设计定稿 | 2025-08-10 | Bob | 产品需求冻结 | 2025-08-01 | Alice |\n| 开发完成(内测) | 2025-09-15 | Charlie | 产品需求冻结 | 2025-08-01 | Alice |\n| 正式上线 | 2025-09-30 | Diana | 产品需求冻结 | 2025-08-01 | Alice |\n\n---\n\n## 🛠️ 技术方案简述\n\n我们将使用以下技术栈:\n\n- 前端:React + Vite + Zustand\n- 后端:Node.js + PostgreSQL\n- 数据分析:Python + Pandas\n- 部署环境:Kubernetes on AWS\n\n---\n\n## 💡 示例代码片段\n\n以下是一个用于生成唯一 ID 的函数示例:\n\n~~~ts\nimport { nanoid } from 'nanoid'\n\nexport function generateSessionId() {\n return \\`sess-\\${nanoid()}\\`\n}\n~~~\n`,\n },\n extra: {\n noFooter: true,\n },\n },\n {\n id: '11',\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [\n {\n key: '1',\n description: '我要查看 AI 文档',\n },\n {\n key: '2',\n description: '我如何看待 AI',\n },\n {\n key: '3',\n description: '你是谁?',\n },\n ],\n },\n];\n\n// 基础用法\nconst BasicUsageStory = (args: any) => {\n const [messages, setMessages] = useState<Messages[]>(mockMessages);\n const [loading, setLoading] = useState<boolean>(false);\n\n // 模拟随机字符串流式返回\n const handleSendMessage = () => {\n setLoading(true);\n\n // 模拟流式输出(向 mockMessages 第二条消息 content.text 追加)\n const stream = ['我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容','我', '正在', '为', '你', '生成', '内容', '好','多', '好','多', '好','多', '好','多', '好','多', '好','多', '好','多', '好','多', '好','多', '好','多', '好','多', '……'];\n\n stream.forEach((chunk, idx) => {\n setTimeout(() => {\n setMessages((prev) => {\n const updated = [...prev];\n const targetIndex = 2; // mockMessages 的第二条(索引 1)\n const targetMsg = updated[targetIndex];\n\n // 确保该消息存在且是 TextMessage\n if (targetMsg && targetMsg.type === 'TextMessage') {\n // content 可能是多种类型,这里做类型守卫\n if ('text' in targetMsg.content) {\n updated[targetIndex] = {\n ...targetMsg,\n content: {\n ...targetMsg.content,\n // 模拟随机字符串流式拼接\n // text: targetMsg.content.text + chunk + Math.random().toString(36).slice(2, 5),\n },\n thinks: targetMsg.thinks + chunk + Math.random().toString(36).slice(2, 5),\n status: MessageStatus.pending,\n };\n }\n }\n\n // 最后一个流块时,标记完成\n if (idx === stream.length - 1) {\n updated[targetIndex].execute?.push(\n {\n id: '5',\n type: 'ActionExecutionMessage',\n extra: {\n icon: documentIcon,\n },\n name: '运行完毕',\n createdAt: new Date(),\n });\n setLoading(false);\n updated[targetIndex] = {\n ...updated[targetIndex],\n status: MessageStatus.done,\n };\n }\n\n return updated;\n });\n }, 200 * (idx + 1)); // 每个片段延迟 600ms 模拟流\n });\n };\n\n useEffect(() => {\n if (messages) {\n handleSendMessage();\n }\n }, []);\n\n // 清空消息\n const handleClear = () => {\n setMessages([]);\n };\n\n // 模拟按钮回调\n const handleActions = (index: number, data: any) => {\n console.log(index, data);\n };\n\n // 模拟快捷短语点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev) => prev.filter((m) => m.id !== id));\n };\n\n // tooltip\n const ToolTip = (data: any) => {\n const { cost, token } = data?.extra || {};\n if (!cost && !token) return null;\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n fontSize: '12px',\n color: '#949494',\n flex: 1,\n paddingRight: '40px',\n }}\n >\n {cost && <div>{cost}s</div>}\n {token && <Divider type=\"vertical\" />}\n {token && <div>{token} tokens</div>}\n </div>\n );\n };\n\n return (\n <div\n style={{\n height: '600px',\n width: '400px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n }}\n >\n <XAiChatbot\n {...args}\n inputShow={false}\n messages={messages}\n loading={loading}\n messageTooltip={ToolTip}\n onClear={handleClear}\n onSuggestMessageClick={handleSuggestMessageClick}\n onSend={handleSendMessage}\n onMessagesActionsCallback={handleActions}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n navbar: {\n title: '智能助手',\n },\n // messages: mockMessages,\n emptyStateText: '众安智能体',\n },\n};\n\n// 在 Provider 中使用\nexport const 在Provider中使用: Story = {\n decorators: [\n (Story) => (\n <XAiProvider token=\"test-token\" url=\"https://api.example.com\">\n <Story />\n </XAiProvider>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 多个 Provider 实例\nexport const 多个Provider实例: Story = {\n decorators: [\n (Story) => (\n <div style={{ display: 'flex', gap: '50px', height: '600px' }}>\n <XAiProvider providerId=\"chat1\" token=\"token1\" url=\"https://api1.example.com\">\n <div style={{ width: '300px', marginRight: '40px' }}>\n <Story />\n </div>\n </XAiProvider>\n <XAiProvider providerId=\"chat2\" token=\"token2\" url=\"https://api2.example.com\">\n <div style={{ width: '300px' }}>\n <Story />\n </div>\n </XAiProvider>\n </div>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 展示新架构的示例组件\nconst ArchitectureDemoComponent: React.FC<{ title: string }> = ({ title }) => {\n const { mergedProps, isInProvider, getProviderValue } = useProviderContext({\n props: { title },\n mergeLogic: (props, context) => {\n if (!context?.isInProvider) {\n return props;\n }\n\n return {\n ...props,\n messages: context.messages,\n loading: context.loading,\n customData: context.messages?.length || 0,\n };\n },\n });\n\n const providerMethods = useProviderMethods();\n\n return (\n <div style={{\n padding: '15px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n marginBottom: '10px',\n backgroundColor: '#fafafa',\n }}\n >\n <h4 style={{ margin: '0 0 10px 0' }}>{mergedProps.title}</h4>\n <div style={{ fontSize: '12px', color: '#666' }}>\n <p>Provider 状态: {isInProvider ? '✅ 已连接' : '❌ 未连接'}</p>\n <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n <p>加载状态: {getProviderValue('loading') ? '🔄 加载中' : '✅ 就绪'}</p>\n <button\n onClick={() => providerMethods.sendMessage?.('来自架构演示组件的消息')}\n disabled={!isInProvider}\n style={{\n fontSize: '12px',\n padding: '4px 8px',\n backgroundColor: isInProvider ? '#1890ff' : '#d9d9d9',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n cursor: isInProvider ? 'pointer' : 'not-allowed',\n }}\n >\n {isInProvider ? '发送消息' : '需要 Provider'}\n </button>\n </div>\n </div>\n );\n};\n\n// 展示新架构的示例\nexport const 新架构演示: Story = {\n render: (args) => (\n <div style={{ width: '500px', height: '700px' }}>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"architecture-demo\">\n <div style={{ padding: '20px' }}>\n <h3 style={{ marginBottom: '20px' }}>新架构演示</h3>\n <p style={{ marginBottom: '20px', color: '#666' }}>\n 展示如何使用 useProviderContext 和 useProviderMethods Hook\n </p>\n\n {/* 演示组件 */}\n <div style={{ marginBottom: '20px' }}>\n <ArchitectureDemoComponent title=\"演示组件 A\" />\n <ArchitectureDemoComponent title=\"演示组件 B\" />\n <ArchitectureDemoComponent title=\"演示组件 C\" />\n </div>\n\n {/* 聊天机器人 */}\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '架构演示聊天机器人',\n subtitle: '展示新 Hook 的使用',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 对比示例:独立使用 vs Provider 模式\nexport const 架构对比演示: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n {/* 独立使用 */}\n <div style={{ width: '300px' }}>\n <h4>独立使用模式</h4>\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"独立组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '独立聊天机器人',\n subtitle: '不依赖 Provider',\n }}\n onSend={(type, content) => {\n console.log('独立模式发送:', type, content);\n }}\n onClear={() => {\n console.log('独立模式清空');\n }}\n />\n </div>\n </div>\n\n {/* Provider 模式 */}\n <div style={{ width: '300px' }}>\n <h4>Provider 模式</h4>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"comparison-demo\">\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"Provider 组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useEffect","useState","Divider","MessageRole","MessageStatus","documentIcon","XAiProvider","XAiChatbot","useProviderContext","useProviderMethods","jsxs","_jsxs","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","navbar","description","messages","mockMessages","id","type","createdAt","Date","status","done","role","assistant","content","text","user","parentMessageId","thinks","extra","noFooter","suggestion","key","BasicUsageStory","args","_useState","_useState2","_slicedToArray","setMessages","_useState3","_useState4","loading","setLoading","handleSendMessage","stream","forEach","chunk","idx","setTimeout","prev","updated","_toConsumableArray","targetIndex","targetMsg","_objectSpread","Math","random","toString","slice","pending","length","_updated$targetIndex$","execute","push","icon","name","handleClear","handleActions","index","data","console","log","handleSuggestMessageClick","_item","filter","m","ToolTip","_ref","cost","token","style","display","alignItems","fontSize","color","flex","paddingRight","children","height","width","border","borderRadius","inputShow","messageTooltip","onClear","onSuggestMessageClick","onSend","onMessagesActionsCallback","enableUpload","uploadRequest","_ref2","file","onProgress","onSuccess","info","percent","基础用法","render","emptyStateText","在Provider中使用","decorators","Story","url","多个Provider实例","gap","providerId","marginRight","ArchitectureDemoComponent","_ref3","_getProviderValue","_useProviderContext","props","mergeLogic","context","_context$messages","isInProvider","customData","mergedProps","getProviderValue","providerMethods","padding","marginBottom","backgroundColor","margin","onClick","_providerMethods$send","sendMessage","call","disabled","cursor","新架构演示","navbarShow","subtitle","_ref4","架构对比演示","_ref5","_ref6"],"sources":["../../../../src/components/XAiChatbot/XAiChatbot.stories.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Divider } from 'antd';\nimport { MessageRole, MessageStatus } from '@/types/XAiMessage';\nimport type { Messages } from '@/types/XAiMessage';\nimport documentIcon from '@/assets/document.svg';\nimport XAiProvider from '../XAiProvider';\nimport XAiChatbot from '.';\nimport { useProviderContext, useProviderMethods } from '@/hooks/useProviderContext';\n\nconst meta: Meta<typeof XAiChatbot> = {\n title: 'AI组件/XAiChatbot 聊天框',\n component: XAiChatbot,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n navbar: {\n description: '导航栏配置',\n },\n messages: {\n description: '消息列表',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// mock 消息数据,严格符合 Messages 类型\nconst mockMessages: Messages[] = [\n {\n id: '1',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '你好,有什么我能帮助你的吗?',\n },\n },\n {\n id: '2',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '检索从北京到上海的车票数据给我',\n },\n parentMessageId: '1',\n },\n {\n id: '22',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '',\n },\n thinks: '',\n // execute: [\n // // 工具库调用(MCP_TOOL)\n // {\n // type: 'ActionExecutionMessage',\n // createdAt: new Date(),\n // id: 'tool-1',\n // name: '已调用MCP智能工具',\n // arguments: { param1: 'foo' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // icon: documentIcon,\n // type: 'MCP_TOOL',\n // cost: '3.9',\n // },\n // },\n // // // 工具库调用(PLUGIN_TOOL)\n // {\n // type: 'ActionExecutionMessage',\n // createdAt: new Date(),\n // id: 'tool-2',\n // name: '已调用插件工具',\n // arguments: { param1: 'foo' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // icon: documentIcon,\n // type: 'MCP_TOOL',\n // cost: '3.9',\n // },\n // },\n // // // 工具库调用(SKILL)\n // // {\n // // action: 'INVOKE_AGENT_TOOL_START',\n // // id: 'tool-3',\n // // toolType: 'SKILL',\n // // agentToolName: '技能工具',\n // // args: { param3: 'baz' },\n\n // // },\n // // // 知识库调用(FAQ)\n // // {\n // // action: 'RECALL_KNOWLEDGE_START',\n // // uniqueId: 'kb-1',\n // // processStatus: 'START',\n // // args: { question: '什么是FAQ?' },\n // // knowledgeType: 'FAQ',\n // // },\n // {\n // type: 'ActionExecutionMessage',\n // createdAt: new Date(),\n // id: 'tool-3',\n // name: '已调用文档知识库',\n // arguments: { param1: 'foo' },\n // extra: {\n // action: 'RECALL_KNOWLEDGE_START',\n // icon: documentIcon,\n // type: 'MCP_TOOL',\n // cost: '3.9',\n // },\n // },\n // // // 知识库调用(DOCUMENT)\n // // {\n // // action: 'RECALL_KNOWLEDGE_START',\n // // uniqueId: 'kb-2',\n // // processStatus: 'START',\n // // args: { question: '文档库介绍' },\n // // knowledgeType: 'DOCUMENT',\n // // },\n // // 运行完毕\n // ],\n extra: {\n noFooter: true,\n },\n },\n {\n id: '4',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '能否生成一段明年的产品计划开发计划文档给我',\n },\n },\n {\n id: '0',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: `\n# 项目开发计划\n\n本文档概述了 2025 年第三季度的产品开发计划,包括目标、里程碑、团队分工和风险预案。\n\n---\n\n## 🎯 核心目标\n\n- 提升用户留存率至 **45%**\n- 完成 Web 端新版上线\n- 建立 AI 推荐模块 MVP\n- 优化数据库访问性能\n\n---\n\n## 📅 关键时间节点\n\n| 里程碑 | 截止日期 | 负责人 | 代理人 | 截止日期 | 负责人 |\n|------------------|--------------|----------|------------------|--------------|----------|\n| 产品需求冻结 | 2025-08-01 | Alice | 产品需求冻结 | 2025-08-01 | Alice |\n| UI 设计定稿 | 2025-08-10 | Bob | 产品需求冻结 | 2025-08-01 | Alice |\n| 开发完成(内测) | 2025-09-15 | Charlie | 产品需求冻结 | 2025-08-01 | Alice |\n| 正式上线 | 2025-09-30 | Diana | 产品需求冻结 | 2025-08-01 | Alice |\n\n---\n\n## 🛠️ 技术方案简述\n\n我们将使用以下技术栈:\n\n- 前端:React + Vite + Zustand\n- 后端:Node.js + PostgreSQL\n- 数据分析:Python + Pandas\n- 部署环境:Kubernetes on AWS\n\n---\n\n## 💡 示例代码片段\n\n以下是一个用于生成唯一 ID 的函数示例:\n\n~~~ts\nimport { nanoid } from 'nanoid'\n\nexport function generateSessionId() {\n return \\`sess-\\${nanoid()}\\`\n}\n~~~\n`,\n },\n extra: {\n noFooter: true,\n },\n },\n {\n id: '11',\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [\n {\n key: '1',\n description: '我要查看 AI 文档',\n },\n {\n key: '2',\n description: '我如何看待 AI',\n },\n {\n key: '3',\n description: '你是谁?',\n },\n ],\n },\n];\n\n// 基础用法\nconst BasicUsageStory = (args: any) => {\n const [messages, setMessages] = useState<Messages[]>(mockMessages);\n const [loading, setLoading] = useState<boolean>(false);\n\n // 模拟随机字符串流式返回\n const handleSendMessage = () => {\n setLoading(true);\n\n // 模拟流式输出(向 mockMessages 第二条消息 content.text 追加)\n const stream = ['我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '我', '正在', '为', '你', '生成', '内容', '好', '多', '好', '多', '好', '多', '好', '多', '好', '多', '好', '多', '好', '多', '好', '多', '好', '多', '好', '多', '好', '多', '……'];\n\n stream.forEach((chunk, idx) => {\n setTimeout(() => {\n setMessages((prev) => {\n const updated = [...prev];\n const targetIndex = 2; // mockMessages 的第二条(索引 1)\n const targetMsg = updated[targetIndex];\n\n // 确保该消息存在且是 TextMessage\n if (targetMsg && targetMsg.type === 'TextMessage') {\n // content 可能是多种类型,这里做类型守卫\n if ('text' in targetMsg.content) {\n updated[targetIndex] = {\n ...targetMsg,\n content: {\n ...targetMsg.content,\n // 模拟随机字符串流式拼接\n // text: targetMsg.content.text + chunk + Math.random().toString(36).slice(2, 5),\n },\n thinks: targetMsg.thinks + chunk + Math.random().toString(36).slice(2, 5),\n status: MessageStatus.pending,\n };\n }\n }\n\n // 最后一个流块时,标记完成\n if (idx === stream.length - 1) {\n updated[targetIndex].execute?.push(\n {\n id: '5',\n type: 'ActionExecutionMessage',\n extra: {\n icon: documentIcon,\n },\n name: '运行完毕',\n createdAt: new Date(),\n });\n setLoading(false);\n updated[targetIndex] = {\n ...updated[targetIndex],\n status: MessageStatus.done,\n };\n }\n\n return updated;\n });\n }, 200 * (idx + 1)); // 每个片段延迟 600ms 模拟流\n });\n };\n\n useEffect(() => {\n if (messages) {\n handleSendMessage();\n }\n }, []);\n\n // 清空消息\n const handleClear = () => {\n setMessages([]);\n };\n\n // 模拟按钮回调\n const handleActions = (index: number, data: any) => {\n console.log(index, data);\n };\n\n // 模拟快捷短语点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev) => prev.filter((m) => m.id !== id));\n };\n\n // tooltip\n const ToolTip = (data: any) => {\n const { cost, token } = data?.extra || {};\n if (!cost && !token) return null;\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n fontSize: '12px',\n color: '#949494',\n flex: 1,\n paddingRight: '40px',\n }}\n >\n {cost && <div>{cost}s</div>}\n {token && <Divider type=\"vertical\" />}\n {token && <div>{token} tokens</div>}\n </div>\n );\n };\n\n return (\n <div\n style={{\n height: '600px',\n width: '400px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n }}\n >\n <XAiChatbot\n {...args}\n inputShow={false}\n messages={messages}\n loading={loading}\n messageTooltip={ToolTip}\n onClear={handleClear}\n onSuggestMessageClick={handleSuggestMessageClick}\n onSend={handleSendMessage}\n onMessagesActionsCallback={handleActions}\n enableUpload\n uploadRequest={({ file, onProgress, onSuccess }) => {\n console.info(file);\n onProgress?.({\n percent: 50,\n });\n setTimeout(() => {\n onSuccess?.({});\n }, 1000);\n }}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n navbar: {\n title: '智能助手',\n },\n // messages: mockMessages,\n emptyStateText: '众安智能体',\n },\n};\n\n// 在 Provider 中使用\nexport const 在Provider中使用: Story = {\n decorators: [\n (Story) => (\n <XAiProvider token=\"test-token\" url=\"https://api.example.com\">\n <Story />\n </XAiProvider>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 多个 Provider 实例\nexport const 多个Provider实例: Story = {\n decorators: [\n (Story) => (\n <div style={{ display: 'flex', gap: '50px', height: '600px' }}>\n <XAiProvider providerId=\"chat1\" token=\"token1\" url=\"https://api1.example.com\">\n <div style={{ width: '300px', marginRight: '40px' }}>\n <Story />\n </div>\n </XAiProvider>\n <XAiProvider providerId=\"chat2\" token=\"token2\" url=\"https://api2.example.com\">\n <div style={{ width: '300px' }}>\n <Story />\n </div>\n </XAiProvider>\n </div>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 展示新架构的示例组件\nconst ArchitectureDemoComponent: React.FC<{ title: string }> = ({ title }) => {\n const { mergedProps, isInProvider, getProviderValue } = useProviderContext({\n props: { title },\n mergeLogic: (props, context) => {\n if (!context?.isInProvider) {\n return props;\n }\n\n return {\n ...props,\n messages: context.messages,\n loading: context.loading,\n customData: context.messages?.length || 0,\n };\n },\n });\n\n const providerMethods = useProviderMethods();\n\n return (\n <div style={{\n padding: '15px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n marginBottom: '10px',\n backgroundColor: '#fafafa',\n }}\n >\n <h4 style={{ margin: '0 0 10px 0' }}>{mergedProps.title}</h4>\n <div style={{ fontSize: '12px', color: '#666' }}>\n <p>Provider 状态: {isInProvider ? '✅ 已连接' : '❌ 未连接'}</p>\n <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n <p>加载状态: {getProviderValue('loading') ? '🔄 加载中' : '✅ 就绪'}</p>\n <button\n onClick={() => providerMethods.sendMessage?.({ text: '来自架构演示组件的消息' })}\n disabled={!isInProvider}\n style={{\n fontSize: '12px',\n padding: '4px 8px',\n backgroundColor: isInProvider ? '#1890ff' : '#d9d9d9',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n cursor: isInProvider ? 'pointer' : 'not-allowed',\n }}\n >\n {isInProvider ? '发送消息' : '需要 Provider'}\n </button>\n </div>\n </div>\n );\n};\n\n// 展示新架构的示例\nexport const 新架构演示: Story = {\n render: (args) => (\n <div style={{ width: '500px', height: '700px' }}>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"architecture-demo\">\n <div style={{ padding: '20px' }}>\n <h3 style={{ marginBottom: '20px' }}>新架构演示</h3>\n <p style={{ marginBottom: '20px', color: '#666' }}>\n 展示如何使用 useProviderContext 和 useProviderMethods Hook\n </p>\n\n {/* 演示组件 */}\n <div style={{ marginBottom: '20px' }}>\n <ArchitectureDemoComponent title=\"演示组件 A\" />\n <ArchitectureDemoComponent title=\"演示组件 B\" />\n <ArchitectureDemoComponent title=\"演示组件 C\" />\n </div>\n\n {/* 聊天机器人 */}\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '架构演示聊天机器人',\n subtitle: '展示新 Hook 的使用',\n }}\n enableUpload\n uploadRequest={({ file, onProgress, onSuccess }) => {\n console.info(file);\n onProgress?.({\n percent: 50,\n });\n setTimeout(() => {\n onSuccess?.({});\n }, 1000);\n }}\n />\n </div>\n </XAiProvider>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 对比示例:独立使用 vs Provider 模式\nexport const 架构对比演示: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n {/* 独立使用 */}\n <div style={{ width: '300px' }}>\n <h4>独立使用模式</h4>\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"独立组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '独立聊天机器人',\n subtitle: '不依赖 Provider',\n }}\n onSend={(content) => {\n console.log('独立模式发送:', content);\n }}\n onClear={() => {\n console.log('独立模式清空');\n }}\n enableUpload\n uploadRequest={({ file, onProgress, onSuccess }) => {\n console.info(file);\n onProgress?.({\n percent: 50,\n });\n setTimeout(() => {\n onSuccess?.({});\n }, 1000);\n }}\n />\n </div>\n </div>\n\n {/* Provider 模式 */}\n <div style={{ width: '300px' }}>\n <h4>Provider 模式</h4>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"comparison-demo\">\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"Provider 组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理',\n }}\n enableUpload\n uploadRequest={({ file, onProgress, onSuccess }) => {\n console.info(file);\n onProgress?.({\n percent: 50,\n });\n setTimeout(() => {\n onSuccess?.({});\n }, 1000);\n }}\n />\n </div>\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n"],"mappings":"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"}
@@ -2,8 +2,8 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  // 文件: components/XAiChatbot/index.tsx
3
3
 
4
4
  import React, { useRef, useState, useMemo } from 'react';
5
- import { Tooltip } from 'antd';
6
- import { Bubble, Prompts } from '@ant-design/x';
5
+ import { Tooltip, Flex } from 'antd';
6
+ import { Bubble, Prompts, Attachments } from '@ant-design/x';
7
7
  import { UserOutlined, RedoOutlined, CopyOutlined, DeleteOutlined } from '@ant-design/icons';
8
8
  import clsx from 'clsx';
9
9
  import MarkdownIt from 'markdown-it';
@@ -208,40 +208,43 @@ var XAiChatbot = function XAiChatbot(props) {
208
208
  // 使用新的 Hook 来处理 Provider 上下文
209
209
  var _useChatbotContext = useChatbotContext(props),
210
210
  mergedProps = _useChatbotContext.mergedProps;
211
- var _mergedProps$navbarSh = mergedProps.navbarShow,
212
- navbarShow = _mergedProps$navbarSh === void 0 ? false : _mergedProps$navbarSh,
213
- navbar = mergedProps.navbar,
214
- _mergedProps$renderNa = mergedProps.renderNavbar,
215
- renderNavbar = _mergedProps$renderNa === void 0 ? null : _mergedProps$renderNa,
216
- _mergedProps$clearBtn = mergedProps.clearBtnShow,
217
- clearBtnShow = _mergedProps$clearBtn === void 0 ? true : _mergedProps$clearBtn,
218
- _mergedProps$inputSho = mergedProps.inputShow,
219
- inputShow = _mergedProps$inputSho === void 0 ? true : _mergedProps$inputSho,
220
- _mergedProps$loading = mergedProps.loading,
221
- propLoading = _mergedProps$loading === void 0 ? false : _mergedProps$loading,
222
- messageTooltip = mergedProps.messageTooltip,
223
- avatar = mergedProps.avatar,
224
- userAvatar = mergedProps.userAvatar,
225
- propMessages = mergedProps.messages,
226
- _mergedProps$text = mergedProps.text,
227
- text = _mergedProps$text === void 0 ? '' : _mergedProps$text,
228
- _mergedProps$footerTi = mergedProps.footerTips,
229
- footerTips = _mergedProps$footerTi === void 0 ? '' : _mergedProps$footerTi,
230
- _mergedProps$empty = mergedProps.empty,
231
- empty = _mergedProps$empty === void 0 ? null : _mergedProps$empty,
232
- _mergedProps$emptySta = mergedProps.emptyStateImage,
233
- emptyStateImage = _mergedProps$emptySta === void 0 ? emptyIcon : _mergedProps$emptySta,
234
- _mergedProps$emptySta2 = mergedProps.emptyStateText,
235
- emptyStateText = _mergedProps$emptySta2 === void 0 ? '我的智能体' : _mergedProps$emptySta2,
236
- _mergedProps$messageA = mergedProps.messageActions,
237
- messageActions = _mergedProps$messageA === void 0 ? defaultActions : _mergedProps$messageA,
238
- onMessagesActionsCallback = mergedProps.onMessagesActionsCallback,
239
- onSuggestMessageClick = mergedProps.onSuggestMessageClick,
240
- onSend = mergedProps.onSend,
241
- onClear = mergedProps.onClear,
242
- onStop = mergedProps.onStop,
243
- providerId = mergedProps.providerId,
244
- messageTop = mergedProps.messageTop;
211
+ var _ref2 = mergedProps,
212
+ _ref2$navbarShow = _ref2.navbarShow,
213
+ navbarShow = _ref2$navbarShow === void 0 ? false : _ref2$navbarShow,
214
+ navbar = _ref2.navbar,
215
+ _ref2$renderNavbar = _ref2.renderNavbar,
216
+ renderNavbar = _ref2$renderNavbar === void 0 ? null : _ref2$renderNavbar,
217
+ _ref2$clearBtnShow = _ref2.clearBtnShow,
218
+ clearBtnShow = _ref2$clearBtnShow === void 0 ? true : _ref2$clearBtnShow,
219
+ _ref2$inputShow = _ref2.inputShow,
220
+ inputShow = _ref2$inputShow === void 0 ? true : _ref2$inputShow,
221
+ _ref2$loading = _ref2.loading,
222
+ propLoading = _ref2$loading === void 0 ? false : _ref2$loading,
223
+ messageTooltip = _ref2.messageTooltip,
224
+ avatar = _ref2.avatar,
225
+ userAvatar = _ref2.userAvatar,
226
+ propMessages = _ref2.messages,
227
+ _ref2$text = _ref2.text,
228
+ text = _ref2$text === void 0 ? '' : _ref2$text,
229
+ _ref2$footerTips = _ref2.footerTips,
230
+ footerTips = _ref2$footerTips === void 0 ? '' : _ref2$footerTips,
231
+ _ref2$empty = _ref2.empty,
232
+ empty = _ref2$empty === void 0 ? null : _ref2$empty,
233
+ _ref2$emptyStateImage = _ref2.emptyStateImage,
234
+ emptyStateImage = _ref2$emptyStateImage === void 0 ? emptyIcon : _ref2$emptyStateImage,
235
+ _ref2$emptyStateText = _ref2.emptyStateText,
236
+ emptyStateText = _ref2$emptyStateText === void 0 ? '我的智能体' : _ref2$emptyStateText,
237
+ _ref2$messageActions = _ref2.messageActions,
238
+ messageActions = _ref2$messageActions === void 0 ? defaultActions : _ref2$messageActions,
239
+ onMessagesActionsCallback = _ref2.onMessagesActionsCallback,
240
+ onSuggestMessageClick = _ref2.onSuggestMessageClick,
241
+ onSend = _ref2.onSend,
242
+ onClear = _ref2.onClear,
243
+ onStop = _ref2.onStop,
244
+ providerId = _ref2.providerId,
245
+ messageTop = _ref2.messageTop,
246
+ enableUpload = _ref2.enableUpload,
247
+ uploadRequest = _ref2.uploadRequest;
245
248
 
246
249
  // 如果在 Provider 中,使用 Provider 的状态
247
250
  var messages = mergedProps.messages || propMessages || [];
@@ -250,6 +253,10 @@ var XAiChatbot = function XAiChatbot(props) {
250
253
  _useState6 = _slicedToArray(_useState5, 2),
251
254
  content = _useState6[0],
252
255
  setContent = _useState6[1]; // 输入框文本
256
+ var _useState7 = useState([]),
257
+ _useState8 = _slicedToArray(_useState7, 2),
258
+ files = _useState8[0],
259
+ setFiles = _useState8[1];
253
260
  var lastMessageId = useRef('');
254
261
  var isScriptScrolling = useRef(false);
255
262
  var chatId = providerId ? "za-chatbot-container-".concat(providerId) : 'za-chatbot-container';
@@ -267,10 +274,10 @@ var XAiChatbot = function XAiChatbot(props) {
267
274
  };
268
275
 
269
276
  // 消息功能区组件
270
- var FooterActions = function FooterActions(_ref2) {
271
- var data = _ref2.data,
272
- _ref2$lastMessage = _ref2.lastMessage,
273
- lastMessage = _ref2$lastMessage === void 0 ? false : _ref2$lastMessage;
277
+ var FooterActions = function FooterActions(_ref3) {
278
+ var data = _ref3.data,
279
+ _ref3$lastMessage = _ref3.lastMessage,
280
+ lastMessage = _ref3$lastMessage === void 0 ? false : _ref3$lastMessage;
274
281
  return /*#__PURE__*/_jsx("div", {
275
282
  className: clsx(styles.flex, styles.gap(13)),
276
283
  children: messageActions.map(function (action, index) {
@@ -291,10 +298,10 @@ var XAiChatbot = function XAiChatbot(props) {
291
298
  };
292
299
 
293
300
  // 消息底部区域
294
- var MessageFooter = function MessageFooter(_ref3) {
295
- var data = _ref3.data,
296
- _ref3$lastMessage = _ref3.lastMessage,
297
- lastMessage = _ref3$lastMessage === void 0 ? false : _ref3$lastMessage;
301
+ var MessageFooter = function MessageFooter(_ref4) {
302
+ var data = _ref4.data,
303
+ _ref4$lastMessage = _ref4.lastMessage,
304
+ lastMessage = _ref4$lastMessage === void 0 ? false : _ref4$lastMessage;
298
305
  return /*#__PURE__*/_jsxs(_Fragment, {
299
306
  children: [messageTooltip === null || messageTooltip === void 0 ? void 0 : messageTooltip(data), /*#__PURE__*/_jsx(FooterActions, {
300
307
  data: data,
@@ -347,13 +354,12 @@ var XAiChatbot = function XAiChatbot(props) {
347
354
  };
348
355
 
349
356
  // 触发发送
350
- var handleSend = function handleSend(type, str) {
351
- if (str.trim()) {
352
- // 直接使用合并后的 onSend,自动处理 Provider 和独立模式
353
- onSend === null || onSend === void 0 || onSend(type, str);
354
- setContent(''); // 发送后清空输入框内容
355
- scrollToBottom();
356
- }
357
+ var handleSend = function handleSend(obj) {
358
+ // 直接使用合并后的 onSend,自动处理 Provider 和独立模式
359
+ onSend === null || onSend === void 0 || onSend(obj);
360
+ setContent(''); // 发送后清空输入框内容
361
+ setFiles([]); // 发送后清空文件
362
+ scrollToBottom();
357
363
  };
358
364
 
359
365
  // 输出内容
@@ -426,20 +432,20 @@ var XAiChatbot = function XAiChatbot(props) {
426
432
  roles: rolesObject,
427
433
  className: styles.messageList,
428
434
  items: messages.map(function (msg) {
429
- var _ref4 = msg,
430
- id = _ref4.id,
431
- role = _ref4.role,
432
- status = _ref4.status,
433
- type = _ref4.type,
434
- _ref4$execute = _ref4.execute,
435
- execute = _ref4$execute === void 0 ? [] : _ref4$execute,
436
- _ref4$thinks = _ref4.thinks,
437
- thinks = _ref4$thinks === void 0 ? '' : _ref4$thinks,
438
- _ref4$extra = _ref4.extra,
439
- extra = _ref4$extra === void 0 ? {
435
+ var _ref5 = msg,
436
+ id = _ref5.id,
437
+ role = _ref5.role,
438
+ status = _ref5.status,
439
+ type = _ref5.type,
440
+ _ref5$execute = _ref5.execute,
441
+ execute = _ref5$execute === void 0 ? [] : _ref5$execute,
442
+ _ref5$thinks = _ref5.thinks,
443
+ thinks = _ref5$thinks === void 0 ? '' : _ref5$thinks,
444
+ _ref5$extra = _ref5.extra,
445
+ extra = _ref5$extra === void 0 ? {
440
446
  noFooter: false
441
- } : _ref4$extra,
442
- stepContent = _ref4.stepContent;
447
+ } : _ref5$extra,
448
+ stepContent = _ref5.stepContent;
443
449
  // 最后一条 AI消息标识
444
450
  if (role === MessageRole.assistant) {
445
451
  lastMessageId.current = id;
@@ -510,9 +516,11 @@ var XAiChatbot = function XAiChatbot(props) {
510
516
  vertical: true,
511
517
  items: msg.content,
512
518
  onItemClick: function onItemClick(info) {
513
- onSuggestMessageClick === null || onSuggestMessageClick === void 0 || onSuggestMessageClick(info.data, id, 'text');
519
+ onSuggestMessageClick === null || onSuggestMessageClick === void 0 || onSuggestMessageClick(info.data, id);
514
520
  if (info.data.description) {
515
- onSend === null || onSend === void 0 || onSend('text', info.data.description);
521
+ onSend === null || onSend === void 0 || onSend({
522
+ text: info.data.description
523
+ });
516
524
  }
517
525
  }
518
526
  });
@@ -523,12 +531,34 @@ var XAiChatbot = function XAiChatbot(props) {
523
531
  };
524
532
  if (!extra.noFooter) {
525
533
  bubbleContent.footer = function () {
526
- return role === MessageRole.assistant && status !== MessageStatus.failed && /*#__PURE__*/_jsx(_Fragment, {
527
- children: /*#__PURE__*/_jsx(MessageFooter, {
534
+ var _msg$content3;
535
+ var msgFiles = ((_msg$content3 = msg.content) === null || _msg$content3 === void 0 ? void 0 : _msg$content3.files) || [];
536
+ if (role === MessageRole.user && msgFiles.length) {
537
+ return /*#__PURE__*/_jsx(Flex, {
538
+ gap: 8,
539
+ wrap: true,
540
+ justify: "flex-end",
541
+ style: {
542
+ maxWidth: 600
543
+ },
544
+ children: msgFiles.map(function (f) {
545
+ return /*#__PURE__*/_jsx(Attachments.FileCard, {
546
+ item: {
547
+ uid: f.fileId,
548
+ name: f.fileName,
549
+ url: f.fileUrl,
550
+ size: f.fileSize
551
+ }
552
+ }, f.fileId);
553
+ })
554
+ });
555
+ }
556
+ if (role === MessageRole.assistant && status !== MessageStatus.failed) {
557
+ return /*#__PURE__*/_jsx(MessageFooter, {
528
558
  data: msg,
529
559
  lastMessage: lastMessageId.current === id
530
- })
531
- });
560
+ });
561
+ }
532
562
  };
533
563
  }
534
564
  return bubbleContent;
@@ -539,6 +569,10 @@ var XAiChatbot = function XAiChatbot(props) {
539
569
  loading: loading,
540
570
  footerTips: footerTips,
541
571
  clearBtnShow: clearBtnShow,
572
+ enableUpload: enableUpload,
573
+ files: files,
574
+ onChangeFiles: setFiles,
575
+ uploadRequest: uploadRequest,
542
576
  onChange: handleChange,
543
577
  onSubmit: handleSend,
544
578
  onStop: handleStop,