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,142 +1,139 @@
1
- import { resolveThemeColor as _ } from "../utils/themeColor.js";
2
- import { drawDashedPath as x } from "../utils/dashedLine.js";
3
- import { buildEdgePath as v, getPathCenter as E, resolveEdgeEndpoints as T } from "./edgePaths.js";
4
- import { angleBetween as C, drawMarker as w } from "./edgeMarkers.js";
5
- import { Container as k, Graphics as u, Text as B, TextStyle as M } from "pixi.js";
6
- function L(e, l, a = 2) {
7
- if (!(!e || e === "solid"))
8
- return e === "dynamic" ? [a * 4, a * 3] : [e === "dotted" ? a : a * 3, l === "dense" ? a : l === "sparse" ? a * 4 : a * 2];
1
+ import { resolveThemeColor as e } from "../utils/themeColor.js";
2
+ import { drawDashedPath as t } from "../utils/dashedLine.js";
3
+ import { buildEdgePath as n, getPathCenter as r, resolveEdgeEndpoints as i } from "./edgePaths.js";
4
+ import { angleBetween as a, drawMarker as o } from "./edgeMarkers.js";
5
+ import { Container as s, Graphics as c, Text as l, TextStyle as u } from "pixi.js";
6
+ //#region src/components/pro/Flow/edges/EdgeRenderer.ts
7
+ function d(e, t, n = 2) {
8
+ if (e && e !== "solid") return e === "dynamic" ? [n * 4, n * 3] : [e === "dotted" ? n : n * 3, t === "dense" ? n : t === "sparse" ? n * 4 : n * 2];
9
9
  }
10
- var F = class {
11
- world;
12
- edgeLayer;
13
- edges = /* @__PURE__ */ new Map();
14
- _dynamicOffset = 0;
15
- advanceAnimation(e) {
16
- this._dynamicOffset = (this._dynamicOffset + e * 0.06) % 1e3;
17
- }
18
- constructor(e) {
19
- this.world = e, this.edgeLayer = new k({ label: "edges" }), this.world.addChildAt(this.edgeLayer, 0);
20
- }
21
- sync(e, l, a, i, h) {
22
- const g = /* @__PURE__ */ new Set();
23
- for (const o of e) {
24
- g.add(o.id);
25
- const t = T(o, l);
26
- if (!t) continue;
27
- let f = this.edges.get(o.id);
28
- f || (f = this._createEdge(o), this.edges.set(o.id, f)), this._updateEdge(f, o, t, a.has(o.id), i === o.id, h?.presentation ?? !1);
29
- }
30
- for (const [o, t] of this.edges) g.has(o) || (this.edgeLayer.removeChild(t.container), t.container.destroy({ children: !0 }), this.edges.delete(o));
31
- }
32
- _createEdge(e) {
33
- const l = new k({ label: `edge-${e.id}` }), a = new u();
34
- a.label = "edge-hitarea", a.eventMode = "static", a.cursor = "pointer", a.alpha = 0, l.addChild(a);
35
- const i = new u();
36
- i.label = "edge-line", l.addChild(i);
37
- const h = new u();
38
- return h.label = "edge-animation", l.addChild(h), this.edgeLayer.addChild(l), {
39
- container: l,
40
- line: i,
41
- animation: h,
42
- hitArea: a,
43
- labelBg: null,
44
- label: null,
45
- edgeId: e.id
46
- };
47
- }
48
- _updateEdge(e, l, a, i, h, g) {
49
- const { line: o, animation: t, hitArea: f } = e, r = l.data, y = i ? "#3b82f6" : _(r.strokeColor, "#374151"), m = r.strokeWidth ?? 2, s = v(l.type, a, r.waypoints, r.bezierControls);
50
- if (o.clear(), this._drawPath(o, s, y, m, r.lineStyle, r.dashDensity), t.clear(), g && r.animated) {
51
- const n = [Math.max(18, m * 12), Math.max(90, m * 45)];
52
- x(t, s, n, -this._dynamicOffset * 2.2), t.stroke({
53
- color: 6333946,
54
- width: m + 5,
55
- alpha: 0.18,
56
- cap: "round"
57
- }), x(t, s, n, -this._dynamicOffset * 2.2), t.stroke({
58
- color: 3718648,
59
- width: m + 2,
60
- alpha: 0.55,
61
- cap: "round"
62
- }), x(t, s, n, -this._dynamicOffset * 2.2), t.stroke({
63
- color: 16777215,
64
- width: Math.max(1, m * 0.7),
65
- alpha: 0.9,
66
- cap: "round"
67
- });
68
- }
69
- if (r.markerStart && r.markerStart !== "none" && s.length >= 2) {
70
- const n = s[0], c = s[1], b = c.type === "C" ? c.cp1x : c.x, d = c.type === "C" ? c.cp1y : c.y, p = C(b, d, n.x, n.y);
71
- w(o, r.markerStart, n.x, n.y, p, y);
72
- }
73
- if (r.markerEnd && r.markerEnd !== "none" && s.length >= 2) {
74
- const n = s[s.length - 1], c = n.type === "C" ? n.cp2x : s[s.length - 2].x, b = n.type === "C" ? n.cp2y : s[s.length - 2].y, d = C(c, b, n.x, n.y);
75
- w(o, r.markerEnd, n.x, n.y, d, y);
76
- }
77
- if (f.clear(), this._drawPath(f, s, "#000000", Math.max(m + 10, 14), "solid"), f.alpha = 1e-3, r.labelText) {
78
- const n = E(s);
79
- if (!e.label) {
80
- const d = new u();
81
- d.label = "edge-label-bg", e.container.addChild(d), e.labelBg = d;
82
- const p = new M({
83
- fontFamily: r.labelFontFamily ?? "system-ui, -apple-system, sans-serif",
84
- fontSize: r.labelFontSize ?? 12,
85
- fill: y
86
- });
87
- e.label = new B({
88
- text: r.labelText,
89
- style: p
90
- }), e.label.anchor.set(0.5, 0.5), e.container.addChild(e.label);
91
- }
92
- e.label.text = r.labelText;
93
- const c = n.x, b = n.y - 10;
94
- if (e.label.position.set(c, b), e.label.style.fill = y, e.labelBg) {
95
- const d = e.label.width + 10, p = e.label.height + 4;
96
- e.labelBg.clear(), e.labelBg.roundRect(c - d / 2, b - p / 2, d, p, 4).fill({
97
- color: 16777215,
98
- alpha: 0.92
99
- });
100
- }
101
- } else
102
- e.label && (e.label.text = ""), e.labelBg && e.labelBg.clear();
103
- }
104
- _drawPath(e, l, a, i, h, g) {
105
- const o = L(h, g, i);
106
- if (o) {
107
- const t = h === "dynamic" ? this._dynamicOffset : 0;
108
- x(e, l, o, t), e.stroke({
109
- color: a,
110
- width: i,
111
- cap: "round"
112
- });
113
- } else {
114
- for (const t of l) switch (t.type) {
115
- case "M":
116
- e.moveTo(t.x, t.y);
117
- break;
118
- case "L":
119
- e.lineTo(t.x, t.y);
120
- break;
121
- case "C":
122
- e.bezierCurveTo(t.cp1x, t.cp1y, t.cp2x, t.cp2y, t.x, t.y);
123
- break;
124
- case "Q":
125
- e.quadraticCurveTo(t.cp1x, t.cp1y, t.x, t.y);
126
- }
127
- e.stroke({
128
- color: a,
129
- width: i
130
- });
131
- }
132
- }
133
- destroy() {
134
- for (const [, e] of this.edges) e.container.destroy({ children: !0 });
135
- this.edges.clear(), this.edgeLayer.destroy({ children: !0 });
136
- }
137
- };
138
- export {
139
- F as EdgeRenderer
10
+ var f = class {
11
+ world;
12
+ edgeLayer;
13
+ edges = /* @__PURE__ */ new Map();
14
+ _dynamicOffset = 0;
15
+ advanceAnimation(e) {
16
+ this._dynamicOffset = (this._dynamicOffset + e * .06) % 1e3;
17
+ }
18
+ constructor(e) {
19
+ this.world = e, this.edgeLayer = new s({ label: "edges" }), this.world.addChildAt(this.edgeLayer, 0);
20
+ }
21
+ sync(e, t, n, r, a) {
22
+ let o = /* @__PURE__ */ new Set();
23
+ for (let s of e) {
24
+ o.add(s.id);
25
+ let e = i(s, t);
26
+ if (!e) continue;
27
+ let c = this.edges.get(s.id);
28
+ c || (c = this._createEdge(s), this.edges.set(s.id, c)), this._updateEdge(c, s, e, n.has(s.id), r === s.id, a?.presentation ?? !1);
29
+ }
30
+ for (let [e, t] of this.edges) o.has(e) || (this.edgeLayer.removeChild(t.container), t.container.destroy({ children: !0 }), this.edges.delete(e));
31
+ }
32
+ _createEdge(e) {
33
+ let t = new s({ label: `edge-${e.id}` }), n = new c();
34
+ n.label = "edge-hitarea", n.eventMode = "static", n.cursor = "pointer", n.alpha = 0, t.addChild(n);
35
+ let r = new c();
36
+ r.label = "edge-line", t.addChild(r);
37
+ let i = new c();
38
+ return i.label = "edge-animation", t.addChild(i), this.edgeLayer.addChild(t), {
39
+ container: t,
40
+ line: r,
41
+ animation: i,
42
+ hitArea: n,
43
+ labelBg: null,
44
+ label: null,
45
+ edgeId: e.id
46
+ };
47
+ }
48
+ _updateEdge(i, s, d, f, p, m) {
49
+ let { line: h, animation: g, hitArea: _ } = i, v = s.data, y = f ? "#3b82f6" : e(v.strokeColor, "#374151"), b = v.strokeWidth ?? 2, x = n(s.type, d, v.waypoints, v.bezierControls);
50
+ if (h.clear(), this._drawPath(h, x, y, b, v.lineStyle, v.dashDensity), g.clear(), m && v.animated) {
51
+ let e = [Math.max(18, b * 12), Math.max(90, b * 45)];
52
+ t(g, x, e, -this._dynamicOffset * 2.2), g.stroke({
53
+ color: 6333946,
54
+ width: b + 5,
55
+ alpha: .18,
56
+ cap: "round"
57
+ }), t(g, x, e, -this._dynamicOffset * 2.2), g.stroke({
58
+ color: 3718648,
59
+ width: b + 2,
60
+ alpha: .55,
61
+ cap: "round"
62
+ }), t(g, x, e, -this._dynamicOffset * 2.2), g.stroke({
63
+ color: 16777215,
64
+ width: Math.max(1, b * .7),
65
+ alpha: .9,
66
+ cap: "round"
67
+ });
68
+ }
69
+ if (v.markerStart && v.markerStart !== "none" && x.length >= 2) {
70
+ let e = x[0], t = x[1], n = t.type === "C" ? t.cp1x : t.x, r = t.type === "C" ? t.cp1y : t.y, i = a(n, r, e.x, e.y);
71
+ o(h, v.markerStart, e.x, e.y, i, y);
72
+ }
73
+ if (v.markerEnd && v.markerEnd !== "none" && x.length >= 2) {
74
+ let e = x[x.length - 1], t = e.type === "C" ? e.cp2x : x[x.length - 2].x, n = e.type === "C" ? e.cp2y : x[x.length - 2].y, r = a(t, n, e.x, e.y);
75
+ o(h, v.markerEnd, e.x, e.y, r, y);
76
+ }
77
+ if (_.clear(), this._drawPath(_, x, "#000000", Math.max(b + 10, 14), "solid"), _.alpha = .001, v.labelText) {
78
+ let e = r(x);
79
+ if (!i.label) {
80
+ let e = new c();
81
+ e.label = "edge-label-bg", i.container.addChild(e), i.labelBg = e;
82
+ let t = new u({
83
+ fontFamily: v.labelFontFamily ?? "system-ui, -apple-system, sans-serif",
84
+ fontSize: v.labelFontSize ?? 12,
85
+ fill: y
86
+ });
87
+ i.label = new l({
88
+ text: v.labelText,
89
+ style: t
90
+ }), i.label.anchor.set(.5, .5), i.container.addChild(i.label);
91
+ }
92
+ i.label.text = v.labelText;
93
+ let t = e.x, n = e.y - 10;
94
+ if (i.label.position.set(t, n), i.label.style.fill = y, i.labelBg) {
95
+ let e = i.label.width + 10, r = i.label.height + 4;
96
+ i.labelBg.clear(), i.labelBg.roundRect(t - e / 2, n - r / 2, e, r, 4).fill({
97
+ color: 16777215,
98
+ alpha: .92
99
+ });
100
+ }
101
+ } else i.label && (i.label.text = ""), i.labelBg && i.labelBg.clear();
102
+ }
103
+ _drawPath(e, n, r, i, a, o) {
104
+ let s = d(a, o, i);
105
+ if (s) {
106
+ let o = a === "dynamic" ? this._dynamicOffset : 0;
107
+ t(e, n, s, o), e.stroke({
108
+ color: r,
109
+ width: i,
110
+ cap: "round"
111
+ });
112
+ } else {
113
+ for (let t of n) switch (t.type) {
114
+ case "M":
115
+ e.moveTo(t.x, t.y);
116
+ break;
117
+ case "L":
118
+ e.lineTo(t.x, t.y);
119
+ break;
120
+ case "C":
121
+ e.bezierCurveTo(t.cp1x, t.cp1y, t.cp2x, t.cp2y, t.x, t.y);
122
+ break;
123
+ case "Q": e.quadraticCurveTo(t.cp1x, t.cp1y, t.x, t.y);
124
+ }
125
+ e.stroke({
126
+ color: r,
127
+ width: i
128
+ });
129
+ }
130
+ }
131
+ destroy() {
132
+ for (let [, e] of this.edges) e.container.destroy({ children: !0 });
133
+ this.edges.clear(), this.edgeLayer.destroy({ children: !0 });
134
+ }
140
135
  };
136
+ //#endregion
137
+ export { f as EdgeRenderer };
141
138
 
142
139
  //# sourceMappingURL=EdgeRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EdgeRenderer.js","names":[],"sources":["../../../../../src/components/pro/Flow/edges/EdgeRenderer.ts"],"sourcesContent":["import { Container, Graphics, Text, TextStyle } from 'pixi.js';\nimport type { FlowEdge, FlowNode } from '../types';\nimport { buildEdgePath, getPathCenter, resolveEdgeEndpoints, type PathSegment, type EdgeEndpoints } from './edgePaths';\nimport { drawMarker, angleBetween } from './edgeMarkers';\nimport { drawDashedPath, type PathSeg } from '../utils/dashedLine';\nimport { resolveThemeColor } from '../utils/themeColor';\n\ninterface EdgeDisplay {\n container: Container;\n line: Graphics;\n animation: Graphics;\n hitArea: Graphics;\n labelBg: Graphics | null;\n label: Text | null;\n edgeId: string;\n}\n\nfunction getDashPattern(style?: string, density?: string, width = 2): number[] | undefined {\n if (!style || style === 'solid') return undefined;\n if (style === 'dynamic') return [width * 4, width * 3];\n const base = style === 'dotted' ? width : width * 3;\n const gap = density === 'dense' ? width : density === 'sparse' ? width * 4 : width * 2;\n return [base, gap];\n}\n\n/**\n * Manages PixiJS display objects for all edges.\n */\nexport class EdgeRenderer {\n private world: Container;\n private edgeLayer: Container;\n private edges = new Map<string, EdgeDisplay>();\n private _dynamicOffset = 0;\n\n /** Call once per frame to advance the dynamic dash animation. */\n advanceAnimation(deltaMs: number): void {\n this._dynamicOffset = (this._dynamicOffset + deltaMs * 0.06) % 1000;\n }\n\n constructor(world: Container) {\n this.world = world;\n this.edgeLayer = new Container({ label: 'edges' });\n // Edges below nodes\n this.world.addChildAt(this.edgeLayer, 0);\n }\n\n sync(\n flowEdges: FlowEdge[],\n nodeMap: Map<string, FlowNode>,\n selectedIds: Set<string>,\n hoveredId: string | null,\n options?: { presentation?: boolean },\n ): void {\n const seen = new Set<string>();\n\n for (const edge of flowEdges) {\n seen.add(edge.id);\n const endpoints = resolveEdgeEndpoints(edge, nodeMap);\n if (!endpoints) continue;\n\n let display = this.edges.get(edge.id);\n if (!display) {\n display = this._createEdge(edge);\n this.edges.set(edge.id, display);\n }\n this._updateEdge(\n display,\n edge,\n endpoints,\n selectedIds.has(edge.id),\n hoveredId === edge.id,\n options?.presentation ?? false,\n );\n }\n\n for (const [id, display] of this.edges) {\n if (!seen.has(id)) {\n this.edgeLayer.removeChild(display.container);\n display.container.destroy({ children: true });\n this.edges.delete(id);\n }\n }\n }\n\n private _createEdge(edge: FlowEdge): EdgeDisplay {\n const container = new Container({ label: `edge-${edge.id}` });\n\n const hitArea = new Graphics();\n hitArea.label = 'edge-hitarea';\n hitArea.eventMode = 'static';\n hitArea.cursor = 'pointer';\n hitArea.alpha = 0;\n container.addChild(hitArea);\n\n const line = new Graphics();\n line.label = 'edge-line';\n container.addChild(line);\n\n const animation = new Graphics();\n animation.label = 'edge-animation';\n container.addChild(animation);\n\n this.edgeLayer.addChild(container);\n return { container, line, animation, hitArea, labelBg: null, label: null, edgeId: edge.id };\n }\n\n private _updateEdge(\n display: EdgeDisplay,\n edge: FlowEdge,\n endpoints: EdgeEndpoints,\n selected: boolean,\n hovered: boolean,\n presentation: boolean,\n ): void {\n const { line, animation, hitArea } = display;\n const data = edge.data;\n const color = selected ? '#3b82f6' : resolveThemeColor(data.strokeColor, '#374151');\n const width = data.strokeWidth ?? 2;\n\n const segments = buildEdgePath(edge.type, endpoints, data.waypoints, data.bezierControls);\n\n // Draw visible line\n line.clear();\n this._drawPath(line, segments, color, width, data.lineStyle, data.dashDensity);\n\n // Presentation animation: a bright gradient-like pulse travels from source\n // to target. A short dashed segment plus soft outer stroke gives the pulse\n // a leading highlight and fading tail without requiring SVG filters.\n animation.clear();\n if (presentation && data.animated) {\n const pattern = [Math.max(18, width * 12), Math.max(90, width * 45)];\n drawDashedPath(animation, segments as PathSeg[], pattern, -this._dynamicOffset * 2.2);\n animation.stroke({ color: 0x60a5fa, width: width + 5, alpha: 0.18, cap: 'round' as const });\n drawDashedPath(animation, segments as PathSeg[], pattern, -this._dynamicOffset * 2.2);\n animation.stroke({ color: 0x38bdf8, width: width + 2, alpha: 0.55, cap: 'round' as const });\n drawDashedPath(animation, segments as PathSeg[], pattern, -this._dynamicOffset * 2.2);\n animation.stroke({ color: 0xffffff, width: Math.max(1, width * 0.7), alpha: 0.9, cap: 'round' as const });\n }\n\n // Draw markers — use curve tangent for accurate arrow direction\n if (data.markerStart && data.markerStart !== 'none' && segments.length >= 2) {\n const tip = segments[0];\n const next = segments[1];\n // For curves the tangent at t=0 is tip→cp1; for lines it's tip→next\n const fromX = next.type === 'C' ? next.cp1x! : next.x;\n const fromY = next.type === 'C' ? next.cp1y! : next.y;\n const angle = angleBetween(fromX, fromY, tip.x, tip.y);\n drawMarker(line, data.markerStart, tip.x, tip.y, angle, color);\n }\n if (data.markerEnd && data.markerEnd !== 'none' && segments.length >= 2) {\n const tip = segments[segments.length - 1];\n // For curves the tangent at t=1 is cp2→endpoint\n const fromX = tip.type === 'C' ? tip.cp2x! : segments[segments.length - 2].x;\n const fromY = tip.type === 'C' ? tip.cp2y! : segments[segments.length - 2].y;\n const angle = angleBetween(fromX, fromY, tip.x, tip.y);\n drawMarker(line, data.markerEnd, tip.x, tip.y, angle, color);\n }\n\n // Wider invisible hit area\n hitArea.clear();\n this._drawPath(hitArea, segments, '#000000', Math.max(width + 10, 14), 'solid');\n hitArea.alpha = 0.001;\n\n // Edge label\n if (data.labelText) {\n const center = getPathCenter(segments);\n if (!display.label) {\n // Background chip drawn first so it sits behind the text.\n const labelBg = new Graphics();\n labelBg.label = 'edge-label-bg';\n display.container.addChild(labelBg);\n display.labelBg = labelBg;\n\n const style = new TextStyle({\n fontFamily: data.labelFontFamily ?? 'system-ui, -apple-system, sans-serif',\n fontSize: data.labelFontSize ?? 12,\n fill: color,\n });\n display.label = new Text({ text: data.labelText, style });\n display.label.anchor.set(0.5, 0.5);\n display.container.addChild(display.label);\n }\n display.label.text = data.labelText;\n const lx = center.x;\n const ly = center.y - 10;\n display.label.position.set(lx, ly);\n (display.label.style as TextStyle).fill = color;\n\n // Draw a rounded background chip behind the label so the line / waypoints\n // don't show through the text.\n if (display.labelBg) {\n const padX = 5;\n const padY = 2;\n const tw = display.label.width + padX * 2;\n const th = display.label.height + padY * 2;\n display.labelBg.clear();\n display.labelBg\n .roundRect(lx - tw / 2, ly - th / 2, tw, th, 4)\n .fill({ color: 0xffffff, alpha: 0.92 });\n }\n } else {\n if (display.label) display.label.text = '';\n if (display.labelBg) display.labelBg.clear();\n }\n }\n\n private _drawPath(\n g: Graphics,\n segs: PathSegment[],\n color: string,\n width: number,\n lineStyle?: string,\n dashDensity?: string,\n ): void {\n const dash = getDashPattern(lineStyle, dashDensity, width);\n if (dash) {\n const offset = lineStyle === 'dynamic' ? this._dynamicOffset : 0;\n drawDashedPath(g, segs as PathSeg[], dash, offset);\n g.stroke({ color, width, cap: 'round' as const });\n } else {\n for (const seg of segs) {\n switch (seg.type) {\n case 'M': g.moveTo(seg.x, seg.y); break;\n case 'L': g.lineTo(seg.x, seg.y); break;\n case 'C': g.bezierCurveTo(seg.cp1x!, seg.cp1y!, seg.cp2x!, seg.cp2y!, seg.x, seg.y); break;\n case 'Q': g.quadraticCurveTo(seg.cp1x!, seg.cp1y!, seg.x, seg.y); break;\n }\n }\n g.stroke({ color, width });\n }\n }\n\n destroy(): void {\n for (const [, display] of this.edges) {\n display.container.destroy({ children: true });\n }\n this.edges.clear();\n this.edgeLayer.destroy({ children: true });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EdgeRenderer.js","names":[],"sources":["../../../../../src/components/pro/Flow/edges/EdgeRenderer.ts"],"sourcesContent":["import { Container, Graphics, Text, TextStyle } from 'pixi.js';\nimport type { FlowEdge, FlowNode } from '../types';\nimport { buildEdgePath, getPathCenter, resolveEdgeEndpoints, type PathSegment, type EdgeEndpoints } from './edgePaths';\nimport { drawMarker, angleBetween } from './edgeMarkers';\nimport { drawDashedPath, type PathSeg } from '../utils/dashedLine';\nimport { resolveThemeColor } from '../utils/themeColor';\n\ninterface EdgeDisplay {\n container: Container;\n line: Graphics;\n animation: Graphics;\n hitArea: Graphics;\n labelBg: Graphics | null;\n label: Text | null;\n edgeId: string;\n}\n\nfunction getDashPattern(style?: string, density?: string, width = 2): number[] | undefined {\n if (!style || style === 'solid') return undefined;\n if (style === 'dynamic') return [width * 4, width * 3];\n const base = style === 'dotted' ? width : width * 3;\n const gap = density === 'dense' ? width : density === 'sparse' ? width * 4 : width * 2;\n return [base, gap];\n}\n\n/**\n * Manages PixiJS display objects for all edges.\n */\nexport class EdgeRenderer {\n private world: Container;\n private edgeLayer: Container;\n private edges = new Map<string, EdgeDisplay>();\n private _dynamicOffset = 0;\n\n /** Call once per frame to advance the dynamic dash animation. */\n advanceAnimation(deltaMs: number): void {\n this._dynamicOffset = (this._dynamicOffset + deltaMs * 0.06) % 1000;\n }\n\n constructor(world: Container) {\n this.world = world;\n this.edgeLayer = new Container({ label: 'edges' });\n // Edges below nodes\n this.world.addChildAt(this.edgeLayer, 0);\n }\n\n sync(\n flowEdges: FlowEdge[],\n nodeMap: Map<string, FlowNode>,\n selectedIds: Set<string>,\n hoveredId: string | null,\n options?: { presentation?: boolean },\n ): void {\n const seen = new Set<string>();\n\n for (const edge of flowEdges) {\n seen.add(edge.id);\n const endpoints = resolveEdgeEndpoints(edge, nodeMap);\n if (!endpoints) continue;\n\n let display = this.edges.get(edge.id);\n if (!display) {\n display = this._createEdge(edge);\n this.edges.set(edge.id, display);\n }\n this._updateEdge(\n display,\n edge,\n endpoints,\n selectedIds.has(edge.id),\n hoveredId === edge.id,\n options?.presentation ?? false,\n );\n }\n\n for (const [id, display] of this.edges) {\n if (!seen.has(id)) {\n this.edgeLayer.removeChild(display.container);\n display.container.destroy({ children: true });\n this.edges.delete(id);\n }\n }\n }\n\n private _createEdge(edge: FlowEdge): EdgeDisplay {\n const container = new Container({ label: `edge-${edge.id}` });\n\n const hitArea = new Graphics();\n hitArea.label = 'edge-hitarea';\n hitArea.eventMode = 'static';\n hitArea.cursor = 'pointer';\n hitArea.alpha = 0;\n container.addChild(hitArea);\n\n const line = new Graphics();\n line.label = 'edge-line';\n container.addChild(line);\n\n const animation = new Graphics();\n animation.label = 'edge-animation';\n container.addChild(animation);\n\n this.edgeLayer.addChild(container);\n return { container, line, animation, hitArea, labelBg: null, label: null, edgeId: edge.id };\n }\n\n private _updateEdge(\n display: EdgeDisplay,\n edge: FlowEdge,\n endpoints: EdgeEndpoints,\n selected: boolean,\n hovered: boolean,\n presentation: boolean,\n ): void {\n const { line, animation, hitArea } = display;\n const data = edge.data;\n const color = selected ? '#3b82f6' : resolveThemeColor(data.strokeColor, '#374151');\n const width = data.strokeWidth ?? 2;\n\n const segments = buildEdgePath(edge.type, endpoints, data.waypoints, data.bezierControls);\n\n // Draw visible line\n line.clear();\n this._drawPath(line, segments, color, width, data.lineStyle, data.dashDensity);\n\n // Presentation animation: a bright gradient-like pulse travels from source\n // to target. A short dashed segment plus soft outer stroke gives the pulse\n // a leading highlight and fading tail without requiring SVG filters.\n animation.clear();\n if (presentation && data.animated) {\n const pattern = [Math.max(18, width * 12), Math.max(90, width * 45)];\n drawDashedPath(animation, segments as PathSeg[], pattern, -this._dynamicOffset * 2.2);\n animation.stroke({ color: 0x60a5fa, width: width + 5, alpha: 0.18, cap: 'round' as const });\n drawDashedPath(animation, segments as PathSeg[], pattern, -this._dynamicOffset * 2.2);\n animation.stroke({ color: 0x38bdf8, width: width + 2, alpha: 0.55, cap: 'round' as const });\n drawDashedPath(animation, segments as PathSeg[], pattern, -this._dynamicOffset * 2.2);\n animation.stroke({ color: 0xffffff, width: Math.max(1, width * 0.7), alpha: 0.9, cap: 'round' as const });\n }\n\n // Draw markers — use curve tangent for accurate arrow direction\n if (data.markerStart && data.markerStart !== 'none' && segments.length >= 2) {\n const tip = segments[0];\n const next = segments[1];\n // For curves the tangent at t=0 is tip→cp1; for lines it's tip→next\n const fromX = next.type === 'C' ? next.cp1x! : next.x;\n const fromY = next.type === 'C' ? next.cp1y! : next.y;\n const angle = angleBetween(fromX, fromY, tip.x, tip.y);\n drawMarker(line, data.markerStart, tip.x, tip.y, angle, color);\n }\n if (data.markerEnd && data.markerEnd !== 'none' && segments.length >= 2) {\n const tip = segments[segments.length - 1];\n // For curves the tangent at t=1 is cp2→endpoint\n const fromX = tip.type === 'C' ? tip.cp2x! : segments[segments.length - 2].x;\n const fromY = tip.type === 'C' ? tip.cp2y! : segments[segments.length - 2].y;\n const angle = angleBetween(fromX, fromY, tip.x, tip.y);\n drawMarker(line, data.markerEnd, tip.x, tip.y, angle, color);\n }\n\n // Wider invisible hit area\n hitArea.clear();\n this._drawPath(hitArea, segments, '#000000', Math.max(width + 10, 14), 'solid');\n hitArea.alpha = 0.001;\n\n // Edge label\n if (data.labelText) {\n const center = getPathCenter(segments);\n if (!display.label) {\n // Background chip drawn first so it sits behind the text.\n const labelBg = new Graphics();\n labelBg.label = 'edge-label-bg';\n display.container.addChild(labelBg);\n display.labelBg = labelBg;\n\n const style = new TextStyle({\n fontFamily: data.labelFontFamily ?? 'system-ui, -apple-system, sans-serif',\n fontSize: data.labelFontSize ?? 12,\n fill: color,\n });\n display.label = new Text({ text: data.labelText, style });\n display.label.anchor.set(0.5, 0.5);\n display.container.addChild(display.label);\n }\n display.label.text = data.labelText;\n const lx = center.x;\n const ly = center.y - 10;\n display.label.position.set(lx, ly);\n (display.label.style as TextStyle).fill = color;\n\n // Draw a rounded background chip behind the label so the line / waypoints\n // don't show through the text.\n if (display.labelBg) {\n const padX = 5;\n const padY = 2;\n const tw = display.label.width + padX * 2;\n const th = display.label.height + padY * 2;\n display.labelBg.clear();\n display.labelBg\n .roundRect(lx - tw / 2, ly - th / 2, tw, th, 4)\n .fill({ color: 0xffffff, alpha: 0.92 });\n }\n } else {\n if (display.label) display.label.text = '';\n if (display.labelBg) display.labelBg.clear();\n }\n }\n\n private _drawPath(\n g: Graphics,\n segs: PathSegment[],\n color: string,\n width: number,\n lineStyle?: string,\n dashDensity?: string,\n ): void {\n const dash = getDashPattern(lineStyle, dashDensity, width);\n if (dash) {\n const offset = lineStyle === 'dynamic' ? this._dynamicOffset : 0;\n drawDashedPath(g, segs as PathSeg[], dash, offset);\n g.stroke({ color, width, cap: 'round' as const });\n } else {\n for (const seg of segs) {\n switch (seg.type) {\n case 'M': g.moveTo(seg.x, seg.y); break;\n case 'L': g.lineTo(seg.x, seg.y); break;\n case 'C': g.bezierCurveTo(seg.cp1x!, seg.cp1y!, seg.cp2x!, seg.cp2y!, seg.x, seg.y); break;\n case 'Q': g.quadraticCurveTo(seg.cp1x!, seg.cp1y!, seg.x, seg.y); break;\n }\n }\n g.stroke({ color, width });\n }\n }\n\n destroy(): void {\n for (const [, display] of this.edges) {\n display.container.destroy({ children: true });\n }\n this.edges.clear();\n this.edgeLayer.destroy({ children: true });\n }\n}\n"],"mappings":"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"}
@@ -1,18 +1,15 @@
1
- var p = 10;
2
- function T(n, r, o, c, s, l, t = p) {
3
- if (r === "none") return;
4
- const e = Math.cos(s), a = Math.sin(s), f = o, h = c, i = o - t * e + t / 2 * a, M = c - t * a - t / 2 * e, u = o - t * e - t / 2 * a, w = c - t * a + t / 2 * e;
5
- n.moveTo(f, h).lineTo(i, M).lineTo(u, w), r === "arrowclosed" ? n.closePath().fill({ color: l }) : n.stroke({
6
- color: l,
7
- width: 1.5
8
- });
1
+ function e(e, t, n, r, i, a, o = 10) {
2
+ if (t === "none") return;
3
+ let s = Math.cos(i), c = Math.sin(i), l = n, u = r, d = n - o * s + o / 2 * c, f = r - o * c - o / 2 * s, p = n - o * s - o / 2 * c, m = r - o * c + o / 2 * s;
4
+ e.moveTo(l, u).lineTo(d, f).lineTo(p, m), t === "arrowclosed" ? e.closePath().fill({ color: a }) : e.stroke({
5
+ color: a,
6
+ width: 1.5
7
+ });
9
8
  }
10
- function X(n, r, o, c) {
11
- return Math.atan2(c - r, o - n);
9
+ function t(e, t, n, r) {
10
+ return Math.atan2(r - t, n - e);
12
11
  }
13
- export {
14
- X as angleBetween,
15
- T as drawMarker
16
- };
12
+ //#endregion
13
+ export { t as angleBetween, e as drawMarker };
17
14
 
18
15
  //# sourceMappingURL=edgeMarkers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edgeMarkers.js","names":[],"sources":["../../../../../src/components/pro/Flow/edges/edgeMarkers.ts"],"sourcesContent":["import { Graphics } from 'pixi.js';\nimport type { FlowEdgeMarkerKind } from '../types';\n\nconst MARKER_SIZE = 10;\n\n/**\n * Draw an arrow marker at a given position and angle.\n */\nexport function drawMarker(\n g: Graphics,\n kind: FlowEdgeMarkerKind,\n x: number,\n y: number,\n angle: number,\n color: string,\n size = MARKER_SIZE,\n): void {\n if (kind === 'none') return;\n\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n\n const tipX = x;\n const tipY = y;\n const leftX = x - size * cos + (size / 2) * sin;\n const leftY = y - size * sin - (size / 2) * cos;\n const rightX = x - size * cos - (size / 2) * sin;\n const rightY = y - size * sin + (size / 2) * cos;\n\n g.moveTo(tipX, tipY)\n .lineTo(leftX, leftY)\n .lineTo(rightX, rightY);\n\n if (kind === 'arrowclosed') {\n g.closePath().fill({ color });\n } else {\n g.stroke({ color, width: 1.5 });\n }\n}\n\n/**\n * Compute the angle between two points (in radians).\n */\nexport function angleBetween(\n fromX: number, fromY: number,\n toX: number, toY: number,\n): number {\n return Math.atan2(toY - fromY, toX - fromX);\n}\n"],"mappings":"AAGA,IAAM,IAAc;AAKpB,SAAgB,EACd,GACA,GACA,GACA,GACA,GACA,GACA,IAAO,GACD;AACN,MAAI,MAAS,OAAQ;AAErB,QAAM,IAAM,KAAK,IAAI,CAAK,GACpB,IAAM,KAAK,IAAI,CAAK,GAEpB,IAAO,GACP,IAAO,GACP,IAAQ,IAAI,IAAO,IAAO,IAAO,IAAK,GACtC,IAAQ,IAAI,IAAO,IAAO,IAAO,IAAK,GACtC,IAAS,IAAI,IAAO,IAAO,IAAO,IAAK,GACvC,IAAS,IAAI,IAAO,IAAO,IAAO,IAAK;AAE7C,EAAA,EAAE,OAAO,GAAM,CAAI,EAChB,OAAO,GAAO,CAAK,EACnB,OAAO,GAAQ,CAAM,GAEpB,MAAS,gBACX,EAAE,UAAU,EAAE,KAAK,EAAE,OAAA,EAAM,CAAC,IAE5B,EAAE,OAAO;AAAA,IAAE,OAAA;AAAA,IAAO,OAAO;AAAA,EAAI,CAAC;AAElC;AAKA,SAAgB,EACd,GAAe,GACf,GAAa,GACL;AACR,SAAO,KAAK,MAAM,IAAM,GAAO,IAAM,CAAK;AAC5C"}
1
+ {"version":3,"file":"edgeMarkers.js","names":[],"sources":["../../../../../src/components/pro/Flow/edges/edgeMarkers.ts"],"sourcesContent":["import { Graphics } from 'pixi.js';\nimport type { FlowEdgeMarkerKind } from '../types';\n\nconst MARKER_SIZE = 10;\n\n/**\n * Draw an arrow marker at a given position and angle.\n */\nexport function drawMarker(\n g: Graphics,\n kind: FlowEdgeMarkerKind,\n x: number,\n y: number,\n angle: number,\n color: string,\n size = MARKER_SIZE,\n): void {\n if (kind === 'none') return;\n\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n\n const tipX = x;\n const tipY = y;\n const leftX = x - size * cos + (size / 2) * sin;\n const leftY = y - size * sin - (size / 2) * cos;\n const rightX = x - size * cos - (size / 2) * sin;\n const rightY = y - size * sin + (size / 2) * cos;\n\n g.moveTo(tipX, tipY)\n .lineTo(leftX, leftY)\n .lineTo(rightX, rightY);\n\n if (kind === 'arrowclosed') {\n g.closePath().fill({ color });\n } else {\n g.stroke({ color, width: 1.5 });\n }\n}\n\n/**\n * Compute the angle between two points (in radians).\n */\nexport function angleBetween(\n fromX: number, fromY: number,\n toX: number, toY: number,\n): number {\n return Math.atan2(toY - fromY, toX - fromX);\n}\n"],"mappings":"AAQA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACA,GACA,IAAO,IACD;CACN,IAAI,MAAS,QAAQ;CAErB,IAAM,IAAM,KAAK,IAAI,CAAK,GACpB,IAAM,KAAK,IAAI,CAAK,GAEpB,IAAO,GACP,IAAO,GACP,IAAQ,IAAI,IAAO,IAAO,IAAO,IAAK,GACtC,IAAQ,IAAI,IAAO,IAAO,IAAO,IAAK,GACtC,IAAS,IAAI,IAAO,IAAO,IAAO,IAAK,GACvC,IAAS,IAAI,IAAO,IAAO,IAAO,IAAK;CAM7C,AAJA,EAAE,OAAO,GAAM,CAAI,CAAC,CACjB,OAAO,GAAO,CAAK,CAAC,CACpB,OAAO,GAAQ,CAAM,GAEpB,MAAS,gBACX,EAAE,UAAU,CAAC,CAAC,KAAK,EAAE,SAAM,CAAC,IAE5B,EAAE,OAAO;EAAE;EAAO,OAAO;CAAI,CAAC;AAElC;AAKA,SAAgB,EACd,GAAe,GACf,GAAa,GACL;CACR,OAAO,KAAK,MAAM,IAAM,GAAO,IAAM,CAAK;AAC5C"}