@ai-group/chat-sdk 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +239 -0
- package/dist/esm/assets/arrow-down.png +0 -0
- package/dist/esm/assets/arrow-up.png +0 -0
- package/dist/esm/assets/chatKnowledge.png +0 -0
- package/dist/esm/assets/completed-black.png +0 -0
- package/dist/esm/assets/completed.png +0 -0
- package/dist/esm/assets/document-black.png +0 -0
- package/dist/esm/assets/document.png +0 -0
- package/dist/esm/assets/document.svg +16 -0
- package/dist/esm/assets/empty.png +0 -0
- package/dist/esm/assets/group.png +0 -0
- package/dist/esm/assets/qa-black.png +0 -0
- package/dist/esm/assets/qa.png +0 -0
- package/dist/esm/assets/skillNo-black.png +0 -0
- package/dist/esm/assets/skillNo.png +0 -0
- package/dist/esm/assets/tools-black.png +0 -0
- package/dist/esm/assets/tools.png +0 -0
- package/dist/esm/client/base.js +2 -0
- package/dist/esm/client/base.js.map +1 -0
- package/dist/esm/client/restClient.js +2 -0
- package/dist/esm/client/restClient.js.map +1 -0
- package/dist/esm/client/wsClient.js +2 -0
- package/dist/esm/client/wsClient.js.map +1 -0
- package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js +562 -0
- package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js.map +1 -0
- package/dist/esm/components/XAiChatbot/index.js +586 -0
- package/dist/esm/components/XAiChatbot/index.js.map +1 -0
- package/dist/esm/components/XAiChatbot/styles.js +62 -0
- package/dist/esm/components/XAiChatbot/styles.js.map +1 -0
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js +297 -0
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -0
- package/dist/esm/components/XAiProvider/index.js +128 -0
- package/dist/esm/components/XAiProvider/index.js.map +1 -0
- package/dist/esm/components/XAiSDK.js +29 -0
- package/dist/esm/components/XAiSDK.js.map +1 -0
- package/dist/esm/components/XAiWebSDKWrapper.js +42 -0
- package/dist/esm/components/XAiWebSDKWrapper.js.map +1 -0
- package/dist/esm/context/AiProviderContext.js +62 -0
- package/dist/esm/context/AiProviderContext.js.map +1 -0
- package/dist/esm/context/ThemeContext.js +8 -0
- package/dist/esm/context/ThemeContext.js.map +1 -0
- package/dist/esm/hooks/useAgentGenerator.js +536 -0
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -0
- package/dist/esm/hooks/useEventStreamRequest.js +229 -0
- package/dist/esm/hooks/useEventStreamRequest.js.map +1 -0
- package/dist/esm/hooks/useProviderContext.js +115 -0
- package/dist/esm/hooks/useProviderContext.js.map +1 -0
- package/dist/esm/hooks/useXAiSDK.js +49 -0
- package/dist/esm/hooks/useXAiSDK.js.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/services/api.js +73 -0
- package/dist/esm/services/api.js.map +1 -0
- package/dist/esm/styles/common.js +106 -0
- package/dist/esm/styles/common.js.map +1 -0
- package/dist/esm/styles/markdown.js +12 -0
- package/dist/esm/styles/markdown.js.map +1 -0
- package/dist/esm/types/XAiChatbot.js +2 -0
- package/dist/esm/types/XAiChatbot.js.map +1 -0
- package/dist/esm/types/XAiMessage.js +65 -0
- package/dist/esm/types/XAiMessage.js.map +1 -0
- package/dist/esm/types/XAiProvider.js +4 -0
- package/dist/esm/types/XAiProvider.js.map +1 -0
- package/dist/esm/types/index.js +4 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/mdx.d.ts +18 -0
- package/dist/esm/utils/chat.js +976 -0
- package/dist/esm/utils/chat.js.map +1 -0
- package/dist/esm/utils/index.js +19 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/providerManager.js +70 -0
- package/dist/esm/utils/providerManager.js.map +1 -0
- package/dist/esm/utils/request.example.js +379 -0
- package/dist/esm/utils/request.example.js.map +1 -0
- package/dist/esm/utils/request.js +491 -0
- package/dist/esm/utils/request.js.map +1 -0
- package/dist/esm/utils/umdEntry.js +109 -0
- package/dist/esm/utils/umdEntry.js.map +1 -0
- package/dist/umd/chat-sdk.min.js +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useRef","useState","useMemo","Button","Space","Spin","Tooltip","Popover","Bubble","Sender","Prompts","ArrowUpOutlined","ClearOutlined","UserOutlined","RedoOutlined","CopyOutlined","DeleteOutlined","clsx","MarkdownIt","reactHtmlParser","MarkdownGlobalStyle","MessageStatus","MessageRole","emptyIcon","groupIcon","arrowUp","arrowDown","useChatbotContext","useStyles","GlobalStyle","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","md","html","linkify","typographer","defaultRender","renderer","rules","link_open","tokens","idx","options","env","self","renderToken","aIndex","attrIndex","attrPush","attrs","relIndex","defaultActions","key","icon","tooltip","XAiChatbot","props","_useChatbotContext","mergedProps","_mergedProps$navbarSh","navbarShow","navbar","_mergedProps$renderNa","renderNavbar","_mergedProps$loading","loading","propLoading","messageTooltip","avatar","userAvatar","propMessages","messages","_mergedProps$text","text","_mergedProps$emptySta","emptyStateImage","_mergedProps$emptySta2","emptyStateText","_mergedProps$messageA","messageActions","onMessagesActionsCallback","onSuggestMessageClick","onSend","onClear","onStop","_useState","_useState2","_slicedToArray","disabled","_setDisabled","_useState3","_useState4","content","setContent","_useState5","_useState6","mode","_setMode","_useState7","_useState8","fileUploading","setFileUploading","_useState9","_useState10","clearPopoverVisible","setClearPopoverVisible","styles","FooterActions","_ref","data","className","flex","gap","children","map","action","index","title","cursor","onClick","MessageFooter","_ref2","rolesObject","assistant","placement","style","background","typing","step","interval","maxWidth","user","suggestion","visibility","variant","ActionHeader","_ref3","_first$extra","_ref3$thinks","thinks","renderActionHeader","_useState11","_useState12","expanded","setExpanded","length","onToggle","v","first","name","extra","actionHeaderWrapper","actionHeaderItem","src","alt","actionHeaderIcon","actionHeaderText","w","actionHeaderDetail","actionDetailTitle","flex1","pl","_action$extra","_action$extra2","_action$extra3","thinkIcon","expandIcon","thinkCost","cost","actionHeaderDetailItem","actionHeaderCost","concat","uniqueId","handleSend","trim","NavBar","subtitle","fileInputRef","handleStopGenerate","handleFileSelect","handleClear","cancelClear","confirmClear","clearConfirmContent","p","mb","mt","popoverFooter","size","type","danger","uploadButton","flexCenterGap2","iconZengjiaDisabled","iconZengjiaNormal","current","_fileInputRef$current","click","ref","onChange","display","accept","EmptyState","emptyWrapper","emptyImg","weight","textColor","wrapper","messageContainer","List","roles","items","msg","_ref4","id","role","status","_ref4$thinks","_ref4$extra","noFooter","init","header","_msg$content2","_msg$content","minWidth","render","htmlString","_msg$content3","bytes","vertical","onItemClick","info","description","footer","failed","chatFooter","trigger","open","onOpenChange","clearBtn","border","value","sendWrapper","placeholder","actions","_","_info$components","components","SendButton","LoadingButton","iconHuihuarenqun","divider","stopButton","sendButton","onSubmit","onCancel"],"sources":["../../../../src/components/XAiChatbot/index.tsx"],"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, useProviderMethods } 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 />, style: { background: '#fde3cf' } },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined />, style: { background: '#87d068' } },\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 background: '#D8E0FD',\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' }}\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"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
|
|
2
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26, _templateObject27, _templateObject28, _templateObject29, _templateObject30, _templateObject31, _templateObject32, _templateObject33, _templateObject34, _templateObject35, _templateObject36, _templateObject37;
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { css } from '@emotion/css';
|
|
5
|
+
import { css as globalCss, Global } from '@emotion/react';
|
|
6
|
+
import { withBasicStyles } from "../../styles/common";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
var primaryBlue = '#0078FF'; // 主蓝色
|
|
9
|
+
var lightBlue = '#E6F0FF'; // 浅蓝色气泡背景
|
|
10
|
+
var darkGray = '#333'; // 深灰色文本
|
|
11
|
+
var lightGray = '#888'; // 浅灰文本
|
|
12
|
+
var borderGray = '#ddd'; // 边框灰色
|
|
13
|
+
|
|
14
|
+
export var useStyles = withBasicStyles(function () {
|
|
15
|
+
return {
|
|
16
|
+
// 静态样式
|
|
17
|
+
wrapper: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\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 "]))),
|
|
18
|
+
navbar: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 16px;\n border-bottom: 1px solid ", ";\n background-color: #fff;\n "])), borderGray),
|
|
19
|
+
avatar: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n width: 40px;\n height: 40px;\n border-radius: 50%;\n object-fit: cover;\n margin-right: 12px;\n border: 1px solid ", ";\n "])), borderGray),
|
|
20
|
+
title: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n font-weight: 600;\n font-size: 16px;\n color: ", ";\n "])), darkGray),
|
|
21
|
+
subtitle: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n font-size: 12px;\n color: ", ";\n margin-top: 2px;\n "])), lightGray),
|
|
22
|
+
messageContainer: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\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 "]))),
|
|
23
|
+
emptyWrapper: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\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 "]))),
|
|
24
|
+
emptyImg: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n width: 60px;\n height: 60px;\n margin-bottom: 16px;\n "]))),
|
|
25
|
+
message: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n max-width: 70%;\n padding: 10px 14px;\n border-radius: 20px;\n background-color: ", ";\n color: ", ";\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 "])), lightBlue, darkGray),
|
|
26
|
+
messageRight: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n align-self: flex-end;\n background-color: ", ";\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 "])), primaryBlue),
|
|
27
|
+
quickReplies: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n display: flex;\n gap: 8px;\n padding: 10px 16px;\n border-top: 1px solid ", ";\n background-color: #fff;\n overflow-x: auto;\n "])), borderGray),
|
|
28
|
+
replyItem: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n padding: 6px 12px;\n font-size: 13px;\n border: 1px solid ", ";\n border-radius: 20px;\n background-color: #fff;\n color: ", ";\n cursor: pointer;\n white-space: nowrap;\n user-select: none;\n transition: all 0.2s ease;\n \n &:hover {\n background-color: ", ";\n color: #fff;\n }\n "])), primaryBlue, primaryBlue, primaryBlue),
|
|
29
|
+
highlight: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n background-color: ", ";\n color: white;\n border-color: ", ";\n "])), primaryBlue, primaryBlue),
|
|
30
|
+
inputBar: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-top: 1px solid ", ";\n background-color: #fff;\n "])), borderGray),
|
|
31
|
+
input: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n flex: 1;\n padding: 8px 12px;\n border: 1px solid ", ";\n border-radius: 20px;\n font-size: 14px;\n outline: none;\n \n &:focus {\n border-color: ", ";\n box-shadow: 0 0 3px ", ";\n }\n "])), borderGray, primaryBlue, primaryBlue),
|
|
32
|
+
sendWrapper: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n flex: 1;\n "]))),
|
|
33
|
+
stopButton: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\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 "]))),
|
|
34
|
+
sendButton: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\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: ", ";\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: ", ";\n cursor: not-allowed;\n }\n "])), primaryBlue, lightBlue),
|
|
35
|
+
uploadBtn: css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n margin-left: 8px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background-color: ", ";\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 "])), primaryBlue),
|
|
36
|
+
clearBtn: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\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 "]))),
|
|
37
|
+
chatFooter: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n gap: 8px;\n position: relatative;\n z-index: 10;\n padding: 0 20px 10px 20px;\n "]))),
|
|
38
|
+
// todo 后续增加safe-bottom
|
|
39
|
+
|
|
40
|
+
flexCenterGap2: css(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n gap: 8px;\n "]))),
|
|
41
|
+
iconHuihuarenqun: css(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\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 "]))),
|
|
42
|
+
popoverFooter: css(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["\n display: flex;\n gap: 8px;\n justify-content: end;\n "]))),
|
|
43
|
+
divider: css(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["\n width: 1px;\n height: 15px;\n margin-left: 3px;\n margin-right: 3px;\n background: #D0D5DD;\n "]))),
|
|
44
|
+
flexCenterGap4: css(_templateObject26 || (_templateObject26 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n gap: 4px;\n color: #7F56D9;\n cursor: pointer;\n &:hover {\n opacity: 0.8;\n }\n "]))),
|
|
45
|
+
iconZengjiaDisabled: css(_templateObject27 || (_templateObject27 = _taggedTemplateLiteral(["\n font-family: \"iconfont\";\n font-size: 25px;\n font-weight: 300;\n color: #D0D5DD;\n cursor: not-allowed;\n "]))),
|
|
46
|
+
iconZengjiaNormal: css(_templateObject28 || (_templateObject28 = _taggedTemplateLiteral(["\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 "]))),
|
|
47
|
+
actionHeaderWrapper: css(_templateObject29 || (_templateObject29 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
|
|
48
|
+
actionHeaderItem: css(_templateObject30 || (_templateObject30 = _taggedTemplateLiteral(["\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 "]))),
|
|
49
|
+
actionHeaderIcon: css(_templateObject31 || (_templateObject31 = _taggedTemplateLiteral(["\n height: 14px;\n "]))),
|
|
50
|
+
actionHeaderText: css(_templateObject32 || (_templateObject32 = _taggedTemplateLiteral(["\n font-weight: 400;\n font-size: 14px;\n color: #3961F2;\n margin-left: 10px;\n margin-right: 6px;\n "]))),
|
|
51
|
+
actionHeaderDetail: css(_templateObject33 || (_templateObject33 = _taggedTemplateLiteral(["\n background: #F3F5FA;\n border-radius: 8px;\n overflow: hidden;\n "]))),
|
|
52
|
+
actionDetailTitle: css(_templateObject34 || (_templateObject34 = _taggedTemplateLiteral(["\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 "]))),
|
|
53
|
+
actionHeaderDetailItem: css(_templateObject35 || (_templateObject35 = _taggedTemplateLiteral(["\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 "]))),
|
|
54
|
+
actionHeaderCost: css(_templateObject36 || (_templateObject36 = _taggedTemplateLiteral(["\n margin-left: auto;\n color: #888;\n font-size: 12px;\n min-width: 32px;\n text-align: right;\n "])))
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
export var GlobalStyle = function GlobalStyle() {
|
|
58
|
+
return /*#__PURE__*/_jsx(Global, {
|
|
59
|
+
styles: globalCss(_templateObject37 || (_templateObject37 = _taggedTemplateLiteral(["\n .ant-bubble-footer {\n display: flex;\n align-items: center;\n min-width: 0,\n max-width: 600,\n /* \u4F60\u60F3\u8986\u76D6\u7684\u5176\u4ED6\u6837\u5F0F */\n }\n\n .ant-sender {\n box-shadow: none !important;\n }\n\n .ant-prompts-item {\n padding-block: 8px !important;\n }\n "])))
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","css","globalCss","Global","withBasicStyles","jsx","_jsx","primaryBlue","lightBlue","darkGray","lightGray","borderGray","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","navbar","_templateObject2","avatar","_templateObject3","title","_templateObject4","subtitle","_templateObject5","messageContainer","_templateObject6","emptyWrapper","_templateObject7","emptyImg","_templateObject8","message","_templateObject9","messageRight","_templateObject10","quickReplies","_templateObject11","replyItem","_templateObject12","highlight","_templateObject13","inputBar","_templateObject14","input","_templateObject15","sendWrapper","_templateObject16","stopButton","_templateObject17","sendButton","_templateObject18","uploadBtn","_templateObject19","clearBtn","_templateObject20","chatFooter","_templateObject21","flexCenterGap2","_templateObject22","iconHuihuarenqun","_templateObject23","popoverFooter","_templateObject24","divider","_templateObject25","flexCenterGap4","_templateObject26","iconZengjiaDisabled","_templateObject27","iconZengjiaNormal","_templateObject28","actionHeaderWrapper","_templateObject29","actionHeaderItem","_templateObject30","actionHeaderIcon","_templateObject31","actionHeaderText","_templateObject32","actionHeaderDetail","_templateObject33","actionDetailTitle","_templateObject34","actionHeaderDetailItem","_templateObject35","actionHeaderCost","_templateObject36","GlobalStyle","styles","_templateObject37"],"sources":["../../../../src/components/XAiChatbot/styles.tsx"],"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 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 `,\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 `, // todo 后续增加safe-bottom\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 {\n box-shadow: none !important;\n }\n\n .ant-prompts-item {\n padding-block: 8px !important;\n }\n `}\n />\n);\n"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,GAAG,QAAQ,cAAc;AAClC,SAASA,GAAG,IAAIC,SAAS,EAAEC,MAAM,QAAQ,gBAAgB;AACzD,SAASC,eAAe;AAA0B,SAAAC,GAAA,IAAAC,IAAA;AAElD,IAAMC,WAAW,GAAG,SAAS,CAAC,CAAC;AAC/B,IAAMC,SAAS,GAAG,SAAS,CAAC,CAAG;AAC/B,IAAMC,QAAQ,GAAG,MAAM,CAAC,CAAQ;AAChC,IAAMC,SAAS,GAAG,MAAM,CAAC,CAAO;AAChC,IAAMC,UAAU,GAAG,MAAM,CAAC,CAAM;;AAEhC,OAAO,IAAMC,SAAS,GAAGR,eAAe,CAAC;EAAA,OAAO;IAC9C;IACAS,OAAO,EAAEZ,GAAG,CAAAa,eAAA,KAAAA,eAAA,GAAAC,sBAAA,4bAcX;IAEDC,MAAM,EAAEf,GAAG,CAAAgB,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,mLAKkBJ,UAAU,CAEtC;IAEDO,MAAM,EAAEjB,GAAG,CAAAkB,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,yJAMWJ,UAAU,CAC/B;IAEDS,KAAK,EAAEnB,GAAG,CAAAoB,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,4EAGCN,QAAQ,CAClB;IAEDa,QAAQ,EAAErB,GAAG,CAAAsB,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,2EAEFL,SAAS,CAEnB;IAEDc,gBAAgB,EAAEvB,GAAG,CAAAwB,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,gNAUpB;IAEDW,YAAY,EAAEzB,GAAG,CAAA0B,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,mLAQhB;IAEDa,QAAQ,EAAE3B,GAAG,CAAA4B,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,2EAIZ;IAEDe,OAAO,EAAE7B,GAAG,CAAA8B,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,6PAIUP,SAAS,EACpBC,QAAQ,CAKlB;IAEDuB,YAAY,EAAE/B,GAAG,CAAAgC,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,2OAEKR,WAAW,CAMhC;IAED2B,YAAY,EAAEjC,GAAG,CAAAkC,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,8JAISJ,UAAU,CAGnC;IAEDyB,SAAS,EAAEnC,GAAG,CAAAoC,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,sVAGQR,WAAW,EAGtBA,WAAW,EAOEA,WAAW,CAGlC;IAED+B,SAAS,EAAErC,GAAG,CAAAsC,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,sFACQR,WAAW,EAEfA,WAAW,CAC5B;IAEDiC,QAAQ,EAAEvC,GAAG,CAAAwC,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,kJAIaJ,UAAU,CAEnC;IAED+B,KAAK,EAAEzC,GAAG,CAAA0C,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,0OAGYJ,UAAU,EAMZJ,WAAW,EACLA,WAAW,CAEpC;IAEDqC,WAAW,EAAE3C,GAAG,CAAA4C,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,0BAEf;IAED+B,UAAU,EAAE7C,GAAG,CAAA8C,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,kPASd;IAEDiC,UAAU,EAAE/C,GAAG,CAAAgD,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,mlBASOR,WAAW,EAYTC,SAAS,CAGhC;IAED0C,SAAS,EAAEjD,GAAG,CAAAkD,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,yWAKQR,WAAW,CAYhC;IAED6C,QAAQ,EAAEnD,GAAG,CAAAoD,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,qPAUZ;IAEDuC,UAAU,EAAErD,GAAG,CAAAsD,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,wGAKd;IAAE;;IAEHyC,cAAc,EAAEvD,GAAG,CAAAwD,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,yEAIlB;IAED2C,gBAAgB,EAAEzD,GAAG,CAAA0D,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA,yPAYpB;IAED6C,aAAa,EAAE3D,GAAG,CAAA4D,iBAAA,KAAAA,iBAAA,GAAA9C,sBAAA,0EAIjB;IAED+C,OAAO,EAAE7D,GAAG,CAAA8D,iBAAA,KAAAA,iBAAA,GAAAhD,sBAAA,yHAMX;IAEDiD,cAAc,EAAE/D,GAAG,CAAAgE,iBAAA,KAAAA,iBAAA,GAAAlD,sBAAA,+JASlB;IAEDmD,mBAAmB,EAAEjE,GAAG,CAAAkE,iBAAA,KAAAA,iBAAA,GAAApD,sBAAA,wIAMvB;IAEDqD,iBAAiB,EAAEnE,GAAG,CAAAoE,iBAAA,KAAAA,iBAAA,GAAAtD,sBAAA,iLASrB;IACDuD,mBAAmB,EAAErE,GAAG,CAAAsE,iBAAA,KAAAA,iBAAA,GAAAxD,sBAAA,sCAEvB;IACDyD,gBAAgB,EAAEvE,GAAG,CAAAwE,iBAAA,KAAAA,iBAAA,GAAA1D,sBAAA,kRAWpB;IACD2D,gBAAgB,EAAEzE,GAAG,CAAA0E,iBAAA,KAAAA,iBAAA,GAAA5D,sBAAA,+BAEpB;IACD6D,gBAAgB,EAAE3E,GAAG,CAAA4E,iBAAA,KAAAA,iBAAA,GAAA9D,sBAAA,8HAMpB;IACD+D,kBAAkB,EAAE7E,GAAG,CAAA8E,iBAAA,KAAAA,iBAAA,GAAAhE,sBAAA,sFAItB;IACDiE,iBAAiB,EAAE/E,GAAG,CAAAgF,iBAAA,KAAAA,iBAAA,GAAAlE,sBAAA,0MASrB;IACDmE,sBAAsB,EAAEjF,GAAG,CAAAkF,iBAAA,KAAAA,iBAAA,GAAApE,sBAAA,oKAQ1B;IACDqE,gBAAgB,EAAEnF,GAAG,CAAAoF,iBAAA,KAAAA,iBAAA,GAAAtE,sBAAA;EAOvB,CAAC;AAAA,CAAC,CAAC;AAEH,OAAO,IAAMuE,WAAqB,GAAG,SAAxBA,WAAqBA,CAAA;EAAA,oBAChChF,IAAA,CAACH,MAAM;IACLoF,MAAM,EAAErF,SAAS,CAAAsF,iBAAA,KAAAA,iBAAA,GAAAzE,sBAAA;EAgBf,CACH,CAAC;AAAA,CACH"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import XAiProvider from "./index";
|
|
4
|
+
import XAiChatbot from "../XAiChatbot";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
var meta = {
|
|
8
|
+
title: 'AI组件/XAiProvider AI容器',
|
|
9
|
+
component: XAiProvider,
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: 'centered',
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。'
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
tags: ['autodocs'],
|
|
19
|
+
argTypes: {
|
|
20
|
+
url: {
|
|
21
|
+
control: 'text',
|
|
22
|
+
description: 'AI 服务地址'
|
|
23
|
+
},
|
|
24
|
+
token: {
|
|
25
|
+
control: 'text',
|
|
26
|
+
description: '认证 token'
|
|
27
|
+
},
|
|
28
|
+
providerId: {
|
|
29
|
+
control: 'text',
|
|
30
|
+
description: 'Provider 唯一标识'
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
// 添加装饰器,确保组件有必要的上下文
|
|
34
|
+
decorators: [function (Story) {
|
|
35
|
+
return /*#__PURE__*/_jsx("div", {
|
|
36
|
+
style: {
|
|
37
|
+
padding: '20px'
|
|
38
|
+
},
|
|
39
|
+
children: /*#__PURE__*/_jsx(Story, {})
|
|
40
|
+
});
|
|
41
|
+
}]
|
|
42
|
+
};
|
|
43
|
+
export default meta;
|
|
44
|
+
// 使用 Provider 的 XAiChatbot
|
|
45
|
+
export var WithProvider = {
|
|
46
|
+
render: function render(args) {
|
|
47
|
+
return /*#__PURE__*/_jsx("div", {
|
|
48
|
+
style: {
|
|
49
|
+
width: '400px',
|
|
50
|
+
height: '600px'
|
|
51
|
+
},
|
|
52
|
+
children: /*#__PURE__*/_jsx(XAiProvider, _objectSpread(_objectSpread({}, args), {}, {
|
|
53
|
+
children: /*#__PURE__*/_jsx(XAiChatbot, {
|
|
54
|
+
navbarShow: true,
|
|
55
|
+
navbar: {
|
|
56
|
+
title: 'Provider 聊天机器人',
|
|
57
|
+
subtitle: '由 Provider 管理消息',
|
|
58
|
+
avatar: 'https://via.placeholder.com/40'
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
}))
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
args: {
|
|
65
|
+
url: 'http://ai-platform.xline-dev.test.xinke.biz',
|
|
66
|
+
token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA',
|
|
67
|
+
config: {
|
|
68
|
+
appNo: 'App1952213101022154752',
|
|
69
|
+
pt: 'MainStation',
|
|
70
|
+
tc: 'ZABX'
|
|
71
|
+
},
|
|
72
|
+
providerId: 'demo-provider'
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// 多个 Provider 示例
|
|
77
|
+
export var MultipleProviders = {
|
|
78
|
+
render: function render(args) {
|
|
79
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
80
|
+
style: {
|
|
81
|
+
display: 'flex',
|
|
82
|
+
gap: '20px'
|
|
83
|
+
},
|
|
84
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
85
|
+
style: {
|
|
86
|
+
width: '400px',
|
|
87
|
+
height: '600px'
|
|
88
|
+
},
|
|
89
|
+
children: /*#__PURE__*/_jsx(XAiProvider, _objectSpread(_objectSpread({}, args), {}, {
|
|
90
|
+
providerId: "provider-1",
|
|
91
|
+
children: /*#__PURE__*/_jsx(XAiChatbot, {
|
|
92
|
+
navbarShow: true,
|
|
93
|
+
navbar: {
|
|
94
|
+
title: 'Provider 1',
|
|
95
|
+
subtitle: '第一个聊天机器人',
|
|
96
|
+
avatar: 'https://via.placeholder.com/40'
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
}))
|
|
100
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
101
|
+
style: {
|
|
102
|
+
width: '400px',
|
|
103
|
+
height: '600px'
|
|
104
|
+
},
|
|
105
|
+
children: /*#__PURE__*/_jsx(XAiProvider, _objectSpread(_objectSpread({}, args), {}, {
|
|
106
|
+
providerId: "provider-2",
|
|
107
|
+
children: /*#__PURE__*/_jsx(XAiChatbot, {
|
|
108
|
+
navbarShow: true,
|
|
109
|
+
navbar: {
|
|
110
|
+
title: 'Provider 2',
|
|
111
|
+
subtitle: '第二个聊天机器人',
|
|
112
|
+
avatar: 'https://via.placeholder.com/40'
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
}))
|
|
116
|
+
})]
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
args: {
|
|
120
|
+
url: 'https://api.example.com/ai',
|
|
121
|
+
token: 'your-token-here'
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
// // 自定义消息处理示例
|
|
126
|
+
// export const CustomMessageHandling: Story = {
|
|
127
|
+
// render: (args) => (
|
|
128
|
+
// <div style={{ width: '400px', height: '600px' }}>
|
|
129
|
+
// <XAiProvider {...args}>
|
|
130
|
+
// <XAiChatbot
|
|
131
|
+
// navbarShow
|
|
132
|
+
// navbar={{
|
|
133
|
+
// title: '自定义处理',
|
|
134
|
+
// subtitle: '自定义消息处理逻辑',
|
|
135
|
+
// avatar: 'https://via.placeholder.com/40',
|
|
136
|
+
// }}
|
|
137
|
+
// messageActions={[
|
|
138
|
+
// {
|
|
139
|
+
// key: 'custom',
|
|
140
|
+
// icon: <span>🔧</span>,
|
|
141
|
+
// tooltip: '自定义操作',
|
|
142
|
+
// },
|
|
143
|
+
// ]}
|
|
144
|
+
// onMessagesActionsCallback={(index, data) => {
|
|
145
|
+
// console.log('自定义操作:', index, data);
|
|
146
|
+
// }}
|
|
147
|
+
// />
|
|
148
|
+
// </XAiProvider>
|
|
149
|
+
// </div>
|
|
150
|
+
// ),
|
|
151
|
+
// args: {
|
|
152
|
+
// url: 'https://api.example.com/ai',
|
|
153
|
+
// token: 'your-token-here',
|
|
154
|
+
// providerId: 'custom-provider',
|
|
155
|
+
// },
|
|
156
|
+
// };
|
|
157
|
+
|
|
158
|
+
// // 示例 1: 使用通用 Hook 的组件
|
|
159
|
+
// const GenericComponent = React.memo<{ title: string }>(({ title }) => {
|
|
160
|
+
// const { isInProvider, getProviderValue } = useProviderContext({
|
|
161
|
+
// props: { title },
|
|
162
|
+
// });
|
|
163
|
+
|
|
164
|
+
// const providerMethods = useProviderMethods();
|
|
165
|
+
|
|
166
|
+
// const handleCustomAction = () => {
|
|
167
|
+
// if (isInProvider) {
|
|
168
|
+
// providerMethods.sendMessage?.('自定义消息');
|
|
169
|
+
// } else {
|
|
170
|
+
// console.log('独立组件动作');
|
|
171
|
+
// }
|
|
172
|
+
// };
|
|
173
|
+
|
|
174
|
+
// return (
|
|
175
|
+
// <div style={{ padding: '20px', border: '1px solid #ccc', marginBottom: '10px' }}>
|
|
176
|
+
// <h3>{title}</h3>
|
|
177
|
+
// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>
|
|
178
|
+
// <p>消息数量: {getProviderValue('messages')?.length || 0}</p>
|
|
179
|
+
// <button onClick={handleCustomAction}>
|
|
180
|
+
// {isInProvider ? '使用 Provider 方法' : '使用原有回调'}
|
|
181
|
+
// </button>
|
|
182
|
+
// </div>
|
|
183
|
+
// );
|
|
184
|
+
// });
|
|
185
|
+
|
|
186
|
+
// // 示例 2: 自定义聊天组件
|
|
187
|
+
// const CustomChatComponent = React.memo(() => {
|
|
188
|
+
// const { isInProvider, getProviderValue } = useProviderContext({
|
|
189
|
+
// props: {},
|
|
190
|
+
// });
|
|
191
|
+
|
|
192
|
+
// const providerMethods = useProviderMethods();
|
|
193
|
+
|
|
194
|
+
// const messageCount = getProviderValue('messages')?.length || 0;
|
|
195
|
+
// const theme = messageCount > 5 ? 'dark' : 'light';
|
|
196
|
+
|
|
197
|
+
// return (
|
|
198
|
+
// <div style={{
|
|
199
|
+
// padding: '20px',
|
|
200
|
+
// backgroundColor: theme === 'dark' ? '#333' : '#fff',
|
|
201
|
+
// color: theme === 'dark' ? '#fff' : '#333',
|
|
202
|
+
// border: '1px solid #ccc',
|
|
203
|
+
// marginBottom: '10px',
|
|
204
|
+
// }}
|
|
205
|
+
// >
|
|
206
|
+
// <h3>自定义聊天组件</h3>
|
|
207
|
+
// <p>主题: {theme}</p>
|
|
208
|
+
// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>
|
|
209
|
+
// <button
|
|
210
|
+
// onClick={() => providerMethods.sendMessage?.('Hello from custom component')}
|
|
211
|
+
// disabled={!isInProvider}
|
|
212
|
+
// >
|
|
213
|
+
// 发送消息
|
|
214
|
+
// </button>
|
|
215
|
+
// </div>
|
|
216
|
+
// );
|
|
217
|
+
// });
|
|
218
|
+
|
|
219
|
+
// // 展示 Hook 灵活性的示例
|
|
220
|
+
// export const HookFlexibilityExample: Story = {
|
|
221
|
+
// render: (args) => (
|
|
222
|
+
// <div style={{ width: '600px', height: '800px' }}>
|
|
223
|
+
// <XAiProvider {...args}>
|
|
224
|
+
// <div style={{ padding: '20px' }}>
|
|
225
|
+
// <h3>Hook 灵活性示例</h3>
|
|
226
|
+
// <p>展示不同组件如何使用相同的 Hook</p>
|
|
227
|
+
|
|
228
|
+
// {/* 不同的组件使用相同的 Hook */}
|
|
229
|
+
// <div style={{ marginBottom: '20px' }}>
|
|
230
|
+
// <GenericComponent title="组件 A" />
|
|
231
|
+
// <GenericComponent title="组件 B" />
|
|
232
|
+
// <CustomChatComponent />
|
|
233
|
+
// </div>
|
|
234
|
+
|
|
235
|
+
// {/* 聊天机器人 */}
|
|
236
|
+
// <XAiChatbot
|
|
237
|
+
// navbarShow
|
|
238
|
+
// navbar={{
|
|
239
|
+
// title: '灵活 Hook 示例',
|
|
240
|
+
// subtitle: '所有组件共享 Provider 状态',
|
|
241
|
+
// avatar: 'https://via.placeholder.com/40',
|
|
242
|
+
// }}
|
|
243
|
+
// />
|
|
244
|
+
// </div>
|
|
245
|
+
// </XAiProvider>
|
|
246
|
+
// </div>
|
|
247
|
+
// ),
|
|
248
|
+
// args: {
|
|
249
|
+
// url: 'https://api.example.com/ai',
|
|
250
|
+
// token: 'your-token-here',
|
|
251
|
+
// providerId: 'flexibility-example',
|
|
252
|
+
// },
|
|
253
|
+
// parameters: {
|
|
254
|
+
// docs: {
|
|
255
|
+
// description: {
|
|
256
|
+
// story: '展示如何使用 useProviderContext 和 useProviderMethods Hook 来创建可复用的组件。',
|
|
257
|
+
// },
|
|
258
|
+
// },
|
|
259
|
+
// },
|
|
260
|
+
// };
|
|
261
|
+
|
|
262
|
+
// // 展示独立组件 vs Provider 组件的对比
|
|
263
|
+
// export const ComponentComparison: Story = {
|
|
264
|
+
// render: (args) => (
|
|
265
|
+
// <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>
|
|
266
|
+
// {/* 独立使用的组件 */}
|
|
267
|
+
// <div style={{ width: '300px' }}>
|
|
268
|
+
// <h4>独立组件</h4>
|
|
269
|
+
// <GenericComponent title="独立组件" />
|
|
270
|
+
// <CustomChatComponent />
|
|
271
|
+
// </div>
|
|
272
|
+
|
|
273
|
+
// {/* 在 Provider 中的组件 */}
|
|
274
|
+
// <div style={{ width: '300px' }}>
|
|
275
|
+
// <h4>Provider 中的组件</h4>
|
|
276
|
+
// <XAiProvider {...args}>
|
|
277
|
+
// <GenericComponent title="Provider 组件" />
|
|
278
|
+
// <CustomChatComponent />
|
|
279
|
+
// <XAiChatbot
|
|
280
|
+
// navbarShow
|
|
281
|
+
// navbar={{
|
|
282
|
+
// title: '示例聊天机器人',
|
|
283
|
+
// subtitle: '在 Provider 中',
|
|
284
|
+
// avatar: 'https://via.placeholder.com/40',
|
|
285
|
+
// }}
|
|
286
|
+
// />
|
|
287
|
+
// </XAiProvider>
|
|
288
|
+
// </div>
|
|
289
|
+
// </div>
|
|
290
|
+
// ),
|
|
291
|
+
// args: {
|
|
292
|
+
// url: 'https://api.example.com/ai',
|
|
293
|
+
// token: 'your-token-here',
|
|
294
|
+
// providerId: 'comparison-example',
|
|
295
|
+
// },
|
|
296
|
+
// };
|
|
297
|
+
//# sourceMappingURL=XAiProvider.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","XAiProvider","XAiChatbot","jsx","_jsx","jsxs","_jsxs","meta","title","component","parameters","layout","docs","description","tags","argTypes","url","control","token","providerId","decorators","Story","style","padding","children","WithProvider","render","args","width","height","_objectSpread","navbarShow","navbar","subtitle","avatar","config","appNo","pt","tc","MultipleProviders","display","gap"],"sources":["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite';\nimport React from 'react';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n url: {\n control: 'text',\n description: 'AI 服务地址',\n },\n token: {\n control: 'text',\n description: '认证 token',\n },\n providerId: {\n control: 'text',\n description: 'Provider 唯一标识',\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const WithProvider: Story = {\n render: (args) => (\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args}>\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://via.placeholder.com/40',\n }}\n />\n </XAiProvider>\n </div>\n ),\n args: {\n url: 'http://ai-platform.xline-dev.test.xinke.biz',\n token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA',\n config: {\n appNo: 'App1952213101022154752',\n pt: 'MainStation',\n tc: 'ZABX',\n },\n providerId: 'demo-provider',\n },\n};\n\n// 多个 Provider 示例\nexport const MultipleProviders: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://via.placeholder.com/40',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://via.placeholder.com/40',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n\n// // 自定义消息处理示例\n// export const CustomMessageHandling: Story = {\n// render: (args) => (\n// <div style={{ width: '400px', height: '600px' }}>\n// <XAiProvider {...args}>\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '自定义处理',\n// subtitle: '自定义消息处理逻辑',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// messageActions={[\n// {\n// key: 'custom',\n// icon: <span>🔧</span>,\n// tooltip: '自定义操作',\n// },\n// ]}\n// onMessagesActionsCallback={(index, data) => {\n// console.log('自定义操作:', index, data);\n// }}\n// />\n// </XAiProvider>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'custom-provider',\n// },\n// };\n\n// // 示例 1: 使用通用 Hook 的组件\n// const GenericComponent = React.memo<{ title: string }>(({ title }) => {\n// const { isInProvider, getProviderValue } = useProviderContext({\n// props: { title },\n// });\n\n// const providerMethods = useProviderMethods();\n\n// const handleCustomAction = () => {\n// if (isInProvider) {\n// providerMethods.sendMessage?.('自定义消息');\n// } else {\n// console.log('独立组件动作');\n// }\n// };\n\n// return (\n// <div style={{ padding: '20px', border: '1px solid #ccc', marginBottom: '10px' }}>\n// <h3>{title}</h3>\n// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>\n// <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n// <button onClick={handleCustomAction}>\n// {isInProvider ? '使用 Provider 方法' : '使用原有回调'}\n// </button>\n// </div>\n// );\n// });\n\n// // 示例 2: 自定义聊天组件\n// const CustomChatComponent = React.memo(() => {\n// const { isInProvider, getProviderValue } = useProviderContext({\n// props: {},\n// });\n\n// const providerMethods = useProviderMethods();\n\n// const messageCount = getProviderValue('messages')?.length || 0;\n// const theme = messageCount > 5 ? 'dark' : 'light';\n\n// return (\n// <div style={{\n// padding: '20px',\n// backgroundColor: theme === 'dark' ? '#333' : '#fff',\n// color: theme === 'dark' ? '#fff' : '#333',\n// border: '1px solid #ccc',\n// marginBottom: '10px',\n// }}\n// >\n// <h3>自定义聊天组件</h3>\n// <p>主题: {theme}</p>\n// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>\n// <button\n// onClick={() => providerMethods.sendMessage?.('Hello from custom component')}\n// disabled={!isInProvider}\n// >\n// 发送消息\n// </button>\n// </div>\n// );\n// });\n\n// // 展示 Hook 灵活性的示例\n// export const HookFlexibilityExample: Story = {\n// render: (args) => (\n// <div style={{ width: '600px', height: '800px' }}>\n// <XAiProvider {...args}>\n// <div style={{ padding: '20px' }}>\n// <h3>Hook 灵活性示例</h3>\n// <p>展示不同组件如何使用相同的 Hook</p>\n\n// {/* 不同的组件使用相同的 Hook */}\n// <div style={{ marginBottom: '20px' }}>\n// <GenericComponent title=\"组件 A\" />\n// <GenericComponent title=\"组件 B\" />\n// <CustomChatComponent />\n// </div>\n\n// {/* 聊天机器人 */}\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '灵活 Hook 示例',\n// subtitle: '所有组件共享 Provider 状态',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// />\n// </div>\n// </XAiProvider>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'flexibility-example',\n// },\n// parameters: {\n// docs: {\n// description: {\n// story: '展示如何使用 useProviderContext 和 useProviderMethods Hook 来创建可复用的组件。',\n// },\n// },\n// },\n// };\n\n// // 展示独立组件 vs Provider 组件的对比\n// export const ComponentComparison: Story = {\n// render: (args) => (\n// <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n// {/* 独立使用的组件 */}\n// <div style={{ width: '300px' }}>\n// <h4>独立组件</h4>\n// <GenericComponent title=\"独立组件\" />\n// <CustomChatComponent />\n// </div>\n\n// {/* 在 Provider 中的组件 */}\n// <div style={{ width: '300px' }}>\n// <h4>Provider 中的组件</h4>\n// <XAiProvider {...args}>\n// <GenericComponent title=\"Provider 组件\" />\n// <CustomChatComponent />\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '示例聊天机器人',\n// subtitle: '在 Provider 中',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// />\n// </XAiProvider>\n// </div>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'comparison-example',\n// },\n// };\n"],"mappings":"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ACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|