dishui 0.0.65 → 0.0.66

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 (500) 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/Badge/index.js +10 -15
  5. package/dist/components/Badge/index.js.map +1 -1
  6. package/dist/components/Button/index.js +62 -89
  7. package/dist/components/Button/index.js.map +1 -1
  8. package/dist/components/Card/index.d.ts +76 -0
  9. package/dist/components/Card/index.js +178 -69
  10. package/dist/components/Card/index.js.map +1 -1
  11. package/dist/components/Chart/Chart.js +25 -25
  12. package/dist/components/Chart/Chart.js.map +1 -1
  13. package/dist/components/Checkbox/index.js +57 -65
  14. package/dist/components/Checkbox/index.js.map +1 -1
  15. package/dist/components/ChoicePicker/index.d.ts +44 -0
  16. package/dist/components/ChoicePicker/index.js +81 -0
  17. package/dist/components/ChoicePicker/index.js.map +1 -0
  18. package/dist/components/Column/index.d.ts +28 -0
  19. package/dist/components/Column/index.js +30 -0
  20. package/dist/components/Column/index.js.map +1 -0
  21. package/dist/components/DateTimeInput/index.d.ts +44 -0
  22. package/dist/components/DateTimeInput/index.js +48 -0
  23. package/dist/components/DateTimeInput/index.js.map +1 -0
  24. package/dist/components/Demo/index.js +107 -107
  25. package/dist/components/Demo/index.js.map +1 -1
  26. package/dist/components/Divider/index.d.ts +20 -0
  27. package/dist/components/Divider/index.js +30 -0
  28. package/dist/components/Divider/index.js.map +1 -0
  29. package/dist/components/EmptyState/index.js +24 -24
  30. package/dist/components/EmptyState/index.js.map +1 -1
  31. package/dist/components/FileUploader/DropZone.js +134 -136
  32. package/dist/components/FileUploader/DropZone.js.map +1 -1
  33. package/dist/components/FileUploader/FileItem.js +159 -163
  34. package/dist/components/FileUploader/FileItem.js.map +1 -1
  35. package/dist/components/FileUploader/FileUploader.js +126 -127
  36. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  37. package/dist/components/FileUploader/UploadQueue.js +62 -62
  38. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  39. package/dist/components/FloatWindow/index.d.ts +28 -0
  40. package/dist/components/GridLayout/index.d.ts +42 -0
  41. package/dist/components/Icon/index.d.ts +24 -0
  42. package/dist/components/Icon/index.js +26 -0
  43. package/dist/components/Icon/index.js.map +1 -0
  44. package/dist/components/Image/index.d.ts +33 -0
  45. package/dist/components/Image/index.js +44 -0
  46. package/dist/components/Image/index.js.map +1 -0
  47. package/dist/components/Input/index.js +196 -197
  48. package/dist/components/Input/index.js.map +1 -1
  49. package/dist/components/Label/index.js +62 -74
  50. package/dist/components/Label/index.js.map +1 -1
  51. package/dist/components/Layout/index.js +134 -139
  52. package/dist/components/Layout/index.js.map +1 -1
  53. package/dist/components/List/index.js +45 -58
  54. package/dist/components/List/index.js.map +1 -1
  55. package/dist/components/Markdown/Markdown.js +106 -107
  56. package/dist/components/Markdown/Markdown.js.map +1 -1
  57. package/dist/components/Markdown/codeThemes.js +24 -33
  58. package/dist/components/Markdown/codeThemes.js.map +1 -1
  59. package/dist/components/Markdown/markdownComponents.js +203 -208
  60. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  61. package/dist/components/Markdown/parseCodeBlockMeta.js +22 -22
  62. package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
  63. package/dist/components/Markdown/useMarkdownSource.js +46 -46
  64. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  65. package/dist/components/Markdown/useMarkmapRenderer.js +35 -36
  66. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  67. package/dist/components/Markdown/useMermaidRenderer.js +41 -42
  68. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  69. package/dist/components/Modal/index.js +82 -82
  70. package/dist/components/Modal/index.js.map +1 -1
  71. package/dist/components/MultipleChoice/index.d.ts +44 -0
  72. package/dist/components/MultipleChoice/index.js +52 -0
  73. package/dist/components/MultipleChoice/index.js.map +1 -0
  74. package/dist/components/Notification/index.d.ts +17 -0
  75. package/dist/components/Page/index.js +40 -71
  76. package/dist/components/Page/index.js.map +1 -1
  77. package/dist/components/PageHeader/index.js +28 -28
  78. package/dist/components/PageHeader/index.js.map +1 -1
  79. package/dist/components/ProtectedRoute/index.js +8 -9
  80. package/dist/components/ProtectedRoute/index.js.map +1 -1
  81. package/dist/components/Row/index.d.ts +28 -0
  82. package/dist/components/Row/index.js +30 -0
  83. package/dist/components/Row/index.js.map +1 -0
  84. package/dist/components/Select/index.js +251 -254
  85. package/dist/components/Select/index.js.map +1 -1
  86. package/dist/components/SidebarToggleButton/index.js +56 -59
  87. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  88. package/dist/components/Slider/index.d.ts +39 -0
  89. package/dist/components/Slider/index.js +52 -0
  90. package/dist/components/Slider/index.js.map +1 -0
  91. package/dist/components/StatCard/index.d.ts +29 -1
  92. package/dist/components/StatCard/index.js +189 -86
  93. package/dist/components/StatCard/index.js.map +1 -1
  94. package/dist/components/Switch/index.d.ts +34 -0
  95. package/dist/components/Switch/index.js +55 -0
  96. package/dist/components/Switch/index.js.map +1 -0
  97. package/dist/components/Tab/index.d.ts +40 -0
  98. package/dist/components/Table/index.js +109 -121
  99. package/dist/components/Table/index.js.map +1 -1
  100. package/dist/components/Tabs/index.js +28 -38
  101. package/dist/components/Tabs/index.js.map +1 -1
  102. package/dist/components/Text/index.d.ts +43 -0
  103. package/dist/components/Text/index.js +55 -0
  104. package/dist/components/Text/index.js.map +1 -0
  105. package/dist/components/Tooltip/index.d.ts +23 -0
  106. package/dist/components/Tooltip/index.js +34 -0
  107. package/dist/components/Tooltip/index.js.map +1 -0
  108. package/dist/components/Tree/Tree.js +205 -205
  109. package/dist/components/Tree/Tree.js.map +1 -1
  110. package/dist/components/pro/ArticleContextMenu/index.js +86 -87
  111. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  112. package/dist/components/pro/ArticleControl/ArticleControl2.js +250 -250
  113. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  114. package/dist/components/pro/ArticleControl/buildHeadingTree.js +31 -32
  115. package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
  116. package/dist/components/pro/ArticleControl/useArticleToc.js +100 -102
  117. package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
  118. package/dist/components/pro/Calendar/Calendar.d.ts +10 -0
  119. package/dist/components/pro/Calendar/hooks/useCalendarDrag.d.ts +47 -0
  120. package/dist/components/pro/Calendar/hooks/useCalendarState.d.ts +56 -0
  121. package/dist/components/pro/Calendar/index.d.ts +7 -0
  122. package/dist/components/pro/Calendar/types.d.ts +151 -0
  123. package/dist/components/pro/Calendar/utils.d.ts +94 -0
  124. package/dist/components/pro/Chat/Chat.d.ts +6 -0
  125. package/dist/components/pro/Chat/index.d.ts +2 -0
  126. package/dist/components/pro/Chat/types.d.ts +84 -0
  127. package/dist/components/pro/CodeEditor/editors/CodeEditor.js +287 -327
  128. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  129. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -224
  130. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  131. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js +594 -613
  132. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
  133. package/dist/components/pro/CodeEditor/extensions/contextMenu.js +54 -55
  134. package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
  135. package/dist/components/pro/CodeEditor/extensions/index.js +152 -160
  136. package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
  137. package/dist/components/pro/CodeEditor/langs/index.js +7 -15
  138. package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
  139. package/dist/components/pro/CodeEditor/langs/javascript.js +11 -48
  140. package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
  141. package/dist/components/pro/CodeEditor/langs/python.js +4 -40
  142. package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
  143. package/dist/components/pro/CodeEditor/langs/snippets.js +118 -147
  144. package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
  145. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js +153 -153
  146. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  147. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +180 -190
  148. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  149. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js +130 -137
  150. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  151. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js +228 -242
  152. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  153. package/dist/components/pro/CodeEditor/panels/VariablePanel.js +208 -248
  154. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  155. package/dist/components/pro/CodeEditor/themes.js +513 -483
  156. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  157. package/dist/components/pro/CodeEditor/types.d.ts +1 -1
  158. package/dist/components/pro/CodeEditor/utils.js +171 -175
  159. package/dist/components/pro/CodeEditor/utils.js.map +1 -1
  160. package/dist/components/pro/DataTable/DataTable.js +305 -306
  161. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  162. package/dist/components/pro/DataTable/Filters.js +299 -314
  163. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  164. package/dist/components/pro/DataTable/PivotPanel.js +203 -204
  165. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  166. package/dist/components/pro/DataTable/PivotView.js +142 -144
  167. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  168. package/dist/components/pro/DataTable/components/BulkActions.js +42 -42
  169. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  170. package/dist/components/pro/DataTable/components/ColumnSelector.js +84 -84
  171. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  172. package/dist/components/pro/DataTable/components/FilterBar.js +58 -58
  173. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  174. package/dist/components/pro/DataTable/components/TableBody.js +93 -94
  175. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  176. package/dist/components/pro/DataTable/components/TableHeader.js +78 -78
  177. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  178. package/dist/components/pro/DataTable/components/TablePagination.js +77 -77
  179. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  180. package/dist/components/pro/DataTable/components/TableToolbar.js +40 -40
  181. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  182. package/dist/components/pro/DataTable/extension.js +5 -5
  183. package/dist/components/pro/DataTable/extension.js.map +1 -1
  184. package/dist/components/pro/DataTable/pivotEngine.js +84 -92
  185. package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
  186. package/dist/components/pro/DataTable/pivotExtension.js +93 -93
  187. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  188. package/dist/components/pro/DataTable/rowDetailExtension.js +30 -30
  189. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  190. package/dist/components/pro/DataTable/tanstack-table.js +45 -62
  191. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  192. package/dist/components/pro/DataTable/treeDataUtils.js +37 -48
  193. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  194. package/dist/components/pro/DataTable/useColumnDragReorder.js +68 -68
  195. package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
  196. package/dist/components/pro/DataTable/utils.js +156 -168
  197. package/dist/components/pro/DataTable/utils.js.map +1 -1
  198. package/dist/components/pro/FileExplorer/Breadcrumb.js +180 -180
  199. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  200. package/dist/components/pro/FileExplorer/CreateDialog.js +78 -78
  201. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  202. package/dist/components/pro/FileExplorer/FileExplorer.js +202 -205
  203. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  204. package/dist/components/pro/FileExplorer/FileIcon.js +189 -189
  205. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  206. package/dist/components/pro/FileExplorer/GridView.js +100 -100
  207. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  208. package/dist/components/pro/FileExplorer/ListView.js +209 -209
  209. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  210. package/dist/components/pro/FileExplorer/Toolbar.js +199 -199
  211. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  212. package/dist/components/pro/Flow/Flow.js +920 -948
  213. package/dist/components/pro/Flow/Flow.js.map +1 -1
  214. package/dist/components/pro/Flow/FlowCanvas.js +1626 -1662
  215. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  216. package/dist/components/pro/Flow/archify/build.js +85 -94
  217. package/dist/components/pro/Flow/archify/build.js.map +1 -1
  218. package/dist/components/pro/Flow/archify/convert.js +512 -519
  219. package/dist/components/pro/Flow/archify/convert.js.map +1 -1
  220. package/dist/components/pro/Flow/archify/palette.js +87 -104
  221. package/dist/components/pro/Flow/archify/palette.js.map +1 -1
  222. package/dist/components/pro/Flow/archify/presets.js +34 -37
  223. package/dist/components/pro/Flow/archify/presets.js.map +1 -1
  224. package/dist/components/pro/Flow/archify/spec.js +7 -7
  225. package/dist/components/pro/Flow/archify/spec.js.map +1 -1
  226. package/dist/components/pro/Flow/canvas/AlignmentGuides.js +25 -25
  227. package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
  228. package/dist/components/pro/Flow/canvas/GridRenderer.js +54 -55
  229. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  230. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +54 -58
  231. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  232. package/dist/components/pro/Flow/canvas/PixiApp.js +105 -102
  233. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  234. package/dist/components/pro/Flow/canvas/SelectionOverlay.js +38 -38
  235. package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
  236. package/dist/components/pro/Flow/canvas/ViewportContainer.js +117 -117
  237. package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
  238. package/dist/components/pro/Flow/constants.js +266 -278
  239. package/dist/components/pro/Flow/constants.js.map +1 -1
  240. package/dist/components/pro/Flow/context/FlowAIContext.js +27 -28
  241. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
  242. package/dist/components/pro/Flow/context/FlowContext.js +60 -61
  243. package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
  244. package/dist/components/pro/Flow/context/FlowUIContext.js +115 -117
  245. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  246. package/dist/components/pro/Flow/edges/EdgeRenderer.js +135 -138
  247. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  248. package/dist/components/pro/Flow/edges/edgeMarkers.js +11 -14
  249. package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
  250. package/dist/components/pro/Flow/edges/edgePaths.js +351 -367
  251. package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
  252. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js +49 -52
  253. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
  254. package/dist/components/pro/Flow/hooks/useClipboard.js +154 -154
  255. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  256. package/dist/components/pro/Flow/hooks/useCompactMode.js +17 -17
  257. package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
  258. package/dist/components/pro/Flow/hooks/useDeleteSelection.js +40 -40
  259. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  260. package/dist/components/pro/Flow/hooks/useDraggablePanel.js +51 -51
  261. package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
  262. package/dist/components/pro/Flow/hooks/useEdgeMutations.js +157 -157
  263. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  264. package/dist/components/pro/Flow/hooks/useFlowImportExport.js +190 -201
  265. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  266. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js +32 -38
  267. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
  268. package/dist/components/pro/Flow/hooks/useLayoutActions.js +172 -180
  269. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  270. package/dist/components/pro/Flow/hooks/useLineMutations.js +57 -57
  271. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  272. package/dist/components/pro/Flow/hooks/useMindMap.js +229 -238
  273. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  274. package/dist/components/pro/Flow/hooks/useNodeMutations.js +102 -102
  275. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  276. package/dist/components/pro/Flow/hooks/usePdfExport.js +55 -56
  277. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
  278. package/dist/components/pro/Flow/hooks/usePixiApp.js +55 -57
  279. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  280. package/dist/components/pro/Flow/hooks/useResizablePanel.js +31 -31
  281. package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
  282. package/dist/components/pro/Flow/hooks/useSelection.js +69 -69
  283. package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
  284. package/dist/components/pro/Flow/hooks/useUndoRedo.js +27 -27
  285. package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
  286. package/dist/components/pro/Flow/hooks/useViewport.js +28 -28
  287. package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
  288. package/dist/components/pro/Flow/lines/FreehandTool.js +63 -63
  289. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  290. package/dist/components/pro/Flow/lines/GeometricLineTool.js +80 -80
  291. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  292. package/dist/components/pro/Flow/lines/LineRenderer.js +88 -88
  293. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  294. package/dist/components/pro/Flow/lines/lineSmoothing.js +32 -34
  295. package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
  296. package/dist/components/pro/Flow/nodes/DataNodeView.js +236 -242
  297. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  298. package/dist/components/pro/Flow/nodes/MediaContent.js +236 -246
  299. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  300. package/dist/components/pro/Flow/nodes/MediaOverlay.js +63 -63
  301. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  302. package/dist/components/pro/Flow/nodes/Model3DView.js +111 -113
  303. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  304. package/dist/components/pro/Flow/nodes/NodeHandles.js +74 -80
  305. package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
  306. package/dist/components/pro/Flow/nodes/NodeRenderer.js +303 -314
  307. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  308. package/dist/components/pro/Flow/nodes/NodeText.js +25 -29
  309. package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
  310. package/dist/components/pro/Flow/nodes/aiClient.js +124 -137
  311. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  312. package/dist/components/pro/Flow/nodes/animAnchors.js +42 -49
  313. package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
  314. package/dist/components/pro/Flow/nodes/dataUtils.js +246 -267
  315. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  316. package/dist/components/pro/Flow/nodes/nodeUtils.js +23 -28
  317. package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
  318. package/dist/components/pro/Flow/nodes/shapes.js +556 -589
  319. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  320. package/dist/components/pro/Flow/nodes/svgIconTexture.js +37 -39
  321. package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
  322. package/dist/components/pro/Flow/nodes/svgIcons.js +684 -689
  323. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  324. package/dist/components/pro/Flow/panels/AIPanel.js +464 -491
  325. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  326. package/dist/components/pro/Flow/panels/Breadcrumb.js +41 -41
  327. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  328. package/dist/components/pro/Flow/panels/ContextMenu.js +37 -37
  329. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  330. package/dist/components/pro/Flow/panels/DataInspectorSection.js +428 -432
  331. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  332. package/dist/components/pro/Flow/panels/ExpandableTextarea.js +61 -62
  333. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  334. package/dist/components/pro/Flow/panels/FlowPanelGroup.js +114 -114
  335. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  336. package/dist/components/pro/Flow/panels/FlowToolbar.js +347 -391
  337. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  338. package/dist/components/pro/Flow/panels/InspectorPanel.js +1792 -1798
  339. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  340. package/dist/components/pro/Flow/panels/OutlinePanel.js +242 -248
  341. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  342. package/dist/components/pro/Flow/panels/PresentationMode.js +137 -140
  343. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  344. package/dist/components/pro/Flow/panels/ProjectTitle.js +46 -46
  345. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  346. package/dist/components/pro/Flow/panels/ShapePalette.js +557 -572
  347. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  348. package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +0 -1
  349. package/dist/components/pro/Flow/panels/toolbarIcons.js +508 -557
  350. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  351. package/dist/components/pro/Flow/types.js +26 -26
  352. package/dist/components/pro/Flow/types.js.map +1 -1
  353. package/dist/components/pro/Flow/utils/dashedLine.js +113 -117
  354. package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
  355. package/dist/components/pro/Flow/utils/gradient.js +55 -55
  356. package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
  357. package/dist/components/pro/Flow/utils/pdfExport.js +50 -89
  358. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
  359. package/dist/components/pro/Flow/utils/themeColor.js +185 -195
  360. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  361. package/dist/components/pro/Gantt/Gantt.d.ts +7 -0
  362. package/dist/components/pro/Gantt/hooks/useGanttDrag.d.ts +31 -0
  363. package/dist/components/pro/Gantt/hooks/useGanttState.d.ts +58 -0
  364. package/dist/components/pro/Gantt/index.d.ts +6 -0
  365. package/dist/components/pro/Gantt/types.d.ts +478 -0
  366. package/dist/components/pro/Gantt/utils.d.ts +124 -0
  367. package/dist/components/pro/Resizable/Resizable.d.ts +30 -0
  368. package/dist/components/pro/Resizable/index.d.ts +2 -0
  369. package/dist/components/pro/RichTextEditor/AIRewrite.js +323 -334
  370. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  371. package/dist/components/pro/RichTextEditor/BlockHandle.js +314 -316
  372. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  373. package/dist/components/pro/RichTextEditor/BubbleToolbar.js +97 -97
  374. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  375. package/dist/components/pro/RichTextEditor/CommentDialog.js +88 -88
  376. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  377. package/dist/components/pro/RichTextEditor/CommentPanel.js +240 -240
  378. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  379. package/dist/components/pro/RichTextEditor/CommentPopover.js +234 -234
  380. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  381. package/dist/components/pro/RichTextEditor/ContextMenu.js +251 -252
  382. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  383. package/dist/components/pro/RichTextEditor/RichTextEditor.js +267 -271
  384. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  385. package/dist/components/pro/RichTextEditor/SlashMenu.js +214 -214
  386. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  387. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -75
  388. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  389. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +261 -261
  390. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  391. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +172 -526
  392. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  393. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js +112 -114
  394. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  395. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +194 -194
  396. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  397. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +970 -973
  398. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  399. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +11 -12
  400. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  401. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +310 -344
  402. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  403. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +38 -39
  404. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
  405. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +620 -625
  406. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  407. package/dist/components/pro/RichTextEditor/extensions/FontSize.js +25 -25
  408. package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
  409. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +167 -176
  410. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  411. package/dist/components/pro/RichTextEditor/types.js +75 -75
  412. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  413. package/dist/contexts/AppContext.d.ts +1 -1
  414. package/dist/contexts/AppContext.js +216 -221
  415. package/dist/contexts/AppContext.js.map +1 -1
  416. package/dist/data-table.js +15 -41
  417. package/dist/data-table.js.map +1 -1
  418. package/dist/dishui.css +1 -1
  419. package/dist/flow.js +27 -83
  420. package/dist/hooks/useClickOutside.js +18 -18
  421. package/dist/hooks/useClickOutside.js.map +1 -1
  422. package/dist/hooks/useContainerElement.js +9 -9
  423. package/dist/hooks/useContainerElement.js.map +1 -1
  424. package/dist/hooks/useControllableState.js +33 -35
  425. package/dist/hooks/useControllableState.js.map +1 -1
  426. package/dist/hooks/useCopyToClipboard.js +16 -16
  427. package/dist/hooks/useCopyToClipboard.js.map +1 -1
  428. package/dist/hooks/useDebounce.js +14 -14
  429. package/dist/hooks/useDebounce.js.map +1 -1
  430. package/dist/hooks/useDraggable.js +50 -50
  431. package/dist/hooks/useDraggable.js.map +1 -1
  432. package/dist/hooks/useTableColumns.js +39 -41
  433. package/dist/hooks/useTableColumns.js.map +1 -1
  434. package/dist/hooks/useTableData.js +67 -68
  435. package/dist/hooks/useTableData.js.map +1 -1
  436. package/dist/index-nostyled.d.ts +8 -0
  437. package/dist/index.d.ts +27 -1
  438. package/dist/index.js +105 -241
  439. package/dist/layouts/MainLayout.js +56 -56
  440. package/dist/layouts/MainLayout.js.map +1 -1
  441. package/dist/layouts/Navbar.js +214 -214
  442. package/dist/layouts/Navbar.js.map +1 -1
  443. package/dist/layouts/Sidebar.js +184 -186
  444. package/dist/layouts/Sidebar.js.map +1 -1
  445. package/dist/layouts/headbar/Headbar.js +25 -25
  446. package/dist/layouts/headbar/Headbar.js.map +1 -1
  447. package/dist/layouts/headbar/HeadbarLangSwitcher.js +39 -39
  448. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  449. package/dist/layouts/headbar/HeadbarSearch.js +120 -120
  450. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  451. package/dist/layouts/headbar/HeadbarThemeSwitcher.js +27 -27
  452. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  453. package/dist/layouts/headbar/HeadbarTitle.js +26 -26
  454. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  455. package/dist/lite.js +9 -24
  456. package/dist/markdown.js +4 -9
  457. package/dist/pages/components/Calendar/index.d.ts +3 -0
  458. package/dist/pages/components/Calendar/index.en.d.ts +3 -0
  459. package/dist/pages/components/Calendar/index.zh.d.ts +3 -0
  460. package/dist/pages/components/Chat/index.d.ts +3 -0
  461. package/dist/pages/components/Chat/index.en.d.ts +3 -0
  462. package/dist/pages/components/Chat/index.zh.d.ts +3 -0
  463. package/dist/pages/components/FloatWindow/index.d.ts +3 -0
  464. package/dist/pages/components/FloatWindow/index.en.d.ts +3 -0
  465. package/dist/pages/components/FloatWindow/index.zh.d.ts +3 -0
  466. package/dist/pages/components/Gantt/index.d.ts +3 -0
  467. package/dist/pages/components/Gantt/index.en.d.ts +3 -0
  468. package/dist/pages/components/Gantt/index.zh.d.ts +3 -0
  469. package/dist/pages/components/GridLayout/index.d.ts +3 -0
  470. package/dist/pages/components/GridLayout/index.en.d.ts +3 -0
  471. package/dist/pages/components/GridLayout/index.zh.d.ts +3 -0
  472. package/dist/pages/components/Notification/index.d.ts +3 -0
  473. package/dist/pages/components/Notification/index.en.d.ts +3 -0
  474. package/dist/pages/components/Notification/index.zh.d.ts +3 -0
  475. package/dist/pages/components/Resizable/index.d.ts +3 -0
  476. package/dist/pages/components/Resizable/index.en.d.ts +3 -0
  477. package/dist/pages/components/Resizable/index.zh.d.ts +3 -0
  478. package/dist/pages/components/Tab/index.d.ts +3 -0
  479. package/dist/pages/components/Tab/index.en.d.ts +3 -0
  480. package/dist/pages/components/Tab/index.zh.d.ts +3 -0
  481. package/dist/styles/themeStyles.js +87 -86
  482. package/dist/styles/themeStyles.js.map +1 -1
  483. package/dist/utils/cn.d.ts +13 -0
  484. package/dist/utils/cn.js +16 -0
  485. package/dist/utils/cn.js.map +1 -0
  486. package/dist/utils/i18n.js +690 -602
  487. package/dist/utils/i18n.js.map +1 -1
  488. package/dist/utils/menu.js +94 -94
  489. package/dist/utils/menu.js.map +1 -1
  490. package/dist/utils/rehype-code-meta.js +14 -14
  491. package/dist/utils/rehype-code-meta.js.map +1 -1
  492. package/dist/utils/remark-code-meta.js +9 -9
  493. package/dist/utils/remark-code-meta.js.map +1 -1
  494. package/dist/utils/routerBuilder.js +59 -60
  495. package/dist/utils/routerBuilder.js.map +1 -1
  496. package/dist/utils/selection.js +28 -29
  497. package/dist/utils/selection.js.map +1 -1
  498. package/dist/utils/themes.js +275 -255
  499. package/dist/utils/themes.js.map +1 -1
  500. package/package.json +19 -6
@@ -1 +1 @@
1
- {"version":3,"file":"useClipboard.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useClipboard.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useFlowContext } from '../context/FlowContext';\nimport { generateId } from '../nodes/nodeUtils';\nimport type { FlowNode, FlowEdge, FlowLine } from '../types';\n\ninterface ClipboardData {\n nodes: FlowNode[];\n edges: FlowEdge[];\n lines: FlowLine[];\n}\n\n/**\n * Copy/paste/cut for selected flow elements.\n * Uses internal clipboard (not system clipboard) for structured data.\n */\nexport function useClipboard() {\n const { currentCanvas, selection, setDoc, currentCanvasId, setSelection } = useFlowContext();\n const clipboardRef = useRef<ClipboardData | null>(null);\n\n const copy = useCallback(() => {\n const nodes = currentCanvas.nodes.filter(n => selection.nodeIds.has(n.id));\n const edges = currentCanvas.edges.filter(e => selection.edgeIds.has(e.id));\n const lines = currentCanvas.lines.filter(l => selection.lineIds.has(l.id));\n\n // Also include edges that connect selected nodes\n const nodeIds = new Set(nodes.map(n => n.id));\n const connectedEdges = currentCanvas.edges.filter(\n e => nodeIds.has(e.source) && nodeIds.has(e.target) && !selection.edgeIds.has(e.id),\n );\n\n clipboardRef.current = {\n nodes: [...nodes],\n edges: [...edges, ...connectedEdges],\n lines: [...lines],\n };\n }, [currentCanvas, selection]);\n\n const cut = useCallback(() => {\n copy();\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.filter(n => !selection.nodeIds.has(n.id)),\n edges: canvas.edges.filter(e =>\n !selection.edgeIds.has(e.id) &&\n !selection.nodeIds.has(e.source) &&\n !selection.nodeIds.has(e.target),\n ),\n lines: canvas.lines.filter(l => !selection.lineIds.has(l.id)),\n },\n },\n };\n });\n setSelection({ nodeIds: new Set(), edgeIds: new Set(), lineIds: new Set() });\n }, [copy, setDoc, currentCanvasId, selection, setSelection]);\n\n const paste = useCallback((offsetX = 20, offsetY = 20) => {\n const cb = clipboardRef.current;\n if (!cb) return;\n\n const idMap = new Map<string, string>();\n const newNodes: FlowNode[] = cb.nodes.map(n => {\n const newId = generateId('node');\n idMap.set(n.id, newId);\n return {\n ...n,\n id: newId,\n position: { x: n.position.x + offsetX, y: n.position.y + offsetY },\n data: { ...n.data },\n };\n });\n\n const newEdges: FlowEdge[] = cb.edges\n .filter(e => idMap.has(e.source) && idMap.has(e.target))\n .map(e => ({\n ...e,\n id: generateId('edge'),\n source: idMap.get(e.source)!,\n target: idMap.get(e.target)!,\n data: { ...e.data },\n }));\n\n const newLines: FlowLine[] = cb.lines.map(l => ({\n ...l,\n id: generateId('line'),\n points: l.points.map(p => ({ x: p.x + offsetX, y: p.y + offsetY })),\n }));\n\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: [...canvas.nodes, ...newNodes],\n edges: [...canvas.edges, ...newEdges],\n lines: [...canvas.lines, ...newLines],\n },\n },\n };\n });\n\n setSelection({\n nodeIds: new Set(newNodes.map(n => n.id)),\n edgeIds: new Set(newEdges.map(e => e.id)),\n lineIds: new Set(newLines.map(l => l.id)),\n });\n }, [setDoc, currentCanvasId, setSelection]);\n\n const hasClipboard = clipboardRef.current !== null;\n\n /**\n * Duplicate the current selection in place (Cmd/Ctrl+D). Unlike copy+paste\n * this does NOT touch the clipboard, so a prior copy stays intact. Clones the\n * selected nodes (plus edges wholly between them) and lines with a small\n * offset, then selects the clones.\n */\n const duplicate = useCallback((\n offsetX = 24,\n offsetY = 24,\n targets?: { nodeIds?: Set<string>; edgeIds?: Set<string>; lineIds?: Set<string> },\n ) => {\n const nodeSel = targets?.nodeIds ?? selection.nodeIds;\n const edgeSel = targets?.edgeIds ?? selection.edgeIds;\n const lineSel = targets?.lineIds ?? selection.lineIds;\n const nodes = currentCanvas.nodes.filter(n => nodeSel.has(n.id));\n const lines = currentCanvas.lines.filter(l => lineSel.has(l.id));\n const nodeIdSet = new Set(nodes.map(n => n.id));\n const edges = currentCanvas.edges.filter(e =>\n edgeSel.has(e.id) ||\n (nodeIdSet.has(e.source) && nodeIdSet.has(e.target)),\n );\n if (nodes.length === 0 && lines.length === 0 && edges.length === 0) return;\n\n const idMap = new Map<string, string>();\n // Assign fresh ids to nodes first so intra-selection edges can be remapped.\n const newNodes: FlowNode[] = nodes.map(n => {\n const newId = generateId('node');\n idMap.set(n.id, newId);\n return { ...n, id: newId, position: { x: n.position.x + offsetX, y: n.position.y + offsetY }, data: { ...n.data } };\n });\n // Re-parent cloned children onto cloned groups when both were duplicated.\n for (const n of newNodes) {\n if (n.parentId && idMap.has(n.parentId)) n.parentId = idMap.get(n.parentId);\n }\n\n const newEdges: FlowEdge[] = edges\n .filter(e => idMap.has(e.source) && idMap.has(e.target))\n .map(e => ({\n ...e,\n id: generateId('edge'),\n source: idMap.get(e.source)!,\n target: idMap.get(e.target)!,\n data: { ...e.data },\n }));\n\n const newLines: FlowLine[] = lines.map(l => ({\n ...l,\n id: generateId('line'),\n points: l.points.map(p => ({ x: p.x + offsetX, y: p.y + offsetY })),\n }));\n\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: [...canvas.nodes, ...newNodes],\n edges: [...canvas.edges, ...newEdges],\n lines: [...canvas.lines, ...newLines],\n },\n },\n };\n });\n\n setSelection({\n nodeIds: new Set(newNodes.map(n => n.id)),\n edgeIds: new Set(newEdges.map(e => e.id)),\n lineIds: new Set(newLines.map(l => l.id)),\n });\n }, [currentCanvas, selection, setDoc, currentCanvasId, setSelection]);\n\n return { copy, cut, paste, duplicate, hasClipboard };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useClipboard.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useClipboard.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useFlowContext } from '../context/FlowContext';\nimport { generateId } from '../nodes/nodeUtils';\nimport type { FlowNode, FlowEdge, FlowLine } from '../types';\n\ninterface ClipboardData {\n nodes: FlowNode[];\n edges: FlowEdge[];\n lines: FlowLine[];\n}\n\n/**\n * Copy/paste/cut for selected flow elements.\n * Uses internal clipboard (not system clipboard) for structured data.\n */\nexport function useClipboard() {\n const { currentCanvas, selection, setDoc, currentCanvasId, setSelection } = useFlowContext();\n const clipboardRef = useRef<ClipboardData | null>(null);\n\n const copy = useCallback(() => {\n const nodes = currentCanvas.nodes.filter(n => selection.nodeIds.has(n.id));\n const edges = currentCanvas.edges.filter(e => selection.edgeIds.has(e.id));\n const lines = currentCanvas.lines.filter(l => selection.lineIds.has(l.id));\n\n // Also include edges that connect selected nodes\n const nodeIds = new Set(nodes.map(n => n.id));\n const connectedEdges = currentCanvas.edges.filter(\n e => nodeIds.has(e.source) && nodeIds.has(e.target) && !selection.edgeIds.has(e.id),\n );\n\n clipboardRef.current = {\n nodes: [...nodes],\n edges: [...edges, ...connectedEdges],\n lines: [...lines],\n };\n }, [currentCanvas, selection]);\n\n const cut = useCallback(() => {\n copy();\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.filter(n => !selection.nodeIds.has(n.id)),\n edges: canvas.edges.filter(e =>\n !selection.edgeIds.has(e.id) &&\n !selection.nodeIds.has(e.source) &&\n !selection.nodeIds.has(e.target),\n ),\n lines: canvas.lines.filter(l => !selection.lineIds.has(l.id)),\n },\n },\n };\n });\n setSelection({ nodeIds: new Set(), edgeIds: new Set(), lineIds: new Set() });\n }, [copy, setDoc, currentCanvasId, selection, setSelection]);\n\n const paste = useCallback((offsetX = 20, offsetY = 20) => {\n const cb = clipboardRef.current;\n if (!cb) return;\n\n const idMap = new Map<string, string>();\n const newNodes: FlowNode[] = cb.nodes.map(n => {\n const newId = generateId('node');\n idMap.set(n.id, newId);\n return {\n ...n,\n id: newId,\n position: { x: n.position.x + offsetX, y: n.position.y + offsetY },\n data: { ...n.data },\n };\n });\n\n const newEdges: FlowEdge[] = cb.edges\n .filter(e => idMap.has(e.source) && idMap.has(e.target))\n .map(e => ({\n ...e,\n id: generateId('edge'),\n source: idMap.get(e.source)!,\n target: idMap.get(e.target)!,\n data: { ...e.data },\n }));\n\n const newLines: FlowLine[] = cb.lines.map(l => ({\n ...l,\n id: generateId('line'),\n points: l.points.map(p => ({ x: p.x + offsetX, y: p.y + offsetY })),\n }));\n\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: [...canvas.nodes, ...newNodes],\n edges: [...canvas.edges, ...newEdges],\n lines: [...canvas.lines, ...newLines],\n },\n },\n };\n });\n\n setSelection({\n nodeIds: new Set(newNodes.map(n => n.id)),\n edgeIds: new Set(newEdges.map(e => e.id)),\n lineIds: new Set(newLines.map(l => l.id)),\n });\n }, [setDoc, currentCanvasId, setSelection]);\n\n const hasClipboard = clipboardRef.current !== null;\n\n /**\n * Duplicate the current selection in place (Cmd/Ctrl+D). Unlike copy+paste\n * this does NOT touch the clipboard, so a prior copy stays intact. Clones the\n * selected nodes (plus edges wholly between them) and lines with a small\n * offset, then selects the clones.\n */\n const duplicate = useCallback((\n offsetX = 24,\n offsetY = 24,\n targets?: { nodeIds?: Set<string>; edgeIds?: Set<string>; lineIds?: Set<string> },\n ) => {\n const nodeSel = targets?.nodeIds ?? selection.nodeIds;\n const edgeSel = targets?.edgeIds ?? selection.edgeIds;\n const lineSel = targets?.lineIds ?? selection.lineIds;\n const nodes = currentCanvas.nodes.filter(n => nodeSel.has(n.id));\n const lines = currentCanvas.lines.filter(l => lineSel.has(l.id));\n const nodeIdSet = new Set(nodes.map(n => n.id));\n const edges = currentCanvas.edges.filter(e =>\n edgeSel.has(e.id) ||\n (nodeIdSet.has(e.source) && nodeIdSet.has(e.target)),\n );\n if (nodes.length === 0 && lines.length === 0 && edges.length === 0) return;\n\n const idMap = new Map<string, string>();\n // Assign fresh ids to nodes first so intra-selection edges can be remapped.\n const newNodes: FlowNode[] = nodes.map(n => {\n const newId = generateId('node');\n idMap.set(n.id, newId);\n return { ...n, id: newId, position: { x: n.position.x + offsetX, y: n.position.y + offsetY }, data: { ...n.data } };\n });\n // Re-parent cloned children onto cloned groups when both were duplicated.\n for (const n of newNodes) {\n if (n.parentId && idMap.has(n.parentId)) n.parentId = idMap.get(n.parentId);\n }\n\n const newEdges: FlowEdge[] = edges\n .filter(e => idMap.has(e.source) && idMap.has(e.target))\n .map(e => ({\n ...e,\n id: generateId('edge'),\n source: idMap.get(e.source)!,\n target: idMap.get(e.target)!,\n data: { ...e.data },\n }));\n\n const newLines: FlowLine[] = lines.map(l => ({\n ...l,\n id: generateId('line'),\n points: l.points.map(p => ({ x: p.x + offsetX, y: p.y + offsetY })),\n }));\n\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: [...canvas.nodes, ...newNodes],\n edges: [...canvas.edges, ...newEdges],\n lines: [...canvas.lines, ...newLines],\n },\n },\n };\n });\n\n setSelection({\n nodeIds: new Set(newNodes.map(n => n.id)),\n edgeIds: new Set(newEdges.map(e => e.id)),\n lineIds: new Set(newLines.map(l => l.id)),\n });\n }, [currentCanvas, selection, setDoc, currentCanvasId, setSelection]);\n\n return { copy, cut, paste, duplicate, hasClipboard };\n}\n"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
- import { useEffect as i, useState as f } from "react";
2
- function m(t, c = 768) {
3
- const [r, u] = f(!1);
4
- return i(() => {
5
- const e = t.current;
6
- if (!e) return;
7
- const o = () => {
8
- const s = e.clientWidth;
9
- s > 0 && u(s < c);
10
- };
11
- o();
12
- const n = new ResizeObserver(o);
13
- return n.observe(e), () => n.disconnect();
14
- }, [t, c]), r;
1
+ import { useEffect as e, useState as t } from "react";
2
+ //#region src/components/pro/Flow/hooks/useCompactMode.ts
3
+ function n(n, r = 768) {
4
+ let [i, a] = t(!1);
5
+ return e(() => {
6
+ let e = n.current;
7
+ if (!e) return;
8
+ let t = () => {
9
+ let t = e.clientWidth;
10
+ t > 0 && a(t < r);
11
+ };
12
+ t();
13
+ let i = new ResizeObserver(t);
14
+ return i.observe(e), () => i.disconnect();
15
+ }, [n, r]), i;
15
16
  }
16
- export {
17
- m as useCompactMode
18
- };
17
+ //#endregion
18
+ export { n as useCompactMode };
19
19
 
20
20
  //# sourceMappingURL=useCompactMode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCompactMode.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useCompactMode.ts"],"sourcesContent":["import { useEffect, useState, type RefObject } from 'react';\n\n/**\n * Container-width based small-screen (\"compact\") detection.\n *\n * Uses a ResizeObserver on the Flow root element rather than\n * `window.matchMedia`, so the mode follows the space the component actually\n * gets: a phone (narrow container) switches to the compact layout, while the\n * same component embedded in a narrow column on a desktop page does too.\n *\n * In compact mode the Flow editor hides the left/right panel docks and instead\n * offers a single panel switcher at the top with full-screen panels.\n */\nexport function useCompactMode(ref: RefObject<HTMLElement | null>, breakpoint = 768): boolean {\n const [compact, setCompact] = useState(false);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const update = () => {\n const w = el.clientWidth;\n if (w > 0) setCompact(w < breakpoint);\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref, breakpoint]);\n\n return compact;\n}\n"],"mappings":";AAaA,SAAgB,EAAe,GAAoC,IAAa,KAAc;AAC5F,QAAM,CAAC,GAAS,CAAA,IAAc,EAAS,EAAK;AAE5C,SAAA,EAAA,MAAgB;AACd,UAAM,IAAK,EAAI;AACf,QAAI,CAAC,EAAI;AACT,UAAM,IAAA,MAAe;AACnB,YAAM,IAAI,EAAG;AACb,MAAI,IAAI,KAAG,EAAW,IAAI,CAAU;AAAA,IACtC;AACA,IAAA,EAAO;AACP,UAAM,IAAK,IAAI,eAAe,CAAM;AACpC,WAAA,EAAG,QAAQ,CAAE,GACb,MAAa,EAAG,WAAW;AAAA,EAC7B,GAAG,CAAC,GAAK,CAAU,CAAC,GAEb;AACT"}
1
+ {"version":3,"file":"useCompactMode.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useCompactMode.ts"],"sourcesContent":["import { useEffect, useState, type RefObject } from 'react';\n\n/**\n * Container-width based small-screen (\"compact\") detection.\n *\n * Uses a ResizeObserver on the Flow root element rather than\n * `window.matchMedia`, so the mode follows the space the component actually\n * gets: a phone (narrow container) switches to the compact layout, while the\n * same component embedded in a narrow column on a desktop page does too.\n *\n * In compact mode the Flow editor hides the left/right panel docks and instead\n * offers a single panel switcher at the top with full-screen panels.\n */\nexport function useCompactMode(ref: RefObject<HTMLElement | null>, breakpoint = 768): boolean {\n const [compact, setCompact] = useState(false);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const update = () => {\n const w = el.clientWidth;\n if (w > 0) setCompact(w < breakpoint);\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref, breakpoint]);\n\n return compact;\n}\n"],"mappings":";;AAaA,SAAgB,EAAe,GAAoC,IAAa,KAAc;CAC5F,IAAM,CAAC,GAAS,KAAc,EAAS,EAAK;CAe5C,OAbA,QAAgB;EACd,IAAM,IAAK,EAAI;EACf,IAAI,CAAC,GAAI;EACT,IAAM,UAAe;GACnB,IAAM,IAAI,EAAG;GACb,AAAI,IAAI,KAAG,EAAW,IAAI,CAAU;EACtC;EACA,EAAO;EACP,IAAM,IAAK,IAAI,eAAe,CAAM;EAEpC,OADA,EAAG,QAAQ,CAAE,SACA,EAAG,WAAW;CAC7B,GAAG,CAAC,GAAK,CAAU,CAAC,GAEb;AACT"}
@@ -1,43 +1,43 @@
1
- import { useFlowContext as I } from "../context/FlowContext.js";
2
- import { useCallback as l } from "react";
3
- function p() {
4
- const { selection: i, setSelection: d, setDoc: r, currentCanvasId: a } = I();
5
- return l(() => {
6
- const { nodeIds: s, edgeIds: o, lineIds: c } = i;
7
- s.size === 0 && o.size === 0 && c.size === 0 || s.size > 1 && !window.confirm(`确定要删除选中的 ${s.size} 个节点吗?`) || (r((t) => {
8
- const n = t.canvases[a];
9
- return n ? {
10
- ...t,
11
- canvases: {
12
- ...t.canvases,
13
- [a]: {
14
- ...n,
15
- nodes: n.nodes.filter((e) => !s.has(e.id)).map((e) => e.parentId && s.has(e.parentId) ? {
16
- ...e,
17
- parentId: void 0
18
- } : e),
19
- edges: n.edges.filter((e) => !o.has(e.id) && !s.has(e.source) && !s.has(e.target)),
20
- lines: n.lines.filter((e) => !c.has(e.id)).map((e) => e.parentId && s.has(e.parentId) ? {
21
- ...e,
22
- parentId: void 0
23
- } : e)
24
- }
25
- }
26
- } : t;
27
- }), d({
28
- nodeIds: /* @__PURE__ */ new Set(),
29
- edgeIds: /* @__PURE__ */ new Set(),
30
- lineIds: /* @__PURE__ */ new Set()
31
- }));
32
- }, [
33
- i,
34
- r,
35
- a,
36
- d
37
- ]);
1
+ import { useFlowContext as e } from "../context/FlowContext.js";
2
+ import { useCallback as t } from "react";
3
+ //#region src/components/pro/Flow/hooks/useDeleteSelection.ts
4
+ function n() {
5
+ let { selection: n, setSelection: r, setDoc: i, currentCanvasId: a } = e();
6
+ return t(() => {
7
+ let { nodeIds: e, edgeIds: t, lineIds: o } = n;
8
+ (e.size !== 0 || t.size !== 0 || o.size !== 0) && (e.size > 1 && !window.confirm(`确定要删除选中的 ${e.size} 个节点吗?`) || (i((n) => {
9
+ let r = n.canvases[a];
10
+ return r ? {
11
+ ...n,
12
+ canvases: {
13
+ ...n.canvases,
14
+ [a]: {
15
+ ...r,
16
+ nodes: r.nodes.filter((t) => !e.has(t.id)).map((t) => t.parentId && e.has(t.parentId) ? {
17
+ ...t,
18
+ parentId: void 0
19
+ } : t),
20
+ edges: r.edges.filter((n) => !t.has(n.id) && !e.has(n.source) && !e.has(n.target)),
21
+ lines: r.lines.filter((e) => !o.has(e.id)).map((t) => t.parentId && e.has(t.parentId) ? {
22
+ ...t,
23
+ parentId: void 0
24
+ } : t)
25
+ }
26
+ }
27
+ } : n;
28
+ }), r({
29
+ nodeIds: /* @__PURE__ */ new Set(),
30
+ edgeIds: /* @__PURE__ */ new Set(),
31
+ lineIds: /* @__PURE__ */ new Set()
32
+ })));
33
+ }, [
34
+ n,
35
+ i,
36
+ a,
37
+ r
38
+ ]);
38
39
  }
39
- export {
40
- p as useDeleteSelection
41
- };
40
+ //#endregion
41
+ export { n as useDeleteSelection };
42
42
 
43
43
  //# sourceMappingURL=useDeleteSelection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDeleteSelection.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useDeleteSelection.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useFlowContext } from '../context/FlowContext';\n\n/**\n * Delete everything selected on the current canvas (nodes, edges, lines).\n *\n * Shared by the Delete/Backspace keyboard shortcut and the on-canvas delete\n * button, so touch devices (no keyboard) get exactly the same behavior,\n * including the multi-node confirmation prompt.\n */\nexport function useDeleteSelection() {\n const { selection, setSelection, setDoc, currentCanvasId } = useFlowContext();\n\n return useCallback(() => {\n const { nodeIds, edgeIds, lineIds } = selection;\n if (nodeIds.size === 0 && edgeIds.size === 0 && lineIds.size === 0) return;\n if (nodeIds.size > 1 && !window.confirm(`确定要删除选中的 ${nodeIds.size} 个节点吗?`)) return;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes\n .filter(n => !nodeIds.has(n.id))\n .map(n => n.parentId && nodeIds.has(n.parentId) ? { ...n, parentId: undefined } : n),\n edges: canvas.edges.filter(e =>\n !edgeIds.has(e.id) && !nodeIds.has(e.source) && !nodeIds.has(e.target),\n ),\n lines: canvas.lines\n .filter(l => !lineIds.has(l.id))\n .map(l => l.parentId && nodeIds.has(l.parentId) ? { ...l, parentId: undefined } : l),\n },\n },\n };\n });\n setSelection({ nodeIds: new Set(), edgeIds: new Set(), lineIds: new Set() });\n }, [selection, setDoc, currentCanvasId, setSelection]);\n}\n"],"mappings":";;AAUA,SAAgB,IAAqB;AACnC,QAAM,EAAE,WAAA,GAAW,cAAA,GAAc,QAAA,GAAQ,iBAAA,EAAA,IAAoB,EAAe;AAE5E,SAAO,EAAA,MAAkB;AACvB,UAAM,EAAE,SAAA,GAAS,SAAA,GAAS,SAAA,EAAA,IAAY;AACtC,IAAI,EAAQ,SAAS,KAAK,EAAQ,SAAS,KAAK,EAAQ,SAAS,KAC7D,EAAQ,OAAO,KAAK,CAAC,OAAO,QAAQ,YAAY,EAAQ,IAAA,QAAY,MACxE,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,aAAK,IACE;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,EAAK;AAAA,UACP,CAAA,CAAA,GAAkB;AAAA,YACjB,GAAG;AAAA,YACH,OAAO,EAAO,MACX,OAAA,CAAO,MAAK,CAAC,EAAQ,IAAI,EAAE,EAAE,CAAC,EAC9B,IAAA,CAAI,MAAK,EAAE,YAAY,EAAQ,IAAI,EAAE,QAAQ,IAAI;AAAA,cAAE,GAAG;AAAA,cAAG,UAAU;AAAA,YAAU,IAAI,CAAC;AAAA,YACrF,OAAO,EAAO,MAAM,OAAA,CAAO,MACzB,CAAC,EAAQ,IAAI,EAAE,EAAE,KAAK,CAAC,EAAQ,IAAI,EAAE,MAAM,KAAK,CAAC,EAAQ,IAAI,EAAE,MAAM,CACvE;AAAA,YACA,OAAO,EAAO,MACX,OAAA,CAAO,MAAK,CAAC,EAAQ,IAAI,EAAE,EAAE,CAAC,EAC9B,IAAA,CAAI,MAAK,EAAE,YAAY,EAAQ,IAAI,EAAE,QAAQ,IAAI;AAAA,cAAE,GAAG;AAAA,cAAG,UAAU;AAAA,YAAU,IAAI,CAAC;AAAA,UACvF;AAAA,QACF;AAAA,MACF,IAlBoB;AAAA,IAmBtB,CAAC,GACD,EAAa;AAAA,MAAE,SAAS,oBAAI,IAAI;AAAA,MAAG,SAAS,oBAAI,IAAI;AAAA,MAAG,SAAS,oBAAI,IAAI;AAAA,IAAE,CAAC;AAAA,EAC7E,GAAG;AAAA,IAAC;AAAA,IAAW;AAAA,IAAQ;AAAA,IAAiB;AAAA,EAAY,CAAC;AACvD"}
1
+ {"version":3,"file":"useDeleteSelection.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useDeleteSelection.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useFlowContext } from '../context/FlowContext';\n\n/**\n * Delete everything selected on the current canvas (nodes, edges, lines).\n *\n * Shared by the Delete/Backspace keyboard shortcut and the on-canvas delete\n * button, so touch devices (no keyboard) get exactly the same behavior,\n * including the multi-node confirmation prompt.\n */\nexport function useDeleteSelection() {\n const { selection, setSelection, setDoc, currentCanvasId } = useFlowContext();\n\n return useCallback(() => {\n const { nodeIds, edgeIds, lineIds } = selection;\n if (nodeIds.size === 0 && edgeIds.size === 0 && lineIds.size === 0) return;\n if (nodeIds.size > 1 && !window.confirm(`确定要删除选中的 ${nodeIds.size} 个节点吗?`)) return;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes\n .filter(n => !nodeIds.has(n.id))\n .map(n => n.parentId && nodeIds.has(n.parentId) ? { ...n, parentId: undefined } : n),\n edges: canvas.edges.filter(e =>\n !edgeIds.has(e.id) && !nodeIds.has(e.source) && !nodeIds.has(e.target),\n ),\n lines: canvas.lines\n .filter(l => !lineIds.has(l.id))\n .map(l => l.parentId && nodeIds.has(l.parentId) ? { ...l, parentId: undefined } : l),\n },\n },\n };\n });\n setSelection({ nodeIds: new Set(), edgeIds: new Set(), lineIds: new Set() });\n }, [selection, setDoc, currentCanvasId, setSelection]);\n}\n"],"mappings":";;;AAUA,SAAgB,IAAqB;CACnC,IAAM,EAAE,cAAW,iBAAc,WAAQ,uBAAoB,EAAe;CAE5E,OAAO,QAAkB;EACvB,IAAM,EAAE,YAAS,YAAS,eAAY;EAClC,GAAQ,SAAS,KAAK,EAAQ,SAAS,KAAK,EAAQ,SAAS,OAC7D,EAAQ,OAAO,KAAK,CAAC,OAAO,QAAQ,YAAY,EAAQ,KAAK,OAAO,MACxE,GAAO,MAAQ;GACb,IAAM,IAAS,EAAK,SAAS;GAE7B,OADK,IACE;IACL,GAAG;IACH,UAAU;KACR,GAAG,EAAK;MACP,IAAkB;MACjB,GAAG;MACH,OAAO,EAAO,MACX,QAAO,MAAK,CAAC,EAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAC/B,KAAI,MAAK,EAAE,YAAY,EAAQ,IAAI,EAAE,QAAQ,IAAI;OAAE,GAAG;OAAG,UAAU,KAAA;MAAU,IAAI,CAAC;MACrF,OAAO,EAAO,MAAM,QAAO,MACzB,CAAC,EAAQ,IAAI,EAAE,EAAE,KAAK,CAAC,EAAQ,IAAI,EAAE,MAAM,KAAK,CAAC,EAAQ,IAAI,EAAE,MAAM,CACvE;MACA,OAAO,EAAO,MACX,QAAO,MAAK,CAAC,EAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAC/B,KAAI,MAAK,EAAE,YAAY,EAAQ,IAAI,EAAE,QAAQ,IAAI;OAAE,GAAG;OAAG,UAAU,KAAA;MAAU,IAAI,CAAC;KACvF;IACF;GACF,IAlBoB;EAmBtB,CAAC,GACD,EAAa;GAAE,yBAAS,IAAI,IAAI;GAAG,yBAAS,IAAI,IAAI;GAAG,yBAAS,IAAI,IAAI;EAAE,CAAC;CAC7E,GAAG;EAAC;EAAW;EAAQ;EAAiB;CAAY,CAAC;AACvD"}
@@ -1,54 +1,54 @@
1
- import { useCallback as i, useRef as h, useState as Y } from "react";
2
- function R({ onDropDock: p, onDragHintChange: c, edgeZone: u = 72 } = {}) {
3
- const [s, a] = Y(null), n = h(null), l = h(null), d = i(() => {
4
- l.current && (l.current = null, c?.(null));
5
- }, [c]), g = i((t) => {
6
- const r = t.currentTarget.closest("[data-flow-panel]");
7
- if (!r) return;
8
- t.preventDefault(), t.stopPropagation(), t.target.setPointerCapture(t.pointerId);
9
- const e = r.getBoundingClientRect(), o = r.offsetParent?.getBoundingClientRect() ?? {
10
- left: 0,
11
- top: 0
12
- };
13
- n.current = {
14
- startX: t.clientX,
15
- startY: t.clientY,
16
- originX: e.left - o.left,
17
- originY: e.top - o.top,
18
- width: e.width,
19
- parentWidth: r.offsetParent?.clientWidth ?? e.left - o.left + e.width
20
- };
21
- }, []), X = i((t) => {
22
- if (!n.current) return;
23
- const r = t.clientX - n.current.startX, e = t.clientY - n.current.startY, o = n.current.originX + r;
24
- a({
25
- x: o,
26
- y: n.current.originY + e
27
- });
28
- const P = o + n.current.width / 2, f = P < u ? "left" : P > n.current.parentWidth - u ? "right" : null;
29
- f !== l.current && (l.current = f, c?.(f));
30
- }, [u, c]), w = i(() => {
31
- const t = l.current;
32
- d(), n.current = null, t && (p?.(t), a(null));
33
- }, [d, p]);
34
- return {
35
- panelStyle: s ? {
36
- position: "absolute",
37
- left: s.x,
38
- top: s.y,
39
- right: "auto",
40
- bottom: "auto"
41
- } : void 0,
42
- handleProps: {
43
- onPointerDown: g,
44
- onPointerMove: X,
45
- onPointerUp: w
46
- },
47
- resetPosition: () => a(null)
48
- };
1
+ import { useCallback as e, useRef as t, useState as n } from "react";
2
+ //#region src/components/pro/Flow/hooks/useDraggablePanel.ts
3
+ function r({ onDropDock: r, onDragHintChange: i, edgeZone: a = 72 } = {}) {
4
+ let [o, s] = n(null), c = t(null), l = t(null), u = e(() => {
5
+ l.current && (l.current = null, i?.(null));
6
+ }, [i]), d = e((e) => {
7
+ let t = e.currentTarget.closest("[data-flow-panel]");
8
+ if (!t) return;
9
+ e.preventDefault(), e.stopPropagation(), e.target.setPointerCapture(e.pointerId);
10
+ let n = t.getBoundingClientRect(), r = t.offsetParent?.getBoundingClientRect() ?? {
11
+ left: 0,
12
+ top: 0
13
+ };
14
+ c.current = {
15
+ startX: e.clientX,
16
+ startY: e.clientY,
17
+ originX: n.left - r.left,
18
+ originY: n.top - r.top,
19
+ width: n.width,
20
+ parentWidth: t.offsetParent?.clientWidth ?? n.left - r.left + n.width
21
+ };
22
+ }, []), f = e((e) => {
23
+ if (!c.current) return;
24
+ let t = e.clientX - c.current.startX, n = e.clientY - c.current.startY, r = c.current.originX + t;
25
+ s({
26
+ x: r,
27
+ y: c.current.originY + n
28
+ });
29
+ let o = r + c.current.width / 2, u = o < a ? "left" : o > c.current.parentWidth - a ? "right" : null;
30
+ u !== l.current && (l.current = u, i?.(u));
31
+ }, [a, i]), p = e(() => {
32
+ let e = l.current;
33
+ u(), c.current = null, e && (r?.(e), s(null));
34
+ }, [u, r]);
35
+ return {
36
+ panelStyle: o ? {
37
+ position: "absolute",
38
+ left: o.x,
39
+ top: o.y,
40
+ right: "auto",
41
+ bottom: "auto"
42
+ } : void 0,
43
+ handleProps: {
44
+ onPointerDown: d,
45
+ onPointerMove: f,
46
+ onPointerUp: p
47
+ },
48
+ resetPosition: () => s(null)
49
+ };
49
50
  }
50
- export {
51
- R as useDraggablePanel
52
- };
51
+ //#endregion
52
+ export { r as useDraggablePanel };
53
53
 
54
54
  //# sourceMappingURL=useDraggablePanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDraggablePanel.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useDraggablePanel.ts"],"sourcesContent":["import { useState, useRef, useCallback, type PointerEvent as ReactPointerEvent } from 'react';\n\nexport interface PanelPosition {\n x: number;\n y: number;\n}\n\nexport type PanelDropSide = 'left' | 'right';\n\nexport interface DraggablePanelOptions {\n /** Called on pointer-up when the floating panel was dropped over a dock edge. */\n onDropDock?: (side: PanelDropSide) => void;\n /** Notified while dragging so the workspace can highlight the hovered dock. */\n onDragHintChange?: (side: PanelDropSide | null) => void;\n /** Width (px) of the drop zone along each edge of the workspace. */\n edgeZone?: number;\n}\n\ninterface DragState {\n startX: number;\n startY: number;\n originX: number;\n originY: number;\n width: number;\n parentWidth: number;\n}\n\n/**\n * Enables free-position dragging for overlay panels. Returns a position\n * override (null = use default CSS) and a set of props to spread onto the\n * panel's drag handle element.\n *\n * When `onDropDock` is provided, dropping the panel within `edgeZone` of the\n * workspace's left/right edge attaches it to that dock: the hovered edge is\n * reported via `onDragHintChange` during the drag (so the workspace can\n * highlight a drop zone) and the position resets on drop so the panel snaps\n * into its dock slot.\n */\nexport function useDraggablePanel({ onDropDock, onDragHintChange, edgeZone = 72 }: DraggablePanelOptions = {}) {\n const [pos, setPos] = useState<PanelPosition | null>(null);\n const dragState = useRef<DragState | null>(null);\n const hintRef = useRef<PanelDropSide | null>(null);\n\n const clearHint = useCallback(() => {\n if (hintRef.current) {\n hintRef.current = null;\n onDragHintChange?.(null);\n }\n }, [onDragHintChange]);\n\n const onPointerDown = useCallback((e: ReactPointerEvent<HTMLElement>) => {\n const el = (e.currentTarget as HTMLElement).closest('[data-flow-panel]') as HTMLElement | null;\n if (!el) return;\n e.preventDefault();\n e.stopPropagation();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n const rect = el.getBoundingClientRect();\n const parentRect = el.offsetParent?.getBoundingClientRect() ?? { left: 0, top: 0 };\n dragState.current = {\n startX: e.clientX,\n startY: e.clientY,\n originX: rect.left - parentRect.left,\n originY: rect.top - parentRect.top,\n width: rect.width,\n parentWidth: el.offsetParent?.clientWidth ?? rect.left - parentRect.left + rect.width,\n };\n }, []);\n\n const onPointerMove = useCallback((e: ReactPointerEvent<HTMLElement>) => {\n if (!dragState.current) return;\n const dx = e.clientX - dragState.current.startX;\n const dy = e.clientY - dragState.current.startY;\n const x = dragState.current.originX + dx;\n setPos({ x, y: dragState.current.originY + dy });\n // Dock affinity: the panel's center hovering a workspace edge highlights\n // that dock as the drop target.\n const centerX = x + dragState.current.width / 2;\n const next: PanelDropSide | null =\n centerX < edgeZone ? 'left'\n : centerX > dragState.current.parentWidth - edgeZone ? 'right'\n : null;\n if (next !== hintRef.current) {\n hintRef.current = next;\n onDragHintChange?.(next);\n }\n }, [edgeZone, onDragHintChange]);\n\n const onPointerUp = useCallback(() => {\n const hint = hintRef.current;\n clearHint();\n dragState.current = null;\n if (hint) {\n onDropDock?.(hint);\n setPos(null); // snap back into the dock slot\n }\n }, [clearHint, onDropDock]);\n\n const style: React.CSSProperties | undefined = pos\n ? { position: 'absolute', left: pos.x, top: pos.y, right: 'auto', bottom: 'auto' }\n : undefined;\n\n return {\n panelStyle: style,\n handleProps: { onPointerDown, onPointerMove, onPointerUp },\n resetPosition: () => setPos(null),\n };\n}\n"],"mappings":";AAsCA,SAAgB,EAAkB,EAAE,YAAA,GAAY,kBAAA,GAAkB,UAAA,IAAW,GAAA,IAA8B,CAAC,GAAG;AAC7G,QAAM,CAAC,GAAK,CAAA,IAAU,EAA+B,IAAI,GACnD,IAAY,EAAyB,IAAI,GACzC,IAAU,EAA6B,IAAI,GAE3C,IAAY,EAAA,MAAkB;AAClC,IAAI,EAAQ,YACV,EAAQ,UAAU,MAClB,IAAmB,IAAI;AAAA,EAE3B,GAAG,CAAC,CAAgB,CAAC,GAEf,IAAgB,EAAA,CAAa,MAAsC;AACvE,UAAM,IAAM,EAAE,cAA8B,QAAQ,mBAAmB;AACvE,QAAI,CAAC,EAAI;AACT,IAAA,EAAE,eAAe,GACjB,EAAE,gBAAgB,GAClB,EAAG,OAAuB,kBAAkB,EAAE,SAAS;AACvD,UAAM,IAAO,EAAG,sBAAsB,GAChC,IAAa,EAAG,cAAc,sBAAsB,KAAK;AAAA,MAAE,MAAM;AAAA,MAAG,KAAK;AAAA,IAAE;AACjF,IAAA,EAAU,UAAU;AAAA,MAClB,QAAQ,EAAE;AAAA,MACV,QAAQ,EAAE;AAAA,MACV,SAAS,EAAK,OAAO,EAAW;AAAA,MAChC,SAAS,EAAK,MAAM,EAAW;AAAA,MAC/B,OAAO,EAAK;AAAA,MACZ,aAAa,EAAG,cAAc,eAAe,EAAK,OAAO,EAAW,OAAO,EAAK;AAAA,IAClF;AAAA,EACF,GAAG,CAAC,CAAC,GAEC,IAAgB,EAAA,CAAa,MAAsC;AACvE,QAAI,CAAC,EAAU,QAAS;AACxB,UAAM,IAAK,EAAE,UAAU,EAAU,QAAQ,QACnC,IAAK,EAAE,UAAU,EAAU,QAAQ,QACnC,IAAI,EAAU,QAAQ,UAAU;AACtC,IAAA,EAAO;AAAA,MAAE,GAAA;AAAA,MAAG,GAAG,EAAU,QAAQ,UAAU;AAAA,IAAG,CAAC;AAG/C,UAAM,IAAU,IAAI,EAAU,QAAQ,QAAQ,GACxC,IACJ,IAAU,IAAW,SACnB,IAAU,EAAU,QAAQ,cAAc,IAAW,UACrD;AACJ,IAAI,MAAS,EAAQ,YACnB,EAAQ,UAAU,GAClB,IAAmB,CAAI;AAAA,EAE3B,GAAG,CAAC,GAAU,CAAgB,CAAC,GAEzB,IAAc,EAAA,MAAkB;AACpC,UAAM,IAAO,EAAQ;AACrB,IAAA,EAAU,GACV,EAAU,UAAU,MAChB,MACF,IAAa,CAAI,GACjB,EAAO,IAAI;AAAA,EAEf,GAAG,CAAC,GAAW,CAAU,CAAC;AAM1B,SAAO;AAAA,IACL,YAL6C,IAC3C;AAAA,MAAE,UAAU;AAAA,MAAY,MAAM,EAAI;AAAA,MAAG,KAAK,EAAI;AAAA,MAAG,OAAO;AAAA,MAAQ,QAAQ;AAAA,IAAO,IAC/E;AAAA,IAIF,aAAa;AAAA,MAAE,eAAA;AAAA,MAAe,eAAA;AAAA,MAAe,aAAA;AAAA,IAAY;AAAA,IACzD,eAAA,MAAqB,EAAO,IAAI;AAAA,EAClC;AACF"}
1
+ {"version":3,"file":"useDraggablePanel.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useDraggablePanel.ts"],"sourcesContent":["import { useState, useRef, useCallback, type PointerEvent as ReactPointerEvent } from 'react';\n\nexport interface PanelPosition {\n x: number;\n y: number;\n}\n\nexport type PanelDropSide = 'left' | 'right';\n\nexport interface DraggablePanelOptions {\n /** Called on pointer-up when the floating panel was dropped over a dock edge. */\n onDropDock?: (side: PanelDropSide) => void;\n /** Notified while dragging so the workspace can highlight the hovered dock. */\n onDragHintChange?: (side: PanelDropSide | null) => void;\n /** Width (px) of the drop zone along each edge of the workspace. */\n edgeZone?: number;\n}\n\ninterface DragState {\n startX: number;\n startY: number;\n originX: number;\n originY: number;\n width: number;\n parentWidth: number;\n}\n\n/**\n * Enables free-position dragging for overlay panels. Returns a position\n * override (null = use default CSS) and a set of props to spread onto the\n * panel's drag handle element.\n *\n * When `onDropDock` is provided, dropping the panel within `edgeZone` of the\n * workspace's left/right edge attaches it to that dock: the hovered edge is\n * reported via `onDragHintChange` during the drag (so the workspace can\n * highlight a drop zone) and the position resets on drop so the panel snaps\n * into its dock slot.\n */\nexport function useDraggablePanel({ onDropDock, onDragHintChange, edgeZone = 72 }: DraggablePanelOptions = {}) {\n const [pos, setPos] = useState<PanelPosition | null>(null);\n const dragState = useRef<DragState | null>(null);\n const hintRef = useRef<PanelDropSide | null>(null);\n\n const clearHint = useCallback(() => {\n if (hintRef.current) {\n hintRef.current = null;\n onDragHintChange?.(null);\n }\n }, [onDragHintChange]);\n\n const onPointerDown = useCallback((e: ReactPointerEvent<HTMLElement>) => {\n const el = (e.currentTarget as HTMLElement).closest('[data-flow-panel]') as HTMLElement | null;\n if (!el) return;\n e.preventDefault();\n e.stopPropagation();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n const rect = el.getBoundingClientRect();\n const parentRect = el.offsetParent?.getBoundingClientRect() ?? { left: 0, top: 0 };\n dragState.current = {\n startX: e.clientX,\n startY: e.clientY,\n originX: rect.left - parentRect.left,\n originY: rect.top - parentRect.top,\n width: rect.width,\n parentWidth: el.offsetParent?.clientWidth ?? rect.left - parentRect.left + rect.width,\n };\n }, []);\n\n const onPointerMove = useCallback((e: ReactPointerEvent<HTMLElement>) => {\n if (!dragState.current) return;\n const dx = e.clientX - dragState.current.startX;\n const dy = e.clientY - dragState.current.startY;\n const x = dragState.current.originX + dx;\n setPos({ x, y: dragState.current.originY + dy });\n // Dock affinity: the panel's center hovering a workspace edge highlights\n // that dock as the drop target.\n const centerX = x + dragState.current.width / 2;\n const next: PanelDropSide | null =\n centerX < edgeZone ? 'left'\n : centerX > dragState.current.parentWidth - edgeZone ? 'right'\n : null;\n if (next !== hintRef.current) {\n hintRef.current = next;\n onDragHintChange?.(next);\n }\n }, [edgeZone, onDragHintChange]);\n\n const onPointerUp = useCallback(() => {\n const hint = hintRef.current;\n clearHint();\n dragState.current = null;\n if (hint) {\n onDropDock?.(hint);\n setPos(null); // snap back into the dock slot\n }\n }, [clearHint, onDropDock]);\n\n const style: React.CSSProperties | undefined = pos\n ? { position: 'absolute', left: pos.x, top: pos.y, right: 'auto', bottom: 'auto' }\n : undefined;\n\n return {\n panelStyle: style,\n handleProps: { onPointerDown, onPointerMove, onPointerUp },\n resetPosition: () => setPos(null),\n };\n}\n"],"mappings":";;AAsCA,SAAgB,EAAkB,EAAE,eAAY,qBAAkB,cAAW,OAA8B,CAAC,GAAG;CAC7G,IAAM,CAAC,GAAK,KAAU,EAA+B,IAAI,GACnD,IAAY,EAAyB,IAAI,GACzC,IAAU,EAA6B,IAAI,GAE3C,IAAY,QAAkB;EAClC,AAAI,EAAQ,YACV,EAAQ,UAAU,MAClB,IAAmB,IAAI;CAE3B,GAAG,CAAC,CAAgB,CAAC,GAEf,IAAgB,GAAa,MAAsC;EACvE,IAAM,IAAM,EAAE,cAA8B,QAAQ,mBAAmB;EACvE,IAAI,CAAC,GAAI;EAGT,AAFA,EAAE,eAAe,GACjB,EAAE,gBAAgB,GAClB,EAAG,OAAuB,kBAAkB,EAAE,SAAS;EACvD,IAAM,IAAO,EAAG,sBAAsB,GAChC,IAAa,EAAG,cAAc,sBAAsB,KAAK;GAAE,MAAM;GAAG,KAAK;EAAE;EACjF,EAAU,UAAU;GAClB,QAAQ,EAAE;GACV,QAAQ,EAAE;GACV,SAAS,EAAK,OAAO,EAAW;GAChC,SAAS,EAAK,MAAM,EAAW;GAC/B,OAAO,EAAK;GACZ,aAAa,EAAG,cAAc,eAAe,EAAK,OAAO,EAAW,OAAO,EAAK;EAClF;CACF,GAAG,CAAC,CAAC,GAEC,IAAgB,GAAa,MAAsC;EACvE,IAAI,CAAC,EAAU,SAAS;EACxB,IAAM,IAAK,EAAE,UAAU,EAAU,QAAQ,QACnC,IAAK,EAAE,UAAU,EAAU,QAAQ,QACnC,IAAI,EAAU,QAAQ,UAAU;EACtC,EAAO;GAAE;GAAG,GAAG,EAAU,QAAQ,UAAU;EAAG,CAAC;EAG/C,IAAM,IAAU,IAAI,EAAU,QAAQ,QAAQ,GACxC,IACJ,IAAU,IAAW,SACnB,IAAU,EAAU,QAAQ,cAAc,IAAW,UACrD;EACJ,AAAI,MAAS,EAAQ,YACnB,EAAQ,UAAU,GAClB,IAAmB,CAAI;CAE3B,GAAG,CAAC,GAAU,CAAgB,CAAC,GAEzB,IAAc,QAAkB;EACpC,IAAM,IAAO,EAAQ;EAGrB,AAFA,EAAU,GACV,EAAU,UAAU,MAChB,MACF,IAAa,CAAI,GACjB,EAAO,IAAI;CAEf,GAAG,CAAC,GAAW,CAAU,CAAC;CAM1B,OAAO;EACL,YAL6C,IAC3C;GAAE,UAAU;GAAY,MAAM,EAAI;GAAG,KAAK,EAAI;GAAG,OAAO;GAAQ,QAAQ;EAAO,IAC/E,KAAA;EAIF,aAAa;GAAE;GAAe;GAAe;EAAY;EACzD,qBAAqB,EAAO,IAAI;CAClC;AACF"}