dishui 0.0.106 → 0.0.110

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 (388) hide show
  1. package/dist/.release-verified.json +3 -2
  2. package/dist/components/Accordion/index.js.map +1 -1
  3. package/dist/components/Avatar/index.js.map +1 -1
  4. package/dist/components/Badge/index.js.map +1 -1
  5. package/dist/components/Button/index.js.map +1 -1
  6. package/dist/components/ButtonMenu/index.js.map +1 -1
  7. package/dist/components/Card/Metric2.js.map +1 -1
  8. package/dist/components/Card/Ticket2.js.map +1 -1
  9. package/dist/components/Card/index.js.map +1 -1
  10. package/dist/components/Chart/Chart.js.map +1 -1
  11. package/dist/components/Checkbox/index.js.map +1 -1
  12. package/dist/components/ChoicePicker/index.js.map +1 -1
  13. package/dist/components/Column/index.js.map +1 -1
  14. package/dist/components/ConfirmDialog/index.js.map +1 -1
  15. package/dist/components/DateTimeInput/index.js.map +1 -1
  16. package/dist/components/Demo/index.js.map +1 -1
  17. package/dist/components/Demo/source.js.map +1 -1
  18. package/dist/components/Divider/index.js.map +1 -1
  19. package/dist/components/EmptyState/index.js.map +1 -1
  20. package/dist/components/Field/index.js.map +1 -1
  21. package/dist/components/FileUploader/DropZone.js.map +1 -1
  22. package/dist/components/FileUploader/FileItem.js.map +1 -1
  23. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  24. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  25. package/dist/components/GroupButton/index.js.map +1 -1
  26. package/dist/components/GroupedTable/index.js.map +1 -1
  27. package/dist/components/Icon/index.js.map +1 -1
  28. package/dist/components/Image/index.js.map +1 -1
  29. package/dist/components/Input/index.js.map +1 -1
  30. package/dist/components/Label/index.js.map +1 -1
  31. package/dist/components/Layout/index.js.map +1 -1
  32. package/dist/components/LayoutSuite/DashboardSuite.js.map +1 -1
  33. package/dist/components/LayoutSuite/index.js.map +1 -1
  34. package/dist/components/List/index.js.map +1 -1
  35. package/dist/components/Markdown/Markdown.js.map +1 -1
  36. package/dist/components/Markdown/codeThemes.js.map +1 -1
  37. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  38. package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
  39. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  40. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  41. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  42. package/dist/components/Modal/focusScope.js.map +1 -1
  43. package/dist/components/Modal/index.js.map +1 -1
  44. package/dist/components/MultipleChoice/index.js.map +1 -1
  45. package/dist/components/NavigationList/index.js.map +1 -1
  46. package/dist/components/Page/Float2.js.map +1 -1
  47. package/dist/components/Page/index.js.map +1 -1
  48. package/dist/components/Page/resize2.js.map +1 -1
  49. package/dist/components/PageHeader/index.js.map +1 -1
  50. package/dist/components/PagePanel/index.js.map +1 -1
  51. package/dist/components/ProtectedRoute/index.js.map +1 -1
  52. package/dist/components/Resizable/ResizeGrip.js.map +1 -1
  53. package/dist/components/Resizable/index.js.map +1 -1
  54. package/dist/components/Resizable/useResize.js.map +1 -1
  55. package/dist/components/Row/index.js.map +1 -1
  56. package/dist/components/Section/index.js.map +1 -1
  57. package/dist/components/Select/index.js.map +1 -1
  58. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  59. package/dist/components/Skeleton/index.js.map +1 -1
  60. package/dist/components/Slider/index.js.map +1 -1
  61. package/dist/components/Switch/index.js.map +1 -1
  62. package/dist/components/Tab/index.js.map +1 -1
  63. package/dist/components/Table/index.js.map +1 -1
  64. package/dist/components/Tabs/index.js.map +1 -1
  65. package/dist/components/Tabs/tabNavigation.js.map +1 -1
  66. package/dist/components/Text/index.js.map +1 -1
  67. package/dist/components/Textarea/index.js.map +1 -1
  68. package/dist/components/Tooltip/index.js.map +1 -1
  69. package/dist/components/Tree/Tree.js.map +1 -1
  70. package/dist/components/ai/AgentChat/index.js.map +1 -1
  71. package/dist/components/ai/AgentRunCard/index.js.map +1 -1
  72. package/dist/components/ai/AgentScreen/index.js.map +1 -1
  73. package/dist/components/ai/ApprovalCard/index.js.map +1 -1
  74. package/dist/components/ai/CodeView/index.js.map +1 -1
  75. package/dist/components/ai/CommandSearch/index.js.map +1 -1
  76. package/dist/components/ai/ContextCards/index.js.map +1 -1
  77. package/dist/components/ai/DiffTable/index.js.map +1 -1
  78. package/dist/components/ai/FilterTable/index.js.map +1 -1
  79. package/dist/components/ai/FineTuneCard/index.js.map +1 -1
  80. package/dist/components/ai/InsightCards/index.js.map +1 -1
  81. package/dist/components/ai/IssueCard/index.js.map +1 -1
  82. package/dist/components/ai/LoadingState/index.js.map +1 -1
  83. package/dist/components/ai/PromptBar/index.js.map +1 -1
  84. package/dist/components/ai/RecommendationCard/index.js.map +1 -1
  85. package/dist/components/ai/RecordsTable/index.js.map +1 -1
  86. package/dist/components/ai/SelectionActions/index.js.map +1 -1
  87. package/dist/components/ai/StateFlow/index.js.map +1 -1
  88. package/dist/components/ai/StreamingText/index.js.map +1 -1
  89. package/dist/components/ai/TaskRows/index.js.map +1 -1
  90. package/dist/components/ai/Thinking/index.js.map +1 -1
  91. package/dist/components/ai/ToolChips/index.js.map +1 -1
  92. package/dist/components/ai/shared.js.map +1 -1
  93. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  94. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  95. package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
  96. package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
  97. package/dist/components/pro/Calendar/Calendar.js +165 -160
  98. package/dist/components/pro/Calendar/Calendar.js.map +1 -1
  99. package/dist/components/pro/Calendar/hooks/useCalendarDrag.js.map +1 -1
  100. package/dist/components/pro/Calendar/hooks/useCalendarState.js +31 -31
  101. package/dist/components/pro/Calendar/hooks/useCalendarState.js.map +1 -1
  102. package/dist/components/pro/Calendar/utils.js.map +1 -1
  103. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  104. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  105. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
  106. package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
  107. package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
  108. package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
  109. package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
  110. package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
  111. package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
  112. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  113. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +65 -59
  114. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  115. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  116. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  117. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  118. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  119. package/dist/components/pro/CodeEditor/utils.js.map +1 -1
  120. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  121. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  122. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  123. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  124. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  125. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  126. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  127. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  128. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  129. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  130. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  131. package/dist/components/pro/DataTable/extension.js.map +1 -1
  132. package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
  133. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  134. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  135. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  136. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  137. package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
  138. package/dist/components/pro/DataTable/useDataTableModel.js +119 -104
  139. package/dist/components/pro/DataTable/useDataTableModel.js.map +1 -1
  140. package/dist/components/pro/DataTable/utils.js.map +1 -1
  141. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  142. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  143. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  144. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  145. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  146. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  147. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  148. package/dist/components/pro/Flow/Flow.js.map +1 -1
  149. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  150. package/dist/components/pro/Flow/archify/build.js.map +1 -1
  151. package/dist/components/pro/Flow/archify/convert.js.map +1 -1
  152. package/dist/components/pro/Flow/archify/palette.js.map +1 -1
  153. package/dist/components/pro/Flow/archify/presets.js.map +1 -1
  154. package/dist/components/pro/Flow/archify/spec.js.map +1 -1
  155. package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
  156. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  157. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  158. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  159. package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
  160. package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
  161. package/dist/components/pro/Flow/constants.js.map +1 -1
  162. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
  163. package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
  164. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  165. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  166. package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
  167. package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
  168. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
  169. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  170. package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
  171. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  172. package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
  173. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  174. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  175. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
  176. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  177. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  178. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  179. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  180. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
  181. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  182. package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
  183. package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
  184. package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
  185. package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
  186. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  187. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  188. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  189. package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
  190. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  191. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  192. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  193. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  194. package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
  195. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  196. package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
  197. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  198. package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
  199. package/dist/components/pro/Flow/nodes/chartGeometryBudget.js.map +1 -1
  200. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  201. package/dist/components/pro/Flow/nodes/demandRender.js.map +1 -1
  202. package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
  203. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  204. package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
  205. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  206. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  207. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  208. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  209. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  210. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  211. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  212. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  213. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  214. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  215. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  216. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  217. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  218. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  219. package/dist/components/pro/Flow/types.js.map +1 -1
  220. package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
  221. package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
  222. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
  223. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  224. package/dist/components/pro/Gantt/Gantt.js.map +1 -1
  225. package/dist/components/pro/Gantt/hooks/useGanttDrag.js.map +1 -1
  226. package/dist/components/pro/Gantt/hooks/useGanttState.js +79 -71
  227. package/dist/components/pro/Gantt/hooks/useGanttState.js.map +1 -1
  228. package/dist/components/pro/Gantt/utils.js.map +1 -1
  229. package/dist/components/pro/Kanban/Kanban.js.map +1 -1
  230. package/dist/components/pro/Kanban/Swimlanes.js.map +1 -1
  231. package/dist/components/pro/Kanban/useKanbanDrag.js.map +1 -1
  232. package/dist/components/pro/Kanban/utils.js.map +1 -1
  233. package/dist/components/pro/RichTextEditor/AIRewrite.d.ts +1 -0
  234. package/dist/components/pro/RichTextEditor/AIRewrite.js +109 -88
  235. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  236. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  237. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  238. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  239. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  240. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  241. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  242. package/dist/components/pro/RichTextEditor/RichTextEditor.js +133 -132
  243. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  244. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  245. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  246. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  247. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  248. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  249. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  250. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  251. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  252. package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js.map +1 -1
  253. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  254. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
  255. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  256. package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
  257. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  258. package/dist/components/pro/RichTextEditor/extensions/ResizableImage.js.map +1 -1
  259. package/dist/components/pro/RichTextEditor/extensions/legacyMermaid.js.map +1 -1
  260. package/dist/components/pro/RichTextEditor/types.d.ts +2 -0
  261. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  262. package/dist/components/pro/Sprite/Molly/animations.d.ts +6 -0
  263. package/dist/components/pro/Sprite/Molly/animations.js +52 -0
  264. package/dist/components/pro/Sprite/Molly/animations.js.map +1 -0
  265. package/dist/components/pro/Sprite/Molly/events.d.ts +2 -0
  266. package/dist/components/pro/Sprite/Molly/events.js +46 -0
  267. package/dist/components/pro/Sprite/Molly/events.js.map +1 -0
  268. package/dist/components/pro/Sprite/Molly/index.d.ts +1 -0
  269. package/dist/components/pro/Sprite/Molly/index.js +12 -0
  270. package/dist/components/pro/Sprite/Molly/index.js.map +1 -0
  271. package/dist/components/pro/Sprite/Molly/legFlexion.d.ts +3 -0
  272. package/dist/components/pro/Sprite/Molly/legFlexion.js +48 -0
  273. package/dist/components/pro/Sprite/Molly/legFlexion.js.map +1 -0
  274. package/dist/components/pro/Sprite/Molly/locomotion.d.ts +4 -0
  275. package/dist/components/pro/Sprite/Molly/locomotion.js +51 -0
  276. package/dist/components/pro/Sprite/Molly/locomotion.js.map +1 -0
  277. package/dist/components/pro/Sprite/Molly/model.d.ts +23 -0
  278. package/dist/components/pro/Sprite/Molly/model.js +614 -0
  279. package/dist/components/pro/Sprite/Molly/model.js.map +1 -0
  280. package/dist/components/pro/Sprite/Molly/rig.d.ts +25 -0
  281. package/dist/components/pro/Sprite/Molly/rig.js +102 -0
  282. package/dist/components/pro/Sprite/Molly/rig.js.map +1 -0
  283. package/dist/components/pro/Sprite/Ruby/animations.d.ts +6 -0
  284. package/dist/components/pro/Sprite/Ruby/animations.js +58 -0
  285. package/dist/components/pro/Sprite/Ruby/animations.js.map +1 -0
  286. package/dist/components/pro/Sprite/Ruby/events.d.ts +2 -0
  287. package/dist/components/pro/Sprite/Ruby/events.js +46 -0
  288. package/dist/components/pro/Sprite/Ruby/events.js.map +1 -0
  289. package/dist/components/pro/Sprite/Ruby/index.d.ts +1 -0
  290. package/dist/components/pro/Sprite/Ruby/index.js +12 -0
  291. package/dist/components/pro/Sprite/Ruby/index.js.map +1 -0
  292. package/dist/components/pro/Sprite/Ruby/locomotion.d.ts +4 -0
  293. package/dist/components/pro/Sprite/Ruby/locomotion.js +41 -0
  294. package/dist/components/pro/Sprite/Ruby/locomotion.js.map +1 -0
  295. package/dist/components/pro/Sprite/Ruby/model.d.ts +23 -0
  296. package/dist/components/pro/Sprite/Ruby/model.js +605 -0
  297. package/dist/components/pro/Sprite/Ruby/model.js.map +1 -0
  298. package/dist/components/pro/Sprite/Ruby/rig.d.ts +26 -0
  299. package/dist/components/pro/Sprite/Ruby/rig.js +112 -0
  300. package/dist/components/pro/Sprite/Ruby/rig.js.map +1 -0
  301. package/dist/components/pro/Sprite/Sprite.d.ts +23 -0
  302. package/dist/components/pro/Sprite/Sprite2.js +224 -0
  303. package/dist/components/pro/Sprite/Sprite2.js.map +1 -0
  304. package/dist/components/pro/Sprite/actions.d.ts +3 -0
  305. package/dist/components/pro/Sprite/actions.js +16 -0
  306. package/dist/components/pro/Sprite/actions.js.map +1 -0
  307. package/dist/components/pro/Sprite/createSpriteScene.d.ts +4 -0
  308. package/dist/components/pro/Sprite/createSpriteScene.js +14 -0
  309. package/dist/components/pro/Sprite/createSpriteScene.js.map +1 -0
  310. package/dist/components/pro/Sprite/index.d.ts +4 -0
  311. package/dist/components/pro/Sprite/shared/animation.d.ts +33 -0
  312. package/dist/components/pro/Sprite/shared/animation.js +39 -0
  313. package/dist/components/pro/Sprite/shared/animation.js.map +1 -0
  314. package/dist/components/pro/Sprite/shared/createSpriteStage.d.ts +14 -0
  315. package/dist/components/pro/Sprite/shared/createSpriteStage.js +127 -0
  316. package/dist/components/pro/Sprite/shared/createSpriteStage.js.map +1 -0
  317. package/dist/components/pro/Sprite/shared/events.d.ts +5 -0
  318. package/dist/components/pro/Sprite/shared/events.js +21 -0
  319. package/dist/components/pro/Sprite/shared/events.js.map +1 -0
  320. package/dist/components/pro/Sprite/shared/face.d.ts +15 -0
  321. package/dist/components/pro/Sprite/shared/face.js +33 -0
  322. package/dist/components/pro/Sprite/shared/face.js.map +1 -0
  323. package/dist/components/pro/Sprite/shared/faceSurface.d.ts +6 -0
  324. package/dist/components/pro/Sprite/shared/faceSurface.js +66 -0
  325. package/dist/components/pro/Sprite/shared/faceSurface.js.map +1 -0
  326. package/dist/components/pro/Sprite/shared/gait.d.ts +5 -0
  327. package/dist/components/pro/Sprite/shared/gait.js +19 -0
  328. package/dist/components/pro/Sprite/shared/gait.js.map +1 -0
  329. package/dist/components/pro/Sprite/shared/geometry.d.ts +8 -0
  330. package/dist/components/pro/Sprite/shared/geometry.js +59 -0
  331. package/dist/components/pro/Sprite/shared/geometry.js.map +1 -0
  332. package/dist/components/pro/Sprite/shared/magicEffect.d.ts +27 -0
  333. package/dist/components/pro/Sprite/shared/magicEffect.js +61 -0
  334. package/dist/components/pro/Sprite/shared/magicEffect.js.map +1 -0
  335. package/dist/components/pro/Sprite/shared/playback.d.ts +8 -0
  336. package/dist/components/pro/Sprite/shared/playback.js +74 -0
  337. package/dist/components/pro/Sprite/shared/playback.js.map +1 -0
  338. package/dist/components/pro/Sprite/shared/rig.d.ts +6 -0
  339. package/dist/components/pro/Sprite/shared/rig.js +48 -0
  340. package/dist/components/pro/Sprite/shared/rig.js.map +1 -0
  341. package/dist/components/pro/Sprite/shared/scene.d.ts +9 -0
  342. package/dist/components/pro/Sprite/shared/scene.js +21 -0
  343. package/dist/components/pro/Sprite/shared/scene.js.map +1 -0
  344. package/dist/components/pro/Sprite/shared/sculptor.d.ts +14 -0
  345. package/dist/components/pro/Sprite/shared/sculptor.js +78 -0
  346. package/dist/components/pro/Sprite/shared/sculptor.js.map +1 -0
  347. package/dist/components/pro/Sprite/shared/speechBubble.d.ts +15 -0
  348. package/dist/components/pro/Sprite/shared/speechBubble.js +129 -0
  349. package/dist/components/pro/Sprite/shared/speechBubble.js.map +1 -0
  350. package/dist/components/pro/Sprite/types.d.ts +40 -0
  351. package/dist/contexts/AppContext.js.map +1 -1
  352. package/dist/contexts/authentication.js.map +1 -1
  353. package/dist/data-table.js +3 -3
  354. package/dist/data-table.js.map +1 -1
  355. package/dist/dishui.css +1 -1
  356. package/dist/hooks/useClickOutside.js.map +1 -1
  357. package/dist/hooks/useContainerElement.js.map +1 -1
  358. package/dist/hooks/useControllableState.js.map +1 -1
  359. package/dist/hooks/useCopyToClipboard.js.map +1 -1
  360. package/dist/hooks/useDebounce.js.map +1 -1
  361. package/dist/hooks/useDraggable.js.map +1 -1
  362. package/dist/hooks/useTableColumns.js.map +1 -1
  363. package/dist/hooks/useTableData.js.map +1 -1
  364. package/dist/index-nostyled.d.ts +2 -0
  365. package/dist/index.d.ts +2 -0
  366. package/dist/index.js +116 -115
  367. package/dist/layouts/MainLayout.js.map +1 -1
  368. package/dist/layouts/Navbar.js.map +1 -1
  369. package/dist/layouts/Sidebar.js.map +1 -1
  370. package/dist/layouts/headbar/Headbar.js.map +1 -1
  371. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  372. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  373. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  374. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  375. package/dist/sprite.js +2 -0
  376. package/dist/styles/themeStyles.js.map +1 -1
  377. package/dist/utils/cn.js.map +1 -1
  378. package/dist/utils/flexLayout.js.map +1 -1
  379. package/dist/utils/i18n.js.map +1 -1
  380. package/dist/utils/menu.js.map +1 -1
  381. package/dist/utils/rehype-code-meta.js.map +1 -1
  382. package/dist/utils/remark-code-meta.js.map +1 -1
  383. package/dist/utils/routerBuilder.js.map +1 -1
  384. package/dist/utils/safeStorage.js.map +1 -1
  385. package/dist/utils/selection.js +29 -20
  386. package/dist/utils/selection.js.map +1 -1
  387. package/dist/utils/themes.js.map +1 -1
  388. package/package.json +15 -11
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnDragReorder.js","names":[],"sources":["../../../../src/components/pro/DataTable/useColumnDragReorder.ts"],"sourcesContent":["import React, { useState } from 'react';\nimport type { DragInfo } from './types';\n\nconst emptyDragImage = new Image();\nemptyDragImage.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n\nexport function useColumnDragReorder(\n columnOrderState: string[],\n setColumnOrderState: (order: string[]) => void,\n) {\n const [dragInfo, setDragInfo] = useState<DragInfo>({\n isDragging: false,\n startX: 0,\n columnId: null,\n newOrder: [],\n });\n const [draggedColumnId, setDraggedColumnId] = useState<string | null>(null);\n\n const handleDragStart = (e: React.DragEvent, columnId: string) => {\n e.stopPropagation();\n e.dataTransfer.setData('text/plain', columnId);\n e.dataTransfer.setData('application/column-id', columnId);\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setDragImage(emptyDragImage, -99999, -99999);\n\n setDraggedColumnId(columnId);\n setDragInfo({\n ...dragInfo,\n isDragging: true,\n startX: e.clientX,\n columnId,\n });\n\n const el = e.currentTarget as HTMLElement;\n if (el) el.classList.add('dragging-source');\n };\n\n const handleDragEnd = (e: React.DragEvent) => {\n const el = e.currentTarget as HTMLElement;\n if (el) el.classList.remove('dragging-source');\n\n document.querySelectorAll('.bg-primary\\\\/20, .bg-primary\\\\/30, .dragging-source, .menu-item-highlight').forEach(el => {\n el.classList.remove('bg-primary/20', 'bg-primary/30', 'shadow-lg', 'border-b-2', 'border-2', 'border-l-4', 'border-primary', 'dragging-source', 'menu-item-highlight');\n });\n\n setDraggedColumnId(null);\n setDragInfo({ ...dragInfo, isDragging: false, columnId: null });\n };\n\n const handleDragOver = (e: React.DragEvent | Event) => {\n e.preventDefault?.();\n if (e instanceof DragEvent && e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n\n const target = e.currentTarget as HTMLElement;\n if (target && target.tagName === 'TH') {\n document.querySelectorAll('th.bg-primary\\\\/20').forEach(el => {\n if (el !== target) {\n el.classList.remove('bg-primary/20', 'shadow-lg', 'border-b-2', 'border-primary');\n }\n });\n target.classList.add('bg-primary/20', 'shadow-lg', 'border-b-2', 'border-primary');\n }\n };\n\n const handleDragLeave = (e: React.DragEvent | Event) => {\n const target = e.currentTarget as HTMLElement;\n if (target && target.tagName === 'TH') {\n target.classList.remove('bg-primary/20', 'shadow-lg', 'border-b-2', 'border-primary');\n }\n };\n\n const handleDrop = (e: React.DragEvent, targetColumnId: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n document.querySelectorAll('th').forEach(el => {\n el.classList.remove('bg-primary/20', 'shadow-lg', 'border-b-2', 'border-primary');\n });\n\n let sourceColumnId = '';\n try {\n sourceColumnId = e.dataTransfer.getData('application/column-id');\n if (!sourceColumnId) sourceColumnId = e.dataTransfer.getData('text/plain');\n } catch {\n if (draggedColumnId) sourceColumnId = draggedColumnId;\n }\n\n if (sourceColumnId && targetColumnId && sourceColumnId !== targetColumnId) {\n const newOrder = [...columnOrderState];\n const sourceIndex = newOrder.indexOf(sourceColumnId);\n const targetIndex = newOrder.indexOf(targetColumnId);\n\n if (sourceIndex > -1 && targetIndex > -1) {\n newOrder.splice(sourceIndex, 1);\n newOrder.splice(targetIndex, 0, sourceColumnId);\n setColumnOrderState(newOrder);\n }\n }\n\n setDraggedColumnId(null);\n setDragInfo({ ...dragInfo, isDragging: false, columnId: null });\n };\n\n return {\n dragInfo,\n draggedColumnId,\n handleDragStart,\n handleDragEnd,\n handleDragOver,\n handleDragLeave,\n handleDrop,\n };\n}\n"],"mappings":";;AAGA,IAAM,IAAiB,IAAI,MAAM;AACjC,EAAe,MAAM;AAErB,SAAgB,EACd,GACA,GACA;CACA,IAAM,CAAC,GAAU,KAAe,EAAmB;EACjD,YAAY;EACZ,QAAQ;EACR,UAAU;EACV,UAAU,CAAC;CACb,CAAC,GACK,CAAC,GAAiB,KAAsB,EAAwB,IAAI;CAyF1E,OAAO;EACL;EACA;EACA,kBA1FuB,GAAoB,MAAqB;GAQhE,AAPA,EAAE,gBAAgB,GAClB,EAAE,aAAa,QAAQ,cAAc,CAAQ,GAC7C,EAAE,aAAa,QAAQ,yBAAyB,CAAQ,GACxD,EAAE,aAAa,gBAAgB,QAC/B,EAAE,aAAa,aAAa,GAAgB,QAAQ,MAAM,GAE1D,EAAmB,CAAQ,GAC3B,EAAY;IACV,GAAG;IACH,YAAY;IACZ,QAAQ,EAAE;IACV;GACF,CAAC;GAED,IAAM,IAAK,EAAE;GACb,AAAI,KAAI,EAAG,UAAU,IAAI,iBAAiB;EAC5C;EA0EE,gBAxEqB,MAAuB;GAC5C,IAAM,IAAK,EAAE;GAQb,AAPI,KAAI,EAAG,UAAU,OAAO,iBAAiB,GAE7C,SAAS,iBAAiB,4EAA4E,CAAC,CAAC,SAAQ,MAAM;IACpH,EAAG,UAAU,OAAO,iBAAiB,iBAAiB,aAAa,cAAc,YAAY,cAAc,kBAAkB,mBAAmB,qBAAqB;GACvK,CAAC,GAED,EAAmB,IAAI,GACvB,EAAY;IAAE,GAAG;IAAU,YAAY;IAAO,UAAU;GAAK,CAAC;EAChE;EA+DE,iBA7DsB,MAA+B;GAErD,AADA,EAAE,iBAAiB,GACf,aAAa,aAAa,EAAE,iBAC9B,EAAE,aAAa,aAAa;GAG9B,IAAM,IAAS,EAAE;GACjB,AAAI,KAAU,EAAO,YAAY,SAC/B,SAAS,iBAAiB,oBAAoB,CAAC,CAAC,SAAQ,MAAM;IAC5D,AAAI,MAAO,KACT,EAAG,UAAU,OAAO,iBAAiB,aAAa,cAAc,gBAAgB;GAEpF,CAAC,GACD,EAAO,UAAU,IAAI,iBAAiB,aAAa,cAAc,gBAAgB;EAErF;EA+CE,kBA7CuB,MAA+B;GACtD,IAAM,IAAS,EAAE;GACjB,AAAI,KAAU,EAAO,YAAY,QAC/B,EAAO,UAAU,OAAO,iBAAiB,aAAa,cAAc,gBAAgB;EAExF;EAyCE,aAvCkB,GAAoB,MAA2B;GAIjE,AAHA,EAAE,eAAe,GACjB,EAAE,gBAAgB,GAElB,SAAS,iBAAiB,IAAI,CAAC,CAAC,SAAQ,MAAM;IAC5C,EAAG,UAAU,OAAO,iBAAiB,aAAa,cAAc,gBAAgB;GAClF,CAAC;GAED,IAAI,IAAiB;GACrB,IAAI;IAEF,AADA,IAAiB,EAAE,aAAa,QAAQ,uBAAuB,GAC/D,AAAqB,MAAiB,EAAE,aAAa,QAAQ,YAAY;GAC3E,QAAQ;IACN,AAAI,MAAiB,IAAiB;GACxC;GAEA,IAAI,KAAkB,KAAkB,MAAmB,GAAgB;IACzE,IAAM,IAAW,CAAC,GAAG,CAAgB,GAC/B,IAAc,EAAS,QAAQ,CAAc,GAC7C,IAAc,EAAS,QAAQ,CAAc;IAEnD,AAAI,IAAc,MAAM,IAAc,OACpC,EAAS,OAAO,GAAa,CAAC,GAC9B,EAAS,OAAO,GAAa,GAAG,CAAc,GAC9C,EAAoB,CAAQ;GAEhC;GAGA,AADA,EAAmB,IAAI,GACvB,EAAY;IAAE,GAAG;IAAU,YAAY;IAAO,UAAU;GAAK,CAAC;EAChE;CAUA;AACF"}
1
+ {"version":3,"file":"useColumnDragReorder.js","names":["emptyDragImage","useColumnDragReorder","dragInfo","setDragInfo","useState","draggedColumnId","setDraggedColumnId","columnId","el","target","sourceColumnId","targetColumnId","newOrder","columnOrderState","sourceIndex","targetIndex","setColumnOrderState"],"sources":["../../../../src/components/pro/DataTable/useColumnDragReorder.ts"],"sourcesContent":["import React, { useState } from 'react';\nimport type { DragInfo } from './types';\n\nconst emptyDragImage = new Image();\nemptyDragImage.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n\nexport function useColumnDragReorder(\n columnOrderState: string[],\n setColumnOrderState: (order: string[]) => void,\n) {\n const [dragInfo, setDragInfo] = useState<DragInfo>({\n isDragging: false,\n startX: 0,\n columnId: null,\n newOrder: [],\n });\n const [draggedColumnId, setDraggedColumnId] = useState<string | null>(null);\n\n const handleDragStart = (e: React.DragEvent, columnId: string) => {\n e.stopPropagation();\n e.dataTransfer.setData('text/plain', columnId);\n e.dataTransfer.setData('application/column-id', columnId);\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setDragImage(emptyDragImage, -99999, -99999);\n\n setDraggedColumnId(columnId);\n setDragInfo({\n ...dragInfo,\n isDragging: true,\n startX: e.clientX,\n columnId,\n });\n\n const el = e.currentTarget as HTMLElement;\n if (el) el.classList.add('dragging-source');\n };\n\n const handleDragEnd = (e: React.DragEvent) => {\n const el = e.currentTarget as HTMLElement;\n if (el) el.classList.remove('dragging-source');\n\n document.querySelectorAll('.bg-primary\\\\/20, .bg-primary\\\\/30, .dragging-source, .menu-item-highlight').forEach(el => {\n el.classList.remove('bg-primary/20', 'bg-primary/30', 'shadow-lg', 'border-b-2', 'border-2', 'border-l-4', 'border-primary', 'dragging-source', 'menu-item-highlight');\n });\n\n setDraggedColumnId(null);\n setDragInfo({ ...dragInfo, isDragging: false, columnId: null });\n };\n\n const handleDragOver = (e: React.DragEvent | Event) => {\n e.preventDefault?.();\n if (e instanceof DragEvent && e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n\n const target = e.currentTarget as HTMLElement;\n if (target && target.tagName === 'TH') {\n document.querySelectorAll('th.bg-primary\\\\/20').forEach(el => {\n if (el !== target) {\n el.classList.remove('bg-primary/20', 'shadow-lg', 'border-b-2', 'border-primary');\n }\n });\n target.classList.add('bg-primary/20', 'shadow-lg', 'border-b-2', 'border-primary');\n }\n };\n\n const handleDragLeave = (e: React.DragEvent | Event) => {\n const target = e.currentTarget as HTMLElement;\n if (target && target.tagName === 'TH') {\n target.classList.remove('bg-primary/20', 'shadow-lg', 'border-b-2', 'border-primary');\n }\n };\n\n const handleDrop = (e: React.DragEvent, targetColumnId: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n document.querySelectorAll('th').forEach(el => {\n el.classList.remove('bg-primary/20', 'shadow-lg', 'border-b-2', 'border-primary');\n });\n\n let sourceColumnId = '';\n try {\n sourceColumnId = e.dataTransfer.getData('application/column-id');\n if (!sourceColumnId) sourceColumnId = e.dataTransfer.getData('text/plain');\n } catch {\n if (draggedColumnId) sourceColumnId = draggedColumnId;\n }\n\n if (sourceColumnId && targetColumnId && sourceColumnId !== targetColumnId) {\n const newOrder = [...columnOrderState];\n const sourceIndex = newOrder.indexOf(sourceColumnId);\n const targetIndex = newOrder.indexOf(targetColumnId);\n\n if (sourceIndex > -1 && targetIndex > -1) {\n newOrder.splice(sourceIndex, 1);\n newOrder.splice(targetIndex, 0, sourceColumnId);\n setColumnOrderState(newOrder);\n }\n }\n\n setDraggedColumnId(null);\n setDragInfo({ ...dragInfo, isDragging: false, columnId: null });\n };\n\n return {\n dragInfo,\n draggedColumnId,\n handleDragStart,\n handleDragEnd,\n handleDragOver,\n handleDragLeave,\n handleDrop,\n };\n}\n"],"mappings":";;AAGA,IAAMA,IAAiB,IAAI,MAAM;AACjC,EAAe,MAAM;AAErB,SAAgBC,EACd,GACA,GACA;CACA,IAAM,CAACC,GAAUC,KAAeC,EAAmB;EACjD,YAAY;EACZ,QAAQ;EACR,UAAU;EACV,UAAU,CAAC;CACb,CAAC,GACK,CAACC,GAAiBC,KAAsBF,EAAwB,IAAI;CAyF1E,OAAO;EACL;EACA;EACA,kBA1FuB,GAAoB,MAAqB;GAQhE,AAPA,EAAE,gBAAgB,GAClB,EAAE,aAAa,QAAQ,cAAcG,CAAQ,GAC7C,EAAE,aAAa,QAAQ,yBAAyBA,CAAQ,GACxD,EAAE,aAAa,gBAAgB,QAC/B,EAAE,aAAa,aAAaP,GAAgB,QAAQ,MAAM,GAE1DM,EAAmBC,CAAQ,GAC3BJ,EAAY;IACV,GAAGD;IACH,YAAY;IACZ,QAAQ,EAAE;IACV;GACF,CAAC;GAED,IAAMM,IAAK,EAAE;GACb,AAAIA,KAAIA,EAAG,UAAU,IAAI,iBAAiB;EAC5C;EA0EE,gBAxEqB,MAAuB;GAC5C,IAAMA,IAAK,EAAE;GAQb,AAPIA,KAAIA,EAAG,UAAU,OAAO,iBAAiB,GAE7C,SAAS,iBAAiB,4EAA4E,CAAC,CAAC,SAAQ,MAAM;IACpH,EAAG,UAAU,OAAO,iBAAiB,iBAAiB,aAAa,cAAc,YAAY,cAAc,kBAAkB,mBAAmB,qBAAqB;GACvK,CAAC,GAEDF,EAAmB,IAAI,GACvBH,EAAY;IAAE,GAAGD;IAAU,YAAY;IAAO,UAAU;GAAK,CAAC;EAChE;EA+DE,iBA7DsB,MAA+B;GAErD,AADA,EAAE,iBAAiB,GACf,aAAa,aAAa,EAAE,iBAC9B,EAAE,aAAa,aAAa;GAG9B,IAAMO,IAAS,EAAE;GACjB,AAAIA,KAAUA,EAAO,YAAY,SAC/B,SAAS,iBAAiB,oBAAoB,CAAC,CAAC,SAAQ,MAAM;IAC5D,AAAID,MAAOC,KACTD,EAAG,UAAU,OAAO,iBAAiB,aAAa,cAAc,gBAAgB;GAEpF,CAAC,GACDC,EAAO,UAAU,IAAI,iBAAiB,aAAa,cAAc,gBAAgB;EAErF;EA+CE,kBA7CuB,MAA+B;GACtD,IAAMA,IAAS,EAAE;GACjB,AAAIA,KAAUA,EAAO,YAAY,QAC/BA,EAAO,UAAU,OAAO,iBAAiB,aAAa,cAAc,gBAAgB;EAExF;EAyCE,aAvCkB,GAAoB,MAA2B;GAIjE,AAHA,EAAE,eAAe,GACjB,EAAE,gBAAgB,GAElB,SAAS,iBAAiB,IAAI,CAAC,CAAC,SAAQ,MAAM;IAC5C,EAAG,UAAU,OAAO,iBAAiB,aAAa,cAAc,gBAAgB;GAClF,CAAC;GAED,IAAIC,IAAiB;GACrB,IAAI;IAEF,AADA,IAAiB,EAAE,aAAa,QAAQ,uBAAuB,GAC/D,AAAqBA,MAAiB,EAAE,aAAa,QAAQ,YAAY;GAC3E,QAAQ;IACN,AAAIL,MAAiB,IAAiBA;GACxC;GAEA,IAAIK,KAAkBC,KAAkBD,MAAmBC,GAAgB;IACzE,IAAMC,IAAW,CAAC,GAAGC,CAAgB,GAC/BC,IAAcF,EAAS,QAAQF,CAAc,GAC7CK,IAAcH,EAAS,QAAQD,CAAc;IAEnD,AAAIG,IAAc,MAAMC,IAAc,OACpCH,EAAS,OAAOE,GAAa,CAAC,GAC9BF,EAAS,OAAOG,GAAa,GAAGL,CAAc,GAC9CM,EAAoBJ,CAAQ;GAEhC;GAGA,AADAN,EAAmB,IAAI,GACvBH,EAAY;IAAE,GAAGD;IAAU,YAAY;IAAO,UAAU;GAAK,CAAC;EAChE;CAUA;AACF"}
@@ -1,148 +1,163 @@
1
1
  import { builtInSortFns as e, useReactTable as t } from "./tanstack-table.js";
2
2
  import { createTreeSortingFns as n, findAllChildRowIds as r, prepareTreeData as i } from "./treeDataUtils.js";
3
3
  import { deepEqual as a, useControllableState as o } from "../../../hooks/useControllableState.js";
4
- import { useCallback as s, useEffect as c, useLayoutEffect as l, useMemo as u, useRef as d } from "react";
4
+ import { defaultFilterFunctions as s } from "./utils.js";
5
+ import { useCallback as c, useEffect as l, useLayoutEffect as u, useMemo as d, useRef as f } from "react";
5
6
  //#region src/components/pro/DataTable/useDataTableModel.ts
6
- function f(e, t, n = 0) {
7
+ var p = {
8
+ text: s.text,
9
+ number: s.range,
10
+ select: (e, t, n) => {
11
+ let r = e.getValue(t);
12
+ return r != null && String(r) === n;
13
+ },
14
+ boolean: s.boolean,
15
+ date: s.dateRange,
16
+ multiSelect: s.multiSelect
17
+ };
18
+ function m(e, t, n = 0) {
7
19
  if (!Number.isSafeInteger(t) || t < n) throw RangeError(`DataTable: ${e} must be an integer >= ${n}.`);
8
20
  }
9
- function p(p) {
10
- let { data: m, columns: h, getRowId: g, subDataKey: _ = "subs", enableExpanding: v = !1, enableTreeSort: y = !0, enablePagination: b = !0, manualPagination: x = !1, enableSorting: S = !0, enableFiltering: C = !0, enableSelection: w = !0, manualSorting: T = !1, manualFiltering: E = !1, rowCount: D, pageCount: O } = p, [k, A] = o(p.sortingState, p.onSortingChange, a, p.defaultSortingState ?? []), [j, M] = o(p.selectedRows, p.onRowSelectionChange, a, p.defaultSelectedRows ?? {}), [N, P] = o(p.columnFilters, p.onColumnFiltersChange, a, p.defaultColumnFilters ?? []), [F, I] = o(p.columnVisibility, p.onColumnVisibilityChange, a, p.defaultColumnVisibility ?? {}), [L, R] = o(p.columnOrder, p.onColumnOrderChange, a, p.defaultColumnOrder ?? []), [z, B] = o(p.expandedRows, p.onExpandedRowsChange, a, p.defaultExpandedRows ?? {}), [V, H] = o(p.pageIndex, p.onPageChange, Object.is, p.defaultPageIndex ?? 0), [U, W] = o(p.pageSize, p.onPageSizeChange, Object.is, p.defaultPageSize ?? 10);
11
- if (f("pageIndex", V), f("pageSize", U, 1), x && (D !== void 0 && f("rowCount", D), O !== void 0 && f("pageCount", O), b && D === void 0 && O === void 0)) throw Error("DataTable: manualPagination requires rowCount or pageCount.");
12
- let G = u(() => v ? i(m, z, _, g) : m, [
13
- m,
21
+ function h(s) {
22
+ let { data: h, columns: g, getRowId: _, subDataKey: v = "subs", enableExpanding: y = !1, enableTreeSort: b = !0, enablePagination: x = !0, manualPagination: S = !1, enableSorting: C = !0, enableFiltering: w = !0, enableSelection: T = !0, manualSorting: E = !1, manualFiltering: D = !1, rowCount: O, pageCount: k } = s, [A, j] = o(s.sortingState, s.onSortingChange, a, s.defaultSortingState ?? []), [M, N] = o(s.selectedRows, s.onRowSelectionChange, a, s.defaultSelectedRows ?? {}), [P, F] = o(s.columnFilters, s.onColumnFiltersChange, a, s.defaultColumnFilters ?? []), [I, L] = o(s.columnVisibility, s.onColumnVisibilityChange, a, s.defaultColumnVisibility ?? {}), [R, z] = o(s.columnOrder, s.onColumnOrderChange, a, s.defaultColumnOrder ?? []), [B, V] = o(s.expandedRows, s.onExpandedRowsChange, a, s.defaultExpandedRows ?? {}), [H, U] = o(s.pageIndex, s.onPageChange, Object.is, s.defaultPageIndex ?? 0), [W, G] = o(s.pageSize, s.onPageSizeChange, Object.is, s.defaultPageSize ?? 10);
23
+ if (m("pageIndex", H), m("pageSize", W, 1), S && (O !== void 0 && m("rowCount", O), k !== void 0 && m("pageCount", k), x && O === void 0 && k === void 0)) throw Error("DataTable: manualPagination requires rowCount or pageCount.");
24
+ let K = d(() => y ? i(h, B, v, _) : h, [
25
+ h,
26
+ y,
27
+ B,
14
28
  v,
15
- z,
16
- _,
17
- g
18
- ]), K = u(() => {
19
- if (!v || !y) return h;
20
- let t = n().treeSortAsc, r = (n) => n.map((n) => {
29
+ _
30
+ ]), q = d(() => {
31
+ let t = y && b ? n().treeSortAsc : void 0, r = (n) => n.map((n) => {
21
32
  if ("columns" in n) return {
22
33
  ...n,
23
34
  columns: r(n.columns ?? [])
24
35
  };
25
- if (n.enableSorting === !1) return n;
26
- let i = n.sortFn, a = typeof i == "function" ? i : i && i !== "auto" ? e[i] : t;
27
- return {
36
+ let i = (n.filterFn === null || n.filterFn === void 0) && n.meta?.filterType ? {
28
37
  ...n,
38
+ filterFn: p[n.meta.filterType]
39
+ } : n;
40
+ if (!t || i.enableSorting === !1) return i;
41
+ let a = i.sortFn, o = typeof a == "function" ? a : a && a !== "auto" ? e[a] : t;
42
+ return {
43
+ ...i,
29
44
  sortUndefined: !1,
30
- sortFn: (e, n, r) => e.depth > 0 || n.depth > 0 ? 0 : (a ?? t)(e, n, r)
45
+ sortFn: (e, n, r) => e.depth > 0 || n.depth > 0 ? 0 : (o ?? t)(e, n, r)
31
46
  };
32
47
  });
33
- return r(h);
48
+ return r(g);
34
49
  }, [
35
- h,
36
- v,
37
- y
38
- ]), q = {
39
- pageIndex: V,
40
- pageSize: U
41
- }, J = d(q);
42
- l(() => {
43
- J.current = q;
50
+ g,
51
+ y,
52
+ b
53
+ ]), J = {
54
+ pageIndex: H,
55
+ pageSize: W
56
+ }, Y = f(J);
57
+ u(() => {
58
+ Y.current = J;
44
59
  });
45
- let Y = s((e) => {
46
- let t = J.current, n = typeof e == "function" ? e(t) : e;
47
- f("pageIndex", n.pageIndex), f("pageSize", n.pageSize, 1), J.current = {
48
- pageIndex: p.pageIndex === void 0 ? n.pageIndex : t.pageIndex,
49
- pageSize: p.pageSize === void 0 ? n.pageSize : t.pageSize
50
- }, W(n.pageSize), H(n.pageIndex);
60
+ let X = c((e) => {
61
+ let t = Y.current, n = typeof e == "function" ? e(t) : e;
62
+ m("pageIndex", n.pageIndex), m("pageSize", n.pageSize, 1), Y.current = {
63
+ pageIndex: s.pageIndex === void 0 ? n.pageIndex : t.pageIndex,
64
+ pageSize: s.pageSize === void 0 ? n.pageSize : t.pageSize
65
+ }, G(n.pageSize), U(n.pageIndex);
51
66
  }, [
52
- p.pageIndex,
53
- p.pageSize,
54
- H,
55
- W
56
- ]), X = t({
57
- data: G,
58
- columns: K,
59
- getRowId: (e, t) => v ? String(e.__id) : g?.(e, t) ?? String(t),
60
- getSubRows: v ? (e) => e[_] : void 0,
61
- manualPagination: x || !b,
62
- manualSorting: x || T || !S,
63
- manualFiltering: x || E || !C,
64
- pageCount: x ? O : void 0,
65
- rowCount: x ? D : void 0,
67
+ s.pageIndex,
68
+ s.pageSize,
69
+ U,
70
+ G
71
+ ]), Z = t({
72
+ data: K,
73
+ columns: q,
74
+ getRowId: (e, t) => y ? String(e.__id) : _?.(e, t) ?? String(t),
75
+ getSubRows: y ? (e) => e[v] : void 0,
76
+ manualPagination: S || !x,
77
+ manualSorting: S || E || !C,
78
+ manualFiltering: S || D || !w,
79
+ pageCount: S ? k : void 0,
80
+ rowCount: S ? O : void 0,
66
81
  paginateExpandedRows: !1,
67
- maxLeafRowFilterDepth: v ? 0 : void 0,
68
- enableSorting: S,
69
- enableFilters: C,
70
- enableRowSelection: w,
82
+ maxLeafRowFilterDepth: y ? 0 : void 0,
83
+ enableSorting: C,
84
+ enableFilters: w,
85
+ enableRowSelection: T,
71
86
  enableSubRowSelection: !1,
72
87
  autoResetPageIndex: !1,
73
88
  autoResetExpanded: !1,
74
89
  state: {
75
- sorting: k,
76
- rowSelection: j,
77
- columnFilters: N,
78
- columnVisibility: F,
79
- columnOrder: L,
80
- expanded: z,
90
+ sorting: A,
91
+ rowSelection: M,
92
+ columnFilters: P,
93
+ columnVisibility: I,
94
+ columnOrder: R,
95
+ expanded: B,
81
96
  pagination: {
82
- pageIndex: V,
83
- pageSize: U
97
+ pageIndex: H,
98
+ pageSize: W
84
99
  }
85
100
  },
86
- onSortingChange: A,
87
- onRowSelectionChange: M,
88
- onColumnFiltersChange: P,
89
- onColumnVisibilityChange: I,
90
- onColumnOrderChange: R,
91
- onExpandedChange: (e) => B((t) => {
101
+ onSortingChange: j,
102
+ onRowSelectionChange: N,
103
+ onColumnFiltersChange: F,
104
+ onColumnVisibilityChange: L,
105
+ onColumnOrderChange: z,
106
+ onExpandedChange: (e) => V((t) => {
92
107
  let n = typeof e == "function" ? e(t) : e;
93
- return n === !0 ? Object.fromEntries(X.getCoreRowModel().flatRows.map((e) => [e.id, !0])) : n;
108
+ return n === !0 ? Object.fromEntries(Z.getCoreRowModel().flatRows.map((e) => [e.id, !0])) : n;
94
109
  }),
95
- onPaginationChange: Y
96
- }), Z = X.getPageCount(), Q = d({
97
- sorting: k,
98
- columnFilters: N,
99
- size: U
110
+ onPaginationChange: X
111
+ }), Q = Z.getPageCount(), $ = f({
112
+ sorting: A,
113
+ columnFilters: P,
114
+ size: W
100
115
  });
101
- c(() => {
102
- let e = Q.current;
103
- Q.current = {
104
- sorting: k,
105
- columnFilters: N,
106
- size: U
107
- }, b && !x && p.pageIndex === void 0 && (!a(e.sorting, k) || !a(e.columnFilters, N) || e.size !== U ? H(0) : V >= Z && H(Math.max(0, Z - 1)));
116
+ l(() => {
117
+ let e = $.current;
118
+ $.current = {
119
+ sorting: A,
120
+ columnFilters: P,
121
+ size: W
122
+ }, x && !S && s.pageIndex === void 0 && (!a(e.sorting, A) || !a(e.columnFilters, P) || e.size !== W ? U(0) : H >= Q && U(Math.max(0, Q - 1)));
108
123
  }, [
109
- k,
110
- N,
111
- U,
112
- V,
113
- Z,
114
- b,
124
+ A,
125
+ P,
126
+ W,
127
+ H,
128
+ Q,
115
129
  x,
116
- p.pageIndex,
117
- H
130
+ S,
131
+ s.pageIndex,
132
+ U
118
133
  ]);
119
- let $ = (e, t) => {
120
- let n = !z[e];
121
- B((i) => {
134
+ let ee = (e, t) => {
135
+ let n = !B[e];
136
+ V((i) => {
122
137
  let a = {
123
138
  ...i,
124
139
  [e]: n
125
140
  };
126
- return n || r(t, e, _, g).forEach((e) => {
141
+ return n || r(t, e, v, _).forEach((e) => {
127
142
  a[e] = !1;
128
143
  }), a;
129
- }), p.onRowExpand?.(t, n);
130
- }, ee = new Map(X.getCoreRowModel().flatRows.map((e) => [e.original, e.id]));
144
+ }), s.onRowExpand?.(t, n);
145
+ }, te = new Map(Z.getCoreRowModel().flatRows.map((e) => [e.original, e.id]));
131
146
  return {
132
- table: X,
133
- rowSelection: j,
134
- visibilityState: F,
135
- columnOrderState: X.getAllLeafColumns().map((e) => e.id),
136
- setColumnOrderState: R,
137
- expandedRowsState: z,
138
- handleRowExpand: $,
139
- resolveRowId: (e, t) => ee.get(e) ?? g?.(e, t) ?? String(t),
140
- internalPageIndex: V,
141
- internalPageSize: U,
142
- handlePaginationChange: Y
147
+ table: Z,
148
+ rowSelection: M,
149
+ visibilityState: I,
150
+ columnOrderState: Z.getAllLeafColumns().map((e) => e.id),
151
+ setColumnOrderState: z,
152
+ expandedRowsState: B,
153
+ handleRowExpand: ee,
154
+ resolveRowId: (e, t) => te.get(e) ?? _?.(e, t) ?? String(t),
155
+ internalPageIndex: H,
156
+ internalPageSize: W,
157
+ handlePaginationChange: X
143
158
  };
144
159
  }
145
160
  //#endregion
146
- export { p as useDataTableModel };
161
+ export { h as useDataTableModel };
147
162
 
148
163
  //# sourceMappingURL=useDataTableModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDataTableModel.js","names":[],"sources":["../../../../src/components/pro/DataTable/useDataTableModel.ts"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useControllableState, deepEqual } from '../../../hooks/useControllableState';\nimport {\n useReactTable, builtInSortFns,\n type ColumnDef, type SortingFn, type PaginationState, type Updater,\n} from './tanstack-table';\nimport type { DataTableProps } from './types';\nimport { createTreeSortingFns, findAllChildRowIds, prepareTreeData } from './treeDataUtils';\n\nfunction assertInteger(name: string, value: number, minimum = 0) {\n if (!Number.isSafeInteger(value) || value < minimum) {\n throw new RangeError(`DataTable: ${name} must be an integer >= ${minimum}.`);\n }\n}\n\n/** Shared by the view and executable row-model regression tests. */\nexport function useDataTableModel<T extends object>(props: DataTableProps<T>) {\n const {\n data, columns, getRowId, subDataKey = 'subs', enableExpanding = false,\n enableTreeSort = true, enablePagination = true, manualPagination = false,\n enableSorting = true, enableFiltering = true, enableSelection = true,\n manualSorting = false, manualFiltering = false, rowCount, pageCount,\n } = props;\n const [sorting, setSorting] = useControllableState(\n props.sortingState, props.onSortingChange, deepEqual, props.defaultSortingState ?? [],\n );\n const [rowSelection, setRowSelection] = useControllableState(\n props.selectedRows, props.onRowSelectionChange, deepEqual, props.defaultSelectedRows ?? {},\n );\n const [columnFilters, setColumnFilters] = useControllableState(\n props.columnFilters, props.onColumnFiltersChange, deepEqual, props.defaultColumnFilters ?? [],\n );\n const [visibilityState, setVisibilityState] = useControllableState(\n props.columnVisibility, props.onColumnVisibilityChange, deepEqual, props.defaultColumnVisibility ?? {},\n );\n const [columnOrder, setColumnOrderState] = useControllableState(\n props.columnOrder, props.onColumnOrderChange, deepEqual, props.defaultColumnOrder ?? [],\n );\n const [expandedRowsState, setExpandedRowsState] = useControllableState(\n props.expandedRows, props.onExpandedRowsChange, deepEqual, props.defaultExpandedRows ?? {},\n );\n const [internalPageIndex, setInternalPageIndex] = useControllableState(\n props.pageIndex, props.onPageChange, Object.is, props.defaultPageIndex ?? 0,\n );\n const [internalPageSize, setInternalPageSize] = useControllableState(\n props.pageSize, props.onPageSizeChange, Object.is, props.defaultPageSize ?? 10,\n );\n assertInteger('pageIndex', internalPageIndex);\n assertInteger('pageSize', internalPageSize, 1);\n if (manualPagination) {\n if (rowCount !== undefined) assertInteger('rowCount', rowCount);\n if (pageCount !== undefined) assertInteger('pageCount', pageCount);\n if (enablePagination && rowCount === undefined && pageCount === undefined) {\n throw new Error('DataTable: manualPagination requires rowCount or pageCount.');\n }\n }\n\n const tableData = useMemo(() => enableExpanding\n ? prepareTreeData(data, expandedRowsState, subDataKey, getRowId)\n : data, [data, enableExpanding, expandedRowsState, subDataKey, getRowId]);\n\n const processedColumns = useMemo(() => {\n if (!enableExpanding || !enableTreeSort) return columns;\n const defaultSort = createTreeSortingFns<T>().treeSortAsc;\n const wrap = (defs: readonly ColumnDef<T, any>[]): ColumnDef<T, any>[] => defs.map(column => {\n if ('columns' in column) return { ...column, columns: wrap(column.columns ?? []) };\n if (column.enableSorting === false) return column;\n const originalSort = column.sortFn;\n const sort = typeof originalSort === 'function' ? originalSort\n : originalSort && originalSort !== 'auto'\n ? builtInSortFns[originalSort as keyof typeof builtInSortFns] as SortingFn<T>\n : defaultSort;\n return {\n ...column,\n // TanStack handles undefined before invoking sortFn. Disable that shortcut\n // so an undefined child value cannot reorder an otherwise unsorted subtree.\n sortUndefined: false,\n sortFn: (a, b, id) => a.depth > 0 || b.depth > 0 ? 0 : (sort ?? defaultSort)(a, b, id),\n };\n });\n return wrap(columns);\n }, [columns, enableExpanding, enableTreeSort]);\n\n const pagination = { pageIndex: internalPageIndex, pageSize: internalPageSize };\n const paginationRef = useRef(pagination);\n useLayoutEffect(() => { paginationRef.current = pagination; });\n const handlePaginationChange = useCallback((updater: Updater<PaginationState>) => {\n const current = paginationRef.current;\n const next = typeof updater === 'function' ? updater(current) : updater;\n assertInteger('pageIndex', next.pageIndex);\n assertInteger('pageSize', next.pageSize, 1);\n // Preserve pending uncontrolled slices across batched TanStack updaters,\n // while controlled slices continue to use the parent's committed values.\n paginationRef.current = {\n pageIndex: props.pageIndex === undefined ? next.pageIndex : current.pageIndex,\n pageSize: props.pageSize === undefined ? next.pageSize : current.pageSize,\n };\n setInternalPageSize(next.pageSize);\n setInternalPageIndex(next.pageIndex);\n }, [props.pageIndex, props.pageSize, setInternalPageIndex, setInternalPageSize]);\n\n const table = useReactTable<T>({\n data: tableData,\n columns: processedColumns,\n getRowId: (row, index) => enableExpanding\n ? String((row as Record<string, unknown>).__id)\n : getRowId?.(row, index) ?? String(index),\n getSubRows: enableExpanding\n ? row => (row as Record<string, unknown>)[subDataKey] as T[]\n : undefined,\n // Local pipeline sees the full hierarchy. Only server mode bypasses all\n // processing; hiding pagination alone still permits local sort/filter.\n manualPagination: manualPagination || !enablePagination,\n manualSorting: manualPagination || manualSorting || !enableSorting,\n manualFiltering: manualPagination || manualFiltering || !enableFiltering,\n pageCount: manualPagination ? pageCount : undefined,\n rowCount: manualPagination ? rowCount : undefined,\n paginateExpandedRows: false,\n maxLeafRowFilterDepth: enableExpanding ? 0 : undefined,\n enableSorting,\n enableFilters: enableFiltering,\n enableRowSelection: enableSelection,\n enableSubRowSelection: false,\n autoResetPageIndex: false,\n autoResetExpanded: false,\n state: {\n sorting, rowSelection, columnFilters, columnVisibility: visibilityState,\n columnOrder, expanded: expandedRowsState,\n pagination: { pageIndex: internalPageIndex, pageSize: internalPageSize },\n },\n onSortingChange: setSorting,\n onRowSelectionChange: setRowSelection,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setVisibilityState,\n onColumnOrderChange: setColumnOrderState,\n onExpandedChange: updater => setExpandedRowsState(previous => {\n const next = typeof updater === 'function' ? updater(previous) : updater;\n return next === true\n ? Object.fromEntries(table.getCoreRowModel().flatRows.map(row => [row.id, true]))\n : next;\n }),\n onPaginationChange: handlePaginationChange,\n });\n\n const localPageCount = table.getPageCount();\n const previousQuery = useRef({ sorting, columnFilters, size: internalPageSize });\n useEffect(() => {\n const previous = previousQuery.current;\n previousQuery.current = { sorting, columnFilters, size: internalPageSize };\n // Never rewrite a controlled page or a server request. Their owner must\n // reset/clamp the page along with the query and remote total.\n if (!enablePagination || manualPagination || props.pageIndex !== undefined) return;\n if (!deepEqual(previous.sorting, sorting) || !deepEqual(previous.columnFilters, columnFilters)\n || previous.size !== internalPageSize) {\n setInternalPageIndex(0);\n } else if (internalPageIndex >= localPageCount) {\n setInternalPageIndex(Math.max(0, localPageCount - 1));\n }\n }, [sorting, columnFilters, internalPageSize, internalPageIndex, localPageCount,\n enablePagination, manualPagination, props.pageIndex, setInternalPageIndex]);\n\n const handleRowExpand = (rowId: string, row: T) => {\n const expanded = !expandedRowsState[rowId];\n setExpandedRowsState(previous => {\n const next = { ...previous, [rowId]: expanded };\n if (!expanded) {\n findAllChildRowIds(row, rowId, subDataKey, getRowId).forEach(id => { next[id] = false; });\n }\n return next;\n });\n props.onRowExpand?.(row, expanded);\n };\n\n // TanStack owns mutable row models; snapshot IDs per render rather than\n // caching by flatRows identity, which does not guarantee unchanged contents.\n const rowIds = new Map(table.getCoreRowModel().flatRows.map(row => [row.original, row.id]));\n const resolveRowId = (row: T, index: number) =>\n rowIds.get(row) ?? getRowId?.(row, index) ?? String(index);\n\n // Derive the default order instead of notifying the parent on mount.\n const columnOrderState = table.getAllLeafColumns().map(column => column.id);\n return {\n table, rowSelection, visibilityState, columnOrderState, setColumnOrderState,\n expandedRowsState, handleRowExpand, resolveRowId,\n internalPageIndex, internalPageSize, handlePaginationChange,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useDataTableModel.js","names":["panelFilterFns","defaultFilterFunctions","cellValue","row","id","value","assertInteger","minimum","name","useDataTableModel","props","sorting","setSorting","useControllableState","deepEqual","rowSelection","setRowSelection","columnFilters","setColumnFilters","visibilityState","setVisibilityState","columnOrder","setColumnOrderState","expandedRowsState","setExpandedRowsState","internalPageIndex","setInternalPageIndex","internalPageSize","setInternalPageSize","manualPagination","rowCount","pageCount","enablePagination","tableData","useMemo","enableExpanding","prepareTreeData","data","subDataKey","getRowId","processedColumns","defaultSort","enableTreeSort","createTreeSortingFns","wrap","defs","column","filteredColumn","originalSort","sort","builtInSortFns","a","b","columns","pagination","paginationRef","useRef","handlePaginationChange","useCallback","current","next","updater","table","useReactTable","index","manualSorting","enableSorting","manualFiltering","enableFiltering","enableSelection","previous","localPageCount","previousQuery","handleRowExpand","expanded","rowId","findAllChildRowIds","rowIds"],"sources":["../../../../src/components/pro/DataTable/useDataTableModel.ts"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useControllableState, deepEqual } from '../../../hooks/useControllableState';\nimport {\n useReactTable, builtInSortFns,\n type ColumnDef, type SortingFn, type PaginationState, type Updater,\n} from './tanstack-table';\nimport type { DataTableProps } from './types';\nimport { createTreeSortingFns, findAllChildRowIds, prepareTreeData } from './treeDataUtils';\nimport { defaultFilterFunctions } from './utils';\n\nconst panelFilterFns = {\n text: defaultFilterFunctions.text,\n number: defaultFilterFunctions.range,\n select: (row: { getValue: (id: string) => unknown }, id: string, value: string) => {\n const cellValue = row.getValue(id);\n return cellValue !== null && cellValue !== undefined && String(cellValue) === value;\n },\n boolean: defaultFilterFunctions.boolean,\n date: defaultFilterFunctions.dateRange,\n multiSelect: defaultFilterFunctions.multiSelect,\n};\n\nfunction assertInteger(name: string, value: number, minimum = 0) {\n if (!Number.isSafeInteger(value) || value < minimum) {\n throw new RangeError(`DataTable: ${name} must be an integer >= ${minimum}.`);\n }\n}\n\n/** Shared by the view and executable row-model regression tests. */\nexport function useDataTableModel<T extends object>(props: DataTableProps<T>) {\n const {\n data, columns, getRowId, subDataKey = 'subs', enableExpanding = false,\n enableTreeSort = true, enablePagination = true, manualPagination = false,\n enableSorting = true, enableFiltering = true, enableSelection = true,\n manualSorting = false, manualFiltering = false, rowCount, pageCount,\n } = props;\n const [sorting, setSorting] = useControllableState(\n props.sortingState, props.onSortingChange, deepEqual, props.defaultSortingState ?? [],\n );\n const [rowSelection, setRowSelection] = useControllableState(\n props.selectedRows, props.onRowSelectionChange, deepEqual, props.defaultSelectedRows ?? {},\n );\n const [columnFilters, setColumnFilters] = useControllableState(\n props.columnFilters, props.onColumnFiltersChange, deepEqual, props.defaultColumnFilters ?? [],\n );\n const [visibilityState, setVisibilityState] = useControllableState(\n props.columnVisibility, props.onColumnVisibilityChange, deepEqual, props.defaultColumnVisibility ?? {},\n );\n const [columnOrder, setColumnOrderState] = useControllableState(\n props.columnOrder, props.onColumnOrderChange, deepEqual, props.defaultColumnOrder ?? [],\n );\n const [expandedRowsState, setExpandedRowsState] = useControllableState(\n props.expandedRows, props.onExpandedRowsChange, deepEqual, props.defaultExpandedRows ?? {},\n );\n const [internalPageIndex, setInternalPageIndex] = useControllableState(\n props.pageIndex, props.onPageChange, Object.is, props.defaultPageIndex ?? 0,\n );\n const [internalPageSize, setInternalPageSize] = useControllableState(\n props.pageSize, props.onPageSizeChange, Object.is, props.defaultPageSize ?? 10,\n );\n assertInteger('pageIndex', internalPageIndex);\n assertInteger('pageSize', internalPageSize, 1);\n if (manualPagination) {\n if (rowCount !== undefined) assertInteger('rowCount', rowCount);\n if (pageCount !== undefined) assertInteger('pageCount', pageCount);\n if (enablePagination && rowCount === undefined && pageCount === undefined) {\n throw new Error('DataTable: manualPagination requires rowCount or pageCount.');\n }\n }\n\n const tableData = useMemo(() => enableExpanding\n ? prepareTreeData(data, expandedRowsState, subDataKey, getRowId)\n : data, [data, enableExpanding, expandedRowsState, subDataKey, getRowId]);\n\n const processedColumns = useMemo(() => {\n const defaultSort = enableExpanding && enableTreeSort ? createTreeSortingFns<T>().treeSortAsc : undefined;\n const wrap = (defs: readonly ColumnDef<T, any>[]): ColumnDef<T, any>[] => defs.map(column => {\n if ('columns' in column) return { ...column, columns: wrap(column.columns ?? []) };\n // Panel values have a shape determined by filterType, not by the first row's data type.\n const filteredColumn = (column.filterFn === null || column.filterFn === undefined) && column.meta?.filterType\n ? { ...column, filterFn: panelFilterFns[column.meta.filterType] }\n : column;\n if (!defaultSort || filteredColumn.enableSorting === false) return filteredColumn;\n const originalSort = filteredColumn.sortFn;\n const sort = typeof originalSort === 'function' ? originalSort\n : originalSort && originalSort !== 'auto'\n ? builtInSortFns[originalSort as keyof typeof builtInSortFns] as SortingFn<T>\n : defaultSort;\n return {\n ...filteredColumn,\n // TanStack handles undefined before invoking sortFn. Disable that shortcut\n // so an undefined child value cannot reorder an otherwise unsorted subtree.\n sortUndefined: false,\n sortFn: (a, b, id) => a.depth > 0 || b.depth > 0 ? 0 : (sort ?? defaultSort)(a, b, id),\n };\n });\n return wrap(columns);\n }, [columns, enableExpanding, enableTreeSort]);\n\n const pagination = { pageIndex: internalPageIndex, pageSize: internalPageSize };\n const paginationRef = useRef(pagination);\n useLayoutEffect(() => { paginationRef.current = pagination; });\n const handlePaginationChange = useCallback((updater: Updater<PaginationState>) => {\n const current = paginationRef.current;\n const next = typeof updater === 'function' ? updater(current) : updater;\n assertInteger('pageIndex', next.pageIndex);\n assertInteger('pageSize', next.pageSize, 1);\n // Preserve pending uncontrolled slices across batched TanStack updaters,\n // while controlled slices continue to use the parent's committed values.\n paginationRef.current = {\n pageIndex: props.pageIndex === undefined ? next.pageIndex : current.pageIndex,\n pageSize: props.pageSize === undefined ? next.pageSize : current.pageSize,\n };\n setInternalPageSize(next.pageSize);\n setInternalPageIndex(next.pageIndex);\n }, [props.pageIndex, props.pageSize, setInternalPageIndex, setInternalPageSize]);\n\n const table = useReactTable<T>({\n data: tableData,\n columns: processedColumns,\n getRowId: (row, index) => enableExpanding\n ? String((row as Record<string, unknown>).__id)\n : getRowId?.(row, index) ?? String(index),\n getSubRows: enableExpanding\n ? row => (row as Record<string, unknown>)[subDataKey] as T[]\n : undefined,\n // Local pipeline sees the full hierarchy. Only server mode bypasses all\n // processing; hiding pagination alone still permits local sort/filter.\n manualPagination: manualPagination || !enablePagination,\n manualSorting: manualPagination || manualSorting || !enableSorting,\n manualFiltering: manualPagination || manualFiltering || !enableFiltering,\n pageCount: manualPagination ? pageCount : undefined,\n rowCount: manualPagination ? rowCount : undefined,\n paginateExpandedRows: false,\n maxLeafRowFilterDepth: enableExpanding ? 0 : undefined,\n enableSorting,\n enableFilters: enableFiltering,\n enableRowSelection: enableSelection,\n enableSubRowSelection: false,\n autoResetPageIndex: false,\n autoResetExpanded: false,\n state: {\n sorting, rowSelection, columnFilters, columnVisibility: visibilityState,\n columnOrder, expanded: expandedRowsState,\n pagination: { pageIndex: internalPageIndex, pageSize: internalPageSize },\n },\n onSortingChange: setSorting,\n onRowSelectionChange: setRowSelection,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setVisibilityState,\n onColumnOrderChange: setColumnOrderState,\n onExpandedChange: updater => setExpandedRowsState(previous => {\n const next = typeof updater === 'function' ? updater(previous) : updater;\n return next === true\n ? Object.fromEntries(table.getCoreRowModel().flatRows.map(row => [row.id, true]))\n : next;\n }),\n onPaginationChange: handlePaginationChange,\n });\n\n const localPageCount = table.getPageCount();\n const previousQuery = useRef({ sorting, columnFilters, size: internalPageSize });\n useEffect(() => {\n const previous = previousQuery.current;\n previousQuery.current = { sorting, columnFilters, size: internalPageSize };\n // Never rewrite a controlled page or a server request. Their owner must\n // reset/clamp the page along with the query and remote total.\n if (!enablePagination || manualPagination || props.pageIndex !== undefined) return;\n if (!deepEqual(previous.sorting, sorting) || !deepEqual(previous.columnFilters, columnFilters)\n || previous.size !== internalPageSize) {\n setInternalPageIndex(0);\n } else if (internalPageIndex >= localPageCount) {\n setInternalPageIndex(Math.max(0, localPageCount - 1));\n }\n }, [sorting, columnFilters, internalPageSize, internalPageIndex, localPageCount,\n enablePagination, manualPagination, props.pageIndex, setInternalPageIndex]);\n\n const handleRowExpand = (rowId: string, row: T) => {\n const expanded = !expandedRowsState[rowId];\n setExpandedRowsState(previous => {\n const next = { ...previous, [rowId]: expanded };\n if (!expanded) {\n findAllChildRowIds(row, rowId, subDataKey, getRowId).forEach(id => { next[id] = false; });\n }\n return next;\n });\n props.onRowExpand?.(row, expanded);\n };\n\n // TanStack owns mutable row models; snapshot IDs per render rather than\n // caching by flatRows identity, which does not guarantee unchanged contents.\n const rowIds = new Map(table.getCoreRowModel().flatRows.map(row => [row.original, row.id]));\n const resolveRowId = (row: T, index: number) =>\n rowIds.get(row) ?? getRowId?.(row, index) ?? String(index);\n\n // Derive the default order instead of notifying the parent on mount.\n const columnOrderState = table.getAllLeafColumns().map(column => column.id);\n return {\n table, rowSelection, visibilityState, columnOrderState, setColumnOrderState,\n expandedRowsState, handleRowExpand, resolveRowId,\n internalPageIndex, internalPageSize, handlePaginationChange,\n };\n}\n"],"mappings":"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"}
@@ -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":["React","utils_exports","createActionColumn","createColumn","createComputedColumn","createSelectOptions","createSelectionColumn","dateSort","utils_default","defaultFilterFunctions","extractUniqueOptions","numericSort","stringSort","treeSort","normalizeColumn","col","rest","sortingFn","accessorKeyOrOptions","headerOrNone","options","idOrOptions","accessorFnOrNone","cellOrNone","table","row","valueA","rowA","columnId","valueB","rowB","numA","numB","dateA","dateB","strA","strB","depthA","depthB","sortFn","labelField","items","item","valueField","uniqueValues","data","field","value","filterValue","numValue","min","max","dateValue","startDate","endDate","start","end"],"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,SAASc,EAAkC,GAAqC;CAC9E,IAAIC,KAAO,eAAeA,KAAOA,EAAI,aAAa,MAAM;EACtD,IAAM,EAAE,cAAW,GAAGC,MAASD;EAC/B,OAAO;GAAE,QAAQE;GAAW,GAAGD;EAAK;CACtC;CACA,OAAOD;AACT;AAGA,SAAgBZ,EACd,GACA,GACA,IAA4B,CAAC,GACf;CASZ,OAHOW,EAFL,OAAOI,KAAyB,WAEXA,IAGA;EACrB,aAAa,OAAOA,CAAoB;EACxC,QAAQC,KAAgB,OAAOD,CAAoB;EACnD,GAAGE;CACL,CAAC;AAEL;AAGA,SAAgBhB,EACd,GACA,GACA,GACA,IAAiC,CAAC,GACpB;CAOZ,OALE,OAAOiB,KAAgB,WAElBA,IAGA;EACL,IAAIA;EACJ,QAAQF,KAAgBE;EACxB,YAAYC;EACZ,GAAGF;CACL;AAEJ;AAGA,SAAgBlB,EACd,GACA,GACA,GACA,IAAiC,CAAC,GACpB;CAUZ,OARE,OAAOmB,KAAgB,WAElB;EACL,eAAe;EACf,GAAGA;CACL,IAGO;EACL,IAAIA;EACJ,QAAQF,KAAgBE;EACxB,MAAME;EACN,eAAe;EACf,GAAGH;CACL;AAEJ;AAGA,SAAgBd,EACd,IAAiC,CAAC,GACpB;CAsBd,OAAO;EApBL,IAAI;EACJ,SAAS,EAAE,eACTN,EAAM,cAAc,SAAS;GAC3B,MAAM;GACN,SAASwB,EAAM,qBAAqB;GACpC,UAAUA,EAAM,gCAAgC;GAChD,WAAW;EACb,CAAC;EACH,OAAO,EAAE,aACPxB,EAAM,cAAc,SAAS;GAC3B,MAAM;GACN,SAASyB,EAAI,cAAc;GAC3B,UAAUA,EAAI,yBAAyB;GACvC,WAAW;GACX,UAAU,MAAwB,EAAE,gBAAgB;EACtD,CAAC;EACH,eAAe;EAIK,GAAGL;CAAQ;AACnC;AAGA,IAAaT,KAA+B,GAAM,GAAM,MAAa;CACnE,IAAMe,IAASC,EAAK,SAASC,CAAQ,GAC/BC,IAASC,EAAK,SAASF,CAAQ;CAGrC,IAAIF,KAAU,QAAQG,KAAU,MAAM,OAAO;CAC7C,IAAIH,KAAU,MAAM,OAAO;CAC3B,IAAIG,KAAU,MAAM,OAAO;CAG3B,IAAME,IAAO,OAAOL,KAAW,WAAW,WAAWA,CAAM,IAAI,OAAOA,CAAM,GACtEM,IAAO,OAAOH,KAAW,WAAW,WAAWA,CAAM,IAAI,OAAOA,CAAM;CAM5E,OAJI,OAAO,MAAME,CAAI,KAAK,OAAO,MAAMC,CAAI,IAAU,IACjD,OAAO,MAAMD,CAAI,IAAU,KAC3B,OAAO,MAAMC,CAAI,IAAU,IAExBD,IAAOC;AAChB,GAGazB,KAA4B,GAAM,GAAM,MAAa;CAChE,IAAMmB,IAASC,EAAK,SAASC,CAAQ,GAC/BC,IAASC,EAAK,SAASF,CAAQ;CAGrC,IAAIF,KAAU,QAAQG,KAAU,MAAM,OAAO;CAC7C,IAAIH,KAAU,MAAM,OAAO;CAC3B,IAAIG,KAAU,MAAM,OAAO;CAG3B,IAAMI,IAAQP,aAAkB,OAAOA,IAAS,IAAI,KAAK,OAAOA,CAAM,CAAC,GACjEQ,IAAQL,aAAkB,OAAOA,IAAS,IAAI,KAAK,OAAOA,CAAM,CAAC;CAOvE,OAJI,MAAMI,EAAM,QAAQ,CAAC,KAAK,MAAMC,EAAM,QAAQ,CAAC,IAAU,IACzD,MAAMD,EAAM,QAAQ,CAAC,IAAU,KAC/B,MAAMC,EAAM,QAAQ,CAAC,IAAU,IAE5BD,EAAM,QAAQ,IAAIC,EAAM,QAAQ;AACzC,GAGatB,KAA8B,GAAM,GAAM,MAAa;CAClE,IAAMc,IAASC,EAAK,SAASC,CAAQ,GAC/BC,IAASC,EAAK,SAASF,CAAQ;CAGrC,IAAIF,KAAU,QAAQG,KAAU,MAAM,OAAO;CAC7C,IAAIH,KAAU,MAAM,OAAO;CAC3B,IAAIG,KAAU,MAAM,OAAO;CAG3B,IAAMM,IAAO,OAAOT,CAAM,CAAC,CAAC,YAAY,GAClCU,IAAO,OAAOP,CAAM,CAAC,CAAC,YAAY;CAExC,OAAOM,EAAK,cAAcC,CAAI;AAChC,GAcavB,KACX,GACA,OAEQ,GAAM,GAAM,MAAa;CAC/B,IAAMa,IAASC,EAAK,UACdE,IAASC,EAAK,UAGdO,IAASX,EAAO,YAAY,KAAA,IAA6B,IAAjBA,EAAO,SAC/CY,IAAST,EAAO,YAAY,KAAA,IAA6B,IAAjBA,EAAO;CAcrD,OAVIQ,MAAWC,KAKXD,MAAW,KAAKC,MAAW,IACtBC,EAAOZ,GAAMG,GAAMF,CAAQ,IAI7B;AACT;AAIF,SAAgBvB,EACd,GACA,GACA,IAAsBmC,GACtB;CACA,OAAOC,EAAM,KAAI,OAAS;EACxB,OAAO,OAAOC,EAAKF,EAAW;EAC9B,OAAO,OAAOE,EAAKC,EAAW;CAChC,EAAE;AACJ;AAGA,SAAgBjC,EACd,GACA,GACA;CACA,IAAMkC,oBAAe,IAAI,IAAS;CAQlC,OANAC,EAAK,SAAQ,MAAQ;EACnB,AAAIH,EAAKI,MAAU,QACjBF,EAAa,IAAIF,EAAKI,EAAM;CAEhC,CAAC,GAEM,MAAM,KAAKF,CAAY,CAAC,CAAC,KAAI,OAAU;EAC5C,OAAO,OAAOG,CAAK;EACnB,OAAO,OAAOA,CAAK;CACrB,EAAE;AACJ;AAGA,IAAatC,IAAyB;CAEpC,OAAO,GAAU,GAAkB,MAAwB;EACzD,IAAMsC,IAAQtB,EAAI,SAASG,CAAQ;EAEnC,OADImB,KAAS,QACN,OAAOA,CAAK,CAAC,CAAC,YAAY,CAAC,CAAC,SAASC,EAAY,YAAY,CAAC;CACvE;CAGA,QAAQ,GAAU,GAAkB,MAA0D;EAC5F,IAAMD,IAAQtB,EAAI,SAASG,CAAQ;EACnC,IAAImB,KAAS,MAAM,OAAO;EAE1B,IAAME,IAAW,OAAOF,KAAU,WAAW,WAAWA,CAAK,IAAIA;EACjE,IAAI,MAAME,CAAQ,GAAG,OAAO;EAE5B,IAAM,CAACC,GAAKC,KAAOH;EAInB,OAFA,EADIE,MAAQ,KAAA,KAAaD,IAAWC,KAChCC,MAAQ,KAAA,KAAaF,IAAWE;CAGtC;CAGA,YAAY,GAAU,GAAkB,MAA0D;EAChG,IAAMJ,IAAQtB,EAAI,SAASG,CAAQ;EACnC,IAAImB,KAAS,MAAM,OAAO;EAE1B,IAAMK,IAAYL,aAAiB,OAAOA,IAAQ,IAAI,KAAKA,CAAK;EAChE,IAAI,MAAMK,EAAU,QAAQ,CAAC,GAAG,OAAO;EAEvC,IAAM,CAACC,GAAWC,KAAWN;EAE7B,IAAIK,GAAW;GACb,IAAME,IAAQ,IAAI,KAAKF,CAAS;GAEhC,IADAE,EAAM,SAAS,GAAG,GAAG,GAAG,CAAC,GACrBH,IAAYG,GAAO,OAAO;EAChC;EAEA,IAAID,GAAS;GACX,IAAME,IAAM,IAAI,KAAKF,CAAO;GAE5B,IADAE,EAAI,SAAS,IAAI,IAAI,IAAI,GAAG,GACxBJ,IAAYI,GAAK,OAAO;EAC9B;EAEA,OAAO;CACT;CAGA,UAAU,GAAU,GAAkB,MAAyB;EAC7D,IAAMT,IAAQtB,EAAI,SAASG,CAAQ;EAEnC,OADImB,KAAS,QACNA,MAAUC;CACnB;CAGA,cAAc,GAAU,GAAkB,MAA0B;EAClE,IAAMD,IAAQtB,EAAI,SAASG,CAAQ;EAEnC,OADImB,KAAS,QACNC,EAAY,SAAS,OAAOD,CAAK,CAAC;CAC3C;AACF,GAEAvC,IAAe;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -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 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 setTreeData(prev => updateNodes(prev));\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":["Tree","React","defaultLabels","HomeIcon","ChevronIcon","FolderIcon","DocumentIcon","BreadcrumbDropTree","treeData","setTreeData","useState","loading","setLoading","loadPath","useCallback","adapter","dirPath","a","b","mounted","path","nodes","handleToggle","expanded","idStr","nodeId","findNode","targetId","found","node","childrenNodes","updateNodes","n","prev","handleClick","onNavigate","ChevronDrop","open","setOpen","ref","useRef","useClickOutside","p","pathSegments","parts","segments","i","Breadcrumb","userLabels","labels","isRoot","isLast","idx","seg"],"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 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 setTreeData(prev => updateNodes(prev));\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 +1 @@
1
- {"version":3,"file":"CreateDialog.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/CreateDialog.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport { CreateDialogProps } from './types';\nimport Button from '../../Button';\nimport Input from '../../Input';\n\nconst defaultLabels = {\n newFolder: 'New Folder',\n newFile: 'New File',\n create: 'Create',\n cancel: 'Cancel',\n folderNamePlaceholder: 'Folder name',\n fileNamePlaceholder: 'File name',\n};\n\nexport const CreateDialog: React.FC<CreateDialogProps> = ({\n type,\n labels: userLabels,\n onConfirm,\n onCancel,\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n const [name, setName] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n // Auto-focus the input with a small delay for animation\n const timer = setTimeout(() => {\n inputRef.current?.focus();\n }, 50);\n return () => clearTimeout(timer);\n }, []);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (trimmed) {\n onConfirm(trimmed);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel();\n }\n };\n\n return (\n <div className=\"flex items-center gap-2 px-3 py-2 bg-base-200/80 rounded-lg border border-base-300 animate-in\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 opacity-50 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n {type === 'folder' ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n ) : (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n )}\n </svg>\n\n <form onSubmit={handleSubmit} className=\"flex items-center gap-2 flex-1\" onKeyDown={handleKeyDown}>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"input input-sm input-bordered flex-1 min-w-0\"\n placeholder={type === 'folder' ? labels.folderNamePlaceholder : labels.fileNamePlaceholder}\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n <Button\n variant=\"primary\"\n size=\"xs\"\n disabled={!name.trim()}\n onClick={() => { if (name.trim()) onConfirm(name.trim()); }}\n >\n {labels.create}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={onCancel}\n >\n {labels.cancel}\n </Button>\n </form>\n </div>\n );\n};\n"],"mappings":";;;;AAKA,IAAM,IAAgB;CAClB,WAAW;CACX,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,uBAAuB;CACvB,qBAAqB;AACzB,GAEa,KAA6C,EACtD,SACA,QAAQ,GACR,cACA,kBACE;CACF,IAAM,IAAS;EAAE,GAAG;EAAe,GAAG;CAAW,GAC3C,CAAC,GAAM,KAAW,EAAS,EAAE,GAC7B,IAAW,EAAyB,IAAI;CAwB9C,OAtBA,QAAgB;EAEZ,IAAM,IAAQ,iBAAiB;GAC3B,EAAS,SAAS,MAAM;EAC5B,GAAG,EAAE;EACL,aAAa,aAAa,CAAK;CACnC,GAAG,CAAC,CAAC,GAiBD,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,kBAAC,OAAD;GAAK,OAAM;GAA6B,WAAU;GAAmC,MAAK;GAAO,SAAQ;GAAY,QAAO;GAAe,aAAa;GACnJ,UAAA,MAAS,WACN,kBAAC,QAAD;IAAM,eAAc;IAAQ,gBAAe;IAAQ,GAAE;GAAwF,CAAA,IAE7I,kBAAC,QAAD;IAAM,eAAc;IAAQ,gBAAe;IAAQ,GAAE;GAAwH,CAAA;EAEhL,CAAA,GAEL,kBAAC,QAAD;GAAM,WAxBQ,MAAuB;IACzC,EAAE,eAAe;IACjB,IAAM,IAAU,EAAK,KAAK;IAC1B,AAAI,KACA,EAAU,CAAO;GAEzB;GAkBsC,WAAU;GAAiC,YAhB1D,MAA2B;IAC9C,AAAI,EAAE,QAAQ,YACV,EAAS;GAEjB;GAYQ,UAAA;IACI,kBAAC,SAAD;KACI,KAAK;KACL,MAAK;KACL,WAAU;KACV,aAAa,MAAS,WAAW,EAAO,wBAAwB,EAAO;KACvE,OAAO;KACP,WAAW,MAAM,EAAQ,EAAE,OAAO,KAAK;IAC1C,CAAA;IACD,kBAAC,GAAD;KACI,SAAQ;KACR,MAAK;KACL,UAAU,CAAC,EAAK,KAAK;KACrB,eAAe;MAAE,AAAI,EAAK,KAAK,KAAG,EAAU,EAAK,KAAK,CAAC;KAAG;KAEzD,UAAA,EAAO;IACJ,CAAA;IACR,kBAAC,GAAD;KACI,SAAQ;KACR,MAAK;KACL,SAAS;KAER,UAAA,EAAO;IACJ,CAAA;GACN;EACL,CAAA,CAAA;;AAEb"}
1
+ {"version":3,"file":"CreateDialog.js","names":["Button","ButtonWithCompounds","defaultLabels","CreateDialog","userLabels","labels","name","setName","useState","inputRef","useRef","useEffect","timer","type","trimmed","onConfirm","onCancel"],"sources":["../../../../src/components/pro/FileExplorer/CreateDialog.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport { CreateDialogProps } from './types';\nimport Button from '../../Button';\nimport Input from '../../Input';\n\nconst defaultLabels = {\n newFolder: 'New Folder',\n newFile: 'New File',\n create: 'Create',\n cancel: 'Cancel',\n folderNamePlaceholder: 'Folder name',\n fileNamePlaceholder: 'File name',\n};\n\nexport const CreateDialog: React.FC<CreateDialogProps> = ({\n type,\n labels: userLabels,\n onConfirm,\n onCancel,\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n const [name, setName] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n // Auto-focus the input with a small delay for animation\n const timer = setTimeout(() => {\n inputRef.current?.focus();\n }, 50);\n return () => clearTimeout(timer);\n }, []);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (trimmed) {\n onConfirm(trimmed);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel();\n }\n };\n\n return (\n <div className=\"flex items-center gap-2 px-3 py-2 bg-base-200/80 rounded-lg border border-base-300 animate-in\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 opacity-50 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n {type === 'folder' ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n ) : (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n )}\n </svg>\n\n <form onSubmit={handleSubmit} className=\"flex items-center gap-2 flex-1\" onKeyDown={handleKeyDown}>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"input input-sm input-bordered flex-1 min-w-0\"\n placeholder={type === 'folder' ? labels.folderNamePlaceholder : labels.fileNamePlaceholder}\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n <Button\n variant=\"primary\"\n size=\"xs\"\n disabled={!name.trim()}\n onClick={() => { if (name.trim()) onConfirm(name.trim()); }}\n >\n {labels.create}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={onCancel}\n >\n {labels.cancel}\n </Button>\n </form>\n </div>\n );\n};\n"],"mappings":";;;;AAKA,IAAME,IAAgB;CAClB,WAAW;CACX,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,uBAAuB;CACvB,qBAAqB;AACzB,GAEaC,KAA6C,EACtD,SACA,QAAQC,GACR,cACA,kBACE;CACF,IAAMC,IAAS;EAAE,GAAGH;EAAe,GAAGE;CAAW,GAC3C,CAACE,GAAMC,KAAWC,EAAS,EAAE,GAC7BC,IAAWC,EAAyB,IAAI;CAwB9C,OAtBAC,QAAgB;EAEZ,IAAMC,IAAQ,iBAAiB;GAC3B,EAAS,SAAS,MAAM;EAC5B,GAAG,EAAE;EACL,aAAa,aAAaA,CAAK;CACnC,GAAG,CAAC,CAAC,GAiBD,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,kBAAC,OAAD;GAAK,OAAM;GAA6B,WAAU;GAAmC,MAAK;GAAO,SAAQ;GAAY,QAAO;GAAe,aAAa;GACnJ,UAAAC,MAAS,WACN,kBAAC,QAAD;IAAM,eAAc;IAAQ,gBAAe;IAAQ,GAAE;GAAwF,CAAA,IAE7I,kBAAC,QAAD;IAAM,eAAc;IAAQ,gBAAe;IAAQ,GAAE;GAAwH,CAAA;EAEhL,CAAA,GAEL,kBAAC,QAAD;GAAM,WAxBQ,MAAuB;IACzC,EAAE,eAAe;IACjB,IAAMC,IAAUR,EAAK,KAAK;IAC1B,AAAIQ,KACAC,EAAUD,CAAO;GAEzB;GAkBsC,WAAU;GAAiC,YAhB1D,MAA2B;IAC9C,AAAI,EAAE,QAAQ,YACVE,EAAS;GAEjB;GAYQ,UAAA;IACI,kBAAC,SAAD;KACI,KAAKP;KACL,MAAK;KACL,WAAU;KACV,aAAaI,MAAS,WAAWR,EAAO,wBAAwBA,EAAO;KACvE,OAAOC;KACP,WAAW,MAAMC,EAAQ,EAAE,OAAO,KAAK;IAC1C,CAAA;IACD,kBAACP,GAAD;KACI,SAAQ;KACR,MAAK;KACL,UAAU,CAACM,EAAK,KAAK;KACrB,eAAe;MAAE,AAAIA,EAAK,KAAK,KAAGS,EAAUT,EAAK,KAAK,CAAC;KAAG;KAEzD,UAAAD,EAAO;IACJ,CAAA;IACR,kBAACL,GAAD;KACI,SAAQ;KACR,MAAK;KACL,SAASgB;KAER,UAAAX,EAAO;IACJ,CAAA;GACN;EACL,CAAA,CAAA;;AAEb"}