dishui 0.0.65 → 0.0.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +10 -11
  2. package/dist/chart.js +12 -46
  3. package/dist/code-editor.js +16 -43
  4. package/dist/components/Accordion/index.d.ts +39 -0
  5. package/dist/components/Accordion/index.js +70 -0
  6. package/dist/components/Accordion/index.js.map +1 -0
  7. package/dist/components/Avatar/index.d.ts +48 -0
  8. package/dist/components/Avatar/index.js +71 -0
  9. package/dist/components/Avatar/index.js.map +1 -0
  10. package/dist/components/Badge/index.js +10 -15
  11. package/dist/components/Badge/index.js.map +1 -1
  12. package/dist/components/Button/index.js +62 -89
  13. package/dist/components/Button/index.js.map +1 -1
  14. package/dist/components/Card/index.d.ts +142 -0
  15. package/dist/components/Card/index.js +368 -69
  16. package/dist/components/Card/index.js.map +1 -1
  17. package/dist/components/Chart/Chart.js +25 -25
  18. package/dist/components/Chart/Chart.js.map +1 -1
  19. package/dist/components/Checkbox/index.js +57 -65
  20. package/dist/components/Checkbox/index.js.map +1 -1
  21. package/dist/components/ChoicePicker/index.d.ts +44 -0
  22. package/dist/components/ChoicePicker/index.js +81 -0
  23. package/dist/components/ChoicePicker/index.js.map +1 -0
  24. package/dist/components/Column/index.d.ts +28 -0
  25. package/dist/components/Column/index.js +30 -0
  26. package/dist/components/Column/index.js.map +1 -0
  27. package/dist/components/DateTimeInput/index.d.ts +44 -0
  28. package/dist/components/DateTimeInput/index.js +48 -0
  29. package/dist/components/DateTimeInput/index.js.map +1 -0
  30. package/dist/components/Demo/index.js +107 -107
  31. package/dist/components/Demo/index.js.map +1 -1
  32. package/dist/components/Divider/index.d.ts +20 -0
  33. package/dist/components/Divider/index.js +30 -0
  34. package/dist/components/Divider/index.js.map +1 -0
  35. package/dist/components/EmptyState/index.js +24 -24
  36. package/dist/components/EmptyState/index.js.map +1 -1
  37. package/dist/components/FileUploader/DropZone.js +134 -136
  38. package/dist/components/FileUploader/DropZone.js.map +1 -1
  39. package/dist/components/FileUploader/FileItem.js +159 -163
  40. package/dist/components/FileUploader/FileItem.js.map +1 -1
  41. package/dist/components/FileUploader/FileUploader.js +126 -127
  42. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  43. package/dist/components/FileUploader/UploadQueue.js +62 -62
  44. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  45. package/dist/components/FloatWindow/index.d.ts +28 -0
  46. package/dist/components/GridLayout/index.d.ts +42 -0
  47. package/dist/components/Icon/index.d.ts +26 -0
  48. package/dist/components/Icon/index.js +27 -0
  49. package/dist/components/Icon/index.js.map +1 -0
  50. package/dist/components/Image/index.d.ts +33 -0
  51. package/dist/components/Image/index.js +44 -0
  52. package/dist/components/Image/index.js.map +1 -0
  53. package/dist/components/Input/index.js +196 -197
  54. package/dist/components/Input/index.js.map +1 -1
  55. package/dist/components/Label/index.js +62 -74
  56. package/dist/components/Label/index.js.map +1 -1
  57. package/dist/components/Layout/index.js +134 -139
  58. package/dist/components/Layout/index.js.map +1 -1
  59. package/dist/components/List/index.js +45 -58
  60. package/dist/components/List/index.js.map +1 -1
  61. package/dist/components/Markdown/Markdown.js +106 -107
  62. package/dist/components/Markdown/Markdown.js.map +1 -1
  63. package/dist/components/Markdown/codeThemes.js +24 -33
  64. package/dist/components/Markdown/codeThemes.js.map +1 -1
  65. package/dist/components/Markdown/markdownComponents.js +203 -208
  66. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  67. package/dist/components/Markdown/parseCodeBlockMeta.js +22 -22
  68. package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
  69. package/dist/components/Markdown/useMarkdownSource.js +46 -46
  70. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  71. package/dist/components/Markdown/useMarkmapRenderer.js +35 -36
  72. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  73. package/dist/components/Markdown/useMermaidRenderer.js +41 -42
  74. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  75. package/dist/components/Modal/index.js +82 -82
  76. package/dist/components/Modal/index.js.map +1 -1
  77. package/dist/components/MultipleChoice/index.d.ts +44 -0
  78. package/dist/components/MultipleChoice/index.js +52 -0
  79. package/dist/components/MultipleChoice/index.js.map +1 -0
  80. package/dist/components/Notification/index.d.ts +17 -0
  81. package/dist/components/Page/index.d.ts +1 -1
  82. package/dist/components/Page/index.js +40 -71
  83. package/dist/components/Page/index.js.map +1 -1
  84. package/dist/components/PageHeader/index.js +28 -28
  85. package/dist/components/PageHeader/index.js.map +1 -1
  86. package/dist/components/ProtectedRoute/index.js +8 -9
  87. package/dist/components/ProtectedRoute/index.js.map +1 -1
  88. package/dist/components/Row/index.d.ts +28 -0
  89. package/dist/components/Row/index.js +30 -0
  90. package/dist/components/Row/index.js.map +1 -0
  91. package/dist/components/Select/index.js +251 -254
  92. package/dist/components/Select/index.js.map +1 -1
  93. package/dist/components/SidebarToggleButton/index.js +56 -59
  94. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  95. package/dist/components/Slider/index.d.ts +39 -0
  96. package/dist/components/Slider/index.js +52 -0
  97. package/dist/components/Slider/index.js.map +1 -0
  98. package/dist/components/Switch/index.d.ts +34 -0
  99. package/dist/components/Switch/index.js +55 -0
  100. package/dist/components/Switch/index.js.map +1 -0
  101. package/dist/components/Tab/index.d.ts +40 -0
  102. package/dist/components/Table/index.js +109 -121
  103. package/dist/components/Table/index.js.map +1 -1
  104. package/dist/components/Tabs/index.js +28 -38
  105. package/dist/components/Tabs/index.js.map +1 -1
  106. package/dist/components/Text/index.d.ts +43 -0
  107. package/dist/components/Text/index.js +55 -0
  108. package/dist/components/Text/index.js.map +1 -0
  109. package/dist/components/Tooltip/index.d.ts +23 -0
  110. package/dist/components/Tooltip/index.js +34 -0
  111. package/dist/components/Tooltip/index.js.map +1 -0
  112. package/dist/components/Tree/Tree.js +205 -205
  113. package/dist/components/Tree/Tree.js.map +1 -1
  114. package/dist/components/pro/ArticleContextMenu/index.js +86 -87
  115. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  116. package/dist/components/pro/ArticleControl/ArticleControl2.js +250 -250
  117. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  118. package/dist/components/pro/ArticleControl/buildHeadingTree.js +31 -32
  119. package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
  120. package/dist/components/pro/ArticleControl/useArticleToc.js +100 -102
  121. package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
  122. package/dist/components/pro/Calendar/Calendar.d.ts +10 -0
  123. package/dist/components/pro/Calendar/hooks/useCalendarDrag.d.ts +47 -0
  124. package/dist/components/pro/Calendar/hooks/useCalendarState.d.ts +56 -0
  125. package/dist/components/pro/Calendar/index.d.ts +7 -0
  126. package/dist/components/pro/Calendar/types.d.ts +151 -0
  127. package/dist/components/pro/Calendar/utils.d.ts +94 -0
  128. package/dist/components/pro/Chat/Chat.d.ts +6 -0
  129. package/dist/components/pro/Chat/index.d.ts +2 -0
  130. package/dist/components/pro/Chat/types.d.ts +84 -0
  131. package/dist/components/pro/CodeEditor/editors/CodeEditor.js +287 -327
  132. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  133. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -224
  134. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  135. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js +594 -613
  136. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
  137. package/dist/components/pro/CodeEditor/extensions/contextMenu.js +54 -55
  138. package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
  139. package/dist/components/pro/CodeEditor/extensions/index.js +152 -160
  140. package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
  141. package/dist/components/pro/CodeEditor/langs/index.js +7 -15
  142. package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
  143. package/dist/components/pro/CodeEditor/langs/javascript.js +11 -48
  144. package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
  145. package/dist/components/pro/CodeEditor/langs/python.js +4 -40
  146. package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
  147. package/dist/components/pro/CodeEditor/langs/snippets.js +118 -147
  148. package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
  149. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js +153 -153
  150. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  151. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +180 -190
  152. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  153. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js +130 -137
  154. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  155. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js +228 -242
  156. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  157. package/dist/components/pro/CodeEditor/panels/VariablePanel.js +208 -248
  158. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  159. package/dist/components/pro/CodeEditor/themes.js +513 -483
  160. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  161. package/dist/components/pro/CodeEditor/types.d.ts +1 -1
  162. package/dist/components/pro/CodeEditor/utils.js +171 -175
  163. package/dist/components/pro/CodeEditor/utils.js.map +1 -1
  164. package/dist/components/pro/DataTable/DataTable.js +305 -306
  165. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  166. package/dist/components/pro/DataTable/Filters.js +299 -314
  167. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  168. package/dist/components/pro/DataTable/PivotPanel.js +203 -204
  169. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  170. package/dist/components/pro/DataTable/PivotView.js +142 -144
  171. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  172. package/dist/components/pro/DataTable/components/BulkActions.js +42 -42
  173. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  174. package/dist/components/pro/DataTable/components/ColumnSelector.js +84 -84
  175. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  176. package/dist/components/pro/DataTable/components/FilterBar.js +58 -58
  177. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  178. package/dist/components/pro/DataTable/components/TableBody.js +93 -94
  179. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  180. package/dist/components/pro/DataTable/components/TableHeader.js +78 -78
  181. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  182. package/dist/components/pro/DataTable/components/TablePagination.js +77 -77
  183. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  184. package/dist/components/pro/DataTable/components/TableToolbar.js +40 -40
  185. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  186. package/dist/components/pro/DataTable/extension.js +5 -5
  187. package/dist/components/pro/DataTable/extension.js.map +1 -1
  188. package/dist/components/pro/DataTable/pivotEngine.js +84 -92
  189. package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
  190. package/dist/components/pro/DataTable/pivotExtension.js +93 -93
  191. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  192. package/dist/components/pro/DataTable/rowDetailExtension.js +30 -30
  193. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  194. package/dist/components/pro/DataTable/tanstack-table.js +45 -62
  195. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  196. package/dist/components/pro/DataTable/treeDataUtils.js +37 -48
  197. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  198. package/dist/components/pro/DataTable/useColumnDragReorder.js +68 -68
  199. package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
  200. package/dist/components/pro/DataTable/utils.js +156 -168
  201. package/dist/components/pro/DataTable/utils.js.map +1 -1
  202. package/dist/components/pro/FileExplorer/Breadcrumb.js +180 -180
  203. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  204. package/dist/components/pro/FileExplorer/CreateDialog.js +78 -78
  205. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  206. package/dist/components/pro/FileExplorer/FileExplorer.js +202 -205
  207. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  208. package/dist/components/pro/FileExplorer/FileIcon.js +189 -189
  209. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  210. package/dist/components/pro/FileExplorer/GridView.js +100 -100
  211. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  212. package/dist/components/pro/FileExplorer/ListView.js +209 -209
  213. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  214. package/dist/components/pro/FileExplorer/Toolbar.js +199 -199
  215. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  216. package/dist/components/pro/Flow/Flow.js +920 -948
  217. package/dist/components/pro/Flow/Flow.js.map +1 -1
  218. package/dist/components/pro/Flow/FlowCanvas.js +1626 -1662
  219. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  220. package/dist/components/pro/Flow/archify/build.js +85 -94
  221. package/dist/components/pro/Flow/archify/build.js.map +1 -1
  222. package/dist/components/pro/Flow/archify/convert.js +512 -519
  223. package/dist/components/pro/Flow/archify/convert.js.map +1 -1
  224. package/dist/components/pro/Flow/archify/palette.js +87 -104
  225. package/dist/components/pro/Flow/archify/palette.js.map +1 -1
  226. package/dist/components/pro/Flow/archify/presets.js +34 -37
  227. package/dist/components/pro/Flow/archify/presets.js.map +1 -1
  228. package/dist/components/pro/Flow/archify/spec.js +7 -7
  229. package/dist/components/pro/Flow/archify/spec.js.map +1 -1
  230. package/dist/components/pro/Flow/canvas/AlignmentGuides.js +25 -25
  231. package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
  232. package/dist/components/pro/Flow/canvas/GridRenderer.js +54 -55
  233. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  234. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +54 -58
  235. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  236. package/dist/components/pro/Flow/canvas/PixiApp.js +105 -102
  237. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  238. package/dist/components/pro/Flow/canvas/SelectionOverlay.js +38 -38
  239. package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
  240. package/dist/components/pro/Flow/canvas/ViewportContainer.js +117 -117
  241. package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
  242. package/dist/components/pro/Flow/constants.js +266 -278
  243. package/dist/components/pro/Flow/constants.js.map +1 -1
  244. package/dist/components/pro/Flow/context/FlowAIContext.js +27 -28
  245. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
  246. package/dist/components/pro/Flow/context/FlowContext.js +60 -61
  247. package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
  248. package/dist/components/pro/Flow/context/FlowUIContext.js +115 -117
  249. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  250. package/dist/components/pro/Flow/edges/EdgeRenderer.js +135 -138
  251. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  252. package/dist/components/pro/Flow/edges/edgeMarkers.js +11 -14
  253. package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
  254. package/dist/components/pro/Flow/edges/edgePaths.js +351 -367
  255. package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
  256. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js +49 -52
  257. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
  258. package/dist/components/pro/Flow/hooks/useClipboard.js +154 -154
  259. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  260. package/dist/components/pro/Flow/hooks/useCompactMode.js +17 -17
  261. package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
  262. package/dist/components/pro/Flow/hooks/useDeleteSelection.js +40 -40
  263. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  264. package/dist/components/pro/Flow/hooks/useDraggablePanel.js +51 -51
  265. package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
  266. package/dist/components/pro/Flow/hooks/useEdgeMutations.js +157 -157
  267. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  268. package/dist/components/pro/Flow/hooks/useFlowImportExport.js +190 -201
  269. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  270. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js +32 -38
  271. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
  272. package/dist/components/pro/Flow/hooks/useLayoutActions.js +172 -180
  273. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  274. package/dist/components/pro/Flow/hooks/useLineMutations.js +57 -57
  275. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  276. package/dist/components/pro/Flow/hooks/useMindMap.js +229 -238
  277. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  278. package/dist/components/pro/Flow/hooks/useNodeMutations.js +102 -102
  279. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  280. package/dist/components/pro/Flow/hooks/usePdfExport.js +55 -56
  281. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
  282. package/dist/components/pro/Flow/hooks/usePixiApp.js +55 -57
  283. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  284. package/dist/components/pro/Flow/hooks/useResizablePanel.js +31 -31
  285. package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
  286. package/dist/components/pro/Flow/hooks/useSelection.js +69 -69
  287. package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
  288. package/dist/components/pro/Flow/hooks/useUndoRedo.js +27 -27
  289. package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
  290. package/dist/components/pro/Flow/hooks/useViewport.js +28 -28
  291. package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
  292. package/dist/components/pro/Flow/lines/FreehandTool.js +63 -63
  293. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  294. package/dist/components/pro/Flow/lines/GeometricLineTool.js +80 -80
  295. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  296. package/dist/components/pro/Flow/lines/LineRenderer.js +88 -88
  297. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  298. package/dist/components/pro/Flow/lines/lineSmoothing.js +32 -34
  299. package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
  300. package/dist/components/pro/Flow/nodes/DataNodeView.js +236 -242
  301. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  302. package/dist/components/pro/Flow/nodes/MediaContent.js +236 -246
  303. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  304. package/dist/components/pro/Flow/nodes/MediaOverlay.js +63 -63
  305. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  306. package/dist/components/pro/Flow/nodes/Model3DView.js +111 -113
  307. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  308. package/dist/components/pro/Flow/nodes/NodeHandles.js +74 -80
  309. package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
  310. package/dist/components/pro/Flow/nodes/NodeRenderer.js +303 -314
  311. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  312. package/dist/components/pro/Flow/nodes/NodeText.js +25 -29
  313. package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
  314. package/dist/components/pro/Flow/nodes/aiClient.js +124 -137
  315. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  316. package/dist/components/pro/Flow/nodes/animAnchors.js +42 -49
  317. package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
  318. package/dist/components/pro/Flow/nodes/dataUtils.js +246 -267
  319. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  320. package/dist/components/pro/Flow/nodes/nodeUtils.js +23 -28
  321. package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
  322. package/dist/components/pro/Flow/nodes/shapes.js +556 -589
  323. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  324. package/dist/components/pro/Flow/nodes/svgIconTexture.js +37 -39
  325. package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
  326. package/dist/components/pro/Flow/nodes/svgIcons.js +684 -689
  327. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  328. package/dist/components/pro/Flow/panels/AIPanel.js +464 -491
  329. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  330. package/dist/components/pro/Flow/panels/Breadcrumb.js +41 -41
  331. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  332. package/dist/components/pro/Flow/panels/ContextMenu.js +37 -37
  333. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  334. package/dist/components/pro/Flow/panels/DataInspectorSection.js +428 -432
  335. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  336. package/dist/components/pro/Flow/panels/ExpandableTextarea.js +61 -62
  337. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  338. package/dist/components/pro/Flow/panels/FlowPanelGroup.js +114 -114
  339. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  340. package/dist/components/pro/Flow/panels/FlowToolbar.js +347 -391
  341. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  342. package/dist/components/pro/Flow/panels/InspectorPanel.js +1792 -1798
  343. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  344. package/dist/components/pro/Flow/panels/OutlinePanel.js +242 -248
  345. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  346. package/dist/components/pro/Flow/panels/PresentationMode.js +137 -140
  347. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  348. package/dist/components/pro/Flow/panels/ProjectTitle.js +46 -46
  349. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  350. package/dist/components/pro/Flow/panels/ShapePalette.js +557 -572
  351. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  352. package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +0 -1
  353. package/dist/components/pro/Flow/panels/toolbarIcons.js +508 -557
  354. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  355. package/dist/components/pro/Flow/types.js +26 -26
  356. package/dist/components/pro/Flow/types.js.map +1 -1
  357. package/dist/components/pro/Flow/utils/dashedLine.js +113 -117
  358. package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
  359. package/dist/components/pro/Flow/utils/gradient.js +55 -55
  360. package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
  361. package/dist/components/pro/Flow/utils/pdfExport.js +50 -89
  362. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
  363. package/dist/components/pro/Flow/utils/themeColor.js +185 -195
  364. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  365. package/dist/components/pro/Gantt/Gantt.d.ts +7 -0
  366. package/dist/components/pro/Gantt/hooks/useGanttDrag.d.ts +31 -0
  367. package/dist/components/pro/Gantt/hooks/useGanttState.d.ts +58 -0
  368. package/dist/components/pro/Gantt/index.d.ts +6 -0
  369. package/dist/components/pro/Gantt/types.d.ts +478 -0
  370. package/dist/components/pro/Gantt/utils.d.ts +124 -0
  371. package/dist/components/pro/Resizable/Resizable.d.ts +30 -0
  372. package/dist/components/pro/Resizable/index.d.ts +2 -0
  373. package/dist/components/pro/RichTextEditor/AIRewrite.js +323 -334
  374. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  375. package/dist/components/pro/RichTextEditor/BlockHandle.js +314 -316
  376. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  377. package/dist/components/pro/RichTextEditor/BubbleToolbar.js +97 -97
  378. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  379. package/dist/components/pro/RichTextEditor/CommentDialog.js +88 -88
  380. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  381. package/dist/components/pro/RichTextEditor/CommentPanel.js +240 -240
  382. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  383. package/dist/components/pro/RichTextEditor/CommentPopover.js +234 -234
  384. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  385. package/dist/components/pro/RichTextEditor/ContextMenu.js +251 -252
  386. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  387. package/dist/components/pro/RichTextEditor/RichTextEditor.js +267 -271
  388. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  389. package/dist/components/pro/RichTextEditor/SlashMenu.js +214 -214
  390. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  391. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -75
  392. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  393. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +261 -261
  394. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  395. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +172 -526
  396. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  397. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js +112 -114
  398. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  399. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +194 -194
  400. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  401. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +970 -973
  402. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  403. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +11 -12
  404. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  405. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +310 -344
  406. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  407. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +38 -39
  408. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
  409. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +620 -625
  410. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  411. package/dist/components/pro/RichTextEditor/extensions/FontSize.js +25 -25
  412. package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
  413. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +167 -176
  414. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  415. package/dist/components/pro/RichTextEditor/types.js +75 -75
  416. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  417. package/dist/contexts/AppContext.d.ts +1 -1
  418. package/dist/contexts/AppContext.js +216 -221
  419. package/dist/contexts/AppContext.js.map +1 -1
  420. package/dist/data-table.js +15 -41
  421. package/dist/data-table.js.map +1 -1
  422. package/dist/dishui.css +1 -1
  423. package/dist/flow.js +27 -83
  424. package/dist/hooks/useClickOutside.js +18 -18
  425. package/dist/hooks/useClickOutside.js.map +1 -1
  426. package/dist/hooks/useContainerElement.js +9 -9
  427. package/dist/hooks/useContainerElement.js.map +1 -1
  428. package/dist/hooks/useControllableState.js +33 -35
  429. package/dist/hooks/useControllableState.js.map +1 -1
  430. package/dist/hooks/useCopyToClipboard.js +16 -16
  431. package/dist/hooks/useCopyToClipboard.js.map +1 -1
  432. package/dist/hooks/useDebounce.js +14 -14
  433. package/dist/hooks/useDebounce.js.map +1 -1
  434. package/dist/hooks/useDraggable.js +50 -50
  435. package/dist/hooks/useDraggable.js.map +1 -1
  436. package/dist/hooks/useTableColumns.js +39 -41
  437. package/dist/hooks/useTableColumns.js.map +1 -1
  438. package/dist/hooks/useTableData.js +67 -68
  439. package/dist/hooks/useTableData.js.map +1 -1
  440. package/dist/index-nostyled.d.ts +8 -0
  441. package/dist/index.d.ts +31 -3
  442. package/dist/index.js +106 -241
  443. package/dist/layouts/MainLayout.js +56 -56
  444. package/dist/layouts/MainLayout.js.map +1 -1
  445. package/dist/layouts/Navbar.js +214 -214
  446. package/dist/layouts/Navbar.js.map +1 -1
  447. package/dist/layouts/Sidebar.js +184 -186
  448. package/dist/layouts/Sidebar.js.map +1 -1
  449. package/dist/layouts/headbar/Headbar.js +25 -25
  450. package/dist/layouts/headbar/Headbar.js.map +1 -1
  451. package/dist/layouts/headbar/HeadbarLangSwitcher.js +39 -39
  452. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  453. package/dist/layouts/headbar/HeadbarSearch.js +120 -120
  454. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  455. package/dist/layouts/headbar/HeadbarThemeSwitcher.js +27 -27
  456. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  457. package/dist/layouts/headbar/HeadbarTitle.js +26 -26
  458. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  459. package/dist/lite.js +9 -24
  460. package/dist/markdown.js +4 -9
  461. package/dist/pages/components/Calendar/index.d.ts +3 -0
  462. package/dist/pages/components/Calendar/index.en.d.ts +3 -0
  463. package/dist/pages/components/Calendar/index.zh.d.ts +3 -0
  464. package/dist/pages/components/Chat/index.d.ts +3 -0
  465. package/dist/pages/components/Chat/index.en.d.ts +3 -0
  466. package/dist/pages/components/Chat/index.zh.d.ts +3 -0
  467. package/dist/pages/components/FloatWindow/index.d.ts +3 -0
  468. package/dist/pages/components/FloatWindow/index.en.d.ts +3 -0
  469. package/dist/pages/components/FloatWindow/index.zh.d.ts +3 -0
  470. package/dist/pages/components/Gantt/index.d.ts +3 -0
  471. package/dist/pages/components/Gantt/index.en.d.ts +3 -0
  472. package/dist/pages/components/Gantt/index.zh.d.ts +3 -0
  473. package/dist/pages/components/GridLayout/index.d.ts +3 -0
  474. package/dist/pages/components/GridLayout/index.en.d.ts +3 -0
  475. package/dist/pages/components/GridLayout/index.zh.d.ts +3 -0
  476. package/dist/pages/components/Notification/index.d.ts +3 -0
  477. package/dist/pages/components/Notification/index.en.d.ts +3 -0
  478. package/dist/pages/components/Notification/index.zh.d.ts +3 -0
  479. package/dist/pages/components/Resizable/index.d.ts +3 -0
  480. package/dist/pages/components/Resizable/index.en.d.ts +3 -0
  481. package/dist/pages/components/Resizable/index.zh.d.ts +3 -0
  482. package/dist/pages/components/Tab/index.d.ts +3 -0
  483. package/dist/pages/components/Tab/index.en.d.ts +3 -0
  484. package/dist/pages/components/Tab/index.zh.d.ts +3 -0
  485. package/dist/styles/themeStyles.js +87 -86
  486. package/dist/styles/themeStyles.js.map +1 -1
  487. package/dist/utils/cn.d.ts +13 -0
  488. package/dist/utils/cn.js +16 -0
  489. package/dist/utils/cn.js.map +1 -0
  490. package/dist/utils/i18n.js +700 -602
  491. package/dist/utils/i18n.js.map +1 -1
  492. package/dist/utils/menu.js +94 -94
  493. package/dist/utils/menu.js.map +1 -1
  494. package/dist/utils/rehype-code-meta.js +14 -14
  495. package/dist/utils/rehype-code-meta.js.map +1 -1
  496. package/dist/utils/remark-code-meta.js +9 -9
  497. package/dist/utils/remark-code-meta.js.map +1 -1
  498. package/dist/utils/routerBuilder.js +59 -60
  499. package/dist/utils/routerBuilder.js.map +1 -1
  500. package/dist/utils/selection.js +28 -29
  501. package/dist/utils/selection.js.map +1 -1
  502. package/dist/utils/themes.js +275 -255
  503. package/dist/utils/themes.js.map +1 -1
  504. package/package.json +19 -6
  505. package/dist/components/StatCard/index.d.ts +0 -24
  506. package/dist/components/StatCard/index.js +0 -90
  507. package/dist/components/StatCard/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"shapes.js","names":[],"sources":["../../../../../src/components/pro/Flow/nodes/shapes.ts"],"sourcesContent":["import { Graphics } from 'pixi.js';\nimport type { FlowShapeType, FlowNodeData, FlowBorderSides, FlowBorderSideOverride } from '../types';\nimport { drawDashedPath, type PathSeg } from '../utils/dashedLine';\nimport { resolveThemeColor } from '../utils/themeColor';\n\nexport interface ShapeDrawOptions {\n width: number;\n height: number;\n fill: string;\n stroke: string;\n strokeWidth: number;\n borderStyle?: 'solid' | 'dashed' | 'dotted' | 'dynamic' | 'none';\n dashOffset?: number;\n}\n\nfunction parseDash(style: string | undefined, strokeWidth: number): number[] | undefined {\n if (!style || style === 'solid') return undefined;\n if (style === 'dynamic') return [strokeWidth * 4, strokeWidth * 3];\n if (style === 'dashed') return [strokeWidth * 4, strokeWidth * 2];\n if (style === 'dotted') return [strokeWidth, strokeWidth * 2];\n return undefined;\n}\n\n/**\n * Sample a rectangle's outline as points for dashed border.\n */\nfunction sampleRect(w: number, h: number, step = 3): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n for (let x = 0; x <= w; x += step) pts.push({ x, y: 0 });\n for (let y = step; y <= h; y += step) pts.push({ x: w, y });\n for (let x = w - step; x >= 0; x -= step) pts.push({ x, y: h });\n for (let y = h - step; y > 0; y -= step) pts.push({ x: 0, y });\n pts.push({ x: 0, y: 0 });\n return pts;\n}\n\n/**\n * Sample a rounded rectangle outline as points.\n */\nfunction sampleRoundRect(w: number, h: number, r: number, step = 3): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n const cornerSamples = Math.max(4, Math.ceil((Math.PI / 2) * r / step));\n const addCorner = (cx: number, cy: number, startAngle: number) => {\n for (let i = 0; i <= cornerSamples; i++) {\n const a = startAngle + (Math.PI / 2) * (i / cornerSamples);\n pts.push({ x: cx + r * Math.cos(a), y: cy + r * Math.sin(a) });\n }\n };\n addCorner(w - r, r, -Math.PI / 2);\n addCorner(w - r, h - r, 0);\n addCorner(r, h - r, Math.PI / 2);\n addCorner(r, r, Math.PI);\n if (pts.length > 0) pts.push(pts[0]);\n return pts;\n}\n\n/**\n * Sample an ellipse outline.\n */\nfunction sampleEllipse(cx: number, cy: number, rx: number, ry: number, samples = 60): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i <= samples; i++) {\n const a = (Math.PI * 2 * i) / samples;\n pts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) });\n }\n return pts;\n}\n\n/**\n * Draw dashed polyline onto graphics.\n */\nfunction drawDashedPoly(g: Graphics, pts: Array<{ x: number; y: number }>, dash: number[], offset: number, color: string, width: number): void {\n if (pts.length < 2) return;\n const dists = [0];\n for (let i = 1; i < pts.length; i++) {\n dists.push(dists[i - 1] + Math.hypot(pts[i].x - pts[i - 1].x, pts[i].y - pts[i - 1].y));\n }\n const total = dists[dists.length - 1];\n if (total < 1) return;\n const patternLen = dash[0] + dash[1];\n let pos = -(((offset % patternLen) + patternLen) % patternLen);\n let drawing = true;\n\n const lerp = (d: number) => {\n if (d <= 0) return pts[0];\n if (d >= total) return pts[pts.length - 1];\n let lo = 0, hi = dists.length - 1;\n while (lo < hi - 1) { const m = (lo + hi) >> 1; if (dists[m] <= d) lo = m; else hi = m; }\n const t = dists[hi] - dists[lo] > 0 ? (d - dists[lo]) / (dists[hi] - dists[lo]) : 0;\n return { x: pts[lo].x + (pts[hi].x - pts[lo].x) * t, y: pts[lo].y + (pts[hi].y - pts[lo].y) * t };\n };\n\n while (pos < total) {\n const segLen = drawing ? dash[0] : dash[1];\n const start = Math.max(pos, 0);\n const end = Math.min(pos + segLen, total);\n if (drawing && end > start) {\n const p0 = lerp(start);\n g.moveTo(p0.x, p0.y);\n for (let d = start + 2; d < end; d += 2) {\n const p = lerp(d);\n g.lineTo(p.x, p.y);\n }\n const pe = lerp(end);\n g.lineTo(pe.x, pe.y);\n }\n pos += segLen;\n drawing = !drawing;\n }\n g.stroke({ color, width, cap: 'round' as const });\n}\n\nfunction fillShape(g: Graphics, o: ShapeDrawOptions) {\n if (o.fill && o.fill !== 'transparent') {\n g.fill({ color: o.fill });\n }\n if (o.borderStyle === 'none') return;\n if (o.stroke && o.stroke !== 'transparent' && o.strokeWidth > 0) {\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (dash) {\n // Dashed/dotted/dynamic: don't stroke the shape path, we'll draw dashed separately\n } else {\n g.stroke({ color: o.stroke, width: o.strokeWidth });\n }\n }\n}\n\n/**\n * After fillShape, draw dashed border if needed.\n * Pass shape-specific outline points.\n */\nfunction drawDashedBorder(g: Graphics, o: ShapeDrawOptions, outlinePts: Array<{ x: number; y: number }>) {\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (!dash || !o.stroke || o.stroke === 'transparent' || o.strokeWidth <= 0) return;\n const offset = o.borderStyle === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, outlinePts, dash, offset, o.stroke, o.strokeWidth);\n}\n\n/** Draw only a rounded-rectangle border, without leaving a base path that can\n * be picked up by the dashed stroke. Useful when fill and border are rendered\n * independently, as they are for SVG icon nodes. */\nexport function drawRoundRectBorder(g: Graphics, o: ShapeDrawOptions, radius?: number): void {\n if (o.borderStyle === 'none' || !o.stroke || o.stroke === 'transparent' || o.strokeWidth <= 0) return;\n const r = radius ?? Math.min(12, o.width * 0.1, o.height * 0.1);\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (dash) {\n const offset = o.borderStyle === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, sampleRoundRect(o.width, o.height, r), dash, offset, o.stroke, o.strokeWidth);\n } else {\n g.roundRect(0, 0, o.width, o.height, r).stroke({ color: o.stroke, width: o.strokeWidth });\n }\n}\n\nfunction polyPoints(verts: Array<{ x: number; y: number }>): Array<{ x: number; y: number }> {\n return [...verts, verts[0]];\n}\n\nexport function drawRect(g: Graphics, o: ShapeDrawOptions): void {\n g.rect(0, 0, o.width, o.height);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleRect(o.width, o.height));\n}\n\nexport function drawRoundRect(g: Graphics, o: ShapeDrawOptions): void {\n const r = Math.min(12, o.width * 0.1, o.height * 0.1);\n g.roundRect(0, 0, o.width, o.height, r);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleRoundRect(o.width, o.height, r));\n}\n\nexport function drawEllipse(g: Graphics, o: ShapeDrawOptions): void {\n g.ellipse(o.width / 2, o.height / 2, o.width / 2, o.height / 2);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleEllipse(o.width / 2, o.height / 2, o.width / 2, o.height / 2));\n}\n\nexport function drawDiamond(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const verts = [{ x: cx, y: 0 }, { x: o.width, y: cy }, { x: cx, y: o.height }, { x: 0, y: cy }];\n g.moveTo(cx, 0).lineTo(o.width, cy).lineTo(cx, o.height).lineTo(0, cy).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawDocument(g: Graphics, o: ShapeDrawOptions): void {\n const w = o.width, h = o.height, curve = h * 0.15;\n g.moveTo(0, 0)\n .lineTo(w, 0)\n .lineTo(w, h - curve)\n .bezierCurveTo(w * 0.75, h - curve * 2, w * 0.25, h, 0, h - curve)\n .closePath();\n fillShape(g, o);\n const pts: Array<{ x: number; y: number }> = [{ x: 0, y: 0 }, { x: w, y: 0 }, { x: w, y: h - curve }];\n const samples = 20;\n for (let i = 1; i <= samples; i++) {\n const t = i / samples;\n const u = 1 - t;\n pts.push({\n x: u * u * u * w + 3 * u * u * t * (w * 0.75) + 3 * u * t * t * (w * 0.25),\n y: u * u * u * (h - curve) + 3 * u * u * t * (h - curve * 2) + 3 * u * t * t * h + t * t * t * (h - curve),\n });\n }\n pts.push({ x: 0, y: 0 });\n drawDashedBorder(g, o, pts);\n}\n\nexport function drawParallelogram(g: Graphics, o: ShapeDrawOptions): void {\n const skew = o.width * 0.2;\n const verts = [{ x: skew, y: 0 }, { x: o.width, y: 0 }, { x: o.width - skew, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(skew, 0).lineTo(o.width, 0).lineTo(o.width - skew, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawTriangle(g: Graphics, o: ShapeDrawOptions): void {\n const verts = [{ x: o.width / 2, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(o.width / 2, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawTrapezoid(g: Graphics, o: ShapeDrawOptions): void {\n const inset = o.width * 0.15;\n const verts = [{ x: inset, y: 0 }, { x: o.width - inset, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(inset, 0).lineTo(o.width - inset, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nfunction regularPoly(cx: number, cy: number, sides: number, rx: number, ry: number, startAngle: number): Array<{ x: number; y: number }> {\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < sides; i++) {\n const a = (Math.PI * 2 * i) / sides + startAngle;\n verts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) });\n }\n return verts;\n}\n\nexport function drawPentagon(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2, r = Math.min(cx, cy);\n const verts = regularPoly(cx, cy, 5, r, r, -Math.PI / 2);\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawHexagon(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const verts = regularPoly(cx, cy, 6, cx, cy, -Math.PI / 6);\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawStar(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const outer = Math.min(cx, cy), inner = outer * 0.4, points = 5;\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < points * 2; i++) {\n const angle = (Math.PI * i) / points - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n verts.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) });\n }\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawHexagram(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const outer = Math.min(cx, cy), inner = outer * 0.55;\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < 12; i++) {\n const angle = (Math.PI * i) / 6 - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n verts.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) });\n }\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawRightTriangle(g: Graphics, o: ShapeDrawOptions): void {\n const verts = [{ x: 0, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(0, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawCorner(g: Graphics, o: ShapeDrawOptions): void {\n const half = Math.min(o.width, o.height) * 0.4;\n const verts = [\n { x: 0, y: 0 }, { x: o.width, y: 0 }, { x: o.width, y: half },\n { x: half, y: half }, { x: half, y: o.height }, { x: 0, y: o.height },\n ];\n g.moveTo(0, 0).lineTo(o.width, 0).lineTo(o.width, half)\n .lineTo(half, half).lineTo(half, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawFlowGroup(g: Graphics, o: ShapeDrawOptions): void {\n const r = Math.min(6, o.width * 0.04, o.height * 0.04);\n g.roundRect(0, 0, o.width, o.height, r);\n if (o.fill && o.fill !== 'transparent') {\n g.fill({ color: o.fill, alpha: 0.08 });\n }\n const border = o.borderStyle ?? 'dashed';\n if (border !== 'none' && o.stroke && o.stroke !== 'transparent' && o.strokeWidth > 0) {\n const dash = parseDash(border, o.strokeWidth);\n if (dash) {\n const offset = border === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, sampleRoundRect(o.width, o.height, r), dash, offset, o.stroke, o.strokeWidth);\n } else {\n g.stroke({ color: o.stroke, width: o.strokeWidth });\n }\n }\n}\n\nexport const drawGeometryGroup = drawFlowGroup;\n\n/* ─── Per-side borders (top / right / bottom / left) ─────────────────── */\n\nexport type BorderSideName = 'top' | 'right' | 'bottom' | 'left';\nexport const BORDER_SIDE_NAMES: BorderSideName[] = ['top', 'right', 'bottom', 'left'];\n\n/** Shape types whose geometry has four well-defined sides. Other shapes ignore\n * `borderSides` and keep a full outline. */\nexport const BORDER_SIDE_TYPES = new Set<string>([\n 'shapeRect', 'shapeRoundRect', 'shapeEllipse', 'shapeDiamond', 'shapeDocument',\n 'shapeParallelogram', 'shapeTrapezoid', 'mediaNode', 'flowGroup', 'geometryGroup',\n]);\n\n/** True when `borderSides` carries at least one effective override AND the\n * shape type supports per-side borders. */\nexport function hasBorderSideOverrides(data: FlowNodeData, type?: string): boolean {\n if (type !== undefined && !BORDER_SIDE_TYPES.has(type)) return false;\n const sides = data.borderSides;\n if (!sides) return false;\n return BORDER_SIDE_NAMES.some((name) => {\n const side = sides[name];\n return !!side\n && (side.visible === false || side.color !== undefined || side.width !== undefined);\n });\n}\n\n/** Corner radius used by each shape's own drawer, so side segments line up\n * exactly with the (possibly hidden) full outline. */\nfunction borderSideRadius(type: string, w: number, h: number): number {\n switch (type) {\n case 'shapeRoundRect': return Math.min(12, w * 0.1, h * 0.1);\n case 'mediaNode': return 6;\n case 'flowGroup':\n case 'geometryGroup': return Math.min(6, w * 0.04, h * 0.04);\n default: return 0;\n }\n}\n\nconst BEZIER_K = 0.5522847498; // kappa for a 90° arc approximation\n\n/** Build the drawable path of one side of the shape. Corners are owned by the\n * side that starts there (clockwise): top owns the top-left arc, right the\n * top-right arc, and so on — with uniform styling the four sides reconstruct\n * the full outline seamlessly. */\nexport function buildBorderSideSegments(\n type: string,\n w: number,\n h: number,\n side: BorderSideName,\n): PathSeg[] {\n const segs: PathSeg[] = [];\n const line = (x: number, y: number) => segs.push({ type: 'L', x, y });\n const cubic = (\n c1x: number, c1y: number, c2x: number, c2y: number, x: number, y: number,\n ) => segs.push({ type: 'C', cp1x: c1x, cp1y: c1y, cp2x: c2x, cp2y: c2y, x, y });\n\n const r = borderSideRadius(type, w, h);\n if (r >= 0.5) {\n // Rounded rect family (shapeRoundRect / mediaNode / group frames): each\n // side owns its starting corner arc (clockwise), so uniform styling\n // reconstructs the full rounded outline seamlessly.\n const k = BEZIER_K * r;\n switch (side) {\n case 'top':\n segs.push({ type: 'M', x: 0, y: r });\n cubic(0, r - k, r - k, 0, r, 0);\n line(w - r, 0);\n break;\n case 'right':\n segs.push({ type: 'M', x: w - r, y: 0 });\n cubic(w - r + k, 0, w, r - k, w, r);\n line(w, h - r);\n break;\n case 'bottom':\n segs.push({ type: 'M', x: w, y: h - r });\n cubic(w, h - r + k, w - r + k, h, w - r, h);\n line(r, h);\n break;\n case 'left':\n segs.push({ type: 'M', x: r, y: h });\n cubic(r - k, h, 0, h - r + k, 0, h - r);\n line(0, r);\n break;\n }\n return segs;\n }\n\n if (type === 'shapeEllipse') {\n // Split the outline at the 45° diagonals so each side is the arc centered\n // on its direction (top arc spans the top, etc.).\n const cx = w / 2, cy = h / 2, rx = w / 2, ry = h / 2;\n const angles: Record<BorderSideName, [number, number]> = {\n top: [Math.PI * 1.25, Math.PI * 1.75],\n right: [Math.PI * 1.75, Math.PI * 2.25],\n bottom: [Math.PI * 0.25, Math.PI * 0.75],\n left: [Math.PI * 0.75, Math.PI * 1.25],\n };\n const [a0, a1] = angles[side];\n const p0x = cx + rx * Math.cos(a0), p0y = cy + ry * Math.sin(a0);\n const p3x = cx + rx * Math.cos(a1), p3y = cy + ry * Math.sin(a1);\n segs.push({ type: 'M', x: p0x, y: p0y });\n cubic(\n p0x - BEZIER_K * rx * Math.sin(a0), p0y + BEZIER_K * ry * Math.cos(a0),\n p3x + BEZIER_K * rx * Math.sin(a1), p3y - BEZIER_K * ry * Math.cos(a1),\n p3x, p3y,\n );\n return segs;\n }\n\n if (type === 'shapeDocument') {\n const curve = h * 0.15;\n if (side === 'top') {\n segs.push({ type: 'M', x: 0, y: 0 });\n line(w, 0);\n } else if (side === 'right') {\n segs.push({ type: 'M', x: w, y: 0 });\n line(w, h - curve);\n } else if (side === 'bottom') {\n segs.push({ type: 'M', x: w, y: h - curve });\n cubic(w * 0.75, h - curve * 2, w * 0.25, h, 0, h - curve);\n } else {\n segs.push({ type: 'M', x: 0, y: h - curve });\n line(0, 0);\n }\n return segs;\n }\n\n // Quadrilaterals (rect / diamond / parallelogram / trapezoid).\n let v0: { x: number; y: number }, v1: { x: number; y: number }, v2: { x: number; y: number }, v3: { x: number; y: number };\n if (type === 'shapeDiamond') {\n const cx = w / 2, cy = h / 2;\n v0 = { x: cx, y: 0 }; v1 = { x: w, y: cy }; v2 = { x: cx, y: h }; v3 = { x: 0, y: cy };\n } else if (type === 'shapeParallelogram') {\n const skew = w * 0.2;\n v0 = { x: skew, y: 0 }; v1 = { x: w, y: 0 }; v2 = { x: w - skew, y: h }; v3 = { x: 0, y: h };\n } else if (type === 'shapeTrapezoid') {\n const inset = w * 0.15;\n v0 = { x: inset, y: 0 }; v1 = { x: w - inset, y: 0 }; v2 = { x: w, y: h }; v3 = { x: 0, y: h };\n } else {\n v0 = { x: 0, y: 0 }; v1 = { x: w, y: 0 }; v2 = { x: w, y: h }; v3 = { x: 0, y: h };\n }\n\n const edges: Record<BorderSideName, [{ x: number; y: number }, { x: number; y: number }]> = {\n top: [v0, v1],\n right: [v1, v2],\n bottom: [v2, v3],\n left: [v3, v0],\n };\n const [a, b] = edges[side];\n segs.push({ type: 'M', x: a.x, y: a.y });\n line(b.x, b.y);\n return segs;\n}\n\n/** Draw the four sides of a node independently, honoring per-side color /\n * width / visibility overrides (falling back to the node's defaults). The\n * node's `borderStyle` (solid / dashed / dotted / dynamic) applies to every\n * side. `defaultColor` is the node's (already theme-resolved) stroke. */\nexport function drawBorderSides(\n g: Graphics,\n type: string,\n width: number,\n height: number,\n sides: FlowBorderSides | undefined,\n defaultColor: string,\n defaultWidth: number,\n borderStyle: string | undefined,\n dashOffset: number,\n): void {\n if (borderStyle === 'none') return;\n for (const name of BORDER_SIDE_NAMES) {\n const side: FlowBorderSideOverride | undefined = sides?.[name];\n if (side?.visible === false) continue;\n const color = resolveThemeColor(side?.color, defaultColor) || defaultColor;\n const strokeWidth = side?.width ?? defaultWidth;\n if (!color || color === 'transparent' || !(strokeWidth > 0)) continue;\n const segs = buildBorderSideSegments(type, width, height, name);\n const dash = parseDash(borderStyle, strokeWidth);\n if (dash) {\n const offset = borderStyle === 'dynamic' ? dashOffset : 0;\n drawDashedPath(g, segs, dash, offset);\n g.stroke({ color, width: strokeWidth, 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: strokeWidth });\n }\n }\n}\n\n/** Lookup table mapping shape type to draw function */\nexport const shapeDrawers: Record<string, (g: Graphics, o: ShapeDrawOptions) => void> = {\n shapeRect: drawRect,\n shapeRoundRect: drawRoundRect,\n shapeEllipse: drawEllipse,\n shapeDiamond: drawDiamond,\n shapeDocument: drawDocument,\n shapeParallelogram: drawParallelogram,\n shapeTriangle: drawTriangle,\n shapeTrapezoid: drawTrapezoid,\n shapePentagon: drawPentagon,\n shapeHexagon: drawHexagon,\n shapeStar: drawStar,\n shapeHexagram: drawHexagram,\n shapeRightTriangle: drawRightTriangle,\n shapeCorner: drawCorner,\n textLabel: drawRect,\n flowGroup: drawFlowGroup,\n geometryGroup: drawGeometryGroup,\n shapeSvg: drawRoundRect,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"shapes.js","names":[],"sources":["../../../../../src/components/pro/Flow/nodes/shapes.ts"],"sourcesContent":["import { Graphics } from 'pixi.js';\nimport type { FlowShapeType, FlowNodeData, FlowBorderSides, FlowBorderSideOverride } from '../types';\nimport { drawDashedPath, type PathSeg } from '../utils/dashedLine';\nimport { resolveThemeColor } from '../utils/themeColor';\n\nexport interface ShapeDrawOptions {\n width: number;\n height: number;\n fill: string;\n stroke: string;\n strokeWidth: number;\n borderStyle?: 'solid' | 'dashed' | 'dotted' | 'dynamic' | 'none';\n dashOffset?: number;\n}\n\nfunction parseDash(style: string | undefined, strokeWidth: number): number[] | undefined {\n if (!style || style === 'solid') return undefined;\n if (style === 'dynamic') return [strokeWidth * 4, strokeWidth * 3];\n if (style === 'dashed') return [strokeWidth * 4, strokeWidth * 2];\n if (style === 'dotted') return [strokeWidth, strokeWidth * 2];\n return undefined;\n}\n\n/**\n * Sample a rectangle's outline as points for dashed border.\n */\nfunction sampleRect(w: number, h: number, step = 3): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n for (let x = 0; x <= w; x += step) pts.push({ x, y: 0 });\n for (let y = step; y <= h; y += step) pts.push({ x: w, y });\n for (let x = w - step; x >= 0; x -= step) pts.push({ x, y: h });\n for (let y = h - step; y > 0; y -= step) pts.push({ x: 0, y });\n pts.push({ x: 0, y: 0 });\n return pts;\n}\n\n/**\n * Sample a rounded rectangle outline as points.\n */\nfunction sampleRoundRect(w: number, h: number, r: number, step = 3): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n const cornerSamples = Math.max(4, Math.ceil((Math.PI / 2) * r / step));\n const addCorner = (cx: number, cy: number, startAngle: number) => {\n for (let i = 0; i <= cornerSamples; i++) {\n const a = startAngle + (Math.PI / 2) * (i / cornerSamples);\n pts.push({ x: cx + r * Math.cos(a), y: cy + r * Math.sin(a) });\n }\n };\n addCorner(w - r, r, -Math.PI / 2);\n addCorner(w - r, h - r, 0);\n addCorner(r, h - r, Math.PI / 2);\n addCorner(r, r, Math.PI);\n if (pts.length > 0) pts.push(pts[0]);\n return pts;\n}\n\n/**\n * Sample an ellipse outline.\n */\nfunction sampleEllipse(cx: number, cy: number, rx: number, ry: number, samples = 60): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i <= samples; i++) {\n const a = (Math.PI * 2 * i) / samples;\n pts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) });\n }\n return pts;\n}\n\n/**\n * Draw dashed polyline onto graphics.\n */\nfunction drawDashedPoly(g: Graphics, pts: Array<{ x: number; y: number }>, dash: number[], offset: number, color: string, width: number): void {\n if (pts.length < 2) return;\n const dists = [0];\n for (let i = 1; i < pts.length; i++) {\n dists.push(dists[i - 1] + Math.hypot(pts[i].x - pts[i - 1].x, pts[i].y - pts[i - 1].y));\n }\n const total = dists[dists.length - 1];\n if (total < 1) return;\n const patternLen = dash[0] + dash[1];\n let pos = -(((offset % patternLen) + patternLen) % patternLen);\n let drawing = true;\n\n const lerp = (d: number) => {\n if (d <= 0) return pts[0];\n if (d >= total) return pts[pts.length - 1];\n let lo = 0, hi = dists.length - 1;\n while (lo < hi - 1) { const m = (lo + hi) >> 1; if (dists[m] <= d) lo = m; else hi = m; }\n const t = dists[hi] - dists[lo] > 0 ? (d - dists[lo]) / (dists[hi] - dists[lo]) : 0;\n return { x: pts[lo].x + (pts[hi].x - pts[lo].x) * t, y: pts[lo].y + (pts[hi].y - pts[lo].y) * t };\n };\n\n while (pos < total) {\n const segLen = drawing ? dash[0] : dash[1];\n const start = Math.max(pos, 0);\n const end = Math.min(pos + segLen, total);\n if (drawing && end > start) {\n const p0 = lerp(start);\n g.moveTo(p0.x, p0.y);\n for (let d = start + 2; d < end; d += 2) {\n const p = lerp(d);\n g.lineTo(p.x, p.y);\n }\n const pe = lerp(end);\n g.lineTo(pe.x, pe.y);\n }\n pos += segLen;\n drawing = !drawing;\n }\n g.stroke({ color, width, cap: 'round' as const });\n}\n\nfunction fillShape(g: Graphics, o: ShapeDrawOptions) {\n if (o.fill && o.fill !== 'transparent') {\n g.fill({ color: o.fill });\n }\n if (o.borderStyle === 'none') return;\n if (o.stroke && o.stroke !== 'transparent' && o.strokeWidth > 0) {\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (dash) {\n // Dashed/dotted/dynamic: don't stroke the shape path, we'll draw dashed separately\n } else {\n g.stroke({ color: o.stroke, width: o.strokeWidth });\n }\n }\n}\n\n/**\n * After fillShape, draw dashed border if needed.\n * Pass shape-specific outline points.\n */\nfunction drawDashedBorder(g: Graphics, o: ShapeDrawOptions, outlinePts: Array<{ x: number; y: number }>) {\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (!dash || !o.stroke || o.stroke === 'transparent' || o.strokeWidth <= 0) return;\n const offset = o.borderStyle === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, outlinePts, dash, offset, o.stroke, o.strokeWidth);\n}\n\n/** Draw only a rounded-rectangle border, without leaving a base path that can\n * be picked up by the dashed stroke. Useful when fill and border are rendered\n * independently, as they are for SVG icon nodes. */\nexport function drawRoundRectBorder(g: Graphics, o: ShapeDrawOptions, radius?: number): void {\n if (o.borderStyle === 'none' || !o.stroke || o.stroke === 'transparent' || o.strokeWidth <= 0) return;\n const r = radius ?? Math.min(12, o.width * 0.1, o.height * 0.1);\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (dash) {\n const offset = o.borderStyle === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, sampleRoundRect(o.width, o.height, r), dash, offset, o.stroke, o.strokeWidth);\n } else {\n g.roundRect(0, 0, o.width, o.height, r).stroke({ color: o.stroke, width: o.strokeWidth });\n }\n}\n\nfunction polyPoints(verts: Array<{ x: number; y: number }>): Array<{ x: number; y: number }> {\n return [...verts, verts[0]];\n}\n\nexport function drawRect(g: Graphics, o: ShapeDrawOptions): void {\n g.rect(0, 0, o.width, o.height);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleRect(o.width, o.height));\n}\n\nexport function drawRoundRect(g: Graphics, o: ShapeDrawOptions): void {\n const r = Math.min(12, o.width * 0.1, o.height * 0.1);\n g.roundRect(0, 0, o.width, o.height, r);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleRoundRect(o.width, o.height, r));\n}\n\nexport function drawEllipse(g: Graphics, o: ShapeDrawOptions): void {\n g.ellipse(o.width / 2, o.height / 2, o.width / 2, o.height / 2);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleEllipse(o.width / 2, o.height / 2, o.width / 2, o.height / 2));\n}\n\nexport function drawDiamond(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const verts = [{ x: cx, y: 0 }, { x: o.width, y: cy }, { x: cx, y: o.height }, { x: 0, y: cy }];\n g.moveTo(cx, 0).lineTo(o.width, cy).lineTo(cx, o.height).lineTo(0, cy).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawDocument(g: Graphics, o: ShapeDrawOptions): void {\n const w = o.width, h = o.height, curve = h * 0.15;\n g.moveTo(0, 0)\n .lineTo(w, 0)\n .lineTo(w, h - curve)\n .bezierCurveTo(w * 0.75, h - curve * 2, w * 0.25, h, 0, h - curve)\n .closePath();\n fillShape(g, o);\n const pts: Array<{ x: number; y: number }> = [{ x: 0, y: 0 }, { x: w, y: 0 }, { x: w, y: h - curve }];\n const samples = 20;\n for (let i = 1; i <= samples; i++) {\n const t = i / samples;\n const u = 1 - t;\n pts.push({\n x: u * u * u * w + 3 * u * u * t * (w * 0.75) + 3 * u * t * t * (w * 0.25),\n y: u * u * u * (h - curve) + 3 * u * u * t * (h - curve * 2) + 3 * u * t * t * h + t * t * t * (h - curve),\n });\n }\n pts.push({ x: 0, y: 0 });\n drawDashedBorder(g, o, pts);\n}\n\nexport function drawParallelogram(g: Graphics, o: ShapeDrawOptions): void {\n const skew = o.width * 0.2;\n const verts = [{ x: skew, y: 0 }, { x: o.width, y: 0 }, { x: o.width - skew, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(skew, 0).lineTo(o.width, 0).lineTo(o.width - skew, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawTriangle(g: Graphics, o: ShapeDrawOptions): void {\n const verts = [{ x: o.width / 2, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(o.width / 2, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawTrapezoid(g: Graphics, o: ShapeDrawOptions): void {\n const inset = o.width * 0.15;\n const verts = [{ x: inset, y: 0 }, { x: o.width - inset, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(inset, 0).lineTo(o.width - inset, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nfunction regularPoly(cx: number, cy: number, sides: number, rx: number, ry: number, startAngle: number): Array<{ x: number; y: number }> {\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < sides; i++) {\n const a = (Math.PI * 2 * i) / sides + startAngle;\n verts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) });\n }\n return verts;\n}\n\nexport function drawPentagon(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2, r = Math.min(cx, cy);\n const verts = regularPoly(cx, cy, 5, r, r, -Math.PI / 2);\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawHexagon(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const verts = regularPoly(cx, cy, 6, cx, cy, -Math.PI / 6);\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawStar(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const outer = Math.min(cx, cy), inner = outer * 0.4, points = 5;\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < points * 2; i++) {\n const angle = (Math.PI * i) / points - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n verts.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) });\n }\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawHexagram(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const outer = Math.min(cx, cy), inner = outer * 0.55;\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < 12; i++) {\n const angle = (Math.PI * i) / 6 - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n verts.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) });\n }\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawRightTriangle(g: Graphics, o: ShapeDrawOptions): void {\n const verts = [{ x: 0, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(0, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawCorner(g: Graphics, o: ShapeDrawOptions): void {\n const half = Math.min(o.width, o.height) * 0.4;\n const verts = [\n { x: 0, y: 0 }, { x: o.width, y: 0 }, { x: o.width, y: half },\n { x: half, y: half }, { x: half, y: o.height }, { x: 0, y: o.height },\n ];\n g.moveTo(0, 0).lineTo(o.width, 0).lineTo(o.width, half)\n .lineTo(half, half).lineTo(half, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawFlowGroup(g: Graphics, o: ShapeDrawOptions): void {\n const r = Math.min(6, o.width * 0.04, o.height * 0.04);\n g.roundRect(0, 0, o.width, o.height, r);\n if (o.fill && o.fill !== 'transparent') {\n g.fill({ color: o.fill, alpha: 0.08 });\n }\n const border = o.borderStyle ?? 'dashed';\n if (border !== 'none' && o.stroke && o.stroke !== 'transparent' && o.strokeWidth > 0) {\n const dash = parseDash(border, o.strokeWidth);\n if (dash) {\n const offset = border === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, sampleRoundRect(o.width, o.height, r), dash, offset, o.stroke, o.strokeWidth);\n } else {\n g.stroke({ color: o.stroke, width: o.strokeWidth });\n }\n }\n}\n\nexport const drawGeometryGroup = drawFlowGroup;\n\n/* ─── Per-side borders (top / right / bottom / left) ─────────────────── */\n\nexport type BorderSideName = 'top' | 'right' | 'bottom' | 'left';\nexport const BORDER_SIDE_NAMES: BorderSideName[] = ['top', 'right', 'bottom', 'left'];\n\n/** Shape types whose geometry has four well-defined sides. Other shapes ignore\n * `borderSides` and keep a full outline. */\nexport const BORDER_SIDE_TYPES = new Set<string>([\n 'shapeRect', 'shapeRoundRect', 'shapeEllipse', 'shapeDiamond', 'shapeDocument',\n 'shapeParallelogram', 'shapeTrapezoid', 'mediaNode', 'flowGroup', 'geometryGroup',\n]);\n\n/** True when `borderSides` carries at least one effective override AND the\n * shape type supports per-side borders. */\nexport function hasBorderSideOverrides(data: FlowNodeData, type?: string): boolean {\n if (type !== undefined && !BORDER_SIDE_TYPES.has(type)) return false;\n const sides = data.borderSides;\n if (!sides) return false;\n return BORDER_SIDE_NAMES.some((name) => {\n const side = sides[name];\n return !!side\n && (side.visible === false || side.color !== undefined || side.width !== undefined);\n });\n}\n\n/** Corner radius used by each shape's own drawer, so side segments line up\n * exactly with the (possibly hidden) full outline. */\nfunction borderSideRadius(type: string, w: number, h: number): number {\n switch (type) {\n case 'shapeRoundRect': return Math.min(12, w * 0.1, h * 0.1);\n case 'mediaNode': return 6;\n case 'flowGroup':\n case 'geometryGroup': return Math.min(6, w * 0.04, h * 0.04);\n default: return 0;\n }\n}\n\nconst BEZIER_K = 0.5522847498; // kappa for a 90° arc approximation\n\n/** Build the drawable path of one side of the shape. Corners are owned by the\n * side that starts there (clockwise): top owns the top-left arc, right the\n * top-right arc, and so on — with uniform styling the four sides reconstruct\n * the full outline seamlessly. */\nexport function buildBorderSideSegments(\n type: string,\n w: number,\n h: number,\n side: BorderSideName,\n): PathSeg[] {\n const segs: PathSeg[] = [];\n const line = (x: number, y: number) => segs.push({ type: 'L', x, y });\n const cubic = (\n c1x: number, c1y: number, c2x: number, c2y: number, x: number, y: number,\n ) => segs.push({ type: 'C', cp1x: c1x, cp1y: c1y, cp2x: c2x, cp2y: c2y, x, y });\n\n const r = borderSideRadius(type, w, h);\n if (r >= 0.5) {\n // Rounded rect family (shapeRoundRect / mediaNode / group frames): each\n // side owns its starting corner arc (clockwise), so uniform styling\n // reconstructs the full rounded outline seamlessly.\n const k = BEZIER_K * r;\n switch (side) {\n case 'top':\n segs.push({ type: 'M', x: 0, y: r });\n cubic(0, r - k, r - k, 0, r, 0);\n line(w - r, 0);\n break;\n case 'right':\n segs.push({ type: 'M', x: w - r, y: 0 });\n cubic(w - r + k, 0, w, r - k, w, r);\n line(w, h - r);\n break;\n case 'bottom':\n segs.push({ type: 'M', x: w, y: h - r });\n cubic(w, h - r + k, w - r + k, h, w - r, h);\n line(r, h);\n break;\n case 'left':\n segs.push({ type: 'M', x: r, y: h });\n cubic(r - k, h, 0, h - r + k, 0, h - r);\n line(0, r);\n break;\n }\n return segs;\n }\n\n if (type === 'shapeEllipse') {\n // Split the outline at the 45° diagonals so each side is the arc centered\n // on its direction (top arc spans the top, etc.).\n const cx = w / 2, cy = h / 2, rx = w / 2, ry = h / 2;\n const angles: Record<BorderSideName, [number, number]> = {\n top: [Math.PI * 1.25, Math.PI * 1.75],\n right: [Math.PI * 1.75, Math.PI * 2.25],\n bottom: [Math.PI * 0.25, Math.PI * 0.75],\n left: [Math.PI * 0.75, Math.PI * 1.25],\n };\n const [a0, a1] = angles[side];\n const p0x = cx + rx * Math.cos(a0), p0y = cy + ry * Math.sin(a0);\n const p3x = cx + rx * Math.cos(a1), p3y = cy + ry * Math.sin(a1);\n segs.push({ type: 'M', x: p0x, y: p0y });\n cubic(\n p0x - BEZIER_K * rx * Math.sin(a0), p0y + BEZIER_K * ry * Math.cos(a0),\n p3x + BEZIER_K * rx * Math.sin(a1), p3y - BEZIER_K * ry * Math.cos(a1),\n p3x, p3y,\n );\n return segs;\n }\n\n if (type === 'shapeDocument') {\n const curve = h * 0.15;\n if (side === 'top') {\n segs.push({ type: 'M', x: 0, y: 0 });\n line(w, 0);\n } else if (side === 'right') {\n segs.push({ type: 'M', x: w, y: 0 });\n line(w, h - curve);\n } else if (side === 'bottom') {\n segs.push({ type: 'M', x: w, y: h - curve });\n cubic(w * 0.75, h - curve * 2, w * 0.25, h, 0, h - curve);\n } else {\n segs.push({ type: 'M', x: 0, y: h - curve });\n line(0, 0);\n }\n return segs;\n }\n\n // Quadrilaterals (rect / diamond / parallelogram / trapezoid).\n let v0: { x: number; y: number }, v1: { x: number; y: number }, v2: { x: number; y: number }, v3: { x: number; y: number };\n if (type === 'shapeDiamond') {\n const cx = w / 2, cy = h / 2;\n v0 = { x: cx, y: 0 }; v1 = { x: w, y: cy }; v2 = { x: cx, y: h }; v3 = { x: 0, y: cy };\n } else if (type === 'shapeParallelogram') {\n const skew = w * 0.2;\n v0 = { x: skew, y: 0 }; v1 = { x: w, y: 0 }; v2 = { x: w - skew, y: h }; v3 = { x: 0, y: h };\n } else if (type === 'shapeTrapezoid') {\n const inset = w * 0.15;\n v0 = { x: inset, y: 0 }; v1 = { x: w - inset, y: 0 }; v2 = { x: w, y: h }; v3 = { x: 0, y: h };\n } else {\n v0 = { x: 0, y: 0 }; v1 = { x: w, y: 0 }; v2 = { x: w, y: h }; v3 = { x: 0, y: h };\n }\n\n const edges: Record<BorderSideName, [{ x: number; y: number }, { x: number; y: number }]> = {\n top: [v0, v1],\n right: [v1, v2],\n bottom: [v2, v3],\n left: [v3, v0],\n };\n const [a, b] = edges[side];\n segs.push({ type: 'M', x: a.x, y: a.y });\n line(b.x, b.y);\n return segs;\n}\n\n/** Draw the four sides of a node independently, honoring per-side color /\n * width / visibility overrides (falling back to the node's defaults). The\n * node's `borderStyle` (solid / dashed / dotted / dynamic) applies to every\n * side. `defaultColor` is the node's (already theme-resolved) stroke. */\nexport function drawBorderSides(\n g: Graphics,\n type: string,\n width: number,\n height: number,\n sides: FlowBorderSides | undefined,\n defaultColor: string,\n defaultWidth: number,\n borderStyle: string | undefined,\n dashOffset: number,\n): void {\n if (borderStyle === 'none') return;\n for (const name of BORDER_SIDE_NAMES) {\n const side: FlowBorderSideOverride | undefined = sides?.[name];\n if (side?.visible === false) continue;\n const color = resolveThemeColor(side?.color, defaultColor) || defaultColor;\n const strokeWidth = side?.width ?? defaultWidth;\n if (!color || color === 'transparent' || !(strokeWidth > 0)) continue;\n const segs = buildBorderSideSegments(type, width, height, name);\n const dash = parseDash(borderStyle, strokeWidth);\n if (dash) {\n const offset = borderStyle === 'dynamic' ? dashOffset : 0;\n drawDashedPath(g, segs, dash, offset);\n g.stroke({ color, width: strokeWidth, 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: strokeWidth });\n }\n }\n}\n\n/** Lookup table mapping shape type to draw function */\nexport const shapeDrawers: Record<string, (g: Graphics, o: ShapeDrawOptions) => void> = {\n shapeRect: drawRect,\n shapeRoundRect: drawRoundRect,\n shapeEllipse: drawEllipse,\n shapeDiamond: drawDiamond,\n shapeDocument: drawDocument,\n shapeParallelogram: drawParallelogram,\n shapeTriangle: drawTriangle,\n shapeTrapezoid: drawTrapezoid,\n shapePentagon: drawPentagon,\n shapeHexagon: drawHexagon,\n shapeStar: drawStar,\n shapeHexagram: drawHexagram,\n shapeRightTriangle: drawRightTriangle,\n shapeCorner: drawCorner,\n textLabel: drawRect,\n flowGroup: drawFlowGroup,\n geometryGroup: drawGeometryGroup,\n shapeSvg: drawRoundRect,\n};\n"],"mappings":"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"}
@@ -1,45 +1,43 @@
1
- import { buildSvgMarkup as R } from "./svgIcons.js";
2
- import { Texture as y } from "pixi.js";
3
- var f = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set();
4
- function w(e) {
5
- return i.add(e), () => i.delete(e);
1
+ import { buildSvgMarkup as e } from "./svgIcons.js";
2
+ import { Texture as t } from "pixi.js";
3
+ //#region src/components/pro/Flow/nodes/svgIconTexture.ts
4
+ var n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set();
5
+ function a(e) {
6
+ return i.add(e), () => i.delete(e);
6
7
  }
7
- function b() {
8
- for (const e of i) e();
8
+ function o() {
9
+ for (let e of i) e();
9
10
  }
10
- var n = 96;
11
- function p(e, r) {
12
- return `${e}|${r}`;
11
+ var s = 96;
12
+ function c(e, t) {
13
+ return `${e}|${t}`;
13
14
  }
14
- function L(e, r, m) {
15
- const t = p(e, r), l = f.get(t);
16
- if (l) return l;
17
- if (a.has(t)) return null;
18
- const d = R(e, r);
19
- if (!d) return null;
20
- a.add(t);
21
- const g = new Blob([d], { type: "image/svg+xml" }), u = URL.createObjectURL(g), c = new Image();
22
- return c.onload = () => {
23
- try {
24
- const o = document.createElement("canvas");
25
- o.width = n, o.height = n;
26
- const s = o.getContext("2d");
27
- if (s) {
28
- s.clearRect(0, 0, n, n), s.drawImage(c, 0, 0, n, n);
29
- const v = y.from(o);
30
- f.set(t, v);
31
- }
32
- } catch {
33
- } finally {
34
- URL.revokeObjectURL(u), a.delete(t), m?.(), b();
35
- }
36
- }, c.onerror = () => {
37
- URL.revokeObjectURL(u), a.delete(t);
38
- }, c.src = u, null;
15
+ function l(i, a, l) {
16
+ let u = c(i, a), d = n.get(u);
17
+ if (d) return d;
18
+ if (r.has(u)) return null;
19
+ let f = e(i, a);
20
+ if (!f) return null;
21
+ r.add(u);
22
+ let p = new Blob([f], { type: "image/svg+xml" }), m = URL.createObjectURL(p), h = new Image();
23
+ return h.onload = () => {
24
+ try {
25
+ let e = document.createElement("canvas");
26
+ e.width = s, e.height = s;
27
+ let r = e.getContext("2d");
28
+ if (r) {
29
+ r.clearRect(0, 0, s, s), r.drawImage(h, 0, 0, s, s);
30
+ let i = t.from(e);
31
+ n.set(u, i);
32
+ }
33
+ } catch {} finally {
34
+ URL.revokeObjectURL(m), r.delete(u), l?.(), o();
35
+ }
36
+ }, h.onerror = () => {
37
+ URL.revokeObjectURL(m), r.delete(u);
38
+ }, h.src = m, null;
39
39
  }
40
- export {
41
- L as getIconTexture,
42
- w as subscribeIconTextureReady
43
- };
40
+ //#endregion
41
+ export { l as getIconTexture, a as subscribeIconTextureReady };
44
42
 
45
43
  //# sourceMappingURL=svgIconTexture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"svgIconTexture.js","names":[],"sources":["../../../../../src/components/pro/Flow/nodes/svgIconTexture.ts"],"sourcesContent":["import { Texture } from 'pixi.js';\nimport { buildSvgMarkup } from './svgIcons';\n\n/**\n * Rasterizes SVG icons into PixiJS textures and caches them by `id|color`.\n *\n * Rendering is asynchronous (SVG → Image → canvas → Texture). Callers request a\n * texture; if not cached yet, `null` is returned and the icon loads in the\n * background. Pass an `onReady` callback to trigger a re-render once available.\n */\nconst cache = new Map<string, Texture>();\nconst pending = new Set<string>();\nconst readyListeners = new Set<() => void>();\n\nexport function subscribeIconTextureReady(listener: () => void): () => void {\n readyListeners.add(listener);\n return () => readyListeners.delete(listener);\n}\n\nfunction notifyReady(): void {\n for (const listener of readyListeners) listener();\n}\n\nconst RASTER_SIZE = 96; // backing resolution for crisp icons when zoomed in\n/** Natural (pixel) size of rasterized icon textures; scale sprites by\n * `targetSize / ICON_TEXTURE_SIZE` — do NOT mix `width`/`height` setters with\n * `scale` writes on the same sprite, they overwrite each other. */\nexport const ICON_TEXTURE_SIZE = RASTER_SIZE;\n\nfunction keyFor(id: string, color: string): string {\n return `${id}|${color}`;\n}\n\nexport function getIconTexture(\n id: string,\n color: string,\n onReady?: () => void,\n): Texture | null {\n const key = keyFor(id, color);\n const cached = cache.get(key);\n if (cached) return cached;\n if (pending.has(key)) return null;\n\n const markup = buildSvgMarkup(id, color);\n if (!markup) return null;\n\n pending.add(key);\n const svgBlob = new Blob([markup], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(svgBlob);\n const img = new Image();\n img.onload = () => {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = RASTER_SIZE;\n canvas.height = RASTER_SIZE;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, RASTER_SIZE, RASTER_SIZE);\n ctx.drawImage(img, 0, 0, RASTER_SIZE, RASTER_SIZE);\n const tex = Texture.from(canvas);\n cache.set(key, tex);\n }\n } catch {\n /* ignore rasterization failures */\n } finally {\n URL.revokeObjectURL(url);\n pending.delete(key);\n onReady?.();\n notifyReady();\n }\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n pending.delete(key);\n };\n img.src = url;\n return null;\n}\n"],"mappings":";;AAUA,IAAM,IAAQ,oBAAI,IAAqB,GACjC,IAAU,oBAAI,IAAY,GAC1B,IAAiB,oBAAI,IAAgB;AAE3C,SAAgB,EAA0B,GAAkC;AAC1E,SAAA,EAAe,IAAI,CAAQ,GAC3B,MAAa,EAAe,OAAO,CAAQ;AAC7C;AAEA,SAAS,IAAoB;AAC3B,aAAW,KAAY,EAAgB,CAAA,EAAS;AAClD;AAEA,IAAM,IAAc;AAMpB,SAAS,EAAO,GAAY,GAAuB;AACjD,SAAO,GAAG,CAAA,IAAM,CAAA;AAClB;AAEA,SAAgB,EACd,GACA,GACA,GACgB;AAChB,QAAM,IAAM,EAAO,GAAI,CAAK,GACtB,IAAS,EAAM,IAAI,CAAG;AAC5B,MAAI,EAAQ,QAAO;AACnB,MAAI,EAAQ,IAAI,CAAG,EAAG,QAAO;AAE7B,QAAM,IAAS,EAAe,GAAI,CAAK;AACvC,MAAI,CAAC,EAAQ,QAAO;AAEpB,EAAA,EAAQ,IAAI,CAAG;AACf,QAAM,IAAU,IAAI,KAAK,CAAC,CAAM,GAAG,EAAE,MAAM,gBAAgB,CAAC,GACtD,IAAM,IAAI,gBAAgB,CAAO,GACjC,IAAM,IAAI,MAAM;AACtB,SAAA,EAAI,SAAA,MAAe;AACjB,QAAI;AACF,YAAM,IAAS,SAAS,cAAc,QAAQ;AAC9C,MAAA,EAAO,QAAQ,GACf,EAAO,SAAS;AAChB,YAAM,IAAM,EAAO,WAAW,IAAI;AAClC,UAAI,GAAK;AACP,QAAA,EAAI,UAAU,GAAG,GAAG,GAAa,CAAW,GAC5C,EAAI,UAAU,GAAK,GAAG,GAAG,GAAa,CAAW;AACjD,cAAM,IAAM,EAAQ,KAAK,CAAM;AAC/B,QAAA,EAAM,IAAI,GAAK,CAAG;AAAA,MACpB;AAAA,IACF,QAAQ;AAAA,IAER,UAAA;AACE,UAAI,gBAAgB,CAAG,GACvB,EAAQ,OAAO,CAAG,GAClB,IAAU,GACV,EAAY;AAAA,IACd;AAAA,EACF,GACA,EAAI,UAAA,MAAgB;AAClB,QAAI,gBAAgB,CAAG,GACvB,EAAQ,OAAO,CAAG;AAAA,EACpB,GACA,EAAI,MAAM,GACH;AACT"}
1
+ {"version":3,"file":"svgIconTexture.js","names":[],"sources":["../../../../../src/components/pro/Flow/nodes/svgIconTexture.ts"],"sourcesContent":["import { Texture } from 'pixi.js';\nimport { buildSvgMarkup } from './svgIcons';\n\n/**\n * Rasterizes SVG icons into PixiJS textures and caches them by `id|color`.\n *\n * Rendering is asynchronous (SVG → Image → canvas → Texture). Callers request a\n * texture; if not cached yet, `null` is returned and the icon loads in the\n * background. Pass an `onReady` callback to trigger a re-render once available.\n */\nconst cache = new Map<string, Texture>();\nconst pending = new Set<string>();\nconst readyListeners = new Set<() => void>();\n\nexport function subscribeIconTextureReady(listener: () => void): () => void {\n readyListeners.add(listener);\n return () => readyListeners.delete(listener);\n}\n\nfunction notifyReady(): void {\n for (const listener of readyListeners) listener();\n}\n\nconst RASTER_SIZE = 96; // backing resolution for crisp icons when zoomed in\n/** Natural (pixel) size of rasterized icon textures; scale sprites by\n * `targetSize / ICON_TEXTURE_SIZE` — do NOT mix `width`/`height` setters with\n * `scale` writes on the same sprite, they overwrite each other. */\nexport const ICON_TEXTURE_SIZE = RASTER_SIZE;\n\nfunction keyFor(id: string, color: string): string {\n return `${id}|${color}`;\n}\n\nexport function getIconTexture(\n id: string,\n color: string,\n onReady?: () => void,\n): Texture | null {\n const key = keyFor(id, color);\n const cached = cache.get(key);\n if (cached) return cached;\n if (pending.has(key)) return null;\n\n const markup = buildSvgMarkup(id, color);\n if (!markup) return null;\n\n pending.add(key);\n const svgBlob = new Blob([markup], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(svgBlob);\n const img = new Image();\n img.onload = () => {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = RASTER_SIZE;\n canvas.height = RASTER_SIZE;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, RASTER_SIZE, RASTER_SIZE);\n ctx.drawImage(img, 0, 0, RASTER_SIZE, RASTER_SIZE);\n const tex = Texture.from(canvas);\n cache.set(key, tex);\n }\n } catch {\n /* ignore rasterization failures */\n } finally {\n URL.revokeObjectURL(url);\n pending.delete(key);\n onReady?.();\n notifyReady();\n }\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n pending.delete(key);\n };\n img.src = url;\n return null;\n}\n"],"mappings":";;;AAUA,IAAM,oBAAQ,IAAI,IAAqB,GACjC,oBAAU,IAAI,IAAY,GAC1B,oBAAiB,IAAI,IAAgB;AAE3C,SAAgB,EAA0B,GAAkC;CAE1E,OADA,EAAe,IAAI,CAAQ,SACd,EAAe,OAAO,CAAQ;AAC7C;AAEA,SAAS,IAAoB;CAC3B,KAAK,IAAM,KAAY,GAAgB,EAAS;AAClD;AAEA,IAAM,IAAc;AAMpB,SAAS,EAAO,GAAY,GAAuB;CACjD,OAAO,GAAG,EAAG,GAAG;AAClB;AAEA,SAAgB,EACd,GACA,GACA,GACgB;CAChB,IAAM,IAAM,EAAO,GAAI,CAAK,GACtB,IAAS,EAAM,IAAI,CAAG;CAC5B,IAAI,GAAQ,OAAO;CACnB,IAAI,EAAQ,IAAI,CAAG,GAAG,OAAO;CAE7B,IAAM,IAAS,EAAe,GAAI,CAAK;CACvC,IAAI,CAAC,GAAQ,OAAO;CAEpB,EAAQ,IAAI,CAAG;CACf,IAAM,IAAU,IAAI,KAAK,CAAC,CAAM,GAAG,EAAE,MAAM,gBAAgB,CAAC,GACtD,IAAM,IAAI,gBAAgB,CAAO,GACjC,IAAM,IAAI,MAAM;CA2BtB,OA1BA,EAAI,eAAe;EACjB,IAAI;GACF,IAAM,IAAS,SAAS,cAAc,QAAQ;GAE9C,AADA,EAAO,QAAQ,GACf,EAAO,SAAS;GAChB,IAAM,IAAM,EAAO,WAAW,IAAI;GAClC,IAAI,GAAK;IAEP,AADA,EAAI,UAAU,GAAG,GAAG,GAAa,CAAW,GAC5C,EAAI,UAAU,GAAK,GAAG,GAAG,GAAa,CAAW;IACjD,IAAM,IAAM,EAAQ,KAAK,CAAM;IAC/B,EAAM,IAAI,GAAK,CAAG;GACpB;EACF,QAAQ,CAER,UAAU;GAIR,AAHA,IAAI,gBAAgB,CAAG,GACvB,EAAQ,OAAO,CAAG,GAClB,IAAU,GACV,EAAY;EACd;CACF,GACA,EAAI,gBAAgB;EAElB,AADA,IAAI,gBAAgB,CAAG,GACvB,EAAQ,OAAO,CAAG;CACpB,GACA,EAAI,MAAM,GACH;AACT"}