@ai-group/chat-sdk 3.7.5 → 3.8.0-alpha.2

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 (117) hide show
  1. package/README.md +36 -0
  2. package/dist/cjs/components/DislikeFeedback.js.map +2 -2
  3. package/dist/cjs/components/FileGallery/index.js +2 -1
  4. package/dist/cjs/components/FileGallery/index.js.map +3 -3
  5. package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
  6. package/dist/cjs/components/Sources/components/CarouselCard.js.map +2 -2
  7. package/dist/cjs/components/XAdkChatbot/index.js +307 -59
  8. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  9. package/dist/cjs/components/XAdkChatbot/styles.d.ts +4 -0
  10. package/dist/cjs/components/XAdkChatbot/styles.js +59 -2
  11. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  12. package/dist/cjs/components/XAdkChatbot/utils.d.ts +14 -0
  13. package/dist/cjs/components/XAdkChatbot/utils.js +79 -0
  14. package/dist/cjs/components/XAdkChatbot/utils.js.map +7 -0
  15. package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.js.map +2 -2
  16. package/dist/cjs/components/XAdkProvider/compound/Messages.d.ts +7 -1
  17. package/dist/cjs/components/XAdkProvider/compound/Messages.js +12 -0
  18. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
  19. package/dist/cjs/components/XAdkProvider/compound/Sidebar.js.map +2 -2
  20. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  21. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
  22. package/dist/cjs/components/XAdkProvider/index.js +3 -0
  23. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  24. package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
  25. package/dist/cjs/components/XAdkSender/index.js +53 -5
  26. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  27. package/dist/cjs/components/XAdkThoughtChain/index.js +27 -28
  28. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  29. package/dist/cjs/components/XAdkThoughtChain/styles.d.ts +3 -1
  30. package/dist/cjs/components/XAdkThoughtChain/styles.js +66 -39
  31. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  32. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  33. package/dist/cjs/components/XAiConversations/index.js +2 -1
  34. package/dist/cjs/components/XAiConversations/index.js.map +3 -3
  35. package/dist/cjs/components/XAiProvider/index.js.map +2 -2
  36. package/dist/cjs/components/XAiSender/index.js.map +2 -2
  37. package/dist/cjs/hooks/useADKChat.d.ts +6 -1
  38. package/dist/cjs/hooks/useADKChat.js +15 -1
  39. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  40. package/dist/cjs/hooks/useADKMessageQueue.d.ts +24 -0
  41. package/dist/cjs/hooks/useADKMessageQueue.js +107 -0
  42. package/dist/cjs/hooks/useADKMessageQueue.js.map +7 -0
  43. package/dist/cjs/index.d.ts +3 -1
  44. package/dist/cjs/index.js +3 -0
  45. package/dist/cjs/index.js.map +2 -2
  46. package/dist/cjs/react/index.d.ts +2 -0
  47. package/dist/cjs/react/index.js +3 -0
  48. package/dist/cjs/react/index.js.map +2 -2
  49. package/dist/cjs/types/XAdkChatbot.d.ts +49 -0
  50. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  51. package/dist/cjs/types/XAdkProvider.d.ts +7 -0
  52. package/dist/cjs/types/XAdkProvider.js.map +2 -2
  53. package/dist/cjs/types/XAdkSender.d.ts +8 -1
  54. package/dist/cjs/types/XAdkSender.js.map +1 -1
  55. package/dist/cjs/types/XAdkThoughtChain.d.ts +2 -0
  56. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  57. package/dist/cjs/types/antdx.d.ts +6 -3
  58. package/dist/cjs/types/antdx.js.map +1 -1
  59. package/dist/esm/components/DislikeFeedback.js.map +1 -1
  60. package/dist/esm/components/FileGallery/index.js +2 -1
  61. package/dist/esm/components/FileGallery/index.js.map +1 -1
  62. package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
  63. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -1
  64. package/dist/esm/components/XAdkChatbot/index.js +277 -25
  65. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  66. package/dist/esm/components/XAdkChatbot/styles.d.ts +4 -0
  67. package/dist/esm/components/XAdkChatbot/styles.js +30 -26
  68. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  69. package/dist/esm/components/XAdkChatbot/utils.d.ts +14 -0
  70. package/dist/esm/components/XAdkChatbot/utils.js +66 -0
  71. package/dist/esm/components/XAdkChatbot/utils.js.map +1 -0
  72. package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.js.map +1 -1
  73. package/dist/esm/components/XAdkProvider/compound/Messages.d.ts +7 -1
  74. package/dist/esm/components/XAdkProvider/compound/Messages.js +16 -2
  75. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  76. package/dist/esm/components/XAdkProvider/compound/Sidebar.js.map +1 -1
  77. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  78. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
  79. package/dist/esm/components/XAdkProvider/index.js +4 -2
  80. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  81. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
  82. package/dist/esm/components/XAdkSender/index.js +80 -16
  83. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  84. package/dist/esm/components/XAdkThoughtChain/index.js +52 -78
  85. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  86. package/dist/esm/components/XAdkThoughtChain/styles.d.ts +3 -1
  87. package/dist/esm/components/XAdkThoughtChain/styles.js +29 -27
  88. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  89. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  90. package/dist/esm/components/XAiConversations/index.js +2 -1
  91. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  92. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  93. package/dist/esm/components/XAiSender/index.js.map +1 -1
  94. package/dist/esm/hooks/useADKChat.d.ts +6 -1
  95. package/dist/esm/hooks/useADKChat.js +18 -1
  96. package/dist/esm/hooks/useADKChat.js.map +1 -1
  97. package/dist/esm/hooks/useADKMessageQueue.d.ts +24 -0
  98. package/dist/esm/hooks/useADKMessageQueue.js +159 -0
  99. package/dist/esm/hooks/useADKMessageQueue.js.map +1 -0
  100. package/dist/esm/index.d.ts +3 -1
  101. package/dist/esm/index.js +2 -1
  102. package/dist/esm/index.js.map +1 -1
  103. package/dist/esm/react/index.d.ts +2 -0
  104. package/dist/esm/react/index.js +1 -0
  105. package/dist/esm/react/index.js.map +1 -1
  106. package/dist/esm/types/XAdkChatbot.d.ts +49 -0
  107. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  108. package/dist/esm/types/XAdkProvider.d.ts +7 -0
  109. package/dist/esm/types/XAdkProvider.js.map +1 -1
  110. package/dist/esm/types/XAdkSender.d.ts +8 -1
  111. package/dist/esm/types/XAdkSender.js.map +1 -1
  112. package/dist/esm/types/XAdkThoughtChain.d.ts +2 -0
  113. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  114. package/dist/esm/types/antdx.d.ts +6 -3
  115. package/dist/esm/types/antdx.js.map +1 -1
  116. package/dist/umd/chat-sdk.min.js +1 -1
  117. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","useCallback","useEffect","useRef","useImperativeHandle","forwardRef","Button","Flex","Tooltip","message","antdMessage","clsx","SwapRightOutlined","ReloadOutlined","CopyOutlined","InfoCircleOutlined","copy","useStyles","MarkdownRender","FunctionCallRender","FileGallery","XAdkThoughtChain","parseAgentMessage","mergeChatStrategies","resolvePresetMarkdownExtensions","defaultToolKindResolver","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","scrollThreshold","XAdkChatbot","_ref","ref","_mergedStrategies$par","_ref$loading","loading","prologue","suggestions","messages","showFnCallDetail","onConfirm","onSuggest","showRetry","showCopy","showLog","onRetry","onCopy","onShowLog","actions","actionsExtra","className","style","_ref$enableGrouping","enableGrouping","_ref$enableProcessPar","enableProcessParsing","parseOptions","_ref$initialized","initialized","sessionId","onFileClick","onResourceLinkClick","renderResourceLink","markdownExtensions","renderFunctionCall","toolKindResolver","strategies","preset","empty","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","prevInitializedRef","prevSessionIdRef","previousMessageCountRef","length","scrollToBottom","_messagesEndRef$curre","behavior","arguments","undefined","current","scrollIntoView","mergedStrategies","mergedMarkdownExtensions","resolveToolKind","name","msg","_ref2","_toolKindResolver","_mergedStrategies$res","call","parseProcessMessage","resourceLinkSchemes","markdownResourceLinkSchemes","el","stableTimer","doScroll","_messagesEndRef$curre2","observer","MutationObserver","clearTimeout","setTimeout","observe","childList","subtree","characterData","maxTimer","disconnect","previousCount","hasNewUserMessage","slice","some","role","scrollTop","scrollHeight","prevLoadingRef","wasLoading","timer","handleScroll","currentTop","isAtBottom","Math","abs","clientHeight","listElement","addEventListener","removeEventListener","chatGroups","map","_msg$isLike","id","msgs","invocationId","allFiles","fileData","isLike","groups","forEach","isRealUserQuery","functionResponse","functionCall","lastGroup","isLastGroupAgent","push","_msg$isLike2","concat","g","reduce","acc","m","_toConsumableArray","renderBotGroup","group","isLastGroup","botMsg","children","i","text","_renderFunctionCall","_msg$functionCall","showDetail","kind","renderApproval","renderHandoff","mergedToolMap","Map","callId","has","set","_objectSpread","_mergedToolMap$get","get","tool","args","nodes","currentProcessItems","processedToolIds","Set","flushProcessItems","type","items","key","mergedMsg","content","add","parts","part","partIdx","includes","titleMap","planning","replanning","reasoning","action_log","process_text","title","trim","lastNode","fullTextToCopy","filter","join","lastBotMsg","hasProcess","n","isGroupLoading","actionProps","isLastBotMsg","actionExtraNode","lastProcessIdx","findLastIndex","node","idx","isLastProcess","defaultOpen","fileSection","fileHeader","display","flexWrap","gap","file","index","onClick","metaFooter","actionIcons","success","timestamp","renderUserGroup","userMsg","userContainer","align","marginBottom","card","event","preventDefault","clipboardData","setData","compact","bareUrlAsText","highlightPlainMentions","renderSuggestions","suggestionWrapper","item","suggestion","suggestContent","icon","iconPlacement","whiteSpace","height","wordWrap","textAlign","padding","lineHeight","isEmpty","wrapper","emptyWrapper","list","flex","displayName"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import {\n useMemo,\n useCallback,\n useEffect,\n useRef,\n useImperativeHandle,\n forwardRef,\n} from \"react\";\nimport { Button, Flex, Tooltip, message as antdMessage } from \"antd\";\nimport clsx from \"clsx\";\nimport {\n SwapRightOutlined,\n ReloadOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n} from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport { useStyles } from \"./styles\";\nimport MarkdownRender from \"./components/MarkdownRender\";\nimport FunctionCallRender from \"./components/FunctionCallRender\";\nimport FileGallery from \"../FileGallery\";\nimport XAdkThoughtChain from \"@/components/XAdkThoughtChain\";\nimport { parseAgentMessage } from \"@/utils\";\nimport {\n mergeChatStrategies,\n resolvePresetMarkdownExtensions,\n} from \"@/presets/runtime\";\nimport type {\n IMessage,\n XAdkChatbotProps,\n XAdkChatbotHandle,\n ChatGroup,\n} from \"@/types\";\nimport type { ThoughtChainItemType } from \"@/types/XAdkThoughtChain\";\nimport { defaultToolKindResolver } from \"@/types/FunctionCallRender\";\n\nconst scrollThreshold = 10;\n\n/**\n * XAdkChatbot - 增强版聊天组件\n *\n * 新增功能:\n * - ✅ 自动消息分组 (enableGrouping)\n * - ✅ 自动解析思维链 (enableProcessParsing)\n * - ✅ 文件展示 (FileGallery)\n * - ✅ 操作栏 (重试/复制/日志)\n * - ✅ 欢迎页面 (agentName/agentIcon/description)\n */\nconst XAdkChatbot = forwardRef<XAdkChatbotHandle, XAdkChatbotProps>(\n (\n {\n loading = false,\n prologue,\n suggestions,\n messages,\n showFnCallDetail,\n onConfirm,\n onSuggest,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n actionsExtra,\n className,\n style,\n // welcome = null,\n enableGrouping = true,\n enableProcessParsing = true,\n parseOptions,\n initialized = true,\n sessionId,\n onFileClick,\n onResourceLinkClick,\n renderResourceLink,\n markdownExtensions,\n renderFunctionCall,\n toolKindResolver,\n strategies,\n preset,\n empty,\n },\n ref,\n ) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const prevInitializedRef = useRef(false);\n const prevSessionIdRef = useRef(sessionId);\n const previousMessageCountRef = useRef(messages.length);\n\n // 暴露命令式 API\n const scrollToBottom = useCallback((behavior: ScrollBehavior = \"auto\") => {\n messagesEndRef.current?.scrollIntoView({ behavior });\n }, []);\n useImperativeHandle(ref, () => ({ scrollToBottom }), [scrollToBottom]);\n const mergedStrategies = useMemo(\n () => mergeChatStrategies(preset, strategies),\n [preset, strategies],\n );\n const mergedMarkdownExtensions = useMemo(\n () => resolvePresetMarkdownExtensions(preset, markdownExtensions),\n [markdownExtensions, preset],\n );\n const resolveToolKind = useCallback(\n (name?: string, msg?: IMessage) =>\n toolKindResolver?.(name) ??\n mergedStrategies.resolveToolKind?.({ name, msg }) ??\n defaultToolKindResolver(name),\n [toolKindResolver, mergedStrategies],\n );\n const parseProcessMessage =\n mergedStrategies.parseProcessMessage ?? parseAgentMessage;\n const resourceLinkSchemes = mergedStrategies.markdownResourceLinkSchemes;\n\n // 初始化完成时滚动到底部\n useEffect(() => {\n if (!initialized) return;\n if (!messages.length) return;\n if (prevInitializedRef.current) return;\n prevInitializedRef.current = true;\n\n const el = listRef.current;\n if (!el) return;\n\n // 用 MutationObserver 监听 DOM 子树变化,等内容渲染稳定后置底\n // 每次 DOM 变化都重新计时,确保所有异步渲染(Markdown、代码高亮、思维链等)完成后再滚动\n let stableTimer: ReturnType<typeof setTimeout>;\n const doScroll = () => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"auto\" });\n };\n\n const observer = new MutationObserver(() => {\n clearTimeout(stableTimer);\n stableTimer = setTimeout(doScroll, 80);\n });\n\n observer.observe(el, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n // 立即执行一次,处理内容已经就绪的情况\n doScroll();\n // 兜底:最多等 500ms 后强制滚动并断开观察\n const maxTimer = setTimeout(() => {\n observer.disconnect();\n doScroll();\n }, 500);\n\n return () => {\n clearTimeout(stableTimer);\n clearTimeout(maxTimer);\n observer.disconnect();\n };\n }, [initialized, messages]);\n\n // 会话切换时重置滚动状态,允许重新触发初始化置底\n useEffect(() => {\n if (sessionId === undefined) return; // 未传 sessionId 不处理\n if (prevSessionIdRef.current === sessionId) return; // 同一会话不处理\n prevSessionIdRef.current = sessionId;\n prevInitializedRef.current = false;\n userHasScrolledRef.current = false;\n }, [sessionId]);\n\n // 新增用户消息代表一次主动发送,应无条件恢复跟随并置底。\n // 之后的流式回复继续沿用“用户未主动上滚时跟随”的规则。\n useEffect(() => {\n const previousCount = previousMessageCountRef.current;\n previousMessageCountRef.current = messages.length;\n const hasNewUserMessage = messages\n .slice(previousCount)\n .some((message) => message.role === \"user\");\n if (hasNewUserMessage) {\n userHasScrolledRef.current = false;\n }\n if (userHasScrolledRef.current) return;\n if (!messages.length) return;\n const el = listRef.current;\n if (el) {\n el.scrollTop = el.scrollHeight;\n }\n }, [loading, messages]);\n\n // loading 结束时(流式输出完成),操作栏(metaFooter)会渲染出来增加高度,\n // 需要延迟滚动到底部,确保操作栏可见\n const prevLoadingRef = useRef(loading);\n useEffect(() => {\n const wasLoading = prevLoadingRef.current;\n prevLoadingRef.current = loading;\n\n if (!wasLoading || loading) return; // 只在 loading true → false 时触发\n if (userHasScrolledRef.current) return;\n if (!messages.length) return;\n\n // 延迟等待操作栏 DOM 渲染完成后再滚动\n const timer = setTimeout(() => {\n const el = listRef.current;\n if (el) {\n el.scrollTop = el.scrollHeight;\n }\n }, 50);\n return () => clearTimeout(timer);\n }, [loading, messages]);\n\n // 处理滚动事件\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n\n const isAtBottom =\n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <=\n scrollThreshold;\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n lastScrollTopRef.current = currentTop;\n }, []);\n\n useEffect(() => {\n const listElement = listRef.current;\n if (!listElement) return;\n\n listElement.addEventListener(\"scroll\", handleScroll);\n return () => {\n listElement.removeEventListener(\"scroll\", handleScroll);\n };\n }, [handleScroll]);\n\n // ========== 消息分组逻辑 ==========\n const chatGroups = useMemo(() => {\n if (!enableGrouping) {\n // 不分组,每条消息独立\n return messages.map((msg) => ({\n id: msg.id,\n role: msg.role,\n msgs: [msg],\n invocationId: msg.invocationId,\n allFiles: msg.fileData || [],\n isLike: msg.isLike ?? 0,\n }));\n }\n\n const groups: ChatGroup[] = [];\n messages.forEach((msg) => {\n // 过滤 followup 消息\n if ((msg as any).role === \"followup\") return;\n\n const isRealUserQuery =\n msg.role === \"user\" && !msg.functionResponse && !msg.functionCall;\n const lastGroup = groups[groups.length - 1];\n const isLastGroupAgent = lastGroup?.role === \"bot\";\n\n if (isLastGroupAgent && !isRealUserQuery) {\n // 合并到上一个 bot 分组\n lastGroup.msgs.push(msg);\n if (msg.invocationId) lastGroup.invocationId = msg.invocationId;\n // 更新 isLike: 取最新的非0值,或保持当前值\n if (msg.isLike && msg.isLike !== 0) {\n lastGroup.isLike = msg.isLike;\n }\n } else {\n // 创建新分组\n groups.push({\n id: msg.id || `group-${groups.length}`,\n role: isRealUserQuery ? \"user\" : \"bot\",\n msgs: [msg],\n invocationId: msg.invocationId,\n allFiles: [],\n isLike: msg.isLike ?? 0,\n });\n }\n });\n\n // 合并文件\n groups.forEach((g) => {\n g.allFiles = g.msgs.reduce(\n (acc, m) => [...acc, ...(m.fileData || [])],\n [] as any[],\n );\n });\n\n return groups;\n }, [messages, enableGrouping]);\n\n // ========== 渲染 Bot 消息组 ==========\n const renderBotGroup = useCallback(\n (\n group: ChatGroup,\n isLastGroup: boolean,\n renderFunctionCall?: XAdkChatbotProps[\"renderFunctionCall\"],\n ) => {\n const { msgs, allFiles } = group;\n\n if (!enableProcessParsing) {\n // 不解析 process,简单渲染\n return (\n <div key={group.id} className={styles.botMsg}>\n {msgs.map((msg, i) => {\n if (msg.text) {\n return (\n <MarkdownRender\n key={`${msg.id}-${i}`}\n text={msg.text}\n resourceLinkSchemes={resourceLinkSchemes}\n onFileClick={onFileClick}\n onResourceLinkClick={onResourceLinkClick}\n renderResourceLink={renderResourceLink}\n markdownExtensions={mergedMarkdownExtensions}\n />\n );\n }\n if (msg.functionCall) {\n return (\n renderFunctionCall?.(msg) ?? (\n <FunctionCallRender\n key={`${msg.id}-${i}`}\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n kind={resolveToolKind(msg.functionCall?.name, msg)}\n renderApproval={mergedStrategies.renderApproval}\n renderHandoff={mergedStrategies.renderHandoff}\n />\n )\n );\n }\n return null;\n })}\n </div>\n );\n }\n\n // ========== 解析 Process 内容 ==========\n\n // 1. 合并工具调用\n const mergedToolMap = new Map<string, IMessage>();\n msgs.forEach((msg) => {\n if (msg.functionCall) {\n const callId = msg.functionCall.id || \"\";\n if (!mergedToolMap.has(callId)) {\n mergedToolMap.set(callId, { ...msg });\n } else {\n mergedToolMap.set(callId, {\n ...(mergedToolMap.get(callId) ?? {}),\n ...msg,\n });\n }\n } else if (msg.functionResponse) {\n const callId = msg.functionResponse.id || \"\";\n if (mergedToolMap.has(callId)) {\n const tool = mergedToolMap.get(callId);\n if (tool) tool.functionResponse = msg.functionResponse;\n } else {\n mergedToolMap.set(callId, {\n ...msg,\n functionCall: {\n id: callId,\n name: msg.functionResponse.name || \"Unknown\",\n args: {},\n },\n });\n }\n }\n });\n\n // 2. 解析文本消息中的 process 内容\n type RenderNode =\n | { type: \"text\"; content: string; key: string }\n | { type: \"process\"; items: ThoughtChainItemType[]; key: string };\n\n const nodes: RenderNode[] = [];\n let currentProcessItems: ThoughtChainItemType[] = [];\n const processedToolIds = new Set<string>();\n\n const flushProcessItems = () => {\n if (currentProcessItems.length > 0) {\n nodes.push({\n type: \"process\",\n items: [...currentProcessItems],\n key: `process-${nodes.length}`,\n });\n currentProcessItems = [];\n }\n };\n\n msgs.forEach((msg) => {\n // 处理工具调用\n if (msg.functionCall) {\n const callId = msg.functionCall.id || \"\";\n if (!processedToolIds.has(callId)) {\n const mergedMsg = mergedToolMap.get(callId);\n if (mergedMsg) {\n currentProcessItems.push({\n type: \"tool\",\n key: `tool-${callId}`,\n content: \"\",\n msg: mergedMsg,\n });\n processedToolIds.add(callId);\n }\n }\n }\n // 处理文本消息\n else if (msg.text && !msg.functionResponse) {\n const parts = parseProcessMessage(msg.text, parseOptions as any);\n\n parts.forEach((part, partIdx) => {\n // process 内容放入 currentProcessItems\n if (\n [\n \"planning\",\n \"replanning\",\n \"reasoning\",\n \"action_log\",\n \"process_text\",\n ].includes(part.type)\n ) {\n const titleMap: Record<string, string> = {\n planning: \"任务规划\",\n replanning: \"重新规划\",\n reasoning: \"推理分析\",\n action_log: \"行动记录\",\n process_text: \"过程分析\",\n };\n\n currentProcessItems.push({\n type: \"text\",\n key: `${msg.id}-${partIdx}`,\n content: part.content,\n title: titleMap[part.type] || \"分析\",\n });\n }\n // 普通文本内容\n else {\n flushProcessItems();\n if (part.content.trim()) {\n const lastNode = nodes[nodes.length - 1];\n if (lastNode?.type === \"text\") {\n // 合并到上一个文本节点\n lastNode.content += \"\\n\\n\" + part.content;\n } else {\n nodes.push({\n type: \"text\",\n content: part.content,\n key: `text-${msg.id}-${partIdx}`,\n });\n }\n }\n }\n });\n }\n });\n\n // 最后flush一次\n flushProcessItems();\n\n // 3. 准备操作栏数据\n const fullTextToCopy = msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n const lastBotMsg = msgs[msgs.length - 1];\n const hasProcess = nodes.some((n) => n.type === \"process\");\n const isGroupLoading = loading && isLastGroup;\n const actionProps = { message: group, isLastBotMsg: isLastGroup };\n const actionExtraNode = actionsExtra?.(actionProps);\n\n // 4. 渲染\n const lastProcessIdx = nodes.findLastIndex((n) => n.type === \"process\");\n return (\n <div key={group.id} className={styles.botMsg}>\n {nodes.map((node, idx) => {\n if (node.type === \"process\") {\n // 只有最后一个 process node 跟随 loading 状态,已完成的思维链不应显示 loading\n const isLastProcess = idx === lastProcessIdx;\n return (\n <XAdkThoughtChain\n key={node.key}\n loading={isLastProcess && isGroupLoading}\n title=\"思维链已完成\"\n items={node.items}\n showFnCallDetail={showFnCallDetail}\n onConfirm={onConfirm}\n defaultOpen={isLastProcess && isGroupLoading}\n renderFunctionCall={renderFunctionCall}\n toolKindResolver={(name) => resolveToolKind(name)}\n strategies={mergedStrategies}\n />\n );\n }\n\n // 文本节点\n // const showBadge =\n // hasProcess && nodes.findIndex((n) => n.type === \"text\") === idx;\n return (\n <div key={node.key}>\n {/* {showBadge && (\n <div className={styles.successBadge}>\n <CheckCircleFilled /> 已完成所有规划任务\n </div>\n )} */}\n <MarkdownRender\n text={node.content}\n resourceLinkSchemes={resourceLinkSchemes}\n onFileClick={onFileClick}\n onResourceLinkClick={onResourceLinkClick}\n renderResourceLink={renderResourceLink}\n markdownExtensions={mergedMarkdownExtensions}\n />\n </div>\n );\n })}\n\n {/* 文件展示 */}\n {allFiles.length > 0 && (\n <div className={styles.fileSection}>\n <div className={styles.fileHeader}>\n <span>生成文件 ({allFiles.length})</span>\n </div>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"8px\" }}>\n {allFiles.map((file, index) => (\n <FileGallery\n key={index}\n file={file}\n onClick={onFileClick}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* 操作栏 */}\n {!isGroupLoading &&\n (actions ||\n showRetry ||\n showCopy ||\n showLog ||\n actionExtraNode) && (\n <div className={styles.metaFooter}>\n {actions ? (\n actions(actionProps)\n ) : (\n <Flex gap={16} className={styles.actionIcons}>\n {showRetry && isLastGroup && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined onClick={onRetry} />\n </Tooltip>\n )}\n {showCopy && (\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n onClick={() => {\n copy(fullTextToCopy);\n antdMessage.success(\"复制成功\");\n onCopy?.(fullTextToCopy);\n }}\n />\n </Tooltip>\n )}\n {showLog && lastBotMsg?.invocationId && (\n <Tooltip title=\"查看日志\">\n <InfoCircleOutlined\n onClick={() =>\n onShowLog?.(\n lastBotMsg.invocationId!,\n lastBotMsg.timestamp,\n )\n }\n />\n </Tooltip>\n )}\n </Flex>\n )}\n {actionExtraNode}\n </div>\n )}\n </div>\n );\n },\n [\n enableProcessParsing,\n parseOptions,\n parseProcessMessage,\n showFnCallDetail,\n onConfirm,\n loading,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n actionsExtra,\n onFileClick,\n onResourceLinkClick,\n renderResourceLink,\n mergedMarkdownExtensions,\n resourceLinkSchemes,\n styles,\n resolveToolKind,\n mergedStrategies,\n ],\n );\n\n // ========== 渲染用户消息组 ==========\n const renderUserGroup = useCallback(\n (group: ChatGroup) => {\n return (\n <div key={group.id} className={styles.userMsg}>\n {group.msgs.map((m, i) => (\n <div key={m.id || i} className={styles.userContainer}>\n {/* 文件展示 */}\n {m.fileData && m.fileData.length > 0 && (\n <>\n {m.fileData.map((file, index) => (\n <FileGallery\n key={index}\n file={file}\n align=\"left\"\n style={{ marginBottom: \"16px\" }}\n onClick={onFileClick}\n />\n ))}\n </>\n )}\n {/* 文本展示 */}\n {m.text && (\n <div\n className={styles.card}\n onCopy={(event) => {\n // 富文本标签的可见文案不含协议;复制用户消息时保留原始 Markdown,\n // 使内容粘贴回 XAdkSender 后能重新还原成 Mention。\n event.preventDefault();\n event.clipboardData.setData(\"text/plain\", m.text || \"\");\n }}\n >\n <MarkdownRender\n text={m.text}\n compact\n bareUrlAsText\n highlightPlainMentions\n resourceLinkSchemes={resourceLinkSchemes}\n onFileClick={onFileClick}\n onResourceLinkClick={onResourceLinkClick}\n renderResourceLink={renderResourceLink}\n markdownExtensions={mergedMarkdownExtensions}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n );\n },\n [\n styles,\n onFileClick,\n onResourceLinkClick,\n renderResourceLink,\n mergedMarkdownExtensions,\n resourceLinkSchemes,\n ],\n );\n\n // ========== 空状态 ==========\n\n // ========== 渲染建议问题 ==========\n const renderSuggestions = () => {\n if (!suggestions || suggestions.length === 0) return null;\n\n return (\n <div className={styles.suggestionWrapper}>\n {suggestions.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPlacement=\"end\"\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n style={{\n whiteSpace: \"normal\",\n height: \"auto\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n padding: \"4px 15px\",\n lineHeight: \"1.5\",\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n );\n };\n\n // 空状态判断\n const isEmpty =\n messages.length === 0 &&\n !prologue &&\n (!suggestions || suggestions.length === 0);\n\n return (\n <div className={clsx(styles.wrapper, className)} style={style}>\n {/* 空状态 */}\n {isEmpty && empty && (\n <div className={styles.emptyWrapper}>\n {typeof empty === \"function\" ? empty() : empty}\n </div>\n )}\n\n <div\n className={styles.list}\n ref={listRef}\n style={isEmpty ? { flex: 0 } : undefined}\n >\n {/* 开场白 */}\n {prologue && (\n <div className={styles.prologue}>\n <MarkdownRender\n text={prologue}\n resourceLinkSchemes={resourceLinkSchemes}\n onFileClick={onFileClick}\n onResourceLinkClick={onResourceLinkClick}\n renderResourceLink={renderResourceLink}\n markdownExtensions={mergedMarkdownExtensions}\n />\n </div>\n )}\n\n {/* 消息列表 */}\n {chatGroups.map((group, idx) =>\n group.role === \"user\"\n ? renderUserGroup(group)\n : renderBotGroup(\n group,\n idx === chatGroups.length - 1,\n renderFunctionCall,\n ),\n )}\n\n {/* 建议问题 */}\n {renderSuggestions()}\n\n <div ref={messagesEndRef} />\n </div>\n </div>\n );\n },\n);\n\nXAdkChatbot.displayName = \"XAdkChatbot\";\n\nexport default XAdkChatbot;\n"],"mappings":"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"}
1
+ {"version":3,"names":["useMemo","useCallback","useEffect","useLayoutEffect","useRef","useImperativeHandle","forwardRef","Fragment","Button","Flex","Tooltip","message","antdMessage","clsx","SwapRightOutlined","ReloadOutlined","CopyOutlined","InfoCircleOutlined","copy","useStyles","formatTimestamp","getSelectionText","MarkdownRender","FunctionCallRender","FileGallery","XAdkThoughtChain","parseAgentMessage","mergeChatStrategies","resolvePresetMarkdownExtensions","defaultToolKindResolver","jsx","_jsx","jsxs","_jsxs","_Fragment","scrollThreshold","XAdkChatbot","_ref","ref","_mergedStrategies$par","_history$direction","_ref$loading","loading","prologue","suggestions","messages","renderBeforeGroup","renderAfterGroup","renderGroup","history","showFnCallDetail","onConfirm","onSuggest","showRetry","showCopy","showLog","onRetry","onCopy","onShowLog","actions","actionsExtra","className","style","_ref$enableGrouping","enableGrouping","_ref$enableProcessPar","enableProcessParsing","parseOptions","_ref$initialized","initialized","sessionId","onFileClick","onResourceLinkClick","renderResourceLink","markdownExtensions","renderFunctionCall","toolKindResolver","strategies","preset","empty","showUserActions","userActions","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","prevInitializedRef","prevSessionIdRef","previousMessageCountRef","length","historyRef","current","messagesRef","historyRequestRef","historyRequestIdRef","historyRequestControllerRef","historyRefreshRef","historyRefreshIdRef","historyRefreshControllerRef","prependAnchorRef","skipNextAutoScrollRef","prependExpiryRef","loadMoreHistory","_pagination$direction","pagination","el","hasMore","direction","_currentMessages$","clearTimeout","currentMessages","firstMessageId","id","messageCount","scrollTop","scrollHeight","requestId","controller","AbortController","Promise","resolve","then","onLoadMore","signal","catch","aborted","error","finally","setTimeout","refreshHistory","onRefresh","refreshing","_pagination$onRefresh","call","_messages$","anchor","scrollToBottom","_messagesEndRef$curre","behavior","arguments","undefined","scrollIntoView","getScrollContainer","getMessagePosition","messageId","list","group","Array","from","children","find","element","HTMLElement","dataset","getBoundingClientRect","top","scrollToMessage","scrollTo","mergedStrategies","mergedMarkdownExtensions","resolveToolKind","name","msg","_ref2","_toolKindResolver","_mergedStrategies$res","parseProcessMessage","resourceLinkSchemes","markdownResourceLinkSchemes","stableTimer","doScroll","_messagesEndRef$curre2","observer","MutationObserver","observe","childList","subtree","characterData","maxTimer","disconnect","_historyRequestContro","_historyRefreshContro","abort","_historyRequestContro2","_historyRefreshContro2","previousCount","hasNewUserMessage","slice","some","role","prevLoadingRef","wasLoading","timer","handleScroll","currentTop","isAtBottom","Math","abs","clientHeight","_pagination$threshold","_pagination$direction2","threshold","atLoadEdge","listElement","addEventListener","removeEventListener","chatGroups","map","_msg$isLike","msgs","invocationId","allFiles","fileData","isLike","groups","forEach","isRealUserQuery","functionResponse","functionCall","lastGroup","isLastGroupAgent","push","_msg$isLike2","concat","g","reduce","acc","m","_toConsumableArray","renderBotGroup","isLastGroup","_activeItem$msg","_activeItem$msg2","_activeItem$msg3","botMsg","i","text","_renderFunctionCall","_msg$functionCall","showDetail","kind","renderApproval","renderHandoff","mergedToolMap","Map","callId","has","set","_objectSpread","_mergedToolMap$get","get","tool","args","nodes","currentProcessItems","processedToolIds","Set","flushProcessItems","type","items","key","mergedMsg","content","add","parts","part","partIdx","includes","titleMap","planning","replanning","reasoning","action_log","process_text","title","trim","lastNode","fullTextToCopy","filter","join","lastBotMsg","isGroupLoading","actionProps","isLastBotMsg","actionExtraNode","firstProcessIdx","findIndex","n","lastProcessIdx","findLastIndex","processItems","flatMap","node","activeItem","activeStep","String","agentName","componentName","idx","collapsible","defaultOpen","fileSection","fileHeader","display","flexWrap","gap","file","index","onClick","metaFooter","actionIcons","success","timestamp","renderUserGroup","nextGroup","_userActions","_group$msgs","compactWithNextText","_message$fileData","Boolean","every","_message$text","_message$text2","userMsg","marginBottom","userContainer","align","card","event","preventDefault","selected","currentTarget","clipboardData","setData","compact","bareUrlAsText","highlightPlainMentions","_message$text3","userTime","userActionIcon","container","document","querySelector","fullText","renderSuggestions","suggestionWrapper","item","suggestion","suggestContent","icon","iconPlacement","whiteSpace","height","wordWrap","textAlign","padding","lineHeight","isEmpty","historyControls","disabled","wrapper","emptyWrapper","flex","context","previousGroup","defaultNode","customNode","displayName"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import {\n useMemo,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useImperativeHandle,\n forwardRef,\n Fragment,\n} from \"react\";\nimport { Button, Flex, Tooltip, message as antdMessage } from \"antd\";\nimport clsx from \"clsx\";\nimport {\n SwapRightOutlined,\n ReloadOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n} from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport { useStyles } from \"./styles\";\nimport { formatTimestamp, getSelectionText } from \"./utils\";\nimport MarkdownRender from \"./components/MarkdownRender\";\nimport FunctionCallRender from \"./components/FunctionCallRender\";\nimport FileGallery from \"../FileGallery\";\nimport XAdkThoughtChain from \"@/components/XAdkThoughtChain\";\nimport { parseAgentMessage } from \"@/utils\";\nimport {\n mergeChatStrategies,\n resolvePresetMarkdownExtensions,\n} from \"@/presets/runtime\";\nimport type {\n IMessage,\n XAdkChatbotProps,\n XAdkChatbotHandle,\n ChatGroup,\n} from \"@/types\";\nimport type { ThoughtChainItemType } from \"@/types/XAdkThoughtChain\";\nimport { defaultToolKindResolver } from \"@/types/FunctionCallRender\";\n\nconst scrollThreshold = 10;\n\n/**\n * XAdkChatbot - 增强版聊天组件\n *\n * 新增功能:\n * - ✅ 自动消息分组 (enableGrouping)\n * - ✅ 自动解析思维链 (enableProcessParsing)\n * - ✅ 文件展示 (FileGallery)\n * - ✅ 操作栏 (重试/复制/日志)\n * - ✅ 欢迎页面 (agentName/agentIcon/description)\n */\nconst XAdkChatbot = forwardRef<XAdkChatbotHandle, XAdkChatbotProps>(\n (\n {\n loading = false,\n prologue,\n suggestions,\n messages,\n renderBeforeGroup,\n renderAfterGroup,\n renderGroup,\n history,\n showFnCallDetail,\n onConfirm,\n onSuggest,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n actionsExtra,\n className,\n style,\n // welcome = null,\n enableGrouping = true,\n enableProcessParsing = true,\n parseOptions,\n initialized = true,\n sessionId,\n onFileClick,\n onResourceLinkClick,\n renderResourceLink,\n markdownExtensions,\n renderFunctionCall,\n toolKindResolver,\n strategies,\n preset,\n empty,\n showUserActions,\n userActions,\n },\n ref,\n ) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const prevInitializedRef = useRef(false);\n const prevSessionIdRef = useRef(sessionId);\n const previousMessageCountRef = useRef(messages.length);\n const historyRef = useRef(history);\n historyRef.current = history;\n const messagesRef = useRef(messages);\n messagesRef.current = messages;\n const historyRequestRef = useRef(false);\n const historyRequestIdRef = useRef(0);\n const historyRequestControllerRef = useRef<AbortController | null>(null);\n const historyRefreshRef = useRef(false);\n const historyRefreshIdRef = useRef(0);\n const historyRefreshControllerRef = useRef<AbortController | null>(null);\n const prependAnchorRef = useRef<{\n sessionId?: string;\n firstMessageId?: string;\n messageCount: number;\n scrollTop: number;\n scrollHeight: number;\n } | null>(null);\n const skipNextAutoScrollRef = useRef(false);\n const prependExpiryRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const loadMoreHistory = useCallback(() => {\n const pagination = historyRef.current;\n const el = listRef.current;\n if (!pagination?.hasMore || pagination.loading || historyRequestRef.current || !el) return;\n\n const direction = pagination.direction ?? \"top\";\n if (direction === \"top\") {\n if (prependExpiryRef.current) clearTimeout(prependExpiryRef.current);\n const currentMessages = messagesRef.current;\n prependAnchorRef.current = {\n sessionId: prevSessionIdRef.current,\n firstMessageId: currentMessages[0]?.id,\n messageCount: currentMessages.length,\n scrollTop: el.scrollTop,\n scrollHeight: el.scrollHeight,\n };\n }\n\n historyRequestRef.current = true;\n const requestId = ++historyRequestIdRef.current;\n const controller = new AbortController();\n historyRequestControllerRef.current = controller;\n void Promise.resolve()\n .then(() => pagination.onLoadMore({ signal: controller.signal }))\n .catch(() => {\n if (requestId !== historyRequestIdRef.current || controller.signal.aborted) return;\n prependAnchorRef.current = null;\n antdMessage.error(\"加载历史消息失败,请重试\");\n })\n .finally(() => {\n if (requestId === historyRequestIdRef.current) {\n historyRequestRef.current = false;\n historyRequestControllerRef.current = null;\n // 没有新页时解除滚动锚点,避免后续正常消息被误认为 prepend。\n prependExpiryRef.current = setTimeout(() => {\n prependAnchorRef.current = null;\n prependExpiryRef.current = null;\n }, 500);\n }\n });\n }, []);\n\n const refreshHistory = useCallback(() => {\n const pagination = historyRef.current;\n if (!pagination?.onRefresh || pagination.refreshing || historyRefreshRef.current) return;\n historyRefreshRef.current = true;\n const requestId = ++historyRefreshIdRef.current;\n const controller = new AbortController();\n historyRefreshControllerRef.current = controller;\n void Promise.resolve()\n .then(() => pagination.onRefresh?.({ signal: controller.signal }))\n .catch(() => {\n if (!controller.signal.aborted) antdMessage.error(\"刷新历史消息失败,请重试\");\n })\n .finally(() => {\n if (requestId === historyRefreshIdRef.current) {\n historyRefreshRef.current = false;\n historyRefreshControllerRef.current = null;\n }\n });\n }, []);\n\n useLayoutEffect(() => {\n const anchor = prependAnchorRef.current;\n const el = listRef.current;\n if (!anchor || !el) return;\n if (anchor.sessionId !== sessionId) {\n prependAnchorRef.current = null;\n return;\n }\n if (messages.length <= anchor.messageCount || messages[0]?.id === anchor.firstMessageId) return;\n\n el.scrollTop = anchor.scrollTop + el.scrollHeight - anchor.scrollHeight;\n skipNextAutoScrollRef.current = true;\n prependAnchorRef.current = null;\n if (prependExpiryRef.current) clearTimeout(prependExpiryRef.current);\n prependExpiryRef.current = null;\n }, [messages, sessionId]);\n\n // 暴露命令式 API\n const scrollToBottom = useCallback((behavior: ScrollBehavior = \"auto\") => {\n messagesEndRef.current?.scrollIntoView({ behavior });\n }, []);\n const getScrollContainer = useCallback(() => listRef.current, []);\n const getMessagePosition = useCallback((messageId: string) => {\n const list = listRef.current;\n if (!list) return null;\n const group = Array.from(list.children).find(\n (element) =>\n element instanceof HTMLElement && element.dataset.messageId === messageId,\n );\n if (!group) return null;\n return group.getBoundingClientRect().top - list.getBoundingClientRect().top + list.scrollTop;\n }, []);\n const scrollToMessage = useCallback(\n (messageId: string, behavior: ScrollBehavior = \"smooth\") => {\n const list = listRef.current;\n const top = getMessagePosition(messageId);\n if (list && top !== null) list.scrollTo({ top, behavior });\n },\n [getMessagePosition],\n );\n useImperativeHandle(\n ref,\n () => ({ scrollToBottom, getScrollContainer, getMessagePosition, scrollToMessage }),\n [scrollToBottom, getScrollContainer, getMessagePosition, scrollToMessage],\n );\n const mergedStrategies = useMemo(\n () => mergeChatStrategies(preset, strategies),\n [preset, strategies],\n );\n const mergedMarkdownExtensions = useMemo(\n () => resolvePresetMarkdownExtensions(preset, markdownExtensions),\n [markdownExtensions, preset],\n );\n const resolveToolKind = useCallback(\n (name?: string, msg?: IMessage) =>\n toolKindResolver?.(name) ??\n mergedStrategies.resolveToolKind?.({ name, msg }) ??\n defaultToolKindResolver(name),\n [toolKindResolver, mergedStrategies],\n );\n const parseProcessMessage =\n mergedStrategies.parseProcessMessage ?? parseAgentMessage;\n const resourceLinkSchemes = mergedStrategies.markdownResourceLinkSchemes;\n\n // 初始化完成时滚动到底部\n useEffect(() => {\n if (!initialized) return;\n if (!messages.length) return;\n if (prevInitializedRef.current) return;\n prevInitializedRef.current = true;\n\n const el = listRef.current;\n if (!el) return;\n\n // 用 MutationObserver 监听 DOM 子树变化,等内容渲染稳定后置底\n // 每次 DOM 变化都重新计时,确保所有异步渲染(Markdown、代码高亮、思维链等)完成后再滚动\n let stableTimer: ReturnType<typeof setTimeout>;\n const doScroll = () => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"auto\" });\n };\n\n const observer = new MutationObserver(() => {\n clearTimeout(stableTimer);\n stableTimer = setTimeout(doScroll, 80);\n });\n\n observer.observe(el, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n // 立即执行一次,处理内容已经就绪的情况\n doScroll();\n // 兜底:最多等 500ms 后强制滚动并断开观察\n const maxTimer = setTimeout(() => {\n observer.disconnect();\n doScroll();\n }, 500);\n\n return () => {\n clearTimeout(stableTimer);\n clearTimeout(maxTimer);\n observer.disconnect();\n };\n }, [initialized, messages]);\n\n // 会话切换时重置滚动状态,允许重新触发初始化置底\n useEffect(() => {\n if (sessionId === undefined) return; // 未传 sessionId 不处理\n if (prevSessionIdRef.current === sessionId) return; // 同一会话不处理\n prevSessionIdRef.current = sessionId;\n prevInitializedRef.current = false;\n userHasScrolledRef.current = false;\n historyRequestControllerRef.current?.abort();\n historyRefreshControllerRef.current?.abort();\n prependAnchorRef.current = null;\n historyRequestRef.current = false;\n historyRequestIdRef.current += 1;\n historyRefreshRef.current = false;\n historyRefreshIdRef.current += 1;\n if (prependExpiryRef.current) clearTimeout(prependExpiryRef.current);\n prependExpiryRef.current = null;\n }, [sessionId]);\n\n useEffect(() => () => {\n historyRequestControllerRef.current?.abort();\n historyRefreshControllerRef.current?.abort();\n if (prependExpiryRef.current) clearTimeout(prependExpiryRef.current);\n }, []);\n\n // 新增用户消息代表一次主动发送,应无条件恢复跟随并置底。\n // 之后的流式回复继续沿用“用户未主动上滚时跟随”的规则。\n useEffect(() => {\n const previousCount = previousMessageCountRef.current;\n previousMessageCountRef.current = messages.length;\n if (skipNextAutoScrollRef.current || prependAnchorRef.current) {\n skipNextAutoScrollRef.current = false;\n return;\n }\n const hasNewUserMessage = messages\n .slice(previousCount)\n .some((message) => message.role === \"user\");\n if (hasNewUserMessage) {\n userHasScrolledRef.current = false;\n }\n if (userHasScrolledRef.current) return;\n if (!messages.length) return;\n const el = listRef.current;\n if (el) {\n el.scrollTop = el.scrollHeight;\n }\n }, [loading, messages]);\n\n // loading 结束时(流式输出完成),操作栏(metaFooter)会渲染出来增加高度,\n // 需要延迟滚动到底部,确保操作栏可见\n const prevLoadingRef = useRef(loading);\n useEffect(() => {\n const wasLoading = prevLoadingRef.current;\n prevLoadingRef.current = loading;\n\n if (!wasLoading || loading) return; // 只在 loading true → false 时触发\n if (userHasScrolledRef.current) return;\n if (!messages.length) return;\n\n // 延迟等待操作栏 DOM 渲染完成后再滚动\n const timer = setTimeout(() => {\n const el = listRef.current;\n if (el) {\n el.scrollTop = el.scrollHeight;\n }\n }, 50);\n return () => clearTimeout(timer);\n }, [loading, messages]);\n\n // 处理滚动事件\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n\n const isAtBottom =\n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <=\n scrollThreshold;\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n const pagination = historyRef.current;\n if (pagination?.hasMore) {\n const threshold = pagination.threshold ?? 80;\n const atLoadEdge =\n (pagination.direction ?? \"top\") === \"top\"\n ? currentTop <= threshold\n : el.scrollHeight - currentTop - el.clientHeight <= threshold;\n if (atLoadEdge) loadMoreHistory();\n }\n\n lastScrollTopRef.current = currentTop;\n }, [loadMoreHistory]);\n\n useEffect(() => {\n const listElement = listRef.current;\n if (!listElement) return;\n\n listElement.addEventListener(\"scroll\", handleScroll);\n return () => {\n listElement.removeEventListener(\"scroll\", handleScroll);\n };\n }, [handleScroll]);\n\n // 首屏内容不足一屏时没有滚动事件,继续按需加载直到内容可滚动或数据耗尽。\n useEffect(() => {\n if (!initialized || !history?.hasMore || history.loading) return;\n const el = listRef.current;\n if (el && el.scrollHeight <= el.clientHeight + 1) loadMoreHistory();\n }, [history?.hasMore, history?.loading, initialized, loadMoreHistory, messages]);\n\n // ========== 消息分组逻辑 ==========\n const chatGroups = useMemo(() => {\n if (!enableGrouping) {\n // 不分组,每条消息独立\n return messages.map((msg) => ({\n id: msg.id,\n role: msg.role,\n msgs: [msg],\n invocationId: msg.invocationId,\n allFiles: msg.fileData || [],\n isLike: msg.isLike ?? 0,\n }));\n }\n\n const groups: ChatGroup[] = [];\n messages.forEach((msg) => {\n // 过滤 followup 消息\n if ((msg as any).role === \"followup\") return;\n\n const isRealUserQuery =\n msg.role === \"user\" && !msg.functionResponse && !msg.functionCall;\n const lastGroup = groups[groups.length - 1];\n const isLastGroupAgent = lastGroup?.role === \"bot\";\n\n if (isLastGroupAgent && !isRealUserQuery) {\n // 合并到上一个 bot 分组\n lastGroup.msgs.push(msg);\n if (msg.invocationId) lastGroup.invocationId = msg.invocationId;\n // 更新 isLike: 取最新的非0值,或保持当前值\n if (msg.isLike && msg.isLike !== 0) {\n lastGroup.isLike = msg.isLike;\n }\n } else {\n // 创建新分组\n groups.push({\n id: msg.id || `group-${groups.length}`,\n role: isRealUserQuery ? \"user\" : \"bot\",\n msgs: [msg],\n invocationId: msg.invocationId,\n allFiles: [],\n isLike: msg.isLike ?? 0,\n });\n }\n });\n\n // 合并文件\n groups.forEach((g) => {\n g.allFiles = g.msgs.reduce(\n (acc, m) => [...acc, ...(m.fileData || [])],\n [] as any[],\n );\n });\n\n return groups;\n }, [messages, enableGrouping]);\n\n // ========== 渲染 Bot 消息组 ==========\n const renderBotGroup = useCallback(\n (\n group: ChatGroup,\n isLastGroup: boolean,\n renderFunctionCall?: XAdkChatbotProps[\"renderFunctionCall\"],\n ) => {\n const { msgs, allFiles } = group;\n\n if (!enableProcessParsing) {\n // 不解析 process,简单渲染\n return (\n <div key={group.id} className={styles.botMsg} data-message-id={group.id}>\n {msgs.map((msg, i) => {\n if (msg.text) {\n return (\n <MarkdownRender\n key={`${msg.id}-${i}`}\n text={msg.text}\n resourceLinkSchemes={resourceLinkSchemes}\n onFileClick={onFileClick}\n onResourceLinkClick={onResourceLinkClick}\n renderResourceLink={renderResourceLink}\n markdownExtensions={mergedMarkdownExtensions}\n />\n );\n }\n if (msg.functionCall) {\n return (\n renderFunctionCall?.(msg) ?? (\n <FunctionCallRender\n key={`${msg.id}-${i}`}\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n kind={resolveToolKind(msg.functionCall?.name, msg)}\n renderApproval={mergedStrategies.renderApproval}\n renderHandoff={mergedStrategies.renderHandoff}\n />\n )\n );\n }\n return null;\n })}\n </div>\n );\n }\n\n // ========== 解析 Process 内容 ==========\n\n // 1. 合并工具调用\n const mergedToolMap = new Map<string, IMessage>();\n msgs.forEach((msg) => {\n if (msg.functionCall) {\n const callId = msg.functionCall.id || \"\";\n if (!mergedToolMap.has(callId)) {\n mergedToolMap.set(callId, { ...msg });\n } else {\n mergedToolMap.set(callId, {\n ...(mergedToolMap.get(callId) ?? {}),\n ...msg,\n });\n }\n } else if (msg.functionResponse) {\n const callId = msg.functionResponse.id || \"\";\n if (mergedToolMap.has(callId)) {\n const tool = mergedToolMap.get(callId);\n if (tool) tool.functionResponse = msg.functionResponse;\n } else {\n mergedToolMap.set(callId, {\n ...msg,\n functionCall: {\n id: callId,\n name: msg.functionResponse.name || \"Unknown\",\n args: {},\n },\n });\n }\n }\n });\n\n // 2. 解析文本消息中的 process 内容\n type RenderNode =\n | { type: \"text\"; content: string; key: string }\n | { type: \"process\"; items: ThoughtChainItemType[]; key: string };\n\n const nodes: RenderNode[] = [];\n let currentProcessItems: ThoughtChainItemType[] = [];\n const processedToolIds = new Set<string>();\n\n const flushProcessItems = () => {\n if (currentProcessItems.length > 0) {\n nodes.push({\n type: \"process\",\n items: [...currentProcessItems],\n key: `process-${nodes.length}`,\n });\n currentProcessItems = [];\n }\n };\n\n msgs.forEach((msg) => {\n // 处理工具调用\n if (msg.functionCall) {\n const callId = msg.functionCall.id || \"\";\n if (!processedToolIds.has(callId)) {\n const mergedMsg = mergedToolMap.get(callId);\n if (mergedMsg) {\n currentProcessItems.push({\n type: \"tool\",\n key: `tool-${callId}`,\n content: \"\",\n msg: mergedMsg,\n });\n processedToolIds.add(callId);\n }\n }\n }\n // 处理文本消息\n else if (msg.text && !msg.functionResponse) {\n const parts = parseProcessMessage(msg.text, parseOptions as any);\n\n parts.forEach((part, partIdx) => {\n // process 内容放入 currentProcessItems\n if (\n [\n \"planning\",\n \"replanning\",\n \"reasoning\",\n \"action_log\",\n \"process_text\",\n ].includes(part.type)\n ) {\n const titleMap: Record<string, string> = {\n planning: \"任务规划\",\n replanning: \"重新规划\",\n reasoning: \"推理分析\",\n action_log: \"行动记录\",\n process_text: \"过程分析\",\n };\n\n currentProcessItems.push({\n type: \"text\",\n key: `${msg.id}-${partIdx}`,\n content: part.content,\n title: titleMap[part.type] || \"分析\",\n });\n }\n // 普通文本内容\n else {\n flushProcessItems();\n if (part.content.trim()) {\n const lastNode = nodes[nodes.length - 1];\n if (lastNode?.type === \"text\") {\n // 合并到上一个文本节点\n lastNode.content += \"\\n\\n\" + part.content;\n } else {\n nodes.push({\n type: \"text\",\n content: part.content,\n key: `text-${msg.id}-${partIdx}`,\n });\n }\n }\n }\n });\n }\n });\n\n // 最后flush一次\n flushProcessItems();\n\n // 3. 准备操作栏数据\n const fullTextToCopy = msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n const lastBotMsg = msgs[msgs.length - 1];\n // const hasProcess = nodes.some((n) => n.type === \"process\");\n const isGroupLoading = loading && isLastGroup;\n const actionProps = { message: group, isLastBotMsg: isLastGroup };\n const actionExtraNode = actionsExtra?.(actionProps);\n\n // 4. 渲染\n // 确认 [规划, 工具调用, 中途说明, 工具调用, 最终回答]\n const firstProcessIdx = nodes.findIndex((n) => n.type === \"process\");\n const lastProcessIdx = nodes.findLastIndex((n) => n.type === \"process\");\n const processItems: ThoughtChainItemType[] = nodes\n .slice(firstProcessIdx, lastProcessIdx + 1)\n .flatMap((node) =>\n node.type === \"process\"\n ? node.items\n : [\n {\n type: \"text\",\n key: node.key,\n title: \"过程分析\",\n content: node.content,\n },\n ],\n );\n const activeItem = processItems[processItems.length - 1];\n const activeStep =\n activeItem?.type === \"tool\"\n ? String(\n activeItem.msg?.functionCall?.args?.agentName ||\n activeItem.msg?.functionCall?.args?.componentName ||\n activeItem.msg?.functionCall?.name ||\n \"\",\n )\n : typeof activeItem?.title === \"string\"\n ? activeItem.title\n : \"\";\n return (\n <div key={group.id} className={styles.botMsg} data-message-id={group.id}>\n {nodes.map((node, idx) => {\n if (\n node.type === \"text\" &&\n idx > firstProcessIdx &&\n idx < lastProcessIdx\n ) {\n return null;\n }\n if (node.type === \"process\") {\n // 同一轮回复中的过程节点共用一个容器,保留节点自身的执行顺序。\n if (idx !== firstProcessIdx) {\n return null;\n }\n return (\n <XAdkThoughtChain\n key={node.key}\n collapsible\n loading={isGroupLoading}\n title=\"已完成\"\n activeStep={activeStep}\n items={processItems}\n showFnCallDetail={showFnCallDetail}\n onConfirm={onConfirm}\n defaultOpen={isGroupLoading}\n renderFunctionCall={renderFunctionCall}\n toolKindResolver={(name) => resolveToolKind(name)}\n strategies={mergedStrategies}\n />\n );\n }\n\n // 文本节点\n // const showBadge =\n // hasProcess && nodes.findIndex((n) => n.type === \"text\") === idx;\n return (\n <div key={node.key}>\n {/* {showBadge && (\n <div className={styles.successBadge}>\n <CheckCircleFilled /> 已完成所有规划任务\n </div>\n )} */}\n <MarkdownRender\n text={node.content}\n resourceLinkSchemes={resourceLinkSchemes}\n onFileClick={onFileClick}\n onResourceLinkClick={onResourceLinkClick}\n renderResourceLink={renderResourceLink}\n markdownExtensions={mergedMarkdownExtensions}\n />\n </div>\n );\n })}\n\n {/* 文件展示 */}\n {allFiles.length > 0 && (\n <div className={styles.fileSection}>\n <div className={styles.fileHeader}>\n <span>生成文件 ({allFiles.length})</span>\n </div>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"8px\" }}>\n {allFiles.map((file, index) => (\n <FileGallery\n key={index}\n file={file}\n onClick={onFileClick}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* 操作栏 */}\n {!isGroupLoading &&\n (actions ||\n showRetry ||\n showCopy ||\n showLog ||\n actionExtraNode) && (\n <div className={styles.metaFooter}>\n {actions ? (\n actions(actionProps)\n ) : (\n <Flex gap={16} className={styles.actionIcons}>\n {showRetry && isLastGroup && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined onClick={onRetry} />\n </Tooltip>\n )}\n {showCopy && (\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n onClick={() => {\n copy(fullTextToCopy);\n antdMessage.success(\"复制成功\");\n onCopy?.(fullTextToCopy);\n }}\n />\n </Tooltip>\n )}\n {showLog && lastBotMsg?.invocationId && (\n <Tooltip title=\"查看日志\">\n <InfoCircleOutlined\n onClick={() =>\n onShowLog?.(\n lastBotMsg.invocationId!,\n lastBotMsg.timestamp,\n )\n }\n />\n </Tooltip>\n )}\n </Flex>\n )}\n {actionExtraNode}\n </div>\n )}\n </div>\n );\n },\n [\n enableProcessParsing,\n parseOptions,\n parseProcessMessage,\n showFnCallDetail,\n onConfirm,\n loading,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n actionsExtra,\n onFileClick,\n onResourceLinkClick,\n renderResourceLink,\n mergedMarkdownExtensions,\n resourceLinkSchemes,\n styles,\n resolveToolKind,\n mergedStrategies,\n ],\n );\n\n // ========== 渲染用户消息组 ==========\n const renderUserGroup = useCallback(\n (group: ChatGroup, nextGroup?: ChatGroup) => {\n const compactWithNextText =\n group.msgs.some((message) => Boolean(message.fileData?.length)) &&\n group.msgs.every((message) => !message.text?.trim()) &&\n nextGroup?.role === \"user\" &&\n nextGroup.msgs.some((message) => Boolean(message.text?.trim()));\n return (\n <div\n key={group.id}\n className={styles.userMsg}\n data-message-id={group.id}\n style={compactWithNextText ? { marginBottom: 8 } : undefined}\n >\n {group.msgs.map((m, i) => (\n <div key={m.id || i} className={styles.userContainer}>\n {/* 文件展示 */}\n {m.fileData && m.fileData.length > 0 && (\n <>\n {m.fileData.map((file, index) => (\n <FileGallery\n key={index}\n file={file}\n align=\"left\"\n style={{\n marginBottom:\n compactWithNextText &&\n i === group.msgs.length - 1 &&\n index === m.fileData!.length - 1\n ? 0\n : 16,\n }}\n onClick={onFileClick}\n />\n ))}\n </>\n )}\n {/* 文本展示 */}\n {m.text && (\n <div\n className={styles.card}\n data-xadk-user-card\n onCopy={(event) => {\n // 富文本标签的可见文案不含协议;复制用户消息时保留原始 Markdown,\n // 使内容粘贴回 XAdkSender 后能重新还原成 Mention。\n // 若有选区则只复制选区内容(变量模块取完整文案),否则复制全量。\n event.preventDefault();\n const selected = getSelectionText(event.currentTarget);\n event.clipboardData.setData(\n \"text/plain\",\n selected || m.text || \"\",\n );\n }}\n >\n <MarkdownRender\n text={m.text}\n compact\n bareUrlAsText\n highlightPlainMentions\n resourceLinkSchemes={resourceLinkSchemes}\n onFileClick={onFileClick}\n onResourceLinkClick={onResourceLinkClick}\n renderResourceLink={renderResourceLink}\n markdownExtensions={mergedMarkdownExtensions}\n />\n </div>\n )}\n </div>\n ))}\n {/* 一轮用户消息可能拆成文件和文本多个片段,操作栏只放在整组末尾。 */}\n {showUserActions && group.msgs.some((message) => Boolean(message.text?.trim())) && (\n <div className={`x-user-actions ${styles.userActions}`}>\n {userActions?.({ message: group }) ?? (\n <>\n <span className={styles.userTime}>\n {formatTimestamp(group.msgs[group.msgs.length - 1]?.timestamp)}\n </span>\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n className={styles.userActionIcon}\n onClick={() => {\n const container = document.querySelector(\n `[data-message-id=\"${group.id}\"]`,\n );\n const selected = getSelectionText(container as HTMLElement | null);\n const fullText = group.msgs.map((message) => message.text || \"\").join(\"\");\n copy(selected || fullText);\n antdMessage.success(\"复制成功\");\n }}\n />\n </Tooltip>\n </>\n )}\n </div>\n )}\n </div>\n );\n },\n [\n styles,\n onFileClick,\n onResourceLinkClick,\n renderResourceLink,\n mergedMarkdownExtensions,\n resourceLinkSchemes,\n showUserActions,\n userActions,\n ],\n );\n\n // ========== 空状态 ==========\n\n // ========== 渲染建议问题 ==========\n const renderSuggestions = () => {\n if (!suggestions || suggestions.length === 0) return null;\n\n return (\n <div className={styles.suggestionWrapper}>\n {suggestions.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPlacement=\"end\"\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n style={{\n whiteSpace: \"normal\",\n height: \"auto\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n padding: \"4px 15px\",\n lineHeight: \"1.5\",\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n );\n };\n\n // 空状态判断\n const isEmpty =\n messages.length === 0 &&\n !prologue &&\n (!suggestions || suggestions.length === 0);\n\n const historyControls = history && (history.hasMore || history.loading || history.onRefresh) && (\n <div className={styles.historyControls}>\n {history.onRefresh && (\n <button type=\"button\" onClick={refreshHistory} disabled={history.refreshing}>\n {history.refreshing ? \"正在刷新...\" : \"刷新\"}\n </button>\n )}\n {(history.hasMore || history.loading) && (\n <button type=\"button\" onClick={loadMoreHistory} disabled={history.loading}>\n {history.loading ? \"正在加载...\" : \"加载更多\"}\n </button>\n )}\n </div>\n );\n\n return (\n <div className={clsx(styles.wrapper, className)} style={style}>\n {/* 空状态 */}\n {isEmpty && empty && (\n <div className={styles.emptyWrapper}>\n {typeof empty === \"function\" ? empty() : empty}\n </div>\n )}\n\n <div\n className={styles.list}\n ref={listRef}\n style={isEmpty ? { flex: 0 } : undefined}\n >\n {(history?.direction ?? \"top\") === \"top\" && historyControls}\n {/* 开场白 */}\n {prologue && (\n <div className={styles.prologue}>\n <MarkdownRender\n text={prologue}\n resourceLinkSchemes={resourceLinkSchemes}\n onFileClick={onFileClick}\n onResourceLinkClick={onResourceLinkClick}\n renderResourceLink={renderResourceLink}\n markdownExtensions={mergedMarkdownExtensions}\n />\n </div>\n )}\n\n {/* 消息列表 */}\n {chatGroups.map((group, idx) => {\n const context = {\n group,\n index: idx,\n previousGroup: chatGroups[idx - 1],\n nextGroup: chatGroups[idx + 1],\n };\n const defaultNode =\n group.role === \"user\"\n ? renderUserGroup(group, chatGroups[idx + 1])\n : renderBotGroup(group, idx === chatGroups.length - 1, renderFunctionCall);\n const customNode = renderGroup?.({ ...context, defaultNode });\n return (\n <Fragment key={group.id}>\n {renderBeforeGroup?.(context)}\n {customNode === undefined ? defaultNode : customNode}\n {renderAfterGroup?.(context)}\n </Fragment>\n );\n })}\n\n {history?.direction === \"bottom\" && historyControls}\n\n {/* 建议问题 */}\n {renderSuggestions()}\n\n <div ref={messagesEndRef} />\n </div>\n </div>\n );\n },\n);\n\nXAdkChatbot.displayName = \"XAdkChatbot\";\n\nexport default XAdkChatbot;\n"],"mappings":"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"}
@@ -1,11 +1,15 @@
1
1
  export declare const useStyles: () => {
2
2
  wrapper: string;
3
3
  list: string;
4
+ historyControls: string;
4
5
  prologue: string;
5
6
  suggestion: string;
6
7
  suggestContent: string;
7
8
  userMsg: string;
8
9
  userContainer: string;
10
+ userActions: string;
11
+ userTime: string;
12
+ userActionIcon: string;
9
13
  card: string;
10
14
  botMsg: string;
11
15
  emptyWrapper: string;
@@ -1,37 +1,41 @@
1
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;
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;
3
3
  import { css } from "@emotion/css";
4
4
  import { withBasicStyles } from "../../styles/common";
5
5
  export var useStyles = withBasicStyles(function () {
6
6
  return {
7
7
  wrapper: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n padding: 0 16px;\n /* \u4F5C\u4E3A flex \u5B50\u9879\u65F6\u5FC5\u987B\u5141\u8BB8\u6536\u7F29\uFF0C\u6D88\u606F\u6EDA\u52A8\u7531\u5185\u90E8 list \u627F\u62C5\u3002 */\n min-height: 0;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n "]))),
8
8
  list: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n flex: 1;\n min-height: 0;\n margin-top: 16px;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n "]))),
9
- prologue: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
10
- suggestion: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
11
- suggestContent: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n "]))),
12
- userMsg: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: flex-end;\n width: 100%;\n min-width: 0;\n margin-bottom: 24px;\n "]))),
13
- userContainer: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: flex-end;\n min-width: 0;\n max-width: 100%;\n "]))),
14
- card: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n display: inline-block;\n box-sizing: border-box;\n min-width: 0;\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n overflow-wrap: anywhere;\n word-break: break-word;\n "]))),
15
- botMsg: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
16
- emptyWrapper: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 200px;\n "]))),
9
+ historyControls: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: center;\n gap: 12px;\n padding: 8px 0;\n color: #7b8494;\n font-size: 12px;\n\n button {\n border: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 4px;\n }\n\n button:hover:not(:disabled) {\n background: #f3f5f9;\n }\n\n button:disabled {\n cursor: default;\n opacity: 0.7;\n }\n "]))),
10
+ prologue: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
11
+ suggestion: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
12
+ suggestContent: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n "]))),
13
+ userMsg: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n width: 100%;\n min-width: 0;\n margin-bottom: 12px;\n\n &:hover .x-user-actions {\n opacity: 1;\n pointer-events: auto;\n }\n "]))),
14
+ userContainer: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: flex-end;\n min-width: 0;\n max-width: 100%;\n\n "]))),
15
+ userActions: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n &.x-user-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n opacity: 0;\n transition: opacity 0.2s;\n pointer-events: none;\n }\n "]))),
16
+ userTime: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n "]))),
17
+ userActionIcon: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n cursor: pointer;\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n "]))),
18
+ card: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n display: inline-block;\n box-sizing: border-box;\n min-width: 0;\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n overflow-wrap: anywhere;\n word-break: break-word;\n "]))),
19
+ botMsg: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
20
+ emptyWrapper: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 200px;\n "]))),
17
21
  // 新增样式
18
- welcomeWrapper: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n "]))),
19
- welcomeIcon: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n "]))),
20
- welcomeTitle: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n "]))),
21
- welcomeDesc: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n "]))),
22
- suggestionWrapper: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n margin-top: 16px;\n "]))),
23
- successBadge: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n "]))),
24
- fileSection: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n margin: 12px 0;\n "]))),
25
- fileHeader: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n "]))),
26
- metaFooter: css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n "]))),
27
- actionIcons: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n "]))),
28
- fnCall: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n "]))),
29
- confirm: css(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n "]))),
30
- footer: css(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n "]))),
31
- sender: css(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n "]))),
32
- senderWrap: css(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n "]))),
33
- tip: css(_templateObject26 || (_templateObject26 = _taggedTemplateLiteral(["\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n "]))),
34
- input: css(_templateObject27 || (_templateObject27 = _taggedTemplateLiteral(["\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n "])))
22
+ welcomeWrapper: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n "]))),
23
+ welcomeIcon: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n "]))),
24
+ welcomeTitle: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n "]))),
25
+ welcomeDesc: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n "]))),
26
+ suggestionWrapper: css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n margin-top: 16px;\n "]))),
27
+ successBadge: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n "]))),
28
+ fileSection: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n margin: 12px 0;\n "]))),
29
+ fileHeader: css(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n "]))),
30
+ metaFooter: css(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n "]))),
31
+ actionIcons: css(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n "]))),
32
+ fnCall: css(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n "]))),
33
+ confirm: css(_templateObject26 || (_templateObject26 = _taggedTemplateLiteral(["\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n "]))),
34
+ footer: css(_templateObject27 || (_templateObject27 = _taggedTemplateLiteral(["\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n "]))),
35
+ sender: css(_templateObject28 || (_templateObject28 = _taggedTemplateLiteral(["\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n "]))),
36
+ senderWrap: css(_templateObject29 || (_templateObject29 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n "]))),
37
+ tip: css(_templateObject30 || (_templateObject30 = _taggedTemplateLiteral(["\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n "]))),
38
+ input: css(_templateObject31 || (_templateObject31 = _taggedTemplateLiteral(["\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n "])))
35
39
  };
36
40
  });
37
41
  export default useStyles;
@@ -1 +1 @@
1
- {"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","list","_templateObject2","prologue","_templateObject3","suggestion","_templateObject4","suggestContent","_templateObject5","userMsg","_templateObject6","userContainer","_templateObject7","card","_templateObject8","botMsg","_templateObject9","emptyWrapper","_templateObject10","welcomeWrapper","_templateObject11","welcomeIcon","_templateObject12","welcomeTitle","_templateObject13","welcomeDesc","_templateObject14","suggestionWrapper","_templateObject15","successBadge","_templateObject16","fileSection","_templateObject17","fileHeader","_templateObject18","metaFooter","_templateObject19","actionIcons","_templateObject20","fnCall","_templateObject21","confirm","_templateObject22","footer","_templateObject23","sender","_templateObject24","senderWrap","_templateObject25","tip","_templateObject26","input","_templateObject27"],"sources":["../../../../src/components/XAdkChatbot/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n padding: 0 16px;\n /* 作为 flex 子项时必须允许收缩,消息滚动由内部 list 承担。 */\n min-height: 0;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n `,\n\n list: css`\n flex: 1;\n min-height: 0;\n margin-top: 16px;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n `,\n\n prologue: css`\n margin-bottom: 12px;\n `,\n\n suggestion: css`\n margin-bottom: 12px;\n `,\n\n suggestContent: css`\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n `,\n\n userMsg: css`\n display: flex;\n justify-content: flex-end;\n width: 100%;\n min-width: 0;\n margin-bottom: 24px;\n `,\n\n userContainer: css`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: flex-end;\n min-width: 0;\n max-width: 100%;\n `,\n\n card: css`\n display: inline-block;\n box-sizing: border-box;\n min-width: 0;\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n overflow-wrap: anywhere;\n word-break: break-word;\n `,\n\n botMsg: css`\n margin-bottom: 12px;\n `,\n\n emptyWrapper: css`\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 200px;\n `,\n\n // 新增样式\n welcomeWrapper: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n `,\n\n welcomeIcon: css`\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n `,\n\n welcomeTitle: css`\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n `,\n\n welcomeDesc: css`\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n `,\n\n suggestionWrapper: css`\n margin-top: 16px;\n `,\n\n successBadge: css`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n `,\n\n fileSection: css`\n margin: 12px 0;\n `,\n\n fileHeader: css`\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n `,\n\n metaFooter: css`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n `,\n\n actionIcons: css`\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n `,\n\n footer: css`\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n `,\n\n sender: css`\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n `,\n\n senderWrap: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n `,\n\n tip: css`\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n `,\n\n input: css`\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,g7BA8BX;IAEDC,IAAI,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,4RAaR;IAEDG,QAAQ,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sCAEZ;IAEDK,UAAU,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,sCAEd;IAEDO,cAAc,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,gGAIlB;IAEDS,OAAO,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,+HAMX;IAEDW,aAAa,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,kKAOjB;IAEDa,IAAI,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,kRAWR;IAEDe,MAAM,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,sCAEV;IAEDiB,YAAY,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,8HAMhB;IAED;IACAmB,cAAc,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,yIAMlB;IAEDqB,WAAW,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,qGAKf;IAEDuB,YAAY,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,mHAKhB;IAEDyB,WAAW,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,6FAIf;IAED2B,iBAAiB,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,mCAErB;IAED6B,YAAY,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,gQAWhB;IAED+B,WAAW,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,iCAEf;IAEDiC,UAAU,EAAEtC,GAAG,CAAAuC,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,4FAId;IAEDmC,UAAU,EAAExC,GAAG,CAAAyC,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,mLAQd;IAEDqC,WAAW,EAAE1C,GAAG,CAAA2C,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,kLAWf;IAEDuC,MAAM,EAAE5C,GAAG,CAAA6C,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,yMASV;IAEDyC,OAAO,EAAE9C,GAAG,CAAA+C,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,0FAIX;IAED2C,MAAM,EAAEhD,GAAG,CAAAiD,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA,sJAGV;IAED6C,MAAM,EAAElD,GAAG,CAAAmD,iBAAA,KAAAA,iBAAA,GAAA9C,sBAAA,kQAUV;IAED+C,UAAU,EAAEpD,GAAG,CAAAqD,iBAAA,KAAAA,iBAAA,GAAAhD,sBAAA,8GAKd;IAEDiD,GAAG,EAAEtD,GAAG,CAAAuD,iBAAA,KAAAA,iBAAA,GAAAlD,sBAAA,8GAKP;IAEDmD,KAAK,EAAExD,GAAG,CAAAyD,iBAAA,KAAAA,iBAAA,GAAApD,sBAAA;EAYZ,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","list","_templateObject2","historyControls","_templateObject3","prologue","_templateObject4","suggestion","_templateObject5","suggestContent","_templateObject6","userMsg","_templateObject7","userContainer","_templateObject8","userActions","_templateObject9","userTime","_templateObject10","userActionIcon","_templateObject11","card","_templateObject12","botMsg","_templateObject13","emptyWrapper","_templateObject14","welcomeWrapper","_templateObject15","welcomeIcon","_templateObject16","welcomeTitle","_templateObject17","welcomeDesc","_templateObject18","suggestionWrapper","_templateObject19","successBadge","_templateObject20","fileSection","_templateObject21","fileHeader","_templateObject22","metaFooter","_templateObject23","actionIcons","_templateObject24","fnCall","_templateObject25","confirm","_templateObject26","footer","_templateObject27","sender","_templateObject28","senderWrap","_templateObject29","tip","_templateObject30","input","_templateObject31"],"sources":["../../../../src/components/XAdkChatbot/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n padding: 0 16px;\n /* 作为 flex 子项时必须允许收缩,消息滚动由内部 list 承担。 */\n min-height: 0;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n `,\n\n list: css`\n flex: 1;\n min-height: 0;\n margin-top: 16px;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n `,\n\n historyControls: css`\n display: flex;\n justify-content: center;\n gap: 12px;\n padding: 8px 0;\n color: #7b8494;\n font-size: 12px;\n\n button {\n border: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 4px;\n }\n\n button:hover:not(:disabled) {\n background: #f3f5f9;\n }\n\n button:disabled {\n cursor: default;\n opacity: 0.7;\n }\n `,\n\n prologue: css`\n margin-bottom: 12px;\n `,\n\n suggestion: css`\n margin-bottom: 12px;\n `,\n\n suggestContent: css`\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n `,\n\n userMsg: css`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n width: 100%;\n min-width: 0;\n margin-bottom: 12px;\n\n &:hover .x-user-actions {\n opacity: 1;\n pointer-events: auto;\n }\n `,\n\n userContainer: css`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: flex-end;\n min-width: 0;\n max-width: 100%;\n\n `,\n\n userActions: css`\n &.x-user-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n opacity: 0;\n transition: opacity 0.2s;\n pointer-events: none;\n }\n `,\n\n userTime: css`\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n `,\n\n userActionIcon: css`\n cursor: pointer;\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n `,\n\n card: css`\n display: inline-block;\n box-sizing: border-box;\n min-width: 0;\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n overflow-wrap: anywhere;\n word-break: break-word;\n `,\n\n botMsg: css`\n margin-bottom: 12px;\n `,\n\n emptyWrapper: css`\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 200px;\n `,\n\n // 新增样式\n welcomeWrapper: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n `,\n\n welcomeIcon: css`\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n `,\n\n welcomeTitle: css`\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n `,\n\n welcomeDesc: css`\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n `,\n\n suggestionWrapper: css`\n margin-top: 16px;\n `,\n\n successBadge: css`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n `,\n\n fileSection: css`\n margin: 12px 0;\n `,\n\n fileHeader: css`\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n `,\n\n metaFooter: css`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n `,\n\n actionIcons: css`\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n `,\n\n footer: css`\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n `,\n\n sender: css`\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n `,\n\n senderWrap: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n `,\n\n tip: css`\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n `,\n\n input: css`\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 将时间戳格式化为 "x月y日 mm:ss" 格式
3
+ *
4
+ * @param ts 毫秒级时间戳
5
+ * @returns 如 "10月14日 09:30",无时间戳时返回 null
6
+ */
7
+ export declare function formatTimestamp(ts?: number): string | null;
8
+ /**
9
+ * 从当前 DOM 选区提取文本,遇到变量模块(带 data-resource-markdown 或
10
+ * data-xadk-resource-link 的元素)时保留完整模块文案,而非只取选中的片段。
11
+ *
12
+ * 无选区或选区不在 container 内时返回 null。
13
+ */
14
+ export declare function getSelectionText(container?: HTMLElement | null): string | null;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * 将时间戳格式化为 "x月y日 mm:ss" 格式
3
+ *
4
+ * @param ts 毫秒级时间戳
5
+ * @returns 如 "10月14日 09:30",无时间戳时返回 null
6
+ */
7
+ export function formatTimestamp(ts) {
8
+ if (!ts) return null;
9
+ var d = new Date(ts);
10
+ var month = d.getMonth() + 1;
11
+ var day = d.getDate();
12
+ var mm = String(d.getMinutes()).padStart(2, "0");
13
+ var ss = String(d.getSeconds()).padStart(2, "0");
14
+ return "".concat(month, "\u6708").concat(day, "\u65E5 ").concat(mm, ":").concat(ss);
15
+ }
16
+
17
+ /**
18
+ * 从当前 DOM 选区提取文本,遇到变量模块(带 data-resource-markdown 或
19
+ * data-xadk-resource-link 的元素)时保留完整模块文案,而非只取选中的片段。
20
+ *
21
+ * 无选区或选区不在 container 内时返回 null。
22
+ */
23
+ export function getSelectionText(container) {
24
+ var sel = window.getSelection();
25
+ if (!sel || sel.isCollapsed || sel.rangeCount === 0) return null;
26
+ var range = sel.getRangeAt(0);
27
+ // 选区不在容器内时忽略
28
+ if (container && !container.contains(range.commonAncestorContainer)) {
29
+ return null;
30
+ }
31
+ var fragment = range.cloneContents();
32
+ var result = "";
33
+ fragment.childNodes.forEach(function (node) {
34
+ result += extractNodeText(node);
35
+ });
36
+ return result || null;
37
+ }
38
+
39
+ /** 递归提取节点文本,变量模块取完整文案 */
40
+ function extractNodeText(node) {
41
+ if (node.nodeType === Node.TEXT_NODE) {
42
+ return node.textContent || "";
43
+ }
44
+ if (node.nodeType === Node.ELEMENT_NODE) {
45
+ var _el$getAttribute, _el$getAttribute2;
46
+ var el = node;
47
+ // 优先用 data-resource-markdown(带协议的完整 markdown)
48
+ var md = (_el$getAttribute = el.getAttribute) === null || _el$getAttribute === void 0 ? void 0 : _el$getAttribute.call(el, "data-resource-markdown");
49
+ if (md) return md;
50
+
51
+ // 变量模块(plain-mention 等):取 aria-label 或完整文本
52
+ if ((_el$getAttribute2 = el.getAttribute) !== null && _el$getAttribute2 !== void 0 && _el$getAttribute2.call(el, "data-xadk-resource-link")) {
53
+ var label = el.getAttribute("aria-label");
54
+ if (label) return "@".concat(label);
55
+ }
56
+
57
+ // 递归子节点
58
+ var text = "";
59
+ el.childNodes.forEach(function (child) {
60
+ text += extractNodeText(child);
61
+ });
62
+ return text;
63
+ }
64
+ return "";
65
+ }
66
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["formatTimestamp","ts","d","Date","month","getMonth","day","getDate","mm","String","getMinutes","padStart","ss","getSeconds","concat","getSelectionText","container","sel","window","getSelection","isCollapsed","rangeCount","range","getRangeAt","contains","commonAncestorContainer","fragment","cloneContents","result","childNodes","forEach","node","extractNodeText","nodeType","Node","TEXT_NODE","textContent","ELEMENT_NODE","_el$getAttribute","_el$getAttribute2","el","md","getAttribute","call","label","text","child"],"sources":["../../../../src/components/XAdkChatbot/utils.ts"],"sourcesContent":["/**\n * 将时间戳格式化为 \"x月y日 mm:ss\" 格式\n *\n * @param ts 毫秒级时间戳\n * @returns 如 \"10月14日 09:30\",无时间戳时返回 null\n */\nexport function formatTimestamp(ts?: number): string | null {\n if (!ts) return null;\n const d = new Date(ts);\n const month = d.getMonth() + 1;\n const day = d.getDate();\n const mm = String(d.getMinutes()).padStart(2, \"0\");\n const ss = String(d.getSeconds()).padStart(2, \"0\");\n return `${month}月${day}日 ${mm}:${ss}`;\n}\n\n/**\n * 从当前 DOM 选区提取文本,遇到变量模块(带 data-resource-markdown 或\n * data-xadk-resource-link 的元素)时保留完整模块文案,而非只取选中的片段。\n *\n * 无选区或选区不在 container 内时返回 null。\n */\nexport function getSelectionText(container?: HTMLElement | null): string | null {\n const sel = window.getSelection();\n if (!sel || sel.isCollapsed || sel.rangeCount === 0) return null;\n\n const range = sel.getRangeAt(0);\n // 选区不在容器内时忽略\n if (container && !container.contains(range.commonAncestorContainer)) {\n return null;\n }\n\n const fragment = range.cloneContents();\n let result = \"\";\n\n fragment.childNodes.forEach((node) => {\n result += extractNodeText(node);\n });\n\n return result || null;\n}\n\n/** 递归提取节点文本,变量模块取完整文案 */\nfunction extractNodeText(node: Node): string {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.textContent || \"\";\n }\n\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n // 优先用 data-resource-markdown(带协议的完整 markdown)\n const md = el.getAttribute?.(\"data-resource-markdown\");\n if (md) return md;\n\n // 变量模块(plain-mention 等):取 aria-label 或完整文本\n if (el.getAttribute?.(\"data-xadk-resource-link\")) {\n const label = el.getAttribute(\"aria-label\");\n if (label) return `@${label}`;\n }\n\n // 递归子节点\n let text = \"\";\n el.childNodes.forEach((child) => {\n text += extractNodeText(child);\n });\n return text;\n }\n\n return \"\";\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,eAAeA,CAACC,EAAW,EAAiB;EAC1D,IAAI,CAACA,EAAE,EAAE,OAAO,IAAI;EACpB,IAAMC,CAAC,GAAG,IAAIC,IAAI,CAACF,EAAE,CAAC;EACtB,IAAMG,KAAK,GAAGF,CAAC,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC;EAC9B,IAAMC,GAAG,GAAGJ,CAAC,CAACK,OAAO,CAAC,CAAC;EACvB,IAAMC,EAAE,GAAGC,MAAM,CAACP,CAAC,CAACQ,UAAU,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAClD,IAAMC,EAAE,GAAGH,MAAM,CAACP,CAAC,CAACW,UAAU,CAAC,CAAC,CAAC,CAACF,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAClD,UAAAG,MAAA,CAAUV,KAAK,YAAAU,MAAA,CAAIR,GAAG,aAAAQ,MAAA,CAAKN,EAAE,OAAAM,MAAA,CAAIF,EAAE;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,gBAAgBA,CAACC,SAA8B,EAAiB;EAC9E,IAAMC,GAAG,GAAGC,MAAM,CAACC,YAAY,CAAC,CAAC;EACjC,IAAI,CAACF,GAAG,IAAIA,GAAG,CAACG,WAAW,IAAIH,GAAG,CAACI,UAAU,KAAK,CAAC,EAAE,OAAO,IAAI;EAEhE,IAAMC,KAAK,GAAGL,GAAG,CAACM,UAAU,CAAC,CAAC,CAAC;EAC/B;EACA,IAAIP,SAAS,IAAI,CAACA,SAAS,CAACQ,QAAQ,CAACF,KAAK,CAACG,uBAAuB,CAAC,EAAE;IACnE,OAAO,IAAI;EACb;EAEA,IAAMC,QAAQ,GAAGJ,KAAK,CAACK,aAAa,CAAC,CAAC;EACtC,IAAIC,MAAM,GAAG,EAAE;EAEfF,QAAQ,CAACG,UAAU,CAACC,OAAO,CAAC,UAACC,IAAI,EAAK;IACpCH,MAAM,IAAII,eAAe,CAACD,IAAI,CAAC;EACjC,CAAC,CAAC;EAEF,OAAOH,MAAM,IAAI,IAAI;AACvB;;AAEA;AACA,SAASI,eAAeA,CAACD,IAAU,EAAU;EAC3C,IAAIA,IAAI,CAACE,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;IACpC,OAAOJ,IAAI,CAACK,WAAW,IAAI,EAAE;EAC/B;EAEA,IAAIL,IAAI,CAACE,QAAQ,KAAKC,IAAI,CAACG,YAAY,EAAE;IAAA,IAAAC,gBAAA,EAAAC,iBAAA;IACvC,IAAMC,EAAE,GAAGT,IAAmB;IAC9B;IACA,IAAMU,EAAE,IAAAH,gBAAA,GAAGE,EAAE,CAACE,YAAY,cAAAJ,gBAAA,uBAAfA,gBAAA,CAAAK,IAAA,CAAAH,EAAE,EAAgB,wBAAwB,CAAC;IACtD,IAAIC,EAAE,EAAE,OAAOA,EAAE;;IAEjB;IACA,KAAAF,iBAAA,GAAIC,EAAE,CAACE,YAAY,cAAAH,iBAAA,eAAfA,iBAAA,CAAAI,IAAA,CAAAH,EAAE,EAAgB,yBAAyB,CAAC,EAAE;MAChD,IAAMI,KAAK,GAAGJ,EAAE,CAACE,YAAY,CAAC,YAAY,CAAC;MAC3C,IAAIE,KAAK,EAAE,WAAA9B,MAAA,CAAW8B,KAAK;IAC7B;;IAEA;IACA,IAAIC,IAAI,GAAG,EAAE;IACbL,EAAE,CAACX,UAAU,CAACC,OAAO,CAAC,UAACgB,KAAK,EAAK;MAC/BD,IAAI,IAAIb,eAAe,CAACc,KAAK,CAAC;IAChC,CAAC,CAAC;IACF,OAAOD,IAAI;EACb;EAEA,OAAO,EAAE;AACX"}