@ai-group/chat-sdk 3.5.13 → 3.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/cjs/components/FileGallery/index.js +1 -1
  2. package/dist/cjs/components/FileGallery/index.js.map +1 -1
  3. package/dist/cjs/components/FolderTree/DirectoryTree.d.ts +6 -0
  4. package/dist/cjs/components/FolderTree/DirectoryTree.js +5 -2
  5. package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
  6. package/dist/cjs/components/FolderTree/index.js +28 -27
  7. package/dist/cjs/components/FolderTree/index.js.map +2 -2
  8. package/dist/cjs/components/FolderTree/styles.js +4 -1
  9. package/dist/cjs/components/FolderTree/styles.js.map +2 -2
  10. package/dist/cjs/components/FolderTree/types.d.ts +5 -0
  11. package/dist/cjs/components/FolderTree/types.js.map +1 -1
  12. package/dist/cjs/components/XAdkProvider/index.js +2 -0
  13. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  14. package/dist/cjs/components/XAdkThoughtChain/index.js +75 -39
  15. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  16. package/dist/cjs/components/XAdkThoughtChain/styles.js +27 -26
  17. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  18. package/dist/cjs/index.d.ts +2 -1
  19. package/dist/cjs/index.js +9 -0
  20. package/dist/cjs/index.js.map +2 -2
  21. package/dist/cjs/styles/tokens.d.ts +27 -0
  22. package/dist/cjs/styles/tokens.js +72 -0
  23. package/dist/cjs/styles/tokens.js.map +7 -0
  24. package/dist/cjs/types/XAdkThoughtChain.d.ts +13 -0
  25. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  26. package/dist/esm/components/FileGallery/index.js +1 -1
  27. package/dist/esm/components/FileGallery/index.js.map +1 -1
  28. package/dist/esm/components/FolderTree/DirectoryTree.d.ts +6 -0
  29. package/dist/esm/components/FolderTree/DirectoryTree.js +6 -2
  30. package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
  31. package/dist/esm/components/FolderTree/index.js +32 -28
  32. package/dist/esm/components/FolderTree/index.js.map +1 -1
  33. package/dist/esm/components/FolderTree/styles.js +2 -2
  34. package/dist/esm/components/FolderTree/styles.js.map +1 -1
  35. package/dist/esm/components/FolderTree/types.d.ts +5 -0
  36. package/dist/esm/components/FolderTree/types.js.map +1 -1
  37. package/dist/esm/components/XAdkProvider/index.js +3 -2
  38. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  39. package/dist/esm/components/XAdkThoughtChain/index.js +100 -50
  40. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  41. package/dist/esm/components/XAdkThoughtChain/styles.js +20 -19
  42. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  43. package/dist/esm/index.d.ts +2 -1
  44. package/dist/esm/index.js +3 -0
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/styles/tokens.d.ts +27 -0
  47. package/dist/esm/styles/tokens.js +42 -0
  48. package/dist/esm/styles/tokens.js.map +1 -0
  49. package/dist/esm/types/XAdkThoughtChain.d.ts +13 -0
  50. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  51. package/dist/umd/chat-sdk.min.js +1 -1
  52. 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((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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"}
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","internalCreateNode","options","defaultName","tempKey","Date","now","includes","createNode","container","containerNoPreview","background","backgroundColor","selectedKeys","expandedKeys","onSelect","onExpand","width","onEditValueChange","onEditConfirm","onEditCancel","createInfo","onStartRename","onCreateNode","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 和 moreActions 共享) ======\n const internalCreateNode = useCallback(\n (\n parentPath: string,\n options: { type: \"file\" | \"folder\"; defaultName?: string; extra?: any },\n ) => {\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 [controlled],\n );\n\n // ====== 命令式 API ======\n useImperativeHandle(ref, () => ({ createNode: internalCreateNode }), [\n internalCreateNode,\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 onCreateNode={internalCreateNode}\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 `,\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 transition: all 0.2s;\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,2qDAoEtB;IAEH;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,4QAcZ;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"}
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"}
@@ -111,6 +111,11 @@ export interface FolderTreeProps {
111
111
  /** 更多操作菜单,传入节点和操作方法,返回 Dropdown menu 配置 */
112
112
  moreActions?: (node: FolderTreeData, actions?: {
113
113
  startRename: () => void;
114
+ createNode: (options: {
115
+ type: "file" | "folder";
116
+ defaultName?: string;
117
+ extra?: any;
118
+ }) => void;
114
119
  }) => DropdownProps["menu"];
115
120
  /** 是否显示连接线 */
116
121
  showLine?: boolean | {
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../../src/components/FolderTree/types.ts"],"sourcesContent":["import type { DropdownProps } from \"antd\";\nimport type React from \"react\";\n\n/** 文件树节点数据 */\nexport interface FolderTreeData<T = any> {\n title: React.ReactNode;\n path: string;\n content?: string;\n type?: \"folder\" | \"file\";\n extra?: T;\n children?: FolderTreeData<T>[];\n}\n\n/** 文件内容加载服务 */\nexport interface FileContentService {\n loadFileContent(filePath: string): Promise<string>;\n}\n\n/** 编辑节点信息 */\nexport interface EditNodeInfo {\n /** 完整路径 key */\n key: string;\n /** 原始标题 */\n originalTitle: string;\n /** 文件类型 */\n type: \"folder\" | \"file\";\n /** 当前输入值 */\n currentValue: string;\n /** 编辑模式:重命名或新建 */\n mode: \"rename\" | \"create\";\n}\n\n/** 新建上下文 */\nexport interface CreateNodeContext {\n /** 父节点 key */\n parentKey: string;\n /** 节点类型 */\n type: \"file\" | \"folder\";\n /** 附加数据 */\n extra?: any;\n}\n\n/** FolderTree 命令式 API */\nexport interface FolderTreeRef {\n /**\n * 在指定父路径下新建文件或文件夹\n * @param parentPath - 父节点完整路径(空字符串或 \"/\" 表示根路径)\n * @param options.type - 节点类型\n * @param options.defaultName - 默认名称\n * @param options.extra - 自定义附加数据\n */\n createNode: (\n parentPath: string,\n options: {\n type: \"file\" | \"folder\";\n defaultName?: string;\n extra?: any;\n },\n ) => void;\n}\n\n/** FolderTree 组件属性 */\nexport interface FolderTreeProps {\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n\n /** 树形数据 */\n treeData: FolderTreeData[];\n\n /** 自定义文件/文件夹图标,false 禁用图标 */\n directoryIcons?:\n | false\n | Record<\"directory\" | string, React.ReactNode | (() => React.ReactNode)>;\n\n /** 是否可选中文件 */\n selectable?: boolean;\n /** 受控:当前选中的文件路径 */\n selectedFile?: string[];\n /** 默认选中的文件路径 */\n defaultSelectedFile?: string[];\n /** 选中文件变化回调 */\n onSelectedFileChange?: (file: {\n path: string[];\n title?: React.ReactNode;\n content?: string;\n extra?: any;\n }) => void;\n\n /** 受控:展开的路径 */\n expandedPaths?: string[];\n /** 默认展开的路径 */\n defaultExpandedPaths?: string[];\n /** 默认是否展开所有节点 */\n defaultExpandAll?: boolean;\n /** 展开路径变化回调 */\n onExpandedPathsChange?: (paths: string[]) => void;\n\n /** 目录树面板宽度 */\n directoryTreeWidth?: number | string;\n\n /** 文件内容加载服务 */\n fileContentService?: FileContentService;\n\n /** 空状态渲染 */\n emptyRender?: false | React.ReactNode | (() => React.ReactNode);\n /** 自定义文件预览渲染 */\n previewRender?:\n | React.ReactNode\n | ((\n file: {\n content?: string;\n path: string[];\n title?: React.ReactNode;\n language: string;\n },\n info: { originNode: React.ReactNode },\n ) => React.ReactNode);\n\n /** 自定义目录标题 */\n directoryTitle?: false | React.ReactNode | (() => React.ReactNode);\n /** 自定义预览标题 */\n previewTitle?:\n | false\n | React.ReactNode\n | ((info: {\n title: React.ReactNode;\n path: string[];\n content: string;\n }) => React.ReactNode);\n\n /** 文件点击回调 */\n onFileClick?: (filePath: string, content?: string, extra?: any) => void;\n /** 文件夹点击回调 */\n onFolderClick?: (folderPath: string, extra?: any) => void;\n\n /** 更多操作菜单,传入节点和操作方法,返回 Dropdown menu 配置 */\n moreActions?: (\n node: FolderTreeData,\n actions?: { startRename: () => void },\n ) => DropdownProps[\"menu\"];\n\n /** 是否显示连接线 */\n showLine?: boolean | { showLeafIcon?: boolean | React.ReactNode };\n /** 自定义展开/收起图标 */\n switcherIcon?: React.ReactNode | ((props: any) => React.ReactNode);\n\n /** 是否显示文件预览面板,默认 true */\n showPreview?: boolean;\n\n /**\n * 拖拽模式\n * - true | 'file': 只有文件(叶子节点)可拖拽\n * - 'folder': 只有文件夹可拖拽\n * - 'all': 文件和文件夹都可拖拽\n * - false | undefined: 禁用拖拽\n */\n draggable?: boolean | \"file\" | \"folder\" | \"all\";\n\n /** 重命名确认回调,失焦或回车时触发 */\n onRename?: (info: {\n /** 节点完整路径 key */\n key: string;\n /** 原始标题 */\n oldTitle: React.ReactNode;\n /** 新标题 */\n newTitle: string;\n /** 原始节点数据 */\n node: FolderTreeData;\n }) => void;\n\n /** 新建确认回调,失焦或回车时触发 */\n onCreate?: (info: {\n /** 父节点 key */\n parentKey: string;\n /** 用户输入的名称 */\n name: string;\n /** 节点类型 */\n type: \"file\" | \"folder\";\n /** 附加数据 */\n extra?: any;\n }) => void;\n\n /** 拖拽完成回调 */\n onDrop?: (info: {\n /** 被拖拽节点的文件名 */\n fileName: React.ReactNode;\n /** 被拖拽节点的 extra 数据 */\n extra: any;\n /** 拖拽前的完整路径 */\n oldPath: string;\n /** 拖拽完成后的新路径 */\n newPath: string;\n /** 被拖拽的节点 */\n dragNode: FolderTreeData;\n /** 目标节点 */\n dropNode: FolderTreeData;\n }) => void;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../../src/components/FolderTree/types.ts"],"sourcesContent":["import type { DropdownProps } from \"antd\";\nimport type React from \"react\";\n\n/** 文件树节点数据 */\nexport interface FolderTreeData<T = any> {\n title: React.ReactNode;\n path: string;\n content?: string;\n type?: \"folder\" | \"file\";\n extra?: T;\n children?: FolderTreeData<T>[];\n}\n\n/** 文件内容加载服务 */\nexport interface FileContentService {\n loadFileContent(filePath: string): Promise<string>;\n}\n\n/** 编辑节点信息 */\nexport interface EditNodeInfo {\n /** 完整路径 key */\n key: string;\n /** 原始标题 */\n originalTitle: string;\n /** 文件类型 */\n type: \"folder\" | \"file\";\n /** 当前输入值 */\n currentValue: string;\n /** 编辑模式:重命名或新建 */\n mode: \"rename\" | \"create\";\n}\n\n/** 新建上下文 */\nexport interface CreateNodeContext {\n /** 父节点 key */\n parentKey: string;\n /** 节点类型 */\n type: \"file\" | \"folder\";\n /** 附加数据 */\n extra?: any;\n}\n\n/** FolderTree 命令式 API */\nexport interface FolderTreeRef {\n /**\n * 在指定父路径下新建文件或文件夹\n * @param parentPath - 父节点完整路径(空字符串或 \"/\" 表示根路径)\n * @param options.type - 节点类型\n * @param options.defaultName - 默认名称\n * @param options.extra - 自定义附加数据\n */\n createNode: (\n parentPath: string,\n options: {\n type: \"file\" | \"folder\";\n defaultName?: string;\n extra?: any;\n },\n ) => void;\n}\n\n/** FolderTree 组件属性 */\nexport interface FolderTreeProps {\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n\n /** 树形数据 */\n treeData: FolderTreeData[];\n\n /** 自定义文件/文件夹图标,false 禁用图标 */\n directoryIcons?:\n | false\n | Record<\"directory\" | string, React.ReactNode | (() => React.ReactNode)>;\n\n /** 是否可选中文件 */\n selectable?: boolean;\n /** 受控:当前选中的文件路径 */\n selectedFile?: string[];\n /** 默认选中的文件路径 */\n defaultSelectedFile?: string[];\n /** 选中文件变化回调 */\n onSelectedFileChange?: (file: {\n path: string[];\n title?: React.ReactNode;\n content?: string;\n extra?: any;\n }) => void;\n\n /** 受控:展开的路径 */\n expandedPaths?: string[];\n /** 默认展开的路径 */\n defaultExpandedPaths?: string[];\n /** 默认是否展开所有节点 */\n defaultExpandAll?: boolean;\n /** 展开路径变化回调 */\n onExpandedPathsChange?: (paths: string[]) => void;\n\n /** 目录树面板宽度 */\n directoryTreeWidth?: number | string;\n\n /** 文件内容加载服务 */\n fileContentService?: FileContentService;\n\n /** 空状态渲染 */\n emptyRender?: false | React.ReactNode | (() => React.ReactNode);\n /** 自定义文件预览渲染 */\n previewRender?:\n | React.ReactNode\n | ((\n file: {\n content?: string;\n path: string[];\n title?: React.ReactNode;\n language: string;\n },\n info: { originNode: React.ReactNode },\n ) => React.ReactNode);\n\n /** 自定义目录标题 */\n directoryTitle?: false | React.ReactNode | (() => React.ReactNode);\n /** 自定义预览标题 */\n previewTitle?:\n | false\n | React.ReactNode\n | ((info: {\n title: React.ReactNode;\n path: string[];\n content: string;\n }) => React.ReactNode);\n\n /** 文件点击回调 */\n onFileClick?: (filePath: string, content?: string, extra?: any) => void;\n /** 文件夹点击回调 */\n onFolderClick?: (folderPath: string, extra?: any) => void;\n\n /** 更多操作菜单,传入节点和操作方法,返回 Dropdown menu 配置 */\n moreActions?: (\n node: FolderTreeData,\n actions?: {\n startRename: () => void;\n createNode: (options: {\n type: \"file\" | \"folder\";\n defaultName?: string;\n extra?: any;\n }) => void;\n },\n ) => DropdownProps[\"menu\"];\n\n /** 是否显示连接线 */\n showLine?: boolean | { showLeafIcon?: boolean | React.ReactNode };\n /** 自定义展开/收起图标 */\n switcherIcon?: React.ReactNode | ((props: any) => React.ReactNode);\n\n /** 是否显示文件预览面板,默认 true */\n showPreview?: boolean;\n\n /**\n * 拖拽模式\n * - true | 'file': 只有文件(叶子节点)可拖拽\n * - 'folder': 只有文件夹可拖拽\n * - 'all': 文件和文件夹都可拖拽\n * - false | undefined: 禁用拖拽\n */\n draggable?: boolean | \"file\" | \"folder\" | \"all\";\n\n /** 重命名确认回调,失焦或回车时触发 */\n onRename?: (info: {\n /** 节点完整路径 key */\n key: string;\n /** 原始标题 */\n oldTitle: React.ReactNode;\n /** 新标题 */\n newTitle: string;\n /** 原始节点数据 */\n node: FolderTreeData;\n }) => void;\n\n /** 新建确认回调,失焦或回车时触发 */\n onCreate?: (info: {\n /** 父节点 key */\n parentKey: string;\n /** 用户输入的名称 */\n name: string;\n /** 节点类型 */\n type: \"file\" | \"folder\";\n /** 附加数据 */\n extra?: any;\n }) => void;\n\n /** 拖拽完成回调 */\n onDrop?: (info: {\n /** 被拖拽节点的文件名 */\n fileName: React.ReactNode;\n /** 被拖拽节点的 extra 数据 */\n extra: any;\n /** 拖拽前的完整路径 */\n oldPath: string;\n /** 拖拽完成后的新路径 */\n newPath: string;\n /** 被拖拽的节点 */\n dragNode: FolderTreeData;\n /** 目标节点 */\n dropNode: FolderTreeData;\n }) => void;\n}\n"],"mappings":""}
@@ -9,6 +9,7 @@ import { ChatActionContext } from "./context/ChatActionContext";
9
9
  import { SessionContext } from "./context/SessionContext";
10
10
  import useADKChat from "../../hooks/useADKChat";
11
11
  import { primaryBlue } from "../../styles/common";
12
+ import { cssVarStyle } from "../../styles/tokens";
12
13
  import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/xGroupAdk";
13
14
 
14
15
  /**
@@ -223,12 +224,12 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
223
224
  children: /*#__PURE__*/_jsx(SessionContext.Provider, {
224
225
  value: sessionValue,
225
226
  children: /*#__PURE__*/_jsx("div", {
226
- style: {
227
+ style: _objectSpread(_objectSpread({}, cssVarStyle), {}, {
227
228
  display: "flex",
228
229
  height: "100%",
229
230
  width: "100%",
230
231
  position: "relative"
231
- },
232
+ }),
232
233
  children: children
233
234
  })
234
235
  })
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useImperativeHandle","useMemo","ConfigProvider","XProvider","ChatStateContext","ChatActionContext","SessionContext","useADKChat","primaryBlue","mergeChatStrategies","resolvePresetUploadRequest","XAdkProviderComponent","_ref","ref","_config$showFeedback","_config$uploadRequest","_ref$url","url","window","location","origin","token","config","preset","strategies","chatData","_ref$providerId","providerId","onSuccess","onError","onMessage","onStream","children","mergedStrategies","_objectSpread","internalData","enabled","data","appInfo","startChat","stopChat","reChat","clearChat","suggestChat","confirmFnCall","deleteSession","updateSession","currentSessionId","sessionPagination","sessionList","messages","loading","prologue","suggestions","initialized","setCurrentSession","setMessages","_data$likeMessage","likeMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","_data$setStateDelta","setStateDelta","showFeedback","onFileClick","presetUploadRequest","appNo","uploadRequest","getAppInfo","getMessages","getSessions","chatStateValue","chatActionValue","chat","sessionValue","_jsx","theme","colorPrimary","appTheme","Provider","value","style","display","height","width","position","displayName","Header","Sidebar","Messages","Sender","Chatbot","Welcome","DefaultLayout","jsx","XAdkProvider"],"sources":["../../../../src/components/XAdkProvider/index.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/xGroupAdk\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(\n preset ?? config?.preset,\n {\n ...config?.strategies,\n ...strategies,\n },\n ),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {children}\n </div>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","forwardRef","useImperativeHandle","useMemo","ConfigProvider","XProvider","ChatStateContext","ChatActionContext","SessionContext","useADKChat","primaryBlue","cssVarStyle","mergeChatStrategies","resolvePresetUploadRequest","XAdkProviderComponent","_ref","ref","_config$showFeedback","_config$uploadRequest","_ref$url","url","window","location","origin","token","config","preset","strategies","chatData","_ref$providerId","providerId","onSuccess","onError","onMessage","onStream","children","mergedStrategies","_objectSpread","internalData","enabled","data","appInfo","startChat","stopChat","reChat","clearChat","suggestChat","confirmFnCall","deleteSession","updateSession","currentSessionId","sessionPagination","sessionList","messages","loading","prologue","suggestions","initialized","setCurrentSession","setMessages","_data$likeMessage","likeMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","_data$setStateDelta","setStateDelta","showFeedback","onFileClick","presetUploadRequest","appNo","uploadRequest","getAppInfo","getMessages","getSessions","chatStateValue","chatActionValue","chat","sessionValue","_jsx","theme","colorPrimary","appTheme","Provider","value","style","display","height","width","position","displayName","Header","Sidebar","Messages","Sender","Chatbot","Welcome","DefaultLayout","jsx","XAdkProvider"],"sources":["../../../../src/components/XAdkProvider/index.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport { cssVarStyle } from \"@/styles/tokens\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/xGroupAdk\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(\n preset ?? config?.preset,\n {\n ...config?.strategies,\n ...strategies,\n },\n ),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <div\n style={{\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties}\n >\n {children}\n </div>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import React, { useState, useEffect } from "react";
3
- import { CheckCircleFilled, SyncOutlined, ThunderboltOutlined, PartitionOutlined, RightOutlined, DownOutlined } from "@ant-design/icons";
3
+ import { CheckCircleFilled, CloseCircleFilled, ClockCircleOutlined, SyncOutlined, ThunderboltOutlined, PartitionOutlined, RightOutlined, DownOutlined } from "@ant-design/icons";
4
4
  import MarkdownRender from "../XAdkChatbot/components/MarkdownRender";
5
5
  import FunctionCallRender from "../XAdkChatbot/components/FunctionCallRender";
6
6
  import { useStyles } from "./styles";
@@ -117,36 +117,110 @@ var TimelineToolItem = function TimelineToolItem(_ref3) {
117
117
  })]
118
118
  });
119
119
  };
120
- var XAdkThoughtChain = function XAdkThoughtChain(_ref4) {
121
- var _ref4$defaultOpen = _ref4.defaultOpen,
122
- defaultOpen = _ref4$defaultOpen === void 0 ? false : _ref4$defaultOpen,
123
- _ref4$showFnCallDetai = _ref4.showFnCallDetail,
124
- showFnCallDetail = _ref4$showFnCallDetai === void 0 ? false : _ref4$showFnCallDetai,
125
- _ref4$title = _ref4.title,
126
- title = _ref4$title === void 0 ? "思维链已完成" : _ref4$title,
127
- _ref4$items = _ref4.items,
128
- items = _ref4$items === void 0 ? [] : _ref4$items,
129
- loading = _ref4.loading,
130
- _ref4$blink = _ref4.blink,
131
- blink = _ref4$blink === void 0 ? false : _ref4$blink,
132
- onConfirm = _ref4.onConfirm,
133
- renderFunctionCall = _ref4.renderFunctionCall,
134
- _ref4$toolKindResolve = _ref4.toolKindResolver,
135
- toolKindResolver = _ref4$toolKindResolve === void 0 ? defaultToolKindResolver : _ref4$toolKindResolve,
136
- strategies = _ref4.strategies;
120
+ var StatusIcon = function StatusIcon(_ref4) {
121
+ var status = _ref4.status;
122
+ switch (status) {
123
+ case "loading":
124
+ return /*#__PURE__*/_jsx(SyncOutlined, {
125
+ spin: true,
126
+ style: {
127
+ color: "#1677ff"
128
+ }
129
+ });
130
+ case "success":
131
+ return /*#__PURE__*/_jsx(CheckCircleFilled, {
132
+ style: {
133
+ color: "#52c41a"
134
+ }
135
+ });
136
+ case "error":
137
+ return /*#__PURE__*/_jsx(CloseCircleFilled, {
138
+ style: {
139
+ color: "#ff4d4f"
140
+ }
141
+ });
142
+ case "pending":
143
+ return /*#__PURE__*/_jsx(ClockCircleOutlined, {
144
+ style: {
145
+ color: "#8c8c8c"
146
+ }
147
+ });
148
+ }
149
+ };
150
+ var XAdkThoughtChain = function XAdkThoughtChain(_ref5) {
151
+ var _ref5$collapsible = _ref5.collapsible,
152
+ showCollapsibleHeader = _ref5$collapsible === void 0 ? false : _ref5$collapsible,
153
+ status = _ref5.status,
154
+ className = _ref5.className,
155
+ style = _ref5.style,
156
+ _ref5$defaultOpen = _ref5.defaultOpen,
157
+ defaultOpen = _ref5$defaultOpen === void 0 ? false : _ref5$defaultOpen,
158
+ _ref5$showFnCallDetai = _ref5.showFnCallDetail,
159
+ showFnCallDetail = _ref5$showFnCallDetai === void 0 ? false : _ref5$showFnCallDetai,
160
+ _ref5$title = _ref5.title,
161
+ title = _ref5$title === void 0 ? "思维链已完成" : _ref5$title,
162
+ _ref5$items = _ref5.items,
163
+ items = _ref5$items === void 0 ? [] : _ref5$items,
164
+ loading = _ref5.loading,
165
+ _ref5$blink = _ref5.blink,
166
+ blink = _ref5$blink === void 0 ? false : _ref5$blink,
167
+ onConfirm = _ref5.onConfirm,
168
+ renderFunctionCall = _ref5.renderFunctionCall,
169
+ _ref5$toolKindResolve = _ref5.toolKindResolver,
170
+ toolKindResolver = _ref5$toolKindResolve === void 0 ? defaultToolKindResolver : _ref5$toolKindResolve,
171
+ strategies = _ref5.strategies;
137
172
  var styles = useStyles();
173
+
174
+ // status 优先,loading 向后兼容
175
+ var effectiveStatus = status !== null && status !== void 0 ? status : loading ? "loading" : "success";
176
+ var isLoading = effectiveStatus === "loading";
138
177
  var _useState3 = useState(defaultOpen),
139
178
  _useState4 = _slicedToArray(_useState3, 2),
140
179
  isOpen = _useState4[0],
141
180
  setIsOpen = _useState4[1];
142
181
  useEffect(function () {
143
- if (loading) Promise.resolve().then(function () {
182
+ if (isLoading) Promise.resolve().then(function () {
144
183
  return setIsOpen(true);
145
184
  });
146
- }, [loading]);
147
- var shouldBlink = blink && loading;
185
+ }, [isLoading]);
186
+ var shouldBlink = blink && isLoading;
187
+ var renderTimeline = function renderTimeline() {
188
+ return /*#__PURE__*/_jsx("div", {
189
+ className: styles.timeline,
190
+ children: items.map(function (item, i) {
191
+ return item.type === "text" ? /*#__PURE__*/_jsx(TimelineTextItem, {
192
+ item: item,
193
+ blink: shouldBlink
194
+ }, item.key || i) : /*#__PURE__*/_jsx(TimelineToolItem, {
195
+ msg: item.msg,
196
+ collapsible: item.collapsible,
197
+ showFnCallDetail: showFnCallDetail,
198
+ onConfirm: onConfirm,
199
+ blink: shouldBlink,
200
+ renderFunctionCall: renderFunctionCall,
201
+ toolKindResolver: toolKindResolver,
202
+ strategies: strategies
203
+ }, "tool-".concat(item.key || i));
204
+ })
205
+ });
206
+ };
207
+
208
+ // 不显示外层 header,直接渲染 timeline
209
+ if (!showCollapsibleHeader) {
210
+ return /*#__PURE__*/_jsx("div", {
211
+ className: "".concat(styles.thoughtChainBlock).concat(className ? " ".concat(className) : ""),
212
+ style: style,
213
+ children: /*#__PURE__*/_jsx("div", {
214
+ className: styles.thinkingBody,
215
+ children: renderTimeline()
216
+ })
217
+ });
218
+ }
219
+
220
+ // 显示可折叠 header
148
221
  return /*#__PURE__*/_jsxs("div", {
149
- className: styles.thoughtChainBlock,
222
+ className: "".concat(styles.thoughtChainBlock).concat(className ? " ".concat(className) : ""),
223
+ style: style,
150
224
  children: [/*#__PURE__*/_jsx("div", {
151
225
  className: styles.thoughtHeader,
152
226
  onClick: function onClick() {
@@ -156,19 +230,12 @@ var XAdkThoughtChain = function XAdkThoughtChain(_ref4) {
156
230
  className: styles.headerLeft,
157
231
  children: [/*#__PURE__*/_jsx("div", {
158
232
  className: styles.statusIcon,
159
- children: loading ? /*#__PURE__*/_jsx(SyncOutlined, {
160
- spin: true,
161
- style: {
162
- color: "#1677ff"
163
- }
164
- }) : /*#__PURE__*/_jsx(CheckCircleFilled, {
165
- style: {
166
- color: "#52c41a"
167
- }
233
+ children: /*#__PURE__*/_jsx(StatusIcon, {
234
+ status: effectiveStatus
168
235
  })
169
236
  }), /*#__PURE__*/_jsx("span", {
170
237
  className: "".concat(styles.headerTitle).concat(shouldBlink ? " ".concat(styles.blink) : ""),
171
- children: loading ? "深度思考与执行中..." : title
238
+ children: isLoading ? "深度思考与执行中..." : title
172
239
  }), /*#__PURE__*/_jsx("div", {
173
240
  className: "".concat(styles.caret, " ").concat(isOpen ? "open" : ""),
174
241
  children: /*#__PURE__*/_jsx(RightOutlined, {})
@@ -176,24 +243,7 @@ var XAdkThoughtChain = function XAdkThoughtChain(_ref4) {
176
243
  })
177
244
  }), isOpen && /*#__PURE__*/_jsx("div", {
178
245
  className: styles.thinkingBody,
179
- children: /*#__PURE__*/_jsx("div", {
180
- className: styles.timeline,
181
- children: items.map(function (item, i) {
182
- return item.type === "text" ? /*#__PURE__*/_jsx(TimelineTextItem, {
183
- item: item,
184
- blink: shouldBlink
185
- }, item.key || i) : /*#__PURE__*/_jsx(TimelineToolItem, {
186
- msg: item.msg,
187
- collapsible: item.collapsible,
188
- showFnCallDetail: showFnCallDetail,
189
- onConfirm: onConfirm,
190
- blink: shouldBlink,
191
- renderFunctionCall: renderFunctionCall,
192
- toolKindResolver: toolKindResolver,
193
- strategies: strategies
194
- }, "tool-".concat(item.key || i));
195
- })
196
- })
246
+ children: renderTimeline()
197
247
  })]
198
248
  });
199
249
  };