@ai-group/chat-sdk 3.8.0-alpha.1 → 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 (54) hide show
  1. package/dist/cjs/components/XAdkChatbot/index.js +240 -68
  2. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  3. package/dist/cjs/components/XAdkChatbot/styles.d.ts +1 -0
  4. package/dist/cjs/components/XAdkChatbot/styles.js +34 -6
  5. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  6. package/dist/cjs/components/XAdkProvider/compound/Messages.d.ts +7 -1
  7. package/dist/cjs/components/XAdkProvider/compound/Messages.js +10 -0
  8. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
  9. package/dist/cjs/components/XAdkSender/index.js +53 -5
  10. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  11. package/dist/cjs/components/XAdkThoughtChain/index.js +7 -3
  12. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  13. package/dist/cjs/components/XAdkThoughtChain/styles.d.ts +1 -1
  14. package/dist/cjs/components/XAdkThoughtChain/styles.js +25 -32
  15. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  16. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  17. package/dist/cjs/components/XAiProvider/index.js.map +2 -2
  18. package/dist/cjs/hooks/useADKMessageQueue.d.ts +4 -2
  19. package/dist/cjs/hooks/useADKMessageQueue.js +13 -11
  20. package/dist/cjs/hooks/useADKMessageQueue.js.map +2 -2
  21. package/dist/cjs/types/XAdkChatbot.d.ts +36 -0
  22. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  23. package/dist/cjs/types/XAdkSender.d.ts +8 -1
  24. package/dist/cjs/types/XAdkSender.js.map +1 -1
  25. package/dist/cjs/types/antdx.d.ts +4 -1
  26. package/dist/cjs/types/antdx.js.map +1 -1
  27. package/dist/esm/components/XAdkChatbot/index.js +210 -33
  28. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  29. package/dist/esm/components/XAdkChatbot/styles.d.ts +1 -0
  30. package/dist/esm/components/XAdkChatbot/styles.js +30 -29
  31. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  32. package/dist/esm/components/XAdkProvider/compound/Messages.d.ts +7 -1
  33. package/dist/esm/components/XAdkProvider/compound/Messages.js +11 -1
  34. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  35. package/dist/esm/components/XAdkSender/index.js +80 -16
  36. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  37. package/dist/esm/components/XAdkThoughtChain/index.js +7 -7
  38. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  39. package/dist/esm/components/XAdkThoughtChain/styles.d.ts +1 -1
  40. package/dist/esm/components/XAdkThoughtChain/styles.js +14 -14
  41. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  42. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  43. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  44. package/dist/esm/hooks/useADKMessageQueue.d.ts +4 -2
  45. package/dist/esm/hooks/useADKMessageQueue.js +12 -10
  46. package/dist/esm/hooks/useADKMessageQueue.js.map +1 -1
  47. package/dist/esm/types/XAdkChatbot.d.ts +36 -0
  48. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  49. package/dist/esm/types/XAdkSender.d.ts +8 -1
  50. package/dist/esm/types/XAdkSender.js.map +1 -1
  51. package/dist/esm/types/antdx.d.ts +4 -1
  52. package/dist/esm/types/antdx.js.map +1 -1
  53. package/dist/umd/chat-sdk.min.js +1 -1
  54. 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","formatTimestamp","getSelectionText","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","showUserActions","userActions","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","prevInitializedRef","prevSessionIdRef","previousMessageCountRef","length","scrollToBottom","_messagesEndRef$curre","behavior","arguments","undefined","current","scrollIntoView","getScrollContainer","getMessagePosition","messageId","list","group","Array","from","children","find","element","HTMLElement","dataset","getBoundingClientRect","top","scrollTop","scrollToMessage","scrollTo","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","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","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","userMsg","_userActions","userContainer","align","marginBottom","card","event","preventDefault","selected","currentTarget","clipboardData","setData","compact","bareUrlAsText","highlightPlainMentions","userTime","userActionIcon","document","querySelector","renderSuggestions","suggestionWrapper","item","suggestion","suggestContent","icon","iconPlacement","whiteSpace","height","wordWrap","textAlign","padding","lineHeight","isEmpty","wrapper","emptyWrapper","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 { 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 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\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 }, [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} 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) => {\n return (\n <div key={group.id} className={styles.userMsg} data-message-id={group.id}>\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 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 {/* 用户消息 hover 操作栏 */}\n {showUserActions && (\n <div className={`x-user-actions ${styles.userActions}`}>\n {userActions?.({ message: group }) ?? (\n <>\n <span className={styles.userTime}>\n {formatTimestamp(m.timestamp)}\n </span>\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n className={styles.userActionIcon}\n onClick={() => {\n const card = document.querySelector(\n `[data-message-id=\"${group.id}\"] [data-xadk-user-card]`,\n );\n const selected = getSelectionText(\n card as HTMLElement | null,\n );\n copy(selected || m.text || \"\");\n antdMessage.success(\"复制成功\");\n }}\n />\n </Tooltip>\n </>\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 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 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,6 +1,7 @@
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;
@@ -1,40 +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, _templateObject28, _templateObject29, _templateObject30;
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\n &:hover .x-user-actions {\n opacity: 1;\n pointer-events: auto;\n }\n "]))),
14
- userActions: css(_templateObject8 || (_templateObject8 = _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 "]))),
15
- userTime: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n "]))),
16
- userActionIcon: css(_templateObject10 || (_templateObject10 = _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 "]))),
17
- card: css(_templateObject11 || (_templateObject11 = _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 "]))),
18
- botMsg: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
19
- emptyWrapper: css(_templateObject13 || (_templateObject13 = _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 "]))),
20
21
  // 新增样式
21
- welcomeWrapper: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n "]))),
22
- welcomeIcon: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n "]))),
23
- welcomeTitle: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n "]))),
24
- welcomeDesc: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n "]))),
25
- suggestionWrapper: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n margin-top: 16px;\n "]))),
26
- successBadge: css(_templateObject19 || (_templateObject19 = _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 "]))),
27
- fileSection: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n margin: 12px 0;\n "]))),
28
- fileHeader: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n "]))),
29
- metaFooter: css(_templateObject22 || (_templateObject22 = _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 "]))),
30
- actionIcons: css(_templateObject23 || (_templateObject23 = _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 "]))),
31
- fnCall: css(_templateObject24 || (_templateObject24 = _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 "]))),
32
- confirm: css(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n "]))),
33
- footer: css(_templateObject26 || (_templateObject26 = _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 "]))),
34
- sender: css(_templateObject27 || (_templateObject27 = _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 "]))),
35
- senderWrap: css(_templateObject28 || (_templateObject28 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n "]))),
36
- tip: css(_templateObject29 || (_templateObject29 = _taggedTemplateLiteral(["\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n "]))),
37
- input: css(_templateObject30 || (_templateObject30 = _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 "])))
38
39
  };
39
40
  });
40
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","userActions","_templateObject8","userTime","_templateObject9","userActionIcon","_templateObject10","card","_templateObject11","botMsg","_templateObject12","emptyWrapper","_templateObject13","welcomeWrapper","_templateObject14","welcomeIcon","_templateObject15","welcomeTitle","_templateObject16","welcomeDesc","_templateObject17","suggestionWrapper","_templateObject18","successBadge","_templateObject19","fileSection","_templateObject20","fileHeader","_templateObject21","metaFooter","_templateObject22","actionIcons","_templateObject23","fnCall","_templateObject24","confirm","_templateObject25","footer","_templateObject26","sender","_templateObject27","senderWrap","_templateObject28","tip","_templateObject29","input","_templateObject30"],"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 &:hover .x-user-actions {\n opacity: 1;\n pointer-events: auto;\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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"}
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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"}
@@ -1,11 +1,17 @@
1
1
  import React from "react";
2
- import type { ActionExtraProps, ActionProps } from "../../../types";
2
+ import type { ActionExtraProps, ActionProps, XAdkChatbotProps } from "../../../types";
3
3
  import type { ChatStrategies } from "../../../types";
4
4
  export interface XAdkMessagesProps {
5
5
  /** 自定义操作栏渲染 */
6
6
  actions?: ActionProps;
7
7
  /** 追加在操作栏之后的内容 */
8
8
  actionsExtra?: ActionExtraProps;
9
+ /** 消息流中的业务模块与整组自定义展示。 */
10
+ renderBeforeGroup?: XAdkChatbotProps["renderBeforeGroup"];
11
+ renderAfterGroup?: XAdkChatbotProps["renderAfterGroup"];
12
+ renderGroup?: XAdkChatbotProps["renderGroup"];
13
+ /** 受控历史消息分页;可通过 useChatActions().setMessages 合并新页。 */
14
+ history?: XAdkChatbotProps["history"];
9
15
  /** 类名 */
10
16
  className?: string;
11
17
  /** 样式 */
@@ -20,6 +20,10 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
20
20
  var Messages = function Messages(_ref) {
21
21
  var actions = _ref.actions,
22
22
  actionsExtra = _ref.actionsExtra,
23
+ renderBeforeGroup = _ref.renderBeforeGroup,
24
+ renderAfterGroup = _ref.renderAfterGroup,
25
+ renderGroup = _ref.renderGroup,
26
+ history = _ref.history,
23
27
  className = _ref.className,
24
28
  style = _ref.style,
25
29
  showFnCallDetail = _ref.showFnCallDetail,
@@ -31,6 +35,7 @@ var Messages = function Messages(_ref) {
31
35
  prologue = _useChatState.prologue,
32
36
  suggestions = _useChatState.suggestions,
33
37
  initialized = _useChatState.initialized,
38
+ currentSessionId = _useChatState.currentSessionId,
34
39
  showFeedback = _useChatState.showFeedback,
35
40
  showUserActions = _useChatState.showUserActions,
36
41
  appInfo = _useChatState.appInfo,
@@ -156,7 +161,12 @@ var Messages = function Messages(_ref) {
156
161
  // 操作栏:使用外部传入的 actions,否则用内置默认 actions
157
162
  ,
158
163
  actions: actions !== null && actions !== void 0 ? actions : defaultActions,
159
- actionsExtra: actionsExtra
164
+ actionsExtra: actionsExtra,
165
+ renderBeforeGroup: renderBeforeGroup,
166
+ renderAfterGroup: renderAfterGroup,
167
+ renderGroup: renderGroup,
168
+ history: history,
169
+ sessionId: currentSessionId
160
170
  // 启用分组和解析
161
171
  ,
162
172
  enableGrouping: true,