@ai-group/chat-sdk 3.7.1-alpha8 → 3.7.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.
- package/README.md +22 -0
- package/dist/cjs/components/XAdkChatbot/index.js +3 -3
- package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +17 -50
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
- package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
- package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
- package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +3 -3
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +4 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +28 -1
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
- package/dist/cjs/components/XAdkSender/{QuickList.d.ts → InputSuggestionList.d.ts} +4 -3
- package/dist/cjs/components/XAdkSender/{QuickList.js → InputSuggestionList.js} +55 -30
- package/dist/cjs/components/XAdkSender/InputSuggestionList.js.map +7 -0
- package/dist/cjs/components/XAdkSender/index.js +35 -13
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.js +13 -1
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/index.js +1 -1
- package/dist/cjs/components/XAiConversations/index.js.map +2 -2
- package/dist/cjs/components/XAiConversations/styles.js +11 -1
- package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +21 -8
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/presets/base.d.ts +6 -0
- package/dist/cjs/presets/base.js +50 -0
- package/dist/cjs/presets/base.js.map +7 -0
- package/dist/cjs/presets/define.d.ts +11 -0
- package/dist/cjs/presets/define.js +58 -0
- package/dist/cjs/presets/define.js.map +7 -0
- package/dist/cjs/presets/index.d.ts +3 -0
- package/dist/cjs/presets/index.js +28 -0
- package/dist/cjs/presets/index.js.map +7 -0
- package/dist/cjs/presets/runtime.d.ts +22 -0
- package/dist/cjs/presets/runtime.js +75 -0
- package/dist/cjs/presets/runtime.js.map +7 -0
- package/dist/cjs/presets/xgroup/index.d.ts +4 -0
- package/dist/cjs/presets/xgroup/index.js +8 -0
- package/dist/cjs/presets/xgroup/index.js.map +2 -2
- package/dist/cjs/presets/xgroup/knowledgeReference.js +3 -1
- package/dist/cjs/presets/xgroup/knowledgeReference.js.map +2 -2
- package/dist/cjs/presets/xgroup/preset.d.ts +1 -15
- package/dist/cjs/presets/xgroup/preset.js +15 -54
- package/dist/cjs/presets/xgroup/preset.js.map +2 -2
- package/dist/cjs/presets/xgroup/strategies.d.ts +1 -4
- package/dist/cjs/presets/xgroup/strategies.js +0 -17
- package/dist/cjs/presets/xgroup/strategies.js.map +2 -2
- package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
- package/dist/cjs/presets/xgroup/webReference.js +85 -0
- package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
- package/dist/cjs/types/ChatStrategies.d.ts +3 -1
- package/dist/cjs/types/ChatStrategies.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +4 -0
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +1 -1
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +16 -41
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -2
- package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -7
- package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
- package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/esm/components/XAdkProvider/context/index.js +1 -0
- package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +1 -1
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +4 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js +26 -7
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
- package/dist/esm/components/XAdkSender/{QuickList.d.ts → InputSuggestionList.d.ts} +4 -3
- package/dist/esm/components/XAdkSender/{QuickList.js → InputSuggestionList.js} +53 -28
- package/dist/esm/components/XAdkSender/InputSuggestionList.js.map +1 -0
- package/dist/esm/components/XAdkSender/index.js +39 -18
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.js +2 -2
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/index.js +2 -1
- package/dist/esm/components/XAiConversations/index.js.map +1 -1
- package/dist/esm/components/XAiConversations/styles.js +3 -3
- package/dist/esm/components/XAiConversations/styles.js.map +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/presets/base.d.ts +6 -0
- package/dist/esm/presets/base.js +28 -0
- package/dist/esm/presets/base.js.map +1 -0
- package/dist/esm/presets/define.d.ts +11 -0
- package/dist/esm/presets/define.js +33 -0
- package/dist/esm/presets/define.js.map +1 -0
- package/dist/esm/presets/index.d.ts +3 -0
- package/dist/esm/presets/index.js +4 -0
- package/dist/esm/presets/index.js.map +1 -0
- package/dist/esm/presets/runtime.d.ts +22 -0
- package/dist/esm/presets/runtime.js +45 -0
- package/dist/esm/presets/runtime.js.map +1 -0
- package/dist/esm/presets/xgroup/index.d.ts +4 -0
- package/dist/esm/presets/xgroup/index.js +5 -0
- package/dist/esm/presets/xgroup/index.js.map +1 -1
- package/dist/esm/presets/xgroup/knowledgeReference.js +2 -1
- package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -1
- package/dist/esm/presets/xgroup/preset.d.ts +1 -15
- package/dist/esm/presets/xgroup/preset.js +5 -41
- package/dist/esm/presets/xgroup/preset.js.map +1 -1
- package/dist/esm/presets/xgroup/strategies.d.ts +1 -4
- package/dist/esm/presets/xgroup/strategies.js +0 -23
- package/dist/esm/presets/xgroup/strategies.js.map +1 -1
- package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
- package/dist/esm/presets/xgroup/webReference.js +46 -0
- package/dist/esm/presets/xgroup/webReference.js.map +1 -0
- package/dist/esm/types/ChatStrategies.d.ts +3 -1
- package/dist/esm/types/ChatStrategies.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +4 -0
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +6 -1
- package/dist/cjs/components/XAdkSender/QuickList.js.map +0 -7
- package/dist/esm/components/XAdkSender/QuickList.js.map +0 -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","list","emptyWrapper","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/xgroup\";\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 <div className={styles.list} ref={listRef}>\n {/* 空状态 */}\n {isEmpty && empty && (\n <div className={styles.emptyWrapper}>\n {typeof empty === \"function\" ? empty() : empty}\n </div>\n )}\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","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","list","emptyWrapper","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 <div className={styles.list} ref={listRef}>\n {/* 空状态 */}\n {isEmpty && empty && (\n <div className={styles.emptyWrapper}>\n {typeof empty === \"function\" ? empty() : empty}\n </div>\n )}\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,10 +1,9 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
-
import React, { useRef, useCallback, useState } from "react";
|
|
2
|
+
import React, { useRef, useCallback, useState, useMemo } from "react";
|
|
3
3
|
import { Attachments } from "@ant-design/x";
|
|
4
|
-
import { Tooltip } from "antd";
|
|
5
|
-
import { PaperClipOutlined } from "@ant-design/icons";
|
|
6
4
|
import { useChatState } from "../context/ChatStateContext";
|
|
7
5
|
import { useChatSenderState } from "../context/ChatSenderStateContext";
|
|
6
|
+
import { DefaultLayoutContext } from "../context/DefaultLayoutContext";
|
|
8
7
|
import Sidebar from "./Sidebar";
|
|
9
8
|
import Messages from "./Messages";
|
|
10
9
|
import Welcome from "./Welcome";
|
|
@@ -19,7 +18,6 @@ import { useStyles } from "./styles";
|
|
|
19
18
|
* - 右侧: 聊天区域 (标题 + 消息 + 输入框,居中显示,最大宽度800px)
|
|
20
19
|
*/
|
|
21
20
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
22
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
23
21
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
22
|
var DefaultLayout = function DefaultLayout(_ref) {
|
|
25
23
|
var _ref$showSessionList = _ref.showSessionList,
|
|
@@ -47,11 +45,19 @@ var DefaultLayout = function DefaultLayout(_ref) {
|
|
|
47
45
|
var styles = useStyles();
|
|
48
46
|
var chatAreaRef = useRef(null);
|
|
49
47
|
var senderRef = useRef(null);
|
|
50
|
-
var fileInputRef = useRef(null);
|
|
51
48
|
var _useState = useState([]),
|
|
52
49
|
_useState2 = _slicedToArray(_useState, 2),
|
|
53
50
|
dropFileList = _useState2[0],
|
|
54
51
|
setDropFileList = _useState2[1];
|
|
52
|
+
var registerSender = useCallback(function (sender) {
|
|
53
|
+
senderRef.current = sender;
|
|
54
|
+
}, []);
|
|
55
|
+
var layoutContextValue = useMemo(function () {
|
|
56
|
+
return {
|
|
57
|
+
allowUpload: mergedAllowUpload,
|
|
58
|
+
registerSender: registerSender
|
|
59
|
+
};
|
|
60
|
+
}, [mergedAllowUpload, registerSender]);
|
|
55
61
|
|
|
56
62
|
// 拖拽上传只有在上传能力开启时生效,避免关闭上传后仍响应文件拖入。
|
|
57
63
|
var enableDragUpload = mergedAllowUpload && mergedDraggable;
|
|
@@ -74,31 +80,6 @@ var DefaultLayout = function DefaultLayout(_ref) {
|
|
|
74
80
|
setDropFileList([]);
|
|
75
81
|
}, [handleFiles]);
|
|
76
82
|
|
|
77
|
-
// 隐藏 file input 的 change 回调
|
|
78
|
-
var handleFileInputChange = useCallback(function (e) {
|
|
79
|
-
if (e.target.files) {
|
|
80
|
-
handleFiles(Array.from(e.target.files));
|
|
81
|
-
e.target.value = "";
|
|
82
|
-
}
|
|
83
|
-
}, [handleFiles]);
|
|
84
|
-
|
|
85
|
-
// 内置上传按钮:点击触发隐藏 file input
|
|
86
|
-
var renderUploadButton = useCallback(function () {
|
|
87
|
-
return /*#__PURE__*/_jsx(Tooltip, {
|
|
88
|
-
title: "\u4E0A\u4F20\u6587\u4EF6",
|
|
89
|
-
children: /*#__PURE__*/_jsx("button", {
|
|
90
|
-
type: "button",
|
|
91
|
-
className: styles.uploadButton,
|
|
92
|
-
onClick: function onClick() {
|
|
93
|
-
var _fileInputRef$current;
|
|
94
|
-
return (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
|
|
95
|
-
},
|
|
96
|
-
"aria-label": "\u4E0A\u4F20\u6587\u4EF6",
|
|
97
|
-
children: /*#__PURE__*/_jsx(PaperClipOutlined, {})
|
|
98
|
-
})
|
|
99
|
-
});
|
|
100
|
-
}, [styles]);
|
|
101
|
-
|
|
102
83
|
// 判断是否为空状态(展示Welcome)
|
|
103
84
|
var isEmpty = messages.length === 0 && !prologue && (!suggestions || suggestions.length === 0);
|
|
104
85
|
return /*#__PURE__*/_jsxs("div", {
|
|
@@ -194,20 +175,14 @@ var DefaultLayout = function DefaultLayout(_ref) {
|
|
|
194
175
|
padding: isEmpty ? "0 24px" : "0",
|
|
195
176
|
transition: "all 0.4s cubic-bezier(0.4, 0, 0.2, 1)"
|
|
196
177
|
},
|
|
197
|
-
children:
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
type: "file",
|
|
201
|
-
multiple: true,
|
|
202
|
-
hidden: true,
|
|
203
|
-
onChange: handleFileInputChange
|
|
204
|
-
}), /*#__PURE__*/_jsx(Sender, {
|
|
178
|
+
children: /*#__PURE__*/_jsx(DefaultLayoutContext.Provider, {
|
|
179
|
+
value: layoutContextValue,
|
|
180
|
+
children: footer || /*#__PURE__*/_jsx(Sender, {
|
|
205
181
|
ref: senderRef,
|
|
206
182
|
draggable: false,
|
|
207
183
|
onFileSelect: handleFiles,
|
|
208
|
-
clearBtnShow: clearBtnShow
|
|
209
|
-
|
|
210
|
-
})]
|
|
184
|
+
clearBtnShow: clearBtnShow
|
|
185
|
+
})
|
|
211
186
|
})
|
|
212
187
|
}), /*#__PURE__*/_jsx("div", {
|
|
213
188
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useRef","useCallback","useState","Attachments","Tooltip","PaperClipOutlined","useChatState","useChatSenderState","Sidebar","Messages","Welcome","Sender","useStyles","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DefaultLayout","_ref","_ref$showSessionList","showSessionList","header","footer","allowUpload","draggable","_ref$clearBtnShow","clearBtnShow","showFnCallDetail","renderFunctionCall","strategies","_useChatState","appInfo","messages","prologue","suggestions","_useChatSenderState","providerAllowUpload","providerDraggable","mergedAllowUpload","mergedDraggable","styles","chatAreaRef","senderRef","fileInputRef","_useState","_useState2","_slicedToArray","dropFileList","setDropFileList","enableDragUpload","handleFiles","files","length","_senderRef$current","current","addFiles","handleDropFiles","info","rawFiles","fileList","map","f","originFileObj","filter","Boolean","handleFileInputChange","e","target","Array","from","value","renderUploadButton","title","children","type","className","uploadButton","onClick","_fileInputRef$current","click","isEmpty","style","display","height","width","position","overflow","isNarrow","ref","flex","justifyContent","alignItems","flexDirection","maxWidth","padding","background","gap","appName","fontSize","fontWeight","color","transition","marginBottom","sendWrapper","alignSelf","multiple","hidden","onChange","onFileSelect","footerLeft","undefined","items","getDropContainer","beforeUpload","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/DefaultLayout.tsx"],"sourcesContent":["import React, { useRef, useCallback, useState } from \"react\";\nimport { Attachments } from \"@ant-design/x\";\nimport { Tooltip } from \"antd\";\nimport { PaperClipOutlined } from \"@ant-design/icons\";\nimport type { UploadFile } from \"antd\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatSenderState } from \"../context/ChatSenderStateContext\";\nimport Sidebar from \"./Sidebar\";\nimport Messages from \"./Messages\";\nimport Welcome from \"./Welcome\";\nimport Sender from \"./Sender\";\nimport { useStyles } from \"./styles\";\nimport type { ChatStrategies } from \"@/types\";\nimport type { XAdkSenderHandle } from \"@/types/XAdkSender\";\n\n/**\n * XAdkProvider 默认布局\n *\n * 提供类似 ChatGPT/DeepSeek 的默认布局:\n * - 左侧: 会话列表侧边栏 (可选,支持展开/收起)\n * - 右侧: 聊天区域 (标题 + 消息 + 输入框,居中显示,最大宽度800px)\n */\nexport interface DefaultLayoutProps {\n /** 是否显示会话列表 */\n showSessionList?: boolean;\n /** 自定义头部 */\n header?: React.ReactNode;\n /** 自定义底部 (替代默认 Sender) */\n footer?: React.ReactNode;\n /**\n * 是否启用内置上传入口(上传按钮 + 隐藏 file input + 拖拽)。\n * 未传时继承 XAdkProvider config.allowUpload。\n * 内核 XAdkSender 不再内置上传逻辑,上传能力统一由 DefaultLayout 管理。\n * 业务方自定义 footer 时可自行控制上传。\n */\n allowUpload?: boolean;\n /** 是否启用拖拽上传;未传时继承 config.draggable */\n draggable?: boolean;\n /** 是否显示清空按钮 */\n clearBtnShow?: boolean;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义消息 Footer */\n messagesFooter?: (msg: any) => React.ReactNode;\n /** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */\n renderFunctionCall?: (\n msg: import(\"@/types\").IMessage,\n ) => React.ReactNode | null;\n /** 局部策略覆盖,优先级高于 Provider preset/strategies */\n strategies?: ChatStrategies;\n}\n\nconst DefaultLayout: React.FC<DefaultLayoutProps> = ({\n showSessionList = false,\n header,\n footer,\n allowUpload,\n draggable,\n clearBtnShow = true,\n showFnCallDetail,\n renderFunctionCall,\n strategies,\n}) => {\n const { appInfo, messages, prologue, suggestions } = useChatState();\n const { allowUpload: providerAllowUpload, draggable: providerDraggable } =\n useChatSenderState();\n // Layout props 用于局部覆盖;未传时继承 Provider config,保证 NPM 与 UMD 接入一致。\n const mergedAllowUpload = allowUpload ?? providerAllowUpload;\n const mergedDraggable = draggable ?? providerDraggable;\n const styles = useStyles();\n const chatAreaRef = useRef<HTMLDivElement>(null);\n const senderRef = useRef<XAdkSenderHandle>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [dropFileList, setDropFileList] = useState<UploadFile[]>([]);\n\n // 拖拽上传只有在上传能力开启时生效,避免关闭上传后仍响应文件拖入。\n const enableDragUpload = mergedAllowUpload && mergedDraggable;\n\n // 文件注入到 Sender(按钮点击 + 拖拽统一走这里)\n const handleFiles = useCallback((files: File[]) => {\n if (files.length > 0) {\n senderRef.current?.addFiles(files);\n }\n }, []);\n\n // Attachments 拖拽文件后的回调\n const handleDropFiles = useCallback(\n (info: { fileList: UploadFile[] }) => {\n const rawFiles = info.fileList\n .map((f) => f.originFileObj)\n .filter(Boolean) as File[];\n handleFiles(rawFiles);\n // 清空 Attachments 文件列表,避免累积\n setDropFileList([]);\n },\n [handleFiles],\n );\n\n // 隐藏 file input 的 change 回调\n const handleFileInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n handleFiles(Array.from(e.target.files));\n e.target.value = \"\";\n }\n },\n [handleFiles],\n );\n\n // 内置上传按钮:点击触发隐藏 file input\n const renderUploadButton = useCallback(\n () => (\n <Tooltip title=\"上传文件\">\n <button\n type=\"button\"\n className={styles.uploadButton}\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"上传文件\"\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n ),\n [styles],\n );\n\n // 判断是否为空状态(展示Welcome)\n const isEmpty =\n messages.length === 0 &&\n !prologue &&\n (!suggestions || suggestions.length === 0);\n\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"hidden\",\n }}\n >\n {/* 左侧会话列表 - XAiConversations 组件会处理展开/收起 */}\n {showSessionList && <Sidebar isNarrow={false} />}\n\n {/* 右侧聊天区域 - 使用 flex: 1 自动占据剩余空间 */}\n <div\n ref={chatAreaRef}\n style={{\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n {/* 居中容器 - 最大宽度 800px */}\n <div\n style={{\n width: \"100%\",\n maxWidth: \"800px\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 头部 */}\n {header ||\n (appInfo && (\n <div\n style={{\n padding: \"16px 24px\",\n display: \"flex\",\n justifyContent: \"center\",\n background: \"white\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n }}\n >\n {appInfo.appName && (\n <div>\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: 500,\n color: \"#000\",\n }}\n >\n {appInfo.appName}\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n\n {/* 消息区域或Welcome区域 */}\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 上方弹性占位 - Welcome状态时占据空间 */}\n <div\n style={{\n flex: isEmpty ? 1 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n\n {/* Welcome 组件 - 只在空状态显示 */}\n {isEmpty && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"0 24px\",\n marginBottom: \"24px\",\n }}\n >\n <Welcome />\n </div>\n )}\n\n {/* Messages 组件 - 只在非空状态显示 */}\n {!isEmpty && (\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n <Messages\n showFnCallDetail={showFnCallDetail}\n renderFunctionCall={renderFunctionCall}\n strategies={strategies}\n />\n </div>\n )}\n {/* 输入区域 - 始终存在,通过样式控制位置 */}\n <div\n className={styles.sendWrapper}\n style={{\n maxWidth: isEmpty ? \"600px\" : \"100%\",\n alignSelf: \"center\",\n padding: isEmpty ? \"0 24px\" : \"0\",\n transition: \"all 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n >\n {footer || (\n <>\n {/* 隐藏的原生 file input - 由 DefaultLayout 管理 */}\n {mergedAllowUpload && (\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n hidden\n onChange={handleFileInputChange}\n />\n )}\n <Sender\n ref={senderRef}\n draggable={false}\n onFileSelect={handleFiles}\n clearBtnShow={clearBtnShow}\n footerLeft={\n mergedAllowUpload ? renderUploadButton : undefined\n }\n />\n </>\n )}\n </div>\n\n {/* 下方弹性占位 - Welcome状态时占据更多空间,让内容偏上 */}\n <div\n style={{\n flex: isEmpty ? 1.5 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n </div>\n </div>\n\n {/* Attachments 拖拽遮罩 - 仅用于拖拽上传功能 */}\n {enableDragUpload && (\n <Attachments\n style={{ display: \"none\" }}\n items={dropFileList}\n getDropContainer={() => chatAreaRef.current}\n multiple\n beforeUpload={() => false}\n onChange={handleDropFiles}\n />\n )}\n </div>\n </div>\n );\n};\n\nDefaultLayout.displayName = \"XAdkProvider.DefaultLayout\";\n\nexport default DefaultLayout;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useRef","useCallback","useState","useMemo","Attachments","useChatState","useChatSenderState","DefaultLayoutContext","Sidebar","Messages","Welcome","Sender","useStyles","jsx","_jsx","jsxs","_jsxs","DefaultLayout","_ref","_ref$showSessionList","showSessionList","header","footer","allowUpload","draggable","_ref$clearBtnShow","clearBtnShow","showFnCallDetail","renderFunctionCall","strategies","_useChatState","appInfo","messages","prologue","suggestions","_useChatSenderState","providerAllowUpload","providerDraggable","mergedAllowUpload","mergedDraggable","styles","chatAreaRef","senderRef","_useState","_useState2","_slicedToArray","dropFileList","setDropFileList","registerSender","sender","current","layoutContextValue","enableDragUpload","handleFiles","files","length","_senderRef$current","addFiles","handleDropFiles","info","rawFiles","fileList","map","f","originFileObj","filter","Boolean","isEmpty","style","display","height","width","position","overflow","children","isNarrow","ref","flex","justifyContent","alignItems","flexDirection","maxWidth","padding","background","gap","appName","fontSize","fontWeight","color","transition","marginBottom","className","sendWrapper","alignSelf","Provider","value","onFileSelect","items","getDropContainer","multiple","beforeUpload","onChange","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/DefaultLayout.tsx"],"sourcesContent":["import React, { useRef, useCallback, useState, useMemo } from \"react\";\nimport { Attachments } from \"@ant-design/x\";\nimport type { UploadFile } from \"antd\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatSenderState } from \"../context/ChatSenderStateContext\";\nimport { DefaultLayoutContext } from \"../context/DefaultLayoutContext\";\nimport Sidebar from \"./Sidebar\";\nimport Messages from \"./Messages\";\nimport Welcome from \"./Welcome\";\nimport Sender from \"./Sender\";\nimport { useStyles } from \"./styles\";\nimport type { ChatStrategies } from \"@/types\";\nimport type { XAdkSenderHandle } from \"@/types/XAdkSender\";\n\n/**\n * XAdkProvider 默认布局\n *\n * 提供类似 ChatGPT/DeepSeek 的默认布局:\n * - 左侧: 会话列表侧边栏 (可选,支持展开/收起)\n * - 右侧: 聊天区域 (标题 + 消息 + 输入框,居中显示,最大宽度800px)\n */\nexport interface DefaultLayoutProps {\n /** 是否显示会话列表 */\n showSessionList?: boolean;\n /** 自定义头部 */\n header?: React.ReactNode;\n /** 自定义底部 (替代默认 Sender) */\n footer?: React.ReactNode;\n /**\n * 是否启用内置上传入口(上传按钮 + 隐藏 file input + 拖拽)。\n * 未传时继承 XAdkProvider config.allowUpload。\n * 内核 XAdkSender 不再内置上传逻辑,上传能力统一由 DefaultLayout 管理。\n * 业务方自定义 footer 时可自行控制上传。\n */\n allowUpload?: boolean;\n /** 是否启用拖拽上传;未传时继承 config.draggable */\n draggable?: boolean;\n /** 是否显示清空按钮 */\n clearBtnShow?: boolean;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义消息 Footer */\n messagesFooter?: (msg: any) => React.ReactNode;\n /** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */\n renderFunctionCall?: (\n msg: import(\"@/types\").IMessage,\n ) => React.ReactNode | null;\n /** 局部策略覆盖,优先级高于 Provider preset/strategies */\n strategies?: ChatStrategies;\n}\n\nconst DefaultLayout: React.FC<DefaultLayoutProps> = ({\n showSessionList = false,\n header,\n footer,\n allowUpload,\n draggable,\n clearBtnShow = true,\n showFnCallDetail,\n renderFunctionCall,\n strategies,\n}) => {\n const { appInfo, messages, prologue, suggestions } = useChatState();\n const { allowUpload: providerAllowUpload, draggable: providerDraggable } =\n useChatSenderState();\n // Layout props 用于局部覆盖;未传时继承 Provider config,保证 NPM 与 UMD 接入一致。\n const mergedAllowUpload = allowUpload ?? providerAllowUpload;\n const mergedDraggable = draggable ?? providerDraggable;\n const styles = useStyles();\n const chatAreaRef = useRef<HTMLDivElement>(null);\n const senderRef = useRef<XAdkSenderHandle>(null);\n const [dropFileList, setDropFileList] = useState<UploadFile[]>([]);\n const registerSender = useCallback((sender: XAdkSenderHandle | null) => {\n senderRef.current = sender;\n }, []);\n const layoutContextValue = useMemo(\n () => ({ allowUpload: mergedAllowUpload, registerSender }),\n [mergedAllowUpload, registerSender],\n );\n\n // 拖拽上传只有在上传能力开启时生效,避免关闭上传后仍响应文件拖入。\n const enableDragUpload = mergedAllowUpload && mergedDraggable;\n\n // 文件注入到 Sender(按钮点击 + 拖拽统一走这里)\n const handleFiles = useCallback((files: File[]) => {\n if (files.length > 0) {\n senderRef.current?.addFiles(files);\n }\n }, []);\n\n // Attachments 拖拽文件后的回调\n const handleDropFiles = useCallback(\n (info: { fileList: UploadFile[] }) => {\n const rawFiles = info.fileList\n .map((f) => f.originFileObj)\n .filter(Boolean) as File[];\n handleFiles(rawFiles);\n // 清空 Attachments 文件列表,避免累积\n setDropFileList([]);\n },\n [handleFiles],\n );\n\n // 判断是否为空状态(展示Welcome)\n const isEmpty =\n messages.length === 0 &&\n !prologue &&\n (!suggestions || suggestions.length === 0);\n\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"hidden\",\n }}\n >\n {/* 左侧会话列表 - XAiConversations 组件会处理展开/收起 */}\n {showSessionList && <Sidebar isNarrow={false} />}\n\n {/* 右侧聊天区域 - 使用 flex: 1 自动占据剩余空间 */}\n <div\n ref={chatAreaRef}\n style={{\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n {/* 居中容器 - 最大宽度 800px */}\n <div\n style={{\n width: \"100%\",\n maxWidth: \"800px\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 头部 */}\n {header ||\n (appInfo && (\n <div\n style={{\n padding: \"16px 24px\",\n display: \"flex\",\n justifyContent: \"center\",\n background: \"white\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n }}\n >\n {appInfo.appName && (\n <div>\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: 500,\n color: \"#000\",\n }}\n >\n {appInfo.appName}\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n\n {/* 消息区域或Welcome区域 */}\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 上方弹性占位 - Welcome状态时占据空间 */}\n <div\n style={{\n flex: isEmpty ? 1 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n\n {/* Welcome 组件 - 只在空状态显示 */}\n {isEmpty && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"0 24px\",\n marginBottom: \"24px\",\n }}\n >\n <Welcome />\n </div>\n )}\n\n {/* Messages 组件 - 只在非空状态显示 */}\n {!isEmpty && (\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n <Messages\n showFnCallDetail={showFnCallDetail}\n renderFunctionCall={renderFunctionCall}\n strategies={strategies}\n />\n </div>\n )}\n {/* 输入区域 - 始终存在,通过样式控制位置 */}\n <div\n className={styles.sendWrapper}\n style={{\n maxWidth: isEmpty ? \"600px\" : \"100%\",\n alignSelf: \"center\",\n padding: isEmpty ? \"0 24px\" : \"0\",\n transition: \"all 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n >\n <DefaultLayoutContext.Provider value={layoutContextValue}>\n {footer || (\n <Sender\n ref={senderRef}\n draggable={false}\n onFileSelect={handleFiles}\n clearBtnShow={clearBtnShow}\n />\n )}\n </DefaultLayoutContext.Provider>\n </div>\n\n {/* 下方弹性占位 - Welcome状态时占据更多空间,让内容偏上 */}\n <div\n style={{\n flex: isEmpty ? 1.5 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n </div>\n </div>\n\n {/* Attachments 拖拽遮罩 - 仅用于拖拽上传功能 */}\n {enableDragUpload && (\n <Attachments\n style={{ display: \"none\" }}\n items={dropFileList}\n getDropContainer={() => chatAreaRef.current}\n multiple\n beforeUpload={() => false}\n onChange={handleDropFiles}\n />\n )}\n </div>\n </div>\n );\n};\n\nDefaultLayout.displayName = \"XAdkProvider.DefaultLayout\";\n\nexport default DefaultLayout;\n"],"mappings":"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"}
|
|
@@ -11,14 +11,15 @@ import type { XAdkSenderProps, XAdkSenderHandle } from "../../../types";
|
|
|
11
11
|
* <XAdkProvider url="..." token="...">
|
|
12
12
|
* <XAdkProvider.Sender
|
|
13
13
|
* clearBtnShow={true}
|
|
14
|
+
* allowUpload
|
|
14
15
|
* uploadRequest={myUploadHandler}
|
|
15
16
|
* />
|
|
16
17
|
* </XAdkProvider>
|
|
17
18
|
* ```
|
|
18
|
-
*
|
|
19
|
-
* 提示:如需内置上传按钮与拖拽上传,请使用 XAdkProvider.DefaultLayout 并设置 allowUpload。
|
|
20
19
|
*/
|
|
21
20
|
export interface XAdkSenderCompoundProps extends Partial<Omit<XAdkSenderProps, "loading" | "onSubmit" | "onStop" | "onClear">> {
|
|
21
|
+
/** 是否显示内置上传按钮;未传时依次继承 DefaultLayout 与 Provider 配置。 */
|
|
22
|
+
allowUpload?: boolean;
|
|
22
23
|
/** 额外的样式 */
|
|
23
24
|
style?: React.CSSProperties;
|
|
24
25
|
/** 额外的类名 */
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
-
import
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["allowUpload", "uploadRequest", "footerLeft"];
|
|
4
|
+
import React, { forwardRef, useCallback, useRef } from "react";
|
|
5
|
+
import { PaperClipOutlined } from "@ant-design/icons";
|
|
6
|
+
import { Tooltip } from "antd";
|
|
3
7
|
import XAdkSender from "../../XAdkSender";
|
|
4
8
|
import { useChatSenderState } from "../context/ChatSenderStateContext";
|
|
9
|
+
import { useDefaultLayoutContext } from "../context/DefaultLayoutContext";
|
|
5
10
|
import { useChatActions } from "../context/ChatActionContext";
|
|
11
|
+
import { useStyles } from "./styles";
|
|
6
12
|
|
|
7
13
|
/**
|
|
8
14
|
* XAdkProvider.Sender - 输入框组件
|
|
@@ -15,26 +21,82 @@ import { useChatActions } from "../context/ChatActionContext";
|
|
|
15
21
|
* <XAdkProvider url="..." token="...">
|
|
16
22
|
* <XAdkProvider.Sender
|
|
17
23
|
* clearBtnShow={true}
|
|
24
|
+
* allowUpload
|
|
18
25
|
* uploadRequest={myUploadHandler}
|
|
19
26
|
* />
|
|
20
27
|
* </XAdkProvider>
|
|
21
28
|
* ```
|
|
22
|
-
*
|
|
23
|
-
* 提示:如需内置上传按钮与拖拽上传,请使用 XAdkProvider.DefaultLayout 并设置 allowUpload。
|
|
24
29
|
*/
|
|
25
30
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
26
|
-
|
|
31
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
32
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
33
|
+
var Sender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
34
|
+
var _ref2;
|
|
35
|
+
var allowUpload = _ref.allowUpload,
|
|
36
|
+
customUploadRequest = _ref.uploadRequest,
|
|
37
|
+
footerLeft = _ref.footerLeft,
|
|
38
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
27
39
|
var _useChatSenderState = useChatSenderState(),
|
|
28
40
|
loading = _useChatSenderState.loading,
|
|
29
|
-
|
|
41
|
+
providerUploadRequest = _useChatSenderState.uploadRequest,
|
|
42
|
+
providerAllowUpload = _useChatSenderState.allowUpload,
|
|
30
43
|
senderValue = _useChatSenderState.senderValue,
|
|
31
44
|
setSenderValue = _useChatSenderState.setSenderValue;
|
|
45
|
+
var layout = useDefaultLayoutContext();
|
|
32
46
|
var _useChatActions = useChatActions(),
|
|
33
47
|
chat = _useChatActions.chat,
|
|
34
48
|
stopChat = _useChatActions.stopChat,
|
|
35
49
|
clearChat = _useChatActions.clearChat;
|
|
50
|
+
var styles = useStyles();
|
|
51
|
+
var senderRef = useRef(null);
|
|
52
|
+
var fileInputRef = useRef(null);
|
|
53
|
+
var mergedAllowUpload = (_ref2 = allowUpload !== null && allowUpload !== void 0 ? allowUpload : layout === null || layout === void 0 ? void 0 : layout.allowUpload) !== null && _ref2 !== void 0 ? _ref2 : providerAllowUpload;
|
|
54
|
+
var uploadRequest = customUploadRequest !== null && customUploadRequest !== void 0 ? customUploadRequest : providerUploadRequest;
|
|
55
|
+
|
|
56
|
+
// 同时维护业务 ref 与 DefaultLayout 的拖拽文件注入目标。
|
|
57
|
+
var setSenderRef = useCallback(function (sender) {
|
|
58
|
+
var _layout$registerSende;
|
|
59
|
+
senderRef.current = sender;
|
|
60
|
+
layout === null || layout === void 0 || (_layout$registerSende = layout.registerSender) === null || _layout$registerSende === void 0 || _layout$registerSende.call(layout, sender);
|
|
61
|
+
if (typeof ref === "function") ref(sender);else if (ref) ref.current = sender;
|
|
62
|
+
}, [layout, ref]);
|
|
63
|
+
var handleFileChange = useCallback(function (event) {
|
|
64
|
+
var _senderRef$current;
|
|
65
|
+
var files = event.target.files;
|
|
66
|
+
if (files !== null && files !== void 0 && files.length) (_senderRef$current = senderRef.current) === null || _senderRef$current === void 0 || _senderRef$current.addFiles(Array.from(files));
|
|
67
|
+
event.target.value = "";
|
|
68
|
+
}, []);
|
|
69
|
+
var renderCustomFooterLeft = useCallback(function (oriNode, info) {
|
|
70
|
+
if (footerLeft === false || footerLeft === undefined) return null;
|
|
71
|
+
return typeof footerLeft === "function" ? footerLeft(oriNode, info) : footerLeft;
|
|
72
|
+
}, [footerLeft]);
|
|
73
|
+
var mergedFooterLeft = mergedAllowUpload ? function (oriNode, info) {
|
|
74
|
+
var _props$allowedFileTyp;
|
|
75
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
76
|
+
children: [/*#__PURE__*/_jsx("input", {
|
|
77
|
+
ref: fileInputRef,
|
|
78
|
+
type: "file",
|
|
79
|
+
multiple: true,
|
|
80
|
+
hidden: true,
|
|
81
|
+
accept: (_props$allowedFileTyp = props.allowedFileTypes) === null || _props$allowedFileTyp === void 0 ? void 0 : _props$allowedFileTyp.join(","),
|
|
82
|
+
onChange: handleFileChange
|
|
83
|
+
}), /*#__PURE__*/_jsx(Tooltip, {
|
|
84
|
+
title: "\u4E0A\u4F20\u6587\u4EF6",
|
|
85
|
+
children: /*#__PURE__*/_jsx("button", {
|
|
86
|
+
type: "button",
|
|
87
|
+
className: styles.uploadButton,
|
|
88
|
+
onClick: function onClick() {
|
|
89
|
+
var _fileInputRef$current;
|
|
90
|
+
return (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
|
|
91
|
+
},
|
|
92
|
+
"aria-label": "\u4E0A\u4F20\u6587\u4EF6",
|
|
93
|
+
children: /*#__PURE__*/_jsx(PaperClipOutlined, {})
|
|
94
|
+
})
|
|
95
|
+
}), renderCustomFooterLeft(oriNode, info)]
|
|
96
|
+
});
|
|
97
|
+
} : footerLeft;
|
|
36
98
|
return /*#__PURE__*/_jsx(XAdkSender, _objectSpread(_objectSpread({
|
|
37
|
-
ref:
|
|
99
|
+
ref: setSenderRef
|
|
38
100
|
}, props), {}, {
|
|
39
101
|
loading: loading,
|
|
40
102
|
value: senderValue,
|
|
@@ -42,7 +104,8 @@ var Sender = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
|
42
104
|
onSubmit: chat,
|
|
43
105
|
onStop: stopChat,
|
|
44
106
|
onClear: clearChat,
|
|
45
|
-
uploadRequest: uploadRequest
|
|
107
|
+
uploadRequest: uploadRequest,
|
|
108
|
+
footerLeft: mergedFooterLeft
|
|
46
109
|
}));
|
|
47
110
|
});
|
|
48
111
|
Sender.displayName = "XAdkProvider.Sender";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","XAdkSender","useChatSenderState","useChatActions","jsx","_jsx","Sender","
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useCallback","useRef","PaperClipOutlined","Tooltip","XAdkSender","useChatSenderState","useDefaultLayoutContext","useChatActions","useStyles","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Sender","_ref","ref","_ref2","allowUpload","customUploadRequest","uploadRequest","footerLeft","props","_objectWithoutProperties","_excluded","_useChatSenderState","loading","providerUploadRequest","providerAllowUpload","senderValue","setSenderValue","layout","_useChatActions","chat","stopChat","clearChat","styles","senderRef","fileInputRef","mergedAllowUpload","setSenderRef","sender","_layout$registerSende","current","registerSender","call","handleFileChange","event","_senderRef$current","files","target","length","addFiles","Array","from","value","renderCustomFooterLeft","oriNode","info","undefined","mergedFooterLeft","_props$allowedFileTyp","children","type","multiple","hidden","accept","allowedFileTypes","join","onChange","title","className","uploadButton","onClick","_fileInputRef$current","click","_objectSpread","onSubmit","onStop","onClear","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/Sender.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useRef } from \"react\";\nimport { PaperClipOutlined } from \"@ant-design/icons\";\nimport { Tooltip } from \"antd\";\nimport XAdkSender from \"@/components/XAdkSender\";\nimport { useChatSenderState } from \"../context/ChatSenderStateContext\";\nimport { useDefaultLayoutContext } from \"../context/DefaultLayoutContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type {\n ActionsComponents,\n SlotRenderFunction,\n XAdkSenderProps,\n XAdkSenderHandle,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n/**\n * XAdkProvider.Sender - 输入框组件\n *\n * 从 Context 获取聊天动作并提供输入界面\n * 基于 XAdkSender 组件实现\n *\n * @example\n * ```tsx\n * <XAdkProvider url=\"...\" token=\"...\">\n * <XAdkProvider.Sender\n * clearBtnShow={true}\n * allowUpload\n * uploadRequest={myUploadHandler}\n * />\n * </XAdkProvider>\n * ```\n */\nexport interface XAdkSenderCompoundProps extends Partial<\n Omit<XAdkSenderProps, \"loading\" | \"onSubmit\" | \"onStop\" | \"onClear\">\n> {\n /** 是否显示内置上传按钮;未传时依次继承 DefaultLayout 与 Provider 配置。 */\n allowUpload?: boolean;\n /** 额外的样式 */\n style?: React.CSSProperties;\n /** 额外的类名 */\n className?: string;\n}\n\nconst Sender = forwardRef<XAdkSenderHandle, XAdkSenderCompoundProps>(\n (\n { allowUpload, uploadRequest: customUploadRequest, footerLeft, ...props },\n ref,\n ) => {\n const {\n loading,\n uploadRequest: providerUploadRequest,\n allowUpload: providerAllowUpload,\n senderValue,\n setSenderValue,\n } = useChatSenderState();\n const layout = useDefaultLayoutContext();\n const { chat, stopChat, clearChat } = useChatActions();\n const styles = useStyles();\n const senderRef = useRef<XAdkSenderHandle | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const mergedAllowUpload =\n allowUpload ?? layout?.allowUpload ?? providerAllowUpload;\n const uploadRequest = customUploadRequest ?? providerUploadRequest;\n\n // 同时维护业务 ref 与 DefaultLayout 的拖拽文件注入目标。\n const setSenderRef = useCallback(\n (sender: XAdkSenderHandle | null) => {\n senderRef.current = sender;\n layout?.registerSender?.(sender);\n if (typeof ref === \"function\") ref(sender);\n else if (ref) ref.current = sender;\n },\n [layout, ref],\n );\n\n const handleFileChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (files?.length) senderRef.current?.addFiles(Array.from(files));\n event.target.value = \"\";\n },\n [],\n );\n\n const renderCustomFooterLeft = useCallback(\n (oriNode: React.ReactNode, info: { components: ActionsComponents }) => {\n if (footerLeft === false || footerLeft === undefined) return null;\n return typeof footerLeft === \"function\"\n ? footerLeft(oriNode, info)\n : footerLeft;\n },\n [footerLeft],\n );\n\n const mergedFooterLeft: SlotRenderFunction | React.ReactNode =\n mergedAllowUpload\n ? (oriNode, info) => (\n <>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n hidden\n accept={props.allowedFileTypes?.join(\",\")}\n onChange={handleFileChange}\n />\n <Tooltip title=\"上传文件\">\n <button\n type=\"button\"\n className={styles.uploadButton}\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"上传文件\"\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n {renderCustomFooterLeft(oriNode, info)}\n </>\n )\n : footerLeft;\n\n return (\n <XAdkSender\n ref={setSenderRef}\n {...props}\n loading={loading}\n value={senderValue}\n onChange={setSenderValue}\n onSubmit={chat}\n onStop={stopChat}\n onClear={clearChat}\n uploadRequest={uploadRequest}\n footerLeft={mergedFooterLeft}\n />\n );\n },\n);\n\nSender.displayName = \"XAdkProvider.Sender\";\n\nexport default Sender;\n"],"mappings":"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"}
|