dishui 0.0.65 → 0.0.67

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 (507) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +10 -11
  2. package/dist/chart.js +12 -46
  3. package/dist/code-editor.js +16 -43
  4. package/dist/components/Accordion/index.d.ts +39 -0
  5. package/dist/components/Accordion/index.js +70 -0
  6. package/dist/components/Accordion/index.js.map +1 -0
  7. package/dist/components/Avatar/index.d.ts +48 -0
  8. package/dist/components/Avatar/index.js +71 -0
  9. package/dist/components/Avatar/index.js.map +1 -0
  10. package/dist/components/Badge/index.js +10 -15
  11. package/dist/components/Badge/index.js.map +1 -1
  12. package/dist/components/Button/index.js +62 -89
  13. package/dist/components/Button/index.js.map +1 -1
  14. package/dist/components/Card/index.d.ts +142 -0
  15. package/dist/components/Card/index.js +368 -69
  16. package/dist/components/Card/index.js.map +1 -1
  17. package/dist/components/Chart/Chart.js +25 -25
  18. package/dist/components/Chart/Chart.js.map +1 -1
  19. package/dist/components/Checkbox/index.js +57 -65
  20. package/dist/components/Checkbox/index.js.map +1 -1
  21. package/dist/components/ChoicePicker/index.d.ts +44 -0
  22. package/dist/components/ChoicePicker/index.js +81 -0
  23. package/dist/components/ChoicePicker/index.js.map +1 -0
  24. package/dist/components/Column/index.d.ts +28 -0
  25. package/dist/components/Column/index.js +30 -0
  26. package/dist/components/Column/index.js.map +1 -0
  27. package/dist/components/DateTimeInput/index.d.ts +44 -0
  28. package/dist/components/DateTimeInput/index.js +48 -0
  29. package/dist/components/DateTimeInput/index.js.map +1 -0
  30. package/dist/components/Demo/index.js +107 -107
  31. package/dist/components/Demo/index.js.map +1 -1
  32. package/dist/components/Divider/index.d.ts +20 -0
  33. package/dist/components/Divider/index.js +30 -0
  34. package/dist/components/Divider/index.js.map +1 -0
  35. package/dist/components/EmptyState/index.js +24 -24
  36. package/dist/components/EmptyState/index.js.map +1 -1
  37. package/dist/components/FileUploader/DropZone.js +134 -136
  38. package/dist/components/FileUploader/DropZone.js.map +1 -1
  39. package/dist/components/FileUploader/FileItem.js +159 -163
  40. package/dist/components/FileUploader/FileItem.js.map +1 -1
  41. package/dist/components/FileUploader/FileUploader.js +126 -127
  42. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  43. package/dist/components/FileUploader/UploadQueue.js +62 -62
  44. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  45. package/dist/components/FloatWindow/index.d.ts +28 -0
  46. package/dist/components/GridLayout/index.d.ts +42 -0
  47. package/dist/components/Icon/index.d.ts +26 -0
  48. package/dist/components/Icon/index.js +27 -0
  49. package/dist/components/Icon/index.js.map +1 -0
  50. package/dist/components/Image/index.d.ts +33 -0
  51. package/dist/components/Image/index.js +44 -0
  52. package/dist/components/Image/index.js.map +1 -0
  53. package/dist/components/Input/index.js +196 -197
  54. package/dist/components/Input/index.js.map +1 -1
  55. package/dist/components/Label/index.js +62 -74
  56. package/dist/components/Label/index.js.map +1 -1
  57. package/dist/components/Layout/index.js +134 -139
  58. package/dist/components/Layout/index.js.map +1 -1
  59. package/dist/components/List/index.js +45 -58
  60. package/dist/components/List/index.js.map +1 -1
  61. package/dist/components/Markdown/Markdown.js +106 -107
  62. package/dist/components/Markdown/Markdown.js.map +1 -1
  63. package/dist/components/Markdown/codeThemes.js +24 -33
  64. package/dist/components/Markdown/codeThemes.js.map +1 -1
  65. package/dist/components/Markdown/markdownComponents.js +203 -208
  66. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  67. package/dist/components/Markdown/parseCodeBlockMeta.js +22 -22
  68. package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
  69. package/dist/components/Markdown/useMarkdownSource.js +46 -46
  70. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  71. package/dist/components/Markdown/useMarkmapRenderer.js +35 -36
  72. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  73. package/dist/components/Markdown/useMermaidRenderer.js +41 -42
  74. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  75. package/dist/components/Modal/index.js +82 -82
  76. package/dist/components/Modal/index.js.map +1 -1
  77. package/dist/components/MultipleChoice/index.d.ts +44 -0
  78. package/dist/components/MultipleChoice/index.js +52 -0
  79. package/dist/components/MultipleChoice/index.js.map +1 -0
  80. package/dist/components/Notification/index.d.ts +17 -0
  81. package/dist/components/Page/index.d.ts +1 -1
  82. package/dist/components/Page/index.js +40 -71
  83. package/dist/components/Page/index.js.map +1 -1
  84. package/dist/components/PageHeader/index.js +28 -28
  85. package/dist/components/PageHeader/index.js.map +1 -1
  86. package/dist/components/ProtectedRoute/index.js +8 -9
  87. package/dist/components/ProtectedRoute/index.js.map +1 -1
  88. package/dist/components/Row/index.d.ts +28 -0
  89. package/dist/components/Row/index.js +30 -0
  90. package/dist/components/Row/index.js.map +1 -0
  91. package/dist/components/Select/index.js +251 -254
  92. package/dist/components/Select/index.js.map +1 -1
  93. package/dist/components/SidebarToggleButton/index.js +56 -59
  94. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  95. package/dist/components/Slider/index.d.ts +39 -0
  96. package/dist/components/Slider/index.js +52 -0
  97. package/dist/components/Slider/index.js.map +1 -0
  98. package/dist/components/Switch/index.d.ts +34 -0
  99. package/dist/components/Switch/index.js +55 -0
  100. package/dist/components/Switch/index.js.map +1 -0
  101. package/dist/components/Tab/index.d.ts +40 -0
  102. package/dist/components/Table/index.js +109 -121
  103. package/dist/components/Table/index.js.map +1 -1
  104. package/dist/components/Tabs/index.js +28 -38
  105. package/dist/components/Tabs/index.js.map +1 -1
  106. package/dist/components/Text/index.d.ts +43 -0
  107. package/dist/components/Text/index.js +55 -0
  108. package/dist/components/Text/index.js.map +1 -0
  109. package/dist/components/Tooltip/index.d.ts +23 -0
  110. package/dist/components/Tooltip/index.js +34 -0
  111. package/dist/components/Tooltip/index.js.map +1 -0
  112. package/dist/components/Tree/Tree.js +205 -205
  113. package/dist/components/Tree/Tree.js.map +1 -1
  114. package/dist/components/pro/ArticleContextMenu/index.js +86 -87
  115. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  116. package/dist/components/pro/ArticleControl/ArticleControl2.js +250 -250
  117. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  118. package/dist/components/pro/ArticleControl/buildHeadingTree.js +31 -32
  119. package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
  120. package/dist/components/pro/ArticleControl/useArticleToc.js +100 -102
  121. package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
  122. package/dist/components/pro/Calendar/Calendar.d.ts +10 -0
  123. package/dist/components/pro/Calendar/hooks/useCalendarDrag.d.ts +47 -0
  124. package/dist/components/pro/Calendar/hooks/useCalendarState.d.ts +56 -0
  125. package/dist/components/pro/Calendar/index.d.ts +7 -0
  126. package/dist/components/pro/Calendar/types.d.ts +151 -0
  127. package/dist/components/pro/Calendar/utils.d.ts +94 -0
  128. package/dist/components/pro/Chat/Chat.d.ts +6 -0
  129. package/dist/components/pro/Chat/index.d.ts +2 -0
  130. package/dist/components/pro/Chat/types.d.ts +84 -0
  131. package/dist/components/pro/CodeEditor/editors/CodeEditor.js +287 -327
  132. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  133. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -224
  134. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  135. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js +594 -613
  136. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
  137. package/dist/components/pro/CodeEditor/extensions/contextMenu.js +54 -55
  138. package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
  139. package/dist/components/pro/CodeEditor/extensions/index.js +152 -160
  140. package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
  141. package/dist/components/pro/CodeEditor/langs/index.js +7 -15
  142. package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
  143. package/dist/components/pro/CodeEditor/langs/javascript.js +11 -48
  144. package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
  145. package/dist/components/pro/CodeEditor/langs/python.js +4 -40
  146. package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
  147. package/dist/components/pro/CodeEditor/langs/snippets.js +118 -147
  148. package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
  149. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js +153 -153
  150. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  151. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +180 -190
  152. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  153. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js +130 -137
  154. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  155. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js +228 -242
  156. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  157. package/dist/components/pro/CodeEditor/panels/VariablePanel.js +208 -248
  158. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  159. package/dist/components/pro/CodeEditor/themes.js +513 -483
  160. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  161. package/dist/components/pro/CodeEditor/types.d.ts +1 -1
  162. package/dist/components/pro/CodeEditor/utils.js +171 -175
  163. package/dist/components/pro/CodeEditor/utils.js.map +1 -1
  164. package/dist/components/pro/DataTable/DataTable.js +305 -306
  165. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  166. package/dist/components/pro/DataTable/Filters.js +299 -314
  167. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  168. package/dist/components/pro/DataTable/PivotPanel.js +203 -204
  169. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  170. package/dist/components/pro/DataTable/PivotView.js +142 -144
  171. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  172. package/dist/components/pro/DataTable/components/BulkActions.js +42 -42
  173. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  174. package/dist/components/pro/DataTable/components/ColumnSelector.js +84 -84
  175. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  176. package/dist/components/pro/DataTable/components/FilterBar.js +58 -58
  177. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  178. package/dist/components/pro/DataTable/components/TableBody.js +93 -94
  179. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  180. package/dist/components/pro/DataTable/components/TableHeader.js +78 -78
  181. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  182. package/dist/components/pro/DataTable/components/TablePagination.js +77 -77
  183. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  184. package/dist/components/pro/DataTable/components/TableToolbar.js +40 -40
  185. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  186. package/dist/components/pro/DataTable/extension.js +5 -5
  187. package/dist/components/pro/DataTable/extension.js.map +1 -1
  188. package/dist/components/pro/DataTable/pivotEngine.js +84 -92
  189. package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
  190. package/dist/components/pro/DataTable/pivotExtension.js +93 -93
  191. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  192. package/dist/components/pro/DataTable/rowDetailExtension.js +30 -30
  193. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  194. package/dist/components/pro/DataTable/tanstack-table.js +45 -62
  195. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  196. package/dist/components/pro/DataTable/treeDataUtils.js +37 -48
  197. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  198. package/dist/components/pro/DataTable/useColumnDragReorder.js +68 -68
  199. package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
  200. package/dist/components/pro/DataTable/utils.js +156 -168
  201. package/dist/components/pro/DataTable/utils.js.map +1 -1
  202. package/dist/components/pro/FileExplorer/Breadcrumb.js +180 -180
  203. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  204. package/dist/components/pro/FileExplorer/CreateDialog.js +78 -78
  205. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  206. package/dist/components/pro/FileExplorer/FileExplorer.js +202 -205
  207. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  208. package/dist/components/pro/FileExplorer/FileIcon.js +189 -189
  209. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  210. package/dist/components/pro/FileExplorer/GridView.js +100 -100
  211. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  212. package/dist/components/pro/FileExplorer/ListView.js +209 -209
  213. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  214. package/dist/components/pro/FileExplorer/Toolbar.js +199 -199
  215. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  216. package/dist/components/pro/Flow/Flow.js +920 -948
  217. package/dist/components/pro/Flow/Flow.js.map +1 -1
  218. package/dist/components/pro/Flow/FlowCanvas.js +1626 -1662
  219. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  220. package/dist/components/pro/Flow/archify/build.js +85 -94
  221. package/dist/components/pro/Flow/archify/build.js.map +1 -1
  222. package/dist/components/pro/Flow/archify/convert.js +512 -519
  223. package/dist/components/pro/Flow/archify/convert.js.map +1 -1
  224. package/dist/components/pro/Flow/archify/palette.js +87 -104
  225. package/dist/components/pro/Flow/archify/palette.js.map +1 -1
  226. package/dist/components/pro/Flow/archify/presets.js +34 -37
  227. package/dist/components/pro/Flow/archify/presets.js.map +1 -1
  228. package/dist/components/pro/Flow/archify/spec.js +7 -7
  229. package/dist/components/pro/Flow/archify/spec.js.map +1 -1
  230. package/dist/components/pro/Flow/canvas/AlignmentGuides.js +25 -25
  231. package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
  232. package/dist/components/pro/Flow/canvas/GridRenderer.js +54 -55
  233. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  234. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +54 -58
  235. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  236. package/dist/components/pro/Flow/canvas/PixiApp.js +105 -102
  237. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  238. package/dist/components/pro/Flow/canvas/SelectionOverlay.js +38 -38
  239. package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
  240. package/dist/components/pro/Flow/canvas/ViewportContainer.js +117 -117
  241. package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
  242. package/dist/components/pro/Flow/constants.js +266 -278
  243. package/dist/components/pro/Flow/constants.js.map +1 -1
  244. package/dist/components/pro/Flow/context/FlowAIContext.js +27 -28
  245. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
  246. package/dist/components/pro/Flow/context/FlowContext.js +60 -61
  247. package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
  248. package/dist/components/pro/Flow/context/FlowUIContext.js +115 -117
  249. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  250. package/dist/components/pro/Flow/edges/EdgeRenderer.js +135 -138
  251. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  252. package/dist/components/pro/Flow/edges/edgeMarkers.js +11 -14
  253. package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
  254. package/dist/components/pro/Flow/edges/edgePaths.js +351 -367
  255. package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
  256. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js +49 -52
  257. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
  258. package/dist/components/pro/Flow/hooks/useClipboard.js +154 -154
  259. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  260. package/dist/components/pro/Flow/hooks/useCompactMode.js +17 -17
  261. package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
  262. package/dist/components/pro/Flow/hooks/useDeleteSelection.js +40 -40
  263. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  264. package/dist/components/pro/Flow/hooks/useDraggablePanel.js +51 -51
  265. package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
  266. package/dist/components/pro/Flow/hooks/useEdgeMutations.js +157 -157
  267. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  268. package/dist/components/pro/Flow/hooks/useFlowImportExport.js +190 -201
  269. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  270. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js +32 -38
  271. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
  272. package/dist/components/pro/Flow/hooks/useLayoutActions.js +172 -180
  273. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  274. package/dist/components/pro/Flow/hooks/useLineMutations.js +57 -57
  275. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  276. package/dist/components/pro/Flow/hooks/useMindMap.js +229 -238
  277. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  278. package/dist/components/pro/Flow/hooks/useNodeMutations.js +102 -102
  279. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  280. package/dist/components/pro/Flow/hooks/usePdfExport.js +55 -56
  281. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
  282. package/dist/components/pro/Flow/hooks/usePixiApp.js +55 -57
  283. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  284. package/dist/components/pro/Flow/hooks/useResizablePanel.js +31 -31
  285. package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
  286. package/dist/components/pro/Flow/hooks/useSelection.js +69 -69
  287. package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
  288. package/dist/components/pro/Flow/hooks/useUndoRedo.js +27 -27
  289. package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
  290. package/dist/components/pro/Flow/hooks/useViewport.js +28 -28
  291. package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
  292. package/dist/components/pro/Flow/lines/FreehandTool.js +63 -63
  293. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  294. package/dist/components/pro/Flow/lines/GeometricLineTool.js +80 -80
  295. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  296. package/dist/components/pro/Flow/lines/LineRenderer.js +88 -88
  297. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  298. package/dist/components/pro/Flow/lines/lineSmoothing.js +32 -34
  299. package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
  300. package/dist/components/pro/Flow/nodes/DataNodeView.js +236 -242
  301. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  302. package/dist/components/pro/Flow/nodes/MediaContent.js +236 -246
  303. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  304. package/dist/components/pro/Flow/nodes/MediaOverlay.js +63 -63
  305. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  306. package/dist/components/pro/Flow/nodes/Model3DView.js +111 -113
  307. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  308. package/dist/components/pro/Flow/nodes/NodeHandles.js +74 -80
  309. package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
  310. package/dist/components/pro/Flow/nodes/NodeRenderer.js +303 -314
  311. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  312. package/dist/components/pro/Flow/nodes/NodeText.js +25 -29
  313. package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
  314. package/dist/components/pro/Flow/nodes/aiClient.js +124 -137
  315. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  316. package/dist/components/pro/Flow/nodes/animAnchors.js +42 -49
  317. package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
  318. package/dist/components/pro/Flow/nodes/dataUtils.js +246 -267
  319. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  320. package/dist/components/pro/Flow/nodes/nodeUtils.js +23 -28
  321. package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
  322. package/dist/components/pro/Flow/nodes/shapes.js +556 -589
  323. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  324. package/dist/components/pro/Flow/nodes/svgIconTexture.js +37 -39
  325. package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
  326. package/dist/components/pro/Flow/nodes/svgIcons.js +684 -689
  327. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  328. package/dist/components/pro/Flow/panels/AIPanel.js +464 -491
  329. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  330. package/dist/components/pro/Flow/panels/Breadcrumb.js +41 -41
  331. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  332. package/dist/components/pro/Flow/panels/ContextMenu.js +37 -37
  333. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  334. package/dist/components/pro/Flow/panels/DataInspectorSection.js +428 -432
  335. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  336. package/dist/components/pro/Flow/panels/ExpandableTextarea.js +61 -62
  337. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  338. package/dist/components/pro/Flow/panels/FlowPanelGroup.js +114 -114
  339. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  340. package/dist/components/pro/Flow/panels/FlowToolbar.js +347 -391
  341. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  342. package/dist/components/pro/Flow/panels/InspectorPanel.js +1792 -1798
  343. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  344. package/dist/components/pro/Flow/panels/OutlinePanel.js +242 -248
  345. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  346. package/dist/components/pro/Flow/panels/PresentationMode.js +137 -140
  347. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  348. package/dist/components/pro/Flow/panels/ProjectTitle.js +46 -46
  349. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  350. package/dist/components/pro/Flow/panels/ShapePalette.js +557 -572
  351. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  352. package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +0 -1
  353. package/dist/components/pro/Flow/panels/toolbarIcons.js +508 -557
  354. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  355. package/dist/components/pro/Flow/types.js +26 -26
  356. package/dist/components/pro/Flow/types.js.map +1 -1
  357. package/dist/components/pro/Flow/utils/dashedLine.js +113 -117
  358. package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
  359. package/dist/components/pro/Flow/utils/gradient.js +55 -55
  360. package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
  361. package/dist/components/pro/Flow/utils/pdfExport.js +50 -89
  362. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
  363. package/dist/components/pro/Flow/utils/themeColor.js +185 -195
  364. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  365. package/dist/components/pro/Gantt/Gantt.d.ts +7 -0
  366. package/dist/components/pro/Gantt/hooks/useGanttDrag.d.ts +31 -0
  367. package/dist/components/pro/Gantt/hooks/useGanttState.d.ts +58 -0
  368. package/dist/components/pro/Gantt/index.d.ts +6 -0
  369. package/dist/components/pro/Gantt/types.d.ts +478 -0
  370. package/dist/components/pro/Gantt/utils.d.ts +124 -0
  371. package/dist/components/pro/Resizable/Resizable.d.ts +30 -0
  372. package/dist/components/pro/Resizable/index.d.ts +2 -0
  373. package/dist/components/pro/RichTextEditor/AIRewrite.js +323 -334
  374. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  375. package/dist/components/pro/RichTextEditor/BlockHandle.js +314 -316
  376. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  377. package/dist/components/pro/RichTextEditor/BubbleToolbar.js +97 -97
  378. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  379. package/dist/components/pro/RichTextEditor/CommentDialog.js +88 -88
  380. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  381. package/dist/components/pro/RichTextEditor/CommentPanel.js +240 -240
  382. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  383. package/dist/components/pro/RichTextEditor/CommentPopover.js +234 -234
  384. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  385. package/dist/components/pro/RichTextEditor/ContextMenu.js +251 -252
  386. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  387. package/dist/components/pro/RichTextEditor/RichTextEditor.js +267 -271
  388. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  389. package/dist/components/pro/RichTextEditor/SlashMenu.js +214 -214
  390. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  391. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -75
  392. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  393. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +261 -261
  394. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  395. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +172 -526
  396. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  397. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js +112 -114
  398. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  399. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +194 -194
  400. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  401. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +970 -973
  402. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  403. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +11 -12
  404. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  405. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +310 -344
  406. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  407. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +38 -39
  408. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
  409. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +620 -625
  410. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  411. package/dist/components/pro/RichTextEditor/extensions/FontSize.js +25 -25
  412. package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
  413. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +167 -176
  414. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  415. package/dist/components/pro/RichTextEditor/types.js +75 -75
  416. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  417. package/dist/contexts/AppContext.d.ts +1 -1
  418. package/dist/contexts/AppContext.js +216 -221
  419. package/dist/contexts/AppContext.js.map +1 -1
  420. package/dist/data-table.js +15 -41
  421. package/dist/data-table.js.map +1 -1
  422. package/dist/dishui.css +1 -1
  423. package/dist/flow.js +27 -83
  424. package/dist/hooks/useClickOutside.js +18 -18
  425. package/dist/hooks/useClickOutside.js.map +1 -1
  426. package/dist/hooks/useContainerElement.js +9 -9
  427. package/dist/hooks/useContainerElement.js.map +1 -1
  428. package/dist/hooks/useControllableState.js +33 -35
  429. package/dist/hooks/useControllableState.js.map +1 -1
  430. package/dist/hooks/useCopyToClipboard.js +16 -16
  431. package/dist/hooks/useCopyToClipboard.js.map +1 -1
  432. package/dist/hooks/useDebounce.js +14 -14
  433. package/dist/hooks/useDebounce.js.map +1 -1
  434. package/dist/hooks/useDraggable.js +50 -50
  435. package/dist/hooks/useDraggable.js.map +1 -1
  436. package/dist/hooks/useTableColumns.js +39 -41
  437. package/dist/hooks/useTableColumns.js.map +1 -1
  438. package/dist/hooks/useTableData.js +67 -68
  439. package/dist/hooks/useTableData.js.map +1 -1
  440. package/dist/index-nostyled.d.ts +8 -0
  441. package/dist/index.d.ts +31 -3
  442. package/dist/index.js +106 -241
  443. package/dist/layouts/MainLayout.js +56 -56
  444. package/dist/layouts/MainLayout.js.map +1 -1
  445. package/dist/layouts/Navbar.js +214 -214
  446. package/dist/layouts/Navbar.js.map +1 -1
  447. package/dist/layouts/Sidebar.js +184 -186
  448. package/dist/layouts/Sidebar.js.map +1 -1
  449. package/dist/layouts/headbar/Headbar.js +25 -25
  450. package/dist/layouts/headbar/Headbar.js.map +1 -1
  451. package/dist/layouts/headbar/HeadbarLangSwitcher.js +39 -39
  452. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  453. package/dist/layouts/headbar/HeadbarSearch.js +120 -120
  454. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  455. package/dist/layouts/headbar/HeadbarThemeSwitcher.js +27 -27
  456. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  457. package/dist/layouts/headbar/HeadbarTitle.js +26 -26
  458. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  459. package/dist/lite.js +9 -24
  460. package/dist/markdown.js +4 -9
  461. package/dist/pages/components/Calendar/index.d.ts +3 -0
  462. package/dist/pages/components/Calendar/index.en.d.ts +3 -0
  463. package/dist/pages/components/Calendar/index.zh.d.ts +3 -0
  464. package/dist/pages/components/Chat/index.d.ts +3 -0
  465. package/dist/pages/components/Chat/index.en.d.ts +3 -0
  466. package/dist/pages/components/Chat/index.zh.d.ts +3 -0
  467. package/dist/pages/components/FloatWindow/index.d.ts +3 -0
  468. package/dist/pages/components/FloatWindow/index.en.d.ts +3 -0
  469. package/dist/pages/components/FloatWindow/index.zh.d.ts +3 -0
  470. package/dist/pages/components/Gantt/index.d.ts +3 -0
  471. package/dist/pages/components/Gantt/index.en.d.ts +3 -0
  472. package/dist/pages/components/Gantt/index.zh.d.ts +3 -0
  473. package/dist/pages/components/GridLayout/index.d.ts +3 -0
  474. package/dist/pages/components/GridLayout/index.en.d.ts +3 -0
  475. package/dist/pages/components/GridLayout/index.zh.d.ts +3 -0
  476. package/dist/pages/components/Notification/index.d.ts +3 -0
  477. package/dist/pages/components/Notification/index.en.d.ts +3 -0
  478. package/dist/pages/components/Notification/index.zh.d.ts +3 -0
  479. package/dist/pages/components/Resizable/index.d.ts +3 -0
  480. package/dist/pages/components/Resizable/index.en.d.ts +3 -0
  481. package/dist/pages/components/Resizable/index.zh.d.ts +3 -0
  482. package/dist/pages/components/Tab/index.d.ts +3 -0
  483. package/dist/pages/components/Tab/index.en.d.ts +3 -0
  484. package/dist/pages/components/Tab/index.zh.d.ts +3 -0
  485. package/dist/styles/themeStyles.js +87 -86
  486. package/dist/styles/themeStyles.js.map +1 -1
  487. package/dist/utils/cn.d.ts +13 -0
  488. package/dist/utils/cn.js +16 -0
  489. package/dist/utils/cn.js.map +1 -0
  490. package/dist/utils/i18n.js +700 -602
  491. package/dist/utils/i18n.js.map +1 -1
  492. package/dist/utils/menu.js +94 -94
  493. package/dist/utils/menu.js.map +1 -1
  494. package/dist/utils/rehype-code-meta.js +14 -14
  495. package/dist/utils/rehype-code-meta.js.map +1 -1
  496. package/dist/utils/remark-code-meta.js +9 -9
  497. package/dist/utils/remark-code-meta.js.map +1 -1
  498. package/dist/utils/routerBuilder.js +59 -60
  499. package/dist/utils/routerBuilder.js.map +1 -1
  500. package/dist/utils/selection.js +28 -29
  501. package/dist/utils/selection.js.map +1 -1
  502. package/dist/utils/themes.js +275 -255
  503. package/dist/utils/themes.js.map +1 -1
  504. package/package.json +19 -6
  505. package/dist/components/StatCard/index.d.ts +0 -24
  506. package/dist/components/StatCard/index.js +0 -90
  507. package/dist/components/StatCard/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../../src/components/pro/DataTable/utils.ts"],"sourcesContent":["import React from 'react';\nimport { ColumnDef, Row, SortingFn, SortingFnOption } from './tanstack-table';\n\n/**\n * 列选项类型:在标准 v9 `ColumnDef` 基础上,额外兼容 v8 命名的 `sortingFn`\n * (会在 `createColumn` 内部归一化为 v9 的 `sortFn`)。\n */\nexport type ColumnOptions<T extends object> = Partial<ColumnDef<T>> & {\n /** @deprecated 请使用 v9 的 `sortFn`。为向后兼容保留,内部会归一化为 `sortFn`。 */\n sortingFn?: SortingFnOption<T> | SortingFn<T>;\n};\n\n/** 将 v8 命名的 `sortingFn` 归一化为 v9 的 `sortFn`。 */\nfunction normalizeColumn<T extends object>(col: ColumnOptions<T>): ColumnDef<T> {\n if (col && 'sortingFn' in col && col.sortingFn != null) {\n const { sortingFn, ...rest } = col as ColumnOptions<T> & { sortFn?: unknown };\n return { sortFn: sortingFn, ...rest } as ColumnDef<T>;\n }\n return col as ColumnDef<T>;\n}\n\n// 创建DataTable列的辅助函数\nexport function createColumn<T extends object>(\n accessorKeyOrOptions: keyof T | string | ColumnOptions<T>,\n headerOrNone?: string,\n options: ColumnOptions<T> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式:\n // 1. createColumn(accessorKey, header, options)\n // 2. createColumn({ accessorKey, header, ...options })\n if (typeof accessorKeyOrOptions === 'object') {\n // 使用对象形式的参数\n return normalizeColumn(accessorKeyOrOptions);\n } else {\n // 使用传统的参数形式\n return normalizeColumn({\n accessorKey: String(accessorKeyOrOptions),\n header: headerOrNone || String(accessorKeyOrOptions),\n ...options,\n });\n }\n}\n\n// 创建计算列的辅助函数\nexport function createComputedColumn<T extends object>(\n idOrOptions: string | Partial<ColumnDef<T>>,\n headerOrNone?: string,\n accessorFnOrNone?: (row: T) => any,\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式\n if (typeof idOrOptions === 'object') {\n // 使用对象形式的参数\n return idOrOptions as ColumnDef<T>;\n } else {\n // 使用传统的参数形式\n return {\n id: idOrOptions,\n header: headerOrNone || idOrOptions,\n accessorFn: accessorFnOrNone,\n ...options,\n };\n }\n}\n\n// 创建操作列的辅助函数\nexport function createActionColumn<T extends object>(\n idOrOptions: string | Partial<ColumnDef<T>>,\n headerOrNone?: string,\n cellOrNone?: (props: { row: Row<T> }) => React.ReactNode,\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式\n if (typeof idOrOptions === 'object') {\n // 使用对象形式的参数,并确保enableSorting默认为false\n return {\n enableSorting: false,\n ...idOrOptions as ColumnDef<T>\n };\n } else {\n // 使用传统的参数形式\n return {\n id: idOrOptions,\n header: headerOrNone || idOrOptions,\n cell: cellOrNone,\n enableSorting: false,\n ...options,\n };\n }\n}\n\n// 创建选择列的辅助函数\nexport function createSelectionColumn<T extends object>(\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n const defaults = {\n id: 'selection',\n header: ({ table }: any) => \n React.createElement('input', {\n type: \"checkbox\",\n checked: table.getIsAllRowsSelected(),\n onChange: table.getToggleAllRowsSelectedHandler(),\n className: \"checkbox checkbox-sm\"\n }),\n cell: ({ row }: any) => \n React.createElement('input', {\n type: \"checkbox\",\n checked: row.getIsSelected(),\n onChange: row.getToggleSelectedHandler(),\n className: \"checkbox checkbox-sm\",\n onClick: (e: React.MouseEvent) => e.stopPropagation()\n }),\n enableSorting: false,\n };\n\n // 强制类型转换为ColumnDef<T>,因为我们确保提供了必要的id属性\n return { ...defaults, ...options } as ColumnDef<T>;\n}\n\n// 数字排序函数,支持null和undefined\nexport const numericSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 尝试将字符串转换为数字\n const numA = typeof valueA === 'string' ? parseFloat(valueA) : Number(valueA);\n const numB = typeof valueB === 'string' ? parseFloat(valueB) : Number(valueB);\n \n if (Number.isNaN(numA) && Number.isNaN(numB)) return 0;\n if (Number.isNaN(numA)) return -1;\n if (Number.isNaN(numB)) return 1;\n \n return numA - numB;\n};\n\n// 日期排序函数,支持不同的日期格式\nexport const dateSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 将值转换为Date对象\n const dateA = valueA instanceof Date ? valueA : new Date(String(valueA));\n const dateB = valueB instanceof Date ? valueB : new Date(String(valueB));\n \n // 处理无效日期\n if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) return 0;\n if (isNaN(dateA.getTime())) return -1;\n if (isNaN(dateB.getTime())) return 1;\n \n return dateA.getTime() - dateB.getTime();\n};\n\n// 字符串排序函数,支持本地化比较和大小写不敏感\nexport const stringSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 转换为字符串并进行本地化比较\n const strA = String(valueA).toLowerCase();\n const strB = String(valueB).toLowerCase();\n \n return strA.localeCompare(strB);\n};\n\n// 定义树状数据行的接口,包含深度信息\nexport interface TreeDataRow {\n __depth?: number;\n __id?: string;\n __parentId?: string;\n __hasChildren?: boolean;\n __isExpanded?: boolean;\n __childCount?: number;\n [key: string]: any;\n}\n\n// 树状结构排序函数 - 只对最外层的父项数据进行排序\nexport const treeSort = <T extends TreeDataRow>(\n sortFn: SortingFn<T>,\n subDataKey: string\n): SortingFn<T> => {\n return (rowA, rowB, columnId) => {\n const valueA = rowA.original;\n const valueB = rowB.original;\n \n // 检查是否为子项\n const depthA = valueA.__depth !== undefined ? valueA.__depth : 0;\n const depthB = valueB.__depth !== undefined ? valueB.__depth : 0;\n \n // 如果两行深度不同,保持原来的顺序\n // 这意味着子项将总是跟随其父项\n if (depthA !== depthB) {\n return 0;\n }\n \n // 如果两行都是顶层(depth=0),使用传入的排序函数\n if (depthA === 0 && depthB === 0) {\n return sortFn(rowA, rowB, columnId);\n }\n \n // 对于相同深度的非顶层行,保持它们相对顺序不变\n return 0;\n };\n};\n\n// 将对象数组转换为SelectFilter的选项格式\nexport function createSelectOptions<T>(\n items: T[], \n labelField: keyof T, \n valueField: keyof T = labelField\n) {\n return items.map(item => ({\n label: String(item[labelField]),\n value: String(item[valueField]),\n }));\n}\n\n// 从数据中提取唯一值作为SelectFilter的选项\nexport function extractUniqueOptions<T>(\n data: T[], \n field: keyof T\n) {\n const uniqueValues = new Set<any>();\n \n data.forEach(item => {\n if (item[field] != null) {\n uniqueValues.add(item[field]);\n }\n });\n \n return Array.from(uniqueValues).map(value => ({\n label: String(value),\n value: String(value)\n }));\n}\n\n// 默认的列筛选函数\nexport const defaultFilterFunctions = {\n // 文本筛选\n text: (row: any, columnId: string, filterValue: string) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return String(value).toLowerCase().includes(filterValue.toLowerCase());\n },\n \n // 范围筛选\n range: (row: any, columnId: string, filterValue: [number | undefined, number | undefined]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n \n const numValue = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(numValue)) return false;\n \n const [min, max] = filterValue;\n if (min !== undefined && numValue < min) return false;\n if (max !== undefined && numValue > max) return false;\n \n return true;\n },\n \n // 日期范围筛选\n dateRange: (row: any, columnId: string, filterValue: [string | undefined, string | undefined]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n \n const dateValue = value instanceof Date ? value : new Date(value);\n if (isNaN(dateValue.getTime())) return false;\n \n const [startDate, endDate] = filterValue;\n \n if (startDate) {\n const start = new Date(startDate);\n start.setHours(0, 0, 0, 0);\n if (dateValue < start) return false;\n }\n \n if (endDate) {\n const end = new Date(endDate);\n end.setHours(23, 59, 59, 999);\n if (dateValue > end) return false;\n }\n \n return true;\n },\n \n // 布尔值筛选\n boolean: (row: any, columnId: string, filterValue: boolean) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return value === filterValue;\n },\n \n // 多选筛选\n multiSelect: (row: any, columnId: string, filterValue: string[]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return filterValue.includes(String(value));\n }\n};\n\nexport default {\n createColumn,\n createComputedColumn,\n createActionColumn,\n createSelectionColumn,\n numericSort,\n dateSort,\n stringSort,\n treeSort,\n createSelectOptions,\n extractUniqueOptions,\n defaultFilterFunctions\n}; "],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../../src/components/pro/DataTable/utils.ts"],"sourcesContent":["import React from 'react';\nimport { ColumnDef, Row, SortingFn, SortingFnOption } from './tanstack-table';\n\n/**\n * 列选项类型:在标准 v9 `ColumnDef` 基础上,额外兼容 v8 命名的 `sortingFn`\n * (会在 `createColumn` 内部归一化为 v9 的 `sortFn`)。\n */\nexport type ColumnOptions<T extends object> = Partial<ColumnDef<T>> & {\n /** @deprecated 请使用 v9 的 `sortFn`。为向后兼容保留,内部会归一化为 `sortFn`。 */\n sortingFn?: SortingFnOption<T> | SortingFn<T>;\n};\n\n/** 将 v8 命名的 `sortingFn` 归一化为 v9 的 `sortFn`。 */\nfunction normalizeColumn<T extends object>(col: ColumnOptions<T>): ColumnDef<T> {\n if (col && 'sortingFn' in col && col.sortingFn != null) {\n const { sortingFn, ...rest } = col as ColumnOptions<T> & { sortFn?: unknown };\n return { sortFn: sortingFn, ...rest } as ColumnDef<T>;\n }\n return col as ColumnDef<T>;\n}\n\n// 创建DataTable列的辅助函数\nexport function createColumn<T extends object>(\n accessorKeyOrOptions: keyof T | string | ColumnOptions<T>,\n headerOrNone?: string,\n options: ColumnOptions<T> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式:\n // 1. createColumn(accessorKey, header, options)\n // 2. createColumn({ accessorKey, header, ...options })\n if (typeof accessorKeyOrOptions === 'object') {\n // 使用对象形式的参数\n return normalizeColumn(accessorKeyOrOptions);\n } else {\n // 使用传统的参数形式\n return normalizeColumn({\n accessorKey: String(accessorKeyOrOptions),\n header: headerOrNone || String(accessorKeyOrOptions),\n ...options,\n });\n }\n}\n\n// 创建计算列的辅助函数\nexport function createComputedColumn<T extends object>(\n idOrOptions: string | Partial<ColumnDef<T>>,\n headerOrNone?: string,\n accessorFnOrNone?: (row: T) => any,\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式\n if (typeof idOrOptions === 'object') {\n // 使用对象形式的参数\n return idOrOptions as ColumnDef<T>;\n } else {\n // 使用传统的参数形式\n return {\n id: idOrOptions,\n header: headerOrNone || idOrOptions,\n accessorFn: accessorFnOrNone,\n ...options,\n };\n }\n}\n\n// 创建操作列的辅助函数\nexport function createActionColumn<T extends object>(\n idOrOptions: string | Partial<ColumnDef<T>>,\n headerOrNone?: string,\n cellOrNone?: (props: { row: Row<T> }) => React.ReactNode,\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式\n if (typeof idOrOptions === 'object') {\n // 使用对象形式的参数,并确保enableSorting默认为false\n return {\n enableSorting: false,\n ...idOrOptions as ColumnDef<T>\n };\n } else {\n // 使用传统的参数形式\n return {\n id: idOrOptions,\n header: headerOrNone || idOrOptions,\n cell: cellOrNone,\n enableSorting: false,\n ...options,\n };\n }\n}\n\n// 创建选择列的辅助函数\nexport function createSelectionColumn<T extends object>(\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n const defaults = {\n id: 'selection',\n header: ({ table }: any) => \n React.createElement('input', {\n type: \"checkbox\",\n checked: table.getIsAllRowsSelected(),\n onChange: table.getToggleAllRowsSelectedHandler(),\n className: \"checkbox checkbox-sm\"\n }),\n cell: ({ row }: any) => \n React.createElement('input', {\n type: \"checkbox\",\n checked: row.getIsSelected(),\n onChange: row.getToggleSelectedHandler(),\n className: \"checkbox checkbox-sm\",\n onClick: (e: React.MouseEvent) => e.stopPropagation()\n }),\n enableSorting: false,\n };\n\n // 强制类型转换为ColumnDef<T>,因为我们确保提供了必要的id属性\n return { ...defaults, ...options } as ColumnDef<T>;\n}\n\n// 数字排序函数,支持null和undefined\nexport const numericSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 尝试将字符串转换为数字\n const numA = typeof valueA === 'string' ? parseFloat(valueA) : Number(valueA);\n const numB = typeof valueB === 'string' ? parseFloat(valueB) : Number(valueB);\n \n if (Number.isNaN(numA) && Number.isNaN(numB)) return 0;\n if (Number.isNaN(numA)) return -1;\n if (Number.isNaN(numB)) return 1;\n \n return numA - numB;\n};\n\n// 日期排序函数,支持不同的日期格式\nexport const dateSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 将值转换为Date对象\n const dateA = valueA instanceof Date ? valueA : new Date(String(valueA));\n const dateB = valueB instanceof Date ? valueB : new Date(String(valueB));\n \n // 处理无效日期\n if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) return 0;\n if (isNaN(dateA.getTime())) return -1;\n if (isNaN(dateB.getTime())) return 1;\n \n return dateA.getTime() - dateB.getTime();\n};\n\n// 字符串排序函数,支持本地化比较和大小写不敏感\nexport const stringSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 转换为字符串并进行本地化比较\n const strA = String(valueA).toLowerCase();\n const strB = String(valueB).toLowerCase();\n \n return strA.localeCompare(strB);\n};\n\n// 定义树状数据行的接口,包含深度信息\nexport interface TreeDataRow {\n __depth?: number;\n __id?: string;\n __parentId?: string;\n __hasChildren?: boolean;\n __isExpanded?: boolean;\n __childCount?: number;\n [key: string]: any;\n}\n\n// 树状结构排序函数 - 只对最外层的父项数据进行排序\nexport const treeSort = <T extends TreeDataRow>(\n sortFn: SortingFn<T>,\n subDataKey: string\n): SortingFn<T> => {\n return (rowA, rowB, columnId) => {\n const valueA = rowA.original;\n const valueB = rowB.original;\n \n // 检查是否为子项\n const depthA = valueA.__depth !== undefined ? valueA.__depth : 0;\n const depthB = valueB.__depth !== undefined ? valueB.__depth : 0;\n \n // 如果两行深度不同,保持原来的顺序\n // 这意味着子项将总是跟随其父项\n if (depthA !== depthB) {\n return 0;\n }\n \n // 如果两行都是顶层(depth=0),使用传入的排序函数\n if (depthA === 0 && depthB === 0) {\n return sortFn(rowA, rowB, columnId);\n }\n \n // 对于相同深度的非顶层行,保持它们相对顺序不变\n return 0;\n };\n};\n\n// 将对象数组转换为SelectFilter的选项格式\nexport function createSelectOptions<T>(\n items: T[], \n labelField: keyof T, \n valueField: keyof T = labelField\n) {\n return items.map(item => ({\n label: String(item[labelField]),\n value: String(item[valueField]),\n }));\n}\n\n// 从数据中提取唯一值作为SelectFilter的选项\nexport function extractUniqueOptions<T>(\n data: T[], \n field: keyof T\n) {\n const uniqueValues = new Set<any>();\n \n data.forEach(item => {\n if (item[field] != null) {\n uniqueValues.add(item[field]);\n }\n });\n \n return Array.from(uniqueValues).map(value => ({\n label: String(value),\n value: String(value)\n }));\n}\n\n// 默认的列筛选函数\nexport const defaultFilterFunctions = {\n // 文本筛选\n text: (row: any, columnId: string, filterValue: string) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return String(value).toLowerCase().includes(filterValue.toLowerCase());\n },\n \n // 范围筛选\n range: (row: any, columnId: string, filterValue: [number | undefined, number | undefined]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n \n const numValue = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(numValue)) return false;\n \n const [min, max] = filterValue;\n if (min !== undefined && numValue < min) return false;\n if (max !== undefined && numValue > max) return false;\n \n return true;\n },\n \n // 日期范围筛选\n dateRange: (row: any, columnId: string, filterValue: [string | undefined, string | undefined]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n \n const dateValue = value instanceof Date ? value : new Date(value);\n if (isNaN(dateValue.getTime())) return false;\n \n const [startDate, endDate] = filterValue;\n \n if (startDate) {\n const start = new Date(startDate);\n start.setHours(0, 0, 0, 0);\n if (dateValue < start) return false;\n }\n \n if (endDate) {\n const end = new Date(endDate);\n end.setHours(23, 59, 59, 999);\n if (dateValue > end) return false;\n }\n \n return true;\n },\n \n // 布尔值筛选\n boolean: (row: any, columnId: string, filterValue: boolean) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return value === filterValue;\n },\n \n // 多选筛选\n multiSelect: (row: any, columnId: string, filterValue: string[]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return filterValue.includes(String(value));\n }\n};\n\nexport default {\n createColumn,\n createComputedColumn,\n createActionColumn,\n createSelectionColumn,\n numericSort,\n dateSort,\n stringSort,\n treeSort,\n createSelectOptions,\n extractUniqueOptions,\n defaultFilterFunctions\n}; "],"mappings":";;;;;;;;;;;;;;;;;AAaA,SAAS,EAAkC,GAAqC;CAC9E,IAAI,KAAO,eAAe,KAAO,EAAI,aAAa,MAAM;EACtD,IAAM,EAAE,cAAW,GAAG,MAAS;EAC/B,OAAO;GAAE,QAAQ;GAAW,GAAG;EAAK;CACtC;CACA,OAAO;AACT;AAGA,SAAgB,EACd,GACA,GACA,IAA4B,CAAC,GACf;CASZ,OAHO,EAFL,OAAO,KAAyB,WAEX,IAGA;EACrB,aAAa,OAAO,CAAoB;EACxC,QAAQ,KAAgB,OAAO,CAAoB;EACnD,GAAG;CACL,CAAC;AAEL;AAGA,SAAgB,EACd,GACA,GACA,GACA,IAAiC,CAAC,GACpB;CAOZ,OALE,OAAO,KAAgB,WAElB,IAGA;EACL,IAAI;EACJ,QAAQ,KAAgB;EACxB,YAAY;EACZ,GAAG;CACL;AAEJ;AAGA,SAAgB,EACd,GACA,GACA,GACA,IAAiC,CAAC,GACpB;CAUZ,OARE,OAAO,KAAgB,WAElB;EACL,eAAe;EACf,GAAG;CACL,IAGO;EACL,IAAI;EACJ,QAAQ,KAAgB;EACxB,MAAM;EACN,eAAe;EACf,GAAG;CACL;AAEJ;AAGA,SAAgB,EACd,IAAiC,CAAC,GACpB;CAsBd,OAAO;EApBL,IAAI;EACJ,SAAS,EAAE,eACT,EAAM,cAAc,SAAS;GAC3B,MAAM;GACN,SAAS,EAAM,qBAAqB;GACpC,UAAU,EAAM,gCAAgC;GAChD,WAAW;EACb,CAAC;EACH,OAAO,EAAE,aACP,EAAM,cAAc,SAAS;GAC3B,MAAM;GACN,SAAS,EAAI,cAAc;GAC3B,UAAU,EAAI,yBAAyB;GACvC,WAAW;GACX,UAAU,MAAwB,EAAE,gBAAgB;EACtD,CAAC;EACH,eAAe;EAIK,GAAG;CAAQ;AACnC;AAGA,IAAa,KAA+B,GAAM,GAAM,MAAa;CACnE,IAAM,IAAS,EAAK,SAAS,CAAQ,GAC/B,IAAS,EAAK,SAAS,CAAQ;CAGrC,IAAI,KAAU,QAAQ,KAAU,MAAM,OAAO;CAC7C,IAAI,KAAU,MAAM,OAAO;CAC3B,IAAI,KAAU,MAAM,OAAO;CAG3B,IAAM,IAAO,OAAO,KAAW,WAAW,WAAW,CAAM,IAAI,OAAO,CAAM,GACtE,IAAO,OAAO,KAAW,WAAW,WAAW,CAAM,IAAI,OAAO,CAAM;CAM5E,OAJI,OAAO,MAAM,CAAI,KAAK,OAAO,MAAM,CAAI,IAAU,IACjD,OAAO,MAAM,CAAI,IAAU,KAC3B,OAAO,MAAM,CAAI,IAAU,IAExB,IAAO;AAChB,GAGa,KAA4B,GAAM,GAAM,MAAa;CAChE,IAAM,IAAS,EAAK,SAAS,CAAQ,GAC/B,IAAS,EAAK,SAAS,CAAQ;CAGrC,IAAI,KAAU,QAAQ,KAAU,MAAM,OAAO;CAC7C,IAAI,KAAU,MAAM,OAAO;CAC3B,IAAI,KAAU,MAAM,OAAO;CAG3B,IAAM,IAAQ,aAAkB,OAAO,IAAS,IAAI,KAAK,OAAO,CAAM,CAAC,GACjE,IAAQ,aAAkB,OAAO,IAAS,IAAI,KAAK,OAAO,CAAM,CAAC;CAOvE,OAJI,MAAM,EAAM,QAAQ,CAAC,KAAK,MAAM,EAAM,QAAQ,CAAC,IAAU,IACzD,MAAM,EAAM,QAAQ,CAAC,IAAU,KAC/B,MAAM,EAAM,QAAQ,CAAC,IAAU,IAE5B,EAAM,QAAQ,IAAI,EAAM,QAAQ;AACzC,GAGa,KAA8B,GAAM,GAAM,MAAa;CAClE,IAAM,IAAS,EAAK,SAAS,CAAQ,GAC/B,IAAS,EAAK,SAAS,CAAQ;CAGrC,IAAI,KAAU,QAAQ,KAAU,MAAM,OAAO;CAC7C,IAAI,KAAU,MAAM,OAAO;CAC3B,IAAI,KAAU,MAAM,OAAO;CAG3B,IAAM,IAAO,OAAO,CAAM,CAAC,CAAC,YAAY,GAClC,IAAO,OAAO,CAAM,CAAC,CAAC,YAAY;CAExC,OAAO,EAAK,cAAc,CAAI;AAChC,GAca,KACX,GACA,OAEQ,GAAM,GAAM,MAAa;CAC/B,IAAM,IAAS,EAAK,UACd,IAAS,EAAK,UAGd,IAAS,EAAO,YAAY,KAAA,IAA6B,IAAjB,EAAO,SAC/C,IAAS,EAAO,YAAY,KAAA,IAA6B,IAAjB,EAAO;CAcrD,OAVI,MAAW,KAKX,MAAW,KAAK,MAAW,IACtB,EAAO,GAAM,GAAM,CAAQ,IAI7B;AACT;AAIF,SAAgB,EACd,GACA,GACA,IAAsB,GACtB;CACA,OAAO,EAAM,KAAI,OAAS;EACxB,OAAO,OAAO,EAAK,EAAW;EAC9B,OAAO,OAAO,EAAK,EAAW;CAChC,EAAE;AACJ;AAGA,SAAgB,EACd,GACA,GACA;CACA,IAAM,oBAAe,IAAI,IAAS;CAQlC,OANA,EAAK,SAAQ,MAAQ;EACnB,AAAI,EAAK,MAAU,QACjB,EAAa,IAAI,EAAK,EAAM;CAEhC,CAAC,GAEM,MAAM,KAAK,CAAY,CAAC,CAAC,KAAI,OAAU;EAC5C,OAAO,OAAO,CAAK;EACnB,OAAO,OAAO,CAAK;CACrB,EAAE;AACJ;AAGA,IAAa,IAAyB;CAEpC,OAAO,GAAU,GAAkB,MAAwB;EACzD,IAAM,IAAQ,EAAI,SAAS,CAAQ;EAEnC,OADI,KAAS,QACN,OAAO,CAAK,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,EAAY,YAAY,CAAC;CACvE;CAGA,QAAQ,GAAU,GAAkB,MAA0D;EAC5F,IAAM,IAAQ,EAAI,SAAS,CAAQ;EACnC,IAAI,KAAS,MAAM,OAAO;EAE1B,IAAM,IAAW,OAAO,KAAU,WAAW,WAAW,CAAK,IAAI;EACjE,IAAI,MAAM,CAAQ,GAAG,OAAO;EAE5B,IAAM,CAAC,GAAK,KAAO;EAInB,OAFA,EADI,MAAQ,KAAA,KAAa,IAAW,KAChC,MAAQ,KAAA,KAAa,IAAW;CAGtC;CAGA,YAAY,GAAU,GAAkB,MAA0D;EAChG,IAAM,IAAQ,EAAI,SAAS,CAAQ;EACnC,IAAI,KAAS,MAAM,OAAO;EAE1B,IAAM,IAAY,aAAiB,OAAO,IAAQ,IAAI,KAAK,CAAK;EAChE,IAAI,MAAM,EAAU,QAAQ,CAAC,GAAG,OAAO;EAEvC,IAAM,CAAC,GAAW,KAAW;EAE7B,IAAI,GAAW;GACb,IAAM,IAAQ,IAAI,KAAK,CAAS;GAEhC,IADA,EAAM,SAAS,GAAG,GAAG,GAAG,CAAC,GACrB,IAAY,GAAO,OAAO;EAChC;EAEA,IAAI,GAAS;GACX,IAAM,IAAM,IAAI,KAAK,CAAO;GAE5B,IADA,EAAI,SAAS,IAAI,IAAI,IAAI,GAAG,GACxB,IAAY,GAAK,OAAO;EAC9B;EAEA,OAAO;CACT;CAGA,UAAU,GAAU,GAAkB,MAAyB;EAC7D,IAAM,IAAQ,EAAI,SAAS,CAAQ;EAEnC,OADI,KAAS,QACN,MAAU;CACnB;CAGA,cAAc,GAAU,GAAkB,MAA0B;EAClE,IAAM,IAAQ,EAAI,SAAS,CAAQ;EAEnC,OADI,KAAS,QACN,EAAY,SAAS,OAAO,CAAK,CAAC;CAC3C;AACF,GAEA,IAAe;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -1,185 +1,185 @@
1
- import { useClickOutside as L } from "../../../hooks/useClickOutside.js";
2
- import S from "../../Tree/Tree.js";
3
- import B, { useCallback as y, useEffect as j, useRef as R, useState as k } from "react";
4
- import { jsx as e, jsxs as w } from "react/jsx-runtime";
5
- var z = { root: "Root" }, D = () => /* @__PURE__ */ e("svg", {
6
- xmlns: "http://www.w3.org/2000/svg",
7
- className: "h-4 w-4",
8
- fill: "none",
9
- viewBox: "0 0 24 24",
10
- stroke: "currentColor",
11
- strokeWidth: 2,
12
- children: /* @__PURE__ */ e("path", {
13
- strokeLinecap: "round",
14
- strokeLinejoin: "round",
15
- d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
16
- })
17
- }), C = () => /* @__PURE__ */ e("svg", {
18
- xmlns: "http://www.w3.org/2000/svg",
19
- className: "h-3 w-3",
20
- fill: "none",
21
- viewBox: "0 0 24 24",
22
- stroke: "currentColor",
23
- strokeWidth: 2,
24
- children: /* @__PURE__ */ e("path", {
25
- strokeLinecap: "round",
26
- strokeLinejoin: "round",
27
- d: "M9 5l7 7-7 7"
28
- })
29
- }), H = () => /* @__PURE__ */ e("svg", {
30
- xmlns: "http://www.w3.org/2000/svg",
31
- className: "h-4 w-4 text-blue-500 opacity-80",
32
- viewBox: "0 0 20 20",
33
- fill: "currentColor",
34
- children: /* @__PURE__ */ e("path", { d: "M2 6a2 2 0 012-2h4l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6z" })
35
- }), M = () => /* @__PURE__ */ e("svg", {
36
- xmlns: "http://www.w3.org/2000/svg",
37
- className: "h-4 w-4 text-gray-500 opacity-80",
38
- viewBox: "0 0 20 20",
39
- fill: "currentColor",
40
- children: /* @__PURE__ */ e("path", {
41
- fillRule: "evenodd",
42
- d: "M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z",
43
- clipRule: "evenodd"
44
- })
45
- }), P = ({ path: i, adapter: r, onNavigate: l }) => {
46
- const [t, c] = k([]), [d, o] = k(!1), s = y(async (a) => {
47
- try {
48
- return (await r.list(a)).sort((n, m) => n.type !== m.type ? n.type === "folder" ? -1 : 1 : String(n.name).localeCompare(String(m.name))).map((n) => ({
49
- id: n.path,
50
- label: n.name,
51
- icon: n.type === "folder" ? /* @__PURE__ */ e(H, {}) : /* @__PURE__ */ e(M, {}),
52
- meta: { type: n.type },
53
- children: n.type === "folder" ? [{
54
- id: `${n.path}/_dummy`,
55
- label: "Loading..."
56
- }] : void 0
57
- }));
58
- } catch {
59
- return [];
60
- }
61
- }, [r]);
62
- j(() => {
63
- let a = !0;
64
- return o(!0), s(i).then((n) => {
65
- a && (c(n), o(!1));
66
- }), () => {
67
- a = !1;
68
- };
69
- }, [i, s]);
70
- const v = y(async (a, n) => {
71
- if (!n) return;
72
- const m = String(a), N = (g, f) => {
73
- for (const h of g) {
74
- if (h.id === f) return h;
75
- if (h.children) {
76
- const x = N(h.children, f);
77
- if (x) return x;
78
- }
79
- }
80
- return null;
81
- }, b = N(t, m);
82
- if (b && b.children?.length === 1 && String(b.children[0].id).endsWith("_dummy")) {
83
- const g = await s(m);
84
- c((f) => {
85
- const h = (x) => x.map((p) => p.id === m ? {
86
- ...p,
87
- children: g
88
- } : p.children ? {
89
- ...p,
90
- children: h(p.children)
91
- } : p);
92
- return h(f);
93
- });
94
- }
95
- }, [t, s]), u = y((a) => {
96
- String(a.id).endsWith("_dummy") || a.meta?.type !== "file" && l(String(a.id));
97
- }, [l]);
98
- return d ? /* @__PURE__ */ e("div", {
99
- className: "px-4 py-3 w-48 text-center text-xs opacity-50",
100
- children: "Loading..."
101
- }) : t.length === 0 ? /* @__PURE__ */ e("div", {
102
- className: "px-4 py-3 w-48 text-center text-xs opacity-50",
103
- children: "Empty Folder"
104
- }) : /* @__PURE__ */ e("div", {
105
- className: "p-1 w-64 max-h-[300px] overflow-y-auto sm:min-w-[200px] max-w-[80vw]",
106
- children: /* @__PURE__ */ e(S, {
107
- data: t,
108
- onNodeClick: u,
109
- onNodeToggle: v,
110
- showSearch: !1,
111
- showExpandAll: !1,
112
- showLine: !1,
113
- showIcon: !0,
114
- showCount: !1,
115
- className: "!bg-transparent !border-none !p-1 shadow-none overflow-visible",
116
- indent: 12
117
- })
118
- });
119
- }, T = ({ path: i, adapter: r, onNavigate: l }) => {
120
- const [t, c] = k(!1), d = R(null);
121
- return L(d, () => c(!1), t), /* @__PURE__ */ w("div", {
122
- className: "relative flex items-center",
123
- ref: d,
124
- children: [r ? /* @__PURE__ */ e("button", {
125
- className: `btn btn-ghost btn-xs px-0.5 mx-0.5 min-h-0 h-5 rounded hover:bg-base-200 transition-colors ${t ? "bg-base-200" : "opacity-50"}`,
126
- onClick: (o) => {
127
- o.stopPropagation(), c(!t);
128
- },
129
- children: /* @__PURE__ */ e(C, {})
130
- }) : /* @__PURE__ */ e("span", {
131
- className: "opacity-40 mx-1",
132
- children: /* @__PURE__ */ e(C, {})
133
- }), t && r && /* @__PURE__ */ e("div", {
134
- className: "absolute top-full left-1/2 -translate-x-1/2 mt-1 bg-base-100 shadow-2xl border border-base-200 rounded-xl z-[9999]",
135
- onClick: (o) => o.stopPropagation(),
136
- children: /* @__PURE__ */ e(P, {
137
- path: i,
138
- adapter: r,
139
- onNavigate: (o) => {
140
- l(o), c(!1);
141
- }
142
- })
143
- })]
144
- });
1
+ import { useClickOutside as e } from "../../../hooks/useClickOutside.js";
2
+ import t from "../../Tree/Tree.js";
3
+ import n, { useCallback as r, useEffect as i, useRef as a, useState as o } from "react";
4
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
+ //#region src/components/pro/FileExplorer/Breadcrumb.tsx
6
+ var l = { root: "Root" }, u = () => /* @__PURE__ */ s("svg", {
7
+ xmlns: "http://www.w3.org/2000/svg",
8
+ className: "h-4 w-4",
9
+ fill: "none",
10
+ viewBox: "0 0 24 24",
11
+ stroke: "currentColor",
12
+ strokeWidth: 2,
13
+ children: /* @__PURE__ */ s("path", {
14
+ strokeLinecap: "round",
15
+ strokeLinejoin: "round",
16
+ d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
17
+ })
18
+ }), d = () => /* @__PURE__ */ s("svg", {
19
+ xmlns: "http://www.w3.org/2000/svg",
20
+ className: "h-3 w-3",
21
+ fill: "none",
22
+ viewBox: "0 0 24 24",
23
+ stroke: "currentColor",
24
+ strokeWidth: 2,
25
+ children: /* @__PURE__ */ s("path", {
26
+ strokeLinecap: "round",
27
+ strokeLinejoin: "round",
28
+ d: "M9 5l7 7-7 7"
29
+ })
30
+ }), f = () => /* @__PURE__ */ s("svg", {
31
+ xmlns: "http://www.w3.org/2000/svg",
32
+ className: "h-4 w-4 text-blue-500 opacity-80",
33
+ viewBox: "0 0 20 20",
34
+ fill: "currentColor",
35
+ children: /* @__PURE__ */ s("path", { d: "M2 6a2 2 0 012-2h4l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6z" })
36
+ }), p = () => /* @__PURE__ */ s("svg", {
37
+ xmlns: "http://www.w3.org/2000/svg",
38
+ className: "h-4 w-4 text-gray-500 opacity-80",
39
+ viewBox: "0 0 20 20",
40
+ fill: "currentColor",
41
+ children: /* @__PURE__ */ s("path", {
42
+ fillRule: "evenodd",
43
+ d: "M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z",
44
+ clipRule: "evenodd"
45
+ })
46
+ }), m = ({ path: e, adapter: n, onNavigate: a }) => {
47
+ let [c, l] = o([]), [u, d] = o(!1), m = r(async (e) => {
48
+ try {
49
+ return (await n.list(e)).sort((e, t) => e.type === t.type ? String(e.name).localeCompare(String(t.name)) : e.type === "folder" ? -1 : 1).map((e) => ({
50
+ id: e.path,
51
+ label: e.name,
52
+ icon: e.type === "folder" ? /* @__PURE__ */ s(f, {}) : /* @__PURE__ */ s(p, {}),
53
+ meta: { type: e.type },
54
+ children: e.type === "folder" ? [{
55
+ id: `${e.path}/_dummy`,
56
+ label: "Loading..."
57
+ }] : void 0
58
+ }));
59
+ } catch {
60
+ return [];
61
+ }
62
+ }, [n]);
63
+ i(() => {
64
+ let t = !0;
65
+ return d(!0), m(e).then((e) => {
66
+ t && (l(e), d(!1));
67
+ }), () => {
68
+ t = !1;
69
+ };
70
+ }, [e, m]);
71
+ let h = r(async (e, t) => {
72
+ if (!t) return;
73
+ let n = String(e), r = (e, t) => {
74
+ for (let n of e) {
75
+ if (n.id === t) return n;
76
+ if (n.children) {
77
+ let e = r(n.children, t);
78
+ if (e) return e;
79
+ }
80
+ }
81
+ return null;
82
+ }, i = r(c, n);
83
+ if (i && i.children?.length === 1 && String(i.children[0].id).endsWith("_dummy")) {
84
+ let e = await m(n);
85
+ l((t) => {
86
+ let r = (t) => t.map((t) => t.id === n ? {
87
+ ...t,
88
+ children: e
89
+ } : t.children ? {
90
+ ...t,
91
+ children: r(t.children)
92
+ } : t);
93
+ return r(t);
94
+ });
95
+ }
96
+ }, [c, m]), g = r((e) => {
97
+ String(e.id).endsWith("_dummy") || e.meta?.type !== "file" && a(String(e.id));
98
+ }, [a]);
99
+ return u ? /* @__PURE__ */ s("div", {
100
+ className: "px-4 py-3 w-48 text-center text-xs opacity-50",
101
+ children: "Loading..."
102
+ }) : c.length === 0 ? /* @__PURE__ */ s("div", {
103
+ className: "px-4 py-3 w-48 text-center text-xs opacity-50",
104
+ children: "Empty Folder"
105
+ }) : /* @__PURE__ */ s("div", {
106
+ className: "p-1 w-64 max-h-[300px] overflow-y-auto sm:min-w-[200px] max-w-[80vw]",
107
+ children: /* @__PURE__ */ s(t, {
108
+ data: c,
109
+ onNodeClick: g,
110
+ onNodeToggle: h,
111
+ showSearch: !1,
112
+ showExpandAll: !1,
113
+ showLine: !1,
114
+ showIcon: !0,
115
+ showCount: !1,
116
+ className: "!bg-transparent !border-none !p-1 shadow-none overflow-visible",
117
+ indent: 12
118
+ })
119
+ });
120
+ }, h = ({ path: t, adapter: n, onNavigate: r }) => {
121
+ let [i, l] = o(!1), u = a(null);
122
+ return e(u, () => l(!1), i), /* @__PURE__ */ c("div", {
123
+ className: "relative flex items-center",
124
+ ref: u,
125
+ children: [n ? /* @__PURE__ */ s("button", {
126
+ className: `btn btn-ghost btn-xs px-0.5 mx-0.5 min-h-0 h-5 rounded hover:bg-base-200 transition-colors ${i ? "bg-base-200" : "opacity-50"}`,
127
+ onClick: (e) => {
128
+ e.stopPropagation(), l(!i);
129
+ },
130
+ children: /* @__PURE__ */ s(d, {})
131
+ }) : /* @__PURE__ */ s("span", {
132
+ className: "opacity-40 mx-1",
133
+ children: /* @__PURE__ */ s(d, {})
134
+ }), i && n && /* @__PURE__ */ s("div", {
135
+ className: "absolute top-full left-1/2 -translate-x-1/2 mt-1 bg-base-100 shadow-2xl border border-base-200 rounded-xl z-[9999]",
136
+ onClick: (e) => e.stopPropagation(),
137
+ children: /* @__PURE__ */ s(m, {
138
+ path: t,
139
+ adapter: n,
140
+ onNavigate: (e) => {
141
+ r(e), l(!1);
142
+ }
143
+ })
144
+ })]
145
+ });
145
146
  };
146
- function I(i) {
147
- const r = i.split("/").filter(Boolean), l = [];
148
- for (let t = 0; t < r.length; t++) l.push({
149
- label: r[t],
150
- path: "/" + r.slice(0, t + 1).join("/"),
151
- basePath: t === 0 ? "/" : "/" + r.slice(0, t).join("/")
152
- });
153
- return l;
147
+ function g(e) {
148
+ let t = e.split("/").filter(Boolean), n = [];
149
+ for (let e = 0; e < t.length; e++) n.push({
150
+ label: t[e],
151
+ path: "/" + t.slice(0, e + 1).join("/"),
152
+ basePath: e === 0 ? "/" : "/" + t.slice(0, e).join("/")
153
+ });
154
+ return n;
154
155
  }
155
- var F = ({ path: i, labels: r, adapter: l, onNavigate: t }) => {
156
- const c = {
157
- ...z,
158
- ...r
159
- }, d = I(i), o = d.length === 0;
160
- return /* @__PURE__ */ w("nav", {
161
- className: "flex items-center text-sm overflow-x-visible py-2 px-1 gap-0.5 min-h-[36px]",
162
- children: [/* @__PURE__ */ w("button", {
163
- className: `btn btn-ghost btn-xs gap-1 flex-shrink-0 ${o ? "font-semibold" : ""}`,
164
- onClick: () => t("/"),
165
- children: [/* @__PURE__ */ e(D, {}), c.root]
166
- }), d.map((s, v) => {
167
- const u = v === d.length - 1;
168
- return /* @__PURE__ */ w(B.Fragment, { children: [/* @__PURE__ */ e(T, {
169
- path: s.basePath,
170
- adapter: l,
171
- onNavigate: t
172
- }), /* @__PURE__ */ e("button", {
173
- className: `btn btn-ghost btn-xs flex-shrink-0 truncate max-w-[160px] ${u ? "font-semibold" : ""}`,
174
- onClick: () => t(s.path),
175
- disabled: u,
176
- children: s.label
177
- })] }, s.path);
178
- })]
179
- });
180
- };
181
- export {
182
- F as Breadcrumb
156
+ var _ = ({ path: e, labels: t, adapter: r, onNavigate: i }) => {
157
+ let a = {
158
+ ...l,
159
+ ...t
160
+ }, o = g(e), d = o.length === 0;
161
+ return /* @__PURE__ */ c("nav", {
162
+ className: "flex items-center text-sm overflow-x-visible py-2 px-1 gap-0.5 min-h-[36px]",
163
+ children: [/* @__PURE__ */ c("button", {
164
+ className: `btn btn-ghost btn-xs gap-1 flex-shrink-0 ${d ? "font-semibold" : ""}`,
165
+ onClick: () => i("/"),
166
+ children: [/* @__PURE__ */ s(u, {}), a.root]
167
+ }), o.map((e, t) => {
168
+ let a = t === o.length - 1;
169
+ return /* @__PURE__ */ c(n.Fragment, { children: [/* @__PURE__ */ s(h, {
170
+ path: e.basePath,
171
+ adapter: r,
172
+ onNavigate: i
173
+ }), /* @__PURE__ */ s("button", {
174
+ className: `btn btn-ghost btn-xs flex-shrink-0 truncate max-w-[160px] ${a ? "font-semibold" : ""}`,
175
+ onClick: () => i(e.path),
176
+ disabled: a,
177
+ children: e.label
178
+ })] }, e.path);
179
+ })]
180
+ });
183
181
  };
182
+ //#endregion
183
+ export { _ as Breadcrumb };
184
184
 
185
185
  //# sourceMappingURL=Breadcrumb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/Breadcrumb.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { BreadcrumbProps } from './types';\nimport { useClickOutside } from '../../../hooks/useClickOutside';\nimport { Tree, TreeNode } from '../../Tree';\n\nconst defaultLabels = {\n root: 'Root',\n};\n\nconst HomeIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst FolderIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 text-blue-500 opacity-80\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M2 6a2 2 0 012-2h4l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6z\" />\n </svg>\n);\n\nconst DocumentIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 text-gray-500 opacity-80\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst BreadcrumbDropTree: React.FC<{\n path: string;\n adapter: any;\n onNavigate: (path: string) => void;\n}> = ({ path, adapter, onNavigate }) => {\n const [treeData, setTreeData] = useState<TreeNode[]>([]);\n const [loading, setLoading] = useState(false);\n\n const loadPath = useCallback(async (dirPath: string): Promise<TreeNode[]> => {\n try {\n const entries = await adapter.list(dirPath);\n return entries\n .sort((a: any, b: any) => {\n if (a.type !== b.type) return a.type === 'folder' ? -1 : 1;\n return String(a.name).localeCompare(String(b.name));\n })\n .map((e: any) => ({\n id: e.path,\n label: e.name,\n icon: e.type === 'folder' ? <FolderIcon /> : <DocumentIcon />,\n meta: { type: e.type },\n children: e.type === 'folder' ? [{ id: `${e.path}/_dummy`, label: 'Loading...' }] : undefined\n }));\n } catch (e) {\n return [];\n }\n }, [adapter]);\n\n useEffect(() => {\n let mounted = true;\n setLoading(true);\n loadPath(path).then(nodes => {\n if (mounted) {\n setTreeData(nodes);\n setLoading(false);\n }\n });\n return () => { mounted = false; };\n }, [path, loadPath]);\n\n const handleToggle = useCallback(async (nodeId: string | number, expanded: boolean) => {\n if (!expanded) return;\n const idStr = String(nodeId);\n\n const findNode = (nodes: TreeNode[], targetId: string): TreeNode | null => {\n for (const n of nodes) {\n if (n.id === targetId) return n;\n if (n.children) {\n const found = findNode(n.children, targetId);\n if (found) return found;\n }\n }\n return null;\n };\n\n const node = findNode(treeData, idStr);\n if (node && node.children?.length === 1 && String(node.children[0].id).endsWith('_dummy')) {\n const childrenNodes = await loadPath(idStr);\n setTreeData(prev => {\n const updateNodes = (nodes: TreeNode[]): TreeNode[] => {\n return nodes.map(n => {\n if (n.id === idStr) {\n return { ...n, children: childrenNodes };\n }\n if (n.children) return { ...n, children: updateNodes(n.children) };\n return n;\n });\n };\n return updateNodes(prev);\n });\n }\n }, [treeData, loadPath]);\n\n const handleClick = useCallback((node: TreeNode) => {\n if (String(node.id).endsWith('_dummy')) return;\n if (node.meta?.type === 'file') return;\n onNavigate(String(node.id));\n }, [onNavigate]);\n\n if (loading) return <div className=\"px-4 py-3 w-48 text-center text-xs opacity-50\">Loading...</div>;\n if (treeData.length === 0) return <div className=\"px-4 py-3 w-48 text-center text-xs opacity-50\">Empty Folder</div>;\n\n return (\n <div className=\"p-1 w-64 max-h-[300px] overflow-y-auto sm:min-w-[200px] max-w-[80vw]\">\n <Tree\n data={treeData}\n onNodeClick={handleClick}\n onNodeToggle={handleToggle}\n showSearch={false}\n showExpandAll={false}\n showLine={false}\n showIcon={true}\n showCount={false}\n className=\"!bg-transparent !border-none !p-1 shadow-none overflow-visible\"\n indent={12}\n />\n </div>\n );\n};\n\nconst ChevronDrop: React.FC<{\n path: string;\n adapter?: any;\n onNavigate: (p: string) => void;\n}> = ({ path, adapter, onNavigate }) => {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useClickOutside(ref, () => setOpen(false), open);\n\n return (\n <div className=\"relative flex items-center\" ref={ref}>\n {adapter ? (\n <button\n className={`btn btn-ghost btn-xs px-0.5 mx-0.5 min-h-0 h-5 rounded hover:bg-base-200 transition-colors ${open ? 'bg-base-200' : 'opacity-50'}`}\n onClick={(e) => {\n e.stopPropagation();\n setOpen(!open);\n }}\n >\n <ChevronIcon />\n </button>\n ) : (\n <span className=\"opacity-40 mx-1\"><ChevronIcon /></span>\n )}\n\n {open && adapter && (\n <div\n className=\"absolute top-full left-1/2 -translate-x-1/2 mt-1 bg-base-100 shadow-2xl border border-base-200 rounded-xl z-[9999]\"\n onClick={(e) => e.stopPropagation()}\n >\n <BreadcrumbDropTree\n path={path}\n adapter={adapter}\n onNavigate={(p) => {\n onNavigate(p);\n setOpen(false);\n }}\n />\n </div>\n )}\n </div>\n );\n};\n\n/** Split a path like \"/a/b/c\" into breadcrumb segments */\nfunction pathSegments(path: string): { label: string; path: string; basePath: string }[] {\n const parts = path.split('/').filter(Boolean);\n const segments: { label: string; path: string; basePath: string }[] = [];\n for (let i = 0; i < parts.length; i++) {\n segments.push({\n label: parts[i],\n path: '/' + parts.slice(0, i + 1).join('/'),\n basePath: i === 0 ? '/' : '/' + parts.slice(0, i).join('/')\n });\n }\n return segments;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n path,\n labels: userLabels,\n adapter,\n onNavigate,\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n const segments = pathSegments(path);\n const isRoot = segments.length === 0;\n\n return (\n <nav className=\"flex items-center text-sm overflow-x-visible py-2 px-1 gap-0.5 min-h-[36px]\">\n <button\n className={`btn btn-ghost btn-xs gap-1 flex-shrink-0 ${isRoot ? 'font-semibold' : ''}`}\n onClick={() => onNavigate('/')}\n >\n <HomeIcon />\n {labels.root}\n </button>\n\n {segments.map((seg, idx) => {\n const isLast = idx === segments.length - 1;\n return (\n <React.Fragment key={seg.path}>\n <ChevronDrop path={seg.basePath} adapter={adapter} onNavigate={onNavigate} />\n <button\n className={`btn btn-ghost btn-xs flex-shrink-0 truncate max-w-[160px] ${isLast ? 'font-semibold' : ''}`}\n onClick={() => onNavigate(seg.path)}\n disabled={isLast}\n >\n {seg.label}\n </button>\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Breadcrumb.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/Breadcrumb.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { BreadcrumbProps } from './types';\nimport { useClickOutside } from '../../../hooks/useClickOutside';\nimport { Tree, TreeNode } from '../../Tree';\n\nconst defaultLabels = {\n root: 'Root',\n};\n\nconst HomeIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst FolderIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 text-blue-500 opacity-80\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M2 6a2 2 0 012-2h4l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6z\" />\n </svg>\n);\n\nconst DocumentIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 text-gray-500 opacity-80\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst BreadcrumbDropTree: React.FC<{\n path: string;\n adapter: any;\n onNavigate: (path: string) => void;\n}> = ({ path, adapter, onNavigate }) => {\n const [treeData, setTreeData] = useState<TreeNode[]>([]);\n const [loading, setLoading] = useState(false);\n\n const loadPath = useCallback(async (dirPath: string): Promise<TreeNode[]> => {\n try {\n const entries = await adapter.list(dirPath);\n return entries\n .sort((a: any, b: any) => {\n if (a.type !== b.type) return a.type === 'folder' ? -1 : 1;\n return String(a.name).localeCompare(String(b.name));\n })\n .map((e: any) => ({\n id: e.path,\n label: e.name,\n icon: e.type === 'folder' ? <FolderIcon /> : <DocumentIcon />,\n meta: { type: e.type },\n children: e.type === 'folder' ? [{ id: `${e.path}/_dummy`, label: 'Loading...' }] : undefined\n }));\n } catch (e) {\n return [];\n }\n }, [adapter]);\n\n useEffect(() => {\n let mounted = true;\n setLoading(true);\n loadPath(path).then(nodes => {\n if (mounted) {\n setTreeData(nodes);\n setLoading(false);\n }\n });\n return () => { mounted = false; };\n }, [path, loadPath]);\n\n const handleToggle = useCallback(async (nodeId: string | number, expanded: boolean) => {\n if (!expanded) return;\n const idStr = String(nodeId);\n\n const findNode = (nodes: TreeNode[], targetId: string): TreeNode | null => {\n for (const n of nodes) {\n if (n.id === targetId) return n;\n if (n.children) {\n const found = findNode(n.children, targetId);\n if (found) return found;\n }\n }\n return null;\n };\n\n const node = findNode(treeData, idStr);\n if (node && node.children?.length === 1 && String(node.children[0].id).endsWith('_dummy')) {\n const childrenNodes = await loadPath(idStr);\n setTreeData(prev => {\n const updateNodes = (nodes: TreeNode[]): TreeNode[] => {\n return nodes.map(n => {\n if (n.id === idStr) {\n return { ...n, children: childrenNodes };\n }\n if (n.children) return { ...n, children: updateNodes(n.children) };\n return n;\n });\n };\n return updateNodes(prev);\n });\n }\n }, [treeData, loadPath]);\n\n const handleClick = useCallback((node: TreeNode) => {\n if (String(node.id).endsWith('_dummy')) return;\n if (node.meta?.type === 'file') return;\n onNavigate(String(node.id));\n }, [onNavigate]);\n\n if (loading) return <div className=\"px-4 py-3 w-48 text-center text-xs opacity-50\">Loading...</div>;\n if (treeData.length === 0) return <div className=\"px-4 py-3 w-48 text-center text-xs opacity-50\">Empty Folder</div>;\n\n return (\n <div className=\"p-1 w-64 max-h-[300px] overflow-y-auto sm:min-w-[200px] max-w-[80vw]\">\n <Tree\n data={treeData}\n onNodeClick={handleClick}\n onNodeToggle={handleToggle}\n showSearch={false}\n showExpandAll={false}\n showLine={false}\n showIcon={true}\n showCount={false}\n className=\"!bg-transparent !border-none !p-1 shadow-none overflow-visible\"\n indent={12}\n />\n </div>\n );\n};\n\nconst ChevronDrop: React.FC<{\n path: string;\n adapter?: any;\n onNavigate: (p: string) => void;\n}> = ({ path, adapter, onNavigate }) => {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useClickOutside(ref, () => setOpen(false), open);\n\n return (\n <div className=\"relative flex items-center\" ref={ref}>\n {adapter ? (\n <button\n className={`btn btn-ghost btn-xs px-0.5 mx-0.5 min-h-0 h-5 rounded hover:bg-base-200 transition-colors ${open ? 'bg-base-200' : 'opacity-50'}`}\n onClick={(e) => {\n e.stopPropagation();\n setOpen(!open);\n }}\n >\n <ChevronIcon />\n </button>\n ) : (\n <span className=\"opacity-40 mx-1\"><ChevronIcon /></span>\n )}\n\n {open && adapter && (\n <div\n className=\"absolute top-full left-1/2 -translate-x-1/2 mt-1 bg-base-100 shadow-2xl border border-base-200 rounded-xl z-[9999]\"\n onClick={(e) => e.stopPropagation()}\n >\n <BreadcrumbDropTree\n path={path}\n adapter={adapter}\n onNavigate={(p) => {\n onNavigate(p);\n setOpen(false);\n }}\n />\n </div>\n )}\n </div>\n );\n};\n\n/** Split a path like \"/a/b/c\" into breadcrumb segments */\nfunction pathSegments(path: string): { label: string; path: string; basePath: string }[] {\n const parts = path.split('/').filter(Boolean);\n const segments: { label: string; path: string; basePath: string }[] = [];\n for (let i = 0; i < parts.length; i++) {\n segments.push({\n label: parts[i],\n path: '/' + parts.slice(0, i + 1).join('/'),\n basePath: i === 0 ? '/' : '/' + parts.slice(0, i).join('/')\n });\n }\n return segments;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n path,\n labels: userLabels,\n adapter,\n onNavigate,\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n const segments = pathSegments(path);\n const isRoot = segments.length === 0;\n\n return (\n <nav className=\"flex items-center text-sm overflow-x-visible py-2 px-1 gap-0.5 min-h-[36px]\">\n <button\n className={`btn btn-ghost btn-xs gap-1 flex-shrink-0 ${isRoot ? 'font-semibold' : ''}`}\n onClick={() => onNavigate('/')}\n >\n <HomeIcon />\n {labels.root}\n </button>\n\n {segments.map((seg, idx) => {\n const isLast = idx === segments.length - 1;\n return (\n <React.Fragment key={seg.path}>\n <ChevronDrop path={seg.basePath} adapter={adapter} onNavigate={onNavigate} />\n <button\n className={`btn btn-ghost btn-xs flex-shrink-0 truncate max-w-[160px] ${isLast ? 'font-semibold' : ''}`}\n onClick={() => onNavigate(seg.path)}\n disabled={isLast}\n >\n {seg.label}\n </button>\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n"],"mappings":"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"}