@ai-group/chat-sdk 3.5.12 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/FileGallery/index.js +1 -1
- package/dist/cjs/components/FileGallery/index.js.map +1 -1
- package/dist/cjs/components/FolderTree/DirectoryTree.d.ts +1 -1
- package/dist/cjs/components/FolderTree/DirectoryTree.js +56 -18
- package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
- package/dist/cjs/components/FolderTree/index.js +2 -2
- package/dist/cjs/components/FolderTree/index.js.map +2 -2
- package/dist/cjs/components/FolderTree/styles.js +4 -1
- package/dist/cjs/components/FolderTree/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +8 -8
- package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/styles.d.ts +1 -0
- package/dist/cjs/components/XAdkChatbot/styles.js +7 -1
- package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +2 -0
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkThoughtChain/index.js +75 -39
- package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
- package/dist/cjs/components/XAdkThoughtChain/styles.js +27 -26
- package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +9 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/styles/tokens.d.ts +27 -0
- package/dist/cjs/styles/tokens.js +72 -0
- package/dist/cjs/styles/tokens.js.map +7 -0
- package/dist/cjs/types/XAdkChatbot.d.ts +7 -1
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkThoughtChain.d.ts +13 -0
- package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
- package/dist/esm/components/FileGallery/index.js +1 -1
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FolderTree/DirectoryTree.d.ts +1 -1
- package/dist/esm/components/FolderTree/DirectoryTree.js +86 -54
- package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
- package/dist/esm/components/FolderTree/index.js +2 -2
- package/dist/esm/components/FolderTree/index.js.map +1 -1
- package/dist/esm/components/FolderTree/styles.js +2 -2
- package/dist/esm/components/FolderTree/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +15 -38
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.d.ts +1 -0
- package/dist/esm/components/XAdkChatbot/styles.js +20 -19
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +3 -2
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/index.js +100 -50
- package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/styles.js +20 -19
- package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/styles/tokens.d.ts +27 -0
- package/dist/esm/styles/tokens.js +42 -0
- package/dist/esm/styles/tokens.js.map +1 -0
- package/dist/esm/types/XAdkChatbot.d.ts +7 -1
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkThoughtChain.d.ts +13 -0
- package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useRef","useMemo","useCallback","useEffect","useState","forwardRef","useImperativeHandle","clsx","DirectoryTreeComponent","FilePreview","useStyles","jsx","_jsx","jsxs","_jsxs","getAllExpandedKeys","nodes","parentPath","arguments","length","undefined","keys","forEach","node","_node$children","currentPath","concat","path","children","push","apply","_toConsumableArray","normalizeTreeData","map","_objectSpread","type","FolderTree","props","ref","className","style","treeData","directoryIcons","previewRender","directoryTitle","previewTitle","_props$selectable","selectable","defaultSelectedFile","_props$defaultExpandA","defaultExpandAll","selectedFile","onSelectedFileChange","_props$directoryTreeW","directoryTreeWidth","emptyRender","defaultExpandedPaths","expandedPaths","onExpandedPathsChange","onFileClick","onFolderClick","fileContentService","moreActions","showLine","switcherIcon","_props$showPreview","showPreview","draggable","onDrop","onRename","onCreate","styles","normalizedTreeData","_useState","_useState2","_slicedToArray","editNode","setEditNode","_useState3","_useState4","createContext","setCreateContext","findNodeAndValidate","validateAsFile","isValid","segments","Array","isArray","filter","Boolean","split","findNode","index","currentSegment","_iterator","_createForOfIteratorHelper","_step","s","n","done","value","err","e","f","isValidSelectedFile","filePath","_findNodeAndValidate","key","handleEditValueChange","prev","currentValue","handleEditConfirm","newValue","trim","mode","_findNodeAndValidate2","oldTitle","originalTitle","newTitle","parentKey","name","extra","handleEditCancel","handleStartRename","fullPath","titleStr","title","String","_useState5","_useState6","selectedFileState","setSelectedFileState","controlled","_useState7","_useState8","expandedPathsState","setExpandedPathsState","_useState9","_useState10","validSelectedFile","setValidSelectedFile","_useState11","_useState12","fileContent","setFileContent","_useState13","_useState14","loadingContent","setLoadingContent","initializedExpandRef","current","loadContent","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_findNodeAndValidate3","content","wrap","_callee$","_context","next","abrupt","join","loadFileContent","sent","t0","Error","message","finish","stop","handleSelect","_keys","info","_keys$","selectedNodes","isFolder","some","isLeaf","pathArray","_findNodeAndValidate4","originalNode","fileName","nodeContent","isControlled","handleExpand","newPaths","createNode","options","defaultName","tempKey","Date","now","includes","container","containerNoPreview","background","backgroundColor","selectedKeys","expandedKeys","onSelect","onExpand","width","onEditValueChange","onEditConfirm","onEditCancel","createInfo","onStartRename","loading","getFileNode","_findNodeAndValidate5","displayName"],"sources":["../../../../src/components/FolderTree/index.tsx"],"sourcesContent":["import React, {\n useRef,\n useMemo,\n useCallback,\n useEffect,\n useState,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport type { TreeProps } from \"antd\";\nimport clsx from \"clsx\";\nimport type {\n FolderTreeData,\n FolderTreeProps,\n FolderTreeRef,\n EditNodeInfo,\n CreateNodeContext,\n} from \"./types\";\nimport DirectoryTreeComponent from \"./DirectoryTree\";\nimport FilePreview from \"./FilePreview\";\nimport { useStyles } from \"./styles\";\n\nexport type {\n FolderTreeData,\n FolderTreeProps,\n FileContentService,\n FolderTreeRef,\n} from \"./types\";\n\n// 展开所有节点\nfunction getAllExpandedKeys(\n nodes: FolderTreeData[],\n parentPath = \"\",\n): string[] {\n const keys: string[] = [];\n\n nodes.forEach((node) => {\n const currentPath = parentPath ? `${parentPath}/${node.path}` : node.path;\n\n if (node.children?.length) {\n keys.push(currentPath);\n keys.push(...getAllExpandedKeys(node.children, currentPath));\n }\n });\n\n return keys;\n}\n\n// 格式化数据\nfunction normalizeTreeData(nodes: FolderTreeData[]): FolderTreeData[] {\n return nodes.map((node) => ({\n ...node,\n type: node.type\n ? node.type\n : !!node.children && node.children.length > 0\n ? \"folder\"\n : \"file\",\n children: node.children ? normalizeTreeData(node.children) : undefined,\n }));\n}\n\nconst FolderTree = forwardRef<FolderTreeRef, FolderTreeProps>((props, ref) => {\n const {\n className,\n style,\n treeData,\n directoryIcons,\n previewRender,\n directoryTitle,\n previewTitle,\n selectable = true,\n defaultSelectedFile,\n defaultExpandAll = true,\n selectedFile,\n onSelectedFileChange,\n directoryTreeWidth = 280,\n emptyRender,\n defaultExpandedPaths,\n expandedPaths,\n onExpandedPathsChange,\n onFileClick,\n onFolderClick,\n fileContentService,\n moreActions,\n showLine,\n switcherIcon,\n showPreview = true,\n draggable,\n onDrop,\n onRename,\n onCreate,\n } = props;\n\n const styles = useStyles();\n\n const normalizedTreeData = useMemo(\n () => normalizeTreeData(treeData),\n [treeData],\n );\n\n // ====== 编辑态状态 ======\n const [editNode, setEditNode] = useState<EditNodeInfo | null>(null);\n const [createContext, setCreateContext] = useState<CreateNodeContext | null>(\n null,\n );\n\n // ====== 工具函数 ======\n const findNodeAndValidate = useCallback(\n (\n path: string | string[],\n validateAsFile = false,\n ): { node: FolderTreeData | undefined; isValid: boolean } => {\n if (!path) return { node: undefined, isValid: false };\n const segments = Array.isArray(path)\n ? path.filter(Boolean)\n : path.split(\"/\").filter(Boolean);\n if (segments.length === 0) return { node: undefined, isValid: false };\n\n const findNode = (\n nodes: FolderTreeData[],\n index = 0,\n ): FolderTreeData | undefined => {\n if (index >= segments.length) return undefined;\n const currentSegment = segments[index];\n for (const node of nodes) {\n if (node.path === currentSegment) {\n return index === segments.length - 1\n ? node\n : node.children\n ? findNode(node.children, index + 1)\n : undefined;\n }\n }\n return undefined;\n };\n\n const node = findNode(normalizedTreeData);\n const isValid = validateAsFile\n ? !!node && (!node?.children || node.children.length === 0)\n : !!node;\n return { node, isValid };\n },\n [normalizedTreeData],\n );\n\n const isValidSelectedFile = (filePath?: string[]): boolean =>\n !!(\n filePath &&\n filePath.length > 0 &&\n findNodeAndValidate(filePath, true).isValid\n );\n\n // ====== 编辑态逻辑 ======\n\n // 当 normalizedTreeData 变化时,检查编辑节点是否还存在\n useEffect(() => {\n if (!editNode) return;\n const { node } = findNodeAndValidate(editNode.key);\n if (!node) {\n setEditNode(null);\n setCreateContext(null);\n }\n }, [normalizedTreeData]);\n\n // 编辑值变化\n const handleEditValueChange = useCallback((value: string) => {\n setEditNode((prev) => (prev ? { ...prev, currentValue: value } : null));\n }, []);\n\n // 确认编辑\n const handleEditConfirm = useCallback(() => {\n if (!editNode) return;\n const newValue = editNode.currentValue.trim();\n\n if (editNode.mode === \"rename\") {\n const { node } = findNodeAndValidate(editNode.key);\n onRename?.({\n key: editNode.key,\n oldTitle: editNode.originalTitle,\n newTitle: newValue,\n node: node!,\n });\n } else if (editNode.mode === \"create\" && createContext) {\n onCreate?.({\n parentKey: createContext.parentKey,\n name: newValue,\n type: createContext.type,\n extra: createContext.extra,\n });\n }\n\n setEditNode(null);\n setCreateContext(null);\n }, [editNode, createContext, findNodeAndValidate, onRename, onCreate]);\n\n // 取消编辑\n const handleEditCancel = useCallback(() => {\n setEditNode(null);\n setCreateContext(null);\n }, []);\n\n // 开始重命名\n const handleStartRename = useCallback(\n (fullPath: string, node: FolderTreeData) => {\n const titleStr =\n typeof node.title === \"string\" ? node.title : String(node.path);\n setCreateContext(null);\n setEditNode({\n key: fullPath,\n type: node.type || \"file\",\n originalTitle: titleStr,\n currentValue: titleStr,\n mode: \"rename\",\n });\n },\n [],\n );\n\n // ====== State ======\n const [selectedFileState, setSelectedFileState] = useState<string[]>(() =>\n isValidSelectedFile(selectedFile || defaultSelectedFile)\n ? selectedFile || defaultSelectedFile || []\n : [],\n );\n const controlled = expandedPaths !== undefined;\n\n const [expandedPathsState, setExpandedPathsState] = useState<string[]>(\n defaultExpandedPaths || [],\n );\n const [validSelectedFile, setValidSelectedFile] = useState<boolean>(\n isValidSelectedFile(selectedFile || defaultSelectedFile),\n );\n const [fileContent, setFileContent] = useState<string>(\"\");\n const [loadingContent, setLoadingContent] = useState<boolean>(false);\n const initializedExpandRef = useRef(false);\n\n // 受控模式同步\n useEffect(() => {\n if (selectedFile !== undefined) {\n setSelectedFileState(selectedFile);\n setValidSelectedFile(isValidSelectedFile(selectedFile));\n }\n }, [selectedFile, isValidSelectedFile]);\n\n useEffect(() => {\n if (\n !controlled &&\n defaultExpandAll &&\n !initializedExpandRef.current &&\n normalizedTreeData.length > 0\n ) {\n initializedExpandRef.current = true;\n\n setExpandedPathsState(getAllExpandedKeys(normalizedTreeData));\n }\n }, [controlled, defaultExpandAll, normalizedTreeData]);\n\n useEffect(() => {\n if (controlled) {\n setExpandedPathsState(expandedPaths);\n }\n }, [controlled, expandedPaths]);\n\n // ====== 加载文件内容 ======\n useEffect(() => {\n const loadContent = async () => {\n if (!validSelectedFile || selectedFileState.length === 0) {\n setFileContent(\"\");\n setLoadingContent(false);\n return;\n }\n\n const filePath = selectedFileState.join(\"/\");\n const segments = filePath.split(\"/\").filter((s) => s !== \"\");\n const { node } = findNodeAndValidate(segments);\n\n if (fileContentService) {\n setLoadingContent(true);\n try {\n const content = await fileContentService.loadFileContent(filePath);\n setFileContent(content);\n } catch (error) {\n setFileContent(\n `// 加载错误: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n );\n } finally {\n setLoadingContent(false);\n }\n } else if (node?.content) {\n setFileContent(node.content);\n setLoadingContent(false);\n } else {\n setFileContent(\"\");\n setLoadingContent(false);\n }\n };\n\n loadContent();\n }, [\n validSelectedFile,\n selectedFileState,\n normalizedTreeData,\n fileContentService,\n findNodeAndValidate,\n ]);\n\n // ====== 事件处理 ======\n const handleSelect: TreeProps[\"onSelect\"] = (_keys, info) => {\n const keys = _keys as string[];\n const nodes = Array.isArray(info.selectedNodes)\n ? info.selectedNodes\n : [info.selectedNodes];\n\n const isFolder = nodes.some((node) => !node.isLeaf);\n if (isFolder) {\n if (nodes.length === 1) {\n const node = nodes[0] as unknown as FolderTreeData;\n onFolderClick?.(node.path, node.extra);\n }\n return;\n }\n\n const pathArray = keys[0]?.split(\"/\").filter(Boolean) || [];\n if (pathArray.length === 0) return;\n\n // 从原始 normalizedTreeData 中查找节点,避免拿到 antd 包装后的 JSX title\n const { node: originalNode } = findNodeAndValidate(pathArray);\n const fileName = originalNode?.title;\n const nodeContent = originalNode?.content;\n\n onSelectedFileChange?.({\n path: pathArray,\n title: fileName,\n content: nodeContent,\n extra: originalNode?.extra,\n });\n\n const isControlled = selectedFile !== undefined;\n if (!isControlled) {\n setValidSelectedFile(true);\n setSelectedFileState(pathArray);\n }\n\n if (originalNode) {\n onFileClick?.(keys[0], originalNode.content, originalNode.extra);\n }\n };\n\n const handleExpand: TreeProps[\"onExpand\"] = (keys) => {\n const newPaths = keys as string[];\n\n if (!controlled) {\n setExpandedPathsState(newPaths);\n }\n\n onExpandedPathsChange?.(newPaths);\n };\n\n // ====== 命令式 API ======\n useImperativeHandle(\n ref,\n () => ({\n createNode: (parentPath, options) => {\n const defaultName =\n options.defaultName ||\n (options.type === \"folder\" ? \"新建文件夹\" : \"新建文件\");\n const tempKey = `__create__${parentPath || \"root\"}__${Date.now()}`;\n\n setCreateContext({\n parentKey: parentPath,\n type: options.type,\n extra: options.extra,\n });\n setEditNode({\n key: tempKey,\n type: options.type || \"folder\",\n originalTitle: \"\",\n currentValue: defaultName,\n mode: \"create\",\n });\n\n // 自动展开父文件夹(仅在受控模式下需要,非受控模式由 defaultExpandAll 处理)\n if (!controlled && parentPath && parentPath !== \"/\") {\n setExpandedPathsState((prev) => {\n const current = prev || [];\n\n if (current.includes(parentPath)) {\n return current;\n }\n\n return [...current, parentPath];\n });\n }\n },\n }),\n [controlled],\n );\n\n return (\n <div\n className={clsx(\n styles.container,\n !showPreview && styles.containerNoPreview,\n className,\n )}\n style={{\n ...style,\n ...(style?.background\n ? ({\n \"--folder-tree-directory-bg\": style.background,\n } as React.CSSProperties)\n : {}),\n ...(style?.backgroundColor\n ? ({\n \"--folder-tree-directory-bg\": style.backgroundColor,\n } as React.CSSProperties)\n : {}),\n }}\n >\n <DirectoryTreeComponent\n treeData={normalizedTreeData}\n directoryIcons={directoryIcons}\n selectedKeys={\n selectable && selectedFileState && validSelectedFile\n ? [selectedFileState.join(\"/\")]\n : []\n }\n expandedKeys={controlled ? expandedPaths : expandedPathsState}\n onSelect={handleSelect}\n onExpand={handleExpand}\n defaultExpandAll={defaultExpandAll}\n directoryTitle={directoryTitle}\n moreActions={moreActions}\n showLine={showLine}\n switcherIcon={switcherIcon}\n width={directoryTreeWidth}\n draggable={draggable}\n editNode={editNode}\n onEditValueChange={handleEditValueChange}\n onEditConfirm={handleEditConfirm}\n onEditCancel={handleEditCancel}\n createInfo={createContext}\n onStartRename={handleStartRename}\n onDrop={onDrop}\n />\n {showPreview && (\n <FilePreview\n selectedFile={validSelectedFile ? selectedFileState : []}\n fileContent={fileContent}\n loading={loadingContent}\n previewTitle={previewTitle}\n previewRender={previewRender}\n emptyRender={emptyRender}\n getFileNode={(path) => {\n if (!path || path.length === 0) return undefined;\n const { node } = findNodeAndValidate(path);\n return node\n ? { title: node.title, path: node.path, content: node.content }\n : undefined;\n }}\n />\n )}\n </div>\n );\n});\n\nFolderTree.displayName = \"FolderTree\";\n\nexport default FolderTree;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useRef","useMemo","useCallback","useEffect","useState","forwardRef","useImperativeHandle","clsx","DirectoryTreeComponent","FilePreview","useStyles","jsx","_jsx","jsxs","_jsxs","getAllExpandedKeys","nodes","parentPath","arguments","length","undefined","keys","forEach","node","_node$children","currentPath","concat","path","children","push","apply","_toConsumableArray","normalizeTreeData","map","_objectSpread","type","FolderTree","props","ref","className","style","treeData","directoryIcons","previewRender","directoryTitle","previewTitle","_props$selectable","selectable","defaultSelectedFile","_props$defaultExpandA","defaultExpandAll","selectedFile","onSelectedFileChange","_props$directoryTreeW","directoryTreeWidth","emptyRender","defaultExpandedPaths","expandedPaths","onExpandedPathsChange","onFileClick","onFolderClick","fileContentService","moreActions","showLine","switcherIcon","_props$showPreview","showPreview","draggable","onDrop","onRename","onCreate","styles","normalizedTreeData","_useState","_useState2","_slicedToArray","editNode","setEditNode","_useState3","_useState4","createContext","setCreateContext","findNodeAndValidate","validateAsFile","isValid","segments","Array","isArray","filter","Boolean","split","findNode","index","currentSegment","_iterator","_createForOfIteratorHelper","_step","s","n","done","value","err","e","f","isValidSelectedFile","filePath","_findNodeAndValidate","key","handleEditValueChange","prev","currentValue","handleEditConfirm","newValue","trim","mode","_findNodeAndValidate2","oldTitle","originalTitle","newTitle","parentKey","name","extra","handleEditCancel","handleStartRename","fullPath","titleStr","title","String","_useState5","_useState6","selectedFileState","setSelectedFileState","controlled","_useState7","_useState8","expandedPathsState","setExpandedPathsState","_useState9","_useState10","validSelectedFile","setValidSelectedFile","_useState11","_useState12","fileContent","setFileContent","_useState13","_useState14","loadingContent","setLoadingContent","initializedExpandRef","current","loadContent","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_findNodeAndValidate3","content","wrap","_callee$","_context","next","abrupt","join","loadFileContent","sent","t0","Error","message","finish","stop","handleSelect","_keys","info","_keys$","selectedNodes","isFolder","some","isLeaf","pathArray","_findNodeAndValidate4","originalNode","fileName","nodeContent","isControlled","handleExpand","newPaths","createNode","options","defaultName","tempKey","Date","now","includes","container","containerNoPreview","background","backgroundColor","selectedKeys","expandedKeys","onSelect","onExpand","width","onEditValueChange","onEditConfirm","onEditCancel","createInfo","onStartRename","loading","getFileNode","_findNodeAndValidate5","displayName"],"sources":["../../../../src/components/FolderTree/index.tsx"],"sourcesContent":["import React, {\n useRef,\n useMemo,\n useCallback,\n useEffect,\n useState,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport type { TreeProps } from \"antd\";\nimport clsx from \"clsx\";\nimport type {\n FolderTreeData,\n FolderTreeProps,\n FolderTreeRef,\n EditNodeInfo,\n CreateNodeContext,\n} from \"./types\";\nimport DirectoryTreeComponent from \"./DirectoryTree\";\nimport FilePreview from \"./FilePreview\";\nimport { useStyles } from \"./styles\";\n\nexport type {\n FolderTreeData,\n FolderTreeProps,\n FileContentService,\n FolderTreeRef,\n} from \"./types\";\n\n// 展开所有节点\nfunction getAllExpandedKeys(\n nodes: FolderTreeData[],\n parentPath = \"\",\n): string[] {\n const keys: string[] = [];\n\n nodes.forEach((node) => {\n const currentPath = parentPath ? `${parentPath}/${node.path}` : node.path;\n\n if (node.children?.length) {\n keys.push(currentPath);\n keys.push(...getAllExpandedKeys(node.children, currentPath));\n }\n });\n\n return keys;\n}\n\n// 格式化数据\nfunction normalizeTreeData(nodes: FolderTreeData[]): FolderTreeData[] {\n return nodes.map((node) => ({\n ...node,\n type: node.type\n ? node.type\n : !!node.children && node.children.length > 0\n ? \"folder\"\n : \"file\",\n children: node.children ? normalizeTreeData(node.children) : undefined,\n }));\n}\n\nconst FolderTree = forwardRef<FolderTreeRef, FolderTreeProps>((props, ref) => {\n const {\n className,\n style,\n treeData,\n directoryIcons,\n previewRender,\n directoryTitle,\n previewTitle,\n selectable = true,\n defaultSelectedFile,\n defaultExpandAll = true,\n selectedFile,\n onSelectedFileChange,\n directoryTreeWidth = 280,\n emptyRender,\n defaultExpandedPaths,\n expandedPaths,\n onExpandedPathsChange,\n onFileClick,\n onFolderClick,\n fileContentService,\n moreActions,\n showLine,\n switcherIcon,\n showPreview = true,\n draggable,\n onDrop,\n onRename,\n onCreate,\n } = props;\n\n const styles = useStyles();\n\n const normalizedTreeData = useMemo(\n () => normalizeTreeData(treeData),\n [treeData],\n );\n\n // ====== 编辑态状态 ======\n const [editNode, setEditNode] = useState<EditNodeInfo | null>(null);\n const [createContext, setCreateContext] = useState<CreateNodeContext | null>(\n null,\n );\n\n // ====== 工具函数 ======\n const findNodeAndValidate = useCallback(\n (\n path: string | string[],\n validateAsFile = false,\n ): { node: FolderTreeData | undefined; isValid: boolean } => {\n if (!path) return { node: undefined, isValid: false };\n const segments = Array.isArray(path)\n ? path.filter(Boolean)\n : path.split(\"/\").filter(Boolean);\n if (segments.length === 0) return { node: undefined, isValid: false };\n\n const findNode = (\n nodes: FolderTreeData[],\n index = 0,\n ): FolderTreeData | undefined => {\n if (index >= segments.length) return undefined;\n const currentSegment = segments[index];\n for (const node of nodes) {\n if (node.path === currentSegment) {\n return index === segments.length - 1\n ? node\n : node.children\n ? findNode(node.children, index + 1)\n : undefined;\n }\n }\n return undefined;\n };\n\n const node = findNode(normalizedTreeData);\n const isValid = validateAsFile\n ? !!node && (!node?.children || node.children.length === 0)\n : !!node;\n return { node, isValid };\n },\n [normalizedTreeData],\n );\n\n const isValidSelectedFile = (filePath?: string[]): boolean =>\n !!(\n filePath &&\n filePath.length > 0 &&\n findNodeAndValidate(filePath, true).isValid\n );\n\n // ====== 编辑态逻辑 ======\n\n // 当 normalizedTreeData 变化时,检查编辑节点是否还存在\n useEffect(() => {\n if (!editNode) return;\n const { node } = findNodeAndValidate(editNode.key);\n if (!node) {\n setEditNode(null);\n setCreateContext(null);\n }\n }, [normalizedTreeData]);\n\n // 编辑值变化\n const handleEditValueChange = useCallback((value: string) => {\n setEditNode((prev) => (prev ? { ...prev, currentValue: value } : null));\n }, []);\n\n // 确认编辑\n const handleEditConfirm = useCallback((value?: string) => {\n if (!editNode) return;\n const newValue = (value ?? editNode.currentValue).trim();\n\n if (editNode.mode === \"rename\") {\n const { node } = findNodeAndValidate(editNode.key);\n onRename?.({\n key: editNode.key,\n oldTitle: editNode.originalTitle,\n newTitle: newValue,\n node: node!,\n });\n } else if (editNode.mode === \"create\" && createContext) {\n onCreate?.({\n parentKey: createContext.parentKey,\n name: newValue,\n type: createContext.type,\n extra: createContext.extra,\n });\n }\n\n setEditNode(null);\n setCreateContext(null);\n }, [editNode, createContext, findNodeAndValidate, onRename, onCreate]);\n\n // 取消编辑\n const handleEditCancel = useCallback(() => {\n setEditNode(null);\n setCreateContext(null);\n }, []);\n\n // 开始重命名\n const handleStartRename = useCallback(\n (fullPath: string, node: FolderTreeData) => {\n const titleStr =\n typeof node.title === \"string\" ? node.title : String(node.path);\n setCreateContext(null);\n setEditNode({\n key: fullPath,\n type: node.type || \"file\",\n originalTitle: titleStr,\n currentValue: titleStr,\n mode: \"rename\",\n });\n },\n [],\n );\n\n // ====== State ======\n const [selectedFileState, setSelectedFileState] = useState<string[]>(() =>\n isValidSelectedFile(selectedFile || defaultSelectedFile)\n ? selectedFile || defaultSelectedFile || []\n : [],\n );\n const controlled = expandedPaths !== undefined;\n\n const [expandedPathsState, setExpandedPathsState] = useState<string[]>(\n defaultExpandedPaths || [],\n );\n const [validSelectedFile, setValidSelectedFile] = useState<boolean>(\n isValidSelectedFile(selectedFile || defaultSelectedFile),\n );\n const [fileContent, setFileContent] = useState<string>(\"\");\n const [loadingContent, setLoadingContent] = useState<boolean>(false);\n const initializedExpandRef = useRef(false);\n\n // 受控模式同步\n useEffect(() => {\n if (selectedFile !== undefined) {\n setSelectedFileState(selectedFile);\n setValidSelectedFile(isValidSelectedFile(selectedFile));\n }\n }, [selectedFile, isValidSelectedFile]);\n\n useEffect(() => {\n if (\n !controlled &&\n defaultExpandAll &&\n !initializedExpandRef.current &&\n normalizedTreeData.length > 0\n ) {\n initializedExpandRef.current = true;\n\n setExpandedPathsState(getAllExpandedKeys(normalizedTreeData));\n }\n }, [controlled, defaultExpandAll, normalizedTreeData]);\n\n useEffect(() => {\n if (controlled) {\n setExpandedPathsState(expandedPaths);\n }\n }, [controlled, expandedPaths]);\n\n // ====== 加载文件内容 ======\n useEffect(() => {\n const loadContent = async () => {\n if (!validSelectedFile || selectedFileState.length === 0) {\n setFileContent(\"\");\n setLoadingContent(false);\n return;\n }\n\n const filePath = selectedFileState.join(\"/\");\n const segments = filePath.split(\"/\").filter((s) => s !== \"\");\n const { node } = findNodeAndValidate(segments);\n\n if (fileContentService) {\n setLoadingContent(true);\n try {\n const content = await fileContentService.loadFileContent(filePath);\n setFileContent(content);\n } catch (error) {\n setFileContent(\n `// 加载错误: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n );\n } finally {\n setLoadingContent(false);\n }\n } else if (node?.content) {\n setFileContent(node.content);\n setLoadingContent(false);\n } else {\n setFileContent(\"\");\n setLoadingContent(false);\n }\n };\n\n loadContent();\n }, [\n validSelectedFile,\n selectedFileState,\n normalizedTreeData,\n fileContentService,\n findNodeAndValidate,\n ]);\n\n // ====== 事件处理 ======\n const handleSelect: TreeProps[\"onSelect\"] = (_keys, info) => {\n const keys = _keys as string[];\n const nodes = Array.isArray(info.selectedNodes)\n ? info.selectedNodes\n : [info.selectedNodes];\n\n const isFolder = nodes.some((node) => !node.isLeaf);\n if (isFolder) {\n if (nodes.length === 1) {\n const node = nodes[0] as unknown as FolderTreeData;\n onFolderClick?.(node.path, node.extra);\n }\n return;\n }\n\n const pathArray = keys[0]?.split(\"/\").filter(Boolean) || [];\n if (pathArray.length === 0) return;\n\n // 从原始 normalizedTreeData 中查找节点,避免拿到 antd 包装后的 JSX title\n const { node: originalNode } = findNodeAndValidate(pathArray);\n const fileName = originalNode?.title;\n const nodeContent = originalNode?.content;\n\n onSelectedFileChange?.({\n path: pathArray,\n title: fileName,\n content: nodeContent,\n extra: originalNode?.extra,\n });\n\n const isControlled = selectedFile !== undefined;\n if (!isControlled) {\n setValidSelectedFile(true);\n setSelectedFileState(pathArray);\n }\n\n if (originalNode) {\n onFileClick?.(keys[0], originalNode.content, originalNode.extra);\n }\n };\n\n const handleExpand: TreeProps[\"onExpand\"] = (keys) => {\n const newPaths = keys as string[];\n\n if (!controlled) {\n setExpandedPathsState(newPaths);\n }\n\n onExpandedPathsChange?.(newPaths);\n };\n\n // ====== 命令式 API ======\n useImperativeHandle(\n ref,\n () => ({\n createNode: (parentPath, options) => {\n const defaultName =\n options.defaultName ||\n (options.type === \"folder\" ? \"新建文件夹\" : \"新建文件\");\n const tempKey = `__create__${parentPath || \"root\"}__${Date.now()}`;\n\n setCreateContext({\n parentKey: parentPath,\n type: options.type,\n extra: options.extra,\n });\n setEditNode({\n key: tempKey,\n type: options.type || \"folder\",\n originalTitle: \"\",\n currentValue: defaultName,\n mode: \"create\",\n });\n\n // 自动展开父文件夹(仅在受控模式下需要,非受控模式由 defaultExpandAll 处理)\n if (!controlled && parentPath && parentPath !== \"/\") {\n setExpandedPathsState((prev) => {\n const current = prev || [];\n\n if (current.includes(parentPath)) {\n return current;\n }\n\n return [...current, parentPath];\n });\n }\n },\n }),\n [controlled],\n );\n\n return (\n <div\n className={clsx(\n styles.container,\n !showPreview && styles.containerNoPreview,\n className,\n )}\n style={{\n ...style,\n ...(style?.background\n ? ({\n \"--folder-tree-directory-bg\": style.background,\n } as React.CSSProperties)\n : {}),\n ...(style?.backgroundColor\n ? ({\n \"--folder-tree-directory-bg\": style.backgroundColor,\n } as React.CSSProperties)\n : {}),\n }}\n >\n <DirectoryTreeComponent\n treeData={normalizedTreeData}\n directoryIcons={directoryIcons}\n selectedKeys={\n selectable && selectedFileState && validSelectedFile\n ? [selectedFileState.join(\"/\")]\n : []\n }\n expandedKeys={controlled ? expandedPaths : expandedPathsState}\n onSelect={handleSelect}\n onExpand={handleExpand}\n defaultExpandAll={defaultExpandAll}\n directoryTitle={directoryTitle}\n moreActions={moreActions}\n showLine={showLine}\n switcherIcon={switcherIcon}\n width={directoryTreeWidth}\n draggable={draggable}\n editNode={editNode}\n onEditValueChange={handleEditValueChange}\n onEditConfirm={handleEditConfirm}\n onEditCancel={handleEditCancel}\n createInfo={createContext}\n onStartRename={handleStartRename}\n onDrop={onDrop}\n />\n {showPreview && (\n <FilePreview\n selectedFile={validSelectedFile ? selectedFileState : []}\n fileContent={fileContent}\n loading={loadingContent}\n previewTitle={previewTitle}\n previewRender={previewRender}\n emptyRender={emptyRender}\n getFileNode={(path) => {\n if (!path || path.length === 0) return undefined;\n const { node } = findNodeAndValidate(path);\n return node\n ? { title: node.title, path: node.path, content: node.content }\n : undefined;\n }}\n />\n )}\n </div>\n );\n});\n\nFolderTree.displayName = \"FolderTree\";\n\nexport default FolderTree;\n"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export var useStyles = withBasicStyles(function () {
|
|
|
8
8
|
containerNoPreview: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n height: auto;\n border: none;\n border-radius: 0;\n & > *:first-child {\n border-right: none;\n }\n "]))),
|
|
9
9
|
directoryPanel: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n "]))),
|
|
10
10
|
directoryTitle: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n "]))),
|
|
11
|
-
directoryTreeContent: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n padding: 4px 8px;\n flex: 1;\n\n .ant-tree {\n background: transparent;\n height: 100%;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n overflow: hidden;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .ant-tree-directory .ant-tree-treenode {\n position: relative;\n &::before {\n border-radius: 4px;\n }\n }\n /* \u81EA\u5B9A\u4E49\u62D6\u62FD\u6837\u5F0F \u2014 \u57FA\u4E8E ant-tree-treenode \u5B9A\u4F4D\uFF0C\u8986\u76D6\u6574\u884C */\n .ant-tree-treenode.folder-tree-drop-before::after {\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-top: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-inside::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed #1677ff;\n border-radius: 4px;\n background: rgba(22, 119, 255, 0.04);\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-after::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-bottom: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n
|
|
11
|
+
directoryTreeContent: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n padding: 4px 8px;\n flex: 1;\n\n .ant-tree {\n background: transparent;\n height: 100%;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n overflow: hidden;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .ant-tree-directory .ant-tree-treenode {\n position: relative;\n &::before {\n border-radius: 4px;\n }\n }\n /* \u81EA\u5B9A\u4E49\u62D6\u62FD\u6837\u5F0F \u2014 \u57FA\u4E8E ant-tree-treenode \u5B9A\u4F4D\uFF0C\u8986\u76D6\u6574\u884C */\n .ant-tree-treenode.folder-tree-drop-before::after {\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-top: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-inside::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed #1677ff;\n border-radius: 4px;\n background: rgba(22, 119, 255, 0.04);\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-after::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-bottom: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n "]))),
|
|
12
12
|
/** 自定义拖拽 - 节点可拖拽样式 */
|
|
13
13
|
dragNodeHandle: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n cursor: grab;\n user-select: none;\n\n &:active {\n cursor: grabbing;\n }\n "]))),
|
|
14
14
|
/** 树节点容器,用于相对定位 drop indicator */
|
|
@@ -19,7 +19,7 @@ export var useStyles = withBasicStyles(function () {
|
|
|
19
19
|
emptyContainer: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n "]))),
|
|
20
20
|
loadingContainer: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n "]))),
|
|
21
21
|
treeNodeTitle: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-width: 0;\n overflow: hidden;\n padding-right: 4px;\n\n > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n "]))),
|
|
22
|
-
moreIcon: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n opacity: 0;\n cursor: pointer;\n padding: 0 4px;\n margin: 2px;\n color: #999;\n font-size: 12px;\n transition: all 0.2s;\n\n &:hover {\n border-radius: 50%;\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n "]))),
|
|
22
|
+
moreIcon: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n opacity: 0;\n cursor: pointer;\n padding: 0 4px;\n margin: 2px;\n color: #999;\n font-size: 12px;\n line-height: 20px;\n transition: all 0.2s;\n height: 20px;\n box-sizing: border-box;\n\n &:hover {\n border-radius: 50%;\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n "]))),
|
|
23
23
|
treeNodeTitleHover: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n &:hover .folder-tree-more-icon {\n opacity: 1;\n }\n "]))),
|
|
24
24
|
inlineInput: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n width: 100%;\n .ant-input {\n height: 22px;\n font-size: 13px;\n padding: 0 6px;\n border-radius: 4px;\n }\n "]))),
|
|
25
25
|
copyBtn: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n cursor: pointer;\n color: #999;\n font-size: 14px;\n &:hover {\n color: #1677ff;\n }\n "])))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["css","withBasicStyles","useStyles","container","_templateObject","_taggedTemplateLiteral","containerNoPreview","_templateObject2","directoryPanel","_templateObject3","directoryTitle","_templateObject4","directoryTreeContent","_templateObject5","dragNodeHandle","_templateObject6","treeNodeWrapper","_templateObject7","previewPanel","_templateObject8","previewTitle","_templateObject9","previewContent","_templateObject10","emptyContainer","_templateObject11","loadingContainer","_templateObject12","treeNodeTitle","_templateObject13","moreIcon","_templateObject14","treeNodeTitleHover","_templateObject15","inlineInput","_templateObject16","copyBtn","_templateObject17"],"sources":["../../../../src/components/FolderTree/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n container: css`\n display: flex;\n width: 100%;\n height: 500px;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n overflow: hidden;\n background: #fff;\n `,\n containerNoPreview: css`\n height: auto;\n border: none;\n border-radius: 0;\n & > *:first-child {\n border-right: none;\n }\n `,\n directoryPanel: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n `,\n directoryTitle: css`\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n `,\n directoryTreeContent: css`\n padding: 4px 8px;\n flex: 1;\n\n .ant-tree {\n background: transparent;\n height: 100%;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n overflow: hidden;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .ant-tree-directory .ant-tree-treenode {\n position: relative;\n &::before {\n border-radius: 4px;\n }\n }\n /* 自定义拖拽样式 — 基于 ant-tree-treenode 定位,覆盖整行 */\n .ant-tree-treenode.folder-tree-drop-before::after {\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-top: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-inside::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed #1677ff;\n border-radius: 4px;\n background: rgba(22, 119, 255, 0.04);\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-after::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-bottom: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n
|
|
1
|
+
{"version":3,"names":["css","withBasicStyles","useStyles","container","_templateObject","_taggedTemplateLiteral","containerNoPreview","_templateObject2","directoryPanel","_templateObject3","directoryTitle","_templateObject4","directoryTreeContent","_templateObject5","dragNodeHandle","_templateObject6","treeNodeWrapper","_templateObject7","previewPanel","_templateObject8","previewTitle","_templateObject9","previewContent","_templateObject10","emptyContainer","_templateObject11","loadingContainer","_templateObject12","treeNodeTitle","_templateObject13","moreIcon","_templateObject14","treeNodeTitleHover","_templateObject15","inlineInput","_templateObject16","copyBtn","_templateObject17"],"sources":["../../../../src/components/FolderTree/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n container: css`\n display: flex;\n width: 100%;\n height: 500px;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n overflow: hidden;\n background: #fff;\n `,\n containerNoPreview: css`\n height: auto;\n border: none;\n border-radius: 0;\n & > *:first-child {\n border-right: none;\n }\n `,\n directoryPanel: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n `,\n directoryTitle: css`\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n `,\n directoryTreeContent: css`\n padding: 4px 8px;\n flex: 1;\n\n .ant-tree {\n background: transparent;\n height: 100%;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n overflow: hidden;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .ant-tree-directory .ant-tree-treenode {\n position: relative;\n &::before {\n border-radius: 4px;\n }\n }\n /* 自定义拖拽样式 — 基于 ant-tree-treenode 定位,覆盖整行 */\n .ant-tree-treenode.folder-tree-drop-before::after {\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-top: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-inside::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed #1677ff;\n border-radius: 4px;\n background: rgba(22, 119, 255, 0.04);\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-after::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-bottom: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n `,\n\n /** 自定义拖拽 - 节点可拖拽样式 */\n dragNodeHandle: css`\n cursor: grab;\n user-select: none;\n\n &:active {\n cursor: grabbing;\n }\n `,\n /** 树节点容器,用于相对定位 drop indicator */\n treeNodeWrapper: css`\n position: relative;\n min-width: 0;\n overflow: hidden;\n `,\n previewPanel: css`\n flex: 1;\n height: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n `,\n previewTitle: css`\n padding: 10px 16px;\n font-size: 13px;\n font-weight: 500;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: #333;\n background: #fff;\n `,\n previewContent: css`\n flex: 1;\n overflow: auto;\n padding: 16px;\n font-size: 13px;\n line-height: 1.6;\n `,\n emptyContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n `,\n loadingContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n `,\n treeNodeTitle: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-width: 0;\n overflow: hidden;\n padding-right: 4px;\n\n > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n moreIcon: css`\n opacity: 0;\n cursor: pointer;\n padding: 0 4px;\n margin: 2px;\n color: #999;\n font-size: 12px;\n line-height: 20px;\n transition: all 0.2s;\n height: 20px;\n box-sizing: border-box;\n\n &:hover {\n border-radius: 50%;\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n `,\n treeNodeTitleHover: css`\n &:hover .folder-tree-more-icon {\n opacity: 1;\n }\n `,\n inlineInput: css`\n width: 100%;\n .ant-input {\n height: 22px;\n font-size: 13px;\n padding: 0 6px;\n border-radius: 4px;\n }\n `,\n copyBtn: css`\n cursor: pointer;\n color: #999;\n font-size: 14px;\n &:hover {\n color: #1677ff;\n }\n `,\n}));\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,SAAS,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,6KAQb;IACDC,kBAAkB,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,oIAOtB;IACDG,cAAc,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sMAOlB;IACDK,cAAc,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,2IAMlB;IACDO,oBAAoB,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,yqDAoExB;IAED;IACAS,cAAc,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,yGAOlB;IACD;IACAW,eAAe,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,+EAInB;IACDa,YAAY,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,mHAMhB;IACDe,YAAY,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,qPAUhB;IACDiB,cAAc,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,gHAMlB;IACDmB,cAAc,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,2GAKlB;IACDqB,gBAAgB,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,2GAKpB;IACDuB,aAAa,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,0RAajB;IACDyB,QAAQ,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,oVAiBZ;IACD2B,kBAAkB,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,4EAItB;IACD6B,WAAW,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,sJAQf;IACD+B,OAAO,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA;EAQd,CAAC;AAAA,CAAC,CAAC"}
|
|
@@ -54,13 +54,14 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
54
54
|
enableProcessParsing = _ref$enableProcessPar === void 0 ? true : _ref$enableProcessPar,
|
|
55
55
|
parseOptions = _ref.parseOptions,
|
|
56
56
|
_ref$initialized = _ref.initialized,
|
|
57
|
-
initialized = _ref$initialized === void 0 ?
|
|
57
|
+
initialized = _ref$initialized === void 0 ? true : _ref$initialized,
|
|
58
58
|
sessionId = _ref.sessionId,
|
|
59
59
|
onFileClick = _ref.onFileClick,
|
|
60
60
|
renderFunctionCall = _ref.renderFunctionCall,
|
|
61
61
|
toolKindResolver = _ref.toolKindResolver,
|
|
62
62
|
strategies = _ref.strategies,
|
|
63
|
-
preset = _ref.preset
|
|
63
|
+
preset = _ref.preset,
|
|
64
|
+
empty = _ref.empty;
|
|
64
65
|
var styles = useStyles();
|
|
65
66
|
var listRef = useRef(null);
|
|
66
67
|
var lastScrollTopRef = useRef(0);
|
|
@@ -145,17 +146,13 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
145
146
|
userHasScrolledRef.current = false;
|
|
146
147
|
}, [sessionId]);
|
|
147
148
|
|
|
148
|
-
//
|
|
149
|
+
// 消息变化时自动滚动到底部(用户未手动上滚时)
|
|
149
150
|
useEffect(function () {
|
|
150
151
|
if (userHasScrolledRef.current) return;
|
|
151
152
|
if (!messages.length) return;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
var el = listRef.current;
|
|
156
|
-
if (el) {
|
|
157
|
-
el.scrollTop = el.scrollHeight;
|
|
158
|
-
}
|
|
153
|
+
var el = listRef.current;
|
|
154
|
+
if (el) {
|
|
155
|
+
el.scrollTop = el.scrollHeight;
|
|
159
156
|
}
|
|
160
157
|
}, [loading, messages]);
|
|
161
158
|
|
|
@@ -525,33 +522,7 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
525
522
|
}, group.id);
|
|
526
523
|
}, [styles, onFileClick]);
|
|
527
524
|
|
|
528
|
-
// ==========
|
|
529
|
-
// const isEmpty =
|
|
530
|
-
// messages.length === 0 &&
|
|
531
|
-
// !prologue &&
|
|
532
|
-
// (!suggestions || suggestions.length === 0);
|
|
533
|
-
|
|
534
|
-
// const renderWelcome = () => {
|
|
535
|
-
// if (!isEmpty) return null;
|
|
536
|
-
|
|
537
|
-
// return (
|
|
538
|
-
// <>
|
|
539
|
-
// {welcome ?? (
|
|
540
|
-
// <div className={styles.welcomeWrapper}>
|
|
541
|
-
// {agentIcon && (
|
|
542
|
-
// <img src={agentIcon} alt="icon" className={styles.welcomeIcon} />
|
|
543
|
-
// )}
|
|
544
|
-
// {agentName && (
|
|
545
|
-
// <div className={styles.welcomeTitle}>{agentName}</div>
|
|
546
|
-
// )}
|
|
547
|
-
// {description && (
|
|
548
|
-
// <div className={styles.welcomeDesc}>{description}</div>
|
|
549
|
-
// )}
|
|
550
|
-
// </div>
|
|
551
|
-
// )}
|
|
552
|
-
// </>
|
|
553
|
-
// );
|
|
554
|
-
// };
|
|
525
|
+
// ========== 空状态 ==========
|
|
555
526
|
|
|
556
527
|
// ========== 渲染建议问题 ==========
|
|
557
528
|
var renderSuggestions = function renderSuggestions() {
|
|
@@ -586,13 +557,19 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
586
557
|
})
|
|
587
558
|
});
|
|
588
559
|
};
|
|
560
|
+
|
|
561
|
+
// 空状态判断
|
|
562
|
+
var isEmpty = messages.length === 0 && !prologue && (!suggestions || suggestions.length === 0);
|
|
589
563
|
return /*#__PURE__*/_jsx("div", {
|
|
590
564
|
className: clsx(styles.wrapper, className),
|
|
591
565
|
style: style,
|
|
592
566
|
children: /*#__PURE__*/_jsxs("div", {
|
|
593
567
|
className: styles.list,
|
|
594
568
|
ref: listRef,
|
|
595
|
-
children: [
|
|
569
|
+
children: [isEmpty && empty && /*#__PURE__*/_jsx("div", {
|
|
570
|
+
className: styles.emptyWrapper,
|
|
571
|
+
children: typeof empty === "function" ? empty() : empty
|
|
572
|
+
}), prologue && /*#__PURE__*/_jsx("div", {
|
|
596
573
|
className: styles.prologue,
|
|
597
574
|
children: /*#__PURE__*/_jsx(MarkdownRender, {
|
|
598
575
|
text: prologue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","useCallback","useEffect","useRef","useImperativeHandle","forwardRef","Button","Flex","Tooltip","message","antdMessage","clsx","SwapRightOutlined","ReloadOutlined","CopyOutlined","InfoCircleOutlined","copy","useStyles","MarkdownRender","FunctionCallRender","FileGallery","XAdkThoughtChain","parseAgentMessage","mergeChatStrategies","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","renderFunctionCall","toolKindResolver","strategies","preset","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","prevInitializedRef","prevSessionIdRef","scrollToBottom","_messagesEndRef$curre","behavior","arguments","length","undefined","current","scrollIntoView","mergedStrategies","resolveToolKind","name","msg","_ref2","_toolKindResolver","_mergedStrategies$res","call","parseProcessMessage","el","stableTimer","doScroll","_messagesEndRef$curre2","observer","MutationObserver","clearTimeout","setTimeout","observe","childList","subtree","characterData","maxTimer","disconnect","lastMsg","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","some","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","renderSuggestions","suggestionWrapper","item","suggestion","suggestContent","icon","iconPosition","whiteSpace","height","wordWrap","textAlign","padding","lineHeight","wrapper","list","displayName"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import React, {\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 CheckCircleFilled,\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 { mergeChatStrategies } from \"@/presets/xGroupAdk\";\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 = false,\n sessionId,\n onFileClick,\n renderFunctionCall,\n toolKindResolver,\n strategies,\n preset,\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\n // 暴露命令式 API\n const scrollToBottom = useCallback(\n (behavior: ScrollBehavior = \"auto\") => {\n messagesEndRef.current?.scrollIntoView({ behavior });\n },\n [],\n );\n useImperativeHandle(ref, () => ({ scrollToBottom }), [scrollToBottom]);\n const mergedStrategies = useMemo(\n () => mergeChatStrategies(preset, strategies),\n [preset, strategies],\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\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, { childList: true, subtree: true, characterData: true });\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 useEffect(() => {\n if (userHasScrolledRef.current) return;\n if (!messages.length) return;\n // loading 时(流式输出中)或最后一条是用户消息(刚发送)都置底\n const lastMsg = messages[messages.length - 1];\n if (loading || lastMsg?.role === \"user\") {\n const el = listRef.current;\n if (el) {\n el.scrollTop = el.scrollHeight;\n }\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 onFileClick={onFileClick}\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) => n.type === \"process\",\n );\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 text={node.content} onFileClick={onFileClick} />\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 key={index} file={file} onClick={onFileClick} />\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 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 && <div className={styles.card}>{m.text}</div>}\n </div>\n ))}\n </div>\n );\n },\n [styles, onFileClick],\n );\n\n // ========== 欢迎页面 ==========\n // const isEmpty =\n // messages.length === 0 &&\n // !prologue &&\n // (!suggestions || suggestions.length === 0);\n\n // const renderWelcome = () => {\n // if (!isEmpty) return null;\n\n // return (\n // <>\n // {welcome ?? (\n // <div className={styles.welcomeWrapper}>\n // {agentIcon && (\n // <img src={agentIcon} alt=\"icon\" className={styles.welcomeIcon} />\n // )}\n // {agentName && (\n // <div className={styles.welcomeTitle}>{agentName}</div>\n // )}\n // {description && (\n // <div className={styles.welcomeDesc}>{description}</div>\n // )}\n // </div>\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 iconPosition=\"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 return (\n <div className={clsx(styles.wrapper, className)} style={style}>\n <div className={styles.list} ref={listRef}>\n {/* 开场白 */}\n {prologue && (\n <div className={styles.prologue}>\n <MarkdownRender text={prologue} onFileClick={onFileClick} />\n </div>\n )}\n\n {/* 欢迎页面 */}\n {/* {renderWelcome()} */}\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":["React","useMemo","useCallback","useEffect","useRef","useImperativeHandle","forwardRef","Button","Flex","Tooltip","message","antdMessage","clsx","SwapRightOutlined","ReloadOutlined","CopyOutlined","InfoCircleOutlined","copy","useStyles","MarkdownRender","FunctionCallRender","FileGallery","XAdkThoughtChain","parseAgentMessage","mergeChatStrategies","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","renderFunctionCall","toolKindResolver","strategies","preset","empty","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","prevInitializedRef","prevSessionIdRef","scrollToBottom","_messagesEndRef$curre","behavior","arguments","length","undefined","current","scrollIntoView","mergedStrategies","resolveToolKind","name","msg","_ref2","_toolKindResolver","_mergedStrategies$res","call","parseProcessMessage","el","stableTimer","doScroll","_messagesEndRef$curre2","observer","MutationObserver","clearTimeout","setTimeout","observe","childList","subtree","characterData","maxTimer","disconnect","scrollTop","scrollHeight","prevLoadingRef","wasLoading","timer","handleScroll","currentTop","isAtBottom","Math","abs","clientHeight","listElement","addEventListener","removeEventListener","chatGroups","map","_msg$isLike","id","role","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","some","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","renderSuggestions","suggestionWrapper","item","suggestion","suggestContent","icon","iconPosition","whiteSpace","height","wordWrap","textAlign","padding","lineHeight","isEmpty","wrapper","list","emptyWrapper","displayName"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import React, {\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 CheckCircleFilled,\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 { mergeChatStrategies } from \"@/presets/xGroupAdk\";\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 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\n // 暴露命令式 API\n const scrollToBottom = useCallback(\n (behavior: ScrollBehavior = \"auto\") => {\n messagesEndRef.current?.scrollIntoView({ behavior });\n },\n [],\n );\n useImperativeHandle(ref, () => ({ scrollToBottom }), [scrollToBottom]);\n const mergedStrategies = useMemo(\n () => mergeChatStrategies(preset, strategies),\n [preset, strategies],\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\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, { childList: true, subtree: true, characterData: true });\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 useEffect(() => {\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 onFileClick={onFileClick}\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) => n.type === \"process\",\n );\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 text={node.content} onFileClick={onFileClick} />\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 key={index} file={file} onClick={onFileClick} />\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 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 && <div className={styles.card}>{m.text}</div>}\n </div>\n ))}\n </div>\n );\n },\n [styles, onFileClick],\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 iconPosition=\"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 = messages.length === 0 && !prologue && (!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 text={prologue} onFileClick={onFileClick} />\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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"}
|