dishui 0.0.65 → 0.0.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +10 -11
  2. package/dist/chart.js +12 -46
  3. package/dist/code-editor.js +16 -43
  4. package/dist/components/Accordion/index.d.ts +39 -0
  5. package/dist/components/Accordion/index.js +70 -0
  6. package/dist/components/Accordion/index.js.map +1 -0
  7. package/dist/components/Avatar/index.d.ts +48 -0
  8. package/dist/components/Avatar/index.js +71 -0
  9. package/dist/components/Avatar/index.js.map +1 -0
  10. package/dist/components/Badge/index.js +10 -15
  11. package/dist/components/Badge/index.js.map +1 -1
  12. package/dist/components/Button/index.js +62 -89
  13. package/dist/components/Button/index.js.map +1 -1
  14. package/dist/components/Card/index.d.ts +142 -0
  15. package/dist/components/Card/index.js +368 -69
  16. package/dist/components/Card/index.js.map +1 -1
  17. package/dist/components/Chart/Chart.js +25 -25
  18. package/dist/components/Chart/Chart.js.map +1 -1
  19. package/dist/components/Checkbox/index.js +57 -65
  20. package/dist/components/Checkbox/index.js.map +1 -1
  21. package/dist/components/ChoicePicker/index.d.ts +44 -0
  22. package/dist/components/ChoicePicker/index.js +81 -0
  23. package/dist/components/ChoicePicker/index.js.map +1 -0
  24. package/dist/components/Column/index.d.ts +28 -0
  25. package/dist/components/Column/index.js +30 -0
  26. package/dist/components/Column/index.js.map +1 -0
  27. package/dist/components/DateTimeInput/index.d.ts +44 -0
  28. package/dist/components/DateTimeInput/index.js +48 -0
  29. package/dist/components/DateTimeInput/index.js.map +1 -0
  30. package/dist/components/Demo/index.js +107 -107
  31. package/dist/components/Demo/index.js.map +1 -1
  32. package/dist/components/Divider/index.d.ts +20 -0
  33. package/dist/components/Divider/index.js +30 -0
  34. package/dist/components/Divider/index.js.map +1 -0
  35. package/dist/components/EmptyState/index.js +24 -24
  36. package/dist/components/EmptyState/index.js.map +1 -1
  37. package/dist/components/FileUploader/DropZone.js +134 -136
  38. package/dist/components/FileUploader/DropZone.js.map +1 -1
  39. package/dist/components/FileUploader/FileItem.js +159 -163
  40. package/dist/components/FileUploader/FileItem.js.map +1 -1
  41. package/dist/components/FileUploader/FileUploader.js +126 -127
  42. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  43. package/dist/components/FileUploader/UploadQueue.js +62 -62
  44. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  45. package/dist/components/FloatWindow/index.d.ts +28 -0
  46. package/dist/components/GridLayout/index.d.ts +42 -0
  47. package/dist/components/Icon/index.d.ts +26 -0
  48. package/dist/components/Icon/index.js +27 -0
  49. package/dist/components/Icon/index.js.map +1 -0
  50. package/dist/components/Image/index.d.ts +33 -0
  51. package/dist/components/Image/index.js +44 -0
  52. package/dist/components/Image/index.js.map +1 -0
  53. package/dist/components/Input/index.js +196 -197
  54. package/dist/components/Input/index.js.map +1 -1
  55. package/dist/components/Label/index.js +62 -74
  56. package/dist/components/Label/index.js.map +1 -1
  57. package/dist/components/Layout/index.js +134 -139
  58. package/dist/components/Layout/index.js.map +1 -1
  59. package/dist/components/List/index.js +45 -58
  60. package/dist/components/List/index.js.map +1 -1
  61. package/dist/components/Markdown/Markdown.js +106 -107
  62. package/dist/components/Markdown/Markdown.js.map +1 -1
  63. package/dist/components/Markdown/codeThemes.js +24 -33
  64. package/dist/components/Markdown/codeThemes.js.map +1 -1
  65. package/dist/components/Markdown/markdownComponents.js +203 -208
  66. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  67. package/dist/components/Markdown/parseCodeBlockMeta.js +22 -22
  68. package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
  69. package/dist/components/Markdown/useMarkdownSource.js +46 -46
  70. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  71. package/dist/components/Markdown/useMarkmapRenderer.js +35 -36
  72. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  73. package/dist/components/Markdown/useMermaidRenderer.js +41 -42
  74. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  75. package/dist/components/Modal/index.js +82 -82
  76. package/dist/components/Modal/index.js.map +1 -1
  77. package/dist/components/MultipleChoice/index.d.ts +44 -0
  78. package/dist/components/MultipleChoice/index.js +52 -0
  79. package/dist/components/MultipleChoice/index.js.map +1 -0
  80. package/dist/components/Notification/index.d.ts +17 -0
  81. package/dist/components/Page/index.d.ts +1 -1
  82. package/dist/components/Page/index.js +40 -71
  83. package/dist/components/Page/index.js.map +1 -1
  84. package/dist/components/PageHeader/index.js +28 -28
  85. package/dist/components/PageHeader/index.js.map +1 -1
  86. package/dist/components/ProtectedRoute/index.js +8 -9
  87. package/dist/components/ProtectedRoute/index.js.map +1 -1
  88. package/dist/components/Row/index.d.ts +28 -0
  89. package/dist/components/Row/index.js +30 -0
  90. package/dist/components/Row/index.js.map +1 -0
  91. package/dist/components/Select/index.js +251 -254
  92. package/dist/components/Select/index.js.map +1 -1
  93. package/dist/components/SidebarToggleButton/index.js +56 -59
  94. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  95. package/dist/components/Slider/index.d.ts +39 -0
  96. package/dist/components/Slider/index.js +52 -0
  97. package/dist/components/Slider/index.js.map +1 -0
  98. package/dist/components/Switch/index.d.ts +34 -0
  99. package/dist/components/Switch/index.js +55 -0
  100. package/dist/components/Switch/index.js.map +1 -0
  101. package/dist/components/Tab/index.d.ts +40 -0
  102. package/dist/components/Table/index.js +109 -121
  103. package/dist/components/Table/index.js.map +1 -1
  104. package/dist/components/Tabs/index.js +28 -38
  105. package/dist/components/Tabs/index.js.map +1 -1
  106. package/dist/components/Text/index.d.ts +43 -0
  107. package/dist/components/Text/index.js +55 -0
  108. package/dist/components/Text/index.js.map +1 -0
  109. package/dist/components/Tooltip/index.d.ts +23 -0
  110. package/dist/components/Tooltip/index.js +34 -0
  111. package/dist/components/Tooltip/index.js.map +1 -0
  112. package/dist/components/Tree/Tree.js +205 -205
  113. package/dist/components/Tree/Tree.js.map +1 -1
  114. package/dist/components/pro/ArticleContextMenu/index.js +86 -87
  115. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  116. package/dist/components/pro/ArticleControl/ArticleControl2.js +250 -250
  117. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  118. package/dist/components/pro/ArticleControl/buildHeadingTree.js +31 -32
  119. package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
  120. package/dist/components/pro/ArticleControl/useArticleToc.js +100 -102
  121. package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
  122. package/dist/components/pro/Calendar/Calendar.d.ts +10 -0
  123. package/dist/components/pro/Calendar/hooks/useCalendarDrag.d.ts +47 -0
  124. package/dist/components/pro/Calendar/hooks/useCalendarState.d.ts +56 -0
  125. package/dist/components/pro/Calendar/index.d.ts +7 -0
  126. package/dist/components/pro/Calendar/types.d.ts +151 -0
  127. package/dist/components/pro/Calendar/utils.d.ts +94 -0
  128. package/dist/components/pro/Chat/Chat.d.ts +6 -0
  129. package/dist/components/pro/Chat/index.d.ts +2 -0
  130. package/dist/components/pro/Chat/types.d.ts +84 -0
  131. package/dist/components/pro/CodeEditor/editors/CodeEditor.js +287 -327
  132. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  133. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -224
  134. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  135. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js +594 -613
  136. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
  137. package/dist/components/pro/CodeEditor/extensions/contextMenu.js +54 -55
  138. package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
  139. package/dist/components/pro/CodeEditor/extensions/index.js +152 -160
  140. package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
  141. package/dist/components/pro/CodeEditor/langs/index.js +7 -15
  142. package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
  143. package/dist/components/pro/CodeEditor/langs/javascript.js +11 -48
  144. package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
  145. package/dist/components/pro/CodeEditor/langs/python.js +4 -40
  146. package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
  147. package/dist/components/pro/CodeEditor/langs/snippets.js +118 -147
  148. package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
  149. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js +153 -153
  150. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  151. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +180 -190
  152. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  153. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js +130 -137
  154. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  155. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js +228 -242
  156. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  157. package/dist/components/pro/CodeEditor/panels/VariablePanel.js +208 -248
  158. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  159. package/dist/components/pro/CodeEditor/themes.js +513 -483
  160. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  161. package/dist/components/pro/CodeEditor/types.d.ts +1 -1
  162. package/dist/components/pro/CodeEditor/utils.js +171 -175
  163. package/dist/components/pro/CodeEditor/utils.js.map +1 -1
  164. package/dist/components/pro/DataTable/DataTable.js +305 -306
  165. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  166. package/dist/components/pro/DataTable/Filters.js +299 -314
  167. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  168. package/dist/components/pro/DataTable/PivotPanel.js +203 -204
  169. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  170. package/dist/components/pro/DataTable/PivotView.js +142 -144
  171. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  172. package/dist/components/pro/DataTable/components/BulkActions.js +42 -42
  173. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  174. package/dist/components/pro/DataTable/components/ColumnSelector.js +84 -84
  175. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  176. package/dist/components/pro/DataTable/components/FilterBar.js +58 -58
  177. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  178. package/dist/components/pro/DataTable/components/TableBody.js +93 -94
  179. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  180. package/dist/components/pro/DataTable/components/TableHeader.js +78 -78
  181. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  182. package/dist/components/pro/DataTable/components/TablePagination.js +77 -77
  183. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  184. package/dist/components/pro/DataTable/components/TableToolbar.js +40 -40
  185. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  186. package/dist/components/pro/DataTable/extension.js +5 -5
  187. package/dist/components/pro/DataTable/extension.js.map +1 -1
  188. package/dist/components/pro/DataTable/pivotEngine.js +84 -92
  189. package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
  190. package/dist/components/pro/DataTable/pivotExtension.js +93 -93
  191. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  192. package/dist/components/pro/DataTable/rowDetailExtension.js +30 -30
  193. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  194. package/dist/components/pro/DataTable/tanstack-table.js +45 -62
  195. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  196. package/dist/components/pro/DataTable/treeDataUtils.js +37 -48
  197. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  198. package/dist/components/pro/DataTable/useColumnDragReorder.js +68 -68
  199. package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
  200. package/dist/components/pro/DataTable/utils.js +156 -168
  201. package/dist/components/pro/DataTable/utils.js.map +1 -1
  202. package/dist/components/pro/FileExplorer/Breadcrumb.js +180 -180
  203. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  204. package/dist/components/pro/FileExplorer/CreateDialog.js +78 -78
  205. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  206. package/dist/components/pro/FileExplorer/FileExplorer.js +202 -205
  207. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  208. package/dist/components/pro/FileExplorer/FileIcon.js +189 -189
  209. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  210. package/dist/components/pro/FileExplorer/GridView.js +100 -100
  211. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  212. package/dist/components/pro/FileExplorer/ListView.js +209 -209
  213. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  214. package/dist/components/pro/FileExplorer/Toolbar.js +199 -199
  215. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  216. package/dist/components/pro/Flow/Flow.js +920 -948
  217. package/dist/components/pro/Flow/Flow.js.map +1 -1
  218. package/dist/components/pro/Flow/FlowCanvas.js +1626 -1662
  219. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  220. package/dist/components/pro/Flow/archify/build.js +85 -94
  221. package/dist/components/pro/Flow/archify/build.js.map +1 -1
  222. package/dist/components/pro/Flow/archify/convert.js +512 -519
  223. package/dist/components/pro/Flow/archify/convert.js.map +1 -1
  224. package/dist/components/pro/Flow/archify/palette.js +87 -104
  225. package/dist/components/pro/Flow/archify/palette.js.map +1 -1
  226. package/dist/components/pro/Flow/archify/presets.js +34 -37
  227. package/dist/components/pro/Flow/archify/presets.js.map +1 -1
  228. package/dist/components/pro/Flow/archify/spec.js +7 -7
  229. package/dist/components/pro/Flow/archify/spec.js.map +1 -1
  230. package/dist/components/pro/Flow/canvas/AlignmentGuides.js +25 -25
  231. package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
  232. package/dist/components/pro/Flow/canvas/GridRenderer.js +54 -55
  233. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  234. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +54 -58
  235. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  236. package/dist/components/pro/Flow/canvas/PixiApp.js +105 -102
  237. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  238. package/dist/components/pro/Flow/canvas/SelectionOverlay.js +38 -38
  239. package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
  240. package/dist/components/pro/Flow/canvas/ViewportContainer.js +117 -117
  241. package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
  242. package/dist/components/pro/Flow/constants.js +266 -278
  243. package/dist/components/pro/Flow/constants.js.map +1 -1
  244. package/dist/components/pro/Flow/context/FlowAIContext.js +27 -28
  245. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
  246. package/dist/components/pro/Flow/context/FlowContext.js +60 -61
  247. package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
  248. package/dist/components/pro/Flow/context/FlowUIContext.js +115 -117
  249. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  250. package/dist/components/pro/Flow/edges/EdgeRenderer.js +135 -138
  251. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  252. package/dist/components/pro/Flow/edges/edgeMarkers.js +11 -14
  253. package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
  254. package/dist/components/pro/Flow/edges/edgePaths.js +351 -367
  255. package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
  256. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js +49 -52
  257. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
  258. package/dist/components/pro/Flow/hooks/useClipboard.js +154 -154
  259. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  260. package/dist/components/pro/Flow/hooks/useCompactMode.js +17 -17
  261. package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
  262. package/dist/components/pro/Flow/hooks/useDeleteSelection.js +40 -40
  263. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  264. package/dist/components/pro/Flow/hooks/useDraggablePanel.js +51 -51
  265. package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
  266. package/dist/components/pro/Flow/hooks/useEdgeMutations.js +157 -157
  267. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  268. package/dist/components/pro/Flow/hooks/useFlowImportExport.js +190 -201
  269. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  270. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js +32 -38
  271. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
  272. package/dist/components/pro/Flow/hooks/useLayoutActions.js +172 -180
  273. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  274. package/dist/components/pro/Flow/hooks/useLineMutations.js +57 -57
  275. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  276. package/dist/components/pro/Flow/hooks/useMindMap.js +229 -238
  277. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  278. package/dist/components/pro/Flow/hooks/useNodeMutations.js +102 -102
  279. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  280. package/dist/components/pro/Flow/hooks/usePdfExport.js +55 -56
  281. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
  282. package/dist/components/pro/Flow/hooks/usePixiApp.js +55 -57
  283. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  284. package/dist/components/pro/Flow/hooks/useResizablePanel.js +31 -31
  285. package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
  286. package/dist/components/pro/Flow/hooks/useSelection.js +69 -69
  287. package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
  288. package/dist/components/pro/Flow/hooks/useUndoRedo.js +27 -27
  289. package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
  290. package/dist/components/pro/Flow/hooks/useViewport.js +28 -28
  291. package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
  292. package/dist/components/pro/Flow/lines/FreehandTool.js +63 -63
  293. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  294. package/dist/components/pro/Flow/lines/GeometricLineTool.js +80 -80
  295. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  296. package/dist/components/pro/Flow/lines/LineRenderer.js +88 -88
  297. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  298. package/dist/components/pro/Flow/lines/lineSmoothing.js +32 -34
  299. package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
  300. package/dist/components/pro/Flow/nodes/DataNodeView.js +236 -242
  301. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  302. package/dist/components/pro/Flow/nodes/MediaContent.js +236 -246
  303. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  304. package/dist/components/pro/Flow/nodes/MediaOverlay.js +63 -63
  305. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  306. package/dist/components/pro/Flow/nodes/Model3DView.js +111 -113
  307. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  308. package/dist/components/pro/Flow/nodes/NodeHandles.js +74 -80
  309. package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
  310. package/dist/components/pro/Flow/nodes/NodeRenderer.js +303 -314
  311. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  312. package/dist/components/pro/Flow/nodes/NodeText.js +25 -29
  313. package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
  314. package/dist/components/pro/Flow/nodes/aiClient.js +124 -137
  315. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  316. package/dist/components/pro/Flow/nodes/animAnchors.js +42 -49
  317. package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
  318. package/dist/components/pro/Flow/nodes/dataUtils.js +246 -267
  319. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  320. package/dist/components/pro/Flow/nodes/nodeUtils.js +23 -28
  321. package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
  322. package/dist/components/pro/Flow/nodes/shapes.js +556 -589
  323. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  324. package/dist/components/pro/Flow/nodes/svgIconTexture.js +37 -39
  325. package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
  326. package/dist/components/pro/Flow/nodes/svgIcons.js +684 -689
  327. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  328. package/dist/components/pro/Flow/panels/AIPanel.js +464 -491
  329. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  330. package/dist/components/pro/Flow/panels/Breadcrumb.js +41 -41
  331. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  332. package/dist/components/pro/Flow/panels/ContextMenu.js +37 -37
  333. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  334. package/dist/components/pro/Flow/panels/DataInspectorSection.js +428 -432
  335. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  336. package/dist/components/pro/Flow/panels/ExpandableTextarea.js +61 -62
  337. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  338. package/dist/components/pro/Flow/panels/FlowPanelGroup.js +114 -114
  339. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  340. package/dist/components/pro/Flow/panels/FlowToolbar.js +347 -391
  341. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  342. package/dist/components/pro/Flow/panels/InspectorPanel.js +1792 -1798
  343. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  344. package/dist/components/pro/Flow/panels/OutlinePanel.js +242 -248
  345. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  346. package/dist/components/pro/Flow/panels/PresentationMode.js +137 -140
  347. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  348. package/dist/components/pro/Flow/panels/ProjectTitle.js +46 -46
  349. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  350. package/dist/components/pro/Flow/panels/ShapePalette.js +557 -572
  351. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  352. package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +0 -1
  353. package/dist/components/pro/Flow/panels/toolbarIcons.js +508 -557
  354. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  355. package/dist/components/pro/Flow/types.js +26 -26
  356. package/dist/components/pro/Flow/types.js.map +1 -1
  357. package/dist/components/pro/Flow/utils/dashedLine.js +113 -117
  358. package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
  359. package/dist/components/pro/Flow/utils/gradient.js +55 -55
  360. package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
  361. package/dist/components/pro/Flow/utils/pdfExport.js +50 -89
  362. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
  363. package/dist/components/pro/Flow/utils/themeColor.js +185 -195
  364. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  365. package/dist/components/pro/Gantt/Gantt.d.ts +7 -0
  366. package/dist/components/pro/Gantt/hooks/useGanttDrag.d.ts +31 -0
  367. package/dist/components/pro/Gantt/hooks/useGanttState.d.ts +58 -0
  368. package/dist/components/pro/Gantt/index.d.ts +6 -0
  369. package/dist/components/pro/Gantt/types.d.ts +478 -0
  370. package/dist/components/pro/Gantt/utils.d.ts +124 -0
  371. package/dist/components/pro/Resizable/Resizable.d.ts +30 -0
  372. package/dist/components/pro/Resizable/index.d.ts +2 -0
  373. package/dist/components/pro/RichTextEditor/AIRewrite.js +323 -334
  374. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  375. package/dist/components/pro/RichTextEditor/BlockHandle.js +314 -316
  376. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  377. package/dist/components/pro/RichTextEditor/BubbleToolbar.js +97 -97
  378. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  379. package/dist/components/pro/RichTextEditor/CommentDialog.js +88 -88
  380. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  381. package/dist/components/pro/RichTextEditor/CommentPanel.js +240 -240
  382. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  383. package/dist/components/pro/RichTextEditor/CommentPopover.js +234 -234
  384. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  385. package/dist/components/pro/RichTextEditor/ContextMenu.js +251 -252
  386. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  387. package/dist/components/pro/RichTextEditor/RichTextEditor.js +267 -271
  388. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  389. package/dist/components/pro/RichTextEditor/SlashMenu.js +214 -214
  390. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  391. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -75
  392. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  393. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +261 -261
  394. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  395. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +172 -526
  396. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  397. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js +112 -114
  398. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  399. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +194 -194
  400. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  401. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +970 -973
  402. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  403. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +11 -12
  404. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  405. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +310 -344
  406. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  407. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +38 -39
  408. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
  409. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +620 -625
  410. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  411. package/dist/components/pro/RichTextEditor/extensions/FontSize.js +25 -25
  412. package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
  413. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +167 -176
  414. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  415. package/dist/components/pro/RichTextEditor/types.js +75 -75
  416. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  417. package/dist/contexts/AppContext.d.ts +1 -1
  418. package/dist/contexts/AppContext.js +216 -221
  419. package/dist/contexts/AppContext.js.map +1 -1
  420. package/dist/data-table.js +15 -41
  421. package/dist/data-table.js.map +1 -1
  422. package/dist/dishui.css +1 -1
  423. package/dist/flow.js +27 -83
  424. package/dist/hooks/useClickOutside.js +18 -18
  425. package/dist/hooks/useClickOutside.js.map +1 -1
  426. package/dist/hooks/useContainerElement.js +9 -9
  427. package/dist/hooks/useContainerElement.js.map +1 -1
  428. package/dist/hooks/useControllableState.js +33 -35
  429. package/dist/hooks/useControllableState.js.map +1 -1
  430. package/dist/hooks/useCopyToClipboard.js +16 -16
  431. package/dist/hooks/useCopyToClipboard.js.map +1 -1
  432. package/dist/hooks/useDebounce.js +14 -14
  433. package/dist/hooks/useDebounce.js.map +1 -1
  434. package/dist/hooks/useDraggable.js +50 -50
  435. package/dist/hooks/useDraggable.js.map +1 -1
  436. package/dist/hooks/useTableColumns.js +39 -41
  437. package/dist/hooks/useTableColumns.js.map +1 -1
  438. package/dist/hooks/useTableData.js +67 -68
  439. package/dist/hooks/useTableData.js.map +1 -1
  440. package/dist/index-nostyled.d.ts +8 -0
  441. package/dist/index.d.ts +31 -3
  442. package/dist/index.js +106 -241
  443. package/dist/layouts/MainLayout.js +56 -56
  444. package/dist/layouts/MainLayout.js.map +1 -1
  445. package/dist/layouts/Navbar.js +214 -214
  446. package/dist/layouts/Navbar.js.map +1 -1
  447. package/dist/layouts/Sidebar.js +184 -186
  448. package/dist/layouts/Sidebar.js.map +1 -1
  449. package/dist/layouts/headbar/Headbar.js +25 -25
  450. package/dist/layouts/headbar/Headbar.js.map +1 -1
  451. package/dist/layouts/headbar/HeadbarLangSwitcher.js +39 -39
  452. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  453. package/dist/layouts/headbar/HeadbarSearch.js +120 -120
  454. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  455. package/dist/layouts/headbar/HeadbarThemeSwitcher.js +27 -27
  456. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  457. package/dist/layouts/headbar/HeadbarTitle.js +26 -26
  458. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  459. package/dist/lite.js +9 -24
  460. package/dist/markdown.js +4 -9
  461. package/dist/pages/components/Calendar/index.d.ts +3 -0
  462. package/dist/pages/components/Calendar/index.en.d.ts +3 -0
  463. package/dist/pages/components/Calendar/index.zh.d.ts +3 -0
  464. package/dist/pages/components/Chat/index.d.ts +3 -0
  465. package/dist/pages/components/Chat/index.en.d.ts +3 -0
  466. package/dist/pages/components/Chat/index.zh.d.ts +3 -0
  467. package/dist/pages/components/FloatWindow/index.d.ts +3 -0
  468. package/dist/pages/components/FloatWindow/index.en.d.ts +3 -0
  469. package/dist/pages/components/FloatWindow/index.zh.d.ts +3 -0
  470. package/dist/pages/components/Gantt/index.d.ts +3 -0
  471. package/dist/pages/components/Gantt/index.en.d.ts +3 -0
  472. package/dist/pages/components/Gantt/index.zh.d.ts +3 -0
  473. package/dist/pages/components/GridLayout/index.d.ts +3 -0
  474. package/dist/pages/components/GridLayout/index.en.d.ts +3 -0
  475. package/dist/pages/components/GridLayout/index.zh.d.ts +3 -0
  476. package/dist/pages/components/Notification/index.d.ts +3 -0
  477. package/dist/pages/components/Notification/index.en.d.ts +3 -0
  478. package/dist/pages/components/Notification/index.zh.d.ts +3 -0
  479. package/dist/pages/components/Resizable/index.d.ts +3 -0
  480. package/dist/pages/components/Resizable/index.en.d.ts +3 -0
  481. package/dist/pages/components/Resizable/index.zh.d.ts +3 -0
  482. package/dist/pages/components/Tab/index.d.ts +3 -0
  483. package/dist/pages/components/Tab/index.en.d.ts +3 -0
  484. package/dist/pages/components/Tab/index.zh.d.ts +3 -0
  485. package/dist/styles/themeStyles.js +87 -86
  486. package/dist/styles/themeStyles.js.map +1 -1
  487. package/dist/utils/cn.d.ts +13 -0
  488. package/dist/utils/cn.js +16 -0
  489. package/dist/utils/cn.js.map +1 -0
  490. package/dist/utils/i18n.js +700 -602
  491. package/dist/utils/i18n.js.map +1 -1
  492. package/dist/utils/menu.js +94 -94
  493. package/dist/utils/menu.js.map +1 -1
  494. package/dist/utils/rehype-code-meta.js +14 -14
  495. package/dist/utils/rehype-code-meta.js.map +1 -1
  496. package/dist/utils/remark-code-meta.js +9 -9
  497. package/dist/utils/remark-code-meta.js.map +1 -1
  498. package/dist/utils/routerBuilder.js +59 -60
  499. package/dist/utils/routerBuilder.js.map +1 -1
  500. package/dist/utils/selection.js +28 -29
  501. package/dist/utils/selection.js.map +1 -1
  502. package/dist/utils/themes.js +275 -255
  503. package/dist/utils/themes.js.map +1 -1
  504. package/package.json +19 -6
  505. package/dist/components/StatCard/index.d.ts +0 -24
  506. package/dist/components/StatCard/index.js +0 -90
  507. package/dist/components/StatCard/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.js","names":[],"sources":["../../../../src/components/pro/DataTable/Filters.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { Column } from './tanstack-table';\nimport { useDebounce } from '../../../hooks/useDebounce';\n\n// 扩展列元数据接口(v9 的 ColumnMeta 位于 @tanstack/table-core,签名必须与原声明完全一致)\ndeclare module '@tanstack/table-core' {\n interface ColumnMeta<\n in out TFeatures extends import('@tanstack/table-core').TableFeatures,\n in out TData extends import('@tanstack/table-core').RowData,\n TValue extends import('@tanstack/table-core').CellData = import('@tanstack/table-core').CellData,\n > {\n filterType?: 'text' | 'number' | 'select' | 'boolean' | 'date' | 'multiSelect';\n filterOptions?: { value: any; label: string }[];\n }\n}\n\nexport interface TextFilterProps {\n column: Column<any, unknown>;\n placeholder?: string;\n}\n\n// 文本过滤器组件\nexport const TextFilter: React.FC<TextFilterProps> = ({\n column,\n placeholder = '搜索...'\n}) => {\n const [value, setValue] = useState('');\n const debouncedValue = useDebounce(value, 300);\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const currentFilterValue = column.getFilterValue() as string || '';\n if (currentFilterValue !== value) {\n setValue(currentFilterValue);\n }\n }, [column.getFilterValue()]);\n\n // 当 debouncedValue 变化时更新列过滤状态\n useEffect(() => {\n column.setFilterValue(debouncedValue || undefined);\n }, [debouncedValue]);\n\n // 处理输入变更\n const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value);\n };\n\n return (\n <div className=\"flex items-center mt-2\">\n <input\n type=\"text\"\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className=\"input input-bordered input-sm w-full\"\n />\n {value && (\n <button\n className=\"btn btn-ghost btn-xs ml-1\"\n onClick={() => {\n setValue('');\n column.setFilterValue(undefined);\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n};\n\nexport interface NumberFilterProps {\n column: Column<any, unknown>;\n min?: number;\n max?: number;\n step?: number;\n}\n\n// 数字范围过滤器组件\nexport const NumberRangeFilter: React.FC<NumberFilterProps> = ({\n column,\n min,\n max,\n step = 1\n}) => {\n const [minValue, setMinValue] = useState<string>('');\n const [maxValue, setMaxValue] = useState<string>('');\n\n const debouncedMin = useDebounce(minValue, 300);\n const debouncedMax = useDebounce(maxValue, 300);\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue() as [number, number] | undefined;\n const newMin = filterValue && filterValue[0] !== undefined ? String(filterValue[0]) : '';\n const newMax = filterValue && filterValue[1] !== undefined ? String(filterValue[1]) : '';\n\n if (newMin !== minValue) setMinValue(newMin);\n if (newMax !== maxValue) setMaxValue(newMax);\n }, [column.getFilterValue()]);\n\n // 当 debounced 值变化时更新列过滤状态\n useEffect(() => {\n const filterValue: [number | undefined, number | undefined] = [\n debouncedMin === '' ? undefined : Number(debouncedMin),\n debouncedMax === '' ? undefined : Number(debouncedMax)\n ];\n\n // 如果两者都是undefined,则清除过滤器\n if (filterValue[0] === undefined && filterValue[1] === undefined) {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(filterValue);\n }\n }, [debouncedMin, debouncedMax]);\n\n\n\n return (\n <div className=\"flex flex-col gap-1 mt-2\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"number\"\n value={minValue}\n onChange={(e) => {\n setMinValue(e.target.value);\n }}\n placeholder=\"最小值\"\n min={min}\n max={max}\n step={step}\n className=\"input input-bordered input-sm w-full\"\n />\n <span>至</span>\n <input\n type=\"number\"\n value={maxValue}\n onChange={(e) => {\n setMaxValue(e.target.value);\n }}\n placeholder=\"最大值\"\n min={min}\n max={max}\n step={step}\n className=\"input input-bordered input-sm w-full\"\n />\n </div>\n {(minValue || maxValue) && (\n <button\n className=\"btn btn-ghost btn-xs self-end\"\n onClick={() => {\n setMinValue('');\n setMaxValue('');\n column.setFilterValue(undefined);\n }}\n >\n 清除\n </button>\n )}\n </div>\n );\n};\n\nexport interface SelectFilterProps {\n column: Column<any, unknown>;\n options: { value: any; label: string }[];\n placeholder?: string;\n}\n\n// 选择过滤器组件\nexport const SelectFilter: React.FC<SelectFilterProps> = ({\n column,\n options,\n placeholder = '全部'\n}) => {\n const [value, setValue] = useState<string>('');\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue();\n setValue(filterValue !== undefined ? String(filterValue) : '');\n }, [column.getFilterValue()]);\n\n // 处理选择变更\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const selectedValue = e.target.value;\n setValue(selectedValue);\n\n if (selectedValue === '') {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(selectedValue);\n }\n };\n\n return (\n <div className=\"mt-2\">\n <select\n value={value}\n onChange={handleChange}\n className=\"select select-bordered select-sm w-full\"\n >\n <option value=\"\">{placeholder}</option>\n {options.map((option, index) => (\n <option key={index} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport interface BooleanFilterProps {\n column: Column<any, unknown>;\n trueLabel?: string;\n falseLabel?: string;\n allLabel?: string;\n}\n\n// 布尔值过滤器组件\nexport const BooleanFilter: React.FC<BooleanFilterProps> = ({\n column,\n trueLabel = '是',\n falseLabel = '否',\n allLabel = '全部'\n}) => {\n const options = [\n { value: '', label: allLabel },\n { value: 'true', label: trueLabel },\n { value: 'false', label: falseLabel }\n ];\n\n const [value, setValue] = useState<string>('');\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue();\n setValue(filterValue !== undefined ? String(filterValue) : '');\n }, [column.getFilterValue()]);\n\n // 处理选择变更\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const selectedValue = e.target.value;\n setValue(selectedValue);\n\n if (selectedValue === '') {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(selectedValue === 'true');\n }\n };\n\n return (\n <div className=\"mt-2\">\n <select\n value={value}\n onChange={handleChange}\n className=\"select select-bordered select-sm w-full\"\n >\n {options.map((option, index) => (\n <option key={index} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport interface DateRangeFilterProps {\n column: Column<any, unknown>;\n}\n\n// 日期范围过滤器组件\nexport const DateRangeFilter: React.FC<DateRangeFilterProps> = ({\n column\n}) => {\n const [startDate, setStartDate] = useState<string>('');\n const [endDate, setEndDate] = useState<string>('');\n\n const debouncedStart = useDebounce(startDate, 300);\n const debouncedEnd = useDebounce(endDate, 300);\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue() as [string, string] | undefined;\n const newStart = filterValue && filterValue[0] ? filterValue[0] : '';\n const newEnd = filterValue && filterValue[1] ? filterValue[1] : '';\n\n if (newStart !== startDate) setStartDate(newStart);\n if (newEnd !== endDate) setEndDate(newEnd);\n }, [column.getFilterValue()]);\n\n // 当 debounced 值变化时更新列过滤状态\n useEffect(() => {\n const filterValue: [string | undefined, string | undefined] = [\n debouncedStart || undefined,\n debouncedEnd || undefined\n ];\n\n // 如果两者都是undefined,则清除过滤器\n if (!filterValue[0] && !filterValue[1]) {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(filterValue);\n }\n }, [debouncedStart, debouncedEnd]);\n\n\n\n return (\n <div className=\"flex flex-col gap-1 mt-2\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"date\"\n value={startDate}\n onChange={(e) => {\n setStartDate(e.target.value);\n }}\n className=\"input input-bordered input-sm w-full\"\n />\n <span>至</span>\n <input\n type=\"date\"\n value={endDate}\n onChange={(e) => {\n setEndDate(e.target.value);\n }}\n className=\"input input-bordered input-sm w-full\"\n />\n </div>\n {(startDate || endDate) && (\n <button\n className=\"btn btn-ghost btn-xs self-end\"\n onClick={() => {\n setStartDate('');\n setEndDate('');\n column.setFilterValue(undefined);\n }}\n >\n 清除\n </button>\n )}\n </div>\n );\n};\n\n// 多选过滤器组件\nexport const MultiSelectFilter: React.FC<SelectFilterProps> = ({\n column,\n options,\n placeholder = '选择选项'\n}) => {\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue() as string[] | undefined;\n setSelectedValues(filterValue || []);\n }, [column.getFilterValue()]);\n\n // 处理选择变更\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const values = Array.from(e.target.selectedOptions, option => option.value);\n setSelectedValues(values);\n\n if (values.length === 0) {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(values);\n }\n };\n\n return (\n <div className=\"mt-2\">\n <select\n multiple\n value={selectedValues}\n onChange={handleChange}\n className=\"select select-bordered select-sm w-full max-h-32\"\n >\n {options.map((option, index) => (\n <option key={index} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {selectedValues.length > 0 && (\n <div className=\"flex justify-between mt-1\">\n <span className=\"text-xs text-base-content/70\">已选择 {selectedValues.length} 项</span>\n <button\n className=\"btn btn-ghost btn-xs\"\n onClick={() => {\n setSelectedValues([]);\n column.setFilterValue(undefined);\n }}\n >\n 清除\n </button>\n </div>\n )}\n </div>\n );\n};\n\n// 过滤器面板组件\nexport interface FilterPanelProps {\n column: Column<any, unknown>;\n onClose: () => void;\n}\n\nexport const FilterPanel: React.FC<FilterPanelProps> = ({\n column,\n onClose\n}) => {\n // 确保column和column.columnDef存在\n if (!column || !column.columnDef) {\n return null;\n }\n\n // 获取过滤器类型,确保meta存在\n const meta = column.columnDef.meta || {};\n const filterType = meta.filterType;\n const filterOptions = meta.filterOptions || [];\n\n // 根据过滤器类型渲染相应的组件\n const renderFilter = () => {\n if (!filterType) return null;\n\n switch (filterType) {\n case 'text':\n return <TextFilter column={column} />;\n case 'number':\n return <NumberRangeFilter column={column} />;\n case 'select':\n return <SelectFilter column={column} options={filterOptions} />;\n case 'boolean':\n return <BooleanFilter column={column} />;\n case 'date':\n return <DateRangeFilter column={column} />;\n case 'multiSelect':\n return <MultiSelectFilter column={column} options={filterOptions} />;\n default:\n return <TextFilter column={column} />;\n }\n };\n\n // 列标题\n const columnHeader = column.columnDef.header ?\n (typeof column.columnDef.header === 'string' ?\n column.columnDef.header :\n column.id\n ) : column.id;\n\n return (\n <div className=\"card bg-base-100 shadow-lg p-4 w-64 z-50\">\n <div className=\"flex justify-between items-center mb-2\">\n <h3 className=\"font-medium\">{columnHeader}</h3>\n <button\n className=\"btn btn-ghost btn-xs\"\n onClick={onClose}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {renderFilter()}\n\n <div className=\"flex justify-end mt-2\">\n <button\n className=\"btn btn-ghost btn-xs\"\n onClick={() => {\n column.setFilterValue(undefined);\n onClose();\n }}\n >\n 清除过滤\n </button>\n </div>\n </div>\n );\n};\n\nexport default {\n TextFilter,\n NumberRangeFilter,\n SelectFilter,\n BooleanFilter,\n DateRangeFilter,\n MultiSelectFilter,\n FilterPanel\n}; "],"mappings":"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"}
1
+ {"version":3,"file":"Filters.js","names":[],"sources":["../../../../src/components/pro/DataTable/Filters.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { Column } from './tanstack-table';\nimport { useDebounce } from '../../../hooks/useDebounce';\n\n// 扩展列元数据接口(v9 的 ColumnMeta 位于 @tanstack/table-core,签名必须与原声明完全一致)\ndeclare module '@tanstack/table-core' {\n interface ColumnMeta<\n in out TFeatures extends import('@tanstack/table-core').TableFeatures,\n in out TData extends import('@tanstack/table-core').RowData,\n TValue extends import('@tanstack/table-core').CellData = import('@tanstack/table-core').CellData,\n > {\n filterType?: 'text' | 'number' | 'select' | 'boolean' | 'date' | 'multiSelect';\n filterOptions?: { value: any; label: string }[];\n }\n}\n\nexport interface TextFilterProps {\n column: Column<any, unknown>;\n placeholder?: string;\n}\n\n// 文本过滤器组件\nexport const TextFilter: React.FC<TextFilterProps> = ({\n column,\n placeholder = '搜索...'\n}) => {\n const [value, setValue] = useState('');\n const debouncedValue = useDebounce(value, 300);\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const currentFilterValue = column.getFilterValue() as string || '';\n if (currentFilterValue !== value) {\n setValue(currentFilterValue);\n }\n }, [column.getFilterValue()]);\n\n // 当 debouncedValue 变化时更新列过滤状态\n useEffect(() => {\n column.setFilterValue(debouncedValue || undefined);\n }, [debouncedValue]);\n\n // 处理输入变更\n const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value);\n };\n\n return (\n <div className=\"flex items-center mt-2\">\n <input\n type=\"text\"\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className=\"input input-bordered input-sm w-full\"\n />\n {value && (\n <button\n className=\"btn btn-ghost btn-xs ml-1\"\n onClick={() => {\n setValue('');\n column.setFilterValue(undefined);\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n};\n\nexport interface NumberFilterProps {\n column: Column<any, unknown>;\n min?: number;\n max?: number;\n step?: number;\n}\n\n// 数字范围过滤器组件\nexport const NumberRangeFilter: React.FC<NumberFilterProps> = ({\n column,\n min,\n max,\n step = 1\n}) => {\n const [minValue, setMinValue] = useState<string>('');\n const [maxValue, setMaxValue] = useState<string>('');\n\n const debouncedMin = useDebounce(minValue, 300);\n const debouncedMax = useDebounce(maxValue, 300);\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue() as [number, number] | undefined;\n const newMin = filterValue && filterValue[0] !== undefined ? String(filterValue[0]) : '';\n const newMax = filterValue && filterValue[1] !== undefined ? String(filterValue[1]) : '';\n\n if (newMin !== minValue) setMinValue(newMin);\n if (newMax !== maxValue) setMaxValue(newMax);\n }, [column.getFilterValue()]);\n\n // 当 debounced 值变化时更新列过滤状态\n useEffect(() => {\n const filterValue: [number | undefined, number | undefined] = [\n debouncedMin === '' ? undefined : Number(debouncedMin),\n debouncedMax === '' ? undefined : Number(debouncedMax)\n ];\n\n // 如果两者都是undefined,则清除过滤器\n if (filterValue[0] === undefined && filterValue[1] === undefined) {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(filterValue);\n }\n }, [debouncedMin, debouncedMax]);\n\n\n\n return (\n <div className=\"flex flex-col gap-1 mt-2\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"number\"\n value={minValue}\n onChange={(e) => {\n setMinValue(e.target.value);\n }}\n placeholder=\"最小值\"\n min={min}\n max={max}\n step={step}\n className=\"input input-bordered input-sm w-full\"\n />\n <span>至</span>\n <input\n type=\"number\"\n value={maxValue}\n onChange={(e) => {\n setMaxValue(e.target.value);\n }}\n placeholder=\"最大值\"\n min={min}\n max={max}\n step={step}\n className=\"input input-bordered input-sm w-full\"\n />\n </div>\n {(minValue || maxValue) && (\n <button\n className=\"btn btn-ghost btn-xs self-end\"\n onClick={() => {\n setMinValue('');\n setMaxValue('');\n column.setFilterValue(undefined);\n }}\n >\n 清除\n </button>\n )}\n </div>\n );\n};\n\nexport interface SelectFilterProps {\n column: Column<any, unknown>;\n options: { value: any; label: string }[];\n placeholder?: string;\n}\n\n// 选择过滤器组件\nexport const SelectFilter: React.FC<SelectFilterProps> = ({\n column,\n options,\n placeholder = '全部'\n}) => {\n const [value, setValue] = useState<string>('');\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue();\n setValue(filterValue !== undefined ? String(filterValue) : '');\n }, [column.getFilterValue()]);\n\n // 处理选择变更\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const selectedValue = e.target.value;\n setValue(selectedValue);\n\n if (selectedValue === '') {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(selectedValue);\n }\n };\n\n return (\n <div className=\"mt-2\">\n <select\n value={value}\n onChange={handleChange}\n className=\"select select-bordered select-sm w-full\"\n >\n <option value=\"\">{placeholder}</option>\n {options.map((option, index) => (\n <option key={index} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport interface BooleanFilterProps {\n column: Column<any, unknown>;\n trueLabel?: string;\n falseLabel?: string;\n allLabel?: string;\n}\n\n// 布尔值过滤器组件\nexport const BooleanFilter: React.FC<BooleanFilterProps> = ({\n column,\n trueLabel = '是',\n falseLabel = '否',\n allLabel = '全部'\n}) => {\n const options = [\n { value: '', label: allLabel },\n { value: 'true', label: trueLabel },\n { value: 'false', label: falseLabel }\n ];\n\n const [value, setValue] = useState<string>('');\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue();\n setValue(filterValue !== undefined ? String(filterValue) : '');\n }, [column.getFilterValue()]);\n\n // 处理选择变更\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const selectedValue = e.target.value;\n setValue(selectedValue);\n\n if (selectedValue === '') {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(selectedValue === 'true');\n }\n };\n\n return (\n <div className=\"mt-2\">\n <select\n value={value}\n onChange={handleChange}\n className=\"select select-bordered select-sm w-full\"\n >\n {options.map((option, index) => (\n <option key={index} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport interface DateRangeFilterProps {\n column: Column<any, unknown>;\n}\n\n// 日期范围过滤器组件\nexport const DateRangeFilter: React.FC<DateRangeFilterProps> = ({\n column\n}) => {\n const [startDate, setStartDate] = useState<string>('');\n const [endDate, setEndDate] = useState<string>('');\n\n const debouncedStart = useDebounce(startDate, 300);\n const debouncedEnd = useDebounce(endDate, 300);\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue() as [string, string] | undefined;\n const newStart = filterValue && filterValue[0] ? filterValue[0] : '';\n const newEnd = filterValue && filterValue[1] ? filterValue[1] : '';\n\n if (newStart !== startDate) setStartDate(newStart);\n if (newEnd !== endDate) setEndDate(newEnd);\n }, [column.getFilterValue()]);\n\n // 当 debounced 值变化时更新列过滤状态\n useEffect(() => {\n const filterValue: [string | undefined, string | undefined] = [\n debouncedStart || undefined,\n debouncedEnd || undefined\n ];\n\n // 如果两者都是undefined,则清除过滤器\n if (!filterValue[0] && !filterValue[1]) {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(filterValue);\n }\n }, [debouncedStart, debouncedEnd]);\n\n\n\n return (\n <div className=\"flex flex-col gap-1 mt-2\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"date\"\n value={startDate}\n onChange={(e) => {\n setStartDate(e.target.value);\n }}\n className=\"input input-bordered input-sm w-full\"\n />\n <span>至</span>\n <input\n type=\"date\"\n value={endDate}\n onChange={(e) => {\n setEndDate(e.target.value);\n }}\n className=\"input input-bordered input-sm w-full\"\n />\n </div>\n {(startDate || endDate) && (\n <button\n className=\"btn btn-ghost btn-xs self-end\"\n onClick={() => {\n setStartDate('');\n setEndDate('');\n column.setFilterValue(undefined);\n }}\n >\n 清除\n </button>\n )}\n </div>\n );\n};\n\n// 多选过滤器组件\nexport const MultiSelectFilter: React.FC<SelectFilterProps> = ({\n column,\n options,\n placeholder = '选择选项'\n}) => {\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n // 将组件状态与列过滤状态同步\n useEffect(() => {\n const filterValue = column.getFilterValue() as string[] | undefined;\n setSelectedValues(filterValue || []);\n }, [column.getFilterValue()]);\n\n // 处理选择变更\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const values = Array.from(e.target.selectedOptions, option => option.value);\n setSelectedValues(values);\n\n if (values.length === 0) {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(values);\n }\n };\n\n return (\n <div className=\"mt-2\">\n <select\n multiple\n value={selectedValues}\n onChange={handleChange}\n className=\"select select-bordered select-sm w-full max-h-32\"\n >\n {options.map((option, index) => (\n <option key={index} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {selectedValues.length > 0 && (\n <div className=\"flex justify-between mt-1\">\n <span className=\"text-xs text-base-content/70\">已选择 {selectedValues.length} 项</span>\n <button\n className=\"btn btn-ghost btn-xs\"\n onClick={() => {\n setSelectedValues([]);\n column.setFilterValue(undefined);\n }}\n >\n 清除\n </button>\n </div>\n )}\n </div>\n );\n};\n\n// 过滤器面板组件\nexport interface FilterPanelProps {\n column: Column<any, unknown>;\n onClose: () => void;\n}\n\nexport const FilterPanel: React.FC<FilterPanelProps> = ({\n column,\n onClose\n}) => {\n // 确保column和column.columnDef存在\n if (!column || !column.columnDef) {\n return null;\n }\n\n // 获取过滤器类型,确保meta存在\n const meta = column.columnDef.meta || {};\n const filterType = meta.filterType;\n const filterOptions = meta.filterOptions || [];\n\n // 根据过滤器类型渲染相应的组件\n const renderFilter = () => {\n if (!filterType) return null;\n\n switch (filterType) {\n case 'text':\n return <TextFilter column={column} />;\n case 'number':\n return <NumberRangeFilter column={column} />;\n case 'select':\n return <SelectFilter column={column} options={filterOptions} />;\n case 'boolean':\n return <BooleanFilter column={column} />;\n case 'date':\n return <DateRangeFilter column={column} />;\n case 'multiSelect':\n return <MultiSelectFilter column={column} options={filterOptions} />;\n default:\n return <TextFilter column={column} />;\n }\n };\n\n // 列标题\n const columnHeader = column.columnDef.header ?\n (typeof column.columnDef.header === 'string' ?\n column.columnDef.header :\n column.id\n ) : column.id;\n\n return (\n <div className=\"card bg-base-100 shadow-lg p-4 w-64 z-50\">\n <div className=\"flex justify-between items-center mb-2\">\n <h3 className=\"font-medium\">{columnHeader}</h3>\n <button\n className=\"btn btn-ghost btn-xs\"\n onClick={onClose}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {renderFilter()}\n\n <div className=\"flex justify-end mt-2\">\n <button\n className=\"btn btn-ghost btn-xs\"\n onClick={() => {\n column.setFilterValue(undefined);\n onClose();\n }}\n >\n 清除过滤\n </button>\n </div>\n </div>\n );\n};\n\nexport default {\n TextFilter,\n NumberRangeFilter,\n SelectFilter,\n BooleanFilter,\n DateRangeFilter,\n MultiSelectFilter,\n FilterPanel\n}; "],"mappings":"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"}
@@ -1,208 +1,207 @@
1
- import { useEffect as J, useRef as _, useState as k } from "react";
2
- import { Fragment as g, jsx as o, jsxs as l } from "react/jsx-runtime";
3
- var U = [
4
- "sum",
5
- "avg",
6
- "count",
7
- "min",
8
- "max"
9
- ], V = {
10
- zh: {
11
- available: "可用字段",
12
- rowGroups: "行分组",
13
- colGroups: "列分组",
14
- values: "数值",
15
- empty: "(无字段)",
16
- dropHint: "拖拽字段到此",
17
- remove: "移除"
18
- },
19
- en: {
20
- available: "Available",
21
- rowGroups: "Row Groups",
22
- colGroups: "Column Labels",
23
- values: "Values",
24
- empty: "(no fields)",
25
- dropHint: "Drag fields here",
26
- remove: "Remove"
27
- }
28
- }, B = typeof Image < "u" ? (() => {
29
- const f = new Image();
30
- return f.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==", f;
1
+ import { useEffect as e, useRef as t, useState as n } from "react";
2
+ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
3
+ //#region src/components/pro/DataTable/PivotPanel.tsx
4
+ var o = [
5
+ "sum",
6
+ "avg",
7
+ "count",
8
+ "min",
9
+ "max"
10
+ ], s = {
11
+ zh: {
12
+ available: "可用字段",
13
+ rowGroups: "行分组",
14
+ colGroups: "列分组",
15
+ values: "数值",
16
+ empty: "(无字段)",
17
+ dropHint: "拖拽字段到此",
18
+ remove: "移除"
19
+ },
20
+ en: {
21
+ available: "Available",
22
+ rowGroups: "Row Groups",
23
+ colGroups: "Column Labels",
24
+ values: "Values",
25
+ empty: "(no fields)",
26
+ dropHint: "Drag fields here",
27
+ remove: "Remove"
28
+ }
29
+ }, c = typeof Image < "u" ? (() => {
30
+ let e = new Image();
31
+ return e.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==", e;
31
32
  })() : null;
32
- function ee({ orientation: f, lang: P, fieldLabels: Z, dimensionFields: j, numericFields: L, rowFields: A, colFields: w, values: d, setRowFields: b, setColFields: v, setValues: p, panelWidth: D = 224 }) {
33
- const s = V[P], N = (e) => Z[e] ?? e, R = (e) => L.some((r) => r.field === e), [i, E] = k(null), [G, u] = k(null), C = _(null), h = _({
34
- x: 0,
35
- y: 0
36
- }), S = i != null;
37
- J(() => {
38
- if (!S) return;
39
- const e = () => {
40
- const a = C.current;
41
- a && (a.style.transform = `translate(${h.current.x + 12}px, ${h.current.y + 12}px)`);
42
- };
43
- e();
44
- const r = (a) => {
45
- a.clientX === 0 && a.clientY === 0 || (h.current = {
46
- x: a.clientX,
47
- y: a.clientY
48
- }, e());
49
- }, t = () => {
50
- E(null), u(null);
51
- };
52
- return window.addEventListener("dragover", r), window.addEventListener("dragend", t), window.addEventListener("drop", t), () => {
53
- window.removeEventListener("dragover", r), window.removeEventListener("dragend", t), window.removeEventListener("drop", t);
54
- };
55
- }, [S]);
56
- const M = /* @__PURE__ */ new Set([...A, ...w]), H = j.filter((e) => !M.has(e.field)), K = new Set(d.map((e) => e.field)), I = L.filter((e) => !K.has(e.field)), T = (e) => {
57
- b((r) => r.filter((t) => t !== e)), v((r) => r.filter((t) => t !== e)), p((r) => r.filter((t) => t.field !== e));
58
- }, Q = (e) => i ? e === "available" ? !0 : e === "values" ? i.numeric : !i.numeric : !1, q = (e, r) => {
59
- const t = R(r);
60
- if (e === "values") {
61
- if (!t) return;
62
- b((a) => a.filter((n) => n !== r)), v((a) => a.filter((n) => n !== r)), p((a) => a.some((n) => n.field === r) ? a : [...a, {
63
- field: r,
64
- aggFn: "sum"
65
- }]);
66
- return;
67
- }
68
- if (e === "rows" || e === "cols") {
69
- if (t) return;
70
- p((a) => a.filter((n) => n.field !== r)), e === "rows" ? (v((a) => a.filter((n) => n !== r)), b((a) => a.includes(r) ? a : [...a, r])) : (b((a) => a.filter((n) => n !== r)), v((a) => a.includes(r) ? a : [...a, r]));
71
- return;
72
- }
73
- T(r);
74
- }, O = (e, r) => {
75
- e.dataTransfer.setData("text/plain", r), e.dataTransfer.effectAllowed = "move", B && e.dataTransfer.setDragImage(B, 0, 0), h.current = {
76
- x: e.clientX,
77
- y: e.clientY
78
- }, E({
79
- field: r,
80
- label: N(r),
81
- numeric: R(r)
82
- });
83
- }, X = () => {
84
- E(null), u(null);
85
- }, m = f === "vertical", x = (e, r) => /* @__PURE__ */ l("span", {
86
- draggable: !0,
87
- onDragStart: (t) => O(t, e),
88
- onDragEnd: X,
89
- className: `badge badge-outline gap-1 items-center cursor-grab active:cursor-grabbing select-none ${i?.field === e ? "opacity-40" : ""}`,
90
- children: [
91
- r?.prefix,
92
- N(e),
93
- r?.onRemove && /* @__PURE__ */ o("button", {
94
- type: "button",
95
- className: "text-xs opacity-60 hover:opacity-100",
96
- onClick: r.onRemove,
97
- "aria-label": s.remove,
98
- children: "✕"
99
- })
100
- ]
101
- }, e), y = (e, r, t, a) => {
102
- const n = Q(e);
103
- return /* @__PURE__ */ l("div", {
104
- className: `flex flex-col gap-1 ${m ? "w-full" : "flex-1 min-w-40"}`,
105
- onDragOver: (c) => {
106
- n && (c.preventDefault(), c.dataTransfer.dropEffect = "move", G !== e && u(e));
107
- },
108
- onDragLeave: (c) => {
109
- c.currentTarget.contains(c.relatedTarget) || G === e && u(null);
110
- },
111
- onDrop: (c) => {
112
- c.preventDefault();
113
- const Y = c.dataTransfer.getData("text/plain");
114
- u(null), Y && q(e, Y);
115
- },
116
- children: [/* @__PURE__ */ l("span", {
117
- className: "text-xs font-semibold opacity-60 flex items-center gap-1",
118
- children: [/* @__PURE__ */ o("span", {
119
- "aria-hidden": !0,
120
- children: r
121
- }), t]
122
- }), /* @__PURE__ */ o("div", {
123
- className: `flex flex-wrap gap-1 items-center content-start p-1.5 border rounded transition-colors ${m ? "min-h-16" : "min-h-9"} ${i ? n ? G === e ? "border-primary border-solid bg-primary/10" : "border-primary/60 border-dashed bg-primary/5" : "border-base-300 border-dashed opacity-40" : "border-base-300 border-dashed bg-base-100/50"}`,
124
- children: a
125
- })]
126
- });
127
- }, $ = m ? null : /* @__PURE__ */ o("div", { className: "w-px bg-base-300 self-stretch" });
128
- return /* @__PURE__ */ l(g, { children: [/* @__PURE__ */ l("div", {
129
- className: `gap-2 p-2 border border-base-300 rounded-box bg-base-200/40 ${m ? "flex flex-col shrink-0 self-stretch overflow-auto" : "w-full flex flex-wrap items-stretch"}`,
130
- style: m ? { width: typeof D == "number" ? `${D}px` : D } : void 0,
131
- children: [
132
- y("available", "☷", s.available, /* @__PURE__ */ l(g, { children: [
133
- H.length === 0 && I.length === 0 && /* @__PURE__ */ o("span", {
134
- className: "text-xs opacity-40",
135
- children: s.empty
136
- }),
137
- H.map((e) => x(e.field)),
138
- I.map((e) => x(e.field, { prefix: /* @__PURE__ */ o("span", {
139
- className: "opacity-70",
140
- children: "#"
141
- }) }))
142
- ] })),
143
- $,
144
- y("rows", "≣", s.rowGroups, /* @__PURE__ */ l(g, { children: [A.length === 0 && /* @__PURE__ */ o("span", {
145
- className: "text-xs opacity-40",
146
- children: s.dropHint
147
- }), A.map((e) => x(e, { onRemove: () => T(e) }))] })),
148
- $,
149
- y("cols", "║", s.colGroups, /* @__PURE__ */ l(g, { children: [w.length === 0 && /* @__PURE__ */ o("span", {
150
- className: "text-xs opacity-40",
151
- children: s.dropHint
152
- }), w.map((e) => x(e, { onRemove: () => T(e) }))] })),
153
- $,
154
- y("values", "Σ", s.values, /* @__PURE__ */ l(g, { children: [d.length === 0 && /* @__PURE__ */ o("span", {
155
- className: "text-xs opacity-40",
156
- children: s.dropHint
157
- }), d.map((e, r) => /* @__PURE__ */ l("span", {
158
- draggable: !0,
159
- onDragStart: (t) => O(t, e.field),
160
- onDragEnd: X,
161
- className: `badge badge-outline gap-1 items-center cursor-grab active:cursor-grabbing select-none ${i?.field === e.field ? "opacity-40" : ""}`,
162
- children: [
163
- /* @__PURE__ */ o("select", {
164
- className: "bg-transparent text-xs outline-none",
165
- value: e.aggFn,
166
- draggable: !1,
167
- onChange: (t) => p(d.map((a, n) => n === r ? {
168
- ...a,
169
- aggFn: t.target.value
170
- } : a)),
171
- children: U.map((t) => /* @__PURE__ */ o("option", {
172
- value: t,
173
- children: t
174
- }, t))
175
- }),
176
- /* @__PURE__ */ o("span", { children: N(e.field) }),
177
- /* @__PURE__ */ o("button", {
178
- type: "button",
179
- className: "text-xs opacity-60 hover:opacity-100",
180
- onClick: () => p(d.filter((t, a) => a !== r)),
181
- "aria-label": s.remove,
182
- children: "✕"
183
- })
184
- ]
185
- }, `${e.field}:${r}`))] }))
186
- ]
187
- }), i && /* @__PURE__ */ l("div", {
188
- ref: C,
189
- className: "badge badge-primary gap-1 items-center shadow-lg pointer-events-none",
190
- style: {
191
- position: "fixed",
192
- left: 0,
193
- top: 0,
194
- zIndex: 2e3,
195
- willChange: "transform"
196
- },
197
- children: [i.numeric && /* @__PURE__ */ o("span", {
198
- className: "opacity-80",
199
- children: "#"
200
- }), i.label]
201
- })] });
33
+ function l({ orientation: l, lang: u, fieldLabels: d, dimensionFields: f, numericFields: p, rowFields: m, colFields: h, values: g, setRowFields: _, setColFields: v, setValues: y, panelWidth: b = 224 }) {
34
+ let x = s[u], S = (e) => d[e] ?? e, C = (e) => p.some((t) => t.field === e), [w, T] = n(null), [E, D] = n(null), O = t(null), k = t({
35
+ x: 0,
36
+ y: 0
37
+ }), A = w != null;
38
+ e(() => {
39
+ if (!A) return;
40
+ let e = () => {
41
+ let e = O.current;
42
+ e && (e.style.transform = `translate(${k.current.x + 12}px, ${k.current.y + 12}px)`);
43
+ };
44
+ e();
45
+ let t = (t) => {
46
+ (t.clientX !== 0 || t.clientY !== 0) && (k.current = {
47
+ x: t.clientX,
48
+ y: t.clientY
49
+ }, e());
50
+ }, n = () => {
51
+ T(null), D(null);
52
+ };
53
+ return window.addEventListener("dragover", t), window.addEventListener("dragend", n), window.addEventListener("drop", n), () => {
54
+ window.removeEventListener("dragover", t), window.removeEventListener("dragend", n), window.removeEventListener("drop", n);
55
+ };
56
+ }, [A]);
57
+ let j = /* @__PURE__ */ new Set([...m, ...h]), M = f.filter((e) => !j.has(e.field)), N = new Set(g.map((e) => e.field)), P = p.filter((e) => !N.has(e.field)), F = (e) => {
58
+ _((t) => t.filter((t) => t !== e)), v((t) => t.filter((t) => t !== e)), y((t) => t.filter((t) => t.field !== e));
59
+ }, I = (e) => w ? e === "available" ? !0 : e === "values" ? w.numeric : !w.numeric : !1, L = (e, t) => {
60
+ let n = C(t);
61
+ if (e === "values") {
62
+ if (!n) return;
63
+ _((e) => e.filter((e) => e !== t)), v((e) => e.filter((e) => e !== t)), y((e) => e.some((e) => e.field === t) ? e : [...e, {
64
+ field: t,
65
+ aggFn: "sum"
66
+ }]);
67
+ return;
68
+ }
69
+ if (e === "rows" || e === "cols") {
70
+ if (n) return;
71
+ y((e) => e.filter((e) => e.field !== t)), e === "rows" ? (v((e) => e.filter((e) => e !== t)), _((e) => e.includes(t) ? e : [...e, t])) : (_((e) => e.filter((e) => e !== t)), v((e) => e.includes(t) ? e : [...e, t]));
72
+ return;
73
+ }
74
+ F(t);
75
+ }, R = (e, t) => {
76
+ e.dataTransfer.setData("text/plain", t), e.dataTransfer.effectAllowed = "move", c && e.dataTransfer.setDragImage(c, 0, 0), k.current = {
77
+ x: e.clientX,
78
+ y: e.clientY
79
+ }, T({
80
+ field: t,
81
+ label: S(t),
82
+ numeric: C(t)
83
+ });
84
+ }, z = () => {
85
+ T(null), D(null);
86
+ }, B = l === "vertical", V = (e, t) => /* @__PURE__ */ a("span", {
87
+ draggable: !0,
88
+ onDragStart: (t) => R(t, e),
89
+ onDragEnd: z,
90
+ className: `badge badge-outline gap-1 items-center cursor-grab active:cursor-grabbing select-none ${w?.field === e ? "opacity-40" : ""}`,
91
+ children: [
92
+ t?.prefix,
93
+ S(e),
94
+ t?.onRemove && /* @__PURE__ */ i("button", {
95
+ type: "button",
96
+ className: "text-xs opacity-60 hover:opacity-100",
97
+ onClick: t.onRemove,
98
+ "aria-label": x.remove,
99
+ children: "✕"
100
+ })
101
+ ]
102
+ }, e), H = (e, t, n, r) => {
103
+ let o = I(e);
104
+ return /* @__PURE__ */ a("div", {
105
+ className: `flex flex-col gap-1 ${B ? "w-full" : "flex-1 min-w-40"}`,
106
+ onDragOver: (t) => {
107
+ o && (t.preventDefault(), t.dataTransfer.dropEffect = "move", E !== e && D(e));
108
+ },
109
+ onDragLeave: (t) => {
110
+ t.currentTarget.contains(t.relatedTarget) || E === e && D(null);
111
+ },
112
+ onDrop: (t) => {
113
+ t.preventDefault();
114
+ let n = t.dataTransfer.getData("text/plain");
115
+ D(null), n && L(e, n);
116
+ },
117
+ children: [/* @__PURE__ */ a("span", {
118
+ className: "text-xs font-semibold opacity-60 flex items-center gap-1",
119
+ children: [/* @__PURE__ */ i("span", {
120
+ "aria-hidden": !0,
121
+ children: t
122
+ }), n]
123
+ }), /* @__PURE__ */ i("div", {
124
+ className: `flex flex-wrap gap-1 items-center content-start p-1.5 border rounded transition-colors ${B ? "min-h-16" : "min-h-9"} ${w ? o ? E === e ? "border-primary border-solid bg-primary/10" : "border-primary/60 border-dashed bg-primary/5" : "border-base-300 border-dashed opacity-40" : "border-base-300 border-dashed bg-base-100/50"}`,
125
+ children: r
126
+ })]
127
+ });
128
+ }, U = B ? null : /* @__PURE__ */ i("div", { className: "w-px bg-base-300 self-stretch" });
129
+ return /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ a("div", {
130
+ className: `gap-2 p-2 border border-base-300 rounded-box bg-base-200/40 ${B ? "flex flex-col shrink-0 self-stretch overflow-auto" : "w-full flex flex-wrap items-stretch"}`,
131
+ style: B ? { width: typeof b == "number" ? `${b}px` : b } : void 0,
132
+ children: [
133
+ H("available", "☷", x.available, /* @__PURE__ */ a(r, { children: [
134
+ M.length === 0 && P.length === 0 && /* @__PURE__ */ i("span", {
135
+ className: "text-xs opacity-40",
136
+ children: x.empty
137
+ }),
138
+ M.map((e) => V(e.field)),
139
+ P.map((e) => V(e.field, { prefix: /* @__PURE__ */ i("span", {
140
+ className: "opacity-70",
141
+ children: "#"
142
+ }) }))
143
+ ] })),
144
+ U,
145
+ H("rows", "≣", x.rowGroups, /* @__PURE__ */ a(r, { children: [m.length === 0 && /* @__PURE__ */ i("span", {
146
+ className: "text-xs opacity-40",
147
+ children: x.dropHint
148
+ }), m.map((e) => V(e, { onRemove: () => F(e) }))] })),
149
+ U,
150
+ H("cols", "║", x.colGroups, /* @__PURE__ */ a(r, { children: [h.length === 0 && /* @__PURE__ */ i("span", {
151
+ className: "text-xs opacity-40",
152
+ children: x.dropHint
153
+ }), h.map((e) => V(e, { onRemove: () => F(e) }))] })),
154
+ U,
155
+ H("values", "Σ", x.values, /* @__PURE__ */ a(r, { children: [g.length === 0 && /* @__PURE__ */ i("span", {
156
+ className: "text-xs opacity-40",
157
+ children: x.dropHint
158
+ }), g.map((e, t) => /* @__PURE__ */ a("span", {
159
+ draggable: !0,
160
+ onDragStart: (t) => R(t, e.field),
161
+ onDragEnd: z,
162
+ className: `badge badge-outline gap-1 items-center cursor-grab active:cursor-grabbing select-none ${w?.field === e.field ? "opacity-40" : ""}`,
163
+ children: [
164
+ /* @__PURE__ */ i("select", {
165
+ className: "bg-transparent text-xs outline-none",
166
+ value: e.aggFn,
167
+ draggable: !1,
168
+ onChange: (e) => y(g.map((n, r) => r === t ? {
169
+ ...n,
170
+ aggFn: e.target.value
171
+ } : n)),
172
+ children: o.map((e) => /* @__PURE__ */ i("option", {
173
+ value: e,
174
+ children: e
175
+ }, e))
176
+ }),
177
+ /* @__PURE__ */ i("span", { children: S(e.field) }),
178
+ /* @__PURE__ */ i("button", {
179
+ type: "button",
180
+ className: "text-xs opacity-60 hover:opacity-100",
181
+ onClick: () => y(g.filter((e, n) => n !== t)),
182
+ "aria-label": x.remove,
183
+ children: "✕"
184
+ })
185
+ ]
186
+ }, `${e.field}:${t}`))] }))
187
+ ]
188
+ }), w && /* @__PURE__ */ a("div", {
189
+ ref: O,
190
+ className: "badge badge-primary gap-1 items-center shadow-lg pointer-events-none",
191
+ style: {
192
+ position: "fixed",
193
+ left: 0,
194
+ top: 0,
195
+ zIndex: 2e3,
196
+ willChange: "transform"
197
+ },
198
+ children: [w.numeric && /* @__PURE__ */ i("span", {
199
+ className: "opacity-80",
200
+ children: "#"
201
+ }), w.label]
202
+ })] });
202
203
  }
203
- export {
204
- ee as PivotPanel,
205
- ee as default
206
- };
204
+ //#endregion
205
+ export { l as PivotPanel, l as default };
207
206
 
208
207
  //# sourceMappingURL=PivotPanel.js.map