@ai-group/chat-sdk 3.3.10 → 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/components/XAdkSender/Switch.d.ts +16 -0
- package/dist/cjs/components/XAdkSender/Switch.js +95 -0
- package/dist/cjs/components/XAdkSender/Switch.js.map +7 -0
- package/dist/cjs/components/XAdkSender/index.d.ts +6 -1
- package/dist/cjs/components/XAdkSender/index.js +26 -25
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.js +6 -6
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/index.js +6 -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/components/XAdkSender/Switch.d.ts +16 -0
- package/dist/esm/components/XAdkSender/Switch.js +53 -0
- package/dist/esm/components/XAdkSender/Switch.js.map +1 -0
- package/dist/esm/components/XAdkSender/index.d.ts +6 -1
- package/dist/esm/components/XAdkSender/index.js +15 -12
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.js +3 -3
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Empty, Spin } from "antd";
|
|
4
|
+
import { CopyOutlined } from "@ant-design/icons";
|
|
5
|
+
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
|
|
6
|
+
import { oneLight } from "react-syntax-highlighter/dist/esm/styles/prism";
|
|
7
|
+
import clsx from "clsx";
|
|
8
|
+
import copyToClipboard from "copy-to-clipboard";
|
|
9
|
+
import { useStyles } from "./styles";
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
var customOneLight = _objectSpread(_objectSpread({}, oneLight), {}, {
|
|
13
|
+
'pre[class*="language-"]': _objectSpread(_objectSpread({}, oneLight['pre[class*="language-"]']), {}, {
|
|
14
|
+
margin: 0,
|
|
15
|
+
background: "transparent",
|
|
16
|
+
padding: 0,
|
|
17
|
+
borderRadius: 0
|
|
18
|
+
})
|
|
19
|
+
});
|
|
20
|
+
var getFileExtension = function getFileExtension() {
|
|
21
|
+
var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
|
|
22
|
+
var parts = path.split(".");
|
|
23
|
+
return parts[parts.length - 1] || "";
|
|
24
|
+
};
|
|
25
|
+
var EXTENSION_LANGUAGE_MAP = {
|
|
26
|
+
ts: "typescript",
|
|
27
|
+
tsx: "tsx",
|
|
28
|
+
js: "javascript",
|
|
29
|
+
jsx: "jsx",
|
|
30
|
+
md: "markdown",
|
|
31
|
+
json: "json",
|
|
32
|
+
css: "css",
|
|
33
|
+
scss: "scss",
|
|
34
|
+
less: "less",
|
|
35
|
+
html: "html",
|
|
36
|
+
xml: "xml",
|
|
37
|
+
yaml: "yaml",
|
|
38
|
+
yml: "yaml",
|
|
39
|
+
py: "python",
|
|
40
|
+
java: "java",
|
|
41
|
+
go: "go",
|
|
42
|
+
rs: "rust",
|
|
43
|
+
sh: "bash",
|
|
44
|
+
bash: "bash",
|
|
45
|
+
sql: "sql",
|
|
46
|
+
graphql: "graphql",
|
|
47
|
+
vue: "html",
|
|
48
|
+
svelte: "html"
|
|
49
|
+
};
|
|
50
|
+
var getLanguageFromExtension = function getLanguageFromExtension(ext) {
|
|
51
|
+
var lower = ext.toLowerCase();
|
|
52
|
+
return EXTENSION_LANGUAGE_MAP[lower] || lower || "text";
|
|
53
|
+
};
|
|
54
|
+
var FilePreview = function FilePreview(_ref) {
|
|
55
|
+
var selectedFile = _ref.selectedFile,
|
|
56
|
+
_ref$fileContent = _ref.fileContent,
|
|
57
|
+
fileContent = _ref$fileContent === void 0 ? "" : _ref$fileContent,
|
|
58
|
+
_ref$loading = _ref.loading,
|
|
59
|
+
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
60
|
+
previewTitle = _ref.previewTitle,
|
|
61
|
+
previewRender = _ref.previewRender,
|
|
62
|
+
emptyRender = _ref.emptyRender,
|
|
63
|
+
getFileNode = _ref.getFileNode;
|
|
64
|
+
var styles = useStyles();
|
|
65
|
+
if (loading) {
|
|
66
|
+
return /*#__PURE__*/_jsx("div", {
|
|
67
|
+
className: clsx(styles.previewPanel),
|
|
68
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
69
|
+
className: styles.loadingContainer,
|
|
70
|
+
children: /*#__PURE__*/_jsx(Spin, {})
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (!selectedFile || selectedFile.length === 0) {
|
|
75
|
+
if (emptyRender === false || emptyRender === null) {
|
|
76
|
+
return /*#__PURE__*/_jsx("div", {
|
|
77
|
+
className: styles.previewPanel
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
var emptyNode = typeof emptyRender === "function" ? emptyRender() : emptyRender || /*#__PURE__*/_jsx(Empty, {
|
|
81
|
+
image: Empty.PRESENTED_IMAGE_SIMPLE,
|
|
82
|
+
description: "\u8BF7\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5185\u5BB9"
|
|
83
|
+
});
|
|
84
|
+
return /*#__PURE__*/_jsx("div", {
|
|
85
|
+
className: styles.previewPanel,
|
|
86
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
87
|
+
className: styles.emptyContainer,
|
|
88
|
+
children: emptyNode
|
|
89
|
+
})
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
var fileNode = getFileNode === null || getFileNode === void 0 ? void 0 : getFileNode(selectedFile);
|
|
93
|
+
var title = (fileNode === null || fileNode === void 0 ? void 0 : fileNode.title) || selectedFile[selectedFile.length - 1];
|
|
94
|
+
var fileName = selectedFile[selectedFile.length - 1];
|
|
95
|
+
var extension = getFileExtension(fileName);
|
|
96
|
+
var language = getLanguageFromExtension(extension);
|
|
97
|
+
|
|
98
|
+
// 标题区域
|
|
99
|
+
var headerNode;
|
|
100
|
+
if (previewTitle === false || previewTitle === null) {
|
|
101
|
+
headerNode = null;
|
|
102
|
+
} else if (previewTitle) {
|
|
103
|
+
headerNode = typeof previewTitle === "function" ? previewTitle({
|
|
104
|
+
title: title,
|
|
105
|
+
path: selectedFile,
|
|
106
|
+
content: fileContent
|
|
107
|
+
}) : previewTitle;
|
|
108
|
+
} else {
|
|
109
|
+
headerNode = /*#__PURE__*/_jsxs("div", {
|
|
110
|
+
className: styles.previewTitle,
|
|
111
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
112
|
+
children: title
|
|
113
|
+
}), /*#__PURE__*/_jsx(CopyOutlined, {
|
|
114
|
+
className: styles.copyBtn,
|
|
115
|
+
onClick: function onClick() {
|
|
116
|
+
return copyToClipboard(fileContent);
|
|
117
|
+
}
|
|
118
|
+
})]
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// 内容区域
|
|
123
|
+
var originContentNode = /*#__PURE__*/_jsx(SyntaxHighlighter, {
|
|
124
|
+
language: language,
|
|
125
|
+
wrapLines: true,
|
|
126
|
+
style: customOneLight,
|
|
127
|
+
codeTagProps: {
|
|
128
|
+
style: {
|
|
129
|
+
background: "transparent"
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
children: fileContent.replace(/\n$/, "")
|
|
133
|
+
});
|
|
134
|
+
var contentNode;
|
|
135
|
+
if (previewRender) {
|
|
136
|
+
if (typeof previewRender === "function") {
|
|
137
|
+
contentNode = previewRender({
|
|
138
|
+
content: fileContent,
|
|
139
|
+
path: selectedFile,
|
|
140
|
+
title: fileNode === null || fileNode === void 0 ? void 0 : fileNode.title,
|
|
141
|
+
language: language
|
|
142
|
+
}, {
|
|
143
|
+
originNode: originContentNode
|
|
144
|
+
});
|
|
145
|
+
} else {
|
|
146
|
+
contentNode = previewRender;
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
contentNode = originContentNode;
|
|
150
|
+
}
|
|
151
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
152
|
+
className: styles.previewPanel,
|
|
153
|
+
children: [headerNode, /*#__PURE__*/_jsx("div", {
|
|
154
|
+
className: styles.previewContent,
|
|
155
|
+
children: contentNode
|
|
156
|
+
})]
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
export default FilePreview;
|
|
160
|
+
//# sourceMappingURL=FilePreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Empty","Spin","CopyOutlined","Prism","SyntaxHighlighter","oneLight","clsx","copyToClipboard","useStyles","jsx","_jsx","jsxs","_jsxs","customOneLight","_objectSpread","margin","background","padding","borderRadius","getFileExtension","path","arguments","length","undefined","parts","split","EXTENSION_LANGUAGE_MAP","ts","tsx","js","md","json","css","scss","less","html","xml","yaml","yml","py","java","go","rs","sh","bash","sql","graphql","vue","svelte","getLanguageFromExtension","ext","lower","toLowerCase","FilePreview","_ref","selectedFile","_ref$fileContent","fileContent","_ref$loading","loading","previewTitle","previewRender","emptyRender","getFileNode","styles","className","previewPanel","children","loadingContainer","emptyNode","image","PRESENTED_IMAGE_SIMPLE","description","emptyContainer","fileNode","title","fileName","extension","language","headerNode","content","copyBtn","onClick","originContentNode","wrapLines","style","codeTagProps","replace","contentNode","originNode","previewContent"],"sources":["../../../../src/components/FolderTree/FilePreview.tsx"],"sourcesContent":["import React from \"react\";\nimport { Empty, Spin } from \"antd\";\nimport { CopyOutlined } from \"@ant-design/icons\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { oneLight } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport clsx from \"clsx\";\nimport copyToClipboard from \"copy-to-clipboard\";\nimport type { FolderTreeData, FolderTreeProps } from \"./types\";\nimport { useStyles } from \"./styles\";\n\nexport interface FilePreviewProps {\n selectedFile?: string[] | null;\n fileContent?: string;\n loading?: boolean;\n previewTitle?: FolderTreeProps[\"previewTitle\"];\n previewRender?: FolderTreeProps[\"previewRender\"];\n emptyRender?: FolderTreeProps[\"emptyRender\"];\n getFileNode?: (\n path: string[]\n ) =>\n | { title: FolderTreeData[\"title\"]; path: string; content?: string }\n | undefined;\n}\n\nconst customOneLight = {\n ...oneLight,\n 'pre[class*=\"language-\"]': {\n ...oneLight['pre[class*=\"language-\"]'],\n margin: 0,\n background: \"transparent\",\n padding: 0,\n borderRadius: 0,\n },\n};\n\nconst getFileExtension = (path = \"\") => {\n const parts = path.split(\".\");\n return parts[parts.length - 1] || \"\";\n};\n\nconst EXTENSION_LANGUAGE_MAP: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"tsx\",\n js: \"javascript\",\n jsx: \"jsx\",\n md: \"markdown\",\n json: \"json\",\n css: \"css\",\n scss: \"scss\",\n less: \"less\",\n html: \"html\",\n xml: \"xml\",\n yaml: \"yaml\",\n yml: \"yaml\",\n py: \"python\",\n java: \"java\",\n go: \"go\",\n rs: \"rust\",\n sh: \"bash\",\n bash: \"bash\",\n sql: \"sql\",\n graphql: \"graphql\",\n vue: \"html\",\n svelte: \"html\",\n};\n\nconst getLanguageFromExtension = (ext: string) => {\n const lower = ext.toLowerCase();\n return EXTENSION_LANGUAGE_MAP[lower] || lower || \"text\";\n};\n\nconst FilePreview: React.FC<FilePreviewProps> = ({\n selectedFile,\n fileContent = \"\",\n loading = false,\n previewTitle,\n previewRender,\n emptyRender,\n getFileNode,\n}) => {\n const styles = useStyles();\n\n if (loading) {\n return (\n <div className={clsx(styles.previewPanel)}>\n <div className={styles.loadingContainer}>\n <Spin />\n </div>\n </div>\n );\n }\n\n if (!selectedFile || selectedFile.length === 0) {\n if (emptyRender === false || emptyRender === null) {\n return <div className={styles.previewPanel} />;\n }\n const emptyNode =\n typeof emptyRender === \"function\"\n ? emptyRender()\n : emptyRender || (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description=\"请选择文件查看内容\"\n />\n );\n return (\n <div className={styles.previewPanel}>\n <div className={styles.emptyContainer}>{emptyNode}</div>\n </div>\n );\n }\n\n const fileNode = getFileNode?.(selectedFile);\n const title = fileNode?.title || selectedFile[selectedFile.length - 1];\n const fileName = selectedFile[selectedFile.length - 1];\n const extension = getFileExtension(fileName);\n const language = getLanguageFromExtension(extension);\n\n // 标题区域\n let headerNode: React.ReactNode;\n if (previewTitle === false || previewTitle === null) {\n headerNode = null;\n } else if (previewTitle) {\n headerNode =\n typeof previewTitle === \"function\"\n ? previewTitle({ title, path: selectedFile, content: fileContent })\n : previewTitle;\n } else {\n headerNode = (\n <div className={styles.previewTitle}>\n <span>{title}</span>\n <CopyOutlined\n className={styles.copyBtn}\n onClick={() => copyToClipboard(fileContent)}\n />\n </div>\n );\n }\n\n // 内容区域\n const originContentNode = (\n <SyntaxHighlighter\n language={language}\n wrapLines\n style={customOneLight}\n codeTagProps={{ style: { background: \"transparent\" } }}\n >\n {fileContent.replace(/\\n$/, \"\")}\n </SyntaxHighlighter>\n );\n\n let contentNode: React.ReactNode;\n if (previewRender) {\n if (typeof previewRender === \"function\") {\n contentNode = previewRender(\n { content: fileContent, path: selectedFile, title: fileNode?.title, language },\n { originNode: originContentNode }\n );\n } else {\n contentNode = previewRender;\n }\n } else {\n contentNode = originContentNode;\n }\n\n return (\n <div className={styles.previewPanel}>\n {headerNode}\n <div className={styles.previewContent}>{contentNode}</div>\n </div>\n );\n};\n\nexport default FilePreview;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
5
|
+
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
6
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
7
|
+
import clsx from "clsx";
|
|
8
|
+
import DirectoryTreeComponent from "./DirectoryTree";
|
|
9
|
+
import FilePreview from "./FilePreview";
|
|
10
|
+
import { useStyles } from "./styles";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
var FolderTree = function FolderTree(props) {
|
|
14
|
+
var className = props.className,
|
|
15
|
+
style = props.style,
|
|
16
|
+
treeData = props.treeData,
|
|
17
|
+
directoryIcons = props.directoryIcons,
|
|
18
|
+
previewRender = props.previewRender,
|
|
19
|
+
directoryTitle = props.directoryTitle,
|
|
20
|
+
previewTitle = props.previewTitle,
|
|
21
|
+
_props$selectable = props.selectable,
|
|
22
|
+
selectable = _props$selectable === void 0 ? true : _props$selectable,
|
|
23
|
+
defaultSelectedFile = props.defaultSelectedFile,
|
|
24
|
+
_props$defaultExpandA = props.defaultExpandAll,
|
|
25
|
+
defaultExpandAll = _props$defaultExpandA === void 0 ? true : _props$defaultExpandA,
|
|
26
|
+
selectedFile = props.selectedFile,
|
|
27
|
+
onSelectedFileChange = props.onSelectedFileChange,
|
|
28
|
+
_props$directoryTreeW = props.directoryTreeWidth,
|
|
29
|
+
directoryTreeWidth = _props$directoryTreeW === void 0 ? 280 : _props$directoryTreeW,
|
|
30
|
+
emptyRender = props.emptyRender,
|
|
31
|
+
defaultExpandedPaths = props.defaultExpandedPaths,
|
|
32
|
+
expandedPaths = props.expandedPaths,
|
|
33
|
+
onExpandedPathsChange = props.onExpandedPathsChange,
|
|
34
|
+
onFileClick = props.onFileClick,
|
|
35
|
+
onFolderClick = props.onFolderClick,
|
|
36
|
+
fileContentService = props.fileContentService,
|
|
37
|
+
moreActions = props.moreActions,
|
|
38
|
+
showLine = props.showLine,
|
|
39
|
+
switcherIcon = props.switcherIcon,
|
|
40
|
+
_props$showPreview = props.showPreview,
|
|
41
|
+
showPreview = _props$showPreview === void 0 ? true : _props$showPreview;
|
|
42
|
+
var styles = useStyles();
|
|
43
|
+
|
|
44
|
+
// ====== 工具函数 ======
|
|
45
|
+
var findNodeAndValidate = useCallback(function (path) {
|
|
46
|
+
var validateAsFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
47
|
+
if (!path) return {
|
|
48
|
+
node: undefined,
|
|
49
|
+
isValid: false
|
|
50
|
+
};
|
|
51
|
+
var segments = Array.isArray(path) ? path.filter(Boolean) : path.split("/").filter(Boolean);
|
|
52
|
+
if (segments.length === 0) return {
|
|
53
|
+
node: undefined,
|
|
54
|
+
isValid: false
|
|
55
|
+
};
|
|
56
|
+
var findNode = function findNode(nodes) {
|
|
57
|
+
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
58
|
+
if (index >= segments.length) return undefined;
|
|
59
|
+
var currentSegment = segments[index];
|
|
60
|
+
var _iterator = _createForOfIteratorHelper(nodes),
|
|
61
|
+
_step;
|
|
62
|
+
try {
|
|
63
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
64
|
+
var _node = _step.value;
|
|
65
|
+
if (_node.path === currentSegment) {
|
|
66
|
+
return index === segments.length - 1 ? _node : _node.children ? findNode(_node.children, index + 1) : undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} catch (err) {
|
|
70
|
+
_iterator.e(err);
|
|
71
|
+
} finally {
|
|
72
|
+
_iterator.f();
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
};
|
|
76
|
+
var node = findNode(treeData);
|
|
77
|
+
var isValid = validateAsFile ? !!node && (!(node !== null && node !== void 0 && node.children) || node.children.length === 0) : !!node;
|
|
78
|
+
return {
|
|
79
|
+
node: node,
|
|
80
|
+
isValid: isValid
|
|
81
|
+
};
|
|
82
|
+
}, [treeData]);
|
|
83
|
+
var isValidSelectedFile = function isValidSelectedFile(filePath) {
|
|
84
|
+
return !!(filePath && filePath.length > 0 && findNodeAndValidate(filePath, true).isValid);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// ====== State ======
|
|
88
|
+
var _useState = useState(function () {
|
|
89
|
+
return isValidSelectedFile(selectedFile || defaultSelectedFile) ? selectedFile || defaultSelectedFile || [] : [];
|
|
90
|
+
}),
|
|
91
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
92
|
+
selectedFileState = _useState2[0],
|
|
93
|
+
setSelectedFileState = _useState2[1];
|
|
94
|
+
var _useState3 = useState(expandedPaths || defaultExpandedPaths),
|
|
95
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
96
|
+
expandedPathsState = _useState4[0],
|
|
97
|
+
setExpandedPaths = _useState4[1];
|
|
98
|
+
var _useState5 = useState(isValidSelectedFile(selectedFile || defaultSelectedFile)),
|
|
99
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
100
|
+
validSelectedFile = _useState6[0],
|
|
101
|
+
setValidSelectedFile = _useState6[1];
|
|
102
|
+
var _useState7 = useState(""),
|
|
103
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
104
|
+
fileContent = _useState8[0],
|
|
105
|
+
setFileContent = _useState8[1];
|
|
106
|
+
var _useState9 = useState(false),
|
|
107
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
108
|
+
loadingContent = _useState10[0],
|
|
109
|
+
setLoadingContent = _useState10[1];
|
|
110
|
+
|
|
111
|
+
// 受控模式同步
|
|
112
|
+
useEffect(function () {
|
|
113
|
+
if (selectedFile !== undefined) {
|
|
114
|
+
setSelectedFileState(selectedFile);
|
|
115
|
+
setValidSelectedFile(isValidSelectedFile(selectedFile));
|
|
116
|
+
}
|
|
117
|
+
}, [selectedFile, treeData]);
|
|
118
|
+
useEffect(function () {
|
|
119
|
+
if (expandedPaths !== undefined) {
|
|
120
|
+
setExpandedPaths(expandedPaths);
|
|
121
|
+
}
|
|
122
|
+
}, [expandedPaths]);
|
|
123
|
+
|
|
124
|
+
// ====== 加载文件内容 ======
|
|
125
|
+
useEffect(function () {
|
|
126
|
+
var loadContent = /*#__PURE__*/function () {
|
|
127
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
128
|
+
var filePath, segments, _findNodeAndValidate, node, content;
|
|
129
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
130
|
+
while (1) switch (_context.prev = _context.next) {
|
|
131
|
+
case 0:
|
|
132
|
+
if (!(!validSelectedFile || selectedFileState.length === 0)) {
|
|
133
|
+
_context.next = 4;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
setFileContent("");
|
|
137
|
+
setLoadingContent(false);
|
|
138
|
+
return _context.abrupt("return");
|
|
139
|
+
case 4:
|
|
140
|
+
filePath = selectedFileState.join("/");
|
|
141
|
+
segments = filePath.split("/").filter(function (s) {
|
|
142
|
+
return s !== "";
|
|
143
|
+
});
|
|
144
|
+
_findNodeAndValidate = findNodeAndValidate(segments), node = _findNodeAndValidate.node;
|
|
145
|
+
if (!fileContentService) {
|
|
146
|
+
_context.next = 24;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
setLoadingContent(true);
|
|
150
|
+
_context.prev = 9;
|
|
151
|
+
_context.next = 12;
|
|
152
|
+
return fileContentService.loadFileContent(filePath);
|
|
153
|
+
case 12:
|
|
154
|
+
content = _context.sent;
|
|
155
|
+
setFileContent(content);
|
|
156
|
+
_context.next = 19;
|
|
157
|
+
break;
|
|
158
|
+
case 16:
|
|
159
|
+
_context.prev = 16;
|
|
160
|
+
_context.t0 = _context["catch"](9);
|
|
161
|
+
setFileContent("// \u52A0\u8F7D\u9519\u8BEF: ".concat(_context.t0 instanceof Error ? _context.t0.message : "Unknown error"));
|
|
162
|
+
case 19:
|
|
163
|
+
_context.prev = 19;
|
|
164
|
+
setLoadingContent(false);
|
|
165
|
+
return _context.finish(19);
|
|
166
|
+
case 22:
|
|
167
|
+
_context.next = 25;
|
|
168
|
+
break;
|
|
169
|
+
case 24:
|
|
170
|
+
if (node !== null && node !== void 0 && node.content) {
|
|
171
|
+
setFileContent(node.content);
|
|
172
|
+
setLoadingContent(false);
|
|
173
|
+
} else {
|
|
174
|
+
setFileContent("");
|
|
175
|
+
setLoadingContent(false);
|
|
176
|
+
}
|
|
177
|
+
case 25:
|
|
178
|
+
case "end":
|
|
179
|
+
return _context.stop();
|
|
180
|
+
}
|
|
181
|
+
}, _callee, null, [[9, 16, 19, 22]]);
|
|
182
|
+
}));
|
|
183
|
+
return function loadContent() {
|
|
184
|
+
return _ref.apply(this, arguments);
|
|
185
|
+
};
|
|
186
|
+
}();
|
|
187
|
+
loadContent();
|
|
188
|
+
}, [validSelectedFile, selectedFileState, treeData, fileContentService, findNodeAndValidate]);
|
|
189
|
+
|
|
190
|
+
// ====== 事件处理 ======
|
|
191
|
+
var handleSelect = function handleSelect(_keys, info) {
|
|
192
|
+
var _keys$;
|
|
193
|
+
var keys = _keys;
|
|
194
|
+
var nodes = Array.isArray(info.selectedNodes) ? info.selectedNodes : [info.selectedNodes];
|
|
195
|
+
var isFolder = nodes.some(function (node) {
|
|
196
|
+
return !node.isLeaf;
|
|
197
|
+
});
|
|
198
|
+
if (isFolder) {
|
|
199
|
+
if (nodes.length === 1) {
|
|
200
|
+
var node = nodes[0];
|
|
201
|
+
onFolderClick === null || onFolderClick === void 0 || onFolderClick(node.path);
|
|
202
|
+
}
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
var pathArray = ((_keys$ = keys[0]) === null || _keys$ === void 0 ? void 0 : _keys$.split("/").filter(Boolean)) || [];
|
|
206
|
+
if (pathArray.length === 0) return;
|
|
207
|
+
var selectedNode = nodes[0];
|
|
208
|
+
var fileName = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.title;
|
|
209
|
+
var nodeContent = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.content;
|
|
210
|
+
onSelectedFileChange === null || onSelectedFileChange === void 0 || onSelectedFileChange({
|
|
211
|
+
path: pathArray,
|
|
212
|
+
title: fileName,
|
|
213
|
+
content: nodeContent
|
|
214
|
+
});
|
|
215
|
+
var isControlled = selectedFile !== undefined;
|
|
216
|
+
if (!isControlled) {
|
|
217
|
+
setValidSelectedFile(true);
|
|
218
|
+
setSelectedFileState(pathArray);
|
|
219
|
+
}
|
|
220
|
+
if (nodes.length === 1) {
|
|
221
|
+
var _node2 = nodes[0];
|
|
222
|
+
onFileClick === null || onFileClick === void 0 || onFileClick(_node2.path, _node2.content);
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
var handleExpand = function handleExpand(keys) {
|
|
226
|
+
var newPaths = keys;
|
|
227
|
+
setExpandedPaths(newPaths);
|
|
228
|
+
onExpandedPathsChange === null || onExpandedPathsChange === void 0 || onExpandedPathsChange(newPaths);
|
|
229
|
+
};
|
|
230
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
231
|
+
className: clsx(styles.container, className),
|
|
232
|
+
style: _objectSpread(_objectSpread(_objectSpread({}, style), style !== null && style !== void 0 && style.background ? {
|
|
233
|
+
"--folder-tree-directory-bg": style.background
|
|
234
|
+
} : {}), style !== null && style !== void 0 && style.backgroundColor ? {
|
|
235
|
+
"--folder-tree-directory-bg": style.backgroundColor
|
|
236
|
+
} : {}),
|
|
237
|
+
children: [/*#__PURE__*/_jsx(DirectoryTreeComponent, {
|
|
238
|
+
treeData: treeData,
|
|
239
|
+
directoryIcons: directoryIcons,
|
|
240
|
+
selectedKeys: selectable && selectedFileState && validSelectedFile ? [selectedFileState.join("/")] : [],
|
|
241
|
+
expandedKeys: expandedPathsState,
|
|
242
|
+
onSelect: handleSelect,
|
|
243
|
+
onExpand: handleExpand,
|
|
244
|
+
defaultExpandAll: defaultExpandAll,
|
|
245
|
+
directoryTitle: directoryTitle,
|
|
246
|
+
moreActions: moreActions,
|
|
247
|
+
showLine: showLine,
|
|
248
|
+
switcherIcon: switcherIcon,
|
|
249
|
+
width: directoryTreeWidth
|
|
250
|
+
}), showPreview && /*#__PURE__*/_jsx(FilePreview, {
|
|
251
|
+
selectedFile: validSelectedFile ? selectedFileState : [],
|
|
252
|
+
fileContent: fileContent,
|
|
253
|
+
loading: loadingContent,
|
|
254
|
+
previewTitle: previewTitle,
|
|
255
|
+
previewRender: previewRender,
|
|
256
|
+
emptyRender: emptyRender,
|
|
257
|
+
getFileNode: function getFileNode(path) {
|
|
258
|
+
if (!path || path.length === 0) return undefined;
|
|
259
|
+
var _findNodeAndValidate2 = findNodeAndValidate(path),
|
|
260
|
+
node = _findNodeAndValidate2.node;
|
|
261
|
+
return node ? {
|
|
262
|
+
title: node.title,
|
|
263
|
+
path: node.path,
|
|
264
|
+
content: node.content
|
|
265
|
+
} : undefined;
|
|
266
|
+
}
|
|
267
|
+
})]
|
|
268
|
+
});
|
|
269
|
+
};
|
|
270
|
+
export default FolderTree;
|
|
271
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useState","clsx","DirectoryTreeComponent","FilePreview","useStyles","jsx","_jsx","jsxs","_jsxs","FolderTree","props","className","style","treeData","directoryIcons","previewRender","directoryTitle","previewTitle","_props$selectable","selectable","defaultSelectedFile","_props$defaultExpandA","defaultExpandAll","selectedFile","onSelectedFileChange","_props$directoryTreeW","directoryTreeWidth","emptyRender","defaultExpandedPaths","expandedPaths","onExpandedPathsChange","onFileClick","onFolderClick","fileContentService","moreActions","showLine","switcherIcon","_props$showPreview","showPreview","styles","findNodeAndValidate","path","validateAsFile","arguments","length","undefined","node","isValid","segments","Array","isArray","filter","Boolean","split","findNode","nodes","index","currentSegment","_iterator","_createForOfIteratorHelper","_step","s","n","done","value","children","err","e","f","isValidSelectedFile","filePath","_useState","_useState2","_slicedToArray","selectedFileState","setSelectedFileState","_useState3","_useState4","expandedPathsState","setExpandedPaths","_useState5","_useState6","validSelectedFile","setValidSelectedFile","_useState7","_useState8","fileContent","setFileContent","_useState9","_useState10","loadingContent","setLoadingContent","loadContent","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_findNodeAndValidate","content","wrap","_callee$","_context","prev","next","abrupt","join","loadFileContent","sent","t0","concat","Error","message","finish","stop","apply","handleSelect","_keys","info","_keys$","keys","selectedNodes","isFolder","some","isLeaf","pathArray","selectedNode","fileName","title","nodeContent","isControlled","handleExpand","newPaths","container","_objectSpread","background","backgroundColor","selectedKeys","expandedKeys","onSelect","onExpand","width","loading","getFileNode","_findNodeAndValidate2"],"sources":["../../../../src/components/FolderTree/index.tsx"],"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"],"mappings":"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"}
|
|
@@ -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,22 @@
|
|
|
1
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
|
|
2
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13;
|
|
3
|
+
import { css } from "@emotion/css";
|
|
4
|
+
import { withBasicStyles } from "../../styles/common";
|
|
5
|
+
export var useStyles = withBasicStyles(function () {
|
|
6
|
+
return {
|
|
7
|
+
container: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\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 "]))),
|
|
8
|
+
directoryPanel: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n "]))),
|
|
9
|
+
directoryTitle: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n "]))),
|
|
10
|
+
directoryTreeContent: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\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 "]))),
|
|
11
|
+
previewPanel: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n flex: 1;\n height: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n "]))),
|
|
12
|
+
previewTitle: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\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 "]))),
|
|
13
|
+
previewContent: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n flex: 1;\n overflow: auto;\n padding: 16px;\n font-size: 13px;\n line-height: 1.6;\n "]))),
|
|
14
|
+
emptyContainer: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n "]))),
|
|
15
|
+
loadingContainer: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n "]))),
|
|
16
|
+
treeNodeTitle: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-right: 4px;\n "]))),
|
|
17
|
+
moreIcon: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\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 "]))),
|
|
18
|
+
treeNodeTitleHover: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n &:hover .folder-tree-more-icon {\n opacity: 1;\n }\n "]))),
|
|
19
|
+
copyBtn: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n cursor: pointer;\n color: #999;\n font-size: 14px;\n &:hover {\n color: #1677ff;\n }\n "])))
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["css","withBasicStyles","useStyles","container","_templateObject","_taggedTemplateLiteral","directoryPanel","_templateObject2","directoryTitle","_templateObject3","directoryTreeContent","_templateObject4","previewPanel","_templateObject5","previewTitle","_templateObject6","previewContent","_templateObject7","emptyContainer","_templateObject8","loadingContainer","_templateObject9","treeNodeTitle","_templateObject10","moreIcon","_templateObject11","treeNodeTitleHover","_templateObject12","copyBtn","_templateObject13"],"sources":["../../../../src/components/FolderTree/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n container: css`\n display: flex;\n width: 100%;\n height: 500px;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n overflow: hidden;\n background: #fff;\n `,\n 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"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,SAAS,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,6KAQb;IACDC,cAAc,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,qJAKlB;IACDG,cAAc,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,2IAMlB;IACDK,oBAAoB,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,0fAwBxB;IACDO,YAAY,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,mHAMhB;IACDS,YAAY,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,qPAUhB;IACDW,cAAc,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,gHAMlB;IACDa,cAAc,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,2GAKlB;IACDe,gBAAgB,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,2GAKpB;IACDiB,aAAa,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,wHAKjB;IACDmB,QAAQ,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,wPAYZ;IACDqB,kBAAkB,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,4EAItB;IACDuB,OAAO,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA;EAQd,CAAC;AAAA,CAAC,CAAC"}
|