@ai-group/chat-sdk 2.0.1 → 2.0.3

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 (97) hide show
  1. package/dist/cjs/assets/svg/AddChatIcon.js +5 -12
  2. package/dist/cjs/assets/svg/AddChatIcon.js.map +2 -2
  3. package/dist/cjs/components/DislikeFeedback.js +33 -25
  4. package/dist/cjs/components/DislikeFeedback.js.map +2 -2
  5. package/dist/cjs/components/FeedbackTags.js +5 -15
  6. package/dist/cjs/components/FeedbackTags.js.map +2 -2
  7. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +178 -86
  8. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +3 -3
  9. package/dist/cjs/components/XAiChatbot/index.js +199 -131
  10. package/dist/cjs/components/XAiChatbot/index.js.map +3 -3
  11. package/dist/cjs/components/XAiChatbot/styles.js +5 -15
  12. package/dist/cjs/components/XAiChatbot/styles.js.map +2 -2
  13. package/dist/cjs/components/XAiConversations/XAiConversations.stories.js +10 -10
  14. package/dist/cjs/components/XAiConversations/XAiConversations.stories.js.map +2 -2
  15. package/dist/cjs/components/XAiConversations/index.js +61 -41
  16. package/dist/cjs/components/XAiConversations/index.js.map +3 -3
  17. package/dist/cjs/components/XAiConversations/styles.js +5 -15
  18. package/dist/cjs/components/XAiConversations/styles.js.map +3 -3
  19. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +63 -54
  20. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +2 -2
  21. package/dist/cjs/components/XAiProvider/index.js +110 -99
  22. package/dist/cjs/components/XAiProvider/index.js.map +3 -3
  23. package/dist/cjs/components/XAiSDK.js +2 -2
  24. package/dist/cjs/components/XAiSDK.js.map +2 -2
  25. package/dist/cjs/components/XAiSender/XAiSender.stories.js +23 -8
  26. package/dist/cjs/components/XAiSender/XAiSender.stories.js.map +3 -3
  27. package/dist/cjs/components/XAiSender/index.js +161 -89
  28. package/dist/cjs/components/XAiSender/index.js.map +3 -3
  29. package/dist/cjs/components/XAiSender/styles.d.ts +0 -3
  30. package/dist/cjs/components/XAiSender/styles.js +29 -28
  31. package/dist/cjs/components/XAiSender/styles.js.map +2 -2
  32. package/dist/cjs/components/XAiWebSDKWrapper.js +3 -2
  33. package/dist/cjs/components/XAiWebSDKWrapper.js.map +2 -2
  34. package/dist/cjs/hooks/useAgentGenerator.d.ts +3 -3
  35. package/dist/cjs/hooks/useAgentGenerator.js +5 -5
  36. package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
  37. package/dist/cjs/hooks/useProviderContext.d.ts +2 -1
  38. package/dist/cjs/hooks/useProviderContext.js.map +2 -2
  39. package/dist/cjs/hooks/useXAiSDK.js +3 -2
  40. package/dist/cjs/hooks/useXAiSDK.js.map +2 -2
  41. package/dist/cjs/styles/common.js.map +2 -2
  42. package/dist/cjs/styles/markdown.js +5 -15
  43. package/dist/cjs/styles/markdown.js.map +2 -2
  44. package/dist/cjs/types/XAiChatbot.d.ts +8 -6
  45. package/dist/cjs/types/XAiChatbot.js.map +1 -1
  46. package/dist/cjs/types/XAiConversations.d.ts +2 -2
  47. package/dist/cjs/types/XAiConversations.js.map +1 -1
  48. package/dist/cjs/types/XAiMessage.d.ts +2 -1
  49. package/dist/cjs/types/XAiMessage.js.map +2 -2
  50. package/dist/cjs/types/XAiProvider.d.ts +3 -3
  51. package/dist/cjs/types/XAiProvider.js.map +2 -2
  52. package/dist/cjs/types/XAiSender.d.ts +16 -2
  53. package/dist/cjs/types/XAiSender.js.map +1 -1
  54. package/dist/cjs/types/index.js.map +1 -1
  55. package/dist/cjs/utils/umdEntry.d.ts +3 -2
  56. package/dist/cjs/utils/umdEntry.js +12 -5
  57. package/dist/cjs/utils/umdEntry.js.map +3 -3
  58. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js +60 -6
  59. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js.map +1 -1
  60. package/dist/esm/components/XAiChatbot/index.js +84 -72
  61. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  62. package/dist/esm/components/XAiConversations/index.js +2 -2
  63. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  64. package/dist/esm/components/XAiConversations/styles.js.map +1 -1
  65. package/dist/esm/components/XAiProvider/XAiProvider.stories.js +3 -1
  66. package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
  67. package/dist/esm/components/XAiProvider/index.js +1 -1
  68. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  69. package/dist/esm/components/XAiSender/XAiSender.stories.js +33 -13
  70. package/dist/esm/components/XAiSender/XAiSender.stories.js.map +1 -1
  71. package/dist/esm/components/XAiSender/index.js +99 -57
  72. package/dist/esm/components/XAiSender/index.js.map +1 -1
  73. package/dist/esm/components/XAiSender/styles.d.ts +0 -3
  74. package/dist/esm/components/XAiSender/styles.js +3 -5
  75. package/dist/esm/components/XAiSender/styles.js.map +1 -1
  76. package/dist/esm/hooks/useAgentGenerator.d.ts +3 -3
  77. package/dist/esm/hooks/useAgentGenerator.js +7 -8
  78. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  79. package/dist/esm/hooks/useProviderContext.d.ts +2 -1
  80. package/dist/esm/hooks/useProviderContext.js.map +1 -1
  81. package/dist/esm/styles/common.js.map +1 -1
  82. package/dist/esm/types/XAiChatbot.d.ts +8 -6
  83. package/dist/esm/types/XAiChatbot.js.map +1 -1
  84. package/dist/esm/types/XAiConversations.d.ts +2 -2
  85. package/dist/esm/types/XAiConversations.js.map +1 -1
  86. package/dist/esm/types/XAiMessage.d.ts +2 -1
  87. package/dist/esm/types/XAiMessage.js.map +1 -1
  88. package/dist/esm/types/XAiProvider.d.ts +3 -3
  89. package/dist/esm/types/XAiProvider.js.map +1 -1
  90. package/dist/esm/types/XAiSender.d.ts +16 -2
  91. package/dist/esm/types/XAiSender.js.map +1 -1
  92. package/dist/esm/types/index.js.map +1 -1
  93. package/dist/esm/utils/umdEntry.d.ts +3 -2
  94. package/dist/esm/utils/umdEntry.js +2 -2
  95. package/dist/esm/utils/umdEntry.js.map +1 -1
  96. package/dist/umd/chat-sdk.min.js +1 -1
  97. package/package.json +30 -26
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAiConversations.ts"],
4
- "sourcesContent": ["import { type ConversationsProps, type Conversation } from '@ant-design/x';\n\ntype OmitItems = Omit<ConversationsProps, 'items'>;\n\nexport interface sessionData extends Conversation {\n meta?: any;\n}\n\nexport interface XAiConversationsProps extends OmitItems {\n /** 配色 */\n color?: string;\n /** 侧边栏展示形式,若为 true 则为抽屉式展示 */\n isNarrow?: boolean;\n /** 会话列表,替换原来的 items 字段 */\n sessionList?: sessionData[];\n /** session总数,当设置该值时,会增加自动加载逻辑 */\n sessionTotal?: number;\n /** 加载更多函数 */\n loadMoreSession?: () => void;\n /** 点击生成新对话回调 */\n onNewChat?: () => void;\n}\n"],
4
+ "sourcesContent": ["import { type ConversationsProps, type Conversation } from '@ant-design/x';\n\ntype OmitItems = Omit<ConversationsProps, 'items'>;\n\nexport interface SessionData extends Conversation {\n meta?: any;\n}\n\nexport interface XAiConversationsProps extends OmitItems {\n /** 配色 */\n color?: string;\n /** 侧边栏展示形式,若为 true 则为抽屉式展示 */\n isNarrow?: boolean;\n /** 会话列表,替换原来的 items 字段 */\n sessionList?: SessionData[];\n /** session总数,当设置该值时,会增加自动加载逻辑 */\n sessionTotal?: number;\n /** 加载更多函数 */\n loadMoreSession?: () => void;\n /** 点击生成新对话回调 */\n onNewChat?: () => void;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -43,7 +43,8 @@ export interface TextMessage extends BaseMessage {
43
43
  type: 'TextMessage';
44
44
  role: MessageRole;
45
45
  content: {
46
- text: string;
46
+ text?: string;
47
+ files?: any[];
47
48
  };
48
49
  parentMessageId?: string;
49
50
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAiMessage.ts"],
4
- "sourcesContent": ["import type { PromptsProps } from '@ant-design/x';\nimport { inflate } from 'zlib';\n\nexport type MessageType =\n| 'TextMessage'\n| 'ActionExecutionMessage'\n| 'ResultMessage'\n| 'AgentStateMessage'\n| 'SuggestionMessage';\n\nexport enum MessageRole {\n user = 'user', // 用户\n assistant = 'assistant', // AI助手\n suggestion = 'suggestion', // 建议\n system = 'system', // 工具\n}\n\nexport enum MessageStatus {\n init = 'init',\n pending = 'pending', // 生成中/接收中\n done = 'done', // 已完成\n failed = 'failed', // 失败\n recalled = 'recalled', // 已撤回\n deleted = 'deleted', // 已删除\n}\n\n/**\n * 阶段性回答内容\n */\nexport interface Steps {\n id: string; // 阶段性回答ID\n content: any; // 文本内容\n}\n\n/**\n* 所有消息的基础结构\n*/\nexport interface BaseMessage {\n id: string; // 消息唯一ID\n type: MessageType; // 消息类型\n createdAt: Date; // 创建时间\n status?: MessageStatus; // 内容是否生成中\n execute?: ActionExecutionMessage[]; // 智能体执行过程\n stepContent?: Steps[]; // 阶段性回答内容\n thinks?: string ; // 思考过程\n extra?: any; // 额外消息\n isLike?: 0 | 1 | -1; // 是否喜欢\n raw?: any; // 原始消息\n}\n\n/**\n* 文本消息\n*/\nexport interface TextMessage extends BaseMessage {\n type: 'TextMessage';\n role: MessageRole; // 发送者角色\n content: {\n text: string // 文本内容\n };\n parentMessageId?: string; // 父消息ID(可选)\n}\n\n/**\n* 工具/动作执行消息\n*/\nexport interface ActionExecutionMessage extends BaseMessage {\n type: 'ActionExecutionMessage';\n name: string; // 动作/工具名称\n arguments?: Record<string, any>; // 执行参数\n parentMessageId?: string;\n extra?: any; // 额外信息\n}\n\n/**\n* 工具/动作执行结果消息\n*/\nexport interface ResultMessage extends BaseMessage {\n type: 'ResultMessage';\n actionExecutionId: string; // 执行ID\n actionName: string; // 动作/工具名称\n result: string; // 执行结果\n}\n\n/**\n* 智能体状态消息\n*/\nexport interface AgentStateMessage extends BaseMessage {\n type: 'AgentStateMessage';\n threadId: string; // 线程ID\n agentName: string; // agent名称\n nodeName: string; // 节点名称\n runId: string; // 运行ID\n active: boolean; // 是否激活\n role: MessageRole; // 角色\n state: any; // 状态内容\n running: boolean; // 是否运行中\n}\n\n/**\n * 提示消息\n */\nexport interface SuggestionMessage extends BaseMessage {\n type: 'SuggestionMessage';\n content: PromptsProps['items'];\n role: MessageRole;\n}\n\n/**\n* 消息输入类型(用于前端输入/组装)\n* 可选地包含不同类型的消息体\n*/\nexport interface MessageInput extends BaseMessage {\n textMessage?: Omit<TextMessage, 'id' | 'createdAt' | 'type'>;\n actionExecutionMessage?: Omit<ActionExecutionMessage, 'id' | 'createdAt' | 'type'>;\n resultMessage?: Omit<ResultMessage, 'id' | 'createdAt' | 'type'>;\n agentStateMessage?: Omit<AgentStateMessage, 'id' | 'createdAt' | 'type'>;\n}\n\n/**\n* 消息列表中消息格式\n*/\nexport type Messages = TextMessage | SuggestionMessage;\n\nexport enum ActionAvailability {\n disabled = 'disabled', // 不可用\n enabled = 'enabled', // 可用\n remote = 'remote', // 远程可用\n}\n\n/**\n* 工具/动作定义\n*/\nexport interface Action {\n name: string; // 名称\n description: string; // 描述\n jsonSchema: string; // 参数JSON Schema\n available?: ActionAvailability; // 可用性\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,YAAS;AAJC,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,cAAW;AACX,EAAAA,eAAA,aAAU;AANA,SAAAA;AAAA,GAAA;AA0GL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,cAAW;AACX,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;",
4
+ "sourcesContent": ["import type { PromptsProps } from '@ant-design/x';\nimport { inflate } from 'zlib';\n\nexport type MessageType =\n| 'TextMessage'\n| 'ActionExecutionMessage'\n| 'ResultMessage'\n| 'AgentStateMessage'\n| 'SuggestionMessage';\n\nexport enum MessageRole {\n user = 'user', // 用户\n assistant = 'assistant', // AI助手\n suggestion = 'suggestion', // 建议\n system = 'system', // 工具\n}\n\nexport enum MessageStatus {\n init = 'init',\n pending = 'pending', // 生成中/接收中\n done = 'done', // 已完成\n failed = 'failed', // 失败\n recalled = 'recalled', // 已撤回\n deleted = 'deleted', // 已删除\n}\n\n/**\n * 阶段性回答内容\n */\nexport interface Steps {\n id: string; // 阶段性回答ID\n content: any; // 文本内容\n}\n\n/**\n* 所有消息的基础结构\n*/\nexport interface BaseMessage {\n id: string; // 消息唯一ID\n type: MessageType; // 消息类型\n createdAt: Date; // 创建时间\n status?: MessageStatus; // 内容是否生成中\n execute?: ActionExecutionMessage[]; // 智能体执行过程\n stepContent?: Steps[]; // 阶段性回答内容\n thinks?: string ; // 思考过程\n extra?: any; // 额外消息\n isLike?: 0 | 1 | -1; // 是否喜欢\n raw?: any; // 原始消息\n}\n\n/**\n* 文本消息\n*/\nexport interface TextMessage extends BaseMessage {\n type: 'TextMessage';\n role: MessageRole; // 发送者角色\n content: {\n text?: string; // 文本内容\n files?: any[]; // 文件列表\n };\n parentMessageId?: string; // 父消息ID(可选)\n}\n\n/**\n* 工具/动作执行消息\n*/\nexport interface ActionExecutionMessage extends BaseMessage {\n type: 'ActionExecutionMessage';\n name: string; // 动作/工具名称\n arguments?: Record<string, any>; // 执行参数\n parentMessageId?: string;\n extra?: any; // 额外信息\n}\n\n/**\n* 工具/动作执行结果消息\n*/\nexport interface ResultMessage extends BaseMessage {\n type: 'ResultMessage';\n actionExecutionId: string; // 执行ID\n actionName: string; // 动作/工具名称\n result: string; // 执行结果\n}\n\n/**\n* 智能体状态消息\n*/\nexport interface AgentStateMessage extends BaseMessage {\n type: 'AgentStateMessage';\n threadId: string; // 线程ID\n agentName: string; // agent名称\n nodeName: string; // 节点名称\n runId: string; // 运行ID\n active: boolean; // 是否激活\n role: MessageRole; // 角色\n state: any; // 状态内容\n running: boolean; // 是否运行中\n}\n\n/**\n * 提示消息\n */\nexport interface SuggestionMessage extends BaseMessage {\n type: 'SuggestionMessage';\n content: PromptsProps['items'];\n role: MessageRole;\n}\n\n/**\n* 消息输入类型(用于前端输入/组装)\n* 可选地包含不同类型的消息体\n*/\nexport interface MessageInput extends BaseMessage {\n textMessage?: Omit<TextMessage, 'id' | 'createdAt' | 'type'>;\n actionExecutionMessage?: Omit<ActionExecutionMessage, 'id' | 'createdAt' | 'type'>;\n resultMessage?: Omit<ResultMessage, 'id' | 'createdAt' | 'type'>;\n agentStateMessage?: Omit<AgentStateMessage, 'id' | 'createdAt' | 'type'>;\n}\n\n/**\n* 消息列表中消息格式\n*/\nexport type Messages = TextMessage | SuggestionMessage;\n\nexport enum ActionAvailability {\n disabled = 'disabled', // 不可用\n enabled = 'enabled', // 可用\n remote = 'remote', // 远程可用\n}\n\n/**\n* 工具/动作定义\n*/\nexport interface Action {\n name: string; // 名称\n description: string; // 描述\n jsonSchema: string; // 参数JSON Schema\n available?: ActionAvailability; // 可用性\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,YAAS;AAJC,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,cAAW;AACX,EAAAA,eAAA,aAAU;AANA,SAAAA;AAAA,GAAA;AA2GL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,cAAW;AACX,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;",
6
6
  "names": ["MessageRole", "MessageStatus", "ActionAvailability"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import React, { ReactNode } from 'react';
2
2
  import { AiClient } from 'src/client/base';
3
3
  import type { ChatbotMessageFields } from './XAiChatbot';
4
- import { Messages, sessionData } from "./";
4
+ import type { Messages, SendContent, SessionData } from "./";
5
5
  /**
6
6
  * 主题类型
7
7
  * @type {'default'}
@@ -98,7 +98,7 @@ export interface XAiProviderHandle {
98
98
  * @type {(content: string) => void}
99
99
  * @version 1.0.0
100
100
  */
101
- chat: (content: string) => void;
101
+ chat: (content: SendContent) => void;
102
102
  /**
103
103
  * 停止聊天
104
104
  * @type {() => void}
@@ -129,7 +129,7 @@ export interface XAiProviderHandle {
129
129
  * 获取会话列表
130
130
  * @returns {}
131
131
  */
132
- getSessions: () => sessionData[];
132
+ getSessions: () => SessionData[];
133
133
  /**
134
134
  * 重新设置当前会话
135
135
  * @param id - 会话ID
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAiProvider.ts"],
4
- "sourcesContent": ["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport { Messages, sessionData } from '@/types';\n\n/**\n * 主题类型\n * @type {'default'}\n * @version 1.0.0\n */\nexport type ThemeType = 'default';\n\n/**\n * 错误码枚举(数字格式)\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCodeNum {\n /** 应用下架 */\n APP_NOT_ENABLE = 'client_50017',\n /** 应用删除 */\n APP_DELETED = 'client_50017',\n /** 无该应用 */\n APP_NOT_FOUND = 'client_59999',\n /** 接口报错 */\n API_ERROR = 'client_50054',\n}\n\n/**\n * 错误码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCode {\n /** 应用未启用 */\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n /** 应用已删除 */\n APP_DELETED = 'APP_DELETED',\n /** 应用未找到 */\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n /** API 错误 */\n API_ERROR = 'API_ERROR',\n}\n\n/**\n * 错误码映射表\n * @type {Record<string, {code: ErrorCode, message: string}>}\n * @version 1.0.0\n */\nexport const ErrorCodeMap = {\n client_50017: {\n code: ErrorCode.APP_NOT_ENABLE,\n message: '该应用已删除或已下架',\n },\n client_50054: {\n code: ErrorCode.API_ERROR,\n message: '应用服务端出错',\n },\n};\n\n/**\n * 成功状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum SuccessCode {\n /** 应用配置初始化成功 */\n APP_CONFIG_INIT_SUCCESS = 'APP_CONFIG_INIT_SUCCESS',\n /** 应用消息初始化成功 */\n APP_MESSAGES_INIT_SUCCESS = 'APP_MESSAGES_INIT_SUCCESS',\n}\n\n/**\n * 错误信息接口\n * @interface Error\n * @version 1.0.0\n */\nexport interface Error {\n /** 错误码 */\n code: ErrorCode;\n /** 错误信息 */\n message: string;\n}\n\n/**\n * 成功信息接口\n * @interface Success\n * @version 1.0.0\n */\nexport interface Success {\n /** 成功状态码 */\n code: SuccessCode;\n /** 成功信息 */\n message: string;\n}\n\n/**\n * XAiProvider 操作句柄接口\n * @interface XAiProviderHandle\n * @version 1.0.0\n */\nexport interface XAiProviderHandle {\n /**\n * 发送聊天消息\n * @param content - 消息内容\n * @type {(content: string) => void}\n * @version 1.0.0\n */\n chat: (content: string) => void;\n \n /**\n * 停止聊天\n * @type {() => void}\n * @version 1.0.0\n */\n stopChat: () => void;\n \n /**\n * 重新发送聊天\n * @type {() => void}\n * @version 1.0.0\n */\n reChat: () => void;\n \n /**\n * 获取应用信息\n * @returns {any} 应用信息对象\n * @type {() => any}\n * @version 1.0.0\n */\n getAppInfo: () => any;\n \n /**\n * 获取消息列表\n * @returns {Messages[]} 消息数组\n * @type {() => Messages[]}\n * @version 1.0.0\n */\n getMessages: () => Messages[];\n\n /**\n * 获取会话列表\n * @returns {}\n */\n getSessions: () => sessionData[];\n \n /**\n * 重新设置当前会话\n * @param id - 会话ID\n * @type {(id: string) => void}\n * @version 1.0.0\n */\n setCurrentSessionDetail: (id: string) => void;\n}\n\nexport interface sessionConfig {\n /**\n * 是否展示会话列表\n * @type {boolean}\n * @default false\n */\n showSessionList?: boolean;\n}\n\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * XAiProvider 配置接口\n * @interface XAiProviderConfig\n * @version 1.0.0\n */\nexport interface XAiProviderConfig {\n /**\n * 应用唯一编号\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n appNo?: string;\n\n /**\n * 会话配置\n * @type {sessionConfig}\n */\n session?: sessionConfig;\n\n /**\n * 对话框配置\n * @type {ChatConfig}\n */\n chatProps?: ChatConfig;\n\n \n /**\n * 是否启用调试模式\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n debug?: boolean;\n}\n\n/**\n * XAiProvider 组件属性接口\n * @interface XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiProviderProps {\n /**\n * AI 服务地址\n * @type {string}\n * @version 1.0.0\n */\n url: string;\n \n /**\n * 认证 token\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n \n /**\n * 配置信息\n * @type {XAiProviderConfig}\n * @default undefined\n * @version 1.0.0\n */\n config?: XAiProviderConfig;\n \n /**\n * Provider 唯一标识,用于区分多个 Provider 实例\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n providerId?: string;\n \n /**\n * Token 刷新回调\n * @type {() => Promise<string>}\n * @default undefined\n * @version 1.0.0\n */\n onRefreshToken?: () => Promise<string>;\n \n /**\n * 应用无法正常渲染回调\n * @type {(error: Error) => void}\n * @default undefined\n * @version 1.0.0\n */\n onError?: (error: Error) => void;\n \n /**\n * 应用正常渲染回调\n * @type {(success: Success) => void}\n * @default undefined\n * @version 1.0.0\n */\n onSuccess?: (success: Success) => void;\n \n /**\n * 消息返回回调\n * @type {(data: Messages) => void}\n * @default undefined\n * @version 1.0.0\n */\n onMessage?: (content: string, data: Messages) => void;\n \n /**\n * 子组件\n * @type {ReactNode}\n * @version 1.0.0\n */\n children: ReactNode;\n}\n\n/**\n * XAiSDK 组件属性接口\n * @interface XAiSDKProps\n * @extends XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiSDKProps extends XAiProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n \n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n\n/**\n * XAi 上下文类型接口\n * @interface XAiContextType\n * @extends Required<ChatbotMessageFields>\n * @version 1.0.0\n */\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n /**\n * AI 客户端实例\n * @type {AiClient | null}\n * @default null\n * @version 1.0.0\n */\n client: AiClient | null;\n \n /**\n * 认证令牌\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n \n /**\n * 加载状态\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n loading: boolean;\n \n /**\n * 错误信息\n * @type {string | null}\n * @default null\n * @version 1.0.0\n */\n error: string | null;\n}\n\n/**\n * XAi 上下文对象\n * @type {React.Context<XAiContextType | null>}\n * @version 1.0.0\n */\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiC;AAiB1B,IAAK,eAAL,kBAAKA,kBAAL;AAEL,EAAAA,cAAA,oBAAiB;AAEjB,EAAAA,cAAA,iBAAc;AAEd,EAAAA,cAAA,mBAAgB;AAEhB,EAAAA,cAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAK,YAAL,kBAAKC,eAAL;AAEL,EAAAA,WAAA,oBAAiB;AAEjB,EAAAA,WAAA,iBAAc;AAEd,EAAAA,WAAA,mBAAgB;AAEhB,EAAAA,WAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAM,eAAe;AAAA,EAC1B,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAOO,IAAK,cAAL,kBAAKC,iBAAL;AAEL,EAAAA,aAAA,6BAA0B;AAE1B,EAAAA,aAAA,+BAA4B;AAJlB,SAAAA;AAAA,GAAA;AAuTL,IAAM,aAAa,aAAAC,QAAM,cAAqC,IAAI;",
4
+ "sourcesContent": ["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport type { Messages, SendContent, SessionData } from '@/types';\n\n/**\n * 主题类型\n * @type {'default'}\n * @version 1.0.0\n */\nexport type ThemeType = 'default';\n\n/**\n * 错误码枚举(数字格式)\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCodeNum {\n /** 应用下架 */\n APP_NOT_ENABLE = 'client_50017',\n /** 应用删除 */\n APP_DELETED = 'client_50017',\n /** 无该应用 */\n APP_NOT_FOUND = 'client_59999',\n /** 接口报错 */\n API_ERROR = 'client_50054',\n}\n\n/**\n * 错误码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCode {\n /** 应用未启用 */\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n /** 应用已删除 */\n APP_DELETED = 'APP_DELETED',\n /** 应用未找到 */\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n /** API 错误 */\n API_ERROR = 'API_ERROR',\n}\n\n/**\n * 错误码映射表\n * @type {Record<string, {code: ErrorCode, message: string}>}\n * @version 1.0.0\n */\nexport const ErrorCodeMap = {\n client_50017: {\n code: ErrorCode.APP_NOT_ENABLE,\n message: '该应用已删除或已下架',\n },\n client_50054: {\n code: ErrorCode.API_ERROR,\n message: '应用服务端出错',\n },\n};\n\n/**\n * 成功状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum SuccessCode {\n /** 应用配置初始化成功 */\n APP_CONFIG_INIT_SUCCESS = 'APP_CONFIG_INIT_SUCCESS',\n /** 应用消息初始化成功 */\n APP_MESSAGES_INIT_SUCCESS = 'APP_MESSAGES_INIT_SUCCESS',\n}\n\n/**\n * 错误信息接口\n * @interface Error\n * @version 1.0.0\n */\nexport interface Error {\n /** 错误码 */\n code: ErrorCode;\n /** 错误信息 */\n message: string;\n}\n\n/**\n * 成功信息接口\n * @interface Success\n * @version 1.0.0\n */\nexport interface Success {\n /** 成功状态码 */\n code: SuccessCode;\n /** 成功信息 */\n message: string;\n}\n\n/**\n * XAiProvider 操作句柄接口\n * @interface XAiProviderHandle\n * @version 1.0.0\n */\nexport interface XAiProviderHandle {\n /**\n * 发送聊天消息\n * @param content - 消息内容\n * @type {(content: string) => void}\n * @version 1.0.0\n */\n chat: (content: SendContent) => void;\n\n /**\n * 停止聊天\n * @type {() => void}\n * @version 1.0.0\n */\n stopChat: () => void;\n\n /**\n * 重新发送聊天\n * @type {() => void}\n * @version 1.0.0\n */\n reChat: () => void;\n\n /**\n * 获取应用信息\n * @returns {any} 应用信息对象\n * @type {() => any}\n * @version 1.0.0\n */\n getAppInfo: () => any;\n\n /**\n * 获取消息列表\n * @returns {Messages[]} 消息数组\n * @type {() => Messages[]}\n * @version 1.0.0\n */\n getMessages: () => Messages[];\n\n /**\n * 获取会话列表\n * @returns {}\n */\n getSessions: () => SessionData[];\n\n /**\n * 重新设置当前会话\n * @param id - 会话ID\n * @type {(id: string) => void}\n * @version 1.0.0\n */\n setCurrentSessionDetail: (id: string) => void;\n}\n\nexport interface sessionConfig {\n /**\n * 是否展示会话列表\n * @type {boolean}\n * @default false\n */\n showSessionList?: boolean;\n}\n\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * XAiProvider 配置接口\n * @interface XAiProviderConfig\n * @version 1.0.0\n */\nexport interface XAiProviderConfig {\n /**\n * 应用唯一编号\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n appNo?: string;\n\n /**\n * 会话配置\n * @type {sessionConfig}\n */\n session?: sessionConfig;\n\n /**\n * 对话框配置\n * @type {ChatConfig}\n */\n chatProps?: ChatConfig;\n\n /**\n * 是否启用调试模式\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n debug?: boolean;\n}\n\n/**\n * XAiProvider 组件属性接口\n * @interface XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiProviderProps {\n /**\n * AI 服务地址\n * @type {string}\n * @version 1.0.0\n */\n url: string;\n\n /**\n * 认证 token\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 配置信息\n * @type {XAiProviderConfig}\n * @default undefined\n * @version 1.0.0\n */\n config?: XAiProviderConfig;\n\n /**\n * Provider 唯一标识,用于区分多个 Provider 实例\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n providerId?: string;\n\n /**\n * Token 刷新回调\n * @type {() => Promise<string>}\n * @default undefined\n * @version 1.0.0\n */\n onRefreshToken?: () => Promise<string>;\n\n /**\n * 应用无法正常渲染回调\n * @type {(error: Error) => void}\n * @default undefined\n * @version 1.0.0\n */\n onError?: (error: Error) => void;\n\n /**\n * 应用正常渲染回调\n * @type {(success: Success) => void}\n * @default undefined\n * @version 1.0.0\n */\n onSuccess?: (success: Success) => void;\n\n /**\n * 消息返回回调\n * @type {(data: Messages) => void}\n * @default undefined\n * @version 1.0.0\n */\n onMessage?: (content: string, data: Messages) => void;\n\n /**\n * 子组件\n * @type {ReactNode}\n * @version 1.0.0\n */\n children: ReactNode;\n}\n\n/**\n * XAiSDK 组件属性接口\n * @interface XAiSDKProps\n * @extends XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiSDKProps extends XAiProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n\n/**\n * XAi 上下文类型接口\n * @interface XAiContextType\n * @extends Required<ChatbotMessageFields>\n * @version 1.0.0\n */\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n /**\n * AI 客户端实例\n * @type {AiClient | null}\n * @default null\n * @version 1.0.0\n */\n client: AiClient | null;\n\n /**\n * 认证令牌\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 加载状态\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n loading: boolean;\n\n /**\n * 错误信息\n * @type {string | null}\n * @default null\n * @version 1.0.0\n */\n error: string | null;\n}\n\n/**\n * XAi 上下文对象\n * @type {React.Context<XAiContextType | null>}\n * @version 1.0.0\n */\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiC;AAiB1B,IAAK,eAAL,kBAAKA,kBAAL;AAEL,EAAAA,cAAA,oBAAiB;AAEjB,EAAAA,cAAA,iBAAc;AAEd,EAAAA,cAAA,mBAAgB;AAEhB,EAAAA,cAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAK,YAAL,kBAAKC,eAAL;AAEL,EAAAA,WAAA,oBAAiB;AAEjB,EAAAA,WAAA,iBAAc;AAEd,EAAAA,WAAA,mBAAgB;AAEhB,EAAAA,WAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAM,eAAe;AAAA,EAC1B,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAOO,IAAK,cAAL,kBAAKC,iBAAL;AAEL,EAAAA,aAAA,6BAA0B;AAE1B,EAAAA,aAAA,+BAA4B;AAJlB,SAAAA;AAAA,GAAA;AAsTL,IAAM,aAAa,aAAAC,QAAM,cAAqC,IAAI;",
6
6
  "names": ["ErrorCodeNum", "ErrorCode", "SuccessCode", "React"]
7
7
  }
@@ -1,4 +1,10 @@
1
- import type { SenderProps } from "@ant-design/x";
1
+ import type { SenderProps } from '@ant-design/x';
2
+ import type { Attachment } from '@ant-design/x/es/attachments';
3
+ import { UploadProps } from 'antd';
4
+ export interface SendContent {
5
+ text?: string;
6
+ files?: Attachment[] | any[];
7
+ }
2
8
  export interface XAiSenderProps extends Omit<SenderProps, 'onSubmit' | 'onCancel'> {
3
9
  /** 是否展示清空按钮 */
4
10
  clearBtnShow?: boolean;
@@ -9,5 +15,13 @@ export interface XAiSenderProps extends Omit<SenderProps, 'onSubmit' | 'onCancel
9
15
  /** 加载中,点击停止生成按钮回调 */
10
16
  onStop?: () => void;
11
17
  /** 点击发送按钮的回调 */
12
- onSubmit?: (type: string, content: string) => void;
18
+ onSubmit?: (content: SendContent) => void;
19
+ /** 显示上传按钮 */
20
+ enableUpload?: boolean;
21
+ /** 文件列表 */
22
+ files?: Attachment[];
23
+ /** 文件列表变化 */
24
+ onChangeFiles?: (files: Attachment[]) => void;
25
+ /** 文件上传 */
26
+ uploadRequest?: UploadProps['customRequest'];
13
27
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAiSender.ts"],
4
- "sourcesContent": ["import type { SenderProps } from \"@ant-design/x\";\n\nexport interface XAiSenderProps extends Omit<SenderProps, 'onSubmit' | 'onCancel'> {\n /** 是否展示清空按钮 */\n clearBtnShow? : boolean;\n /** 底部文案 */\n footerTips?: string;\n /** 清空对话框按钮回调 */\n onClear?: () => void;\n /** 加载中,点击停止生成按钮回调 */\n onStop?: () => void;\n /** 点击发送按钮的回调 */\n onSubmit?: (type: string, content: string) => void;\n}"],
4
+ "sourcesContent": ["import type { SenderProps } from '@ant-design/x';\nimport type { Attachment } from '@ant-design/x/es/attachments';\nimport { UploadProps } from 'antd';\n\nexport interface SendContent {\n text?: string;\n files?: Attachment[] | any[];\n}\n\nexport interface XAiSenderProps extends Omit<SenderProps, 'onSubmit' | 'onCancel'> {\n /** 是否展示清空按钮 */\n clearBtnShow? : boolean;\n /** 底部文案 */\n footerTips?: string;\n /** 清空对话框按钮回调 */\n onClear?: () => void;\n /** 加载中,点击停止生成按钮回调 */\n onStop?: () => void;\n /** 点击发送按钮的回调 */\n onSubmit?: (content: SendContent) => void;\n /** 显示上传按钮 */\n enableUpload?: boolean;\n /** 文件列表 */\n files?: Attachment[];\n /** 文件列表变化 */\n onChangeFiles?: (files: Attachment[]) => void;\n /** 文件上传 */\n uploadRequest?: UploadProps['customRequest'];\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/index.ts"],
4
- "sourcesContent": ["export * from './XAiChatbot';\nexport * from './XAiMessage';\nexport * from './XAiProvider';\nexport * from './XAiSender';\nexport * from './XAiConversations';"],
4
+ "sourcesContent": ["export * from './XAiChatbot';\nexport * from './XAiMessage';\nexport * from './XAiProvider';\nexport * from './XAiSender';\nexport * from './XAiConversations';\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { XAiSDKProps, XAiProviderHandle } from "../types/XAiProvider";
3
3
  import { Messages } from "../types/XAiMessage";
4
+ import type { SendContent } from "../types";
4
5
  declare class XAiWebSDK {
5
6
  container: HTMLElement;
6
7
  props: XAiSDKProps;
@@ -17,9 +18,9 @@ declare class XAiWebSDK {
17
18
  getData(): {
18
19
  appInfo: any;
19
20
  messages: Messages[] | undefined;
20
- sessions: import("../types").sessionData[] | undefined;
21
+ sessions: import("../types").SessionData[] | undefined;
21
22
  };
22
- chat(text: string): void;
23
+ chat(content: SendContent): void;
23
24
  stop(): void;
24
25
  reChat(): void;
25
26
  }
@@ -32,11 +32,12 @@ __export(umdEntry_exports, {
32
32
  default: () => umdEntry_default
33
33
  });
34
34
  module.exports = __toCommonJS(umdEntry_exports);
35
- var import_react = __toESM(require("react"));
35
+ var import_react = require("react");
36
36
  var import_client = __toESM(require("react-dom/client"));
37
37
  var import_XAiProvider = __toESM(require("../components/XAiProvider"));
38
38
  var import_XAiChatbot = __toESM(require("../components/XAiChatbot"));
39
39
  var import_XAiConversations = __toESM(require("../components/XAiConversations"));
40
+ var import_jsx_runtime = require("react/jsx-runtime");
40
41
  var XAiWebSDK = class {
41
42
  constructor(container, props) {
42
43
  this.providerRef = (0, import_react.createRef)();
@@ -52,11 +53,17 @@ var XAiWebSDK = class {
52
53
  if (import_client.default.createRoot) {
53
54
  this.root = import_client.default.createRoot(this.container);
54
55
  this.root.render(
55
- /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ref: this.providerRef, ...this.props }, ((_b = (_a = this.props.config) == null ? void 0 : _a.session) == null ? void 0 : _b.showSessionList) && /* @__PURE__ */ import_react.default.createElement(import_XAiConversations.default, null), /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", justifyContent: "center", flex: 1 } }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null))))
56
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_XAiProvider.default, { ref: this.providerRef, ...this.props, children: [
57
+ ((_b = (_a = this.props.config) == null ? void 0 : _a.session) == null ? void 0 : _b.showSessionList) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_XAiConversations.default, {}),
58
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { display: "flex", justifyContent: "center", flex: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_XAiChatbot.default, {}) })
59
+ ] }) })
56
60
  );
57
61
  } else {
58
62
  import_client.default.render(
59
- /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ref: this.providerRef, ...this.props }, ((_d = (_c = this.props.config) == null ? void 0 : _c.session) == null ? void 0 : _d.showSessionList) && /* @__PURE__ */ import_react.default.createElement(import_XAiConversations.default, null), /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", justifyContent: "center", flex: 1 } }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null)))),
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_XAiProvider.default, { ref: this.providerRef, ...this.props, children: [
64
+ ((_d = (_c = this.props.config) == null ? void 0 : _c.session) == null ? void 0 : _d.showSessionList) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_XAiConversations.default, {}),
65
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { display: "flex", justifyContent: "center", flex: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_XAiChatbot.default, {}) })
66
+ ] }) }),
60
67
  this.container
61
68
  );
62
69
  }
@@ -104,9 +111,9 @@ var XAiWebSDK = class {
104
111
  sessions: (_c = this.providerRef.current) == null ? void 0 : _c.getSessions()
105
112
  };
106
113
  }
107
- chat(text) {
114
+ chat(content) {
108
115
  var _a;
109
- (_a = this.providerRef.current) == null ? void 0 : _a.chat(text);
116
+ (_a = this.providerRef.current) == null ? void 0 : _a.chat(content);
110
117
  }
111
118
  stop() {
112
119
  var _a;
@@ -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": "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",
6
- "names": ["ReactDOM", "React", "XAiProvider", "XAiConversations", "XAiChatbot"]
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
+ "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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"}