@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,328 @@
1
+ <template>
2
+ <div class="yh-flow-nodes">
3
+ <div
4
+ v-for="node in visibleNodes"
5
+ :key="node.id"
6
+ :id="`node-${node.id}`"
7
+ class="yh-flow-node"
8
+ :class="{
9
+ 'is-selected': node.selected,
10
+ 'is-dragging': node.dragging,
11
+ 'is-hidden': node.hidden,
12
+ [`type-${node.type}`]: true
13
+ }"
14
+ :style="getNodeStyle(node)"
15
+ @mousedown="handleNodeMouseDown($event, node)"
16
+ @click="handleNodeClick($event, node)"
17
+ @dblclick="handleNodeDblClick($event, node)"
18
+ @contextmenu="handleNodeContextMenu($event, node)"
19
+ >
20
+ <!-- Handle (连接点) -->
21
+ <template v-if="props.connectable !== false && node.connectable !== false">
22
+ <!-- Source handles -->
23
+ <div
24
+ v-for="handle in getHandles(node, 'source')"
25
+ :key="`handle-source-${handle.id || handle.position}`"
26
+ class="yh-flow-handle is-source"
27
+ :class="`position-${handle.position}`"
28
+ :data-handle-id="handle.id"
29
+ :data-handle-type="'source'"
30
+ @mousedown.stop="handleConnectStart($event, node, handle)"
31
+ ></div>
32
+ <!-- Target handles -->
33
+ <div
34
+ v-for="handle in getHandles(node, 'target')"
35
+ :key="`handle-target-${handle.id || handle.position}`"
36
+ class="yh-flow-handle is-target"
37
+ :class="`position-${handle.position}`"
38
+ :data-handle-id="handle.id"
39
+ :data-handle-type="'target'"
40
+ @mousedown.stop="handleConnectStart($event, node, handle)"
41
+ ></div>
42
+ </template>
43
+ <!-- 节点内容 -->
44
+ <div class="yh-flow-node__content">
45
+ <slot name="node" :node="node">
46
+ <!-- Automatic Custom Node Component -->
47
+ <component
48
+ v-if="getComponent(node.type)"
49
+ :is="getComponent(node.type)"
50
+ v-bind="getComponentProps(node)"
51
+ :node="node"
52
+ />
53
+ <div v-else class="yh-flow-node__header" :style="{
54
+ color: node.labelColor
55
+ }">
56
+ {{ node.data?.label || node.id }}
57
+ </div>
58
+ </slot>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </template>
63
+
64
+ <script setup>
65
+ import { computed, ref } from "vue";
66
+ import { getCustomNodeTemplate, getCustomNode } from "../utils/custom-types";
67
+ import DiamondNode from "../components/nodes/DiamondNode.vue";
68
+ import DatabaseNode from "../components/nodes/DatabaseNode.vue";
69
+ const props = defineProps({
70
+ nodes: { type: Array, required: true },
71
+ nodeTypes: { type: Object, required: false, default: () => ({}) },
72
+ transform: { type: Object, required: true },
73
+ draggable: { type: Boolean, required: false, default: true },
74
+ connectable: { type: Boolean, required: false, default: true },
75
+ readonly: { type: Boolean, required: false, default: false }
76
+ });
77
+ const emit = defineEmits(["node-click", "node-dblclick", "node-contextmenu", "node-drag-start", "node-drag", "node-drag-end", "connect-start", "node-select-toggle"]);
78
+ const getComponent = (type) => {
79
+ if (type === "diamond") return DiamondNode;
80
+ if (type === "database") return DatabaseNode;
81
+ if (props.nodeTypes && props.nodeTypes[type]) {
82
+ return props.nodeTypes[type];
83
+ }
84
+ return getCustomNodeTemplate(type)?.component || getCustomNode(type)?.component;
85
+ };
86
+ const visibleNodes = computed(() => {
87
+ return props.nodes.filter((n) => !n.hidden);
88
+ });
89
+ const getNodeStyle = (node) => {
90
+ const width = node.width || 150;
91
+ const height = node.height || 40;
92
+ let zIndex = node.zIndex || 10;
93
+ if (node.type === "group") {
94
+ zIndex = node.selected ? 2 : 1;
95
+ } else {
96
+ zIndex = node.selected ? 100 : Math.max(10, zIndex);
97
+ }
98
+ return {
99
+ transform: `translate(${node.position.x}px, ${node.position.y}px)`,
100
+ width: `${width}px`,
101
+ height: `${height}px`,
102
+ zIndex,
103
+ "--flow-node-label-color": node.labelColor,
104
+ "--flow-node-description-color": node.descriptionColor,
105
+ ...node.style
106
+ };
107
+ };
108
+ const getComponentProps = (node) => {
109
+ const {
110
+ id,
111
+ type,
112
+ data,
113
+ position,
114
+ width,
115
+ height,
116
+ selected,
117
+ dragging,
118
+ connectable,
119
+ zIndex,
120
+ style,
121
+ labelColor,
122
+ descriptionColor
123
+ } = node;
124
+ return {
125
+ id,
126
+ type,
127
+ data,
128
+ position,
129
+ width,
130
+ height,
131
+ selected,
132
+ dragging,
133
+ connectable,
134
+ zIndex,
135
+ style,
136
+ labelColor,
137
+ descriptionColor
138
+ };
139
+ };
140
+ const getHandles = (node, type) => {
141
+ if (node.handleBounds) {
142
+ const handles = [];
143
+ if (node.handleBounds.top) handles.push(...node.handleBounds.top);
144
+ if (node.handleBounds.right) handles.push(...node.handleBounds.right);
145
+ if (node.handleBounds.bottom) handles.push(...node.handleBounds.bottom);
146
+ if (node.handleBounds.left) handles.push(...node.handleBounds.left);
147
+ return handles.filter((h) => h.type === type);
148
+ }
149
+ if (node.type === "group") {
150
+ return [];
151
+ }
152
+ if (node.type === "input") {
153
+ return type === "source" ? [{ type: "source", position: "right" }] : [];
154
+ }
155
+ if (node.type === "output") {
156
+ return type === "target" ? [{ type: "target", position: "left" }] : [];
157
+ }
158
+ if (node.type === "bpmn-start") {
159
+ return type === "source" ? [{ type: "source", position: "right" }] : [];
160
+ }
161
+ if (node.type === "bpmn-end") {
162
+ return type === "target" ? [{ type: "target", position: "left" }] : [];
163
+ }
164
+ if (node.type === "bpmn-task" || node.type === "bpmn-service-task" || node.type === "bpmn-user-task") {
165
+ if (type === "source") return [{ type: "source", position: "right" }];
166
+ return [{ type: "target", position: "left" }];
167
+ }
168
+ if (node.type === "bpmn-exclusive-gateway" || node.type === "bpmn-parallel-gateway" || node.type === "bpmn-inclusive-gateway") {
169
+ if (type === "source") {
170
+ return [
171
+ { type: "source", position: "right" },
172
+ { type: "source", position: "bottom" }
173
+ ];
174
+ }
175
+ return [{ type: "target", position: "left" }];
176
+ }
177
+ if (node.type === "ai-start") {
178
+ return type === "source" ? [{ type: "source", position: "right" }] : [];
179
+ }
180
+ if (node.type === "ai-end") {
181
+ return type === "target" ? [{ type: "target", position: "left" }] : [];
182
+ }
183
+ if (node.type === "ai-llm" || node.type === "ai-prompt" || node.type === "ai-agent" || node.type === "ai-tool" || node.type === "ai-memory") {
184
+ if (type === "source") return [{ type: "source", position: "right" }];
185
+ return [{ type: "target", position: "left" }];
186
+ }
187
+ if (node.type === "ai-condition") {
188
+ if (type === "source") {
189
+ return [
190
+ { type: "source", position: "right" },
191
+ { type: "source", position: "bottom" }
192
+ ];
193
+ }
194
+ return [{ type: "target", position: "left" }];
195
+ }
196
+ if (type === "source") {
197
+ return [
198
+ { type: "source", position: "right" },
199
+ { type: "source", position: "bottom" }
200
+ ];
201
+ } else {
202
+ return [
203
+ { type: "target", position: "left" },
204
+ { type: "target", position: "top" }
205
+ ];
206
+ }
207
+ };
208
+ const draggingNode = ref(null);
209
+ const dragStartPos = ref({ x: 0, y: 0 });
210
+ const nodeStartPos = ref({ x: 0, y: 0 });
211
+ const draggingNodes = ref([]);
212
+ const nodesStartPositions = ref(/* @__PURE__ */ new Map());
213
+ const DRAG_THRESHOLD = 3;
214
+ const hasDragged = ref(false);
215
+ const pendingClickNode = ref(null);
216
+ const pendingClickEvent = ref(null);
217
+ const handleNodeMouseDown = (event, node) => {
218
+ if (props.readonly || !props.draggable || node.draggable === false) return;
219
+ const target = event.target;
220
+ if (target.closest(".yh-flow-handle") || target.closest(".resizer-handle") || target.closest(".yh-flow-node-toolbar")) {
221
+ return;
222
+ }
223
+ const selection = window.getSelection();
224
+ if (selection) selection.removeAllRanges();
225
+ pendingClickNode.value = node;
226
+ pendingClickEvent.value = event;
227
+ hasDragged.value = false;
228
+ const wasSelected = node.selected;
229
+ const draggedIds = /* @__PURE__ */ new Set();
230
+ const addNodeAndChildren = (id) => {
231
+ if (draggedIds.has(id)) return;
232
+ draggedIds.add(id);
233
+ props.nodes.forEach((n) => {
234
+ if (n.parentId === id) addNodeAndChildren(n.id);
235
+ });
236
+ };
237
+ const isMultiSelection = event.shiftKey || event.metaKey || event.ctrlKey;
238
+ const otherSelectedNodes = props.nodes.filter((n) => n.selected && n.id !== node.id);
239
+ let nodesToDrag = [node.id];
240
+ if (isMultiSelection || wasSelected) {
241
+ if (otherSelectedNodes.length > 0) {
242
+ nodesToDrag = [node.id, ...otherSelectedNodes.map((n) => n.id)];
243
+ }
244
+ }
245
+ nodesToDrag.forEach(addNodeAndChildren);
246
+ draggingNodes.value = Array.from(draggedIds);
247
+ nodesStartPositions.value = /* @__PURE__ */ new Map();
248
+ draggingNodes.value.forEach((nodeId) => {
249
+ const n = props.nodes.find((nd) => nd.id === nodeId);
250
+ if (n) {
251
+ nodesStartPositions.value.set(nodeId, { ...n.position });
252
+ }
253
+ });
254
+ if (draggingNodes.value.length === 1) {
255
+ draggingNode.value = node.id;
256
+ nodeStartPos.value = { ...node.position };
257
+ } else {
258
+ draggingNode.value = null;
259
+ }
260
+ dragStartPos.value = { x: event.clientX, y: event.clientY };
261
+ document.addEventListener("mousemove", handleMouseMove);
262
+ document.addEventListener("mouseup", handleMouseUp);
263
+ };
264
+ const handleMouseMove = (event) => {
265
+ if (draggingNodes.value.length === 0) return;
266
+ const rawDx = event.clientX - dragStartPos.value.x;
267
+ const rawDy = event.clientY - dragStartPos.value.y;
268
+ if (!hasDragged.value && Math.abs(rawDx) < DRAG_THRESHOLD && Math.abs(rawDy) < DRAG_THRESHOLD)
269
+ return;
270
+ if (!hasDragged.value) {
271
+ hasDragged.value = true;
272
+ const mainNode = pendingClickNode.value;
273
+ if (mainNode) emit("node-drag-start", event, mainNode);
274
+ }
275
+ const dx = (event.clientX - dragStartPos.value.x) / props.transform.zoom;
276
+ const dy = (event.clientY - dragStartPos.value.y) / props.transform.zoom;
277
+ draggingNodes.value.forEach((nodeId) => {
278
+ const startPos = nodesStartPositions.value.get(nodeId);
279
+ if (startPos) {
280
+ const newPosition = {
281
+ x: startPos.x + dx,
282
+ y: startPos.y + dy
283
+ };
284
+ const node = props.nodes.find((n) => n.id === nodeId);
285
+ if (node) {
286
+ emit("node-drag", event, node, newPosition);
287
+ }
288
+ }
289
+ });
290
+ };
291
+ const handleMouseUp = (event) => {
292
+ if (draggingNodes.value.length > 0) {
293
+ if (hasDragged.value) {
294
+ draggingNodes.value.forEach((nodeId) => {
295
+ const node = props.nodes.find((n) => n.id === nodeId);
296
+ if (node) {
297
+ emit("node-drag-end", event, node);
298
+ }
299
+ });
300
+ }
301
+ draggingNodes.value = [];
302
+ nodesStartPositions.value = /* @__PURE__ */ new Map();
303
+ }
304
+ if (!hasDragged.value && pendingClickNode.value) {
305
+ emit("node-click", event, pendingClickNode.value);
306
+ }
307
+ draggingNode.value = null;
308
+ pendingClickNode.value = null;
309
+ pendingClickEvent.value = null;
310
+ document.removeEventListener("mousemove", handleMouseMove);
311
+ document.removeEventListener("mouseup", handleMouseUp);
312
+ };
313
+ const handleNodeClick = (_event, _node) => {
314
+ };
315
+ const handleNodeDblClick = (event, node) => {
316
+ emit("node-dblclick", event, node);
317
+ };
318
+ const handleNodeContextMenu = (event, node) => {
319
+ emit("node-contextmenu", event, node);
320
+ };
321
+ const handleConnectStart = (event, node, handle) => {
322
+ emit("connect-start", event, node.id, handle.id || handle.position || "", handle.type);
323
+ };
324
+ </script>
325
+
326
+ <style scoped>
327
+ .yh-flow-nodes{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.yh-flow-node{background:var(--flow-node-background,#fff);border:1px solid var(--flow-node-border,#1a192b);border-radius:var(--flow-node-border-radius,3px);box-shadow:var(--flow-node-shadow,none);box-sizing:border-box;cursor:pointer;overflow:visible;pointer-events:auto;position:absolute;transition:box-shadow .2s,border-color .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.yh-flow-node:hover{box-shadow:0 4px 12px rgba(0,0,0,.05)}.yh-flow-node.is-selected{border-color:var(--flow-node-selected-border,#3b82f6);box-shadow:var(--flow-node-selected-shadow,0 0 0 1px #3b82f6)}.yh-flow-node.is-dragging{cursor:grabbing;opacity:.8}.yh-flow-node.is-hidden{display:none}.yh-flow-node.type-group{background:rgba(248,250,252,.5);border:1px dashed #9ca3af;box-shadow:none}.yh-flow-node.type-group.is-selected{background:rgba(248,250,252,.7);border:1px solid #3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,.2)}.yh-flow-node.type-group:hover{box-shadow:0 0 0 2px rgba(0,0,0,.05)}.yh-flow-node.type-database,.yh-flow-node.type-diamond{background:transparent;border:none;border-radius:0;box-shadow:none}.yh-flow-node.type-database.is-selected,.yh-flow-node.type-diamond.is-selected{border:none;box-shadow:none}.yh-flow-node.type-database:hover,.yh-flow-node.type-diamond:hover{box-shadow:none}.yh-flow-node.type-group .yh-flow-node__content{padding:8px 12px}.yh-flow-node.type-group .yh-flow-node__header{color:#6b7280;font-size:13px}.yh-flow-node__content{height:100%;padding:0}.yh-flow-node__content,.yh-flow-node__header{align-items:center;box-sizing:border-box;display:flex;justify-content:center;width:100%}.yh-flow-node__header{color:var(--flow-node-label-color,#222);font-size:var(--flow-node-label-font-size,12px);font-weight:var(--flow-node-label-font-weight,500);padding:10px;text-align:center}.yh-flow-handle{background:var(--flow-handle-background,#1a192b);border:1px solid var(--flow-handle-border,#fff);border-radius:var(--flow-handle-border-radius,50%);box-sizing:border-box;cursor:crosshair;height:var(--flow-handle-size,6px);position:absolute;transition:background-color .2s,border-color .2s,transform .2s;width:var(--flow-handle-size,6px);z-index:10}.yh-flow-handle:hover,.yh-flow-node.is-selected .yh-flow-handle{background:var(--flow-handle-hover-background,#3b82f6);border-color:var(--flow-handle-border,#fff)}.yh-flow-handle.is-source.position-right,.yh-flow-handle.is-target.position-right{right:-3px;top:50%;transform:translateY(-50%)}.yh-flow-handle.is-source.position-right:hover,.yh-flow-handle.is-target.position-right:hover,.yh-flow-node.is-selected .yh-flow-handle.position-right{transform:translateY(-50%) scale(1.3)}.yh-flow-handle.is-source.position-left,.yh-flow-handle.is-target.position-left{left:-3px;top:50%;transform:translateY(-50%)}.yh-flow-handle.is-source.position-left:hover,.yh-flow-handle.is-target.position-left:hover,.yh-flow-node.is-selected .yh-flow-handle.position-left{transform:translateY(-50%) scale(1.3)}.yh-flow-handle.is-source.position-top,.yh-flow-handle.is-target.position-top{left:50%;top:-3px;transform:translateX(-50%)}.yh-flow-handle.is-source.position-top:hover,.yh-flow-handle.is-target.position-top:hover,.yh-flow-node.is-selected .yh-flow-handle.position-top{transform:translateX(-50%) scale(1.3)}.yh-flow-handle.is-source.position-bottom,.yh-flow-handle.is-target.position-bottom{bottom:-3px;left:50%;transform:translateX(-50%)}.yh-flow-handle.is-source.position-bottom:hover,.yh-flow-handle.is-target.position-bottom:hover,.yh-flow-node.is-selected .yh-flow-handle.position-bottom{transform:translateX(-50%) scale(1.3)}
328
+ </style>
@@ -0,0 +1,56 @@
1
+ import type { Node, HandleType, NodeTypes } from '../types';
2
+ type __VLS_Props = {
3
+ nodes: Node[];
4
+ nodeTypes?: NodeTypes;
5
+ transform: {
6
+ x: number;
7
+ y: number;
8
+ zoom: number;
9
+ };
10
+ draggable?: boolean;
11
+ connectable?: boolean;
12
+ readonly?: boolean;
13
+ };
14
+ declare var __VLS_1: {
15
+ node: any;
16
+ };
17
+ type __VLS_Slots = {} & {
18
+ node?: (props: typeof __VLS_1) => any;
19
+ };
20
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
21
+ "node-click": (event: MouseEvent, node: Node<import("../types").NodeData>) => any;
22
+ "node-dblclick": (event: MouseEvent, node: Node<import("../types").NodeData>) => any;
23
+ "node-contextmenu": (event: MouseEvent, node: Node<import("../types").NodeData>) => any;
24
+ "node-drag-start": (event: MouseEvent, node: Node<import("../types").NodeData>) => any;
25
+ "node-drag": (event: MouseEvent, node: Node<import("../types").NodeData>, position: {
26
+ x: number;
27
+ y: number;
28
+ }) => any;
29
+ "node-drag-end": (event: MouseEvent, node: Node<import("../types").NodeData>) => any;
30
+ "connect-start": (event: MouseEvent, nodeId: string, handleId: string, handleType: HandleType) => any;
31
+ "node-select-toggle": (nodeId: string) => any;
32
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
33
+ "onNode-click"?: ((event: MouseEvent, node: Node<import("../types").NodeData>) => any) | undefined;
34
+ "onNode-dblclick"?: ((event: MouseEvent, node: Node<import("../types").NodeData>) => any) | undefined;
35
+ "onNode-contextmenu"?: ((event: MouseEvent, node: Node<import("../types").NodeData>) => any) | undefined;
36
+ "onNode-drag-start"?: ((event: MouseEvent, node: Node<import("../types").NodeData>) => any) | undefined;
37
+ "onNode-drag"?: ((event: MouseEvent, node: Node<import("../types").NodeData>, position: {
38
+ x: number;
39
+ y: number;
40
+ }) => any) | undefined;
41
+ "onNode-drag-end"?: ((event: MouseEvent, node: Node<import("../types").NodeData>) => any) | undefined;
42
+ "onConnect-start"?: ((event: MouseEvent, nodeId: string, handleId: string, handleType: HandleType) => any) | undefined;
43
+ "onNode-select-toggle"?: ((nodeId: string) => any) | undefined;
44
+ }>, {
45
+ draggable: boolean;
46
+ connectable: boolean;
47
+ nodeTypes: NodeTypes;
48
+ readonly: boolean;
49
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
50
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
51
+ export default _default;
52
+ type __VLS_WithSlots<T, S> = T & {
53
+ new (): {
54
+ $slots: S;
55
+ };
56
+ };
@@ -0,0 +1,11 @@
1
+ import type { SelectionRect } from '../types';
2
+ type __VLS_Props = {
3
+ selectionRect: SelectionRect | null;
4
+ transform: {
5
+ x: number;
6
+ y: number;
7
+ zoom: number;
8
+ };
9
+ };
10
+ 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>;
11
+ export default _default;
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <div v-if="selectionRect" class="yh-flow-selection-box" :style="selectionBoxStyle" />
3
+ </template>
4
+
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ const props = defineProps({
8
+ selectionRect: { type: [Object, null], required: true },
9
+ transform: { type: Object, required: true }
10
+ });
11
+ const selectionBoxStyle = computed(() => {
12
+ if (!props.selectionRect) return {};
13
+ const x = props.selectionRect.x * props.transform.zoom + props.transform.x;
14
+ const y = props.selectionRect.y * props.transform.zoom + props.transform.y;
15
+ const width = props.selectionRect.width * props.transform.zoom;
16
+ const height = props.selectionRect.height * props.transform.zoom;
17
+ return {
18
+ left: `${x}px`,
19
+ top: `${y}px`,
20
+ width: `${width}px`,
21
+ height: `${height}px`
22
+ };
23
+ });
24
+ </script>
25
+
26
+ <style scoped>
27
+ .yh-flow-selection-box{background:var(--flow-selection-box-background,rgba(64,158,255,.1));border:1px solid var(--flow-selection-box-border,#409eff);pointer-events:none;position:absolute;z-index:1000}
28
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { SelectionRect } from '../types';
2
+ type __VLS_Props = {
3
+ selectionRect: SelectionRect | null;
4
+ transform: {
5
+ x: number;
6
+ y: number;
7
+ zoom: number;
8
+ };
9
+ };
10
+ 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>;
11
+ export default _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isEdge = isEdge;
7
+ exports.isEdgeType = isEdgeType;
8
+ function isEdge(value) {
9
+ return !!value && typeof value === "object" && "id" in value && "source" in value && "target" in value;
10
+ }
11
+ function isEdgeType(type) {
12
+ return ["smoothstep", "step", "bezier", "straight", "default"].includes(type);
13
+ }
@@ -0,0 +1,65 @@
1
+ import type { NodeStyle } from './node';
2
+ export type EdgeType = string | 'smoothstep' | 'step' | 'bezier' | 'straight' | 'default';
3
+ export interface Connection {
4
+ source: string;
5
+ target: string;
6
+ sourceHandle?: string | null;
7
+ targetHandle?: string | null;
8
+ }
9
+ export interface EdgeStyle {
10
+ stroke?: string;
11
+ strokeWidth?: number;
12
+ strokeDasharray?: string;
13
+ [key: string]: string | number | undefined;
14
+ }
15
+ export interface EdgeData {
16
+ [key: string]: unknown;
17
+ label?: string;
18
+ type?: EdgeType;
19
+ animated?: boolean;
20
+ style?: EdgeStyle;
21
+ labelStyle?: NodeStyle;
22
+ labelShowBg?: boolean;
23
+ labelBgColor?: string;
24
+ labelBgPadding?: [number, number];
25
+ labelBgBorderRadius?: number;
26
+ }
27
+ export interface Edge<Data = EdgeData> {
28
+ id: string;
29
+ source: string;
30
+ target: string;
31
+ sourceHandle?: string | null;
32
+ targetHandle?: string | null;
33
+ type?: EdgeType;
34
+ animated?: boolean;
35
+ animationType?: 'dash' | 'dot' | 'taper';
36
+ label?: string;
37
+ labelStyle?: NodeStyle;
38
+ labelShowBg?: boolean;
39
+ labelBgColor?: string;
40
+ labelBgPadding?: [number, number];
41
+ labelBgBorderRadius?: number;
42
+ style?: EdgeStyle;
43
+ data?: Data;
44
+ zIndex?: number;
45
+ selectable?: boolean;
46
+ deletable?: boolean;
47
+ hidden?: boolean;
48
+ selected?: boolean;
49
+ }
50
+ export type EdgeChangeType = 'select' | 'remove' | 'style' | 'data' | 'selectMulti' | 'unselect';
51
+ export interface EdgeChange<T = Edge> {
52
+ type: EdgeChangeType;
53
+ id: string;
54
+ item: T;
55
+ selected?: boolean;
56
+ style?: EdgeStyle;
57
+ data?: EdgeData;
58
+ }
59
+ export type EdgeUserData = Partial<Omit<Edge, 'id' | 'source' | 'target'>> & {
60
+ id: string;
61
+ source: string;
62
+ target: string;
63
+ };
64
+ export declare function isEdge<T extends Edge>(value: unknown): value is T;
65
+ export declare function isEdgeType(type: string): type is EdgeType;
@@ -0,0 +1,6 @@
1
+ export function isEdge(value) {
2
+ return !!value && typeof value === "object" && "id" in value && "source" in value && "target" in value;
3
+ }
4
+ export function isEdgeType(type) {
5
+ return ["smoothstep", "step", "bezier", "straight", "default"].includes(type);
6
+ }
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,115 @@
1
+ import type { Node, Edge, ViewportTransform, Connection } from './index';
2
+ export type FlowEventCallback<T = unknown> = (event: T) => void;
3
+ export interface FlowEvents {
4
+ 'node:click': {
5
+ node: Node;
6
+ nativeEvent: MouseEvent;
7
+ };
8
+ 'node:dblclick': {
9
+ node: Node;
10
+ nativeEvent: MouseEvent;
11
+ };
12
+ 'node:dragstart': {
13
+ node: Node;
14
+ nativeEvent: MouseEvent;
15
+ };
16
+ 'node:drag': {
17
+ node: Node;
18
+ nativeEvent: MouseEvent;
19
+ position: {
20
+ x: number;
21
+ y: number;
22
+ };
23
+ };
24
+ 'node:dragend': {
25
+ node: Node;
26
+ nativeEvent: MouseEvent;
27
+ };
28
+ 'node:selected': {
29
+ node: Node;
30
+ };
31
+ 'node:unselected': {
32
+ node: Node;
33
+ };
34
+ 'node:contextmenu': {
35
+ node: Node;
36
+ nativeEvent: MouseEvent;
37
+ };
38
+ 'edge:click': {
39
+ edge: Edge;
40
+ nativeEvent: MouseEvent;
41
+ };
42
+ 'edge:dblclick': {
43
+ edge: Edge;
44
+ nativeEvent: MouseEvent;
45
+ };
46
+ 'edge:selected': {
47
+ edge: Edge;
48
+ };
49
+ 'edge:unselected': {
50
+ edge: Edge;
51
+ };
52
+ 'edge:contextmenu': {
53
+ edge: Edge;
54
+ nativeEvent: MouseEvent;
55
+ };
56
+ 'edge:connect': {
57
+ connection: Connection;
58
+ };
59
+ 'edge:update': {
60
+ edge: Edge;
61
+ connection: Connection;
62
+ };
63
+ 'viewport:change': {
64
+ transform: ViewportTransform;
65
+ };
66
+ 'selection:change': {
67
+ selectedNodes: Node[];
68
+ selectedEdges: Edge[];
69
+ };
70
+ 'selection:dragstart': {
71
+ nodes: Node[];
72
+ edges: Edge[];
73
+ };
74
+ 'selection:drag': {
75
+ nodes: Node[];
76
+ edges: Edge[];
77
+ };
78
+ 'selection:dragend': {
79
+ nodes: Node[];
80
+ edges: Edge[];
81
+ };
82
+ 'pane:click': {
83
+ nativeEvent: MouseEvent;
84
+ };
85
+ 'pane:dblclick': {
86
+ nativeEvent: MouseEvent;
87
+ };
88
+ 'pane:contextmenu': {
89
+ nativeEvent: MouseEvent;
90
+ };
91
+ 'connect:start': {
92
+ connection: Connection;
93
+ nativeEvent: MouseEvent;
94
+ };
95
+ 'connect:end': {
96
+ connection: Connection;
97
+ nativeEvent: MouseEvent;
98
+ };
99
+ 'connect:cancel': void;
100
+ }
101
+ export type FlowEventKey = keyof FlowEvents;
102
+ export type FlowEventHandler<T extends FlowEventKey> = FlowEvents[T] extends void ? () => void : (event: FlowEvents[T]) => void;
103
+ export interface EventBus {
104
+ on<K extends FlowEventKey>(event: K, handler: FlowEventHandler<K>): void;
105
+ off<K extends FlowEventKey>(event: K, handler: FlowEventHandler<K>): void;
106
+ emit<K extends FlowEventKey>(event: K, payload?: FlowEvents[K]): void;
107
+ once<K extends FlowEventKey>(event: K, handler: FlowEventHandler<K>): void;
108
+ clear(): void;
109
+ }
110
+ export interface SelectionRect {
111
+ x: number;
112
+ y: number;
113
+ width: number;
114
+ height: number;
115
+ }
File without changes
@@ -0,0 +1 @@
1
+ "use strict";