@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,86 @@
1
+ <template>
2
+ <div class="yh-flow-background" :style="backgroundStyle">
3
+ <canvas ref="canvasRef" :width="canvasWidth" :height="canvasHeight" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { ref, computed, onMounted, watch } from "vue";
9
+ import { useFlowContext } from "../core/FlowContext";
10
+ const props = defineProps({
11
+ type: { type: String, required: false },
12
+ color: { type: String, required: false },
13
+ gap: { type: Number, required: false }
14
+ });
15
+ const canvasRef = ref();
16
+ const canvasWidth = ref(2e3);
17
+ const canvasHeight = ref(2e3);
18
+ const flowInstance = useFlowContext();
19
+ const viewport = flowInstance.viewport;
20
+ const backgroundStyle = computed(() => ({
21
+ backgroundColor: "var(--flow-background-color, #f8f9fa)"
22
+ }));
23
+ const drawBackground = () => {
24
+ const canvas = canvasRef.value;
25
+ if (!canvas) return;
26
+ const ctx = canvas.getContext("2d");
27
+ if (!ctx) return;
28
+ const rootStyles = getComputedStyle(canvas);
29
+ const themeGridColor = rootStyles.getPropertyValue("--flow-grid-color").trim();
30
+ const type = props.type || "dots";
31
+ const color = props.color || themeGridColor || (type === "dots" ? "#b1b1b7" : "#e5e7eb");
32
+ const gap = props.gap || 20;
33
+ const zoom = viewport.value.zoom;
34
+ const offset = { x: viewport.value.x, y: viewport.value.y };
35
+ const container = flowInstance.$el;
36
+ if (container) {
37
+ const w = container.clientWidth || 2e3;
38
+ const h = container.clientHeight || 2e3;
39
+ if (canvas.width !== w || canvas.height !== h) {
40
+ canvas.width = w;
41
+ canvas.height = h;
42
+ canvasWidth.value = w;
43
+ canvasHeight.value = h;
44
+ }
45
+ }
46
+ const width = canvas.width;
47
+ const height = canvas.height;
48
+ ctx.clearRect(0, 0, width, height);
49
+ const scaledGap = gap * zoom;
50
+ const offsetX = offset.x % scaledGap;
51
+ const offsetY = offset.y % scaledGap;
52
+ if (type === "dots") {
53
+ ctx.fillStyle = color;
54
+ for (let x = offsetX; x < width; x += scaledGap) {
55
+ for (let y = offsetY; y < height; y += scaledGap) {
56
+ ctx.beginPath();
57
+ ctx.arc(x, y, 0.7 * zoom, 0, Math.PI * 2);
58
+ ctx.fill();
59
+ }
60
+ }
61
+ } else if (type === "grid") {
62
+ ctx.strokeStyle = color;
63
+ ctx.lineWidth = 0.5;
64
+ for (let x = offsetX; x < width; x += scaledGap) {
65
+ ctx.beginPath();
66
+ ctx.moveTo(x, 0);
67
+ ctx.lineTo(x, height);
68
+ ctx.stroke();
69
+ }
70
+ for (let y = offsetY; y < height; y += scaledGap) {
71
+ ctx.beginPath();
72
+ ctx.moveTo(0, y);
73
+ ctx.lineTo(width, y);
74
+ ctx.stroke();
75
+ }
76
+ }
77
+ };
78
+ onMounted(drawBackground);
79
+ watch([viewport, () => props.type, () => props.color, () => props.gap], drawBackground, {
80
+ deep: true
81
+ });
82
+ </script>
83
+
84
+ <style scoped>
85
+ .yh-flow-background{height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:0}.yh-flow-background canvas{display:block}
86
+ </style>
@@ -0,0 +1,7 @@
1
+ type __VLS_Props = {
2
+ type?: 'dots' | 'grid' | 'none';
3
+ color?: string;
4
+ gap?: number;
5
+ };
6
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ export default _default;
@@ -0,0 +1,13 @@
1
+ type __VLS_Props = {
2
+ position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
3
+ showZoom?: boolean;
4
+ showFitView?: boolean;
5
+ showInteractive?: boolean;
6
+ };
7
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
8
+ position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
9
+ showZoom: boolean;
10
+ showFitView: boolean;
11
+ showInteractive: boolean;
12
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
+ export default _default;
@@ -0,0 +1,82 @@
1
+ <template>
2
+ <div class="yh-flow-controls" :class="[position]">
3
+ <button v-if="showZoom" class="yh-flow-controls__btn" :title="t('flow.zoomIn')" @click="zoomIn">
4
+ <svg viewBox="0 0 24 24" width="16" height="16">
5
+ <path fill="currentColor" d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
6
+ </svg>
7
+ </button>
8
+ <button
9
+ v-if="showZoom"
10
+ class="yh-flow-controls__btn"
11
+ :title="t('flow.zoomOut')"
12
+ @click="zoomOut"
13
+ >
14
+ <svg viewBox="0 0 24 24" width="16" height="16">
15
+ <path fill="currentColor" d="M19 13H5v-2h14v2z" />
16
+ </svg>
17
+ </button>
18
+ <div v-if="showZoom && showFitView" class="yh-flow-controls__divider" />
19
+ <button
20
+ v-if="showFitView"
21
+ class="yh-flow-controls__btn"
22
+ :title="t('flow.fitView')"
23
+ @click="handleFitView"
24
+ >
25
+ <svg viewBox="0 0 24 24" width="16" height="16">
26
+ <path
27
+ fill="currentColor"
28
+ d="M15 3l2.3 2.3-2.89 2.87 1.42 1.42L18.7 6.7 21 9V3h-6zM3 9l2.3-2.3 2.87 2.89 1.42-1.42L6.7 5.3 9 3H3v6zm6 12l-2.3-2.3 2.89-2.87-1.42-1.42L5.3 17.3 3 15v6zm12-6l-2.3 2.3-2.87-2.89-1.42 1.42 2.89 2.87L15 21h6v-6z"
29
+ />
30
+ </svg>
31
+ </button>
32
+ <button
33
+ v-if="showInteractive"
34
+ class="yh-flow-controls__btn"
35
+ :title="t('flow.lock')"
36
+ @click="toggleLock"
37
+ :class="{
38
+ 'is-active': isLocked
39
+ }"
40
+ >
41
+ <svg v-if="isLocked" viewBox="0 0 24 24" width="16" height="16">
42
+ <path
43
+ fill="currentColor"
44
+ d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"
45
+ />
46
+ </svg>
47
+ <svg v-else viewBox="0 0 24 24" width="16" height="16">
48
+ <path
49
+ fill="currentColor"
50
+ d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 12H6V10h12v10z"
51
+ />
52
+ </svg>
53
+ </button>
54
+ </div>
55
+ </template>
56
+
57
+ <script setup>
58
+ import { computed } from "vue";
59
+ import { useLocale } from "@yh-ui/hooks";
60
+ import { useFlowContext } from "../core/FlowContext";
61
+ defineProps({
62
+ position: { type: String, required: false, default: "bottom-right" },
63
+ showZoom: { type: Boolean, required: false, default: true },
64
+ showFitView: { type: Boolean, required: false, default: true },
65
+ showInteractive: { type: Boolean, required: false, default: true }
66
+ });
67
+ const { t } = useLocale();
68
+ const flowInstance = useFlowContext();
69
+ const isLocked = computed(() => flowInstance.isLocked?.value || false);
70
+ const zoomIn = () => flowInstance.zoomIn();
71
+ const zoomOut = () => flowInstance.zoomOut();
72
+ const handleFitView = () => flowInstance.fitView();
73
+ const toggleLock = () => {
74
+ if (flowInstance.setInteractive) {
75
+ flowInstance.setInteractive(isLocked.value);
76
+ }
77
+ };
78
+ </script>
79
+
80
+ <style scoped>
81
+ .yh-flow-controls{align-items:center;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);background:hsla(0,0%,100%,.75);border:1px solid rgba(0,0,0,.08);border-radius:10px;box-shadow:0 8px 32px rgba(0,0,0,.08);display:flex;gap:4px;padding:5px;position:absolute;z-index:10}.yh-flow-controls.bottom-right{bottom:16px;right:16px}.yh-flow-controls.top-right{right:16px;top:16px}.yh-flow-controls.bottom-left{bottom:16px;left:16px}.yh-flow-controls.top-left{left:16px;top:16px}.yh-flow-controls__btn{align-items:center;background:transparent;border:none;border-radius:8px;color:#4b5563;cursor:pointer;display:flex;height:30px;justify-content:center;padding:0;transition:all .2s cubic-bezier(.4,0,.2,1);width:30px}.yh-flow-controls__btn:hover{background:rgba(0,0,0,.05);color:#111827;transform:translateY(-1px)}.yh-flow-controls__btn.is-active{background:#3b82f6;box-shadow:0 2px 8px rgba(59,130,246,.4);color:#fff}.yh-flow-controls__divider{background:rgba(0,0,0,.1);height:18px;margin:0 2px;width:1px}
82
+ </style>
@@ -0,0 +1,13 @@
1
+ type __VLS_Props = {
2
+ position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
3
+ showZoom?: boolean;
4
+ showFitView?: boolean;
5
+ showInteractive?: boolean;
6
+ };
7
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
8
+ position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
9
+ showZoom: boolean;
10
+ showFitView: boolean;
11
+ showInteractive: boolean;
12
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import type { Edge, Node, HandleType } from '../types';
2
+ type __VLS_Props = {
3
+ edges: Edge[];
4
+ nodes: Node[];
5
+ };
6
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
7
+ "edge-update-start": (event: MouseEvent, edge: Edge<import("../types").EdgeData>, handleType: HandleType) => any;
8
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
9
+ "onEdge-update-start"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>, handleType: HandleType) => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
@@ -0,0 +1,75 @@
1
+ <template>
2
+ <svg
3
+ class="yh-flow-edge-handles"
4
+ style="
5
+ overflow: visible;
6
+ position: absolute;
7
+ top: 0;
8
+ left: 0;
9
+ width: 100%;
10
+ height: 100%;
11
+ pointer-events: none;
12
+ z-index: 10;
13
+ "
14
+ >
15
+ <g v-for="ed in selectedUpdatableEdges" :key="ed.edge.id">
16
+ <!-- Source Handle with interaction overlay -->
17
+ <g
18
+ v-if="ed.edge.updatable === true || ed.edge.updatable === 'source'"
19
+ class="yh-flow-edge-handle-group"
20
+ style="cursor: crosshair; pointer-events: auto"
21
+ @mousedown.stop="emit('edge-update-start', $event, ed.edge, 'source')"
22
+ >
23
+ <circle :cx="ed.sourceX" :cy="ed.sourceY" r="10" fill="transparent" />
24
+ <circle :cx="ed.sourceX" :cy="ed.sourceY" r="4" fill="#3b82f6" />
25
+ </g>
26
+ <!-- Target Handle with interaction overlay -->
27
+ <g
28
+ v-if="ed.edge.updatable === true || ed.edge.updatable === 'target'"
29
+ class="yh-flow-edge-handle-group"
30
+ style="cursor: crosshair; pointer-events: auto"
31
+ @mousedown.stop="emit('edge-update-start', $event, ed.edge, 'target')"
32
+ >
33
+ <circle :cx="ed.targetX" :cy="ed.targetY" r="10" fill="transparent" />
34
+ <circle :cx="ed.targetX" :cy="ed.targetY" r="4" fill="#1a192b" />
35
+ </g>
36
+ </g>
37
+ </svg>
38
+ </template>
39
+
40
+ <script setup>
41
+ import { computed } from "vue";
42
+ import { getHandlePosition } from "../utils/edge";
43
+ const props = defineProps({
44
+ edges: { type: Array, required: true },
45
+ nodes: { type: Array, required: true }
46
+ });
47
+ const emit = defineEmits(["edge-update-start"]);
48
+ const nodeMap = computed(() => {
49
+ const m = /* @__PURE__ */ new Map();
50
+ props.nodes.forEach((n) => m.set(n.id, n));
51
+ return m;
52
+ });
53
+ const selectedUpdatableEdges = computed(() => {
54
+ const result = [];
55
+ for (const edge of props.edges) {
56
+ if (edge && edge.selected && edge.updatable) {
57
+ const sourceNode = nodeMap.value.get(edge.source);
58
+ const targetNode = nodeMap.value.get(edge.target);
59
+ if (!sourceNode || !targetNode) continue;
60
+ const sPosDesc = edge.sourceHandle || "right";
61
+ const tPosDesc = edge.targetHandle || "left";
62
+ const sPos = getHandlePosition(sourceNode, sPosDesc, edge.sourceHandle);
63
+ const tPos = getHandlePosition(targetNode, tPosDesc, edge.targetHandle);
64
+ result.push({
65
+ edge,
66
+ sourceX: sPos.x,
67
+ sourceY: sPos.y,
68
+ targetX: tPos.x,
69
+ targetY: tPos.y
70
+ });
71
+ }
72
+ }
73
+ return result;
74
+ });
75
+ </script>
@@ -0,0 +1,11 @@
1
+ import type { Edge, Node, HandleType } from '../types';
2
+ type __VLS_Props = {
3
+ edges: Edge[];
4
+ nodes: Node[];
5
+ };
6
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
7
+ "edge-update-start": (event: MouseEvent, edge: Edge<import("../types").EdgeData>, handleType: HandleType) => any;
8
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
9
+ "onEdge-update-start"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>, handleType: HandleType) => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
@@ -0,0 +1,39 @@
1
+ import type { Edge, Node, HandleType, EdgeTypes } from '../types';
2
+ type __VLS_Props = {
3
+ edges: Edge[];
4
+ nodes: Node[];
5
+ edgeTypes?: EdgeTypes;
6
+ transform?: {
7
+ x: number;
8
+ y: number;
9
+ zoom: number;
10
+ };
11
+ connectingEdge?: {
12
+ path: string;
13
+ tx: number;
14
+ ty: number;
15
+ } | null;
16
+ updatingEdgeId?: string | null;
17
+ };
18
+ declare var __VLS_1: any;
19
+ type __VLS_Slots = {} & {
20
+ edge?: (props: typeof __VLS_1) => any;
21
+ };
22
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
23
+ "edge-click": (event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any;
24
+ "edge-dblclick": (event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any;
25
+ "edge-contextmenu": (event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any;
26
+ "edge-update-start": (event: MouseEvent, edge: Edge<import("../types").EdgeData>, handleType: HandleType) => any;
27
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
28
+ "onEdge-click"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any) | undefined;
29
+ "onEdge-dblclick"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any) | undefined;
30
+ "onEdge-contextmenu"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any) | undefined;
31
+ "onEdge-update-start"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>, handleType: HandleType) => any) | undefined;
32
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
34
+ export default _default;
35
+ type __VLS_WithSlots<T, S> = T & {
36
+ new (): {
37
+ $slots: S;
38
+ };
39
+ };
@@ -0,0 +1,204 @@
1
+ <template>
2
+ <svg
3
+ class="yh-flow-edges"
4
+ style="
5
+ overflow: visible;
6
+ position: absolute;
7
+ top: 0;
8
+ left: 0;
9
+ width: 100%;
10
+ height: 100%;
11
+ pointer-events: none;
12
+ z-index: 5;
13
+ "
14
+ >
15
+ <defs>
16
+ <!-- Dynamic masks to create a true gap in the line behind the label -->
17
+ <mask
18
+ v-for="ed in edgeData"
19
+ :key="`mask-${ed.edge.id}`"
20
+ :id="`yh-mask-${ed.edge.id.replace(/\s/g, '')}`"
21
+ >
22
+ <rect x="-5000" y="-5000" width="10000" height="10000" fill="white" />
23
+ <rect
24
+ :x="ed.labelX - ed.labelWidth / 2 - 4"
25
+ :y="ed.labelY - 10"
26
+ :width="ed.labelWidth + 8"
27
+ height="20"
28
+ fill="black"
29
+ />
30
+ </mask>
31
+ </defs>
32
+ <g
33
+ v-for="ed in edgeData"
34
+ :key="ed.edge.id"
35
+ class="yh-flow-edge-group"
36
+ :class="{
37
+ 'is-selected': ed.edge.selected,
38
+ 'is-animated': ed.edge.animated
39
+ }"
40
+ :data-edge-id="ed.edge.id"
41
+ :style="{
42
+ color: ed.stroke,
43
+ pointerEvents: 'auto',
44
+ cursor: 'pointer',
45
+ '--stroke-width': ed.strokeWidth + 'px'
46
+ }"
47
+ @click.stop="emit('edge-click', $event, ed.edge)"
48
+ @dblclick.stop="emit('edge-dblclick', $event, ed.edge)"
49
+ @contextmenu.stop.prevent="emit('edge-contextmenu', $event, ed.edge)"
50
+ >
51
+ <slot name="edge" v-bind="ed">
52
+ <!-- Automatic Custom Edge Component -->
53
+ <component
54
+ v-if="getComponent(ed.edge.type || 'default')"
55
+ :is="getComponent(ed.edge.type || 'default')"
56
+ v-bind="ed"
57
+ />
58
+ <template v-else>
59
+ <!-- Interaction Path (Hitbox) -->
60
+ <path
61
+ :d="ed.path"
62
+ stroke="transparent"
63
+ stroke-width="20"
64
+ fill="none"
65
+ style="cursor: pointer; pointer-events: all"
66
+ />
67
+
68
+ <!-- Visible Path -->
69
+ <path
70
+ :d="ed.path"
71
+ :stroke="ed.stroke"
72
+ :stroke-width="ed.strokeWidth"
73
+ fill="none"
74
+ :class="{
75
+ 'yh-flow-edge-path': true,
76
+ 'is-animated': ed.edge.animated
77
+ }"
78
+ :mask="ed.edge.label ? `url(#yh-mask-${ed.edge.id.replace(/\s/g, '')})` : void 0"
79
+ :style="{
80
+ pointerEvents: 'none',
81
+ transition: 'stroke 0.2s, stroke-width 0.2s',
82
+ stroke: ed.stroke
83
+ }"
84
+ />
85
+
86
+ <!-- Default Label -->
87
+ <foreignObject
88
+ v-if="ed.edge.label"
89
+ :x="ed.labelX - 75"
90
+ :y="ed.labelY - 15"
91
+ width="150"
92
+ height="30"
93
+ style="pointer-events: auto"
94
+ >
95
+ <div
96
+ style="
97
+ width: 100%;
98
+ height: 100%;
99
+ display: flex;
100
+ align-items: center;
101
+ justify-content: center;
102
+ "
103
+ >
104
+ <div class="yh-flow-edge-label" :style="getLabelStyle(ed.edge)">{{
105
+ ed.edge.label
106
+ }}</div>
107
+ </div>
108
+ </foreignObject>
109
+ </template>
110
+ </slot>
111
+ </g>
112
+ </svg>
113
+ </template>
114
+
115
+ <script setup>
116
+ import { computed } from "vue";
117
+ import { getEdgePath, getEdgeCenter, getHandlePosition } from "../utils/edge";
118
+ import { getCustomEdge } from "../utils/custom-types";
119
+ const props = defineProps({
120
+ edges: { type: Array, required: true },
121
+ nodes: { type: Array, required: true },
122
+ edgeTypes: { type: Object, required: false },
123
+ transform: { type: Object, required: false },
124
+ connectingEdge: { type: [Object, null], required: false },
125
+ updatingEdgeId: { type: [String, null], required: false }
126
+ });
127
+ const getComponent = (type) => {
128
+ if (props.edgeTypes && props.edgeTypes[type]) {
129
+ return props.edgeTypes[type];
130
+ }
131
+ return getCustomEdge(type || "default")?.component;
132
+ };
133
+ const emit = defineEmits(["edge-click", "edge-dblclick", "edge-contextmenu", "edge-update-start"]);
134
+ const nodeMap = computed(() => {
135
+ const m = /* @__PURE__ */ new Map();
136
+ props.nodes.forEach((n) => m.set(n.id, n));
137
+ return m;
138
+ });
139
+ const getLabelStyle = (edge) => {
140
+ if (!edge) return {};
141
+ const styles = {
142
+ color: edge.labelColor || "var(--flow-edge-label-color, #000)",
143
+ ...edge.labelStyle
144
+ };
145
+ if (edge.labelShowBg === true) {
146
+ styles.backgroundColor = edge.labelBgColor || "var(--flow-edge-label-background, #f1f5f9)";
147
+ styles.padding = "0 6px";
148
+ styles.borderRadius = "2px";
149
+ styles.border = "1px solid var(--flow-edge-stroke, #ddd)";
150
+ } else {
151
+ styles.backgroundColor = "transparent";
152
+ }
153
+ return styles;
154
+ };
155
+ const edgeData = computed(() => {
156
+ const result = [];
157
+ for (const edge of props.edges) {
158
+ if (!edge || edge.hidden) continue;
159
+ if (props.updatingEdgeId && edge.id === props.updatingEdgeId) continue;
160
+ const sourceNode = nodeMap.value.get(edge.source);
161
+ const targetNode = nodeMap.value.get(edge.target);
162
+ if (!sourceNode || !targetNode) continue;
163
+ const sPosDesc = edge.sourceHandle || "right";
164
+ const tPosDesc = edge.targetHandle || "left";
165
+ const sPos = getHandlePosition(sourceNode, sPosDesc, edge.sourceHandle);
166
+ const tPos = getHandlePosition(targetNode, tPosDesc, edge.targetHandle);
167
+ const pathParams = {
168
+ sourceX: sPos.x,
169
+ sourceY: sPos.y,
170
+ targetX: tPos.x,
171
+ targetY: tPos.y,
172
+ sourcePosition: sPosDesc,
173
+ targetPosition: tPosDesc
174
+ };
175
+ const type = edge.type || "bezier";
176
+ const path = getEdgePath(type, pathParams);
177
+ const center = getEdgeCenter({ ...pathParams, type });
178
+ const labelText = edge.label || "";
179
+ const strippedLabel = labelText.replace(/<[^>]*>/g, "");
180
+ const labelWidth = Math.min(strippedLabel.length * 7, 120);
181
+ const stroke = edge.style?.stroke || (edge.selected ? "var(--flow-edge-selected-stroke, #3b82f6)" : "var(--flow-edge-stroke, #b1b1b7)");
182
+ const strokeWidth = edge.style?.strokeWidth ?? 1.5;
183
+ result.push({
184
+ edge,
185
+ style: edge.style,
186
+ path,
187
+ sourceX: sPos.x,
188
+ sourceY: sPos.y,
189
+ targetX: tPos.x,
190
+ targetY: tPos.y,
191
+ labelX: center.x,
192
+ labelY: center.y,
193
+ labelWidth,
194
+ stroke,
195
+ strokeWidth
196
+ });
197
+ }
198
+ return result;
199
+ });
200
+ </script>
201
+
202
+ <style scoped>
203
+ .yh-flow-edge-label{align-items:center;color:var(--flow-edge-label-color,#000);cursor:pointer;display:inline-flex;font-family:Courier New,Courier,monospace;font-size:11px;font-weight:400;height:100%;justify-content:center;max-width:120px;overflow:hidden;padding:0 4px;pointer-events:auto;text-overflow:ellipsis;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.yh-flow-edge-label:hover{color:var(--flow-edge-selected-stroke,#3b82f6);font-weight:600}.yh-flow-edge-group:hover .yh-flow-edge-path{stroke-width:2.5}.is-animated{animation:dash 1s linear infinite;stroke-dasharray:5}@keyframes dash{0%{stroke-dashoffset:10}to{stroke-dashoffset:0}}.yh-flow-edge-group .yh-flow-edge-path{transition:stroke .2s,stroke-width .2s,filter .2s}.yh-flow-edge-group.is-selected .yh-flow-edge-path{filter:drop-shadow(0 0 2px rgba(59,130,246,.4));stroke:var(--flow-edge-selected-stroke,#3b82f6);stroke-width:calc(var(--stroke-width, 1.5px)*1.5 + 1px)!important}
204
+ </style>
@@ -0,0 +1,39 @@
1
+ import type { Edge, Node, HandleType, EdgeTypes } from '../types';
2
+ type __VLS_Props = {
3
+ edges: Edge[];
4
+ nodes: Node[];
5
+ edgeTypes?: EdgeTypes;
6
+ transform?: {
7
+ x: number;
8
+ y: number;
9
+ zoom: number;
10
+ };
11
+ connectingEdge?: {
12
+ path: string;
13
+ tx: number;
14
+ ty: number;
15
+ } | null;
16
+ updatingEdgeId?: string | null;
17
+ };
18
+ declare var __VLS_1: any;
19
+ type __VLS_Slots = {} & {
20
+ edge?: (props: typeof __VLS_1) => any;
21
+ };
22
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
23
+ "edge-click": (event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any;
24
+ "edge-dblclick": (event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any;
25
+ "edge-contextmenu": (event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any;
26
+ "edge-update-start": (event: MouseEvent, edge: Edge<import("../types").EdgeData>, handleType: HandleType) => any;
27
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
28
+ "onEdge-click"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any) | undefined;
29
+ "onEdge-dblclick"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any) | undefined;
30
+ "onEdge-contextmenu"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>) => any) | undefined;
31
+ "onEdge-update-start"?: ((event: MouseEvent, edge: Edge<import("../types").EdgeData>, handleType: HandleType) => any) | undefined;
32
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
34
+ export default _default;
35
+ type __VLS_WithSlots<T, S> = T & {
36
+ new (): {
37
+ $slots: S;
38
+ };
39
+ };
@@ -0,0 +1,11 @@
1
+ import type { ViewportTransform } from '../types';
2
+ type __VLS_Props = {
3
+ type?: 'dots' | 'grid';
4
+ color?: string;
5
+ gap?: number;
6
+ };
7
+ declare function updateViewport(t: ViewportTransform): void;
8
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {
9
+ updateViewport: typeof updateViewport;
10
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ export default _default;