@ai-group/chat-sdk 3.5.6 → 3.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/FolderTree/DirectoryTree.d.ts +13 -1
- package/dist/cjs/components/FolderTree/DirectoryTree.js +88 -9
- package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
- package/dist/cjs/components/FolderTree/index.d.ts +3 -3
- package/dist/cjs/components/FolderTree/index.js +97 -3
- package/dist/cjs/components/FolderTree/index.js.map +2 -2
- package/dist/cjs/components/FolderTree/styles.d.ts +1 -0
- package/dist/cjs/components/FolderTree/styles.js +14 -3
- package/dist/cjs/components/FolderTree/styles.js.map +2 -2
- package/dist/cjs/components/FolderTree/types.d.ts +61 -2
- package/dist/cjs/components/FolderTree/types.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/esm/components/FolderTree/DirectoryTree.d.ts +13 -1
- package/dist/esm/components/FolderTree/DirectoryTree.js +90 -9
- package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
- package/dist/esm/components/FolderTree/index.d.ts +3 -3
- package/dist/esm/components/FolderTree/index.js +144 -29
- package/dist/esm/components/FolderTree/index.js.map +1 -1
- package/dist/esm/components/FolderTree/styles.d.ts +1 -0
- package/dist/esm/components/FolderTree/styles.js +5 -4
- package/dist/esm/components/FolderTree/styles.js.map +1 -1
- package/dist/esm/components/FolderTree/types.d.ts +61 -2
- package/dist/esm/components/FolderTree/types.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +10 -10
|
@@ -12,6 +12,41 @@ export interface FolderTreeData<T = any> {
|
|
|
12
12
|
export interface FileContentService {
|
|
13
13
|
loadFileContent(filePath: string): Promise<string>;
|
|
14
14
|
}
|
|
15
|
+
/** 编辑节点信息 */
|
|
16
|
+
export interface EditNodeInfo {
|
|
17
|
+
/** 完整路径 key */
|
|
18
|
+
key: string;
|
|
19
|
+
/** 原始标题 */
|
|
20
|
+
originalTitle: string;
|
|
21
|
+
/** 当前输入值 */
|
|
22
|
+
currentValue: string;
|
|
23
|
+
/** 编辑模式:重命名或新建 */
|
|
24
|
+
mode: "rename" | "create";
|
|
25
|
+
}
|
|
26
|
+
/** 新建上下文 */
|
|
27
|
+
export interface CreateNodeContext {
|
|
28
|
+
/** 父节点 key */
|
|
29
|
+
parentKey: string;
|
|
30
|
+
/** 节点类型 */
|
|
31
|
+
type: "file" | "folder";
|
|
32
|
+
/** 附加数据 */
|
|
33
|
+
extra?: any;
|
|
34
|
+
}
|
|
35
|
+
/** FolderTree 命令式 API */
|
|
36
|
+
export interface FolderTreeRef {
|
|
37
|
+
/**
|
|
38
|
+
* 在指定父路径下新建文件或文件夹
|
|
39
|
+
* @param parentPath - 父节点完整路径(空字符串或 "/" 表示根路径)
|
|
40
|
+
* @param options.type - 节点类型
|
|
41
|
+
* @param options.defaultName - 默认名称
|
|
42
|
+
* @param options.extra - 自定义附加数据
|
|
43
|
+
*/
|
|
44
|
+
createNode: (parentPath: string, options: {
|
|
45
|
+
type: "file" | "folder";
|
|
46
|
+
defaultName?: string;
|
|
47
|
+
extra?: any;
|
|
48
|
+
}) => void;
|
|
49
|
+
}
|
|
15
50
|
/** FolderTree 组件属性 */
|
|
16
51
|
export interface FolderTreeProps {
|
|
17
52
|
/** 自定义类名 */
|
|
@@ -70,8 +105,10 @@ export interface FolderTreeProps {
|
|
|
70
105
|
onFileClick?: (filePath: string, content?: string, extra?: any) => void;
|
|
71
106
|
/** 文件夹点击回调 */
|
|
72
107
|
onFolderClick?: (folderPath: string, extra?: any) => void;
|
|
73
|
-
/**
|
|
74
|
-
moreActions?: (node: FolderTreeData
|
|
108
|
+
/** 更多操作菜单,传入节点和操作方法,返回 Dropdown menu 配置 */
|
|
109
|
+
moreActions?: (node: FolderTreeData, actions?: {
|
|
110
|
+
startRename: () => void;
|
|
111
|
+
}) => DropdownProps["menu"];
|
|
75
112
|
/** 是否显示连接线 */
|
|
76
113
|
showLine?: boolean | {
|
|
77
114
|
showLeafIcon?: boolean | React.ReactNode;
|
|
@@ -88,6 +125,28 @@ export interface FolderTreeProps {
|
|
|
88
125
|
* - false | undefined: 禁用拖拽
|
|
89
126
|
*/
|
|
90
127
|
draggable?: boolean | "file" | "folder" | "all";
|
|
128
|
+
/** 重命名确认回调,失焦或回车时触发 */
|
|
129
|
+
onRename?: (info: {
|
|
130
|
+
/** 节点完整路径 key */
|
|
131
|
+
key: string;
|
|
132
|
+
/** 原始标题 */
|
|
133
|
+
oldTitle: React.ReactNode;
|
|
134
|
+
/** 新标题 */
|
|
135
|
+
newTitle: string;
|
|
136
|
+
/** 原始节点数据 */
|
|
137
|
+
node: FolderTreeData;
|
|
138
|
+
}) => void;
|
|
139
|
+
/** 新建确认回调,失焦或回车时触发 */
|
|
140
|
+
onCreate?: (info: {
|
|
141
|
+
/** 父节点 key */
|
|
142
|
+
parentKey: string;
|
|
143
|
+
/** 用户输入的名称 */
|
|
144
|
+
name: string;
|
|
145
|
+
/** 节点类型 */
|
|
146
|
+
type: "file" | "folder";
|
|
147
|
+
/** 附加数据 */
|
|
148
|
+
extra?: any;
|
|
149
|
+
}) => void;
|
|
91
150
|
/** 拖拽完成回调 */
|
|
92
151
|
onDrop?: (info: {
|
|
93
152
|
/** 被拖拽节点的文件名 */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/FolderTree/types.ts"],
|
|
4
|
-
"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 extra?: T;\n children?: FolderTreeData<T>[];\n}\n\n/** 文件内容加载服务 */\nexport interface FileContentService {\n loadFileContent(filePath: string): Promise<string>;\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 /**
|
|
4
|
+
"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 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 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"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export { useXAi, XAiProvider, XAiChatbot, XAiSDK, XAiSender, XAiConversations, u
|
|
|
21
21
|
export { XAdkProvider, XAdkChatbot, XAdkSender, XAdkSenderSwitch, FileGallery, XAdkThoughtChain, useADKChat, baseChatStrategies, basePreset, baseToolKindResolver, createXGroupUploadRequest, mergeChatStrategies, resolvePresetUploadRequest, resolveChatPreset, xGroupAdkPreset, xGroupToolKindResolver, };
|
|
22
22
|
import FolderTree from "./components/FolderTree";
|
|
23
23
|
export { FolderTree };
|
|
24
|
-
export type { FolderTreeProps, FolderTreeData, FileContentService, } from "./components/FolderTree";
|
|
24
|
+
export type { FolderTreeProps, FolderTreeData, FileContentService, FolderTreeRef, } from "./components/FolderTree";
|
|
25
25
|
export { default as MarkdownRender } from "./components/XAdkChatbot/components/MarkdownRender";
|
|
26
26
|
export { default as FunctionCallRender } from "./components/XAdkChatbot/components/FunctionCallRender";
|
|
27
27
|
export { default as ThinkRender } from "./components/XAdkChatbot/components/ThinkRender";
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport XAdkSenderSwitch from \"./components/XAdkSender/Switch\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xGroupAdk\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n XAdkSenderSwitch,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n} from \"./types/XAdkThoughtChain\";\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,oBAA6B;AAC7B,wBAAuB;AACvB,uBAUO;AAGP,qBAIO;AAEP,wBAAc,oBArCd;AA2EA,wBAAuB;
|
|
4
|
+
"sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport XAdkSenderSwitch from \"./components/XAdkSender/Switch\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xGroupAdk\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n XAdkSenderSwitch,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n} from \"./types/XAdkThoughtChain\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,oBAA6B;AAC7B,wBAAuB;AACvB,uBAUO;AAGP,qBAIO;AAEP,wBAAc,oBArCd;AA2EA,wBAAuB;AAUvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;",
|
|
6
6
|
"names": ["FileGallery", "FolderTree", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkSenderSwitch", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { TreeProps } from "antd";
|
|
3
|
-
import type { FolderTreeData, FolderTreeProps } from "./types";
|
|
3
|
+
import type { FolderTreeData, FolderTreeProps, EditNodeInfo, CreateNodeContext } from "./types";
|
|
4
4
|
export interface DirectoryTreeComponentProps {
|
|
5
5
|
treeData: FolderTreeData[];
|
|
6
6
|
directoryIcons?: FolderTreeProps["directoryIcons"];
|
|
@@ -17,6 +17,18 @@ export interface DirectoryTreeComponentProps {
|
|
|
17
17
|
width?: number | string;
|
|
18
18
|
draggable?: FolderTreeProps["draggable"];
|
|
19
19
|
onDrop?: FolderTreeProps["onDrop"];
|
|
20
|
+
/** 当前编辑节点信息 */
|
|
21
|
+
editNode?: EditNodeInfo | null;
|
|
22
|
+
/** 编辑值变化回调 */
|
|
23
|
+
onEditValueChange?: (value: string) => void;
|
|
24
|
+
/** 编辑确认回调 */
|
|
25
|
+
onEditConfirm?: () => void;
|
|
26
|
+
/** 编辑取消回调 */
|
|
27
|
+
onEditCancel?: () => void;
|
|
28
|
+
/** 新建上下文 */
|
|
29
|
+
createInfo?: CreateNodeContext | null;
|
|
30
|
+
/** 开始重命名回调(由父组件注入) */
|
|
31
|
+
onStartRename?: (fullPath: string, node: FolderTreeData) => void;
|
|
20
32
|
}
|
|
21
33
|
declare const DirectoryTreeComponent: React.FC<DirectoryTreeComponentProps>;
|
|
22
34
|
export default DirectoryTreeComponent;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
2
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
3
|
import React, { useCallback } from "react";
|
|
4
|
-
import { Tree, Dropdown } from "antd";
|
|
4
|
+
import { Tree, Dropdown, Input } from "antd";
|
|
5
5
|
import { FileOutlined, FolderOutlined, MoreOutlined } from "@ant-design/icons";
|
|
6
6
|
import clsx from "clsx";
|
|
7
7
|
import { useStyles } from "./styles";
|
|
@@ -25,7 +25,13 @@ var DirectoryTreeComponent = function DirectoryTreeComponent(_ref) {
|
|
|
25
25
|
moreActions = _ref.moreActions,
|
|
26
26
|
width = _ref.width,
|
|
27
27
|
draggable = _ref.draggable,
|
|
28
|
-
onDrop = _ref.onDrop
|
|
28
|
+
onDrop = _ref.onDrop,
|
|
29
|
+
editNode = _ref.editNode,
|
|
30
|
+
onEditValueChange = _ref.onEditValueChange,
|
|
31
|
+
onEditConfirm = _ref.onEditConfirm,
|
|
32
|
+
onEditCancel = _ref.onEditCancel,
|
|
33
|
+
createInfo = _ref.createInfo,
|
|
34
|
+
onStartRename = _ref.onStartRename;
|
|
29
35
|
var styles = useStyles();
|
|
30
36
|
var isFolder = function isFolder(node) {
|
|
31
37
|
return !!node.children && node.children.length > 0;
|
|
@@ -56,17 +62,55 @@ var DirectoryTreeComponent = function DirectoryTreeComponent(_ref) {
|
|
|
56
62
|
return s !== "";
|
|
57
63
|
});
|
|
58
64
|
}, []);
|
|
65
|
+
var renderInlineInput = useCallback(function (value) {
|
|
66
|
+
return /*#__PURE__*/_jsx("span", {
|
|
67
|
+
className: styles.treeNodeTitle,
|
|
68
|
+
children: /*#__PURE__*/_jsx(Input, {
|
|
69
|
+
size: "small",
|
|
70
|
+
value: value,
|
|
71
|
+
onChange: function onChange(e) {
|
|
72
|
+
return onEditValueChange === null || onEditValueChange === void 0 ? void 0 : onEditValueChange(e.target.value);
|
|
73
|
+
},
|
|
74
|
+
onBlur: function onBlur() {
|
|
75
|
+
return onEditConfirm === null || onEditConfirm === void 0 ? void 0 : onEditConfirm();
|
|
76
|
+
},
|
|
77
|
+
onPressEnter: function onPressEnter() {
|
|
78
|
+
return onEditConfirm === null || onEditConfirm === void 0 ? void 0 : onEditConfirm();
|
|
79
|
+
},
|
|
80
|
+
onKeyDown: function onKeyDown(e) {
|
|
81
|
+
if (e.key === "Escape") {
|
|
82
|
+
e.stopPropagation();
|
|
83
|
+
onEditCancel === null || onEditCancel === void 0 || onEditCancel();
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
autoFocus: true,
|
|
87
|
+
className: styles.inlineInput,
|
|
88
|
+
onClick: function onClick(e) {
|
|
89
|
+
return e.stopPropagation();
|
|
90
|
+
},
|
|
91
|
+
onSelect: function onSelect(e) {
|
|
92
|
+
return e.stopPropagation();
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
});
|
|
96
|
+
}, [onEditValueChange, onEditConfirm, onEditCancel, styles]);
|
|
59
97
|
var convertToTreeData = useCallback(function (nodes) {
|
|
60
98
|
var parentSegments = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
61
|
-
|
|
99
|
+
var parentKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
|
|
100
|
+
var result = nodes.map(function (node) {
|
|
62
101
|
var pathSegments = buildPathSegments(node, parentSegments);
|
|
63
102
|
var fullPath = pathSegments.join("/").replace(/^\/+/, "");
|
|
64
|
-
var
|
|
103
|
+
var isEditing = editNode && editNode.key === fullPath;
|
|
104
|
+
var titleContent = isEditing ? renderInlineInput(editNode.currentValue) : /*#__PURE__*/_jsxs("span", {
|
|
65
105
|
className: clsx(styles.treeNodeTitle, moreActions && styles.treeNodeTitleHover),
|
|
66
106
|
children: [/*#__PURE__*/_jsx("span", {
|
|
67
107
|
children: node.title
|
|
68
108
|
}), moreActions && /*#__PURE__*/_jsx(Dropdown, {
|
|
69
|
-
menu: moreActions(node
|
|
109
|
+
menu: moreActions(node, {
|
|
110
|
+
startRename: function startRename() {
|
|
111
|
+
return onStartRename === null || onStartRename === void 0 ? void 0 : onStartRename(fullPath, node);
|
|
112
|
+
}
|
|
113
|
+
}),
|
|
70
114
|
trigger: ["click"],
|
|
71
115
|
placement: "bottomRight",
|
|
72
116
|
children: /*#__PURE__*/_jsx("span", {
|
|
@@ -78,6 +122,7 @@ var DirectoryTreeComponent = function DirectoryTreeComponent(_ref) {
|
|
|
78
122
|
})
|
|
79
123
|
})]
|
|
80
124
|
});
|
|
125
|
+
var nodeChildren = node.children ? convertToTreeData(node.children, pathSegments, fullPath) : undefined;
|
|
81
126
|
return _objectSpread(_objectSpread({}, node), {}, {
|
|
82
127
|
key: fullPath,
|
|
83
128
|
path: fullPath,
|
|
@@ -87,22 +132,54 @@ var DirectoryTreeComponent = function DirectoryTreeComponent(_ref) {
|
|
|
87
132
|
isLeaf: !isFolder(node),
|
|
88
133
|
/** 保存原始节点数据用于拖拽回调 */
|
|
89
134
|
_originalNode: node,
|
|
90
|
-
children:
|
|
135
|
+
children: nodeChildren
|
|
91
136
|
});
|
|
92
137
|
});
|
|
93
|
-
|
|
94
|
-
|
|
138
|
+
|
|
139
|
+
// 新建模式:在目标父节点下插入临时节点
|
|
140
|
+
if (createInfo && editNode && editNode.mode === "create") {
|
|
141
|
+
var targetParentKey = createInfo.parentKey;
|
|
142
|
+
// 匹配当前层级的父节点 key
|
|
143
|
+
if (targetParentKey === parentKey || targetParentKey === "" && parentKey === "" || targetParentKey === "/" && parentKey === "") {
|
|
144
|
+
var tempNode = {
|
|
145
|
+
key: editNode.key,
|
|
146
|
+
title: renderInlineInput(editNode.currentValue),
|
|
147
|
+
icon: createInfo.type === "folder" ? /*#__PURE__*/_jsx(FolderOutlined, {}) : /*#__PURE__*/_jsx(FileOutlined, {}),
|
|
148
|
+
isLeaf: createInfo.type === "file",
|
|
149
|
+
path: editNode.key,
|
|
150
|
+
pathSegments: [editNode.key],
|
|
151
|
+
_originalNode: null,
|
|
152
|
+
/** 标记为临时节点 */
|
|
153
|
+
_isTempNode: true
|
|
154
|
+
};
|
|
155
|
+
result.push(tempNode);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return result;
|
|
159
|
+
}, [buildPathSegments, getIcon, moreActions, styles, editNode, renderInlineInput, onEditValueChange, createInfo, onStartRename]);
|
|
160
|
+
var treeDataConverted = convertToTreeData(treeData, [], "");
|
|
95
161
|
|
|
96
162
|
// ====== 拖拽配置 ======
|
|
97
163
|
var dragMode = draggable === true ? "file" : draggable || false;
|
|
98
164
|
var draggableConfig = dragMode ? {
|
|
99
165
|
icon: false,
|
|
100
166
|
nodeDraggable: function nodeDraggable(node) {
|
|
167
|
+
var nd = node;
|
|
168
|
+
// 临时新建节点不可拖拽
|
|
169
|
+
if (nd._isTempNode) return false;
|
|
101
170
|
if (dragMode === "file") return !!node.isLeaf;
|
|
102
171
|
if (dragMode === "folder") return !node.isLeaf;
|
|
103
172
|
return true; // 'all'
|
|
104
173
|
}
|
|
105
174
|
} : false;
|
|
175
|
+
var handleSelect = useCallback(function (keys, info) {
|
|
176
|
+
// 编辑态不响应选中
|
|
177
|
+
if (editNode) return;
|
|
178
|
+
// 临时节点不可选中
|
|
179
|
+
var node = info.node;
|
|
180
|
+
if (node._isTempNode) return;
|
|
181
|
+
onSelect === null || onSelect === void 0 || onSelect(keys, info);
|
|
182
|
+
}, [onSelect, editNode]);
|
|
106
183
|
var handleDrop = useCallback(function (info) {
|
|
107
184
|
if (!onDrop) return;
|
|
108
185
|
var dragNode = info.dragNode;
|
|
@@ -147,10 +224,14 @@ var DirectoryTreeComponent = function DirectoryTreeComponent(_ref) {
|
|
|
147
224
|
}), /*#__PURE__*/_jsx("div", {
|
|
148
225
|
className: styles.directoryTreeContent,
|
|
149
226
|
children: /*#__PURE__*/_jsx(AntDirectoryTree, {
|
|
227
|
+
style: {
|
|
228
|
+
"--ant-tree-directory-node-selected-bg": "rgba(0,0,0,0.03)",
|
|
229
|
+
"--ant-tree-directory-node-selected-color": "#1a1c1e"
|
|
230
|
+
},
|
|
150
231
|
treeData: treeDataConverted,
|
|
151
232
|
selectedKeys: selectedKeys,
|
|
152
233
|
expandedKeys: expandedKeys,
|
|
153
|
-
onSelect:
|
|
234
|
+
onSelect: handleSelect,
|
|
154
235
|
onExpand: onExpand,
|
|
155
236
|
multiple: false,
|
|
156
237
|
blockNode: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","Tree","Dropdown","FileOutlined","FolderOutlined","MoreOutlined","clsx","useStyles","jsx","_jsx","jsxs","_jsxs","AntDirectoryTree","DirectoryTree","DirectoryTreeComponent","_ref","treeData","selectedKeys","expandedKeys","onSelect","onExpand","_ref$showLine","showLine","switcherIcon","_ref$defaultExpandAll","defaultExpandAll","className","directoryIcons","directoryTitle","moreActions","width","draggable","onDrop","styles","isFolder","node","children","length","getIcon","icon","directory","filePath","path","toLowerCase","extension","split","pop","buildPathSegments","parentSegments","arguments","undefined","concat","_toConsumableArray","filter","s","convertToTreeData","nodes","map","pathSegments","fullPath","join","replace","titleContent","treeNodeTitle","treeNodeTitleHover","title","menu","trigger","placement","moreIcon","onClick","e","stopPropagation","_objectSpread","key","isLeaf","_originalNode","treeDataConverted","dragMode","draggableConfig","nodeDraggable","handleDrop","info","dragNode","dropNode","originalDragNode","originalDropNode","dragKey","String","dropKey","dragFileName","newPath","dropToGap","dropParentPath","includes","substring","lastIndexOf","fileName","extra","oldPath","titleNode","directoryPanel","style","directoryTreeContent","multiple","blockNode"],"sources":["../../../../src/components/FolderTree/DirectoryTree.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Tree, Dropdown } from \"antd\";\nimport {\n FileOutlined,\n FolderOutlined,\n MoreOutlined,\n} from \"@ant-design/icons\";\nimport type { TreeProps } from \"antd\";\nimport type { DataNode } from \"antd/es/tree\";\nimport clsx from \"clsx\";\nimport type { FolderTreeData, FolderTreeProps } from \"./types\";\nimport { useStyles } from \"./styles\";\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\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}) => {\n const styles = useStyles();\n\n const isFolder = (node: FolderTreeData): boolean => {\n return !!node.children && node.children.length > 0;\n };\n\n const getIcon = useCallback(\n (node: FolderTreeData) => {\n if (directoryIcons === false || directoryIcons === null) {\n return null;\n }\n if (isFolder(node)) {\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 convertToTreeData = useCallback(\n (nodes: FolderTreeData[], parentSegments: string[] = []): DataNode[] => {\n return nodes.map((node) => {\n const pathSegments = buildPathSegments(node, parentSegments);\n const fullPath = pathSegments.join(\"/\").replace(/^\\/+/, \"\");\n\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 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 return {\n ...node,\n key: fullPath,\n path: fullPath,\n pathSegments,\n title: titleContent,\n icon: getIcon(node),\n isLeaf: !isFolder(node),\n /** 保存原始节点数据用于拖拽回调 */\n _originalNode: node,\n children: node.children\n ? convertToTreeData(node.children, pathSegments)\n : undefined,\n };\n });\n },\n [buildPathSegments, getIcon, moreActions, styles]\n );\n\n const treeDataConverted = convertToTreeData(treeData);\n\n // ====== 拖拽配置 ======\n const dragMode = draggable === true ? \"file\" : draggable || false;\n\n const draggableConfig = dragMode\n ? {\n icon: false,\n nodeDraggable: (node: DataNode) => {\n if (dragMode === \"file\") return !!node.isLeaf;\n if (dragMode === \"folder\") return !node.isLeaf;\n return true; // 'all'\n },\n }\n : false;\n\n const handleDrop: TreeProps[\"onDrop\"] = useCallback(\n (info: Parameters<NonNullable<TreeProps[\"onDrop\"]>>[0]) => {\n if (!onDrop) return;\n\n const dragNode = info.dragNode as DataNode & { _originalNode?: FolderTreeData };\n const dropNode = info.node as DataNode & { _originalNode?: FolderTreeData };\n\n const originalDragNode = dragNode._originalNode;\n const originalDropNode = dropNode._originalNode;\n if (!originalDragNode || !originalDropNode) return;\n\n // dragNode 的原始完整路径\n const dragKey = String(dragNode.key);\n // 计算新路径:如果 drop 到文件夹上(非叶子),新路径为 dropNode路径/dragNode文件名\n // 如果 drop 到文件旁边,新路径为 dropNode 的父路径/dragNode文件名\n const dropKey = String(dropNode.key);\n const dragFileName = originalDragNode.path;\n let newPath: string;\n\n if (!dropNode.isLeaf && info.dropToGap === false) {\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 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 className={styles.directoryTreeContent}>\n <AntDirectoryTree\n treeData={treeDataConverted}\n selectedKeys={selectedKeys}\n expandedKeys={expandedKeys}\n onSelect={onSelect}\n onExpand={onExpand}\n multiple={false}\n blockNode\n showLine={showLine as any}\n switcherIcon={switcherIcon}\n defaultExpandAll={defaultExpandAll}\n draggable={draggableConfig}\n onDrop={dragMode ? handleDrop : undefined}\n />\n </div>\n </div>\n );\n};\n\nexport default DirectoryTreeComponent;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useCallback","Tree","Dropdown","Input","FileOutlined","FolderOutlined","MoreOutlined","clsx","useStyles","jsx","_jsx","jsxs","_jsxs","AntDirectoryTree","DirectoryTree","DirectoryTreeComponent","_ref","treeData","selectedKeys","expandedKeys","onSelect","onExpand","_ref$showLine","showLine","switcherIcon","_ref$defaultExpandAll","defaultExpandAll","className","directoryIcons","directoryTitle","moreActions","width","draggable","onDrop","editNode","onEditValueChange","onEditConfirm","onEditCancel","createInfo","onStartRename","styles","isFolder","node","children","length","getIcon","icon","directory","filePath","path","toLowerCase","extension","split","pop","buildPathSegments","parentSegments","arguments","undefined","concat","_toConsumableArray","filter","s","renderInlineInput","value","treeNodeTitle","size","onChange","e","target","onBlur","onPressEnter","onKeyDown","key","stopPropagation","autoFocus","inlineInput","onClick","convertToTreeData","nodes","parentKey","result","map","pathSegments","fullPath","join","replace","isEditing","titleContent","currentValue","treeNodeTitleHover","title","menu","startRename","trigger","placement","moreIcon","nodeChildren","_objectSpread","isLeaf","_originalNode","mode","targetParentKey","tempNode","type","_isTempNode","push","treeDataConverted","dragMode","draggableConfig","nodeDraggable","nd","handleSelect","keys","info","handleDrop","dragNode","dropNode","originalDragNode","originalDropNode","dragKey","String","dropKey","dragFileName","newPath","dropToGap","dropParentPath","includes","substring","lastIndexOf","fileName","extra","oldPath","titleNode","directoryPanel","style","directoryTreeContent","multiple","blockNode"],"sources":["../../../../src/components/FolderTree/DirectoryTree.tsx"],"sourcesContent":["import React, { useCallback } 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\";\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?: () => void;\n /** 编辑取消回调 */\n onEditCancel?: () => void;\n /** 新建上下文 */\n createInfo?: CreateNodeContext | null;\n /** 开始重命名回调(由父组件注入) */\n onStartRename?: (fullPath: string, node: FolderTreeData) => void;\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}) => {\n const styles = useStyles();\n\n const isFolder = (node: FolderTreeData): boolean => {\n return !!node.children && node.children.length > 0;\n };\n\n const getIcon = useCallback(\n (node: FolderTreeData) => {\n if (directoryIcons === false || directoryIcons === null) {\n return null;\n }\n if (isFolder(node)) {\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 (value: string) => (\n <span className={styles.treeNodeTitle}>\n <Input\n size=\"small\"\n value={value}\n onChange={(e) => onEditValueChange?.(e.target.value)}\n onBlur={() => onEditConfirm?.()}\n onPressEnter={() => onEditConfirm?.()}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onEditCancel?.();\n }\n }}\n autoFocus\n className={styles.inlineInput}\n onClick={(e) => e.stopPropagation()}\n onSelect={(e) => e.stopPropagation()}\n />\n </span>\n ),\n [onEditValueChange, onEditConfirm, onEditCancel, styles],\n );\n\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 titleContent = isEditing ? (\n renderInlineInput(editNode!.currentValue)\n ) : (\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 })}\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 const nodeChildren = node.children\n ? convertToTreeData(node.children, pathSegments, fullPath)\n : undefined;\n\n return {\n ...node,\n key: fullPath,\n path: fullPath,\n pathSegments,\n title: titleContent,\n icon: getIcon(node),\n isLeaf: !isFolder(node),\n /** 保存原始节点数据用于拖拽回调 */\n _originalNode: node,\n children: nodeChildren,\n };\n });\n\n // 新建模式:在目标父节点下插入临时节点\n if (createInfo && editNode && editNode.mode === \"create\") {\n const targetParentKey = createInfo.parentKey;\n // 匹配当前层级的父节点 key\n if (\n targetParentKey === parentKey ||\n (targetParentKey === \"\" && parentKey === \"\") ||\n (targetParentKey === \"/\" && parentKey === \"\")\n ) {\n const tempNode: any = {\n key: editNode.key,\n title: renderInlineInput(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 /** 标记为临时节点 */\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 onEditValueChange,\n createInfo,\n onStartRename,\n ],\n );\n\n const treeDataConverted = convertToTreeData(treeData, [], \"\");\n\n // ====== 拖拽配置 ======\n const dragMode = draggable === true ? \"file\" : draggable || false;\n\n const draggableConfig = dragMode\n ? {\n icon: false,\n nodeDraggable: (node: DataNode) => {\n const nd = node as DataNode & { _isTempNode?: boolean };\n // 临时新建节点不可拖拽\n if (nd._isTempNode) return false;\n if (dragMode === \"file\") return !!node.isLeaf;\n if (dragMode === \"folder\") return !node.isLeaf;\n return true; // 'all'\n },\n }\n : false;\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 onSelect?.(keys, info);\n },\n [onSelect, editNode],\n );\n\n const handleDrop: TreeProps[\"onDrop\"] = useCallback(\n (info: Parameters<NonNullable<TreeProps[\"onDrop\"]>>[0]) => {\n if (!onDrop) return;\n\n const dragNode = info.dragNode as DataNode & {\n _originalNode?: FolderTreeData;\n };\n const dropNode = info.node as DataNode & {\n _originalNode?: FolderTreeData;\n };\n\n const originalDragNode = dragNode._originalNode;\n const originalDropNode = dropNode._originalNode;\n if (!originalDragNode || !originalDropNode) return;\n\n // dragNode 的原始完整路径\n const dragKey = String(dragNode.key);\n // 计算新路径:如果 drop 到文件夹上(非叶子),新路径为 dropNode路径/dragNode文件名\n // 如果 drop 到文件旁边,新路径为 dropNode 的父路径/dragNode文件名\n const dropKey = String(dropNode.key);\n const dragFileName = originalDragNode.path;\n let newPath: string;\n\n if (!dropNode.isLeaf && info.dropToGap === false) {\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 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 className={styles.directoryTreeContent}>\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={draggableConfig}\n onDrop={dragMode ? handleDrop : undefined}\n />\n </div>\n </div>\n );\n};\n\nexport default DirectoryTreeComponent;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { FolderTreeProps } from "./types";
|
|
3
|
-
export type { FolderTreeData, FolderTreeProps, FileContentService, } from "./types";
|
|
4
|
-
declare const FolderTree: React.
|
|
2
|
+
import type { FolderTreeProps, FolderTreeRef } from "./types";
|
|
3
|
+
export type { FolderTreeData, FolderTreeProps, FileContentService, FolderTreeRef, } from "./types";
|
|
4
|
+
declare const FolderTree: React.ForwardRefExoticComponent<FolderTreeProps & React.RefAttributes<FolderTreeRef>>;
|
|
5
5
|
export default FolderTree;
|