@ai-group/chat-sdk 3.3.11 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/FolderTree/DirectoryTree.d.ts +20 -0
- package/dist/cjs/components/FolderTree/DirectoryTree.js +161 -0
- package/dist/cjs/components/FolderTree/DirectoryTree.js.map +7 -0
- package/dist/cjs/components/FolderTree/FilePreview.d.ts +17 -0
- package/dist/cjs/components/FolderTree/FilePreview.js +163 -0
- package/dist/cjs/components/FolderTree/FilePreview.js.map +7 -0
- package/dist/cjs/components/FolderTree/index.d.ts +5 -0
- package/dist/cjs/components/FolderTree/index.js +235 -0
- package/dist/cjs/components/FolderTree/index.js.map +7 -0
- package/dist/cjs/components/FolderTree/styles.d.ts +48 -0
- package/dist/cjs/components/FolderTree/styles.js +149 -0
- package/dist/cjs/components/FolderTree/styles.js.map +7 -0
- package/dist/cjs/components/FolderTree/types.d.ts +81 -0
- package/dist/cjs/components/FolderTree/types.js +18 -0
- package/dist/cjs/components/FolderTree/types.js.map +7 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +3 -3
- package/dist/esm/components/FolderTree/DirectoryTree.d.ts +20 -0
- package/dist/esm/components/FolderTree/DirectoryTree.js +118 -0
- package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -0
- package/dist/esm/components/FolderTree/FilePreview.d.ts +17 -0
- package/dist/esm/components/FolderTree/FilePreview.js +160 -0
- package/dist/esm/components/FolderTree/FilePreview.js.map +1 -0
- package/dist/esm/components/FolderTree/index.d.ts +5 -0
- package/dist/esm/components/FolderTree/index.js +271 -0
- package/dist/esm/components/FolderTree/index.js.map +1 -0
- package/dist/esm/components/FolderTree/styles.d.ts +48 -0
- package/dist/esm/components/FolderTree/styles.js +22 -0
- package/dist/esm/components/FolderTree/styles.js.map +1 -0
- package/dist/esm/components/FolderTree/types.d.ts +81 -0
- package/dist/esm/components/FolderTree/types.js +2 -0
- package/dist/esm/components/FolderTree/types.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/FolderTree/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useCallback, useEffect, useState } from \"react\";\nimport type { TreeProps } from \"antd\";\nimport clsx from \"clsx\";\nimport type { FolderTreeData, FolderTreeProps } from \"./types\";\nimport DirectoryTreeComponent from \"./DirectoryTree\";\nimport FilePreview from \"./FilePreview\";\nimport { useStyles } from \"./styles\";\n\nexport type { FolderTreeData, FolderTreeProps, FileContentService } from \"./types\";\n\nconst FolderTree: React.FC<FolderTreeProps> = (props) => {\n const {\n className,\n style,\n treeData,\n directoryIcons,\n previewRender,\n directoryTitle,\n previewTitle,\n selectable = true,\n defaultSelectedFile,\n defaultExpandAll = true,\n selectedFile,\n onSelectedFileChange,\n directoryTreeWidth = 280,\n emptyRender,\n defaultExpandedPaths,\n expandedPaths,\n onExpandedPathsChange,\n onFileClick,\n onFolderClick,\n fileContentService,\n moreActions,\n showLine,\n switcherIcon,\n showPreview = true,\n } = props;\n\n const styles = useStyles();\n\n // ====== 工具函数 ======\n const findNodeAndValidate = useCallback(\n (\n path: string | string[],\n validateAsFile = false\n ): { node: FolderTreeData | undefined; isValid: boolean } => {\n if (!path) return { node: undefined, isValid: false };\n const segments = Array.isArray(path)\n ? path.filter(Boolean)\n : path.split(\"/\").filter(Boolean);\n if (segments.length === 0) return { node: undefined, isValid: false };\n\n const findNode = (\n nodes: FolderTreeData[],\n index = 0\n ): FolderTreeData | undefined => {\n if (index >= segments.length) return undefined;\n const currentSegment = segments[index];\n for (const node of nodes) {\n if (node.path === currentSegment) {\n return index === segments.length - 1\n ? node\n : node.children\n ? findNode(node.children, index + 1)\n : undefined;\n }\n }\n return undefined;\n };\n\n const node = findNode(treeData);\n const isValid = validateAsFile\n ? !!node && (!node?.children || node.children.length === 0)\n : !!node;\n return { node, isValid };\n },\n [treeData]\n );\n\n const isValidSelectedFile = (filePath?: string[]): boolean =>\n !!(\n filePath &&\n filePath.length > 0 &&\n findNodeAndValidate(filePath, true).isValid\n );\n\n // ====== State ======\n const [selectedFileState, setSelectedFileState] = useState<string[]>(() =>\n isValidSelectedFile(selectedFile || defaultSelectedFile)\n ? selectedFile || defaultSelectedFile || []\n : []\n );\n const [expandedPathsState, setExpandedPaths] = useState<string[] | undefined>(\n expandedPaths || defaultExpandedPaths\n );\n const [validSelectedFile, setValidSelectedFile] = useState<boolean>(\n isValidSelectedFile(selectedFile || defaultSelectedFile)\n );\n const [fileContent, setFileContent] = useState<string>(\"\");\n const [loadingContent, setLoadingContent] = useState<boolean>(false);\n\n // 受控模式同步\n useEffect(() => {\n if (selectedFile !== undefined) {\n setSelectedFileState(selectedFile);\n setValidSelectedFile(isValidSelectedFile(selectedFile));\n }\n }, [selectedFile, treeData]);\n\n useEffect(() => {\n if (expandedPaths !== undefined) {\n setExpandedPaths(expandedPaths);\n }\n }, [expandedPaths]);\n\n // ====== 加载文件内容 ======\n useEffect(() => {\n const loadContent = async () => {\n if (!validSelectedFile || selectedFileState.length === 0) {\n setFileContent(\"\");\n setLoadingContent(false);\n return;\n }\n\n const filePath = selectedFileState.join(\"/\");\n const segments = filePath.split(\"/\").filter((s) => s !== \"\");\n const { node } = findNodeAndValidate(segments);\n\n if (fileContentService) {\n setLoadingContent(true);\n try {\n const content = await fileContentService.loadFileContent(filePath);\n setFileContent(content);\n } catch (error) {\n setFileContent(\n `// 加载错误: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`\n );\n } finally {\n setLoadingContent(false);\n }\n } else if (node?.content) {\n setFileContent(node.content);\n setLoadingContent(false);\n } else {\n setFileContent(\"\");\n setLoadingContent(false);\n }\n };\n\n loadContent();\n }, [validSelectedFile, selectedFileState, treeData, fileContentService, findNodeAndValidate]);\n\n // ====== 事件处理 ======\n const handleSelect: TreeProps[\"onSelect\"] = (_keys, info) => {\n const keys = _keys as string[];\n const nodes = Array.isArray(info.selectedNodes)\n ? info.selectedNodes\n : [info.selectedNodes];\n\n const isFolder = nodes.some((node) => !node.isLeaf);\n if (isFolder) {\n if (nodes.length === 1) {\n const node = nodes[0] as unknown as FolderTreeData;\n onFolderClick?.(node.path);\n }\n return;\n }\n\n const pathArray = keys[0]?.split(\"/\").filter(Boolean) || [];\n if (pathArray.length === 0) return;\n\n const selectedNode = nodes[0] as unknown as FolderTreeData | undefined;\n const fileName = selectedNode?.title as string | undefined;\n const nodeContent = selectedNode?.content as string | undefined;\n\n onSelectedFileChange?.({\n path: pathArray,\n title: fileName,\n content: nodeContent,\n });\n\n const isControlled = selectedFile !== undefined;\n if (!isControlled) {\n setValidSelectedFile(true);\n setSelectedFileState(pathArray);\n }\n\n if (nodes.length === 1) {\n const node = nodes[0] as unknown as FolderTreeData;\n onFileClick?.(node.path, node.content);\n }\n };\n\n const handleExpand: TreeProps[\"onExpand\"] = (keys) => {\n const newPaths = keys as string[];\n setExpandedPaths(newPaths);\n onExpandedPathsChange?.(newPaths);\n };\n\n return (\n <div\n className={clsx(styles.container, className)}\n style={{\n ...style,\n ...(style?.background\n ? ({ \"--folder-tree-directory-bg\": style.background } as React.CSSProperties)\n : {}),\n ...(style?.backgroundColor\n ? ({ \"--folder-tree-directory-bg\": style.backgroundColor } as React.CSSProperties)\n : {}),\n }}\n >\n <DirectoryTreeComponent\n treeData={treeData}\n directoryIcons={directoryIcons}\n selectedKeys={\n selectable && selectedFileState && validSelectedFile\n ? [selectedFileState.join(\"/\")]\n : []\n }\n expandedKeys={expandedPathsState}\n onSelect={handleSelect}\n onExpand={handleExpand}\n defaultExpandAll={defaultExpandAll}\n directoryTitle={directoryTitle}\n moreActions={moreActions}\n showLine={showLine}\n switcherIcon={switcherIcon}\n width={directoryTreeWidth}\n />\n {showPreview && (\n <FilePreview\n selectedFile={validSelectedFile ? selectedFileState : []}\n fileContent={fileContent}\n loading={loadingContent}\n previewTitle={previewTitle}\n previewRender={previewRender}\n emptyRender={emptyRender}\n getFileNode={(path) => {\n if (!path || path.length === 0) return undefined;\n const { node } = findNodeAndValidate(path);\n return node\n ? { title: node.title, path: node.path, content: node.content }\n : undefined;\n }}\n />\n )}\n </div>\n );\n};\n\nexport default FolderTree;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["node", "clsx", "DirectoryTreeComponent", "FilePreview"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export declare const useStyles: () => {
|
|
2
|
+
container: string;
|
|
3
|
+
directoryPanel: string;
|
|
4
|
+
directoryTitle: string;
|
|
5
|
+
directoryTreeContent: string;
|
|
6
|
+
previewPanel: string;
|
|
7
|
+
previewTitle: string;
|
|
8
|
+
previewContent: string;
|
|
9
|
+
emptyContainer: string;
|
|
10
|
+
loadingContainer: string;
|
|
11
|
+
treeNodeTitle: string;
|
|
12
|
+
moreIcon: string;
|
|
13
|
+
treeNodeTitleHover: string;
|
|
14
|
+
copyBtn: string;
|
|
15
|
+
} & {
|
|
16
|
+
w: (width: string | number) => string;
|
|
17
|
+
h: (height: string | number) => string;
|
|
18
|
+
p: (padding: string) => string;
|
|
19
|
+
pb: (padding: string | number) => string;
|
|
20
|
+
pt: (padding: string | number) => string;
|
|
21
|
+
pl: (padding: string | number) => string;
|
|
22
|
+
pr: (padding: string | number) => string;
|
|
23
|
+
m: (margin: string) => string;
|
|
24
|
+
mb: (margin: string | number) => string;
|
|
25
|
+
mt: (margin: string | number) => string;
|
|
26
|
+
ml: (margin: string | number) => string;
|
|
27
|
+
mr: (margin: string | number) => string;
|
|
28
|
+
text: (size: string | number) => string;
|
|
29
|
+
weight: (size: number) => string;
|
|
30
|
+
textColor: (c: string) => string;
|
|
31
|
+
bg: (c: string) => string;
|
|
32
|
+
rs: (radius: string | number) => string;
|
|
33
|
+
gap: (g: string | number) => string;
|
|
34
|
+
flex: string;
|
|
35
|
+
flexCenter: string;
|
|
36
|
+
flexBetween: string;
|
|
37
|
+
flexColumn: string;
|
|
38
|
+
flex1: string;
|
|
39
|
+
cursor: (type: string) => string;
|
|
40
|
+
border: (color: string, width?: string) => string;
|
|
41
|
+
boxShadow: (shadow: string) => string;
|
|
42
|
+
transition: (property?: string, duration?: string) => string;
|
|
43
|
+
overflow: (type: string) => string;
|
|
44
|
+
position: (type: string) => string;
|
|
45
|
+
zIndex: (index: number) => string;
|
|
46
|
+
flexCenterGap2: string;
|
|
47
|
+
flexCenterGap4: string;
|
|
48
|
+
};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/components/FolderTree/styles.tsx
|
|
20
|
+
var styles_exports = {};
|
|
21
|
+
__export(styles_exports, {
|
|
22
|
+
useStyles: () => useStyles
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(styles_exports);
|
|
25
|
+
var import_css = require("@emotion/css");
|
|
26
|
+
var import_common = require("../../styles/common");
|
|
27
|
+
var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
28
|
+
container: import_css.css`
|
|
29
|
+
display: flex;
|
|
30
|
+
width: 100%;
|
|
31
|
+
height: 500px;
|
|
32
|
+
border: 1px solid #e8e8e8;
|
|
33
|
+
border-radius: 8px;
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
background: #fff;
|
|
36
|
+
`,
|
|
37
|
+
directoryPanel: import_css.css`
|
|
38
|
+
height: 100%;
|
|
39
|
+
overflow: auto;
|
|
40
|
+
border-right: 1px solid #e8e8e8;
|
|
41
|
+
background: var(--folder-tree-directory-bg, #fafafa);
|
|
42
|
+
`,
|
|
43
|
+
directoryTitle: import_css.css`
|
|
44
|
+
padding: 12px 16px;
|
|
45
|
+
font-weight: 600;
|
|
46
|
+
font-size: 14px;
|
|
47
|
+
border-bottom: 1px solid #e8e8e8;
|
|
48
|
+
color: #333;
|
|
49
|
+
`,
|
|
50
|
+
directoryTreeContent: import_css.css`
|
|
51
|
+
padding: 4px 0;
|
|
52
|
+
.ant-tree {
|
|
53
|
+
background: transparent;
|
|
54
|
+
}
|
|
55
|
+
.ant-tree-switcher {
|
|
56
|
+
margin-right: 0;
|
|
57
|
+
}
|
|
58
|
+
.ant-tree .ant-tree-node-content-wrapper {
|
|
59
|
+
display: inline-flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
flex: 1;
|
|
62
|
+
min-width: 0;
|
|
63
|
+
padding-left: 0;
|
|
64
|
+
}
|
|
65
|
+
.ant-tree .ant-tree-title {
|
|
66
|
+
flex: 1;
|
|
67
|
+
min-width: 0;
|
|
68
|
+
}
|
|
69
|
+
.ant-tree-directory .ant-tree-treenode {
|
|
70
|
+
&::before {
|
|
71
|
+
border-radius: 4px;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
`,
|
|
75
|
+
previewPanel: import_css.css`
|
|
76
|
+
flex: 1;
|
|
77
|
+
height: 100%;
|
|
78
|
+
overflow: auto;
|
|
79
|
+
display: flex;
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
`,
|
|
82
|
+
previewTitle: import_css.css`
|
|
83
|
+
padding: 10px 16px;
|
|
84
|
+
font-size: 13px;
|
|
85
|
+
font-weight: 500;
|
|
86
|
+
border-bottom: 1px solid #e8e8e8;
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
justify-content: space-between;
|
|
90
|
+
color: #333;
|
|
91
|
+
background: #fff;
|
|
92
|
+
`,
|
|
93
|
+
previewContent: import_css.css`
|
|
94
|
+
flex: 1;
|
|
95
|
+
overflow: auto;
|
|
96
|
+
padding: 16px;
|
|
97
|
+
font-size: 13px;
|
|
98
|
+
line-height: 1.6;
|
|
99
|
+
`,
|
|
100
|
+
emptyContainer: import_css.css`
|
|
101
|
+
display: flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
justify-content: center;
|
|
104
|
+
height: 100%;
|
|
105
|
+
`,
|
|
106
|
+
loadingContainer: import_css.css`
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
justify-content: center;
|
|
110
|
+
height: 100%;
|
|
111
|
+
`,
|
|
112
|
+
treeNodeTitle: import_css.css`
|
|
113
|
+
display: flex;
|
|
114
|
+
align-items: center;
|
|
115
|
+
justify-content: space-between;
|
|
116
|
+
padding-right: 4px;
|
|
117
|
+
`,
|
|
118
|
+
moreIcon: import_css.css`
|
|
119
|
+
opacity: 0;
|
|
120
|
+
cursor: pointer;
|
|
121
|
+
padding: 2px 4px;
|
|
122
|
+
border-radius: 4px;
|
|
123
|
+
color: #999;
|
|
124
|
+
font-size: 14px;
|
|
125
|
+
transition: all 0.2s;
|
|
126
|
+
&:hover {
|
|
127
|
+
color: #333;
|
|
128
|
+
background: rgba(0, 0, 0, 0.04);
|
|
129
|
+
}
|
|
130
|
+
`,
|
|
131
|
+
treeNodeTitleHover: import_css.css`
|
|
132
|
+
&:hover .folder-tree-more-icon {
|
|
133
|
+
opacity: 1;
|
|
134
|
+
}
|
|
135
|
+
`,
|
|
136
|
+
copyBtn: import_css.css`
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
color: #999;
|
|
139
|
+
font-size: 14px;
|
|
140
|
+
&:hover {
|
|
141
|
+
color: #1677ff;
|
|
142
|
+
}
|
|
143
|
+
`
|
|
144
|
+
}));
|
|
145
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
146
|
+
0 && (module.exports = {
|
|
147
|
+
useStyles
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/FolderTree/styles.tsx"],
|
|
4
|
+
"sourcesContent": ["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n container: css`\n display: flex;\n width: 100%;\n height: 500px;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n overflow: hidden;\n background: #fff;\n `,\n directoryPanel: css`\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n `,\n directoryTitle: css`\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n `,\n directoryTreeContent: css`\n padding: 4px 0;\n .ant-tree {\n background: transparent;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n }\n .ant-tree-directory .ant-tree-treenode {\n &::before {\n border-radius: 4px;\n }\n }\n `,\n previewPanel: css`\n flex: 1;\n height: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n `,\n previewTitle: css`\n padding: 10px 16px;\n font-size: 13px;\n font-weight: 500;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: #333;\n background: #fff;\n `,\n previewContent: css`\n flex: 1;\n overflow: auto;\n padding: 16px;\n font-size: 13px;\n line-height: 1.6;\n `,\n emptyContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n `,\n loadingContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n `,\n treeNodeTitle: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-right: 4px;\n `,\n moreIcon: css`\n opacity: 0;\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n color: #999;\n font-size: 14px;\n transition: all 0.2s;\n &:hover {\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n `,\n treeNodeTitleHover: css`\n &:hover .folder-tree-more-icon {\n opacity: 1;\n }\n `,\n copyBtn: css`\n cursor: pointer;\n color: #999;\n font-size: 14px;\n &:hover {\n color: #1677ff;\n }\n `,\n}));\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEzB,IAAM,gBAAY,+BAAgB,OAAO;AAAA,EAC9C,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASX,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBtB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWd,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaV,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQX,EAAE;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { DropdownProps } from "antd";
|
|
2
|
+
import type React from "react";
|
|
3
|
+
/** 文件树节点数据 */
|
|
4
|
+
export interface FolderTreeData {
|
|
5
|
+
title: React.ReactNode;
|
|
6
|
+
path: string;
|
|
7
|
+
content?: string;
|
|
8
|
+
children?: FolderTreeData[];
|
|
9
|
+
}
|
|
10
|
+
/** 文件内容加载服务 */
|
|
11
|
+
export interface FileContentService {
|
|
12
|
+
loadFileContent(filePath: string): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
/** FolderTree 组件属性 */
|
|
15
|
+
export interface FolderTreeProps {
|
|
16
|
+
/** 自定义类名 */
|
|
17
|
+
className?: string;
|
|
18
|
+
/** 自定义样式 */
|
|
19
|
+
style?: React.CSSProperties;
|
|
20
|
+
/** 树形数据 */
|
|
21
|
+
treeData: FolderTreeData[];
|
|
22
|
+
/** 自定义文件/文件夹图标,false 禁用图标 */
|
|
23
|
+
directoryIcons?: false | Record<"directory" | string, React.ReactNode | (() => React.ReactNode)>;
|
|
24
|
+
/** 是否可选中文件 */
|
|
25
|
+
selectable?: boolean;
|
|
26
|
+
/** 受控:当前选中的文件路径 */
|
|
27
|
+
selectedFile?: string[];
|
|
28
|
+
/** 默认选中的文件路径 */
|
|
29
|
+
defaultSelectedFile?: string[];
|
|
30
|
+
/** 选中文件变化回调 */
|
|
31
|
+
onSelectedFileChange?: (file: {
|
|
32
|
+
path: string[];
|
|
33
|
+
title?: React.ReactNode;
|
|
34
|
+
content?: string;
|
|
35
|
+
}) => void;
|
|
36
|
+
/** 受控:展开的路径 */
|
|
37
|
+
expandedPaths?: string[];
|
|
38
|
+
/** 默认展开的路径 */
|
|
39
|
+
defaultExpandedPaths?: string[];
|
|
40
|
+
/** 默认是否展开所有节点 */
|
|
41
|
+
defaultExpandAll?: boolean;
|
|
42
|
+
/** 展开路径变化回调 */
|
|
43
|
+
onExpandedPathsChange?: (paths: string[]) => void;
|
|
44
|
+
/** 目录树面板宽度 */
|
|
45
|
+
directoryTreeWidth?: number | string;
|
|
46
|
+
/** 文件内容加载服务 */
|
|
47
|
+
fileContentService?: FileContentService;
|
|
48
|
+
/** 空状态渲染 */
|
|
49
|
+
emptyRender?: false | React.ReactNode | (() => React.ReactNode);
|
|
50
|
+
/** 自定义文件预览渲染 */
|
|
51
|
+
previewRender?: React.ReactNode | ((file: {
|
|
52
|
+
content?: string;
|
|
53
|
+
path: string[];
|
|
54
|
+
title?: React.ReactNode;
|
|
55
|
+
language: string;
|
|
56
|
+
}, info: {
|
|
57
|
+
originNode: React.ReactNode;
|
|
58
|
+
}) => React.ReactNode);
|
|
59
|
+
/** 自定义目录标题 */
|
|
60
|
+
directoryTitle?: false | React.ReactNode | (() => React.ReactNode);
|
|
61
|
+
/** 自定义预览标题 */
|
|
62
|
+
previewTitle?: false | React.ReactNode | ((info: {
|
|
63
|
+
title: React.ReactNode;
|
|
64
|
+
path: string[];
|
|
65
|
+
content: string;
|
|
66
|
+
}) => React.ReactNode);
|
|
67
|
+
/** 文件点击回调 */
|
|
68
|
+
onFileClick?: (filePath: string, content?: string) => void;
|
|
69
|
+
/** 文件夹点击回调 */
|
|
70
|
+
onFolderClick?: (folderPath: string) => void;
|
|
71
|
+
/** 更多操作菜单,传入节点返回 Dropdown menu 配置 */
|
|
72
|
+
moreActions?: (node: FolderTreeData) => DropdownProps["menu"];
|
|
73
|
+
/** 是否显示连接线 */
|
|
74
|
+
showLine?: boolean | {
|
|
75
|
+
showLeafIcon?: boolean | React.ReactNode;
|
|
76
|
+
};
|
|
77
|
+
/** 自定义展开/收起图标 */
|
|
78
|
+
switcherIcon?: React.ReactNode | ((props: any) => React.ReactNode);
|
|
79
|
+
/** 是否显示文件预览面板,默认 true */
|
|
80
|
+
showPreview?: boolean;
|
|
81
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
|
|
15
|
+
// src/components/FolderTree/types.ts
|
|
16
|
+
var types_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(types_exports);
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 {\n title: React.ReactNode;\n path: string;\n content?: string;\n children?: FolderTreeData[];\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 }) => 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) => void;\n /** 文件夹点击回调 */\n onFolderClick?: (folderPath: string) => void;\n\n /** 更多操作菜单,传入节点返回 Dropdown menu 配置 */\n moreActions?: (node: FolderTreeData) => 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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -19,6 +19,9 @@ export * from "./types";
|
|
|
19
19
|
export type { ChatHookResult, ChatHookFactory } from "./types/ChatHook";
|
|
20
20
|
export { useXAi, XAiProvider, XAiChatbot, XAiSDK, XAiSender, XAiConversations, useXAiSDK, request, };
|
|
21
21
|
export { XAdkProvider, XAdkChatbot, XAdkSender, XAdkSenderSwitch, FileGallery, XAdkThoughtChain, useADKChat, baseChatStrategies, basePreset, baseToolKindResolver, createXGroupUploadRequest, mergeChatStrategies, resolvePresetUploadRequest, resolveChatPreset, xGroupAdkPreset, xGroupToolKindResolver, };
|
|
22
|
+
import FolderTree from "./components/FolderTree";
|
|
23
|
+
export { FolderTree };
|
|
24
|
+
export type { FolderTreeProps, FolderTreeData, FileContentService, } from "./components/FolderTree";
|
|
22
25
|
export { default as MarkdownRender } from "./components/XAdkChatbot/components/MarkdownRender";
|
|
23
26
|
export { default as FunctionCallRender } from "./components/XAdkChatbot/components/FunctionCallRender";
|
|
24
27
|
export { default as ThinkRender } from "./components/XAdkChatbot/components/ThinkRender";
|
package/dist/cjs/index.js
CHANGED
|
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
var src_exports = {};
|
|
32
32
|
__export(src_exports, {
|
|
33
33
|
FileGallery: () => import_FileGallery.default,
|
|
34
|
+
FolderTree: () => import_FolderTree.default,
|
|
34
35
|
FunctionCallRender: () => import_FunctionCallRender.default,
|
|
35
36
|
MarkdownRender: () => import_MarkdownRender.default,
|
|
36
37
|
ThinkRender: () => import_ThinkRender.default,
|
|
@@ -80,12 +81,14 @@ var import_useADKChat = __toESM(require("./hooks/useADKChat"));
|
|
|
80
81
|
var import_xGroupAdk = require("./presets/xGroupAdk");
|
|
81
82
|
var import_context = require("./components/XAdkProvider/context");
|
|
82
83
|
__reExport(src_exports, require("./types"), module.exports);
|
|
84
|
+
var import_FolderTree = __toESM(require("./components/FolderTree"));
|
|
83
85
|
var import_MarkdownRender = __toESM(require("./components/XAdkChatbot/components/MarkdownRender"));
|
|
84
86
|
var import_FunctionCallRender = __toESM(require("./components/XAdkChatbot/components/FunctionCallRender"));
|
|
85
87
|
var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/ThinkRender"));
|
|
86
88
|
// Annotate the CommonJS export names for ESM import in node:
|
|
87
89
|
0 && (module.exports = {
|
|
88
90
|
FileGallery,
|
|
91
|
+
FolderTree,
|
|
89
92
|
FunctionCallRender,
|
|
90
93
|
MarkdownRender,
|
|
91
94
|
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// 基础组件导出 - 供高级用户和业务侧使用\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;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,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;",
|
|
6
|
-
"names": ["FileGallery", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkSenderSwitch", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK"]
|
|
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;AASvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;",
|
|
6
|
+
"names": ["FileGallery", "FolderTree", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkSenderSwitch", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { TreeProps } from "antd";
|
|
3
|
+
import type { FolderTreeData, FolderTreeProps } from "./types";
|
|
4
|
+
export interface DirectoryTreeComponentProps {
|
|
5
|
+
treeData: FolderTreeData[];
|
|
6
|
+
directoryIcons?: FolderTreeProps["directoryIcons"];
|
|
7
|
+
selectedKeys?: string[];
|
|
8
|
+
expandedKeys?: string[];
|
|
9
|
+
onSelect?: TreeProps["onSelect"];
|
|
10
|
+
onExpand?: TreeProps["onExpand"];
|
|
11
|
+
showLine?: FolderTreeProps["showLine"];
|
|
12
|
+
switcherIcon?: FolderTreeProps["switcherIcon"];
|
|
13
|
+
defaultExpandAll?: boolean;
|
|
14
|
+
className?: string;
|
|
15
|
+
directoryTitle?: FolderTreeProps["directoryTitle"];
|
|
16
|
+
moreActions?: FolderTreeProps["moreActions"];
|
|
17
|
+
width?: number | string;
|
|
18
|
+
}
|
|
19
|
+
declare const DirectoryTreeComponent: React.FC<DirectoryTreeComponentProps>;
|
|
20
|
+
export default DirectoryTreeComponent;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
|
+
import React, { useCallback } from "react";
|
|
4
|
+
import { Tree, Dropdown } from "antd";
|
|
5
|
+
import { FileOutlined, FolderOutlined, MoreOutlined } from "@ant-design/icons";
|
|
6
|
+
import clsx from "clsx";
|
|
7
|
+
import { useStyles } from "./styles";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
var AntDirectoryTree = Tree.DirectoryTree;
|
|
11
|
+
var DirectoryTreeComponent = function DirectoryTreeComponent(_ref) {
|
|
12
|
+
var treeData = _ref.treeData,
|
|
13
|
+
selectedKeys = _ref.selectedKeys,
|
|
14
|
+
expandedKeys = _ref.expandedKeys,
|
|
15
|
+
onSelect = _ref.onSelect,
|
|
16
|
+
onExpand = _ref.onExpand,
|
|
17
|
+
_ref$showLine = _ref.showLine,
|
|
18
|
+
showLine = _ref$showLine === void 0 ? false : _ref$showLine,
|
|
19
|
+
switcherIcon = _ref.switcherIcon,
|
|
20
|
+
_ref$defaultExpandAll = _ref.defaultExpandAll,
|
|
21
|
+
defaultExpandAll = _ref$defaultExpandAll === void 0 ? true : _ref$defaultExpandAll,
|
|
22
|
+
className = _ref.className,
|
|
23
|
+
directoryIcons = _ref.directoryIcons,
|
|
24
|
+
directoryTitle = _ref.directoryTitle,
|
|
25
|
+
moreActions = _ref.moreActions,
|
|
26
|
+
width = _ref.width;
|
|
27
|
+
var styles = useStyles();
|
|
28
|
+
var isFolder = function isFolder(node) {
|
|
29
|
+
return !!node.children && node.children.length > 0;
|
|
30
|
+
};
|
|
31
|
+
var getIcon = useCallback(function (node) {
|
|
32
|
+
if (directoryIcons === false || directoryIcons === null) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
if (isFolder(node)) {
|
|
36
|
+
var icon = directoryIcons === null || directoryIcons === void 0 ? void 0 : directoryIcons.directory;
|
|
37
|
+
if (typeof icon === "function") return icon();
|
|
38
|
+
return icon || /*#__PURE__*/_jsx(FolderOutlined, {});
|
|
39
|
+
}
|
|
40
|
+
var filePath = node.path.toLowerCase();
|
|
41
|
+
var extension = filePath.split(".").pop();
|
|
42
|
+
if (extension) {
|
|
43
|
+
var _icon = directoryIcons === null || directoryIcons === void 0 ? void 0 : directoryIcons[extension];
|
|
44
|
+
if (_icon) return typeof _icon === "function" ? _icon() : _icon;
|
|
45
|
+
}
|
|
46
|
+
return /*#__PURE__*/_jsx(FileOutlined, {});
|
|
47
|
+
}, [directoryIcons]);
|
|
48
|
+
var buildPathSegments = useCallback(function (node) {
|
|
49
|
+
var parentSegments = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
50
|
+
if (node.path === "/" && parentSegments.length === 0) {
|
|
51
|
+
return ["/"];
|
|
52
|
+
}
|
|
53
|
+
return [].concat(_toConsumableArray(parentSegments), [node.path]).filter(function (s) {
|
|
54
|
+
return s !== "";
|
|
55
|
+
});
|
|
56
|
+
}, []);
|
|
57
|
+
var convertToTreeData = useCallback(function (nodes) {
|
|
58
|
+
var parentSegments = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
59
|
+
return nodes.map(function (node) {
|
|
60
|
+
var pathSegments = buildPathSegments(node, parentSegments);
|
|
61
|
+
var fullPath = pathSegments.join("/").replace(/^\/+/, "");
|
|
62
|
+
var titleContent = /*#__PURE__*/_jsxs("span", {
|
|
63
|
+
className: clsx(styles.treeNodeTitle, moreActions && styles.treeNodeTitleHover),
|
|
64
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
65
|
+
children: node.title
|
|
66
|
+
}), moreActions && /*#__PURE__*/_jsx(Dropdown, {
|
|
67
|
+
menu: moreActions(node),
|
|
68
|
+
trigger: ["click"],
|
|
69
|
+
placement: "bottomRight",
|
|
70
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
71
|
+
className: clsx(styles.moreIcon, "folder-tree-more-icon"),
|
|
72
|
+
onClick: function onClick(e) {
|
|
73
|
+
return e.stopPropagation();
|
|
74
|
+
},
|
|
75
|
+
children: /*#__PURE__*/_jsx(MoreOutlined, {})
|
|
76
|
+
})
|
|
77
|
+
})]
|
|
78
|
+
});
|
|
79
|
+
return _objectSpread(_objectSpread({}, node), {}, {
|
|
80
|
+
key: fullPath,
|
|
81
|
+
path: fullPath,
|
|
82
|
+
pathSegments: pathSegments,
|
|
83
|
+
title: titleContent,
|
|
84
|
+
icon: getIcon(node),
|
|
85
|
+
isLeaf: !isFolder(node),
|
|
86
|
+
children: node.children ? convertToTreeData(node.children, pathSegments) : undefined
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}, [buildPathSegments, getIcon, moreActions, styles]);
|
|
90
|
+
var treeDataConverted = convertToTreeData(treeData);
|
|
91
|
+
var titleNode = directoryTitle === false || directoryTitle === null ? null : typeof directoryTitle === "function" ? directoryTitle() : directoryTitle;
|
|
92
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
93
|
+
className: clsx(styles.directoryPanel, className),
|
|
94
|
+
style: {
|
|
95
|
+
width: width
|
|
96
|
+
},
|
|
97
|
+
children: [titleNode && /*#__PURE__*/_jsx("div", {
|
|
98
|
+
className: styles.directoryTitle,
|
|
99
|
+
children: titleNode
|
|
100
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
101
|
+
className: styles.directoryTreeContent,
|
|
102
|
+
children: /*#__PURE__*/_jsx(AntDirectoryTree, {
|
|
103
|
+
treeData: treeDataConverted,
|
|
104
|
+
selectedKeys: selectedKeys,
|
|
105
|
+
expandedKeys: expandedKeys,
|
|
106
|
+
onSelect: onSelect,
|
|
107
|
+
onExpand: onExpand,
|
|
108
|
+
multiple: false,
|
|
109
|
+
blockNode: true,
|
|
110
|
+
showLine: showLine,
|
|
111
|
+
switcherIcon: switcherIcon,
|
|
112
|
+
defaultExpandAll: defaultExpandAll
|
|
113
|
+
})
|
|
114
|
+
})]
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
export default DirectoryTreeComponent;
|
|
118
|
+
//# sourceMappingURL=DirectoryTree.js.map
|
|
@@ -0,0 +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","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","treeDataConverted","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}\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}) => {\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 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 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 />\n </div>\n </div>\n );\n};\n\nexport default DirectoryTreeComponent;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { FolderTreeData, FolderTreeProps } from "./types";
|
|
3
|
+
export interface FilePreviewProps {
|
|
4
|
+
selectedFile?: string[] | null;
|
|
5
|
+
fileContent?: string;
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
previewTitle?: FolderTreeProps["previewTitle"];
|
|
8
|
+
previewRender?: FolderTreeProps["previewRender"];
|
|
9
|
+
emptyRender?: FolderTreeProps["emptyRender"];
|
|
10
|
+
getFileNode?: (path: string[]) => {
|
|
11
|
+
title: FolderTreeData["title"];
|
|
12
|
+
path: string;
|
|
13
|
+
content?: string;
|
|
14
|
+
} | undefined;
|
|
15
|
+
}
|
|
16
|
+
declare const FilePreview: React.FC<FilePreviewProps>;
|
|
17
|
+
export default FilePreview;
|