@ai-group/chat-sdk 0.2.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/cjs/components/XAiChatbot/index.js +14 -5
  2. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  3. package/dist/cjs/components/XAiChatbot/styles.d.ts +1 -0
  4. package/dist/cjs/components/XAiChatbot/styles.js +13 -0
  5. package/dist/cjs/components/XAiChatbot/styles.js.map +2 -2
  6. package/dist/cjs/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
  7. package/dist/cjs/components/XAiConversations/XAiConversations.stories.js +82 -0
  8. package/dist/cjs/components/XAiConversations/XAiConversations.stories.js.map +7 -0
  9. package/dist/cjs/components/XAiConversations/index.d.ts +4 -0
  10. package/dist/cjs/components/XAiConversations/index.js +59 -0
  11. package/dist/cjs/components/XAiConversations/index.js.map +7 -0
  12. package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
  13. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +12 -12
  14. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +2 -2
  15. package/dist/cjs/components/XAiProvider/demo.styles.d.ts +35 -0
  16. package/dist/cjs/components/XAiProvider/demo.styles.js +37 -0
  17. package/dist/cjs/components/XAiProvider/demo.styles.js.map +7 -0
  18. package/dist/cjs/components/XAiProvider/index.js +7 -4
  19. package/dist/cjs/components/XAiProvider/index.js.map +3 -3
  20. package/dist/cjs/hooks/useAgentGenerator.d.ts +3 -0
  21. package/dist/cjs/hooks/useAgentGenerator.js +162 -69
  22. package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
  23. package/dist/cjs/services/api.d.ts +33 -0
  24. package/dist/cjs/services/api.js +33 -0
  25. package/dist/cjs/services/api.js.map +2 -2
  26. package/dist/cjs/styles/markdown.js +140 -138
  27. package/dist/cjs/styles/markdown.js.map +2 -2
  28. package/dist/cjs/types/XAiChatbot.d.ts +2 -0
  29. package/dist/cjs/types/XAiChatbot.js.map +1 -1
  30. package/dist/cjs/types/XAiConversations.d.ts +4 -0
  31. package/dist/cjs/types/XAiConversations.js +18 -0
  32. package/dist/cjs/types/XAiConversations.js.map +7 -0
  33. package/dist/cjs/types/index.d.ts +1 -0
  34. package/dist/cjs/types/index.js +3 -1
  35. package/dist/cjs/types/index.js.map +2 -2
  36. package/dist/esm/components/XAiChatbot/index.js +22 -4
  37. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  38. package/dist/esm/components/XAiChatbot/styles.d.ts +1 -0
  39. package/dist/esm/components/XAiChatbot/styles.js +18 -17
  40. package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
  41. package/dist/esm/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
  42. package/dist/esm/components/XAiConversations/XAiConversations.stories.js +42 -0
  43. package/dist/esm/components/XAiConversations/XAiConversations.stories.js.map +1 -0
  44. package/dist/esm/components/XAiConversations/index.d.ts +4 -0
  45. package/dist/esm/components/XAiConversations/index.js +27 -0
  46. package/dist/esm/components/XAiConversations/index.js.map +1 -0
  47. package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
  48. package/dist/esm/components/XAiProvider/XAiProvider.stories.js +38 -180
  49. package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
  50. package/dist/esm/components/XAiProvider/demo.styles.d.ts +35 -0
  51. package/dist/esm/components/XAiProvider/demo.styles.js +12 -0
  52. package/dist/esm/components/XAiProvider/demo.styles.js.map +1 -0
  53. package/dist/esm/components/XAiProvider/index.js +14 -3
  54. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  55. package/dist/esm/hooks/useAgentGenerator.d.ts +3 -0
  56. package/dist/esm/hooks/useAgentGenerator.js +268 -114
  57. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  58. package/dist/esm/services/api.d.ts +33 -0
  59. package/dist/esm/services/api.js +75 -0
  60. package/dist/esm/services/api.js.map +1 -1
  61. package/dist/esm/styles/markdown.js +1 -1
  62. package/dist/esm/styles/markdown.js.map +1 -1
  63. package/dist/esm/types/XAiChatbot.d.ts +2 -0
  64. package/dist/esm/types/XAiChatbot.js.map +1 -1
  65. package/dist/esm/types/XAiConversations.d.ts +4 -0
  66. package/dist/esm/types/XAiConversations.js +2 -0
  67. package/dist/esm/types/XAiConversations.js.map +1 -0
  68. package/dist/esm/types/index.d.ts +1 -0
  69. package/dist/esm/types/index.js +1 -0
  70. package/dist/esm/types/index.js.map +1 -1
  71. package/dist/umd/chat-sdk.min.js +1 -1
  72. package/package.json +1 -1
@@ -103,6 +103,7 @@ var XAiChatbot = (props) => {
103
103
  userAvatar,
104
104
  messages: propMessages,
105
105
  text = "",
106
+ footerTips = "",
106
107
  emptyStateImage = import_empty.default,
107
108
  emptyStateText = "我的智能体",
108
109
  messageActions = defaultActions,
@@ -121,8 +122,13 @@ var XAiChatbot = (props) => {
121
122
  const [fileUploading, setFileUploading] = (0, import_react.useState)(false);
122
123
  const [clearPopoverVisible, setClearPopoverVisible] = (0, import_react.useState)(false);
123
124
  const styles = (0, import_styles.useStyles)();
124
- const FooterActions = ({ data }) => /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.flex, styles.gap(13)) }, messageActions.map((action, index) => /* @__PURE__ */ import_react.default.createElement(import_antd.Tooltip, { key: action.key, title: action.tooltip }, /* @__PURE__ */ import_react.default.createElement("span", { className: styles.cursor("pointer"), onClick: () => onMessagesActionsCallback == null ? void 0 : onMessagesActionsCallback(index, data) }, action.icon))));
125
- const MessageFooter = ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, messageTooltip == null ? void 0 : messageTooltip(data), /* @__PURE__ */ import_react.default.createElement(FooterActions, { data }));
125
+ const lastMessageId = (0, import_react.useRef)("");
126
+ const FooterActions = ({ data, lastMessage = false }) => /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.flex, styles.gap(13)) }, messageActions.map((action, index) => {
127
+ if (!lastMessage && action.key === "redo")
128
+ return null;
129
+ return /* @__PURE__ */ import_react.default.createElement(import_antd.Tooltip, { key: action.key, title: action.tooltip }, /* @__PURE__ */ import_react.default.createElement("span", { className: styles.cursor("pointer"), onClick: () => onMessagesActionsCallback == null ? void 0 : onMessagesActionsCallback(index, data) }, action.icon));
130
+ }));
131
+ const MessageFooter = ({ data, lastMessage = false }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, messageTooltip == null ? void 0 : messageTooltip(data), /* @__PURE__ */ import_react.default.createElement(FooterActions, { data, lastMessage }));
126
132
  const rolesObject = {
127
133
  assistant: {
128
134
  placement: "start",
@@ -239,12 +245,15 @@ var XAiChatbot = (props) => {
239
245
  )
240
246
  ));
241
247
  const EmptyState = (0, import_react.useMemo)(() => () => /* @__PURE__ */ import_react.default.createElement("div", { className: styles.emptyWrapper }, /* @__PURE__ */ import_react.default.createElement("img", { src: emptyStateImage, alt: "空状态图标", className: styles.emptyImg }), /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.text(16), styles.weight(600), styles.textColor("#343434")) }, emptyStateText)), [emptyStateImage, emptyStateText]);
242
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_styles.GlobalStyle, null), /* @__PURE__ */ import_react.default.createElement(import_markdown.default, null), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.wrapper }, navbarShow && /* @__PURE__ */ import_react.default.createElement(NavBar, null), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.messageContainer }, (messages == null ? void 0 : messages.length) ? /* @__PURE__ */ import_react.default.createElement(
248
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_styles.GlobalStyle, null), /* @__PURE__ */ import_react.default.createElement(import_markdown.default, null), /* @__PURE__ */ import_react.default.createElement("div", { id: "x-ai-chatbot", className: styles.wrapper }, navbarShow && /* @__PURE__ */ import_react.default.createElement(NavBar, null), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.messageContainer }, (messages == null ? void 0 : messages.length) ? /* @__PURE__ */ import_react.default.createElement(
243
249
  import_x.Bubble.List,
244
250
  {
245
251
  roles: rolesObject,
246
252
  items: messages.map((msg) => {
247
253
  const { id, role, status, type, thinks = [], extra = { noFooter: false } } = msg;
254
+ if (role === import_XAiMessage.MessageRole.assistant) {
255
+ lastMessageId.current = id;
256
+ }
248
257
  return {
249
258
  key: id,
250
259
  role,
@@ -301,7 +310,7 @@ var XAiChatbot = (props) => {
301
310
  return null;
302
311
  })(),
303
312
  footer: () => {
304
- return extra.noFooter ? null : role === import_XAiMessage.MessageRole.assistant && status !== import_XAiMessage.MessageStatus.failed && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(MessageFooter, { data: msg }));
313
+ return extra.noFooter ? null : role === import_XAiMessage.MessageRole.assistant && status !== import_XAiMessage.MessageStatus.failed && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(MessageFooter, { data: msg, lastMessage: lastMessageId.current === id }));
305
314
  }
306
315
  };
307
316
  })
@@ -359,7 +368,7 @@ var XAiChatbot = (props) => {
359
368
  handleStopGenerate();
360
369
  }
361
370
  }
362
- )))));
371
+ ))), footerTips && /* @__PURE__ */ import_react.default.createElement("div", { className: styles.footerTips }, footerTips)));
363
372
  };
364
373
  var XAiChatbot_default = XAiChatbot;
365
374
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAiChatbot/index.tsx"],
4
- "sourcesContent": ["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Button,\n Space,\n Spin,\n Tooltip,\n Popover,\n GetProp,\n} from 'antd';\nimport {\n Bubble,\n Sender,\n Prompts,\n} from '@ant-design/x';\nimport {\n ArrowUpOutlined,\n ClearOutlined,\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n thinks: any[];\n renderActionHeader?: (params: { thinks: any[]; expanded: boolean; onToggle: () => void }) => React.ReactNode;\n}\n\n// 默认消息功能区\nconst defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n } = mergedProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [disabled, _setDisabled] = useState<boolean>(false); // 是否禁止输入\n const [content, setContent] = useState<string>(text); // 输入框文本\n const [mode, _setMode] = useState<string>(''); // todo 模式\n const [fileUploading, setFileUploading] = useState(false); // 文件上传进度条\n const [clearPopoverVisible, setClearPopoverVisible] = useState(false); // 气泡卡片显隐藏\n const styles = useStyles();\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages }> = ({ data }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n </span>\n </Tooltip>\n ))}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages }> = ({ data }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'roles'> = {\n assistant: {\n placement: 'start',\n avatar: { icon: avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} /> },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} /> },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: { icon: <UserOutlined />, style: { visibility: 'hidden' } },\n variant: 'borderless',\n },\n };\n\n // ActionHeader 组件\n const ActionHeader: React.FC<ActionHeaderProps> = ({ thinks = [], renderActionHeader }) => {\n const [expanded, setExpanded] = useState(false);\n if (!thinks || thinks.length === 0) return null;\n if (renderActionHeader) {\n return renderActionHeader({ thinks, expanded, onToggle: () => setExpanded((v) => !v) });\n }\n // 默认渲染\n const first = thinks[0];\n const { name } = first;\n const icon = first?.icon || first?.extra?.icon;\n return (\n <div className={styles.actionHeaderWrapper}>\n { !expanded && (\n <div\n className={styles.actionHeaderItem}\n onClick={() => setExpanded((v) => !v)}\n >\n { icon && <img src={icon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span className={styles.actionHeaderText}>{name}</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n ) }\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={groupIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n {thinks.map((action, idx) => {\n const thinkIcon = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n { thinkIcon && <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n // 触发发送\n const handleSend = () => {\n if (content.trim()) {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.('text', content);\n setContent(''); // 发送后清空输入框内容\n }\n };\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 文件上传按钮引用\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 停止生成\n const handleStopGenerate = () => {\n onStop?.();\n };\n\n // 选择文件\n const handleFileSelect = () => {};\n\n // 点击清除按钮\n const handleClear = () => {\n setClearPopoverVisible(true);\n };\n\n // 取消清除\n const cancelClear = () => {\n setClearPopoverVisible(false);\n };\n\n // 确认清除\n const confirmClear = () => {\n setContent('');\n onClear?.();\n setClearPopoverVisible(false);\n };\n\n // 清空按钮提示文案\n const clearConfirmContent = (\n <div className={styles.p('2px')}>\n <p className={clsx(styles.mb(14), styles.mt(0))}>确认清除所有聊天记录并重置会话!</p>\n <div className={styles.popoverFooter}>\n <Button size=\"small\" onClick={cancelClear}>\n 取消\n </Button>\n <Button size=\"small\" type=\"primary\" danger onClick={confirmClear}>\n 确认\n </Button>\n </div>\n </div>\n );\n\n // 自定义上传按钮\n const uploadButton = (\n <div className={styles.flexCenterGap2}>\n <Tooltip\n placement=\"top\"\n title={\n mode === 'single_agent_skill_mode' ? '工作流模式不支持上传文件' : '支持图片、文档等上传'\n }\n >\n {fileUploading\n ? (\n <Spin size=\"small\" />\n )\n : (\n <i\n className={\n mode === 'single_agent_skill_mode'\n ? styles.iconZengjiaDisabled\n : styles.iconZengjiaNormal\n }\n onClick={() => {\n if (mode !== 'single_agent_skill_mode' && fileInputRef.current) {\n fileInputRef.current?.click();\n }\n }}\n />\n )}\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n accept=\"*/*\"\n disabled={fileUploading || mode === 'single_agent_skill_mode'}\n />\n </Tooltip>\n </div>\n );\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n roles={rolesObject}\n items={messages.map((msg: any) => {\n const { id, role, status, type, thinks = [], extra = { noFooter: false } } = msg as Messages;\n return {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => <ActionHeader thinks={thinks} />),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 图片类型\n if (type === 'ImageMessage') {\n return (\n <div style={{ minWidth: 0, maxWidth: 600 }}>\n <img src={msg.content?.bytes} alt=\"\" style={{ maxWidth: 680 }} />\n </div>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info.data, id, 'text');\n if (info.data.description) {\n onSend?.('text', info.data.description as string);\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n footer: (() => {\n return (\n extra.noFooter\n ? null\n : (\n role === MessageRole.assistant && status !== MessageStatus.failed && (\n <>\n <MessageFooter data={msg as Messages} />\n </>\n )\n )\n );\n }),\n };\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n <div className={styles.chatFooter}>\n <div className={clsx(styles.flex, styles.gap(8))}>\n {/* 清空按钮 */}\n <Popover\n content={clearConfirmContent}\n title=\"确认清空对话\"\n trigger=\"click\"\n open={clearPopoverVisible}\n onOpenChange={setClearPopoverVisible}\n >\n <div\n className={styles.clearBtn}\n style={{ border: '1px solid #E4E7EC', borderRadius: '50%', height: '35px', width: '35px' }}\n onClick={handleClear}\n >\n <ClearOutlined className={styles.text(16)} />\n </div>\n </Popover>\n {/* 普通文本输入 */}\n <Sender\n value={content}\n // submitType=\"shiftEnter\"\n className={styles.sendWrapper}\n placeholder=\"继续对话...\"\n disabled={disabled}\n loading={loading}\n actions={(_, info) => {\n const { SendButton, LoadingButton } = info.components;\n return (\n <Space size=\"small\">\n <div className={styles.w(20)} />\n\n {mode !== 'single_agent_skill_mode' && uploadButton}\n {mode === 'meta_agent_mode' && (\n <div\n className={styles.flexCenterGap2}\n style={{ visibility: 'hidden' }}\n >\n <i className={styles.iconHuihuarenqun} />\n </div>\n )}\n\n <div className={styles.divider} />\n\n {loading\n ? (\n <LoadingButton onClick={handleStopGenerate} className={styles.stopButton} />\n )\n : (\n <SendButton\n className={styles.sendButton}\n type=\"primary\"\n icon={<ArrowUpOutlined className={styles.text(20)} />}\n disabled={disabled}\n />\n )}\n </Space>\n );\n }}\n onChange={(v) => {\n setContent(v);\n }}\n onSubmit={handleSend}\n onCancel={() => {\n handleStopGenerate();\n }}\n />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Button,\n Space,\n Spin,\n Tooltip,\n Popover,\n GetProp,\n} from 'antd';\nimport {\n Bubble,\n Sender,\n Prompts,\n} from '@ant-design/x';\nimport {\n ArrowUpOutlined,\n ClearOutlined,\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n thinks: any[];\n renderActionHeader?: (params: { thinks: any[]; expanded: boolean; onToggle: () => void }) => React.ReactNode;\n}\n\n// 默认消息功能区\nconst defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n footerTips = '',\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n } = mergedProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [disabled, _setDisabled] = useState<boolean>(false); // 是否禁止输入\n const [content, setContent] = useState<string>(text); // 输入框文本\n const [mode, _setMode] = useState<string>(''); // todo 模式\n const [fileUploading, setFileUploading] = useState(false); // 文件上传进度条\n const [clearPopoverVisible, setClearPopoverVisible] = useState(false); // 气泡卡片显隐藏\n const styles = useStyles();\n const lastMessageId = useRef<string>('');\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => {\n if (!lastMessage && action.key === 'redo') return null;\n return (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n </span>\n </Tooltip>\n );\n })}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} lastMessage={lastMessage} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'roles'> = {\n assistant: {\n placement: 'start',\n avatar: { icon: avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} /> },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} /> },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: { icon: <UserOutlined />, style: { visibility: 'hidden' } },\n variant: 'borderless',\n },\n };\n\n // ActionHeader 组件\n const ActionHeader: React.FC<ActionHeaderProps> = ({ thinks = [], renderActionHeader }) => {\n const [expanded, setExpanded] = useState(false);\n if (!thinks || thinks.length === 0) return null;\n if (renderActionHeader) {\n return renderActionHeader({ thinks, expanded, onToggle: () => setExpanded((v) => !v) });\n }\n // 默认渲染\n const first = thinks[0];\n const { name } = first;\n const icon = first?.icon || first?.extra?.icon;\n return (\n <div className={styles.actionHeaderWrapper}>\n { !expanded && (\n <div\n className={styles.actionHeaderItem}\n onClick={() => setExpanded((v) => !v)}\n >\n { icon && <img src={icon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span className={styles.actionHeaderText}>{name}</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n ) }\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={groupIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n {thinks.map((action, idx) => {\n const thinkIcon = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n { thinkIcon && <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n // 触发发送\n const handleSend = () => {\n if (content.trim()) {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.('text', content);\n setContent(''); // 发送后清空输入框内容\n }\n };\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 文件上传按钮引用\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 停止生成\n const handleStopGenerate = () => {\n onStop?.();\n };\n\n // 选择文件\n const handleFileSelect = () => {};\n\n // 点击清除按钮\n const handleClear = () => {\n setClearPopoverVisible(true);\n };\n\n // 取消清除\n const cancelClear = () => {\n setClearPopoverVisible(false);\n };\n\n // 确认清除\n const confirmClear = () => {\n setContent('');\n onClear?.();\n setClearPopoverVisible(false);\n };\n\n // 清空按钮提示文案\n const clearConfirmContent = (\n <div className={styles.p('2px')}>\n <p className={clsx(styles.mb(14), styles.mt(0))}>确认清除所有聊天记录并重置会话!</p>\n <div className={styles.popoverFooter}>\n <Button size=\"small\" onClick={cancelClear}>\n 取消\n </Button>\n <Button size=\"small\" type=\"primary\" danger onClick={confirmClear}>\n 确认\n </Button>\n </div>\n </div>\n );\n\n // 自定义上传按钮\n const uploadButton = (\n <div className={styles.flexCenterGap2}>\n <Tooltip\n placement=\"top\"\n title={\n mode === 'single_agent_skill_mode' ? '工作流模式不支持上传文件' : '支持图片、文档等上传'\n }\n >\n {fileUploading\n ? (\n <Spin size=\"small\" />\n )\n : (\n <i\n className={\n mode === 'single_agent_skill_mode'\n ? styles.iconZengjiaDisabled\n : styles.iconZengjiaNormal\n }\n onClick={() => {\n if (mode !== 'single_agent_skill_mode' && fileInputRef.current) {\n fileInputRef.current?.click();\n }\n }}\n />\n )}\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n accept=\"*/*\"\n disabled={fileUploading || mode === 'single_agent_skill_mode'}\n />\n </Tooltip>\n </div>\n );\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div id=\"x-ai-chatbot\" className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n {/** 消息容器 */}\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n roles={rolesObject}\n items={messages.map((msg: any) => {\n const { id, role, status, type, thinks = [], extra = { noFooter: false } } = msg as Messages;\n // 最后一条 AI消息标识\n if (role === MessageRole.assistant) {\n lastMessageId.current = id;\n }\n return {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => <ActionHeader thinks={thinks} />),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 图片类型\n if (type === 'ImageMessage') {\n return (\n <div style={{ minWidth: 0, maxWidth: 600 }}>\n <img src={msg.content?.bytes} alt=\"\" style={{ maxWidth: 680 }} />\n </div>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info.data, id, 'text');\n if (info.data.description) {\n onSend?.('text', info.data.description as string);\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n footer: (() => {\n return (\n extra.noFooter\n ? null\n : (\n role === MessageRole.assistant && status !== MessageStatus.failed && (\n <>\n <MessageFooter data={msg as Messages} lastMessage={lastMessageId.current === id} />\n </>\n )\n )\n );\n }),\n };\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n <div className={styles.chatFooter}>\n <div className={clsx(styles.flex, styles.gap(8))}>\n {/* 清空按钮 */}\n <Popover\n content={clearConfirmContent}\n title=\"确认清空对话\"\n trigger=\"click\"\n open={clearPopoverVisible}\n onOpenChange={setClearPopoverVisible}\n >\n <div\n className={styles.clearBtn}\n style={{ border: '1px solid #E4E7EC', borderRadius: '50%', height: '35px', width: '35px' }}\n onClick={handleClear}\n >\n <ClearOutlined className={styles.text(16)} />\n </div>\n </Popover>\n {/* 普通文本输入 */}\n <Sender\n value={content}\n // submitType=\"shiftEnter\"\n className={styles.sendWrapper}\n placeholder=\"继续对话...\"\n disabled={disabled}\n loading={loading}\n actions={(_, info) => {\n const { SendButton, LoadingButton } = info.components;\n return (\n <Space size=\"small\">\n <div className={styles.w(20)} />\n\n {mode !== 'single_agent_skill_mode' && uploadButton}\n {mode === 'meta_agent_mode' && (\n <div\n className={styles.flexCenterGap2}\n style={{ visibility: 'hidden' }}\n >\n <i className={styles.iconHuihuarenqun} />\n </div>\n )}\n\n <div className={styles.divider} />\n\n {loading\n ? (\n <LoadingButton onClick={handleStopGenerate} className={styles.stopButton} />\n )\n : (\n <SendButton\n className={styles.sendButton}\n type=\"primary\"\n icon={<ArrowUpOutlined className={styles.text(20)} />}\n disabled={disabled}\n />\n )}\n </Space>\n );\n }}\n onChange={(v) => {\n setContent(v);\n }}\n onSubmit={handleSend}\n onCancel={() => {\n handleStopGenerate();\n }}\n />\n </div>\n </div>\n { footerTips && <div className={styles.footerTips}>{footerTips}</div>}\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],
5
+ "mappings": "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",
6
6
  "names": ["MarkdownIt", "React", "emptyIcon", "clsx", "arrowDown", "groupIcon", "arrowUp", "_a", "MarkdownGlobalStyle", "reactHtmlParser"]
7
7
  }
@@ -22,6 +22,7 @@ export declare const useStyles: () => {
22
22
  uploadBtn: string;
23
23
  clearBtn: string;
24
24
  chatFooter: string;
25
+ footerTips: string;
25
26
  flexCenterGap2: string;
26
27
  iconHuihuarenqun: string;
27
28
  popoverFooter: string;
@@ -264,6 +264,13 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
264
264
  z-index: 10;
265
265
  padding: 0 20px 10px 20px;
266
266
  `,
267
+ footerTips: import_css.css`
268
+ display: flex;
269
+ align-items:center;
270
+ justify-content: center;
271
+ font-size: 12px;
272
+ color: rgba(0,0,0,0.4);
273
+ `,
267
274
  flexCenterGap2: import_css.css`
268
275
  display: flex;
269
276
  align-items: center;
@@ -390,6 +397,12 @@ var GlobalStyle = () => /* @__PURE__ */ import_react.default.createElement(
390
397
  /* 你想覆盖的其他样式 */
391
398
  }
392
399
 
400
+ .ant-sender-content {
401
+ textarea {
402
+ word-break: break-all;
403
+ }
404
+ }
405
+
393
406
  .ant-avatar {
394
407
  background-color: transparent;
395
408
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAiChatbot/styles.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport { css } from '@emotion/css';\nimport { css as globalCss, Global } from '@emotion/react';\nimport { withBasicStyles } from '@/styles/common';\n\nconst primaryBlue = '#0078FF'; // 主蓝色\nconst lightBlue = '#E6F0FF'; // 浅蓝色气泡背景\nconst darkGray = '#333'; // 深灰色文本\nconst lightGray = '#888'; // 浅灰文本\nconst borderGray = '#ddd'; // 边框灰色\n\nexport const useStyles = withBasicStyles(() => ({\n // 静态样式\n wrapper: css`\n display: flex;\n flex-direction: column;\n max-height: 812px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n min-width: 375px;\n background-color: #fff;\n // border: 1px solid rgba(80,96,122,.15);\n border-radius: 12px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,\n Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n `,\n\n navbar: css`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 16px;\n border-bottom: 1px solid ${borderGray};\n background-color: #fff;\n `,\n\n userAvatar: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n width: 32px;\n border-radius: 50%;\n object-fit: cover;\n margin-right: 12px;\n `,\n\n avatar: css`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n object-fit: cover;\n margin-right: 12px;\n border: 1px solid ${borderGray};\n `,\n\n title: css`\n font-weight: 600;\n font-size: 16px;\n color: ${darkGray};\n `,\n\n subtitle: css`\n font-size: 12px;\n color: ${lightGray};\n margin-top: 2px;\n `,\n\n messageContainer: css`\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n background-color: #fff;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n position: relative;\n `,\n\n emptyWrapper: css`\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: '#222';\n userSelect: none;\n `,\n\n emptyImg: css`\n width: 60px;\n height: 60px;\n margin-bottom: 16px;\n `,\n\n message: css`\n max-width: 70%;\n padding: 10px 14px;\n border-radius: 20px;\n background-color: ${lightBlue};\n color: ${darkGray};\n font-size: 14px;\n line-height: 1.4;\n word-break: break-word;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n `,\n\n messageRight: css`\n align-self: flex-end;\n background-color: ${primaryBlue};\n color: white;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 20px;\n border-top-left-radius: 20px;\n border-top-right-radius: 20px;\n `,\n\n quickReplies: css`\n display: flex;\n gap: 8px;\n padding: 10px 16px;\n border-top: 1px solid ${borderGray};\n background-color: #fff;\n overflow-x: auto;\n `,\n\n replyItem: css`\n padding: 6px 12px;\n font-size: 13px;\n border: 1px solid ${primaryBlue};\n border-radius: 20px;\n background-color: #fff;\n color: ${primaryBlue};\n cursor: pointer;\n white-space: nowrap;\n user-select: none;\n transition: all 0.2s ease;\n \n &:hover {\n background-color: ${primaryBlue};\n color: #fff;\n }\n `,\n\n highlight: css`\n background-color: ${primaryBlue};\n color: white;\n border-color: ${primaryBlue};\n `,\n\n inputBar: css`\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-top: 1px solid ${borderGray};\n background-color: #fff;\n `,\n\n input: css`\n flex: 1;\n padding: 8px 12px;\n border: 1px solid ${borderGray};\n border-radius: 20px;\n font-size: 14px;\n outline: none;\n \n &:focus {\n border-color: ${primaryBlue};\n box-shadow: 0 0 3px ${primaryBlue};\n }\n `,\n\n sendWrapper: css`\n flex: 1;\n border-radius: 26px;\n `,\n\n stopButton: css`\n width: 23px !important;\n height: 23px !important;\n padding: 0 !important;\n min-width: 23px !important;\n min-height: 23px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n\n sendButton: css`\n width: 23px !important;\n height: 23px !important;\n padding: 0 !important;\n min-width: 23px !important;\n min-height: 23px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${primaryBlue};\n border: none;\n border-radius: 20px;\n color: white;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.2s ease;\n box-sizing: border-box;\n &:hover {\n background-color: #005ecb;\n }\n &:disabled {\n background-color: ${lightBlue};\n cursor: not-allowed;\n }\n `,\n\n uploadBtn: css`\n margin-left: 8px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background-color: ${primaryBlue};\n color: white;\n font-weight: 700;\n font-size: 22px;\n line-height: 32px;\n text-align: center;\n cursor: pointer;\n border: none;\n user-select: none;\n &:hover {\n background-color: #005ecb;\n }\n `,\n\n clearBtn: css`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: 1px solid rgb(228, 231, 236);\n border-radius: 12px;\n width: 45px;\n height: 45px;\n box-sizing: border-box;\n `,\n\n chatFooter: css`\n gap: 8px;\n position: relatative;\n z-index: 10;\n padding: 0 20px 10px 20px;\n `,\n\n flexCenterGap2: css`\n display: flex;\n align-items: center;\n gap: 8px;\n `,\n\n iconHuihuarenqun: css`\n font-family: \"iconfont\";\n font-size: 16px;\n font-weight: 300;\n padding: 3px;\n border-radius: 6px;\n color: #181B25;\n cursor: pointer;\n &:hover {\n background: #E1E4EA;\n color: #7F56D9;\n }\n `,\n\n popoverFooter: css`\n display: flex;\n gap: 8px;\n justify-content: end;\n `,\n\n divider: css`\n width: 1px;\n height: 15px;\n margin-left: 3px;\n margin-right: 3px;\n background: #D0D5DD;\n `,\n\n flexCenterGap4: css`\n display: flex;\n align-items: center;\n gap: 4px;\n color: #7F56D9;\n cursor: pointer;\n &:hover {\n opacity: 0.8;\n }\n `,\n\n iconZengjiaDisabled: css`\n font-family: \"iconfont\";\n font-size: 25px;\n font-weight: 300;\n color: #D0D5DD;\n cursor: not-allowed;\n `,\n\n iconZengjiaNormal: css`\n font-family: \"iconfont\";\n font-size: 25px;\n font-weight: 300;\n color: #98A2B3;\n cursor: pointer;\n &:hover {\n color: #7F56D9;\n }\n `,\n actionHeaderWrapper: css`\n margin-bottom: 12px;\n `,\n actionHeaderItem: css`\n display: flex;\n align-items: center;\n height: 40px;\n box-sizing: border-box;\n padding: 10px 16px;\n margin-bottom: 8px;\n background: #f7fafd;\n cursor: pointer;\n border-radius: 8px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.03);\n `,\n actionHeaderIcon: css`\n height: 14px;\n `,\n actionHeaderText: css`\n font-weight: 400;\n font-size: 14px;\n color: #3961F2;\n margin-left: 10px;\n margin-right: 6px;\n `,\n actionHeaderDetail: css`\n background: #F3F5FA;\n border-radius: 8px;\n overflow: hidden;\n `,\n actionDetailTitle: css`\n display: flex;\n align-items: center;\n padding: 0 16px;\n box-sizing: border-box;\n background: #EDEFF5;\n height: 32px;\n margin-bottom: 12px;\n cursor: pointer;\n `,\n actionHeaderDetailItem: css`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n padding: 0 16px;\n margin-bottom: 12px;\n color: #949494;\n `,\n actionHeaderCost: css`\n margin-left: auto;\n color: #888;\n font-size: 12px;\n min-width: 32px;\n text-align: right;\n `,\n}));\n\nexport const GlobalStyle: React.FC = () => (\n <Global\n styles={globalCss`\n .ant-bubble-footer {\n display: flex;\n align-items: center;\n min-width: 0,\n max-width: 600,\n /* 你想覆盖的其他样式 */\n }\n\n .ant-avatar {\n background-color: transparent;\n }\n\n .ant-sender-actions-list {\n margin-left: -40px;\n }\n\n .ant-sender {\n box-shadow: none !important;\n }\n\n .ant-prompts-item {\n padding-block: 8px !important;\n }\n\n /* 用户消息气泡背景色 */\n .ant-bubble .user-content {\n background-color: #D8E0FD;\n }\n\n /* 助手消息气泡背景色 */\n .ant-bubble .assistant-content {\n background-color: #F3F5FA;\n }\n `}\n />\n);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React from 'react';\nimport { css } from '@emotion/css';\nimport { css as globalCss, Global } from '@emotion/react';\nimport { withBasicStyles } from '@/styles/common';\n\nconst primaryBlue = '#0078FF'; // 主蓝色\nconst lightBlue = '#E6F0FF'; // 浅蓝色气泡背景\nconst darkGray = '#333'; // 深灰色文本\nconst lightGray = '#888'; // 浅灰文本\nconst borderGray = '#ddd'; // 边框灰色\n\nexport const useStyles = withBasicStyles(() => ({\n // 静态样式\n wrapper: css`\n display: flex;\n flex-direction: column;\n max-height: 812px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n min-width: 375px;\n background-color: #fff;\n // border: 1px solid rgba(80,96,122,.15);\n border-radius: 12px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,\n Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n `,\n\n navbar: css`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 16px;\n border-bottom: 1px solid ${borderGray};\n background-color: #fff;\n `,\n\n userAvatar: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n width: 32px;\n border-radius: 50%;\n object-fit: cover;\n margin-right: 12px;\n `,\n\n avatar: css`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n object-fit: cover;\n margin-right: 12px;\n border: 1px solid ${borderGray};\n `,\n\n title: css`\n font-weight: 600;\n font-size: 16px;\n color: ${darkGray};\n `,\n\n subtitle: css`\n font-size: 12px;\n color: ${lightGray};\n margin-top: 2px;\n `,\n\n messageContainer: css`\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n background-color: #fff;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n position: relative;\n `,\n\n emptyWrapper: css`\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: '#222';\n userSelect: none;\n `,\n\n emptyImg: css`\n width: 60px;\n height: 60px;\n margin-bottom: 16px;\n `,\n\n message: css`\n max-width: 70%;\n padding: 10px 14px;\n border-radius: 20px;\n background-color: ${lightBlue};\n color: ${darkGray};\n font-size: 14px;\n line-height: 1.4;\n word-break: break-word;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n `,\n\n messageRight: css`\n align-self: flex-end;\n background-color: ${primaryBlue};\n color: white;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 20px;\n border-top-left-radius: 20px;\n border-top-right-radius: 20px;\n `,\n\n quickReplies: css`\n display: flex;\n gap: 8px;\n padding: 10px 16px;\n border-top: 1px solid ${borderGray};\n background-color: #fff;\n overflow-x: auto;\n `,\n\n replyItem: css`\n padding: 6px 12px;\n font-size: 13px;\n border: 1px solid ${primaryBlue};\n border-radius: 20px;\n background-color: #fff;\n color: ${primaryBlue};\n cursor: pointer;\n white-space: nowrap;\n user-select: none;\n transition: all 0.2s ease;\n \n &:hover {\n background-color: ${primaryBlue};\n color: #fff;\n }\n `,\n\n highlight: css`\n background-color: ${primaryBlue};\n color: white;\n border-color: ${primaryBlue};\n `,\n\n inputBar: css`\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-top: 1px solid ${borderGray};\n background-color: #fff;\n `,\n\n input: css`\n flex: 1;\n padding: 8px 12px;\n border: 1px solid ${borderGray};\n border-radius: 20px;\n font-size: 14px;\n outline: none;\n \n &:focus {\n border-color: ${primaryBlue};\n box-shadow: 0 0 3px ${primaryBlue};\n }\n `,\n\n sendWrapper: css`\n flex: 1;\n border-radius: 26px;\n `,\n\n stopButton: css`\n width: 23px !important;\n height: 23px !important;\n padding: 0 !important;\n min-width: 23px !important;\n min-height: 23px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n\n sendButton: css`\n width: 23px !important;\n height: 23px !important;\n padding: 0 !important;\n min-width: 23px !important;\n min-height: 23px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${primaryBlue};\n border: none;\n border-radius: 20px;\n color: white;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.2s ease;\n box-sizing: border-box;\n &:hover {\n background-color: #005ecb;\n }\n &:disabled {\n background-color: ${lightBlue};\n cursor: not-allowed;\n }\n `,\n\n uploadBtn: css`\n margin-left: 8px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background-color: ${primaryBlue};\n color: white;\n font-weight: 700;\n font-size: 22px;\n line-height: 32px;\n text-align: center;\n cursor: pointer;\n border: none;\n user-select: none;\n &:hover {\n background-color: #005ecb;\n }\n `,\n\n clearBtn: css`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: 1px solid rgb(228, 231, 236);\n border-radius: 12px;\n width: 45px;\n height: 45px;\n box-sizing: border-box;\n `,\n\n chatFooter: css`\n gap: 8px;\n position: relatative;\n z-index: 10;\n padding: 0 20px 10px 20px;\n `,\n\n footerTips: css`\n display: flex;\n align-items:center;\n justify-content: center;\n font-size: 12px;\n color: rgba(0,0,0,0.4);\n `,\n\n flexCenterGap2: css`\n display: flex;\n align-items: center;\n gap: 8px;\n `,\n\n iconHuihuarenqun: css`\n font-family: \"iconfont\";\n font-size: 16px;\n font-weight: 300;\n padding: 3px;\n border-radius: 6px;\n color: #181B25;\n cursor: pointer;\n &:hover {\n background: #E1E4EA;\n color: #7F56D9;\n }\n `,\n\n popoverFooter: css`\n display: flex;\n gap: 8px;\n justify-content: end;\n `,\n\n divider: css`\n width: 1px;\n height: 15px;\n margin-left: 3px;\n margin-right: 3px;\n background: #D0D5DD;\n `,\n\n flexCenterGap4: css`\n display: flex;\n align-items: center;\n gap: 4px;\n color: #7F56D9;\n cursor: pointer;\n &:hover {\n opacity: 0.8;\n }\n `,\n\n iconZengjiaDisabled: css`\n font-family: \"iconfont\";\n font-size: 25px;\n font-weight: 300;\n color: #D0D5DD;\n cursor: not-allowed;\n `,\n\n iconZengjiaNormal: css`\n font-family: \"iconfont\";\n font-size: 25px;\n font-weight: 300;\n color: #98A2B3;\n cursor: pointer;\n &:hover {\n color: #7F56D9;\n }\n `,\n actionHeaderWrapper: css`\n margin-bottom: 12px;\n `,\n actionHeaderItem: css`\n display: flex;\n align-items: center;\n height: 40px;\n box-sizing: border-box;\n padding: 10px 16px;\n margin-bottom: 8px;\n background: #f7fafd;\n cursor: pointer;\n border-radius: 8px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.03);\n `,\n actionHeaderIcon: css`\n height: 14px;\n `,\n actionHeaderText: css`\n font-weight: 400;\n font-size: 14px;\n color: #3961F2;\n margin-left: 10px;\n margin-right: 6px;\n `,\n actionHeaderDetail: css`\n background: #F3F5FA;\n border-radius: 8px;\n overflow: hidden;\n `,\n actionDetailTitle: css`\n display: flex;\n align-items: center;\n padding: 0 16px;\n box-sizing: border-box;\n background: #EDEFF5;\n height: 32px;\n margin-bottom: 12px;\n cursor: pointer;\n `,\n actionHeaderDetailItem: css`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n padding: 0 16px;\n margin-bottom: 12px;\n color: #949494;\n `,\n actionHeaderCost: css`\n margin-left: auto;\n color: #888;\n font-size: 12px;\n min-width: 32px;\n text-align: right;\n `,\n}));\n\nexport const GlobalStyle: React.FC = () => (\n <Global\n styles={globalCss`\n .ant-bubble-footer {\n display: flex;\n align-items: center;\n min-width: 0,\n max-width: 600,\n /* 你想覆盖的其他样式 */\n }\n\n .ant-sender-content {\n textarea {\n word-break: break-all;\n }\n }\n\n .ant-avatar {\n background-color: transparent;\n }\n\n .ant-sender-actions-list {\n margin-left: -40px;\n }\n\n .ant-sender {\n box-shadow: none !important;\n }\n\n .ant-prompts-item {\n padding-block: 8px !important;\n }\n\n /* 用户消息气泡背景色 */\n .ant-bubble .user-content {\n background-color: #D8E0FD;\n }\n\n /* 助手消息气泡背景色 */\n .ant-bubble .assistant-content {\n background-color: #F3F5FA;\n }\n `}\n />\n);\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_react", "React", "globalCss"]
7
7
  }
@@ -0,0 +1,6 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import XAiConversations from '.';
3
+ declare const meta: Meta<typeof XAiConversations>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const 基础用法: Story;
@@ -0,0 +1,82 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/XAiConversations/XAiConversations.stories.tsx
30
+ var XAiConversations_stories_exports = {};
31
+ __export(XAiConversations_stories_exports, {
32
+ default: () => XAiConversations_stories_default,
33
+ 基础用法: () => 基础用法
34
+ });
35
+ module.exports = __toCommonJS(XAiConversations_stories_exports);
36
+ var import_react = __toESM(require("react"));
37
+ var import__ = __toESM(require("."));
38
+ var meta = {
39
+ title: "AI组件/XAiConversations 对话记录管理",
40
+ component: import__.default,
41
+ parameters: {
42
+ layout: "centered"
43
+ },
44
+ tags: ["autodocs"],
45
+ argTypes: {}
46
+ };
47
+ var XAiConversations_stories_default = meta;
48
+ var BasicUsageStory = (args) => {
49
+ const items = Array.from({ length: 4 }).map((_, index) => ({
50
+ key: `item${index + 1}`,
51
+ label: `聊天记录 ${index + 1}`,
52
+ disabled: index === 3
53
+ }));
54
+ return /* @__PURE__ */ import_react.default.createElement(
55
+ "div",
56
+ {
57
+ style: {
58
+ backgroundColor: "rgb(240, 242, 245)",
59
+ minHeight: "300px",
60
+ minWidth: "700px",
61
+ display: "flex",
62
+ alignItems: "center",
63
+ paddingInline: "50px"
64
+ }
65
+ },
66
+ /* @__PURE__ */ import_react.default.createElement(
67
+ import__.default,
68
+ {
69
+ items
70
+ }
71
+ )
72
+ );
73
+ };
74
+ var 基础用法 = {
75
+ render: BasicUsageStory,
76
+ args: {}
77
+ };
78
+ // Annotate the CommonJS export names for ESM import in node:
79
+ 0 && (module.exports = {
80
+ 基础用法
81
+ });
82
+ //# sourceMappingURL=XAiConversations.stories.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/XAiConversations/XAiConversations.stories.tsx"],
4
+ "sourcesContent": ["import React from 'react';\nimport type { ConversationsProps } from '@ant-design/x';\nimport { type GetProp } from 'antd';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport XAiConversations from '.';\n\nconst meta: Meta<typeof XAiConversations> = {\n title: 'AI组件/XAiConversations 对话记录管理',\n component: XAiConversations,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n },\n};\n\nexport default meta;\n type Story = StoryObj<typeof meta>;\n\nconst BasicUsageStory = (args: any) => {\n const items: GetProp<ConversationsProps, 'items'> = Array.from({ length: 4 }).map((_, index) => ({\n key: `item${index + 1}`,\n label: `聊天记录 ${index + 1}`,\n disabled: index === 3,\n }));\n\n return (\n <div style={{\n backgroundColor: 'rgb(240, 242, 245)',\n minHeight: '300px',\n minWidth: '700px',\n display: 'flex',\n alignItems: 'center',\n paddingInline: '50px',\n }}\n >\n <XAiConversations\n items={items}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n },\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAIlB,eAA6B;AAE7B,IAAM,OAAsC;AAAA,EAC1C,OAAO;AAAA,EACP,WAAW,SAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU,CACV;AACF;AAEA,IAAO,mCAAQ;AAGf,IAAM,kBAAkB,CAAC,SAAc;AACrC,QAAM,QAA8C,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,WAAW;AAAA,IAC/F,KAAK,OAAO,QAAQ;AAAA,IACpB,OAAO,QAAQ,QAAQ;AAAA,IACvB,UAAU,UAAU;AAAA,EACtB,EAAE;AAEF,SACE,6BAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MAAI,OAAO;AAAA,QACV,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,eAAe;AAAA,MACjB;AAAA;AAAA,IAEE,6BAAAA,QAAA;AAAA,MAAC,SAAAD;AAAA,MAAA;AAAA,QACC;AAAA;AAAA,IACF;AAAA,EACF;AAEJ;AAEO,IAAM,OAAc;AAAA,EACzB,QAAQ;AAAA,EACR,MAAM,CACN;AACF;",
6
+ "names": ["XAiConversations", "React"]
7
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { type XAiConversationsProps } from "../../types/XAiConversations";
3
+ declare const XAiConversations: React.FC<XAiConversationsProps>;
4
+ export default XAiConversations;
@@ -0,0 +1,59 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/XAiConversations/index.tsx
30
+ var XAiConversations_exports = {};
31
+ __export(XAiConversations_exports, {
32
+ default: () => XAiConversations_default
33
+ });
34
+ module.exports = __toCommonJS(XAiConversations_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_x = require("@ant-design/x");
37
+ var XAiConversations = (props) => {
38
+ const {
39
+ items,
40
+ style
41
+ } = props;
42
+ const [activeKey, setActiveKey] = (0, import_react.useState)("");
43
+ return /* @__PURE__ */ import_react.default.createElement(
44
+ import_x.Conversations,
45
+ {
46
+ activeKey,
47
+ onActiveChange: (v) => setActiveKey(v),
48
+ items,
49
+ style: {
50
+ width: 256,
51
+ background: "#fff",
52
+ borderRadius: "6px",
53
+ ...style
54
+ }
55
+ }
56
+ );
57
+ };
58
+ var XAiConversations_default = XAiConversations;
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/XAiConversations/index.tsx"],
4
+ "sourcesContent": ["import React, { useState } from 'react';\nimport { Conversations } from '@ant-design/x';\nimport { type XAiConversationsProps } from '@/types/XAiConversations';\n\nconst XAiConversations: React.FC<XAiConversationsProps> = (props) => {\n const {\n items,\n style,\n } = props;\n\n const [activeKey, setActiveKey] = useState('');\n\n return (\n <Conversations\n activeKey={activeKey}\n onActiveChange={(v) => setActiveKey(v)}\n items={items}\n style={{\n width: 256,\n background: '#fff',\n borderRadius: '6px',\n ...style,\n }}\n />\n );\n};\n\nexport default XAiConversations;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,eAA8B;AAG9B,IAAM,mBAAoD,CAAC,UAAU;AACnE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,EAAE;AAE7C,SACE,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,gBAAgB,CAAC,MAAM,aAAa,CAAC;AAAA,MACrC;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,GAAG;AAAA,MACL;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,2BAAQ;",
6
+ "names": ["React"]
7
+ }
@@ -3,5 +3,5 @@ import XAiProvider from './index';
3
3
  declare const meta: Meta<typeof XAiProvider>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof meta>;
6
- export declare const WithProvider: Story;
7
- export declare const MultipleProviders: Story;
6
+ export declare const 单聊天窗口: Story;
7
+ export declare const 多容器示例: Story;
@@ -29,9 +29,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  // src/components/XAiProvider/XAiProvider.stories.tsx
30
30
  var XAiProvider_stories_exports = {};
31
31
  __export(XAiProvider_stories_exports, {
32
- MultipleProviders: () => MultipleProviders,
33
- WithProvider: () => WithProvider,
34
- default: () => XAiProvider_stories_default
32
+ default: () => XAiProvider_stories_default,
33
+ 单聊天窗口: () => 单聊天窗口,
34
+ 多容器示例: () => 多容器示例
35
35
  });
36
36
  module.exports = __toCommonJS(XAiProvider_stories_exports);
37
37
  var import_react = __toESM(require("react"));
@@ -69,7 +69,7 @@ var meta = {
69
69
  ]
70
70
  };
71
71
  var XAiProvider_stories_default = meta;
72
- var WithProvider = {
72
+ var 单聊天窗口 = {
73
73
  render: (args) => /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "400px", height: "600px" } }, /* @__PURE__ */ import_react.default.createElement(import_index.default, { ...args }, /* @__PURE__ */ import_react.default.createElement(
74
74
  import_XAiChatbot.default,
75
75
  {
@@ -77,22 +77,22 @@ var WithProvider = {
77
77
  navbar: {
78
78
  title: "Provider 聊天机器人",
79
79
  subtitle: "由 Provider 管理消息",
80
- avatar: "https://via.placeholder.com/40"
80
+ avatar: "https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg"
81
81
  }
82
82
  }
83
83
  ))),
84
84
  args: {
85
85
  url: "http://ai-platform.xline-dev.test.xinke.biz",
86
- token: "eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA",
86
+ token: "eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJkZGUzOTcwOS0wMDdlLTQ5YWItYjIzMy1iMTZmYzRkMDU2N2QiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQ1Njc4NTMsImV4cCI6MTc1NDU3NTA1MywidHlwZSI6ImFjY2VzcyIsImNsaWVudF9pZCI6IkFwcDE5NTAwMjA1OTQ0NTI2NjAyMjQiLCJzY29wZSI6ImFsbCIsInBsYXRmb3JtX3R5cGUiOiJNYWluU3RhdGlvbiJ9.jH9muK_MWcE9NtWxPJRqeoeGsnRf79B2oOpQjemJ6kY5_UjAT06BWlX3bszHeRbJbk1OM_kfCeugiO3Gokpj2A",
87
87
  config: {
88
- appNo: "App1952213101022154752",
88
+ appNo: "App1950020594452660224",
89
89
  pt: "MainStation",
90
90
  tc: "ZABX"
91
91
  },
92
92
  providerId: "demo-provider"
93
93
  }
94
94
  };
95
- var MultipleProviders = {
95
+ var 多容器示例 = {
96
96
  render: (args) => /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", gap: "20px" } }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "400px", height: "600px" } }, /* @__PURE__ */ import_react.default.createElement(import_index.default, { ...args, providerId: "provider-1" }, /* @__PURE__ */ import_react.default.createElement(
97
97
  import_XAiChatbot.default,
98
98
  {
@@ -100,7 +100,7 @@ var MultipleProviders = {
100
100
  navbar: {
101
101
  title: "Provider 1",
102
102
  subtitle: "第一个聊天机器人",
103
- avatar: "https://via.placeholder.com/40"
103
+ avatar: "https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg"
104
104
  }
105
105
  }
106
106
  ))), /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "400px", height: "600px" } }, /* @__PURE__ */ import_react.default.createElement(import_index.default, { ...args, providerId: "provider-2" }, /* @__PURE__ */ import_react.default.createElement(
@@ -110,7 +110,7 @@ var MultipleProviders = {
110
110
  navbar: {
111
111
  title: "Provider 2",
112
112
  subtitle: "第二个聊天机器人",
113
- avatar: "https://via.placeholder.com/40"
113
+ avatar: "https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg"
114
114
  }
115
115
  }
116
116
  )))),
@@ -121,7 +121,7 @@ var MultipleProviders = {
121
121
  };
122
122
  // Annotate the CommonJS export names for ESM import in node:
123
123
  0 && (module.exports = {
124
- MultipleProviders,
125
- WithProvider
124
+ 单聊天窗口,
125
+ 多容器示例
126
126
  });
127
127
  //# sourceMappingURL=XAiProvider.stories.js.map