@yh-ui/flow 0.1.21

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 (354) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +234 -0
  3. package/dist/Flow.d.vue.ts +306 -0
  4. package/dist/Flow.vue +959 -0
  5. package/dist/Flow.vue.d.ts +306 -0
  6. package/dist/__tests__/ai-workflow.ssr.test.cjs +352 -0
  7. package/dist/__tests__/ai-workflow.ssr.test.d.ts +1 -0
  8. package/dist/__tests__/ai-workflow.ssr.test.mjs +283 -0
  9. package/dist/__tests__/ai-workflow.test.cjs +109 -0
  10. package/dist/__tests__/ai-workflow.test.d.ts +1 -0
  11. package/dist/__tests__/ai-workflow.test.mjs +112 -0
  12. package/dist/__tests__/bpmn.ssr.test.cjs +278 -0
  13. package/dist/__tests__/bpmn.ssr.test.d.ts +1 -0
  14. package/dist/__tests__/bpmn.ssr.test.mjs +237 -0
  15. package/dist/__tests__/bpmn.test.cjs +103 -0
  16. package/dist/__tests__/bpmn.test.d.ts +1 -0
  17. package/dist/__tests__/bpmn.test.mjs +106 -0
  18. package/dist/__tests__/custom-types.test.cjs +300 -0
  19. package/dist/__tests__/custom-types.test.d.ts +1 -0
  20. package/dist/__tests__/custom-types.test.mjs +248 -0
  21. package/dist/__tests__/edge.test.cjs +56 -0
  22. package/dist/__tests__/edge.test.d.ts +1 -0
  23. package/dist/__tests__/edge.test.mjs +69 -0
  24. package/dist/__tests__/event-bus.test.cjs +80 -0
  25. package/dist/__tests__/event-bus.test.d.ts +1 -0
  26. package/dist/__tests__/event-bus.test.mjs +51 -0
  27. package/dist/__tests__/flow.ssr.test.cjs +156 -0
  28. package/dist/__tests__/flow.ssr.test.d.ts +1 -0
  29. package/dist/__tests__/flow.ssr.test.mjs +112 -0
  30. package/dist/__tests__/geometry.test.cjs +191 -0
  31. package/dist/__tests__/geometry.test.d.ts +1 -0
  32. package/dist/__tests__/geometry.test.mjs +105 -0
  33. package/dist/__tests__/graph.test.cjs +115 -0
  34. package/dist/__tests__/graph.test.d.ts +1 -0
  35. package/dist/__tests__/graph.test.mjs +85 -0
  36. package/dist/__tests__/history-plugin.test.cjs +191 -0
  37. package/dist/__tests__/history-plugin.test.d.ts +1 -0
  38. package/dist/__tests__/history-plugin.test.mjs +161 -0
  39. package/dist/__tests__/history.test.cjs +81 -0
  40. package/dist/__tests__/history.test.d.ts +1 -0
  41. package/dist/__tests__/history.test.mjs +43 -0
  42. package/dist/__tests__/layout.test.cjs +213 -0
  43. package/dist/__tests__/layout.test.d.ts +1 -0
  44. package/dist/__tests__/layout.test.mjs +170 -0
  45. package/dist/__tests__/node-edit-panel.ssr.test.cjs +168 -0
  46. package/dist/__tests__/node-edit-panel.ssr.test.d.ts +1 -0
  47. package/dist/__tests__/node-edit-panel.ssr.test.mjs +118 -0
  48. package/dist/__tests__/node-group-plugin.test.cjs +235 -0
  49. package/dist/__tests__/node-group-plugin.test.d.ts +1 -0
  50. package/dist/__tests__/node-group-plugin.test.mjs +187 -0
  51. package/dist/__tests__/node-handles.test.cjs +340 -0
  52. package/dist/__tests__/node-handles.test.d.ts +1 -0
  53. package/dist/__tests__/node-handles.test.mjs +230 -0
  54. package/dist/__tests__/plugin.test.cjs +151 -0
  55. package/dist/__tests__/plugin.test.d.ts +1 -0
  56. package/dist/__tests__/plugin.test.mjs +116 -0
  57. package/dist/__tests__/transform.test.cjs +58 -0
  58. package/dist/__tests__/transform.test.d.ts +1 -0
  59. package/dist/__tests__/transform.test.mjs +38 -0
  60. package/dist/__tests__/useAlignment.test.cjs +91 -0
  61. package/dist/__tests__/useAlignment.test.d.ts +1 -0
  62. package/dist/__tests__/useAlignment.test.mjs +52 -0
  63. package/dist/__tests__/useEdges.test.cjs +117 -0
  64. package/dist/__tests__/useEdges.test.d.ts +1 -0
  65. package/dist/__tests__/useEdges.test.mjs +80 -0
  66. package/dist/__tests__/useKeyboard.test.cjs +88 -0
  67. package/dist/__tests__/useKeyboard.test.d.ts +1 -0
  68. package/dist/__tests__/useKeyboard.test.mjs +56 -0
  69. package/dist/__tests__/useNodes.test.cjs +150 -0
  70. package/dist/__tests__/useNodes.test.d.ts +1 -0
  71. package/dist/__tests__/useNodes.test.mjs +80 -0
  72. package/dist/__tests__/useSelection.test.cjs +112 -0
  73. package/dist/__tests__/useSelection.test.d.ts +1 -0
  74. package/dist/__tests__/useSelection.test.mjs +76 -0
  75. package/dist/__tests__/useViewport.test.cjs +171 -0
  76. package/dist/__tests__/useViewport.test.d.ts +1 -0
  77. package/dist/__tests__/useViewport.test.mjs +82 -0
  78. package/dist/__tests__/utils/ssr.cjs +124 -0
  79. package/dist/__tests__/utils/ssr.d.ts +33 -0
  80. package/dist/__tests__/utils/ssr.mjs +129 -0
  81. package/dist/__tests__/validation.test.cjs +95 -0
  82. package/dist/__tests__/validation.test.d.ts +1 -0
  83. package/dist/__tests__/validation.test.mjs +36 -0
  84. package/dist/components/AiNodeEditPanel.d.vue.ts +13 -0
  85. package/dist/components/AiNodeEditPanel.vue +413 -0
  86. package/dist/components/AiNodeEditPanel.vue.d.ts +13 -0
  87. package/dist/components/EdgeEditPanel.d.vue.ts +14 -0
  88. package/dist/components/EdgeEditPanel.vue +205 -0
  89. package/dist/components/EdgeEditPanel.vue.d.ts +14 -0
  90. package/dist/components/NodeEditPanel.d.vue.ts +13 -0
  91. package/dist/components/NodeEditPanel.vue +214 -0
  92. package/dist/components/NodeEditPanel.vue.d.ts +13 -0
  93. package/dist/components/edges/BaseEdge.d.vue.ts +23 -0
  94. package/dist/components/edges/BaseEdge.vue +55 -0
  95. package/dist/components/edges/BaseEdge.vue.d.ts +23 -0
  96. package/dist/components/edges/BezierEdge.d.vue.ts +22 -0
  97. package/dist/components/edges/BezierEdge.vue +57 -0
  98. package/dist/components/edges/BezierEdge.vue.d.ts +22 -0
  99. package/dist/components/edges/DataFlowEdge.d.vue.ts +41 -0
  100. package/dist/components/edges/DataFlowEdge.vue +211 -0
  101. package/dist/components/edges/DataFlowEdge.vue.d.ts +41 -0
  102. package/dist/components/edges/SmoothEdge.d.vue.ts +22 -0
  103. package/dist/components/edges/SmoothEdge.vue +53 -0
  104. package/dist/components/edges/SmoothEdge.vue.d.ts +22 -0
  105. package/dist/components/edges/StepEdge.d.vue.ts +22 -0
  106. package/dist/components/edges/StepEdge.vue +42 -0
  107. package/dist/components/edges/StepEdge.vue.d.ts +22 -0
  108. package/dist/components/edges/index.cjs +41 -0
  109. package/dist/components/edges/index.d.ts +5 -0
  110. package/dist/components/edges/index.mjs +5 -0
  111. package/dist/components/nodes/BaseNode.d.vue.ts +25 -0
  112. package/dist/components/nodes/BaseNode.vue +93 -0
  113. package/dist/components/nodes/BaseNode.vue.d.ts +25 -0
  114. package/dist/components/nodes/CustomNode.d.vue.ts +36 -0
  115. package/dist/components/nodes/CustomNode.vue +44 -0
  116. package/dist/components/nodes/CustomNode.vue.d.ts +36 -0
  117. package/dist/components/nodes/DatabaseNode.d.vue.ts +19 -0
  118. package/dist/components/nodes/DatabaseNode.vue +62 -0
  119. package/dist/components/nodes/DatabaseNode.vue.d.ts +19 -0
  120. package/dist/components/nodes/DiamondNode.d.vue.ts +19 -0
  121. package/dist/components/nodes/DiamondNode.vue +62 -0
  122. package/dist/components/nodes/DiamondNode.vue.d.ts +19 -0
  123. package/dist/components/nodes/GroupNode.d.vue.ts +31 -0
  124. package/dist/components/nodes/GroupNode.vue +48 -0
  125. package/dist/components/nodes/GroupNode.vue.d.ts +31 -0
  126. package/dist/components/nodes/InputNode.d.vue.ts +23 -0
  127. package/dist/components/nodes/InputNode.vue +63 -0
  128. package/dist/components/nodes/InputNode.vue.d.ts +23 -0
  129. package/dist/components/nodes/NodeResizer.d.vue.ts +27 -0
  130. package/dist/components/nodes/NodeResizer.vue +89 -0
  131. package/dist/components/nodes/NodeResizer.vue.d.ts +27 -0
  132. package/dist/components/nodes/NodeToolbar.d.vue.ts +32 -0
  133. package/dist/components/nodes/NodeToolbar.vue +101 -0
  134. package/dist/components/nodes/NodeToolbar.vue.d.ts +32 -0
  135. package/dist/components/nodes/OutputNode.d.vue.ts +21 -0
  136. package/dist/components/nodes/OutputNode.vue +53 -0
  137. package/dist/components/nodes/OutputNode.vue.d.ts +21 -0
  138. package/dist/components/nodes/ai-workflow/AiAgentNode.d.vue.ts +20 -0
  139. package/dist/components/nodes/ai-workflow/AiAgentNode.vue +59 -0
  140. package/dist/components/nodes/ai-workflow/AiAgentNode.vue.d.ts +20 -0
  141. package/dist/components/nodes/ai-workflow/AiConditionNode.d.vue.ts +19 -0
  142. package/dist/components/nodes/ai-workflow/AiConditionNode.vue +65 -0
  143. package/dist/components/nodes/ai-workflow/AiConditionNode.vue.d.ts +19 -0
  144. package/dist/components/nodes/ai-workflow/AiEndNode.d.vue.ts +19 -0
  145. package/dist/components/nodes/ai-workflow/AiEndNode.vue +47 -0
  146. package/dist/components/nodes/ai-workflow/AiEndNode.vue.d.ts +19 -0
  147. package/dist/components/nodes/ai-workflow/AiLlmNode.d.vue.ts +19 -0
  148. package/dist/components/nodes/ai-workflow/AiLlmNode.vue +64 -0
  149. package/dist/components/nodes/ai-workflow/AiLlmNode.vue.d.ts +19 -0
  150. package/dist/components/nodes/ai-workflow/AiMemoryNode.d.vue.ts +19 -0
  151. package/dist/components/nodes/ai-workflow/AiMemoryNode.vue +59 -0
  152. package/dist/components/nodes/ai-workflow/AiMemoryNode.vue.d.ts +19 -0
  153. package/dist/components/nodes/ai-workflow/AiPromptNode.d.vue.ts +19 -0
  154. package/dist/components/nodes/ai-workflow/AiPromptNode.vue +61 -0
  155. package/dist/components/nodes/ai-workflow/AiPromptNode.vue.d.ts +19 -0
  156. package/dist/components/nodes/ai-workflow/AiStartNode.d.vue.ts +19 -0
  157. package/dist/components/nodes/ai-workflow/AiStartNode.vue +47 -0
  158. package/dist/components/nodes/ai-workflow/AiStartNode.vue.d.ts +19 -0
  159. package/dist/components/nodes/ai-workflow/AiToolNode.d.vue.ts +19 -0
  160. package/dist/components/nodes/ai-workflow/AiToolNode.vue +59 -0
  161. package/dist/components/nodes/ai-workflow/AiToolNode.vue.d.ts +19 -0
  162. package/dist/components/nodes/ai-workflow/index.cjs +109 -0
  163. package/dist/components/nodes/ai-workflow/index.d.ts +23 -0
  164. package/dist/components/nodes/ai-workflow/index.mjs +37 -0
  165. package/dist/components/nodes/bpmn/BpmnEndEvent.d.vue.ts +19 -0
  166. package/dist/components/nodes/bpmn/BpmnEndEvent.vue +50 -0
  167. package/dist/components/nodes/bpmn/BpmnEndEvent.vue.d.ts +19 -0
  168. package/dist/components/nodes/bpmn/BpmnExclusiveGateway.d.vue.ts +19 -0
  169. package/dist/components/nodes/bpmn/BpmnExclusiveGateway.vue +60 -0
  170. package/dist/components/nodes/bpmn/BpmnExclusiveGateway.vue.d.ts +19 -0
  171. package/dist/components/nodes/bpmn/BpmnInclusiveGateway.d.vue.ts +19 -0
  172. package/dist/components/nodes/bpmn/BpmnInclusiveGateway.vue +60 -0
  173. package/dist/components/nodes/bpmn/BpmnInclusiveGateway.vue.d.ts +19 -0
  174. package/dist/components/nodes/bpmn/BpmnParallelGateway.d.vue.ts +19 -0
  175. package/dist/components/nodes/bpmn/BpmnParallelGateway.vue +60 -0
  176. package/dist/components/nodes/bpmn/BpmnParallelGateway.vue.d.ts +19 -0
  177. package/dist/components/nodes/bpmn/BpmnServiceTask.d.vue.ts +19 -0
  178. package/dist/components/nodes/bpmn/BpmnServiceTask.vue +55 -0
  179. package/dist/components/nodes/bpmn/BpmnServiceTask.vue.d.ts +19 -0
  180. package/dist/components/nodes/bpmn/BpmnStartEvent.d.vue.ts +19 -0
  181. package/dist/components/nodes/bpmn/BpmnStartEvent.vue +50 -0
  182. package/dist/components/nodes/bpmn/BpmnStartEvent.vue.d.ts +19 -0
  183. package/dist/components/nodes/bpmn/BpmnTask.d.vue.ts +19 -0
  184. package/dist/components/nodes/bpmn/BpmnTask.vue +54 -0
  185. package/dist/components/nodes/bpmn/BpmnTask.vue.d.ts +19 -0
  186. package/dist/components/nodes/bpmn/BpmnUserTask.d.vue.ts +19 -0
  187. package/dist/components/nodes/bpmn/BpmnUserTask.vue +55 -0
  188. package/dist/components/nodes/bpmn/BpmnUserTask.vue.d.ts +19 -0
  189. package/dist/components/nodes/bpmn/index.cjs +109 -0
  190. package/dist/components/nodes/bpmn/index.d.ts +23 -0
  191. package/dist/components/nodes/bpmn/index.mjs +37 -0
  192. package/dist/components/nodes/index.cjs +246 -0
  193. package/dist/components/nodes/index.d.ts +13 -0
  194. package/dist/components/nodes/index.mjs +44 -0
  195. package/dist/core/FlowContext.cjs +21 -0
  196. package/dist/core/FlowContext.d.ts +10 -0
  197. package/dist/core/FlowContext.mjs +13 -0
  198. package/dist/core/index.cjs +104 -0
  199. package/dist/core/index.d.ts +9 -0
  200. package/dist/core/index.mjs +9 -0
  201. package/dist/core/useAlignment.cjs +81 -0
  202. package/dist/core/useAlignment.d.ts +33 -0
  203. package/dist/core/useAlignment.mjs +71 -0
  204. package/dist/core/useEdges.cjs +132 -0
  205. package/dist/core/useEdges.d.ts +29 -0
  206. package/dist/core/useEdges.mjs +89 -0
  207. package/dist/core/useFlow.cjs +40 -0
  208. package/dist/core/useFlow.d.ts +31 -0
  209. package/dist/core/useFlow.mjs +32 -0
  210. package/dist/core/useHistory.cjs +63 -0
  211. package/dist/core/useHistory.d.ts +15 -0
  212. package/dist/core/useHistory.mjs +54 -0
  213. package/dist/core/useKeyboard.cjs +54 -0
  214. package/dist/core/useKeyboard.d.ts +18 -0
  215. package/dist/core/useKeyboard.mjs +45 -0
  216. package/dist/core/useNodeDistribution.cjs +171 -0
  217. package/dist/core/useNodeDistribution.d.ts +12 -0
  218. package/dist/core/useNodeDistribution.mjs +145 -0
  219. package/dist/core/useNodes.cjs +146 -0
  220. package/dist/core/useNodes.d.ts +26 -0
  221. package/dist/core/useNodes.mjs +101 -0
  222. package/dist/core/useSelection.cjs +83 -0
  223. package/dist/core/useSelection.d.ts +18 -0
  224. package/dist/core/useSelection.mjs +53 -0
  225. package/dist/core/useViewport.cjs +157 -0
  226. package/dist/core/useViewport.d.ts +65 -0
  227. package/dist/core/useViewport.mjs +125 -0
  228. package/dist/flow.cjs +240 -0
  229. package/dist/flow.d.ts +276 -0
  230. package/dist/flow.mjs +230 -0
  231. package/dist/index.cjs +378 -0
  232. package/dist/index.d.ts +28 -0
  233. package/dist/index.mjs +50 -0
  234. package/dist/plugins/index.cjs +96 -0
  235. package/dist/plugins/index.d.ts +34 -0
  236. package/dist/plugins/index.mjs +47 -0
  237. package/dist/plugins/plugin.cjs +117 -0
  238. package/dist/plugins/plugin.d.ts +72 -0
  239. package/dist/plugins/plugin.mjs +110 -0
  240. package/dist/plugins/plugins/controls.cjs +38 -0
  241. package/dist/plugins/plugins/controls.d.ts +12 -0
  242. package/dist/plugins/plugins/controls.mjs +28 -0
  243. package/dist/plugins/plugins/export.cjs +102 -0
  244. package/dist/plugins/plugins/export.d.ts +12 -0
  245. package/dist/plugins/plugins/export.mjs +89 -0
  246. package/dist/plugins/plugins/grid.cjs +36 -0
  247. package/dist/plugins/plugins/grid.d.ts +11 -0
  248. package/dist/plugins/plugins/grid.mjs +26 -0
  249. package/dist/plugins/plugins/history.cjs +140 -0
  250. package/dist/plugins/plugins/history.d.ts +53 -0
  251. package/dist/plugins/plugins/history.mjs +132 -0
  252. package/dist/plugins/plugins/index.cjs +104 -0
  253. package/dist/plugins/plugins/index.d.ts +9 -0
  254. package/dist/plugins/plugins/index.mjs +9 -0
  255. package/dist/plugins/plugins/keyboard.cjs +27 -0
  256. package/dist/plugins/plugins/keyboard.d.ts +10 -0
  257. package/dist/plugins/plugins/keyboard.mjs +18 -0
  258. package/dist/plugins/plugins/layout.cjs +275 -0
  259. package/dist/plugins/plugins/layout.d.ts +34 -0
  260. package/dist/plugins/plugins/layout.mjs +246 -0
  261. package/dist/plugins/plugins/minimap.cjs +60 -0
  262. package/dist/plugins/plugins/minimap.d.ts +25 -0
  263. package/dist/plugins/plugins/minimap.mjs +50 -0
  264. package/dist/plugins/plugins/node-group.cjs +209 -0
  265. package/dist/plugins/plugins/node-group.d.ts +26 -0
  266. package/dist/plugins/plugins/node-group.mjs +178 -0
  267. package/dist/plugins/plugins/snap.cjs +36 -0
  268. package/dist/plugins/plugins/snap.d.ts +12 -0
  269. package/dist/plugins/plugins/snap.mjs +26 -0
  270. package/dist/renderer/AlignmentLines.d.vue.ts +5 -0
  271. package/dist/renderer/AlignmentLines.vue +113 -0
  272. package/dist/renderer/AlignmentLines.vue.d.ts +5 -0
  273. package/dist/renderer/Background.d.vue.ts +7 -0
  274. package/dist/renderer/Background.vue +86 -0
  275. package/dist/renderer/Background.vue.d.ts +7 -0
  276. package/dist/renderer/Controls.d.vue.ts +13 -0
  277. package/dist/renderer/Controls.vue +82 -0
  278. package/dist/renderer/Controls.vue.d.ts +13 -0
  279. package/dist/renderer/EdgeHandlesRenderer.d.vue.ts +11 -0
  280. package/dist/renderer/EdgeHandlesRenderer.vue +75 -0
  281. package/dist/renderer/EdgeHandlesRenderer.vue.d.ts +11 -0
  282. package/dist/renderer/EdgeRenderer.d.vue.ts +39 -0
  283. package/dist/renderer/EdgeRenderer.vue +204 -0
  284. package/dist/renderer/EdgeRenderer.vue.d.ts +39 -0
  285. package/dist/renderer/FlowBackground.d.vue.ts +11 -0
  286. package/dist/renderer/FlowBackground.vue +82 -0
  287. package/dist/renderer/FlowBackground.vue.d.ts +11 -0
  288. package/dist/renderer/Minimap.d.vue.ts +30 -0
  289. package/dist/renderer/Minimap.vue +290 -0
  290. package/dist/renderer/Minimap.vue.d.ts +30 -0
  291. package/dist/renderer/NodeRenderer.d.vue.ts +56 -0
  292. package/dist/renderer/NodeRenderer.vue +328 -0
  293. package/dist/renderer/NodeRenderer.vue.d.ts +56 -0
  294. package/dist/renderer/SelectionBox.d.vue.ts +11 -0
  295. package/dist/renderer/SelectionBox.vue +28 -0
  296. package/dist/renderer/SelectionBox.vue.d.ts +11 -0
  297. package/dist/types/edge.cjs +13 -0
  298. package/dist/types/edge.d.ts +65 -0
  299. package/dist/types/edge.mjs +6 -0
  300. package/dist/types/events.cjs +1 -0
  301. package/dist/types/events.d.ts +115 -0
  302. package/dist/types/events.mjs +0 -0
  303. package/dist/types/index.cjs +1 -0
  304. package/dist/types/index.d.ts +366 -0
  305. package/dist/types/index.mjs +0 -0
  306. package/dist/types/node.cjs +9 -0
  307. package/dist/types/node.d.ts +90 -0
  308. package/dist/types/node.mjs +3 -0
  309. package/dist/types/viewport.cjs +42 -0
  310. package/dist/types/viewport.d.ts +62 -0
  311. package/dist/types/viewport.mjs +36 -0
  312. package/dist/utils/bpmn-engine.cjs +390 -0
  313. package/dist/utils/bpmn-engine.d.ts +164 -0
  314. package/dist/utils/bpmn-engine.mjs +378 -0
  315. package/dist/utils/bpmn.cjs +492 -0
  316. package/dist/utils/bpmn.d.ts +53 -0
  317. package/dist/utils/bpmn.mjs +430 -0
  318. package/dist/utils/collaboration.cjs +537 -0
  319. package/dist/utils/collaboration.d.ts +189 -0
  320. package/dist/utils/collaboration.mjs +521 -0
  321. package/dist/utils/custom-types.cjs +138 -0
  322. package/dist/utils/custom-types.d.ts +78 -0
  323. package/dist/utils/custom-types.mjs +108 -0
  324. package/dist/utils/edge.cjs +235 -0
  325. package/dist/utils/edge.d.ts +79 -0
  326. package/dist/utils/edge.mjs +172 -0
  327. package/dist/utils/event-bus.cjs +91 -0
  328. package/dist/utils/event-bus.d.ts +39 -0
  329. package/dist/utils/event-bus.mjs +82 -0
  330. package/dist/utils/geometry.cjs +178 -0
  331. package/dist/utils/geometry.d.ts +186 -0
  332. package/dist/utils/geometry.mjs +144 -0
  333. package/dist/utils/graph.cjs +158 -0
  334. package/dist/utils/graph.d.ts +40 -0
  335. package/dist/utils/graph.mjs +147 -0
  336. package/dist/utils/index.cjs +137 -0
  337. package/dist/utils/index.d.ts +12 -0
  338. package/dist/utils/index.mjs +12 -0
  339. package/dist/utils/performance.cjs +94 -0
  340. package/dist/utils/performance.d.ts +18 -0
  341. package/dist/utils/performance.mjs +82 -0
  342. package/dist/utils/screenshot.cjs +87 -0
  343. package/dist/utils/screenshot.d.ts +22 -0
  344. package/dist/utils/screenshot.mjs +66 -0
  345. package/dist/utils/theme.cjs +228 -0
  346. package/dist/utils/theme.d.ts +92 -0
  347. package/dist/utils/theme.mjs +217 -0
  348. package/dist/utils/transform.cjs +76 -0
  349. package/dist/utils/transform.d.ts +45 -0
  350. package/dist/utils/transform.mjs +57 -0
  351. package/dist/utils/validation.cjs +107 -0
  352. package/dist/utils/validation.d.ts +29 -0
  353. package/dist/utils/validation.mjs +85 -0
  354. package/package.json +61 -0
@@ -0,0 +1,78 @@
1
+ import type { Component } from 'vue';
2
+ import type { EdgeType, Edge } from '../types/edge';
3
+ import type { NodeType, Node, NodeData, NodeHandleBounds } from '../types/node';
4
+ export interface CustomEdge {
5
+ type: EdgeType;
6
+ component: Component;
7
+ label?: string;
8
+ }
9
+ export declare function registerCustomEdge(edge: CustomEdge): void;
10
+ export declare function getCustomEdge(type: EdgeType): CustomEdge | undefined;
11
+ export declare function getAllCustomEdges(): CustomEdge[];
12
+ export declare function hasCustomEdge(type: EdgeType): boolean;
13
+ export interface CustomNodeTemplate {
14
+ type: NodeType;
15
+ component: Component;
16
+ defaultData?: Partial<NodeData>;
17
+ defaultWidth?: number;
18
+ defaultHeight?: number;
19
+ handles?: NodeHandleBounds;
20
+ description?: string;
21
+ }
22
+ export declare function registerCustomNodeTemplate(template: CustomNodeTemplate): void;
23
+ export declare function getCustomNodeTemplate(type: NodeType): CustomNodeTemplate | undefined;
24
+ export declare function getAllCustomNodeTemplates(): CustomNodeTemplate[];
25
+ export declare function hasCustomNodeTemplate(type: NodeType): boolean;
26
+ export declare function createNodeFromTemplate(type: NodeType, id: string, position: {
27
+ x: number;
28
+ y: number;
29
+ }, overrides?: Partial<Node>): Node | null;
30
+ export interface CustomNode {
31
+ type: NodeType;
32
+ component: Component;
33
+ defaultData?: Record<string, unknown>;
34
+ }
35
+ export declare function registerCustomNode(node: CustomNode): void;
36
+ export declare function getCustomNode(type: NodeType): CustomNode | undefined;
37
+ export declare function getAllCustomNodes(): CustomNode[];
38
+ export declare function hasCustomNode(type: NodeType): boolean;
39
+ export interface NestedNodeConfig {
40
+ parentId: string;
41
+ children: string[];
42
+ extent?: 'parent' | 'container';
43
+ }
44
+ export declare function isNestedNode(node: Node): boolean;
45
+ export declare function getNodeChildren(node: Node, allNodes: Node[]): Node[];
46
+ export declare function getNodeParent(node: Node, allNodes: Node[]): Node | undefined;
47
+ export interface EdgeTemplate {
48
+ type: EdgeType;
49
+ component?: Component;
50
+ defaultData?: Record<string, unknown>;
51
+ animated?: boolean;
52
+ style?: Record<string, string | number>;
53
+ label?: string;
54
+ }
55
+ export declare function registerEdgeTemplate(template: EdgeTemplate): void;
56
+ export declare function getEdgeTemplate(type: EdgeType): EdgeTemplate | undefined;
57
+ export declare function getAllEdgeTemplates(): EdgeTemplate[];
58
+ export interface FlowExportData {
59
+ nodes: Node[];
60
+ edges: Edge[];
61
+ viewport?: {
62
+ x: number;
63
+ y: number;
64
+ zoom: number;
65
+ };
66
+ customTemplates?: {
67
+ nodes: CustomNodeTemplate[];
68
+ edges: EdgeTemplate[];
69
+ };
70
+ version?: string;
71
+ }
72
+ export declare function exportFlowData(nodes: Node[], edges: Edge[], viewport?: {
73
+ x: number;
74
+ y: number;
75
+ zoom: number;
76
+ }): string;
77
+ export declare function importFlowData(json: string): FlowExportData | null;
78
+ export declare function clearCustomTypes(): void;
@@ -0,0 +1,108 @@
1
+ const customEdges = /* @__PURE__ */ new Map();
2
+ export function registerCustomEdge(edge) {
3
+ customEdges.set(edge.type, edge);
4
+ }
5
+ export function getCustomEdge(type) {
6
+ return customEdges.get(type);
7
+ }
8
+ export function getAllCustomEdges() {
9
+ return Array.from(customEdges.values());
10
+ }
11
+ export function hasCustomEdge(type) {
12
+ return customEdges.has(type);
13
+ }
14
+ const customNodeTemplates = /* @__PURE__ */ new Map();
15
+ export function registerCustomNodeTemplate(template) {
16
+ customNodeTemplates.set(template.type, template);
17
+ }
18
+ export function getCustomNodeTemplate(type) {
19
+ return customNodeTemplates.get(type);
20
+ }
21
+ export function getAllCustomNodeTemplates() {
22
+ return Array.from(customNodeTemplates.values());
23
+ }
24
+ export function hasCustomNodeTemplate(type) {
25
+ return customNodeTemplates.has(type);
26
+ }
27
+ export function createNodeFromTemplate(type, id, position, overrides) {
28
+ const template = getCustomNodeTemplate(type);
29
+ if (!template) return null;
30
+ return {
31
+ id,
32
+ type,
33
+ position,
34
+ data: { ...template.defaultData, ...overrides?.data },
35
+ width: overrides?.width ?? template.defaultWidth ?? 180,
36
+ height: overrides?.height ?? template.defaultHeight ?? 60,
37
+ selected: false,
38
+ dragging: false,
39
+ ...overrides
40
+ };
41
+ }
42
+ const customNodes = /* @__PURE__ */ new Map();
43
+ export function registerCustomNode(node) {
44
+ if (!customNodeTemplates.has(node.type)) {
45
+ customNodeTemplates.set(node.type, {
46
+ type: node.type,
47
+ component: node.component,
48
+ defaultData: node.defaultData
49
+ });
50
+ }
51
+ customNodes.set(node.type, node);
52
+ }
53
+ export function getCustomNode(type) {
54
+ return customNodes.get(type);
55
+ }
56
+ export function getAllCustomNodes() {
57
+ return Array.from(customNodes.values());
58
+ }
59
+ export function hasCustomNode(type) {
60
+ return customNodes.has(type);
61
+ }
62
+ export function isNestedNode(node) {
63
+ return !!node.parentId;
64
+ }
65
+ export function getNodeChildren(node, allNodes) {
66
+ if (!node.id) return [];
67
+ return allNodes.filter((n) => n.parentId === node.id);
68
+ }
69
+ export function getNodeParent(node, allNodes) {
70
+ if (!node.parentId) return void 0;
71
+ return allNodes.find((n) => n.id === node.parentId);
72
+ }
73
+ const edgeTemplates = /* @__PURE__ */ new Map();
74
+ export function registerEdgeTemplate(template) {
75
+ edgeTemplates.set(template.type, template);
76
+ }
77
+ export function getEdgeTemplate(type) {
78
+ return edgeTemplates.get(type);
79
+ }
80
+ export function getAllEdgeTemplates() {
81
+ return Array.from(edgeTemplates.values());
82
+ }
83
+ export function exportFlowData(nodes, edges, viewport) {
84
+ const data = {
85
+ nodes,
86
+ edges,
87
+ viewport,
88
+ version: "1.0.0"
89
+ };
90
+ return JSON.stringify(data, null, 2);
91
+ }
92
+ export function importFlowData(json) {
93
+ try {
94
+ const data = JSON.parse(json);
95
+ if (!data.nodes || !Array.isArray(data.nodes)) {
96
+ return null;
97
+ }
98
+ return data;
99
+ } catch {
100
+ return null;
101
+ }
102
+ }
103
+ export function clearCustomTypes() {
104
+ customEdges.clear();
105
+ customNodes.clear();
106
+ customNodeTemplates.clear();
107
+ edgeTemplates.clear();
108
+ }
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getBezierPath = getBezierPath;
7
+ exports.getEdgeCenter = getEdgeCenter;
8
+ exports.getEdgePath = getEdgePath;
9
+ exports.getEdgePosition = getEdgePosition;
10
+ exports.getHandlePosition = getHandlePosition;
11
+ exports.getSmoothStepPath = getSmoothStepPath;
12
+ exports.getStepPath = getStepPath;
13
+ exports.getStraightPath = getStraightPath;
14
+ exports.shortenEndpoint = shortenEndpoint;
15
+ function getDir(pos) {
16
+ switch (pos) {
17
+ case "top":
18
+ return {
19
+ x: 0,
20
+ y: -1
21
+ };
22
+ case "bottom":
23
+ return {
24
+ x: 0,
25
+ y: 1
26
+ };
27
+ case "right":
28
+ return {
29
+ x: 1,
30
+ y: 0
31
+ };
32
+ case "left":
33
+ return {
34
+ x: -1,
35
+ y: 0
36
+ };
37
+ }
38
+ }
39
+ function getHandlePosition(node, handlePosition = "right", _handleId) {
40
+ const x = node.position.x;
41
+ const y = node.position.y;
42
+ let width = node.width;
43
+ let height = node.height;
44
+ if (width === void 0 && node.style?.width) {
45
+ const val = parseInt(String(node.style.width));
46
+ if (!isNaN(val)) width = val;
47
+ }
48
+ if (height === void 0 && node.style?.height) {
49
+ const val = parseInt(String(node.style.height));
50
+ if (!isNaN(val)) height = val;
51
+ }
52
+ width = width || 150;
53
+ height = height || 40;
54
+ switch (handlePosition) {
55
+ case "top":
56
+ return {
57
+ x: x + width / 2,
58
+ y
59
+ };
60
+ case "bottom":
61
+ return {
62
+ x: x + width / 2,
63
+ y: y + height
64
+ };
65
+ case "left":
66
+ return {
67
+ x,
68
+ y: y + height / 2
69
+ };
70
+ case "right":
71
+ return {
72
+ x: x + width,
73
+ y: y + height / 2
74
+ };
75
+ default:
76
+ return {
77
+ x: x + width / 2,
78
+ y: y + height / 2
79
+ };
80
+ }
81
+ }
82
+ function getEdgePosition(sourceX, sourceY, targetX, targetY, _sourcePosition, _targetPosition) {
83
+ return {
84
+ sx: sourceX,
85
+ sy: sourceY,
86
+ tx: targetX,
87
+ ty: targetY
88
+ };
89
+ }
90
+ function getBezierPath(params) {
91
+ const {
92
+ sourceX,
93
+ sourceY,
94
+ targetX,
95
+ targetY,
96
+ sourcePosition,
97
+ targetPosition,
98
+ curvature = 0.25
99
+ } = params;
100
+ const srcDir = getDir(sourcePosition);
101
+ const tgtDir = getDir(targetPosition);
102
+ const dx = Math.abs(targetX - sourceX);
103
+ const dy = Math.abs(targetY - sourceY);
104
+ const dist = Math.sqrt(dx * dx + dy * dy);
105
+ const offset = Math.min(Math.max(dist * curvature, 20), dist / 2);
106
+ const c1x = sourceX + srcDir.x * offset;
107
+ const c1y = sourceY + srcDir.y * offset;
108
+ const c2x = targetX + tgtDir.x * offset;
109
+ const c2y = targetY + tgtDir.y * offset;
110
+ return `M${sourceX},${sourceY} C${c1x},${c1y} ${c2x},${c2y} ${targetX},${targetY}`;
111
+ }
112
+ function getStraightPath(params) {
113
+ const {
114
+ sourceX,
115
+ sourceY,
116
+ targetX,
117
+ targetY
118
+ } = params;
119
+ return `M${sourceX},${sourceY} L${targetX},${targetY}`;
120
+ }
121
+ function getStepPath(params) {
122
+ const {
123
+ sourceX,
124
+ sourceY,
125
+ targetX,
126
+ targetY,
127
+ sourcePosition,
128
+ targetPosition
129
+ } = params;
130
+ const srcIsHoriz = sourcePosition === "left" || sourcePosition === "right";
131
+ const tgtIsHoriz = targetPosition === "left" || targetPosition === "right";
132
+ if (srcIsHoriz && !tgtIsHoriz) {
133
+ const midX = (sourceX + targetX) / 2;
134
+ return `M${sourceX},${sourceY} L${midX},${sourceY} L${midX},${targetY} L${targetX},${targetY}`;
135
+ } else if (!srcIsHoriz && tgtIsHoriz) {
136
+ const midY = (sourceY + targetY) / 2;
137
+ return `M${sourceX},${sourceY} L${sourceX},${midY} L${targetX},${midY} L${targetX},${targetY}`;
138
+ } else if (srcIsHoriz && tgtIsHoriz) {
139
+ const midX = (sourceX + targetX) / 2;
140
+ return `M${sourceX},${sourceY} L${midX},${sourceY} L${midX},${targetY} L${targetX},${targetY}`;
141
+ } else {
142
+ const midY = (sourceY + targetY) / 2;
143
+ return `M${sourceX},${sourceY} L${sourceX},${midY} L${targetX},${midY} L${targetX},${targetY}`;
144
+ }
145
+ }
146
+ function getSmoothStepPath(params) {
147
+ const {
148
+ sourceX,
149
+ sourceY,
150
+ targetX,
151
+ targetY,
152
+ sourcePosition,
153
+ targetPosition
154
+ } = params;
155
+ const srcDir = getDir(sourcePosition);
156
+ const tgtDir = getDir(targetPosition);
157
+ const dx = Math.abs(targetX - sourceX);
158
+ const dy = Math.abs(targetY - sourceY);
159
+ const r = Math.min(10, Math.min(dx, dy) / 2);
160
+ const srcIsHoriz = sourcePosition === "left" || sourcePosition === "right";
161
+ if (srcIsHoriz) {
162
+ const midX = (sourceX + targetX) / 2;
163
+ const sign1X = srcDir.x;
164
+ const sign2Y = tgtDir.y || (targetY > sourceY ? 1 : -1);
165
+ return [`M${sourceX},${sourceY}`, `L${midX - sign1X * r},${sourceY}`, `Q${midX},${sourceY} ${midX},${sourceY + sign2Y * r}`, `L${midX},${targetY - sign2Y * r}`, `Q${midX},${targetY} ${midX + sign1X * r},${targetY}`, `L${targetX},${targetY}`].join(" ");
166
+ } else {
167
+ const midY = (sourceY + targetY) / 2;
168
+ const sign1Y = srcDir.y;
169
+ const sign2X = tgtDir.x || (targetX > sourceX ? 1 : -1);
170
+ return [`M${sourceX},${sourceY}`, `L${sourceX},${midY - sign1Y * r}`, `Q${sourceX},${midY} ${sourceX + sign2X * r},${midY}`, `L${targetX - sign2X * r},${midY}`, `Q${targetX},${midY} ${targetX},${midY + sign1Y * r}`, `L${targetX},${targetY}`].join(" ");
171
+ }
172
+ }
173
+ function getEdgePath(type, params) {
174
+ switch (type) {
175
+ case "bezier":
176
+ case "default":
177
+ return getBezierPath(params);
178
+ case "straight":
179
+ return getStraightPath(params);
180
+ case "step":
181
+ return getStepPath(params);
182
+ case "smoothstep":
183
+ return getSmoothStepPath(params);
184
+ default:
185
+ return getBezierPath(params);
186
+ }
187
+ }
188
+ function getEdgeCenter(params) {
189
+ const {
190
+ sourceX,
191
+ sourceY,
192
+ targetX,
193
+ targetY,
194
+ type = "bezier"
195
+ } = params;
196
+ if (type === "bezier" || type === "default") {
197
+ const curvature = params.curvature ?? 0.25;
198
+ const srcDir = getDir(params.sourcePosition);
199
+ const tgtDir = getDir(params.targetPosition);
200
+ const dx = Math.abs(targetX - sourceX);
201
+ const dy = Math.abs(targetY - sourceY);
202
+ const dist = Math.sqrt(dx * dx + dy * dy);
203
+ const offset = Math.min(Math.max(dist * curvature, 20), dist / 2);
204
+ const c1x = sourceX + srcDir.x * offset;
205
+ const c1y = sourceY + srcDir.y * offset;
206
+ const c2x = targetX + tgtDir.x * offset;
207
+ const c2y = targetY + tgtDir.y * offset;
208
+ return {
209
+ x: 0.125 * sourceX + 0.375 * c1x + 0.375 * c2x + 0.125 * targetX,
210
+ y: 0.125 * sourceY + 0.375 * c1y + 0.375 * c2y + 0.125 * targetY,
211
+ ox: (targetX - sourceX) / 2,
212
+ oy: (targetY - sourceY) / 2
213
+ };
214
+ }
215
+ return {
216
+ x: (sourceX + targetX) / 2,
217
+ y: (sourceY + targetY) / 2,
218
+ ox: (targetX - sourceX) / 2,
219
+ oy: (targetY - sourceY) / 2
220
+ };
221
+ }
222
+ function shortenEndpoint(x, y, fromX, fromY, offset) {
223
+ const dx = x - fromX;
224
+ const dy = y - fromY;
225
+ const dist = Math.sqrt(dx * dx + dy * dy);
226
+ if (dist < offset * 2) return {
227
+ x,
228
+ y
229
+ };
230
+ const factor = offset / dist;
231
+ return {
232
+ x: x - dx * factor,
233
+ y: y - dy * factor
234
+ };
235
+ }
@@ -0,0 +1,79 @@
1
+ import type { Position, EdgeType, NodeStyle } from '../types';
2
+ export interface EdgePathParams {
3
+ sourceX: number;
4
+ sourceY: number;
5
+ targetX: number;
6
+ targetY: number;
7
+ sourcePosition: Position;
8
+ targetPosition: Position;
9
+ /** 控制曲率,0~1,默认 0.25 */
10
+ curvature?: number;
11
+ }
12
+ /**
13
+ * 获取连接点的位置坐标
14
+ */
15
+ export declare function getHandlePosition(node: {
16
+ position: {
17
+ x: number;
18
+ y: number;
19
+ };
20
+ width?: number;
21
+ height?: number;
22
+ style?: NodeStyle;
23
+ }, handlePosition?: Position, _handleId?: string | null): {
24
+ x: number;
25
+ y: number;
26
+ };
27
+ /**
28
+ * 获取从源位置到目标位置的偏移量(向后兼容)
29
+ */
30
+ export declare function getEdgePosition(sourceX: number, sourceY: number, targetX: number, targetY: number, _sourcePosition: Position, _targetPosition: Position): {
31
+ sx: number;
32
+ sy: number;
33
+ tx: number;
34
+ ty: number;
35
+ };
36
+ /**
37
+ * 生成高质量贝塞尔曲线路径(参考 vue-flow 实现)
38
+ * 控制点偏移量基于两节点的距离动态计算,保证平滑
39
+ */
40
+ export declare function getBezierPath(params: EdgePathParams): string;
41
+ /**
42
+ * 生成直线路径
43
+ */
44
+ export declare function getStraightPath(params: EdgePathParams): string;
45
+ /**
46
+ * 生成阶梯线路径(水平/垂直直角转弯)
47
+ */
48
+ export declare function getStepPath(params: EdgePathParams): string;
49
+ /**
50
+ * 生成平滑阶梯线路径(带圆角转折的 step)
51
+ */
52
+ export declare function getSmoothStepPath(params: EdgePathParams): string;
53
+ /**
54
+ * 根据类型获取连线路径
55
+ */
56
+ export declare function getEdgePath(type: EdgeType | 'default', params: EdgePathParams): string;
57
+ /**
58
+ * 计算连线的中心点(用于标签放置)
59
+ */
60
+ export declare function getEdgeCenter(params: EdgePathParams & {
61
+ type?: string;
62
+ }): {
63
+ x: number;
64
+ y: number;
65
+ ox: number;
66
+ oy: number;
67
+ };
68
+ /**
69
+ * 计算给定方向需要缩短路径的终点(使箭头尖端落在 handle 边缘)
70
+ * @param x 终点 x
71
+ * @param y 终点 y
72
+ * @param fromX 起点 x(用于计算方向)
73
+ * @param fromY 起点 y
74
+ * @param offset 回退距离(px)
75
+ */
76
+ export declare function shortenEndpoint(x: number, y: number, fromX: number, fromY: number, offset: number): {
77
+ x: number;
78
+ y: number;
79
+ };
@@ -0,0 +1,172 @@
1
+ function getDir(pos) {
2
+ switch (pos) {
3
+ case "top":
4
+ return { x: 0, y: -1 };
5
+ case "bottom":
6
+ return { x: 0, y: 1 };
7
+ case "right":
8
+ return { x: 1, y: 0 };
9
+ case "left":
10
+ return { x: -1, y: 0 };
11
+ }
12
+ }
13
+ export function getHandlePosition(node, handlePosition = "right", _handleId) {
14
+ const x = node.position.x;
15
+ const y = node.position.y;
16
+ let width = node.width;
17
+ let height = node.height;
18
+ if (width === void 0 && node.style?.width) {
19
+ const val = parseInt(String(node.style.width));
20
+ if (!isNaN(val)) width = val;
21
+ }
22
+ if (height === void 0 && node.style?.height) {
23
+ const val = parseInt(String(node.style.height));
24
+ if (!isNaN(val)) height = val;
25
+ }
26
+ width = width || 150;
27
+ height = height || 40;
28
+ switch (handlePosition) {
29
+ case "top":
30
+ return { x: x + width / 2, y };
31
+ case "bottom":
32
+ return { x: x + width / 2, y: y + height };
33
+ case "left":
34
+ return { x, y: y + height / 2 };
35
+ case "right":
36
+ return { x: x + width, y: y + height / 2 };
37
+ default:
38
+ return { x: x + width / 2, y: y + height / 2 };
39
+ }
40
+ }
41
+ export function getEdgePosition(sourceX, sourceY, targetX, targetY, _sourcePosition, _targetPosition) {
42
+ return { sx: sourceX, sy: sourceY, tx: targetX, ty: targetY };
43
+ }
44
+ export function getBezierPath(params) {
45
+ const {
46
+ sourceX,
47
+ sourceY,
48
+ targetX,
49
+ targetY,
50
+ sourcePosition,
51
+ targetPosition,
52
+ curvature = 0.25
53
+ } = params;
54
+ const srcDir = getDir(sourcePosition);
55
+ const tgtDir = getDir(targetPosition);
56
+ const dx = Math.abs(targetX - sourceX);
57
+ const dy = Math.abs(targetY - sourceY);
58
+ const dist = Math.sqrt(dx * dx + dy * dy);
59
+ const offset = Math.min(Math.max(dist * curvature, 20), dist / 2);
60
+ const c1x = sourceX + srcDir.x * offset;
61
+ const c1y = sourceY + srcDir.y * offset;
62
+ const c2x = targetX + tgtDir.x * offset;
63
+ const c2y = targetY + tgtDir.y * offset;
64
+ return `M${sourceX},${sourceY} C${c1x},${c1y} ${c2x},${c2y} ${targetX},${targetY}`;
65
+ }
66
+ export function getStraightPath(params) {
67
+ const { sourceX, sourceY, targetX, targetY } = params;
68
+ return `M${sourceX},${sourceY} L${targetX},${targetY}`;
69
+ }
70
+ export function getStepPath(params) {
71
+ const { sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition } = params;
72
+ const srcIsHoriz = sourcePosition === "left" || sourcePosition === "right";
73
+ const tgtIsHoriz = targetPosition === "left" || targetPosition === "right";
74
+ if (srcIsHoriz && !tgtIsHoriz) {
75
+ const midX = (sourceX + targetX) / 2;
76
+ return `M${sourceX},${sourceY} L${midX},${sourceY} L${midX},${targetY} L${targetX},${targetY}`;
77
+ } else if (!srcIsHoriz && tgtIsHoriz) {
78
+ const midY = (sourceY + targetY) / 2;
79
+ return `M${sourceX},${sourceY} L${sourceX},${midY} L${targetX},${midY} L${targetX},${targetY}`;
80
+ } else if (srcIsHoriz && tgtIsHoriz) {
81
+ const midX = (sourceX + targetX) / 2;
82
+ return `M${sourceX},${sourceY} L${midX},${sourceY} L${midX},${targetY} L${targetX},${targetY}`;
83
+ } else {
84
+ const midY = (sourceY + targetY) / 2;
85
+ return `M${sourceX},${sourceY} L${sourceX},${midY} L${targetX},${midY} L${targetX},${targetY}`;
86
+ }
87
+ }
88
+ export function getSmoothStepPath(params) {
89
+ const { sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition } = params;
90
+ const srcDir = getDir(sourcePosition);
91
+ const tgtDir = getDir(targetPosition);
92
+ const dx = Math.abs(targetX - sourceX);
93
+ const dy = Math.abs(targetY - sourceY);
94
+ const r = Math.min(10, Math.min(dx, dy) / 2);
95
+ const srcIsHoriz = sourcePosition === "left" || sourcePosition === "right";
96
+ if (srcIsHoriz) {
97
+ const midX = (sourceX + targetX) / 2;
98
+ const sign1X = srcDir.x;
99
+ const sign2Y = tgtDir.y || (targetY > sourceY ? 1 : -1);
100
+ return [
101
+ `M${sourceX},${sourceY}`,
102
+ `L${midX - sign1X * r},${sourceY}`,
103
+ `Q${midX},${sourceY} ${midX},${sourceY + sign2Y * r}`,
104
+ `L${midX},${targetY - sign2Y * r}`,
105
+ `Q${midX},${targetY} ${midX + sign1X * r},${targetY}`,
106
+ `L${targetX},${targetY}`
107
+ ].join(" ");
108
+ } else {
109
+ const midY = (sourceY + targetY) / 2;
110
+ const sign1Y = srcDir.y;
111
+ const sign2X = tgtDir.x || (targetX > sourceX ? 1 : -1);
112
+ return [
113
+ `M${sourceX},${sourceY}`,
114
+ `L${sourceX},${midY - sign1Y * r}`,
115
+ `Q${sourceX},${midY} ${sourceX + sign2X * r},${midY}`,
116
+ `L${targetX - sign2X * r},${midY}`,
117
+ `Q${targetX},${midY} ${targetX},${midY + sign1Y * r}`,
118
+ `L${targetX},${targetY}`
119
+ ].join(" ");
120
+ }
121
+ }
122
+ export function getEdgePath(type, params) {
123
+ switch (type) {
124
+ case "bezier":
125
+ case "default":
126
+ return getBezierPath(params);
127
+ case "straight":
128
+ return getStraightPath(params);
129
+ case "step":
130
+ return getStepPath(params);
131
+ case "smoothstep":
132
+ return getSmoothStepPath(params);
133
+ default:
134
+ return getBezierPath(params);
135
+ }
136
+ }
137
+ export function getEdgeCenter(params) {
138
+ const { sourceX, sourceY, targetX, targetY, type = "bezier" } = params;
139
+ if (type === "bezier" || type === "default") {
140
+ const curvature = params.curvature ?? 0.25;
141
+ const srcDir = getDir(params.sourcePosition);
142
+ const tgtDir = getDir(params.targetPosition);
143
+ const dx = Math.abs(targetX - sourceX);
144
+ const dy = Math.abs(targetY - sourceY);
145
+ const dist = Math.sqrt(dx * dx + dy * dy);
146
+ const offset = Math.min(Math.max(dist * curvature, 20), dist / 2);
147
+ const c1x = sourceX + srcDir.x * offset;
148
+ const c1y = sourceY + srcDir.y * offset;
149
+ const c2x = targetX + tgtDir.x * offset;
150
+ const c2y = targetY + tgtDir.y * offset;
151
+ return {
152
+ x: 0.125 * sourceX + 0.375 * c1x + 0.375 * c2x + 0.125 * targetX,
153
+ y: 0.125 * sourceY + 0.375 * c1y + 0.375 * c2y + 0.125 * targetY,
154
+ ox: (targetX - sourceX) / 2,
155
+ oy: (targetY - sourceY) / 2
156
+ };
157
+ }
158
+ return {
159
+ x: (sourceX + targetX) / 2,
160
+ y: (sourceY + targetY) / 2,
161
+ ox: (targetX - sourceX) / 2,
162
+ oy: (targetY - sourceY) / 2
163
+ };
164
+ }
165
+ export function shortenEndpoint(x, y, fromX, fromY, offset) {
166
+ const dx = x - fromX;
167
+ const dy = y - fromY;
168
+ const dist = Math.sqrt(dx * dx + dy * dy);
169
+ if (dist < offset * 2) return { x, y };
170
+ const factor = offset / dist;
171
+ return { x: x - dx * factor, y: y - dy * factor };
172
+ }