@ai-group/chat-sdk 3.3.11 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/cjs/components/FolderTree/DirectoryTree.d.ts +20 -0
  2. package/dist/cjs/components/FolderTree/DirectoryTree.js +161 -0
  3. package/dist/cjs/components/FolderTree/DirectoryTree.js.map +7 -0
  4. package/dist/cjs/components/FolderTree/FilePreview.d.ts +17 -0
  5. package/dist/cjs/components/FolderTree/FilePreview.js +163 -0
  6. package/dist/cjs/components/FolderTree/FilePreview.js.map +7 -0
  7. package/dist/cjs/components/FolderTree/index.d.ts +5 -0
  8. package/dist/cjs/components/FolderTree/index.js +235 -0
  9. package/dist/cjs/components/FolderTree/index.js.map +7 -0
  10. package/dist/cjs/components/FolderTree/styles.d.ts +49 -0
  11. package/dist/cjs/components/FolderTree/styles.js +157 -0
  12. package/dist/cjs/components/FolderTree/styles.js.map +7 -0
  13. package/dist/cjs/components/FolderTree/types.d.ts +81 -0
  14. package/dist/cjs/components/FolderTree/types.js +18 -0
  15. package/dist/cjs/components/FolderTree/types.js.map +7 -0
  16. package/dist/cjs/components/XAdkSender/index.js +21 -10
  17. package/dist/cjs/components/XAdkSender/index.js.map +2 -2
  18. package/dist/cjs/index.d.ts +3 -0
  19. package/dist/cjs/index.js +3 -0
  20. package/dist/cjs/index.js.map +3 -3
  21. package/dist/cjs/types/XAdkSender.d.ts +7 -0
  22. package/dist/cjs/types/XAdkSender.js.map +1 -1
  23. package/dist/esm/components/FolderTree/DirectoryTree.d.ts +20 -0
  24. package/dist/esm/components/FolderTree/DirectoryTree.js +118 -0
  25. package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -0
  26. package/dist/esm/components/FolderTree/FilePreview.d.ts +17 -0
  27. package/dist/esm/components/FolderTree/FilePreview.js +160 -0
  28. package/dist/esm/components/FolderTree/FilePreview.js.map +1 -0
  29. package/dist/esm/components/FolderTree/index.d.ts +5 -0
  30. package/dist/esm/components/FolderTree/index.js +271 -0
  31. package/dist/esm/components/FolderTree/index.js.map +1 -0
  32. package/dist/esm/components/FolderTree/styles.d.ts +49 -0
  33. package/dist/esm/components/FolderTree/styles.js +23 -0
  34. package/dist/esm/components/FolderTree/styles.js.map +1 -0
  35. package/dist/esm/components/FolderTree/types.d.ts +81 -0
  36. package/dist/esm/components/FolderTree/types.js +2 -0
  37. package/dist/esm/components/FolderTree/types.js.map +1 -0
  38. package/dist/esm/components/XAdkSender/index.js +12 -0
  39. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  40. package/dist/esm/index.d.ts +3 -0
  41. package/dist/esm/index.js +3 -0
  42. package/dist/esm/index.js.map +1 -1
  43. package/dist/esm/types/XAdkSender.d.ts +7 -0
  44. package/dist/esm/types/XAdkSender.js.map +1 -1
  45. package/dist/umd/chat-sdk.min.js +1 -1
  46. package/package.json +1 -1
@@ -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, !showPreview && styles.containerNoPreview, 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","containerNoPreview","_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, !showPreview && styles.containerNoPreview, 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":";;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAE/D,OAAOC,IAAI,MAAM,MAAM;AAEvB,OAAOC,sBAAsB;AAC7B,OAAOC,WAAW;AAClB,SAASC,SAAS;AAAmB,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAIrC,IAAMC,UAAqC,GAAG,SAAxCA,UAAqCA,CAAIC,KAAK,EAAK;EACvD,IACEC,SAAS,GAwBPD,KAAK,CAxBPC,SAAS;IACTC,KAAK,GAuBHF,KAAK,CAvBPE,KAAK;IACLC,QAAQ,GAsBNH,KAAK,CAtBPG,QAAQ;IACRC,cAAc,GAqBZJ,KAAK,CArBPI,cAAc;IACdC,aAAa,GAoBXL,KAAK,CApBPK,aAAa;IACbC,cAAc,GAmBZN,KAAK,CAnBPM,cAAc;IACdC,YAAY,GAkBVP,KAAK,CAlBPO,YAAY;IAAAC,iBAAA,GAkBVR,KAAK,CAjBPS,UAAU;IAAVA,UAAU,GAAAD,iBAAA,cAAG,IAAI,GAAAA,iBAAA;IACjBE,mBAAmB,GAgBjBV,KAAK,CAhBPU,mBAAmB;IAAAC,qBAAA,GAgBjBX,KAAK,CAfPY,gBAAgB;IAAhBA,gBAAgB,GAAAD,qBAAA,cAAG,IAAI,GAAAA,qBAAA;IACvBE,YAAY,GAcVb,KAAK,CAdPa,YAAY;IACZC,oBAAoB,GAalBd,KAAK,CAbPc,oBAAoB;IAAAC,qBAAA,GAalBf,KAAK,CAZPgB,kBAAkB;IAAlBA,kBAAkB,GAAAD,qBAAA,cAAG,GAAG,GAAAA,qBAAA;IACxBE,WAAW,GAWTjB,KAAK,CAXPiB,WAAW;IACXC,oBAAoB,GAUlBlB,KAAK,CAVPkB,oBAAoB;IACpBC,aAAa,GASXnB,KAAK,CATPmB,aAAa;IACbC,qBAAqB,GAQnBpB,KAAK,CARPoB,qBAAqB;IACrBC,WAAW,GAOTrB,KAAK,CAPPqB,WAAW;IACXC,aAAa,GAMXtB,KAAK,CANPsB,aAAa;IACbC,kBAAkB,GAKhBvB,KAAK,CALPuB,kBAAkB;IAClBC,WAAW,GAITxB,KAAK,CAJPwB,WAAW;IACXC,QAAQ,GAGNzB,KAAK,CAHPyB,QAAQ;IACRC,YAAY,GAEV1B,KAAK,CAFP0B,YAAY;IAAAC,kBAAA,GAEV3B,KAAK,CADP4B,WAAW;IAAXA,WAAW,GAAAD,kBAAA,cAAG,IAAI,GAAAA,kBAAA;EAGpB,IAAME,MAAM,GAAGnC,SAAS,CAAC,CAAC;;EAE1B;EACA,IAAMoC,mBAAmB,GAAG1C,WAAW,CACrC,UACE2C,IAAuB,EAEoC;IAAA,IAD3DC,cAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAEtB,IAAI,CAACF,IAAI,EAAE,OAAO;MAAEK,IAAI,EAAED,SAAS;MAAEE,OAAO,EAAE;IAAM,CAAC;IACrD,IAAMC,QAAQ,GAAGC,KAAK,CAACC,OAAO,CAACT,IAAI,CAAC,GAChCA,IAAI,CAACU,MAAM,CAACC,OAAO,CAAC,GACpBX,IAAI,CAACY,KAAK,CAAC,GAAG,CAAC,CAACF,MAAM,CAACC,OAAO,CAAC;IACnC,IAAIJ,QAAQ,CAACJ,MAAM,KAAK,CAAC,EAAE,OAAO;MAAEE,IAAI,EAAED,SAAS;MAAEE,OAAO,EAAE;IAAM,CAAC;IAErE,IAAMO,QAAQ,GAAG,SAAXA,QAAQA,CACZC,KAAuB,EAEQ;MAAA,IAD/BC,KAAK,GAAAb,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;MAET,IAAIa,KAAK,IAAIR,QAAQ,CAACJ,MAAM,EAAE,OAAOC,SAAS;MAC9C,IAAMY,cAAc,GAAGT,QAAQ,CAACQ,KAAK,CAAC;MAAC,IAAAE,SAAA,GAAAC,0BAAA,CACpBJ,KAAK;QAAAK,KAAA;MAAA;QAAxB,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA0B;UAAA,IAAfjB,KAAI,GAAAc,KAAA,CAAAI,KAAA;UACb,IAAIlB,KAAI,CAACL,IAAI,KAAKgB,cAAc,EAAE;YAChC,OAAOD,KAAK,KAAKR,QAAQ,CAACJ,MAAM,GAAG,CAAC,GAChCE,KAAI,GACJA,KAAI,CAACmB,QAAQ,GACbX,QAAQ,CAACR,KAAI,CAACmB,QAAQ,EAAET,KAAK,GAAG,CAAC,CAAC,GAClCX,SAAS;UACf;QACF;MAAC,SAAAqB,GAAA;QAAAR,SAAA,CAAAS,CAAA,CAAAD,GAAA;MAAA;QAAAR,SAAA,CAAAU,CAAA;MAAA;MACD,OAAOvB,SAAS;IAClB,CAAC;IAED,IAAMC,IAAI,GAAGQ,QAAQ,CAACzC,QAAQ,CAAC;IAC/B,IAAMkC,OAAO,GAAGL,cAAc,GAC1B,CAAC,CAACI,IAAI,KAAK,EAACA,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEmB,QAAQ,KAAInB,IAAI,CAACmB,QAAQ,CAACrB,MAAM,KAAK,CAAC,CAAC,GACzD,CAAC,CAACE,IAAI;IACV,OAAO;MAAEA,IAAI,EAAJA,IAAI;MAAEC,OAAO,EAAPA;IAAQ,CAAC;EAC1B,CAAC,EACD,CAAClC,QAAQ,CACX,CAAC;EAED,IAAMwD,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIC,QAAmB;IAAA,OAC9C,CAAC,EACCA,QAAQ,IACRA,QAAQ,CAAC1B,MAAM,GAAG,CAAC,IACnBJ,mBAAmB,CAAC8B,QAAQ,EAAE,IAAI,CAAC,CAACvB,OAAO,CAC5C;EAAA;;EAEH;EACA,IAAAwB,SAAA,GAAkDvE,QAAQ,CAAW;MAAA,OACnEqE,mBAAmB,CAAC9C,YAAY,IAAIH,mBAAmB,CAAC,GACpDG,YAAY,IAAIH,mBAAmB,IAAI,EAAE,GACzC,EAAE;IAAA,CACR,CAAC;IAAAoD,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAJMG,iBAAiB,GAAAF,UAAA;IAAEG,oBAAoB,GAAAH,UAAA;EAK9C,IAAAI,UAAA,GAA+C5E,QAAQ,CACrD6B,aAAa,IAAID,oBACnB,CAAC;IAAAiD,UAAA,GAAAJ,cAAA,CAAAG,UAAA;IAFME,kBAAkB,GAAAD,UAAA;IAAEE,gBAAgB,GAAAF,UAAA;EAG3C,IAAAG,UAAA,GAAkDhF,QAAQ,CACxDqE,mBAAmB,CAAC9C,YAAY,IAAIH,mBAAmB,CACzD,CAAC;IAAA6D,UAAA,GAAAR,cAAA,CAAAO,UAAA;IAFME,iBAAiB,GAAAD,UAAA;IAAEE,oBAAoB,GAAAF,UAAA;EAG9C,IAAAG,UAAA,GAAsCpF,QAAQ,CAAS,EAAE,CAAC;IAAAqF,UAAA,GAAAZ,cAAA,CAAAW,UAAA;IAAnDE,WAAW,GAAAD,UAAA;IAAEE,cAAc,GAAAF,UAAA;EAClC,IAAAG,UAAA,GAA4CxF,QAAQ,CAAU,KAAK,CAAC;IAAAyF,WAAA,GAAAhB,cAAA,CAAAe,UAAA;IAA7DE,cAAc,GAAAD,WAAA;IAAEE,iBAAiB,GAAAF,WAAA;;EAExC;EACA1F,SAAS,CAAC,YAAM;IACd,IAAIwB,YAAY,KAAKsB,SAAS,EAAE;MAC9B8B,oBAAoB,CAACpD,YAAY,CAAC;MAClC4D,oBAAoB,CAACd,mBAAmB,CAAC9C,YAAY,CAAC,CAAC;IACzD;EACF,CAAC,EAAE,CAACA,YAAY,EAAEV,QAAQ,CAAC,CAAC;EAE5Bd,SAAS,CAAC,YAAM;IACd,IAAI8B,aAAa,KAAKgB,SAAS,EAAE;MAC/BkC,gBAAgB,CAAClD,aAAa,CAAC;IACjC;EACF,CAAC,EAAE,CAACA,aAAa,CAAC,CAAC;;EAEnB;EACA9B,SAAS,CAAC,YAAM;IACd,IAAM6F,WAAW;MAAA,IAAAC,IAAA,GAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QAAA;QAAA,IAAA3B,QAAA,EAAAtB,QAAA,EAAAkD,oBAAA,EAAApD,IAAA,EAAAqD,OAAA;QAAA,OAAAJ,mBAAA,GAAAK,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAA,MACd,CAACtB,iBAAiB,IAAIR,iBAAiB,CAAC9B,MAAM,KAAK,CAAC;gBAAA0D,QAAA,CAAAE,IAAA;gBAAA;cAAA;cACtDjB,cAAc,CAAC,EAAE,CAAC;cAClBI,iBAAiB,CAAC,KAAK,CAAC;cAAC,OAAAW,QAAA,CAAAG,MAAA;YAAA;cAIrBnC,QAAQ,GAAGI,iBAAiB,CAACgC,IAAI,CAAC,GAAG,CAAC;cACtC1D,QAAQ,GAAGsB,QAAQ,CAACjB,KAAK,CAAC,GAAG,CAAC,CAACF,MAAM,CAAC,UAACU,CAAC;gBAAA,OAAKA,CAAC,KAAK,EAAE;cAAA,EAAC;cAAAqC,oBAAA,GAC3C1D,mBAAmB,CAACQ,QAAQ,CAAC,EAAtCF,IAAI,GAAAoD,oBAAA,CAAJpD,IAAI;cAAA,KAERb,kBAAkB;gBAAAqE,QAAA,CAAAE,IAAA;gBAAA;cAAA;cACpBb,iBAAiB,CAAC,IAAI,CAAC;cAACW,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAE,IAAA;cAAA,OAEAvE,kBAAkB,CAAC0E,eAAe,CAACrC,QAAQ,CAAC;YAAA;cAA5D6B,OAAO,GAAAG,QAAA,CAAAM,IAAA;cACbrB,cAAc,CAACY,OAAO,CAAC;cAACG,QAAA,CAAAE,IAAA;cAAA;YAAA;cAAAF,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAO,EAAA,GAAAP,QAAA;cAExBf,cAAc,iCAAAuB,MAAA,CAEVR,QAAA,CAAAO,EAAA,YAAiBE,KAAK,GAAGT,QAAA,CAAAO,EAAA,CAAMG,OAAO,GAAG,eAAe,CAE5D,CAAC;YAAC;cAAAV,QAAA,CAAAC,IAAA;cAEFZ,iBAAiB,CAAC,KAAK,CAAC;cAAC,OAAAW,QAAA,CAAAW,MAAA;YAAA;cAAAX,QAAA,CAAAE,IAAA;cAAA;YAAA;cAEtB,IAAI1D,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEqD,OAAO,EAAE;gBACxBZ,cAAc,CAACzC,IAAI,CAACqD,OAAO,CAAC;gBAC5BR,iBAAiB,CAAC,KAAK,CAAC;cAC1B,CAAC,MAAM;gBACLJ,cAAc,CAAC,EAAE,CAAC;gBAClBI,iBAAiB,CAAC,KAAK,CAAC;cAC1B;YAAC;YAAA;cAAA,OAAAW,QAAA,CAAAY,IAAA;UAAA;QAAA,GAAAjB,OAAA;MAAA,CACF;MAAA,gBAhCKL,WAAWA,CAAA;QAAA,OAAAC,IAAA,CAAAsB,KAAA,OAAAxE,SAAA;MAAA;IAAA,GAgChB;IAEDiD,WAAW,CAAC,CAAC;EACf,CAAC,EAAE,CAACV,iBAAiB,EAAER,iBAAiB,EAAE7D,QAAQ,EAAEoB,kBAAkB,EAAEO,mBAAmB,CAAC,CAAC;;EAE7F;EACA,IAAM4E,YAAmC,GAAG,SAAtCA,YAAmCA,CAAIC,KAAK,EAAEC,IAAI,EAAK;IAAA,IAAAC,MAAA;IAC3D,IAAMC,IAAI,GAAGH,KAAiB;IAC9B,IAAM9D,KAAK,GAAGN,KAAK,CAACC,OAAO,CAACoE,IAAI,CAACG,aAAa,CAAC,GAC3CH,IAAI,CAACG,aAAa,GAClB,CAACH,IAAI,CAACG,aAAa,CAAC;IAExB,IAAMC,QAAQ,GAAGnE,KAAK,CAACoE,IAAI,CAAC,UAAC7E,IAAI;MAAA,OAAK,CAACA,IAAI,CAAC8E,MAAM;IAAA,EAAC;IACnD,IAAIF,QAAQ,EAAE;MACZ,IAAInE,KAAK,CAACX,MAAM,KAAK,CAAC,EAAE;QACtB,IAAME,IAAI,GAAGS,KAAK,CAAC,CAAC,CAA8B;QAClDvB,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAGc,IAAI,CAACL,IAAI,CAAC;MAC5B;MACA;IACF;IAEA,IAAMoF,SAAS,GAAG,EAAAN,MAAA,GAAAC,IAAI,CAAC,CAAC,CAAC,cAAAD,MAAA,uBAAPA,MAAA,CAASlE,KAAK,CAAC,GAAG,CAAC,CAACF,MAAM,CAACC,OAAO,CAAC,KAAI,EAAE;IAC3D,IAAIyE,SAAS,CAACjF,MAAM,KAAK,CAAC,EAAE;IAE5B,IAAMkF,YAAY,GAAGvE,KAAK,CAAC,CAAC,CAA0C;IACtE,IAAMwE,QAAQ,GAAGD,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEE,KAA2B;IAC1D,IAAMC,WAAW,GAAGH,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE3B,OAA6B;IAE/D3E,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAG;MACrBiB,IAAI,EAAEoF,SAAS;MACfG,KAAK,EAAED,QAAQ;MACf5B,OAAO,EAAE8B;IACX,CAAC,CAAC;IAEF,IAAMC,YAAY,GAAG3G,YAAY,KAAKsB,SAAS;IAC/C,IAAI,CAACqF,YAAY,EAAE;MACjB/C,oBAAoB,CAAC,IAAI,CAAC;MAC1BR,oBAAoB,CAACkD,SAAS,CAAC;IACjC;IAEA,IAAItE,KAAK,CAACX,MAAM,KAAK,CAAC,EAAE;MACtB,IAAME,MAAI,GAAGS,KAAK,CAAC,CAAC,CAA8B;MAClDxB,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAGe,MAAI,CAACL,IAAI,EAAEK,MAAI,CAACqD,OAAO,CAAC;IACxC;EACF,CAAC;EAED,IAAMgC,YAAmC,GAAG,SAAtCA,YAAmCA,CAAIX,IAAI,EAAK;IACpD,IAAMY,QAAQ,GAAGZ,IAAgB;IACjCzC,gBAAgB,CAACqD,QAAQ,CAAC;IAC1BtG,qBAAqB,aAArBA,qBAAqB,eAArBA,qBAAqB,CAAGsG,QAAQ,CAAC;EACnC,CAAC;EAED,oBACE5H,KAAA;IACEG,SAAS,EAAEV,IAAI,CAACsC,MAAM,CAAC8F,SAAS,EAAE,CAAC/F,WAAW,IAAIC,MAAM,CAAC+F,kBAAkB,EAAE3H,SAAS,CAAE;IACxFC,KAAK,EAAA2H,aAAA,CAAAA,aAAA,CAAAA,aAAA,KACA3H,KAAK,GACJA,KAAK,aAALA,KAAK,eAALA,KAAK,CAAE4H,UAAU,GAChB;MAAE,4BAA4B,EAAE5H,KAAK,CAAC4H;IAAW,CAAC,GACnD,CAAC,CAAC,GACF5H,KAAK,aAALA,KAAK,eAALA,KAAK,CAAE6H,eAAe,GACrB;MAAE,4BAA4B,EAAE7H,KAAK,CAAC6H;IAAgB,CAAC,GACxD,CAAC,CAAC,CACN;IAAAxE,QAAA,gBAEF3D,IAAA,CAACJ,sBAAsB;MACrBW,QAAQ,EAAEA,QAAS;MACnBC,cAAc,EAAEA,cAAe;MAC/B4H,YAAY,EACVvH,UAAU,IAAIuD,iBAAiB,IAAIQ,iBAAiB,GAChD,CAACR,iBAAiB,CAACgC,IAAI,CAAC,GAAG,CAAC,CAAC,GAC7B,EACL;MACDiC,YAAY,EAAE7D,kBAAmB;MACjC8D,QAAQ,EAAExB,YAAa;MACvByB,QAAQ,EAAEV,YAAa;MACvB7G,gBAAgB,EAAEA,gBAAiB;MACnCN,cAAc,EAAEA,cAAe;MAC/BkB,WAAW,EAAEA,WAAY;MACzBC,QAAQ,EAAEA,QAAS;MACnBC,YAAY,EAAEA,YAAa;MAC3B0G,KAAK,EAAEpH;IAAmB,CAC3B,CAAC,EACDY,WAAW,iBACVhC,IAAA,CAACH,WAAW;MACVoB,YAAY,EAAE2D,iBAAiB,GAAGR,iBAAiB,GAAG,EAAG;MACzDY,WAAW,EAAEA,WAAY;MACzByD,OAAO,EAAErD,cAAe;MACxBzE,YAAY,EAAEA,YAAa;MAC3BF,aAAa,EAAEA,aAAc;MAC7BY,WAAW,EAAEA,WAAY;MACzBqH,WAAW,EAAE,SAAAA,YAACvG,IAAI,EAAK;QACrB,IAAI,CAACA,IAAI,IAAIA,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE,OAAOC,SAAS;QAChD,IAAAoG,qBAAA,GAAiBzG,mBAAmB,CAACC,IAAI,CAAC;UAAlCK,IAAI,GAAAmG,qBAAA,CAAJnG,IAAI;QACZ,OAAOA,IAAI,GACP;UAAEkF,KAAK,EAAElF,IAAI,CAACkF,KAAK;UAAEvF,IAAI,EAAEK,IAAI,CAACL,IAAI;UAAE0D,OAAO,EAAErD,IAAI,CAACqD;QAAQ,CAAC,GAC7DtD,SAAS;MACf;IAAE,CACH,CACF;EAAA,CACE,CAAC;AAEV,CAAC;AAED,eAAepC,UAAU"}
@@ -0,0 +1,49 @@
1
+ export declare const useStyles: () => {
2
+ container: string;
3
+ containerNoPreview: string;
4
+ directoryPanel: string;
5
+ directoryTitle: string;
6
+ directoryTreeContent: string;
7
+ previewPanel: string;
8
+ previewTitle: string;
9
+ previewContent: string;
10
+ emptyContainer: string;
11
+ loadingContainer: string;
12
+ treeNodeTitle: string;
13
+ moreIcon: string;
14
+ treeNodeTitleHover: string;
15
+ copyBtn: string;
16
+ } & {
17
+ w: (width: string | number) => string;
18
+ h: (height: string | number) => string;
19
+ p: (padding: string) => string;
20
+ pb: (padding: string | number) => string;
21
+ pt: (padding: string | number) => string;
22
+ pl: (padding: string | number) => string;
23
+ pr: (padding: string | number) => string;
24
+ m: (margin: string) => string;
25
+ mb: (margin: string | number) => string;
26
+ mt: (margin: string | number) => string;
27
+ ml: (margin: string | number) => string;
28
+ mr: (margin: string | number) => string;
29
+ text: (size: string | number) => string;
30
+ weight: (size: number) => string;
31
+ textColor: (c: string) => string;
32
+ bg: (c: string) => string;
33
+ rs: (radius: string | number) => string;
34
+ gap: (g: string | number) => string;
35
+ flex: string;
36
+ flexCenter: string;
37
+ flexBetween: string;
38
+ flexColumn: string;
39
+ flex1: string;
40
+ cursor: (type: string) => string;
41
+ border: (color: string, width?: string) => string;
42
+ boxShadow: (shadow: string) => string;
43
+ transition: (property?: string, duration?: string) => string;
44
+ overflow: (type: string) => string;
45
+ position: (type: string) => string;
46
+ zIndex: (index: number) => string;
47
+ flexCenterGap2: string;
48
+ flexCenterGap4: string;
49
+ };
@@ -0,0 +1,23 @@
1
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14;
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
+ containerNoPreview: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n height: auto;\n border: none;\n border-radius: 0;\n & > *:first-child {\n border-right: none;\n }\n "]))),
9
+ directoryPanel: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n "]))),
10
+ directoryTitle: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n "]))),
11
+ directoryTreeContent: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n padding: 4px 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 "]))),
12
+ previewPanel: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n flex: 1;\n height: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n "]))),
13
+ previewTitle: css(_templateObject7 || (_templateObject7 = _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 "]))),
14
+ previewContent: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n flex: 1;\n overflow: auto;\n padding: 16px;\n font-size: 13px;\n line-height: 1.6;\n "]))),
15
+ emptyContainer: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n "]))),
16
+ loadingContainer: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n "]))),
17
+ treeNodeTitle: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-right: 4px;\n "]))),
18
+ moreIcon: css(_templateObject12 || (_templateObject12 = _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 "]))),
19
+ treeNodeTitleHover: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n &:hover .folder-tree-more-icon {\n opacity: 1;\n }\n "]))),
20
+ copyBtn: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n cursor: pointer;\n color: #999;\n font-size: 14px;\n &:hover {\n color: #1677ff;\n }\n "])))
21
+ };
22
+ });
23
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","container","_templateObject","_taggedTemplateLiteral","containerNoPreview","_templateObject2","directoryPanel","_templateObject3","directoryTitle","_templateObject4","directoryTreeContent","_templateObject5","previewPanel","_templateObject6","previewTitle","_templateObject7","previewContent","_templateObject8","emptyContainer","_templateObject9","loadingContainer","_templateObject10","treeNodeTitle","_templateObject11","moreIcon","_templateObject12","treeNodeTitleHover","_templateObject13","copyBtn","_templateObject14"],"sources":["../../../../src/components/FolderTree/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n container: css`\n display: flex;\n width: 100%;\n height: 500px;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n overflow: hidden;\n background: #fff;\n `,\n containerNoPreview: css`\n height: auto;\n border: none;\n border-radius: 0;\n & > *:first-child {\n border-right: none;\n }\n `,\n directoryPanel: css`\n 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,kBAAkB,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,oIAOtB;IACDG,cAAc,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,qJAKlB;IACDK,cAAc,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,2IAMlB;IACDO,oBAAoB,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,0fAwBxB;IACDS,YAAY,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,mHAMhB;IACDW,YAAY,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,qPAUhB;IACDa,cAAc,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,gHAMlB;IACDe,cAAc,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,2GAKlB;IACDiB,gBAAgB,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,2GAKpB;IACDmB,aAAa,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,wHAKjB;IACDqB,QAAQ,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,wPAYZ;IACDuB,kBAAkB,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,4EAItB;IACDyB,OAAO,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA;EAQd,CAAC;AAAA,CAAC,CAAC"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../../src/components/FolderTree/types.ts"],"sourcesContent":["import type { DropdownProps } from \"antd\";\nimport type React from \"react\";\n\n/** 文件树节点数据 */\nexport interface FolderTreeData {\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"],"mappings":""}
@@ -38,6 +38,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
38
38
  allowedFileTypes = _ref$allowedFileTypes === void 0 ? [] : _ref$allowedFileTypes,
39
39
  _ref$maxFiles = _ref.maxFiles,
40
40
  maxFiles = _ref$maxFiles === void 0 ? Infinity : _ref$maxFiles,
41
+ sendButtonRender = _ref.sendButtonRender,
41
42
  suffix = _ref.suffix,
42
43
  header = _ref.header,
43
44
  prefix = _ref.prefix,
@@ -487,6 +488,16 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
487
488
 
488
489
  // 定义按钮组件(供外部 slot 函数通过 actionsComponents 使用)
489
490
  var SendButton = function SendButton(props) {
491
+ if (sendButtonRender) {
492
+ return /*#__PURE__*/_jsx(_Fragment, {
493
+ children: sendButtonRender({
494
+ loading: loading,
495
+ disabled: uploading || disabled,
496
+ onSend: handleSubmit,
497
+ onStop: onStop
498
+ })
499
+ });
500
+ }
490
501
  return /*#__PURE__*/_jsx(Tooltip, {
491
502
  title: loading ? "停止生成" : "发送消息",
492
503
  children: /*#__PURE__*/_jsx("button", _objectSpread(_objectSpread({
@@ -633,6 +644,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
633
644
  XAdkSender.displayName = 'XAdkSender';
634
645
  import XAdkSenderSwitch from "./Switch";
635
646
  import { jsx as _jsx } from "react/jsx-runtime";
647
+ import { Fragment as _Fragment } from "react/jsx-runtime";
636
648
  import { jsxs as _jsxs } from "react/jsx-runtime";
637
649
  var CompoundSender = XAdkSender;
638
650
  CompoundSender.Switch = XAdkSenderSwitch;