@ai-group/chat-sdk 3.7.4 → 3.8.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 (113) hide show
  1. package/README.md +36 -0
  2. package/dist/cjs/components/DislikeFeedback.js.map +2 -2
  3. package/dist/cjs/components/FileGallery/index.js +2 -1
  4. package/dist/cjs/components/FileGallery/index.js.map +3 -3
  5. package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
  6. package/dist/cjs/components/Sources/components/CarouselCard.js.map +2 -2
  7. package/dist/cjs/components/XAdkChatbot/index.js +94 -18
  8. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  9. package/dist/cjs/components/XAdkChatbot/styles.d.ts +3 -0
  10. package/dist/cjs/components/XAdkChatbot/styles.js +34 -1
  11. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  12. package/dist/cjs/components/XAdkChatbot/utils.d.ts +14 -0
  13. package/dist/cjs/components/XAdkChatbot/utils.js +79 -0
  14. package/dist/cjs/components/XAdkChatbot/utils.js.map +7 -0
  15. package/dist/cjs/components/XAdkProvider/compound/Chatbot.d.ts +3 -3
  16. package/dist/cjs/components/XAdkProvider/compound/Chatbot.js +3 -1
  17. package/dist/cjs/components/XAdkProvider/compound/Chatbot.js.map +2 -2
  18. package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.js.map +2 -2
  19. package/dist/cjs/components/XAdkProvider/compound/Messages.js +2 -0
  20. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
  21. package/dist/cjs/components/XAdkProvider/compound/Sidebar.js.map +2 -2
  22. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  23. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
  24. package/dist/cjs/components/XAdkProvider/index.js +3 -0
  25. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  26. package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
  27. package/dist/cjs/components/XAdkThoughtChain/index.js +23 -28
  28. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  29. package/dist/cjs/components/XAdkThoughtChain/styles.d.ts +3 -1
  30. package/dist/cjs/components/XAdkThoughtChain/styles.js +63 -29
  31. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  32. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  33. package/dist/cjs/components/XAiConversations/index.js +2 -1
  34. package/dist/cjs/components/XAiConversations/index.js.map +3 -3
  35. package/dist/cjs/components/XAiProvider/index.js.map +2 -2
  36. package/dist/cjs/components/XAiSender/index.js.map +2 -2
  37. package/dist/cjs/hooks/useADKChat.d.ts +6 -1
  38. package/dist/cjs/hooks/useADKChat.js +22 -3
  39. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  40. package/dist/cjs/hooks/useADKMessageQueue.d.ts +22 -0
  41. package/dist/cjs/hooks/useADKMessageQueue.js +105 -0
  42. package/dist/cjs/hooks/useADKMessageQueue.js.map +7 -0
  43. package/dist/cjs/index.d.ts +3 -1
  44. package/dist/cjs/index.js +3 -0
  45. package/dist/cjs/index.js.map +2 -2
  46. package/dist/cjs/react/index.d.ts +2 -0
  47. package/dist/cjs/react/index.js +3 -0
  48. package/dist/cjs/react/index.js.map +2 -2
  49. package/dist/cjs/types/XAdkChatbot.d.ts +13 -0
  50. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  51. package/dist/cjs/types/XAdkProvider.d.ts +7 -0
  52. package/dist/cjs/types/XAdkProvider.js.map +2 -2
  53. package/dist/cjs/types/XAdkThoughtChain.d.ts +2 -0
  54. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  55. package/dist/cjs/types/antdx.d.ts +2 -2
  56. package/dist/cjs/types/antdx.js.map +1 -1
  57. package/dist/esm/components/DislikeFeedback.js.map +1 -1
  58. package/dist/esm/components/FileGallery/index.js +2 -1
  59. package/dist/esm/components/FileGallery/index.js.map +1 -1
  60. package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
  61. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -1
  62. package/dist/esm/components/XAdkChatbot/index.js +89 -14
  63. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  64. package/dist/esm/components/XAdkChatbot/styles.d.ts +3 -0
  65. package/dist/esm/components/XAdkChatbot/styles.js +27 -24
  66. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  67. package/dist/esm/components/XAdkChatbot/utils.d.ts +14 -0
  68. package/dist/esm/components/XAdkChatbot/utils.js +66 -0
  69. package/dist/esm/components/XAdkChatbot/utils.js.map +1 -0
  70. package/dist/esm/components/XAdkProvider/compound/Chatbot.d.ts +3 -3
  71. package/dist/esm/components/XAdkProvider/compound/Chatbot.js +10 -7
  72. package/dist/esm/components/XAdkProvider/compound/Chatbot.js.map +1 -1
  73. package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.js.map +1 -1
  74. package/dist/esm/components/XAdkProvider/compound/Messages.js +5 -1
  75. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  76. package/dist/esm/components/XAdkProvider/compound/Sidebar.js.map +1 -1
  77. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  78. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
  79. package/dist/esm/components/XAdkProvider/index.js +4 -2
  80. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  81. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
  82. package/dist/esm/components/XAdkThoughtChain/index.js +52 -78
  83. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  84. package/dist/esm/components/XAdkThoughtChain/styles.d.ts +3 -1
  85. package/dist/esm/components/XAdkThoughtChain/styles.js +28 -26
  86. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  87. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  88. package/dist/esm/components/XAiConversations/index.js +2 -1
  89. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  90. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  91. package/dist/esm/components/XAiSender/index.js.map +1 -1
  92. package/dist/esm/hooks/useADKChat.d.ts +6 -1
  93. package/dist/esm/hooks/useADKChat.js +44 -17
  94. package/dist/esm/hooks/useADKChat.js.map +1 -1
  95. package/dist/esm/hooks/useADKMessageQueue.d.ts +22 -0
  96. package/dist/esm/hooks/useADKMessageQueue.js +157 -0
  97. package/dist/esm/hooks/useADKMessageQueue.js.map +1 -0
  98. package/dist/esm/index.d.ts +3 -1
  99. package/dist/esm/index.js +2 -1
  100. package/dist/esm/index.js.map +1 -1
  101. package/dist/esm/react/index.d.ts +2 -0
  102. package/dist/esm/react/index.js +1 -0
  103. package/dist/esm/react/index.js.map +1 -1
  104. package/dist/esm/types/XAdkChatbot.d.ts +13 -0
  105. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  106. package/dist/esm/types/XAdkProvider.d.ts +7 -0
  107. package/dist/esm/types/XAdkProvider.js.map +1 -1
  108. package/dist/esm/types/XAdkThoughtChain.d.ts +2 -0
  109. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  110. package/dist/esm/types/antdx.d.ts +2 -2
  111. package/dist/esm/types/antdx.js.map +1 -1
  112. package/dist/umd/chat-sdk.min.js +1 -1
  113. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","Tree","Dropdown","Input","FileOutlined","FolderOutlined","MoreOutlined","clsx","useStyles","useFolderDrag","jsx","_jsx","jsxs","_jsxs","AntDirectoryTree","DirectoryTree","InlineEditInput","_ref","editKey","value","className","onValueChange","onConfirm","onCancel","_useState","_useState2","_slicedToArray","draft","setDraft","committedRef","current","commit","size","onChange","e","target","onBlur","onPressEnter","onKeyDown","stopPropagation","key","autoFocus","onClick","onMouseDown","onSelect","onFocus","DirectoryTreeComponent","_ref2","treeData","selectedKeys","expandedKeys","onExpand","_ref2$showLine","showLine","switcherIcon","_ref2$defaultExpandAl","defaultExpandAll","directoryIcons","directoryTitle","moreActions","width","draggable","onDrop","editNode","onEditValueChange","onEditConfirm","onEditCancel","createInfo","onStartRename","onCreateNode","styles","getIcon","node","type","icon","directory","filePath","path","toLowerCase","extension","split","pop","buildPathSegments","parentSegments","arguments","length","undefined","concat","_toConsumableArray","filter","s","renderInlineInput","treeNodeTitle","children","inlineInput","dragMode","handleDragDrop","dragNode","dropNode","dropPosition","dragNd","dropNd","originalDragNode","_originalNode","originalDropNode","dragKey","String","dropKey","dragFileName","newPath","fileName","title","extra","oldPath","isLeaf","dropParentPath","includes","substring","lastIndexOf","handleDragEnterExpand","nodeKey","isExpanded","expanded","nativeEvent","_useFolderDrag","onDragEnterExpand","onDragStart","onDragEnd","onItemDragEnter","onItemDragOver","onItemDragLeave","onItemDrop","onContainerDragOver","onContainerDrop","canDragNode","convertToTreeData","nodes","parentKey","result","map","pathSegments","fullPath","join","replace","isEditing","nodeChildren","baseNode","currentValue","titleContent","treeNodeTitleHover","menu","startRename","createNode","options","trigger","placement","moreIcon","nodeData","draggableDiv","treeNodeWrapper","dragNodeHandle","onDragEnter","onDragOver","onDragLeave","mode","targetParentKey","tempNode","_isTempNode","push","treeDataConverted","handleSelect","keys","info","_info$nativeEvent","closest","titleNode","directoryPanel","style","directoryTreeContent","multiple","blockNode"],"sources":["../../../../src/components/FolderTree/DirectoryTree.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Tree, Dropdown, Input } from \"antd\";\nimport { FileOutlined, FolderOutlined, MoreOutlined } from \"@ant-design/icons\";\nimport type { TreeProps } from \"antd\";\nimport type { DataNode } from \"antd/es/tree\";\nimport clsx from \"clsx\";\nimport type {\n FolderTreeData,\n FolderTreeProps,\n EditNodeInfo,\n CreateNodeContext,\n} from \"./types\";\nimport { useStyles } from \"./styles\";\nimport { useFolderDrag, type DropPosition } from \"./useFolderDrag\";\n\nconst { DirectoryTree: AntDirectoryTree } = Tree;\n\nexport interface DirectoryTreeComponentProps {\n treeData: FolderTreeData[];\n directoryIcons?: FolderTreeProps[\"directoryIcons\"];\n selectedKeys?: string[];\n expandedKeys?: string[];\n onSelect?: TreeProps[\"onSelect\"];\n onExpand?: TreeProps[\"onExpand\"];\n showLine?: FolderTreeProps[\"showLine\"];\n switcherIcon?: FolderTreeProps[\"switcherIcon\"];\n defaultExpandAll?: boolean;\n className?: string;\n directoryTitle?: FolderTreeProps[\"directoryTitle\"];\n moreActions?: FolderTreeProps[\"moreActions\"];\n width?: number | string;\n draggable?: FolderTreeProps[\"draggable\"];\n onDrop?: FolderTreeProps[\"onDrop\"];\n /** 当前编辑节点信息 */\n editNode?: EditNodeInfo | null;\n /** 编辑值变化回调 */\n onEditValueChange?: (value: string) => void;\n /** 编辑确认回调 */\n onEditConfirm?: (value?: string) => void;\n /** 编辑取消回调 */\n onEditCancel?: () => void;\n /** 新建上下文 */\n createInfo?: CreateNodeContext | null;\n /** 开始重命名回调(由父组件注入) */\n onStartRename?: (fullPath: string, node: FolderTreeData) => void;\n /** 创建节点回调(由父组件注入) */\n onCreateNode?: (\n parentPath: string,\n options: { type: \"file\" | \"folder\"; defaultName?: string; extra?: any },\n ) => void;\n}\n\ninterface InlineEditInputProps {\n editKey: string;\n value: string;\n className?: string;\n onValueChange?: (value: string) => void;\n onConfirm?: (value?: string) => void;\n onCancel?: () => void;\n}\n\nconst InlineEditInput: React.FC<InlineEditInputProps> = ({\n editKey,\n value,\n className,\n onValueChange,\n onConfirm,\n onCancel,\n}) => {\n const [draft, setDraft] = useState(value);\n const committedRef = useRef(false);\n\n useEffect(() => {\n setDraft(value);\n committedRef.current = false;\n }, [editKey, value]);\n\n const commit = useCallback(() => {\n if (committedRef.current) return;\n committedRef.current = true;\n onValueChange?.(draft);\n onConfirm?.(draft);\n }, [draft, onConfirm, onValueChange]);\n\n return (\n <Input\n size=\"small\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onPressEnter={commit}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Escape\") {\n committedRef.current = true;\n onCancel?.();\n }\n }}\n autoFocus\n className={className}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onSelect={(e) => e.stopPropagation()}\n onFocus={(e) => e.stopPropagation()}\n />\n );\n};\n\nconst DirectoryTreeComponent: React.FC<DirectoryTreeComponentProps> = ({\n treeData,\n selectedKeys,\n expandedKeys,\n onSelect,\n onExpand,\n showLine = false,\n switcherIcon,\n defaultExpandAll = true,\n className,\n directoryIcons,\n directoryTitle,\n moreActions,\n width,\n draggable,\n onDrop,\n editNode,\n onEditValueChange,\n onEditConfirm,\n onEditCancel,\n createInfo,\n onStartRename,\n onCreateNode,\n}) => {\n const styles = useStyles();\n\n const getIcon = useCallback(\n (node: FolderTreeData) => {\n if (directoryIcons === false || directoryIcons === null) {\n return null;\n }\n if (node.type == \"folder\") {\n const icon = directoryIcons?.directory;\n if (typeof icon === \"function\") return icon();\n return icon || <FolderOutlined />;\n }\n const filePath = node.path.toLowerCase();\n const extension = filePath.split(\".\").pop();\n if (extension) {\n const icon = directoryIcons?.[extension];\n if (icon) return typeof icon === \"function\" ? icon() : icon;\n }\n return <FileOutlined />;\n },\n [directoryIcons],\n );\n\n const buildPathSegments = useCallback(\n (node: FolderTreeData, parentSegments: string[] = []): string[] => {\n if (node.path === \"/\" && parentSegments.length === 0) {\n return [\"/\"];\n }\n return [...parentSegments, node.path].filter((s) => s !== \"\");\n },\n [],\n );\n\n const renderInlineInput = useCallback(\n (key: string, value: string) => (\n <span className={styles.treeNodeTitle}>\n <InlineEditInput\n editKey={key}\n value={value}\n className={styles.inlineInput}\n onValueChange={onEditValueChange}\n onConfirm={onEditConfirm}\n onCancel={onEditCancel}\n />\n </span>\n ),\n [onEditValueChange, onEditConfirm, onEditCancel, styles],\n );\n\n // ====== 拖拽模式 ======\n const dragMode = draggable === true ? \"file\" : draggable || false;\n\n // ====== 自定义拖拽 hook ======\n const handleDragDrop = useCallback(\n (dragNode: DataNode, dropNode: DataNode, dropPosition: DropPosition) => {\n const dragNd = dragNode as DataNode & { _originalNode?: FolderTreeData };\n const dropNd = dropNode as DataNode & { _originalNode?: FolderTreeData };\n const originalDragNode = dragNd._originalNode;\n const originalDropNode = dropNd._originalNode;\n if (!originalDragNode) return;\n\n const dragKey = String(dragNode.key);\n const dropKey = String(dropNode.key);\n const dragFileName = originalDragNode.path;\n let newPath: string;\n\n // 拖到底部 drop zone:放在根级别末尾\n if (!originalDropNode && dropKey === \"__bottom_placeholder__\") {\n newPath = dragFileName;\n onDrop?.({\n fileName: originalDragNode.title,\n extra: originalDragNode.extra,\n oldPath: dragKey,\n newPath,\n dragNode: originalDragNode,\n dropNode: { title: \"\", path: \"\" },\n });\n return;\n }\n\n if (!originalDropNode) return;\n\n if (!dropNode.isLeaf && dropPosition === 0) {\n // 拖入文件夹内部\n newPath = `${dropKey}/${dragFileName}`;\n } else {\n // 拖到节点旁边(同级)\n const dropParentPath = dropKey.includes(\"/\")\n ? dropKey.substring(0, dropKey.lastIndexOf(\"/\"))\n : \"\";\n newPath = dropParentPath\n ? `${dropParentPath}/${dragFileName}`\n : dragFileName;\n }\n\n onDrop?.({\n fileName: originalDragNode.title,\n extra: originalDragNode.extra,\n oldPath: dragKey,\n newPath,\n dragNode: originalDragNode,\n dropNode: originalDropNode,\n });\n },\n [onDrop],\n );\n\n const handleDragEnterExpand = useCallback(\n (nodeKey: string) => {\n const isExpanded = expandedKeys?.includes(nodeKey);\n if (!isExpanded) {\n onExpand?.([...(expandedKeys || []), nodeKey], {\n node: null as any,\n expanded: true,\n nativeEvent: null as any,\n });\n }\n },\n [expandedKeys, onExpand],\n );\n\n const {\n onDragStart,\n onDragEnd,\n onItemDragEnter,\n onItemDragOver,\n onItemDragLeave,\n onItemDrop,\n onContainerDragOver,\n onContainerDrop,\n canDragNode,\n } = useFolderDrag({\n dragMode,\n onDrop: handleDragDrop,\n onDragEnterExpand: handleDragEnterExpand,\n });\n\n // ====== 转换树数据 ======\n // 注意:convertToTreeData 不依赖拖拽状态,拖拽效果通过 DOM 操作实现\n const convertToTreeData = useCallback(\n (\n nodes: FolderTreeData[],\n parentSegments: string[] = [],\n parentKey: string = \"\",\n ): DataNode[] => {\n const result = nodes.map((node) => {\n const pathSegments = buildPathSegments(node, parentSegments);\n const fullPath = pathSegments.join(\"/\").replace(/^\\/+/, \"\");\n\n const isEditing = editNode && editNode.key === fullPath;\n\n const nodeChildren = node.children\n ? convertToTreeData(node.children, pathSegments, fullPath)\n : undefined;\n\n const baseNode: any = {\n key: fullPath,\n path: fullPath,\n pathSegments,\n icon: getIcon(node),\n isLeaf: !(node.type === \"folder\"),\n _originalNode: node,\n children: nodeChildren,\n };\n\n // 编辑态:直接渲染 inline input\n if (isEditing) {\n baseNode.title = renderInlineInput(\n editNode!.key,\n editNode!.currentValue,\n );\n return baseNode;\n }\n\n // title 内容(按钮、菜单等)\n const titleContent = (\n <span\n className={clsx(\n styles.treeNodeTitle,\n moreActions && styles.treeNodeTitleHover,\n )}\n >\n <span>{node.title}</span>\n {moreActions && (\n <Dropdown\n menu={moreActions(node, {\n startRename: () => onStartRename?.(fullPath, node),\n createNode: (options) => onCreateNode?.(fullPath, options),\n })}\n trigger={[\"click\"]}\n placement=\"bottomRight\"\n >\n <span\n className={clsx(styles.moreIcon, \"folder-tree-more-icon\")}\n onClick={(e) => e.stopPropagation()}\n >\n <MoreOutlined />\n </span>\n </Dropdown>\n )}\n </span>\n );\n\n // 启用拖拽时:在 title 外层包裹具有 data-node-key 属性的容器,\n // 用于 DOM 查询和事件绑定。拖拽状态通过 CSS class 控制。\n if (dragMode) {\n const nodeData = baseNode as DataNode & {\n _isTempNode?: boolean;\n };\n const draggableDiv = canDragNode(nodeData);\n\n baseNode.title = (\n <div\n className={clsx(\n styles.treeNodeWrapper,\n draggableDiv && styles.dragNodeHandle,\n )}\n data-node-key={fullPath}\n draggable={draggableDiv}\n onDragStart={\n draggableDiv ? (e) => onDragStart(e, baseNode) : undefined\n }\n onDragEnd={draggableDiv ? onDragEnd : undefined}\n onDragEnter={(e) => onItemDragEnter(e, baseNode)}\n onDragOver={(e) => onItemDragOver(e, baseNode)}\n onDragLeave={onItemDragLeave}\n onDrop={(e) => onItemDrop(e, baseNode)}\n >\n {titleContent}\n </div>\n );\n } else {\n baseNode.title = titleContent;\n }\n\n return baseNode;\n });\n\n // 新建模式:在目标父节点下插入临时节点\n if (createInfo && editNode && editNode.mode === \"create\") {\n const targetParentKey = createInfo.parentKey;\n if (\n targetParentKey === parentKey ||\n (targetParentKey === \"\" && parentKey === \"\") ||\n (targetParentKey === \"/\" && parentKey === \"\")\n ) {\n const tempNode: any = {\n key: editNode.key,\n title: renderInlineInput(editNode.key, editNode.currentValue),\n icon:\n createInfo.type === \"folder\" ? (\n <FolderOutlined />\n ) : (\n <FileOutlined />\n ),\n isLeaf: createInfo.type === \"file\",\n path: editNode.key,\n pathSegments: [editNode.key],\n _originalNode: null,\n _isTempNode: true,\n };\n result.push(tempNode);\n }\n }\n\n return result;\n },\n [\n buildPathSegments,\n getIcon,\n moreActions,\n styles,\n editNode,\n renderInlineInput,\n createInfo,\n onStartRename,\n onCreateNode,\n dragMode,\n canDragNode,\n onDragStart,\n onDragEnd,\n onItemDragEnter,\n onItemDragOver,\n onItemDragLeave,\n onItemDrop,\n ],\n );\n\n const treeDataConverted = useMemo(\n () => convertToTreeData(treeData, [], \"\"),\n [treeData, convertToTreeData],\n );\n\n const handleSelect: TreeProps[\"onSelect\"] = useCallback(\n (keys: any, info: any) => {\n // 编辑态不响应选中\n if (editNode) return;\n // 临时节点不可选中\n const node = info.node as DataNode & { _isTempNode?: boolean };\n if (node._isTempNode) return;\n // 点击 moreActions 区域不触发选中\n const target = info.nativeEvent?.target as HTMLElement | null;\n if (\n target &&\n (target.closest(\".folder-tree-more-icon\") ||\n target.closest(\".ant-dropdown\"))\n ) {\n return;\n }\n onSelect?.(keys, info);\n },\n [onSelect, editNode],\n );\n\n const titleNode =\n directoryTitle === false || directoryTitle === null\n ? null\n : typeof directoryTitle === \"function\"\n ? directoryTitle()\n : directoryTitle;\n\n return (\n <div className={clsx(styles.directoryPanel, className)} style={{ width }}>\n {titleNode && <div className={styles.directoryTitle}>{titleNode}</div>}\n <div\n className={styles.directoryTreeContent}\n onDragOver={dragMode ? onContainerDragOver : undefined}\n onDrop={dragMode ? onContainerDrop : undefined}\n >\n <AntDirectoryTree\n style={\n {\n \"--ant-tree-directory-node-selected-bg\": \"rgba(0,0,0,0.03)\",\n \"--ant-tree-directory-node-selected-color\": \"#1a1c1e\",\n } as React.CSSProperties\n }\n treeData={treeDataConverted}\n selectedKeys={selectedKeys}\n expandedKeys={expandedKeys}\n onSelect={handleSelect}\n onExpand={onExpand}\n multiple={false}\n blockNode\n showLine={showLine as any}\n switcherIcon={switcherIcon}\n defaultExpandAll={defaultExpandAll}\n draggable={false}\n />\n </div>\n </div>\n );\n};\n\nexport default DirectoryTreeComponent;\n"],"mappings":";;AAAA,OAAOA,KAAK,IACVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SAASC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,QAAQ,MAAM;AAC5C,SAASC,YAAY,EAAEC,cAAc,EAAEC,YAAY,QAAQ,mBAAmB;AAG9E,OAAOC,IAAI,MAAM,MAAM;AAOvB,SAASC,SAAS;AAClB,SAASC,aAAa;AAA6C,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAEnE,IAAuBC,gBAAgB,GAAKb,IAAI,CAAxCc,aAAa;AA8CrB,IAAMC,eAA+C,GAAG,SAAlDA,eAA+CA,CAAAC,IAAA,EAO/C;EAAA,IANJC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IACPC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,SAAS,GAAAH,IAAA,CAATG,SAAS;IACTC,aAAa,GAAAJ,IAAA,CAAbI,aAAa;IACbC,SAAS,GAAAL,IAAA,CAATK,SAAS;IACTC,QAAQ,GAAAN,IAAA,CAARM,QAAQ;EAER,IAAAC,SAAA,GAA0BxB,QAAQ,CAACmB,KAAK,CAAC;IAAAM,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAlCG,KAAK,GAAAF,UAAA;IAAEG,QAAQ,GAAAH,UAAA;EACtB,IAAMI,YAAY,GAAG9B,MAAM,CAAC,KAAK,CAAC;EAElCF,SAAS,CAAC,YAAM;IACd+B,QAAQ,CAACT,KAAK,CAAC;IACfU,YAAY,CAACC,OAAO,GAAG,KAAK;EAC9B,CAAC,EAAE,CAACZ,OAAO,EAAEC,KAAK,CAAC,CAAC;EAEpB,IAAMY,MAAM,GAAGnC,WAAW,CAAC,YAAM;IAC/B,IAAIiC,YAAY,CAACC,OAAO,EAAE;IAC1BD,YAAY,CAACC,OAAO,GAAG,IAAI;IAC3BT,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAGM,KAAK,CAAC;IACtBL,SAAS,aAATA,SAAS,eAATA,SAAS,CAAGK,KAAK,CAAC;EACpB,CAAC,EAAE,CAACA,KAAK,EAAEL,SAAS,EAAED,aAAa,CAAC,CAAC;EAErC,oBACEV,IAAA,CAACR,KAAK;IACJ6B,IAAI,EAAC,OAAO;IACZb,KAAK,EAAEQ,KAAM;IACbM,QAAQ,EAAE,SAAAA,SAACC,CAAC;MAAA,OAAKN,QAAQ,CAACM,CAAC,CAACC,MAAM,CAAChB,KAAK,CAAC;IAAA,CAAC;IAC1CiB,MAAM,EAAEL,MAAO;IACfM,YAAY,EAAEN,MAAO;IACrBO,SAAS,EAAE,SAAAA,UAACJ,CAAC,EAAK;MAChBA,CAAC,CAACK,eAAe,CAAC,CAAC;MACnB,IAAIL,CAAC,CAACM,GAAG,KAAK,QAAQ,EAAE;QACtBX,YAAY,CAACC,OAAO,GAAG,IAAI;QAC3BP,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAG,CAAC;MACd;IACF,CAAE;IACFkB,SAAS;IACTrB,SAAS,EAAEA,SAAU;IACrBsB,OAAO,EAAE,SAAAA,QAACR,CAAC;MAAA,OAAKA,CAAC,CAACK,eAAe,CAAC,CAAC;IAAA,CAAC;IACpCI,WAAW,EAAE,SAAAA,YAACT,CAAC;MAAA,OAAKA,CAAC,CAACK,eAAe,CAAC,CAAC;IAAA,CAAC;IACxCK,QAAQ,EAAE,SAAAA,SAACV,CAAC;MAAA,OAAKA,CAAC,CAACK,eAAe,CAAC,CAAC;IAAA,CAAC;IACrCM,OAAO,EAAE,SAAAA,QAACX,CAAC;MAAA,OAAKA,CAAC,CAACK,eAAe,CAAC,CAAC;IAAA;EAAC,CACrC,CAAC;AAEN,CAAC;AAED,IAAMO,sBAA6D,GAAG,SAAhEA,sBAA6DA,CAAAC,KAAA,EAuB7D;EAAA,IAtBJC,QAAQ,GAAAD,KAAA,CAARC,QAAQ;IACRC,YAAY,GAAAF,KAAA,CAAZE,YAAY;IACZC,YAAY,GAAAH,KAAA,CAAZG,YAAY;IACZN,QAAQ,GAAAG,KAAA,CAARH,QAAQ;IACRO,QAAQ,GAAAJ,KAAA,CAARI,QAAQ;IAAAC,cAAA,GAAAL,KAAA,CACRM,QAAQ;IAARA,QAAQ,GAAAD,cAAA,cAAG,KAAK,GAAAA,cAAA;IAChBE,YAAY,GAAAP,KAAA,CAAZO,YAAY;IAAAC,qBAAA,GAAAR,KAAA,CACZS,gBAAgB;IAAhBA,gBAAgB,GAAAD,qBAAA,cAAG,IAAI,GAAAA,qBAAA;IACvBnC,SAAS,GAAA2B,KAAA,CAAT3B,SAAS;IACTqC,cAAc,GAAAV,KAAA,CAAdU,cAAc;IACdC,cAAc,GAAAX,KAAA,CAAdW,cAAc;IACdC,WAAW,GAAAZ,KAAA,CAAXY,WAAW;IACXC,KAAK,GAAAb,KAAA,CAALa,KAAK;IACLC,SAAS,GAAAd,KAAA,CAATc,SAAS;IACTC,MAAM,GAAAf,KAAA,CAANe,MAAM;IACNC,QAAQ,GAAAhB,KAAA,CAARgB,QAAQ;IACRC,iBAAiB,GAAAjB,KAAA,CAAjBiB,iBAAiB;IACjBC,aAAa,GAAAlB,KAAA,CAAbkB,aAAa;IACbC,YAAY,GAAAnB,KAAA,CAAZmB,YAAY;IACZC,UAAU,GAAApB,KAAA,CAAVoB,UAAU;IACVC,aAAa,GAAArB,KAAA,CAAbqB,aAAa;IACbC,YAAY,GAAAtB,KAAA,CAAZsB,YAAY;EAEZ,IAAMC,MAAM,GAAG9D,SAAS,CAAC,CAAC;EAE1B,IAAM+D,OAAO,GAAG3E,WAAW,CACzB,UAAC4E,IAAoB,EAAK;IACxB,IAAIf,cAAc,KAAK,KAAK,IAAIA,cAAc,KAAK,IAAI,EAAE;MACvD,OAAO,IAAI;IACb;IACA,IAAIe,IAAI,CAACC,IAAI,IAAI,QAAQ,EAAE;MACzB,IAAMC,IAAI,GAAGjB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEkB,SAAS;MACtC,IAAI,OAAOD,IAAI,KAAK,UAAU,EAAE,OAAOA,IAAI,CAAC,CAAC;MAC7C,OAAOA,IAAI,iBAAI/D,IAAA,CAACN,cAAc,IAAE,CAAC;IACnC;IACA,IAAMuE,QAAQ,GAAGJ,IAAI,CAACK,IAAI,CAACC,WAAW,CAAC,CAAC;IACxC,IAAMC,SAAS,GAAGH,QAAQ,CAACI,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAC;IAC3C,IAAIF,SAAS,EAAE;MACb,IAAML,KAAI,GAAGjB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGsB,SAAS,CAAC;MACxC,IAAIL,KAAI,EAAE,OAAO,OAAOA,KAAI,KAAK,UAAU,GAAGA,KAAI,CAAC,CAAC,GAAGA,KAAI;IAC7D;IACA,oBAAO/D,IAAA,CAACP,YAAY,IAAE,CAAC;EACzB,CAAC,EACD,CAACqD,cAAc,CACjB,CAAC;EAED,IAAMyB,iBAAiB,GAAGtF,WAAW,CACnC,UAAC4E,IAAoB,EAA8C;IAAA,IAA5CW,cAAwB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;IAClD,IAAIZ,IAAI,CAACK,IAAI,KAAK,GAAG,IAAIM,cAAc,CAACE,MAAM,KAAK,CAAC,EAAE;MACpD,OAAO,CAAC,GAAG,CAAC;IACd;IACA,OAAO,GAAAE,MAAA,CAAAC,kBAAA,CAAIL,cAAc,IAAEX,IAAI,CAACK,IAAI,GAAEY,MAAM,CAAC,UAACC,CAAC;MAAA,OAAKA,CAAC,KAAK,EAAE;IAAA,EAAC;EAC/D,CAAC,EACD,EACF,CAAC;EAED,IAAMC,iBAAiB,GAAG/F,WAAW,CACnC,UAAC4C,GAAW,EAAErB,KAAa;IAAA,oBACzBR,IAAA;MAAMS,SAAS,EAAEkD,MAAM,CAACsB,aAAc;MAAAC,QAAA,eACpClF,IAAA,CAACK,eAAe;QACdE,OAAO,EAAEsB,GAAI;QACbrB,KAAK,EAAEA,KAAM;QACbC,SAAS,EAAEkD,MAAM,CAACwB,WAAY;QAC9BzE,aAAa,EAAE2C,iBAAkB;QACjC1C,SAAS,EAAE2C,aAAc;QACzB1C,QAAQ,EAAE2C;MAAa,CACxB;IAAC,CACE,CAAC;EAAA,CACR,EACD,CAACF,iBAAiB,EAAEC,aAAa,EAAEC,YAAY,EAAEI,MAAM,CACzD,CAAC;;EAED;EACA,IAAMyB,QAAQ,GAAGlC,SAAS,KAAK,IAAI,GAAG,MAAM,GAAGA,SAAS,IAAI,KAAK;;EAEjE;EACA,IAAMmC,cAAc,GAAGpG,WAAW,CAChC,UAACqG,QAAkB,EAAEC,QAAkB,EAAEC,YAA0B,EAAK;IACtE,IAAMC,MAAM,GAAGH,QAAyD;IACxE,IAAMI,MAAM,GAAGH,QAAyD;IACxE,IAAMI,gBAAgB,GAAGF,MAAM,CAACG,aAAa;IAC7C,IAAMC,gBAAgB,GAAGH,MAAM,CAACE,aAAa;IAC7C,IAAI,CAACD,gBAAgB,EAAE;IAEvB,IAAMG,OAAO,GAAGC,MAAM,CAACT,QAAQ,CAACzD,GAAG,CAAC;IACpC,IAAMmE,OAAO,GAAGD,MAAM,CAACR,QAAQ,CAAC1D,GAAG,CAAC;IACpC,IAAMoE,YAAY,GAAGN,gBAAgB,CAACzB,IAAI;IAC1C,IAAIgC,OAAe;;IAEnB;IACA,IAAI,CAACL,gBAAgB,IAAIG,OAAO,KAAK,wBAAwB,EAAE;MAC7DE,OAAO,GAAGD,YAAY;MACtB9C,MAAM,aAANA,MAAM,eAANA,MAAM,CAAG;QACPgD,QAAQ,EAAER,gBAAgB,CAACS,KAAK;QAChCC,KAAK,EAAEV,gBAAgB,CAACU,KAAK;QAC7BC,OAAO,EAAER,OAAO;QAChBI,OAAO,EAAPA,OAAO;QACPZ,QAAQ,EAAEK,gBAAgB;QAC1BJ,QAAQ,EAAE;UAAEa,KAAK,EAAE,EAAE;UAAElC,IAAI,EAAE;QAAG;MAClC,CAAC,CAAC;MACF;IACF;IAEA,IAAI,CAAC2B,gBAAgB,EAAE;IAEvB,IAAI,CAACN,QAAQ,CAACgB,MAAM,IAAIf,YAAY,KAAK,CAAC,EAAE;MAC1C;MACAU,OAAO,MAAAtB,MAAA,CAAMoB,OAAO,OAAApB,MAAA,CAAIqB,YAAY,CAAE;IACxC,CAAC,MAAM;MACL;MACA,IAAMO,cAAc,GAAGR,OAAO,CAACS,QAAQ,CAAC,GAAG,CAAC,GACxCT,OAAO,CAACU,SAAS,CAAC,CAAC,EAAEV,OAAO,CAACW,WAAW,CAAC,GAAG,CAAC,CAAC,GAC9C,EAAE;MACNT,OAAO,GAAGM,cAAc,MAAA5B,MAAA,CACjB4B,cAAc,OAAA5B,MAAA,CAAIqB,YAAY,IACjCA,YAAY;IAClB;IAEA9C,MAAM,aAANA,MAAM,eAANA,MAAM,CAAG;MACPgD,QAAQ,EAAER,gBAAgB,CAACS,KAAK;MAChCC,KAAK,EAAEV,gBAAgB,CAACU,KAAK;MAC7BC,OAAO,EAAER,OAAO;MAChBI,OAAO,EAAPA,OAAO;MACPZ,QAAQ,EAAEK,gBAAgB;MAC1BJ,QAAQ,EAAEM;IACZ,CAAC,CAAC;EACJ,CAAC,EACD,CAAC1C,MAAM,CACT,CAAC;EAED,IAAMyD,qBAAqB,GAAG3H,WAAW,CACvC,UAAC4H,OAAe,EAAK;IACnB,IAAMC,UAAU,GAAGvE,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEkE,QAAQ,CAACI,OAAO,CAAC;IAClD,IAAI,CAACC,UAAU,EAAE;MACftE,QAAQ,aAARA,QAAQ,eAARA,QAAQ,IAAAoC,MAAA,CAAAC,kBAAA,CAAQtC,YAAY,IAAI,EAAE,IAAGsE,OAAO,IAAG;QAC7ChD,IAAI,EAAE,IAAW;QACjBkD,QAAQ,EAAE,IAAI;QACdC,WAAW,EAAE;MACf,CAAC,CAAC;IACJ;EACF,CAAC,EACD,CAACzE,YAAY,EAAEC,QAAQ,CACzB,CAAC;EAED,IAAAyE,cAAA,GAUInH,aAAa,CAAC;MAChBsF,QAAQ,EAARA,QAAQ;MACRjC,MAAM,EAAEkC,cAAc;MACtB6B,iBAAiB,EAAEN;IACrB,CAAC,CAAC;IAbAO,WAAW,GAAAF,cAAA,CAAXE,WAAW;IACXC,SAAS,GAAAH,cAAA,CAATG,SAAS;IACTC,eAAe,GAAAJ,cAAA,CAAfI,eAAe;IACfC,cAAc,GAAAL,cAAA,CAAdK,cAAc;IACdC,eAAe,GAAAN,cAAA,CAAfM,eAAe;IACfC,UAAU,GAAAP,cAAA,CAAVO,UAAU;IACVC,mBAAmB,GAAAR,cAAA,CAAnBQ,mBAAmB;IACnBC,eAAe,GAAAT,cAAA,CAAfS,eAAe;IACfC,WAAW,GAAAV,cAAA,CAAXU,WAAW;;EAOb;EACA;EACA,IAAMC,iBAAiB,GAAG3I,WAAW,CACnC,UACE4I,KAAuB,EAGR;IAAA,IAFfrD,cAAwB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;IAAA,IAC7BqD,SAAiB,GAAArD,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;IAEtB,IAAMsD,MAAM,GAAGF,KAAK,CAACG,GAAG,CAAC,UAACnE,IAAI,EAAK;MACjC,IAAMoE,YAAY,GAAG1D,iBAAiB,CAACV,IAAI,EAAEW,cAAc,CAAC;MAC5D,IAAM0D,QAAQ,GAAGD,YAAY,CAACE,IAAI,CAAC,GAAG,CAAC,CAACC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;MAE3D,IAAMC,SAAS,GAAGjF,QAAQ,IAAIA,QAAQ,CAACvB,GAAG,KAAKqG,QAAQ;MAEvD,IAAMI,YAAY,GAAGzE,IAAI,CAACqB,QAAQ,GAC9B0C,iBAAiB,CAAC/D,IAAI,CAACqB,QAAQ,EAAE+C,YAAY,EAAEC,QAAQ,CAAC,GACxDvD,SAAS;MAEb,IAAM4D,QAAa,GAAG;QACpB1G,GAAG,EAAEqG,QAAQ;QACbhE,IAAI,EAAEgE,QAAQ;QACdD,YAAY,EAAZA,YAAY;QACZlE,IAAI,EAAEH,OAAO,CAACC,IAAI,CAAC;QACnB0C,MAAM,EAAE,EAAE1C,IAAI,CAACC,IAAI,KAAK,QAAQ,CAAC;QACjC8B,aAAa,EAAE/B,IAAI;QACnBqB,QAAQ,EAAEoD;MACZ,CAAC;;MAED;MACA,IAAID,SAAS,EAAE;QACbE,QAAQ,CAACnC,KAAK,GAAGpB,iBAAiB,CAChC5B,QAAQ,CAAEvB,GAAG,EACbuB,QAAQ,CAAEoF,YACZ,CAAC;QACD,OAAOD,QAAQ;MACjB;;MAEA;MACA,IAAME,YAAY,gBAChBvI,KAAA;QACEO,SAAS,EAAEb,IAAI,CACb+D,MAAM,CAACsB,aAAa,EACpBjC,WAAW,IAAIW,MAAM,CAAC+E,kBACxB,CAAE;QAAAxD,QAAA,gBAEFlF,IAAA;UAAAkF,QAAA,EAAOrB,IAAI,CAACuC;QAAK,CAAO,CAAC,EACxBpD,WAAW,iBACVhD,IAAA,CAACT,QAAQ;UACPoJ,IAAI,EAAE3F,WAAW,CAACa,IAAI,EAAE;YACtB+E,WAAW,EAAE,SAAAA,YAAA;cAAA,OAAMnF,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAGyE,QAAQ,EAAErE,IAAI,CAAC;YAAA;YAClDgF,UAAU,EAAE,SAAAA,WAACC,OAAO;cAAA,OAAKpF,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGwE,QAAQ,EAAEY,OAAO,CAAC;YAAA;UAC5D,CAAC,CAAE;UACHC,OAAO,EAAE,CAAC,OAAO,CAAE;UACnBC,SAAS,EAAC,aAAa;UAAA9D,QAAA,eAEvBlF,IAAA;YACES,SAAS,EAAEb,IAAI,CAAC+D,MAAM,CAACsF,QAAQ,EAAE,uBAAuB,CAAE;YAC1DlH,OAAO,EAAE,SAAAA,QAACR,CAAC;cAAA,OAAKA,CAAC,CAACK,eAAe,CAAC,CAAC;YAAA,CAAC;YAAAsD,QAAA,eAEpClF,IAAA,CAACL,YAAY,IAAE;UAAC,CACZ;QAAC,CACC,CACX;MAAA,CACG,CACP;;MAED;MACA;MACA,IAAIyF,QAAQ,EAAE;QACZ,IAAM8D,QAAQ,GAAGX,QAEhB;QACD,IAAMY,YAAY,GAAGxB,WAAW,CAACuB,QAAQ,CAAC;QAE1CX,QAAQ,CAACnC,KAAK,gBACZpG,IAAA;UACES,SAAS,EAAEb,IAAI,CACb+D,MAAM,CAACyF,eAAe,EACtBD,YAAY,IAAIxF,MAAM,CAAC0F,cACzB,CAAE;UACF,iBAAenB,QAAS;UACxBhF,SAAS,EAAEiG,YAAa;UACxBhC,WAAW,EACTgC,YAAY,GAAG,UAAC5H,CAAC;YAAA,OAAK4F,WAAW,CAAC5F,CAAC,EAAEgH,QAAQ,CAAC;UAAA,IAAG5D,SAClD;UACDyC,SAAS,EAAE+B,YAAY,GAAG/B,SAAS,GAAGzC,SAAU;UAChD2E,WAAW,EAAE,SAAAA,YAAC/H,CAAC;YAAA,OAAK8F,eAAe,CAAC9F,CAAC,EAAEgH,QAAQ,CAAC;UAAA,CAAC;UACjDgB,UAAU,EAAE,SAAAA,WAAChI,CAAC;YAAA,OAAK+F,cAAc,CAAC/F,CAAC,EAAEgH,QAAQ,CAAC;UAAA,CAAC;UAC/CiB,WAAW,EAAEjC,eAAgB;UAC7BpE,MAAM,EAAE,SAAAA,OAAC5B,CAAC;YAAA,OAAKiG,UAAU,CAACjG,CAAC,EAAEgH,QAAQ,CAAC;UAAA,CAAC;UAAArD,QAAA,EAEtCuD;QAAY,CACV,CACN;MACH,CAAC,MAAM;QACLF,QAAQ,CAACnC,KAAK,GAAGqC,YAAY;MAC/B;MAEA,OAAOF,QAAQ;IACjB,CAAC,CAAC;;IAEF;IACA,IAAI/E,UAAU,IAAIJ,QAAQ,IAAIA,QAAQ,CAACqG,IAAI,KAAK,QAAQ,EAAE;MACxD,IAAMC,eAAe,GAAGlG,UAAU,CAACsE,SAAS;MAC5C,IACE4B,eAAe,KAAK5B,SAAS,IAC5B4B,eAAe,KAAK,EAAE,IAAI5B,SAAS,KAAK,EAAG,IAC3C4B,eAAe,KAAK,GAAG,IAAI5B,SAAS,KAAK,EAAG,EAC7C;QACA,IAAM6B,QAAa,GAAG;UACpB9H,GAAG,EAAEuB,QAAQ,CAACvB,GAAG;UACjBuE,KAAK,EAAEpB,iBAAiB,CAAC5B,QAAQ,CAACvB,GAAG,EAAEuB,QAAQ,CAACoF,YAAY,CAAC;UAC7DzE,IAAI,EACFP,UAAU,CAACM,IAAI,KAAK,QAAQ,gBAC1B9D,IAAA,CAACN,cAAc,IAAE,CAAC,gBAElBM,IAAA,CAACP,YAAY,IAAE,CAChB;UACH8G,MAAM,EAAE/C,UAAU,CAACM,IAAI,KAAK,MAAM;UAClCI,IAAI,EAAEd,QAAQ,CAACvB,GAAG;UAClBoG,YAAY,EAAE,CAAC7E,QAAQ,CAACvB,GAAG,CAAC;UAC5B+D,aAAa,EAAE,IAAI;UACnBgE,WAAW,EAAE;QACf,CAAC;QACD7B,MAAM,CAAC8B,IAAI,CAACF,QAAQ,CAAC;MACvB;IACF;IAEA,OAAO5B,MAAM;EACf,CAAC,EACD,CACExD,iBAAiB,EACjBX,OAAO,EACPZ,WAAW,EACXW,MAAM,EACNP,QAAQ,EACR4B,iBAAiB,EACjBxB,UAAU,EACVC,aAAa,EACbC,YAAY,EACZ0B,QAAQ,EACRuC,WAAW,EACXR,WAAW,EACXC,SAAS,EACTC,eAAe,EACfC,cAAc,EACdC,eAAe,EACfC,UAAU,CAEd,CAAC;EAED,IAAMsC,iBAAiB,GAAG3K,OAAO,CAC/B;IAAA,OAAMyI,iBAAiB,CAACvF,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC;EAAA,GACzC,CAACA,QAAQ,EAAEuF,iBAAiB,CAC9B,CAAC;EAED,IAAMmC,YAAmC,GAAG9K,WAAW,CACrD,UAAC+K,IAAS,EAAEC,IAAS,EAAK;IAAA,IAAAC,iBAAA;IACxB;IACA,IAAI9G,QAAQ,EAAE;IACd;IACA,IAAMS,IAAI,GAAGoG,IAAI,CAACpG,IAA4C;IAC9D,IAAIA,IAAI,CAAC+F,WAAW,EAAE;IACtB;IACA,IAAMpI,MAAM,IAAA0I,iBAAA,GAAGD,IAAI,CAACjD,WAAW,cAAAkD,iBAAA,uBAAhBA,iBAAA,CAAkB1I,MAA4B;IAC7D,IACEA,MAAM,KACLA,MAAM,CAAC2I,OAAO,CAAC,wBAAwB,CAAC,IACvC3I,MAAM,CAAC2I,OAAO,CAAC,eAAe,CAAC,CAAC,EAClC;MACA;IACF;IACAlI,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAG+H,IAAI,EAAEC,IAAI,CAAC;EACxB,CAAC,EACD,CAAChI,QAAQ,EAAEmB,QAAQ,CACrB,CAAC;EAED,IAAMgH,SAAS,GACbrH,cAAc,KAAK,KAAK,IAAIA,cAAc,KAAK,IAAI,GAC/C,IAAI,GACJ,OAAOA,cAAc,KAAK,UAAU,GAClCA,cAAc,CAAC,CAAC,GAChBA,cAAc;EAEtB,oBACE7C,KAAA;IAAKO,SAAS,EAAEb,IAAI,CAAC+D,MAAM,CAAC0G,cAAc,EAAE5J,SAAS,CAAE;IAAC6J,KAAK,EAAE;MAAErH,KAAK,EAALA;IAAM,CAAE;IAAAiC,QAAA,GACtEkF,SAAS,iBAAIpK,IAAA;MAAKS,SAAS,EAAEkD,MAAM,CAACZ,cAAe;MAAAmC,QAAA,EAAEkF;IAAS,CAAM,CAAC,eACtEpK,IAAA;MACES,SAAS,EAAEkD,MAAM,CAAC4G,oBAAqB;MACvChB,UAAU,EAAEnE,QAAQ,GAAGqC,mBAAmB,GAAG9C,SAAU;MACvDxB,MAAM,EAAEiC,QAAQ,GAAGsC,eAAe,GAAG/C,SAAU;MAAAO,QAAA,eAE/ClF,IAAA,CAACG,gBAAgB;QACfmK,KAAK,EACH;UACE,uCAAuC,EAAE,kBAAkB;UAC3D,0CAA0C,EAAE;QAC9C,CACD;QACDjI,QAAQ,EAAEyH,iBAAkB;QAC5BxH,YAAY,EAAEA,YAAa;QAC3BC,YAAY,EAAEA,YAAa;QAC3BN,QAAQ,EAAE8H,YAAa;QACvBvH,QAAQ,EAAEA,QAAS;QACnBgI,QAAQ,EAAE,KAAM;QAChBC,SAAS;QACT/H,QAAQ,EAAEA,QAAgB;QAC1BC,YAAY,EAAEA,YAAa;QAC3BE,gBAAgB,EAAEA,gBAAiB;QACnCK,SAAS,EAAE;MAAM,CAClB;IAAC,CACC,CAAC;EAAA,CACH,CAAC;AAEV,CAAC;AAED,eAAef,sBAAsB"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","Tree","Dropdown","Input","FileOutlined","FolderOutlined","MoreOutlined","clsx","useStyles","useFolderDrag","jsx","_jsx","jsxs","_jsxs","AntDirectoryTree","DirectoryTree","InlineEditInput","_ref","editKey","value","className","onValueChange","onConfirm","onCancel","_useState","_useState2","_slicedToArray","draft","setDraft","committedRef","current","commit","size","onChange","e","target","onBlur","onPressEnter","onKeyDown","stopPropagation","key","autoFocus","onClick","onMouseDown","onSelect","onFocus","DirectoryTreeComponent","_ref2","treeData","selectedKeys","expandedKeys","onExpand","_ref2$showLine","showLine","switcherIcon","_ref2$defaultExpandAl","defaultExpandAll","directoryIcons","directoryTitle","moreActions","width","draggable","onDrop","editNode","onEditValueChange","onEditConfirm","onEditCancel","createInfo","onStartRename","onCreateNode","styles","getIcon","node","type","icon","directory","filePath","path","toLowerCase","extension","split","pop","buildPathSegments","parentSegments","arguments","length","undefined","concat","_toConsumableArray","filter","s","renderInlineInput","treeNodeTitle","children","inlineInput","dragMode","handleDragDrop","dragNode","dropNode","dropPosition","dragNd","dropNd","originalDragNode","_originalNode","originalDropNode","dragKey","String","dropKey","dragFileName","newPath","fileName","title","extra","oldPath","isLeaf","dropParentPath","includes","substring","lastIndexOf","handleDragEnterExpand","nodeKey","isExpanded","expanded","nativeEvent","_useFolderDrag","onDragEnterExpand","onDragStart","onDragEnd","onItemDragEnter","onItemDragOver","onItemDragLeave","onItemDrop","onContainerDragOver","onContainerDrop","canDragNode","convertToTreeData","nodes","parentKey","result","map","pathSegments","fullPath","join","replace","isEditing","nodeChildren","baseNode","currentValue","titleContent","treeNodeTitleHover","menu","startRename","createNode","options","trigger","placement","moreIcon","nodeData","draggableDiv","treeNodeWrapper","dragNodeHandle","onDragEnter","onDragOver","onDragLeave","mode","targetParentKey","tempNode","_isTempNode","push","treeDataConverted","handleSelect","keys","info","_info$nativeEvent","closest","titleNode","directoryPanel","style","directoryTreeContent","multiple","blockNode"],"sources":["../../../../src/components/FolderTree/DirectoryTree.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Tree, Dropdown, Input } from \"antd\";\nimport { FileOutlined, FolderOutlined, MoreOutlined } from \"@ant-design/icons\";\nimport type { TreeProps } from \"antd\";\nimport type { DataNode } from \"antd/es/tree\";\nimport clsx from \"clsx\";\nimport type {\n FolderTreeData,\n FolderTreeProps,\n EditNodeInfo,\n CreateNodeContext,\n} from \"./types\";\nimport { useStyles } from \"./styles\";\nimport { useFolderDrag, type DropPosition } from \"./useFolderDrag\";\n\nconst { DirectoryTree: AntDirectoryTree } = Tree;\n\nexport interface DirectoryTreeComponentProps {\n treeData: FolderTreeData[];\n directoryIcons?: FolderTreeProps[\"directoryIcons\"];\n selectedKeys?: string[];\n expandedKeys?: string[];\n onSelect?: TreeProps[\"onSelect\"];\n onExpand?: TreeProps[\"onExpand\"];\n showLine?: FolderTreeProps[\"showLine\"];\n switcherIcon?: FolderTreeProps[\"switcherIcon\"];\n defaultExpandAll?: boolean;\n className?: string;\n directoryTitle?: FolderTreeProps[\"directoryTitle\"];\n moreActions?: FolderTreeProps[\"moreActions\"];\n width?: number | string;\n draggable?: FolderTreeProps[\"draggable\"];\n onDrop?: FolderTreeProps[\"onDrop\"];\n /** 当前编辑节点信息 */\n editNode?: EditNodeInfo | null;\n /** 编辑值变化回调 */\n onEditValueChange?: (value: string) => void;\n /** 编辑确认回调 */\n onEditConfirm?: (value?: string) => void;\n /** 编辑取消回调 */\n onEditCancel?: () => void;\n /** 新建上下文 */\n createInfo?: CreateNodeContext | null;\n /** 开始重命名回调(由父组件注入) */\n onStartRename?: (fullPath: string, node: FolderTreeData) => void;\n /** 创建节点回调(由父组件注入) */\n onCreateNode?: (\n parentPath: string,\n options: { type: \"file\" | \"folder\"; defaultName?: string; extra?: any },\n ) => void;\n}\n\ninterface InlineEditInputProps {\n editKey: string;\n value: string;\n className?: string;\n onValueChange?: (value: string) => void;\n onConfirm?: (value?: string) => void;\n onCancel?: () => void;\n}\n\nconst InlineEditInput: React.FC<InlineEditInputProps> = ({\n editKey,\n value,\n className,\n onValueChange,\n onConfirm,\n onCancel,\n}) => {\n const [draft, setDraft] = useState(value);\n const committedRef = useRef(false);\n\n useEffect(() => {\n setDraft(value);\n committedRef.current = false;\n }, [editKey, value]);\n\n const commit = useCallback(() => {\n if (committedRef.current) return;\n committedRef.current = true;\n onValueChange?.(draft);\n onConfirm?.(draft);\n }, [draft, onConfirm, onValueChange]);\n\n return (\n <Input\n size=\"small\"\n value={draft}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setDraft(e.target.value)}\n onBlur={commit}\n onPressEnter={commit}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n e.stopPropagation();\n if (e.key === \"Escape\") {\n committedRef.current = true;\n onCancel?.();\n }\n }}\n autoFocus\n className={className}\n onClick={(e: React.MouseEvent<HTMLInputElement>) => e.stopPropagation()}\n onMouseDown={(e: React.MouseEvent<HTMLInputElement>) => e.stopPropagation()}\n onSelect={(e: React.SyntheticEvent<HTMLInputElement>) => e.stopPropagation()}\n onFocus={(e: React.FocusEvent<HTMLInputElement>) => e.stopPropagation()}\n />\n );\n};\n\nconst DirectoryTreeComponent: React.FC<DirectoryTreeComponentProps> = ({\n treeData,\n selectedKeys,\n expandedKeys,\n onSelect,\n onExpand,\n showLine = false,\n switcherIcon,\n defaultExpandAll = true,\n className,\n directoryIcons,\n directoryTitle,\n moreActions,\n width,\n draggable,\n onDrop,\n editNode,\n onEditValueChange,\n onEditConfirm,\n onEditCancel,\n createInfo,\n onStartRename,\n onCreateNode,\n}) => {\n const styles = useStyles();\n\n const getIcon = useCallback(\n (node: FolderTreeData) => {\n if (directoryIcons === false || directoryIcons === null) {\n return null;\n }\n if (node.type == \"folder\") {\n const icon = directoryIcons?.directory;\n if (typeof icon === \"function\") return icon();\n return icon || <FolderOutlined />;\n }\n const filePath = node.path.toLowerCase();\n const extension = filePath.split(\".\").pop();\n if (extension) {\n const icon = directoryIcons?.[extension];\n if (icon) return typeof icon === \"function\" ? icon() : icon;\n }\n return <FileOutlined />;\n },\n [directoryIcons],\n );\n\n const buildPathSegments = useCallback(\n (node: FolderTreeData, parentSegments: string[] = []): string[] => {\n if (node.path === \"/\" && parentSegments.length === 0) {\n return [\"/\"];\n }\n return [...parentSegments, node.path].filter((s) => s !== \"\");\n },\n [],\n );\n\n const renderInlineInput = useCallback(\n (key: string, value: string) => (\n <span className={styles.treeNodeTitle}>\n <InlineEditInput\n editKey={key}\n value={value}\n className={styles.inlineInput}\n onValueChange={onEditValueChange}\n onConfirm={onEditConfirm}\n onCancel={onEditCancel}\n />\n </span>\n ),\n [onEditValueChange, onEditConfirm, onEditCancel, styles],\n );\n\n // ====== 拖拽模式 ======\n const dragMode = draggable === true ? \"file\" : draggable || false;\n\n // ====== 自定义拖拽 hook ======\n const handleDragDrop = useCallback(\n (dragNode: DataNode, dropNode: DataNode, dropPosition: DropPosition) => {\n const dragNd = dragNode as DataNode & { _originalNode?: FolderTreeData };\n const dropNd = dropNode as DataNode & { _originalNode?: FolderTreeData };\n const originalDragNode = dragNd._originalNode;\n const originalDropNode = dropNd._originalNode;\n if (!originalDragNode) return;\n\n const dragKey = String(dragNode.key);\n const dropKey = String(dropNode.key);\n const dragFileName = originalDragNode.path;\n let newPath: string;\n\n // 拖到底部 drop zone:放在根级别末尾\n if (!originalDropNode && dropKey === \"__bottom_placeholder__\") {\n newPath = dragFileName;\n onDrop?.({\n fileName: originalDragNode.title,\n extra: originalDragNode.extra,\n oldPath: dragKey,\n newPath,\n dragNode: originalDragNode,\n dropNode: { title: \"\", path: \"\" },\n });\n return;\n }\n\n if (!originalDropNode) return;\n\n if (!dropNode.isLeaf && dropPosition === 0) {\n // 拖入文件夹内部\n newPath = `${dropKey}/${dragFileName}`;\n } else {\n // 拖到节点旁边(同级)\n const dropParentPath = dropKey.includes(\"/\")\n ? dropKey.substring(0, dropKey.lastIndexOf(\"/\"))\n : \"\";\n newPath = dropParentPath\n ? `${dropParentPath}/${dragFileName}`\n : dragFileName;\n }\n\n onDrop?.({\n fileName: originalDragNode.title,\n extra: originalDragNode.extra,\n oldPath: dragKey,\n newPath,\n dragNode: originalDragNode,\n dropNode: originalDropNode,\n });\n },\n [onDrop],\n );\n\n const handleDragEnterExpand = useCallback(\n (nodeKey: string) => {\n const isExpanded = expandedKeys?.includes(nodeKey);\n if (!isExpanded) {\n onExpand?.([...(expandedKeys || []), nodeKey], {\n node: null as any,\n expanded: true,\n nativeEvent: null as any,\n });\n }\n },\n [expandedKeys, onExpand],\n );\n\n const {\n onDragStart,\n onDragEnd,\n onItemDragEnter,\n onItemDragOver,\n onItemDragLeave,\n onItemDrop,\n onContainerDragOver,\n onContainerDrop,\n canDragNode,\n } = useFolderDrag({\n dragMode,\n onDrop: handleDragDrop,\n onDragEnterExpand: handleDragEnterExpand,\n });\n\n // ====== 转换树数据 ======\n // 注意:convertToTreeData 不依赖拖拽状态,拖拽效果通过 DOM 操作实现\n const convertToTreeData = useCallback(\n (\n nodes: FolderTreeData[],\n parentSegments: string[] = [],\n parentKey: string = \"\",\n ): DataNode[] => {\n const result = nodes.map((node) => {\n const pathSegments = buildPathSegments(node, parentSegments);\n const fullPath = pathSegments.join(\"/\").replace(/^\\/+/, \"\");\n\n const isEditing = editNode && editNode.key === fullPath;\n\n const nodeChildren = node.children\n ? convertToTreeData(node.children, pathSegments, fullPath)\n : undefined;\n\n const baseNode: any = {\n key: fullPath,\n path: fullPath,\n pathSegments,\n icon: getIcon(node),\n isLeaf: !(node.type === \"folder\"),\n _originalNode: node,\n children: nodeChildren,\n };\n\n // 编辑态:直接渲染 inline input\n if (isEditing) {\n baseNode.title = renderInlineInput(\n editNode!.key,\n editNode!.currentValue,\n );\n return baseNode;\n }\n\n // title 内容(按钮、菜单等)\n const titleContent = (\n <span\n className={clsx(\n styles.treeNodeTitle,\n moreActions && styles.treeNodeTitleHover,\n )}\n >\n <span>{node.title}</span>\n {moreActions && (\n <Dropdown\n menu={moreActions(node, {\n startRename: () => onStartRename?.(fullPath, node),\n createNode: (options) => onCreateNode?.(fullPath, options),\n })}\n trigger={[\"click\"]}\n placement=\"bottomRight\"\n >\n <span\n className={clsx(styles.moreIcon, \"folder-tree-more-icon\")}\n onClick={(e) => e.stopPropagation()}\n >\n <MoreOutlined />\n </span>\n </Dropdown>\n )}\n </span>\n );\n\n // 启用拖拽时:在 title 外层包裹具有 data-node-key 属性的容器,\n // 用于 DOM 查询和事件绑定。拖拽状态通过 CSS class 控制。\n if (dragMode) {\n const nodeData = baseNode as DataNode & {\n _isTempNode?: boolean;\n };\n const draggableDiv = canDragNode(nodeData);\n\n baseNode.title = (\n <div\n className={clsx(\n styles.treeNodeWrapper,\n draggableDiv && styles.dragNodeHandle,\n )}\n data-node-key={fullPath}\n draggable={draggableDiv}\n onDragStart={\n draggableDiv ? (e) => onDragStart(e, baseNode) : undefined\n }\n onDragEnd={draggableDiv ? onDragEnd : undefined}\n onDragEnter={(e) => onItemDragEnter(e, baseNode)}\n onDragOver={(e) => onItemDragOver(e, baseNode)}\n onDragLeave={onItemDragLeave}\n onDrop={(e) => onItemDrop(e, baseNode)}\n >\n {titleContent}\n </div>\n );\n } else {\n baseNode.title = titleContent;\n }\n\n return baseNode;\n });\n\n // 新建模式:在目标父节点下插入临时节点\n if (createInfo && editNode && editNode.mode === \"create\") {\n const targetParentKey = createInfo.parentKey;\n if (\n targetParentKey === parentKey ||\n (targetParentKey === \"\" && parentKey === \"\") ||\n (targetParentKey === \"/\" && parentKey === \"\")\n ) {\n const tempNode: any = {\n key: editNode.key,\n title: renderInlineInput(editNode.key, editNode.currentValue),\n icon:\n createInfo.type === \"folder\" ? (\n <FolderOutlined />\n ) : (\n <FileOutlined />\n ),\n isLeaf: createInfo.type === \"file\",\n path: editNode.key,\n pathSegments: [editNode.key],\n _originalNode: null,\n _isTempNode: true,\n };\n result.push(tempNode);\n }\n }\n\n return result;\n },\n [\n buildPathSegments,\n getIcon,\n moreActions,\n styles,\n editNode,\n renderInlineInput,\n createInfo,\n onStartRename,\n onCreateNode,\n dragMode,\n canDragNode,\n onDragStart,\n onDragEnd,\n onItemDragEnter,\n onItemDragOver,\n onItemDragLeave,\n onItemDrop,\n ],\n );\n\n const treeDataConverted = useMemo(\n () => convertToTreeData(treeData, [], \"\"),\n [treeData, convertToTreeData],\n );\n\n const handleSelect: TreeProps[\"onSelect\"] = useCallback(\n (keys: any, info: any) => {\n // 编辑态不响应选中\n if (editNode) return;\n // 临时节点不可选中\n const node = info.node as DataNode & { _isTempNode?: boolean };\n if (node._isTempNode) return;\n // 点击 moreActions 区域不触发选中\n const target = info.nativeEvent?.target as HTMLElement | null;\n if (\n target &&\n (target.closest(\".folder-tree-more-icon\") ||\n target.closest(\".ant-dropdown\"))\n ) {\n return;\n }\n onSelect?.(keys, info);\n },\n [onSelect, editNode],\n );\n\n const titleNode =\n directoryTitle === false || directoryTitle === null\n ? null\n : typeof directoryTitle === \"function\"\n ? directoryTitle()\n : directoryTitle;\n\n return (\n <div className={clsx(styles.directoryPanel, className)} style={{ width }}>\n {titleNode && <div className={styles.directoryTitle}>{titleNode}</div>}\n <div\n className={styles.directoryTreeContent}\n onDragOver={dragMode ? onContainerDragOver : undefined}\n onDrop={dragMode ? onContainerDrop : undefined}\n >\n <AntDirectoryTree\n style={\n {\n \"--ant-tree-directory-node-selected-bg\": \"rgba(0,0,0,0.03)\",\n \"--ant-tree-directory-node-selected-color\": \"#1a1c1e\",\n } as React.CSSProperties\n }\n treeData={treeDataConverted}\n selectedKeys={selectedKeys}\n expandedKeys={expandedKeys}\n onSelect={handleSelect}\n onExpand={onExpand}\n multiple={false}\n blockNode\n showLine={showLine as any}\n switcherIcon={switcherIcon}\n defaultExpandAll={defaultExpandAll}\n draggable={false}\n />\n </div>\n </div>\n );\n};\n\nexport default DirectoryTreeComponent;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["LeftOutlined","RightOutlined","Carousel","clsx","React","useEffect","useRef","useState","useStyle","jsx","_jsx","jsxs","_jsxs","CarouselCard","props","prefixCls","items","activeKey","className","style","styles","activeSlideIndex","useMemo","_items$findIndex","Math","max","findIndex","_ref","key","_useState","_useState2","_slicedToArray","slide","setSlide","carouselRef","current","goTo","handleClick","item","_props$onClick","url","window","open","onClick","call","carouselWrapper","children","carouselTitle","carouselBtnWrapper","carouselBtn","_defineProperty","carouselBtnDisabled","_carouselRef$current","next","length","_carouselRef$current2","carouselPage","concat","ref","arrows","infinite","dots","afterChange","map","index","carouselItem","carouselItemTitleWrapper","icon","carouselItemTitle","title","description","carouselItemDescription"],"sources":["../../../../../src/components/Sources/components/CarouselCard.tsx"],"sourcesContent":["import { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport { Carousel } from 'antd';\nimport { clsx } from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport type { SourcesItem, SourcesProps } from '@/types/Sources';\nimport useStyle from '../styles';\n\nexport interface CarouselCardProps {\n activeKey?: SourcesProps['activeKey'];\n prefixCls: string;\n items?: SourcesProps['items'];\n className?: string;\n style?: React.CSSProperties;\n onClick?: (item: SourcesItem) => void;\n}\n\nconst CarouselCard: React.FC<CarouselCardProps> = (props) => {\n const { prefixCls, items, activeKey, className, style } = props;\n const styles = useStyle();\n\n // Derive the target slide index from activeKey\n const activeSlideIndex = React.useMemo(\n () => Math.max(0, items?.findIndex(({ key }) => key === activeKey) ?? 0),\n [items, activeKey],\n );\n\n const [slide, setSlide] = useState<number>(activeSlideIndex);\n\n const carouselRef = useRef<React.ComponentRef<typeof Carousel>>(null);\n\n useEffect(() => {\n setSlide(activeSlideIndex);\n if (carouselRef.current) {\n carouselRef.current.goTo(activeSlideIndex, false);\n }\n }, [activeSlideIndex]);\n\n const handleClick = (item: SourcesItem) => {\n item.url && window.open(item.url, '_blank', 'noopener,noreferrer');\n props.onClick?.(item);\n };\n\n return (\n <div style={style} className={clsx(styles.carouselWrapper, className)}>\n <div className={styles.carouselTitle}>\n <div className={styles.carouselBtnWrapper}>\n <span\n className={clsx(styles.carouselBtn, {\n [styles.carouselBtnDisabled]: slide === 0,\n })}\n onClick={() => {\n if (slide > 0) {\n const next = slide - 1;\n setSlide(next);\n carouselRef.current?.goTo(next, false);\n }\n }}\n >\n <LeftOutlined />\n </span>\n <span\n className={clsx(styles.carouselBtn, {\n [styles.carouselBtnDisabled]: slide === (items?.length || 1) - 1,\n })}\n onClick={() => {\n const max = (items?.length || 1) - 1;\n if (slide < max) {\n const next = slide + 1;\n setSlide(next);\n carouselRef.current?.goTo(next, false);\n }\n }}\n >\n <RightOutlined />\n </span>\n </div>\n <div className={styles.carouselPage}>{`${slide + 1}/${items?.length || 1}`}</div>\n </div>\n <Carousel\n ref={carouselRef}\n arrows={false}\n infinite={false}\n dots={false}\n afterChange={setSlide}\n >\n {items?.map((item, index) => (\n <div\n key={item.key || index}\n className={styles.carouselItem}\n onClick={() => handleClick(item)}\n >\n <div className={styles.carouselItemTitleWrapper}>\n {item.icon && <span>{item.icon}</span>}\n <span className={styles.carouselItemTitle}>{item.title}</span>\n </div>\n {item.description && (\n <div className={styles.carouselItemDescription}>{item.description}</div>\n )}\n </div>\n ))}\n </Carousel>\n </div>\n );\n};\n\nexport default CarouselCard;"],"mappings":";;AAAA,SAASA,YAAY,EAAEC,aAAa,QAAQ,mBAAmB;AAC/D,SAASC,QAAQ,QAAQ,MAAM;AAC/B,SAASC,IAAI,QAAQ,MAAM;AAC3B,OAAOC,KAAK,IAAIC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAE1D,OAAOC,QAAQ;AAAkB,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAWjC,IAAMC,YAAyC,GAAG,SAA5CA,YAAyCA,CAAIC,KAAK,EAAK;EAC3D,IAAQC,SAAS,GAAyCD,KAAK,CAAvDC,SAAS;IAAEC,KAAK,GAAkCF,KAAK,CAA5CE,KAAK;IAAEC,SAAS,GAAuBH,KAAK,CAArCG,SAAS;IAAEC,SAAS,GAAYJ,KAAK,CAA1BI,SAAS;IAAEC,KAAK,GAAKL,KAAK,CAAfK,KAAK;EACrD,IAAMC,MAAM,GAAGZ,QAAQ,CAAC,CAAC;;EAEzB;EACA,IAAMa,gBAAgB,GAAGjB,KAAK,CAACkB,OAAO,CACpC;IAAA,IAAAC,gBAAA;IAAA,OAAMC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAAF,gBAAA,GAAEP,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEU,SAAS,CAAC,UAAAC,IAAA;MAAA,IAAGC,GAAG,GAAAD,IAAA,CAAHC,GAAG;MAAA,OAAOA,GAAG,KAAKX,SAAS;IAAA,EAAC,cAAAM,gBAAA,cAAAA,gBAAA,GAAI,CAAC,CAAC;EAAA,GACxE,CAACP,KAAK,EAAEC,SAAS,CACnB,CAAC;EAED,IAAAY,SAAA,GAA0BtB,QAAQ,CAASc,gBAAgB,CAAC;IAAAS,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAArDG,KAAK,GAAAF,UAAA;IAAEG,QAAQ,GAAAH,UAAA;EAEtB,IAAMI,WAAW,GAAG5B,MAAM,CAAsC,IAAI,CAAC;EAErED,SAAS,CAAC,YAAM;IACd4B,QAAQ,CAACZ,gBAAgB,CAAC;IAC1B,IAAIa,WAAW,CAACC,OAAO,EAAE;MACvBD,WAAW,CAACC,OAAO,CAACC,IAAI,CAACf,gBAAgB,EAAE,KAAK,CAAC;IACnD;EACF,CAAC,EAAE,CAACA,gBAAgB,CAAC,CAAC;EAEtB,IAAMgB,WAAW,GAAG,SAAdA,WAAWA,CAAIC,IAAiB,EAAK;IAAA,IAAAC,cAAA;IACzCD,IAAI,CAACE,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACJ,IAAI,CAACE,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC;IAClE,CAAAD,cAAA,GAAAzB,KAAK,CAAC6B,OAAO,cAAAJ,cAAA,eAAbA,cAAA,CAAAK,IAAA,CAAA9B,KAAK,EAAWwB,IAAI,CAAC;EACvB,CAAC;EAED,oBACE1B,KAAA;IAAKO,KAAK,EAAEA,KAAM;IAACD,SAAS,EAAEf,IAAI,CAACiB,MAAM,CAACyB,eAAe,EAAE3B,SAAS,CAAE;IAAA4B,QAAA,gBACpElC,KAAA;MAAKM,SAAS,EAAEE,MAAM,CAAC2B,aAAc;MAAAD,QAAA,gBACnClC,KAAA;QAAKM,SAAS,EAAEE,MAAM,CAAC4B,kBAAmB;QAAAF,QAAA,gBACxCpC,IAAA;UACEQ,SAAS,EAAEf,IAAI,CAACiB,MAAM,CAAC6B,WAAW,EAAAC,eAAA,KAC/B9B,MAAM,CAAC+B,mBAAmB,EAAGnB,KAAK,KAAK,CAAC,CAC1C,CAAE;UACHW,OAAO,EAAE,SAAAA,QAAA,EAAM;YACb,IAAIX,KAAK,GAAG,CAAC,EAAE;cAAA,IAAAoB,oBAAA;cACb,IAAMC,IAAI,GAAGrB,KAAK,GAAG,CAAC;cACtBC,QAAQ,CAACoB,IAAI,CAAC;cACd,CAAAD,oBAAA,GAAAlB,WAAW,CAACC,OAAO,cAAAiB,oBAAA,eAAnBA,oBAAA,CAAqBhB,IAAI,CAACiB,IAAI,EAAE,KAAK,CAAC;YACxC;UACF,CAAE;UAAAP,QAAA,eAEFpC,IAAA,CAACV,YAAY,IAAE;QAAC,CACZ,CAAC,eACPU,IAAA;UACEQ,SAAS,EAAEf,IAAI,CAACiB,MAAM,CAAC6B,WAAW,EAAAC,eAAA,KAC/B9B,MAAM,CAAC+B,mBAAmB,EAAGnB,KAAK,KAAK,CAAC,CAAAhB,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEsC,MAAM,KAAI,CAAC,IAAI,CAAC,CACjE,CAAE;UACHX,OAAO,EAAE,SAAAA,QAAA,EAAM;YACb,IAAMlB,GAAG,GAAG,CAAC,CAAAT,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEsC,MAAM,KAAI,CAAC,IAAI,CAAC;YACpC,IAAItB,KAAK,GAAGP,GAAG,EAAE;cAAA,IAAA8B,qBAAA;cACf,IAAMF,IAAI,GAAGrB,KAAK,GAAG,CAAC;cACtBC,QAAQ,CAACoB,IAAI,CAAC;cACd,CAAAE,qBAAA,GAAArB,WAAW,CAACC,OAAO,cAAAoB,qBAAA,eAAnBA,qBAAA,CAAqBnB,IAAI,CAACiB,IAAI,EAAE,KAAK,CAAC;YACxC;UACF,CAAE;UAAAP,QAAA,eAEFpC,IAAA,CAACT,aAAa,IAAE;QAAC,CACb,CAAC;MAAA,CACJ,CAAC,eACNS,IAAA;QAAKQ,SAAS,EAAEE,MAAM,CAACoC,YAAa;QAAAV,QAAA,KAAAW,MAAA,CAAKzB,KAAK,GAAG,CAAC,OAAAyB,MAAA,CAAI,CAAAzC,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEsC,MAAM,KAAI,CAAC;MAAA,CAAQ,CAAC;IAAA,CAC9E,CAAC,eACN5C,IAAA,CAACR,QAAQ;MACPwD,GAAG,EAAExB,WAAY;MACjByB,MAAM,EAAE,KAAM;MACdC,QAAQ,EAAE,KAAM;MAChBC,IAAI,EAAE,KAAM;MACZC,WAAW,EAAE7B,QAAS;MAAAa,QAAA,EAErB9B,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAE+C,GAAG,CAAC,UAACzB,IAAI,EAAE0B,KAAK;QAAA,oBACtBpD,KAAA;UAEEM,SAAS,EAAEE,MAAM,CAAC6C,YAAa;UAC/BtB,OAAO,EAAE,SAAAA,QAAA;YAAA,OAAMN,WAAW,CAACC,IAAI,CAAC;UAAA,CAAC;UAAAQ,QAAA,gBAEjClC,KAAA;YAAKM,SAAS,EAAEE,MAAM,CAAC8C,wBAAyB;YAAApB,QAAA,GAC7CR,IAAI,CAAC6B,IAAI,iBAAIzD,IAAA;cAAAoC,QAAA,EAAOR,IAAI,CAAC6B;YAAI,CAAO,CAAC,eACtCzD,IAAA;cAAMQ,SAAS,EAAEE,MAAM,CAACgD,iBAAkB;cAAAtB,QAAA,EAAER,IAAI,CAAC+B;YAAK,CAAO,CAAC;UAAA,CAC3D,CAAC,EACL/B,IAAI,CAACgC,WAAW,iBACf5D,IAAA;YAAKQ,SAAS,EAAEE,MAAM,CAACmD,uBAAwB;YAAAzB,QAAA,EAAER,IAAI,CAACgC;UAAW,CAAM,CACxE;QAAA,GAVIhC,IAAI,CAACV,GAAG,IAAIoC,KAWd,CAAC;MAAA,CACP;IAAC,CACM,CAAC;EAAA,CACR,CAAC;AAEV,CAAC;AAED,eAAenD,YAAY"}
1
+ {"version":3,"names":["LeftOutlined","RightOutlined","Carousel","clsx","React","useEffect","useRef","useState","useStyle","jsx","_jsx","jsxs","_jsxs","CarouselCard","props","prefixCls","items","activeKey","className","style","styles","activeSlideIndex","useMemo","_items$findIndex","Math","max","findIndex","_ref","key","_useState","_useState2","_slicedToArray","slide","setSlide","carouselRef","current","goTo","handleClick","item","_props$onClick","url","window","open","onClick","call","carouselWrapper","children","carouselTitle","carouselBtnWrapper","carouselBtn","_defineProperty","carouselBtnDisabled","_carouselRef$current","next","length","_carouselRef$current2","carouselPage","concat","ref","arrows","infinite","dots","afterChange","map","index","carouselItem","carouselItemTitleWrapper","icon","carouselItemTitle","title","description","carouselItemDescription"],"sources":["../../../../../src/components/Sources/components/CarouselCard.tsx"],"sourcesContent":["import { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport { Carousel } from 'antd';\nimport { clsx } from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport type { SourcesItem, SourcesProps } from '@/types/Sources';\nimport useStyle from '../styles';\n\nexport interface CarouselCardProps {\n activeKey?: SourcesProps['activeKey'];\n prefixCls: string;\n items?: SourcesProps['items'];\n className?: string;\n style?: React.CSSProperties;\n onClick?: (item: SourcesItem) => void;\n}\n\nconst CarouselCard: React.FC<CarouselCardProps> = (props) => {\n const { prefixCls, items, activeKey, className, style } = props;\n const styles = useStyle();\n\n // Derive the target slide index from activeKey\n const activeSlideIndex = React.useMemo(\n () => Math.max(0, items?.findIndex(({ key }) => key === activeKey) ?? 0),\n [items, activeKey],\n );\n\n const [slide, setSlide] = useState<number>(activeSlideIndex);\n\n const carouselRef = useRef<any>(null);\n\n useEffect(() => {\n setSlide(activeSlideIndex);\n if (carouselRef.current) {\n carouselRef.current.goTo(activeSlideIndex, false);\n }\n }, [activeSlideIndex]);\n\n const handleClick = (item: SourcesItem) => {\n item.url && window.open(item.url, '_blank', 'noopener,noreferrer');\n props.onClick?.(item);\n };\n\n return (\n <div style={style} className={clsx(styles.carouselWrapper, className)}>\n <div className={styles.carouselTitle}>\n <div className={styles.carouselBtnWrapper}>\n <span\n className={clsx(styles.carouselBtn, {\n [styles.carouselBtnDisabled]: slide === 0,\n })}\n onClick={() => {\n if (slide > 0) {\n const next = slide - 1;\n setSlide(next);\n carouselRef.current?.goTo(next, false);\n }\n }}\n >\n <LeftOutlined />\n </span>\n <span\n className={clsx(styles.carouselBtn, {\n [styles.carouselBtnDisabled]: slide === (items?.length || 1) - 1,\n })}\n onClick={() => {\n const max = (items?.length || 1) - 1;\n if (slide < max) {\n const next = slide + 1;\n setSlide(next);\n carouselRef.current?.goTo(next, false);\n }\n }}\n >\n <RightOutlined />\n </span>\n </div>\n <div className={styles.carouselPage}>{`${slide + 1}/${items?.length || 1}`}</div>\n </div>\n <Carousel\n ref={carouselRef}\n arrows={false}\n infinite={false}\n dots={false}\n afterChange={setSlide}\n >\n {items?.map((item, index) => (\n <div\n key={item.key || index}\n className={styles.carouselItem}\n onClick={() => handleClick(item)}\n >\n <div className={styles.carouselItemTitleWrapper}>\n {item.icon && <span>{item.icon}</span>}\n <span className={styles.carouselItemTitle}>{item.title}</span>\n </div>\n {item.description && (\n <div className={styles.carouselItemDescription}>{item.description}</div>\n )}\n </div>\n ))}\n </Carousel>\n </div>\n );\n};\n\nexport default CarouselCard;"],"mappings":"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"}
@@ -6,6 +6,7 @@ import clsx from "clsx";
6
6
  import { SwapRightOutlined, ReloadOutlined, CopyOutlined, InfoCircleOutlined } from "@ant-design/icons";
7
7
  import copy from "copy-to-clipboard";
8
8
  import { useStyles } from "./styles";
9
+ import { formatTimestamp, getSelectionText } from "./utils";
9
10
  import MarkdownRender from "./components/MarkdownRender";
10
11
  import FunctionCallRender from "./components/FunctionCallRender";
11
12
  import FileGallery from "../FileGallery";
@@ -64,7 +65,9 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
64
65
  toolKindResolver = _ref.toolKindResolver,
65
66
  strategies = _ref.strategies,
66
67
  preset = _ref.preset,
67
- empty = _ref.empty;
68
+ empty = _ref.empty,
69
+ showUserActions = _ref.showUserActions,
70
+ userActions = _ref.userActions;
68
71
  var styles = useStyles();
69
72
  var listRef = useRef(null);
70
73
  var lastScrollTopRef = useRef(0);
@@ -82,11 +85,35 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
82
85
  behavior: behavior
83
86
  });
84
87
  }, []);
88
+ var getScrollContainer = useCallback(function () {
89
+ return listRef.current;
90
+ }, []);
91
+ var getMessagePosition = useCallback(function (messageId) {
92
+ var list = listRef.current;
93
+ if (!list) return null;
94
+ var group = Array.from(list.children).find(function (element) {
95
+ return element instanceof HTMLElement && element.dataset.messageId === messageId;
96
+ });
97
+ if (!group) return null;
98
+ return group.getBoundingClientRect().top - list.getBoundingClientRect().top + list.scrollTop;
99
+ }, []);
100
+ var scrollToMessage = useCallback(function (messageId) {
101
+ var behavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "smooth";
102
+ var list = listRef.current;
103
+ var top = getMessagePosition(messageId);
104
+ if (list && top !== null) list.scrollTo({
105
+ top: top,
106
+ behavior: behavior
107
+ });
108
+ }, [getMessagePosition]);
85
109
  useImperativeHandle(ref, function () {
86
110
  return {
87
- scrollToBottom: scrollToBottom
111
+ scrollToBottom: scrollToBottom,
112
+ getScrollContainer: getScrollContainer,
113
+ getMessagePosition: getMessagePosition,
114
+ scrollToMessage: scrollToMessage
88
115
  };
89
- }, [scrollToBottom]);
116
+ }, [scrollToBottom, getScrollContainer, getMessagePosition, scrollToMessage]);
90
117
  var mergedStrategies = useMemo(function () {
91
118
  return mergeChatStrategies(preset, strategies);
92
119
  }, [preset, strategies]);
@@ -274,12 +301,14 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
274
301
 
275
302
  // ========== 渲染 Bot 消息组 ==========
276
303
  var renderBotGroup = useCallback(function (group, isLastGroup, renderFunctionCall) {
304
+ var _activeItem$msg, _activeItem$msg2, _activeItem$msg3;
277
305
  var msgs = group.msgs,
278
306
  allFiles = group.allFiles;
279
307
  if (!enableProcessParsing) {
280
308
  // 不解析 process,简单渲染
281
309
  return /*#__PURE__*/_jsx("div", {
282
310
  className: styles.botMsg,
311
+ "data-message-id": group.id,
283
312
  children: msgs.map(function (msg, i) {
284
313
  if (msg.text) {
285
314
  return /*#__PURE__*/_jsx(MarkdownRender, {
@@ -420,9 +449,7 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
420
449
  return m.text || "";
421
450
  }).join("");
422
451
  var lastBotMsg = msgs[msgs.length - 1];
423
- var hasProcess = nodes.some(function (n) {
424
- return n.type === "process";
425
- });
452
+ // const hasProcess = nodes.some((n) => n.type === "process");
426
453
  var isGroupLoading = loading && isLastGroup;
427
454
  var actionProps = {
428
455
  message: group,
@@ -431,22 +458,44 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
431
458
  var actionExtraNode = actionsExtra === null || actionsExtra === void 0 ? void 0 : actionsExtra(actionProps);
432
459
 
433
460
  // 4. 渲染
461
+ // 确认 [规划, 工具调用, 中途说明, 工具调用, 最终回答]
462
+ var firstProcessIdx = nodes.findIndex(function (n) {
463
+ return n.type === "process";
464
+ });
434
465
  var lastProcessIdx = nodes.findLastIndex(function (n) {
435
466
  return n.type === "process";
436
467
  });
468
+ var processItems = nodes.slice(firstProcessIdx, lastProcessIdx + 1).flatMap(function (node) {
469
+ return node.type === "process" ? node.items : [{
470
+ type: "text",
471
+ key: node.key,
472
+ title: "过程分析",
473
+ content: node.content
474
+ }];
475
+ });
476
+ var activeItem = processItems[processItems.length - 1];
477
+ var activeStep = (activeItem === null || activeItem === void 0 ? void 0 : activeItem.type) === "tool" ? String(((_activeItem$msg = activeItem.msg) === null || _activeItem$msg === void 0 || (_activeItem$msg = _activeItem$msg.functionCall) === null || _activeItem$msg === void 0 || (_activeItem$msg = _activeItem$msg.args) === null || _activeItem$msg === void 0 ? void 0 : _activeItem$msg.agentName) || ((_activeItem$msg2 = activeItem.msg) === null || _activeItem$msg2 === void 0 || (_activeItem$msg2 = _activeItem$msg2.functionCall) === null || _activeItem$msg2 === void 0 || (_activeItem$msg2 = _activeItem$msg2.args) === null || _activeItem$msg2 === void 0 ? void 0 : _activeItem$msg2.componentName) || ((_activeItem$msg3 = activeItem.msg) === null || _activeItem$msg3 === void 0 || (_activeItem$msg3 = _activeItem$msg3.functionCall) === null || _activeItem$msg3 === void 0 ? void 0 : _activeItem$msg3.name) || "") : typeof (activeItem === null || activeItem === void 0 ? void 0 : activeItem.title) === "string" ? activeItem.title : "";
437
478
  return /*#__PURE__*/_jsxs("div", {
438
479
  className: styles.botMsg,
480
+ "data-message-id": group.id,
439
481
  children: [nodes.map(function (node, idx) {
482
+ if (node.type === "text" && idx > firstProcessIdx && idx < lastProcessIdx) {
483
+ return null;
484
+ }
440
485
  if (node.type === "process") {
441
- // 只有最后一个 process node 跟随 loading 状态,已完成的思维链不应显示 loading
442
- var isLastProcess = idx === lastProcessIdx;
486
+ // 同一轮回复中的过程节点共用一个容器,保留节点自身的执行顺序。
487
+ if (idx !== firstProcessIdx) {
488
+ return null;
489
+ }
443
490
  return /*#__PURE__*/_jsx(XAdkThoughtChain, {
444
- loading: isLastProcess && isGroupLoading,
445
- title: "\u601D\u7EF4\u94FE\u5DF2\u5B8C\u6210",
446
- items: node.items,
491
+ collapsible: true,
492
+ loading: isGroupLoading,
493
+ title: "\u5DF2\u5B8C\u6210",
494
+ activeStep: activeStep,
495
+ items: processItems,
447
496
  showFnCallDetail: showFnCallDetail,
448
497
  onConfirm: onConfirm,
449
- defaultOpen: isLastProcess && isGroupLoading,
498
+ defaultOpen: isGroupLoading,
450
499
  renderFunctionCall: renderFunctionCall,
451
500
  toolKindResolver: function toolKindResolver(name) {
452
501
  return resolveToolKind(name);
@@ -524,7 +573,9 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
524
573
  var renderUserGroup = useCallback(function (group) {
525
574
  return /*#__PURE__*/_jsx("div", {
526
575
  className: styles.userMsg,
576
+ "data-message-id": group.id,
527
577
  children: group.msgs.map(function (m, i) {
578
+ var _userActions;
528
579
  return /*#__PURE__*/_jsxs("div", {
529
580
  className: styles.userContainer,
530
581
  children: [m.fileData && m.fileData.length > 0 && /*#__PURE__*/_jsx(_Fragment, {
@@ -540,11 +591,14 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
540
591
  })
541
592
  }), m.text && /*#__PURE__*/_jsx("div", {
542
593
  className: styles.card,
594
+ "data-xadk-user-card": true,
543
595
  onCopy: function onCopy(event) {
544
596
  // 富文本标签的可见文案不含协议;复制用户消息时保留原始 Markdown,
545
597
  // 使内容粘贴回 XAdkSender 后能重新还原成 Mention。
598
+ // 若有选区则只复制选区内容(变量模块取完整文案),否则复制全量。
546
599
  event.preventDefault();
547
- event.clipboardData.setData("text/plain", m.text || "");
600
+ var selected = getSelectionText(event.currentTarget);
601
+ event.clipboardData.setData("text/plain", selected || m.text || "");
548
602
  },
549
603
  children: /*#__PURE__*/_jsx(MarkdownRender, {
550
604
  text: m.text,
@@ -557,11 +611,32 @@ var XAdkChatbot = /*#__PURE__*/forwardRef(function (_ref, ref) {
557
611
  renderResourceLink: renderResourceLink,
558
612
  markdownExtensions: mergedMarkdownExtensions
559
613
  })
614
+ }), showUserActions && /*#__PURE__*/_jsx("div", {
615
+ className: "x-user-actions ".concat(styles.userActions),
616
+ children: (_userActions = userActions === null || userActions === void 0 ? void 0 : userActions({
617
+ message: group
618
+ })) !== null && _userActions !== void 0 ? _userActions : /*#__PURE__*/_jsxs(_Fragment, {
619
+ children: [/*#__PURE__*/_jsx("span", {
620
+ className: styles.userTime,
621
+ children: formatTimestamp(m.timestamp)
622
+ }), /*#__PURE__*/_jsx(Tooltip, {
623
+ title: "\u590D\u5236\u5185\u5BB9",
624
+ children: /*#__PURE__*/_jsx(CopyOutlined, {
625
+ className: styles.userActionIcon,
626
+ onClick: function onClick() {
627
+ var card = document.querySelector("[data-message-id=\"".concat(group.id, "\"] [data-xadk-user-card]"));
628
+ var selected = getSelectionText(card);
629
+ copy(selected || m.text || "");
630
+ antdMessage.success("复制成功");
631
+ }
632
+ })
633
+ })]
634
+ })
560
635
  })]
561
636
  }, m.id || i);
562
637
  })
563
638
  }, group.id);
564
- }, [styles, onFileClick, onResourceLinkClick, renderResourceLink, mergedMarkdownExtensions, resourceLinkSchemes]);
639
+ }, [styles, onFileClick, onResourceLinkClick, renderResourceLink, mergedMarkdownExtensions, resourceLinkSchemes, showUserActions, userActions]);
565
640
 
566
641
  // ========== 空状态 ==========
567
642