@grafloria/element 0.3.18 → 0.3.20

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 (1148) hide show
  1. package/esm/src/index.js +295 -0
  2. package/esm/src/lib/dashboard-kit/dashboard.js +590 -0
  3. package/esm/src/lib/dashboard-kit/grid-binder.js +1633 -0
  4. package/esm/src/lib/dashboard-kit/grid-mapping.js +164 -0
  5. package/esm/src/lib/dashboard-kit/index.js +8 -0
  6. package/esm/src/lib/dashboard-kit/styles.js +205 -0
  7. package/esm/src/lib/dashboard-kit/widgets.js +379 -0
  8. package/esm/src/lib/diagram-kit/card.js +199 -0
  9. package/esm/src/lib/diagram-kit/editing.js +448 -0
  10. package/esm/src/lib/diagram-kit/er.js +160 -0
  11. package/esm/src/lib/diagram-kit/handles.js +312 -0
  12. package/esm/src/lib/diagram-kit/index.js +15 -0
  13. package/esm/src/lib/diagram-kit/join-guidance.js +322 -0
  14. package/esm/src/lib/diagram-kit/rows.js +144 -0
  15. package/esm/src/lib/diagram-kit/styles.js +118 -0
  16. package/esm/src/lib/diagram-kit/uml.js +135 -0
  17. package/esm/src/lib/diagram-kit/update.js +244 -0
  18. package/esm/src/lib/grafloria-flow-element.js +266 -0
  19. package/esm/src/lib/grafloria.js +69 -0
  20. package/esm/src/lib/load.js +252 -0
  21. package/esm/src/lib/node-type-registry.js +42 -0
  22. package/esm/src/lib/stencil-kit/builders.js +18 -0
  23. package/esm/src/lib/stencil-kit/card-builders.js +105 -0
  24. package/esm/src/lib/stencil-kit/index.js +9 -0
  25. package/esm/src/lib/stencil-kit/palette.js +427 -0
  26. package/esm/src/lib/stencil-kit/shape-data.js +537 -0
  27. package/esm/src/lib/stencil-kit/styles.js +126 -0
  28. package/package.json +13 -4
  29. package/src/index.d.ts +2 -1
  30. package/src/index.js +11 -2
  31. package/src/lib/dashboard-kit/grid-binder.js +16 -15
  32. package/src/lib/dashboard-kit/styles.js +9 -3
  33. package/src/lib/diagram-kit/index.d.ts +1 -0
  34. package/src/lib/diagram-kit/index.js +11 -1
  35. package/src/lib/diagram-kit/join-guidance.d.ts +116 -0
  36. package/src/lib/diagram-kit/join-guidance.js +331 -0
  37. package/src/lib/stencil-kit/palette.js +60 -6
  38. package/src/lib/stencil-kit/shape-data.d.ts +3 -2
  39. package/src/lib/stencil-kit/shape-data.js +323 -31
  40. package/src/lib/stencil-kit/styles.js +15 -0
  41. package/src/libs/element/src/index.d.ts +92 -0
  42. package/src/libs/element/src/index.js +576 -0
  43. package/src/libs/element/src/lib/dashboard-kit/dashboard.d.ts +345 -0
  44. package/src/libs/element/src/lib/dashboard-kit/dashboard.js +594 -0
  45. package/src/libs/element/src/lib/dashboard-kit/grid-binder.d.ts +277 -0
  46. package/src/libs/element/src/lib/dashboard-kit/grid-binder.js +1636 -0
  47. package/src/libs/element/src/lib/dashboard-kit/grid-mapping.d.ts +141 -0
  48. package/src/libs/element/src/lib/dashboard-kit/grid-mapping.js +176 -0
  49. package/src/libs/element/src/lib/dashboard-kit/index.d.ts +5 -0
  50. package/src/libs/element/src/lib/dashboard-kit/index.js +33 -0
  51. package/src/libs/element/src/lib/dashboard-kit/styles.d.ts +25 -0
  52. package/src/libs/element/src/lib/dashboard-kit/styles.js +209 -0
  53. package/src/libs/element/src/lib/dashboard-kit/widgets.d.ts +112 -0
  54. package/src/libs/element/src/lib/dashboard-kit/widgets.js +389 -0
  55. package/src/libs/element/src/lib/diagram-kit/card.d.ts +75 -0
  56. package/src/libs/element/src/lib/diagram-kit/card.js +209 -0
  57. package/src/libs/element/src/lib/diagram-kit/editing.d.ts +58 -0
  58. package/src/libs/element/src/lib/diagram-kit/editing.js +453 -0
  59. package/src/libs/element/src/lib/diagram-kit/er.d.ts +73 -0
  60. package/src/libs/element/src/lib/diagram-kit/er.js +163 -0
  61. package/src/libs/element/src/lib/diagram-kit/handles.d.ts +181 -0
  62. package/src/libs/element/src/lib/diagram-kit/handles.js +325 -0
  63. package/src/libs/element/src/lib/diagram-kit/index.d.ts +10 -0
  64. package/src/libs/element/src/lib/diagram-kit/index.js +55 -0
  65. package/src/libs/element/src/lib/diagram-kit/join-guidance.d.ts +116 -0
  66. package/src/libs/element/src/lib/diagram-kit/join-guidance.js +331 -0
  67. package/src/libs/element/src/lib/diagram-kit/rows.d.ts +53 -0
  68. package/src/libs/element/src/lib/diagram-kit/rows.js +147 -0
  69. package/src/libs/element/src/lib/diagram-kit/styles.d.ts +18 -0
  70. package/src/libs/element/src/lib/diagram-kit/styles.js +122 -0
  71. package/src/libs/element/src/lib/diagram-kit/uml.d.ts +59 -0
  72. package/src/libs/element/src/lib/diagram-kit/uml.js +138 -0
  73. package/src/libs/element/src/lib/diagram-kit/update.d.ts +133 -0
  74. package/src/libs/element/src/lib/diagram-kit/update.js +251 -0
  75. package/src/libs/element/src/lib/grafloria-flow-element.d.ts +48 -0
  76. package/src/libs/element/src/lib/grafloria-flow-element.js +271 -0
  77. package/src/libs/element/src/lib/grafloria.d.ts +72 -0
  78. package/src/libs/element/src/lib/grafloria.js +74 -0
  79. package/src/libs/element/src/lib/load.d.ts +72 -0
  80. package/src/libs/element/src/lib/load.js +255 -0
  81. package/src/libs/element/src/lib/node-type-registry.d.ts +39 -0
  82. package/src/libs/element/src/lib/node-type-registry.js +50 -0
  83. package/src/libs/element/src/lib/stencil-kit/builders.d.ts +45 -0
  84. package/src/libs/element/src/lib/stencil-kit/builders.js +24 -0
  85. package/src/libs/element/src/lib/stencil-kit/card-builders.d.ts +2 -0
  86. package/src/libs/element/src/lib/stencil-kit/card-builders.js +108 -0
  87. package/src/libs/element/src/lib/stencil-kit/index.d.ts +7 -0
  88. package/src/libs/element/src/lib/stencil-kit/index.js +19 -0
  89. package/src/libs/element/src/lib/stencil-kit/palette.d.ts +93 -0
  90. package/src/libs/element/src/lib/stencil-kit/palette.js +430 -0
  91. package/src/libs/element/src/lib/stencil-kit/shape-data.d.ts +28 -0
  92. package/src/libs/element/src/lib/stencil-kit/shape-data.js +540 -0
  93. package/src/libs/element/src/lib/stencil-kit/styles.d.ts +2 -0
  94. package/src/libs/element/src/lib/stencil-kit/styles.js +129 -0
  95. package/src/libs/engine/src/adapters/component-adapter.interface.d.ts +302 -0
  96. package/src/libs/engine/src/adapters/component-adapter.interface.js +84 -0
  97. package/src/libs/engine/src/adapters/index.d.ts +7 -0
  98. package/src/libs/engine/src/adapters/index.js +11 -0
  99. package/src/libs/engine/src/clipboard/ClipboardManager.d.ts +81 -0
  100. package/src/libs/engine/src/clipboard/ClipboardManager.js +108 -0
  101. package/src/libs/engine/src/clipboard/index.d.ts +1 -0
  102. package/src/libs/engine/src/clipboard/index.js +6 -0
  103. package/src/libs/engine/src/collab/apply-op.d.ts +42 -0
  104. package/src/libs/engine/src/collab/apply-op.js +939 -0
  105. package/src/libs/engine/src/collab/capture.d.ts +147 -0
  106. package/src/libs/engine/src/collab/capture.js +510 -0
  107. package/src/libs/engine/src/collab/index.d.ts +12 -0
  108. package/src/libs/engine/src/collab/index.js +84 -0
  109. package/src/libs/engine/src/collab/integrity.d.ts +178 -0
  110. package/src/libs/engine/src/collab/integrity.js +438 -0
  111. package/src/libs/engine/src/collab/lww.d.ts +47 -0
  112. package/src/libs/engine/src/collab/lww.js +188 -0
  113. package/src/libs/engine/src/collab/op-log.d.ts +50 -0
  114. package/src/libs/engine/src/collab/op-log.js +167 -0
  115. package/src/libs/engine/src/collab/op.d.ts +120 -0
  116. package/src/libs/engine/src/collab/op.js +118 -0
  117. package/src/libs/engine/src/collab/replica.d.ts +188 -0
  118. package/src/libs/engine/src/collab/replica.js +526 -0
  119. package/src/libs/engine/src/collab/undo.d.ts +106 -0
  120. package/src/libs/engine/src/collab/undo.js +388 -0
  121. package/src/libs/engine/src/commands/Command.d.ts +66 -0
  122. package/src/libs/engine/src/commands/Command.js +64 -0
  123. package/src/libs/engine/src/commands/CommandManager.d.ts +161 -0
  124. package/src/libs/engine/src/commands/CommandManager.js +417 -0
  125. package/src/libs/engine/src/commands/basic/AddGroupCommand.d.ts +13 -0
  126. package/src/libs/engine/src/commands/basic/AddGroupCommand.js +50 -0
  127. package/src/libs/engine/src/commands/basic/AddLinkCommand.d.ts +13 -0
  128. package/src/libs/engine/src/commands/basic/AddLinkCommand.js +50 -0
  129. package/src/libs/engine/src/commands/basic/AddNodeCommand.d.ts +13 -0
  130. package/src/libs/engine/src/commands/basic/AddNodeCommand.js +65 -0
  131. package/src/libs/engine/src/commands/basic/AddToGroupCommand.d.ts +12 -0
  132. package/src/libs/engine/src/commands/basic/AddToGroupCommand.js +73 -0
  133. package/src/libs/engine/src/commands/basic/AlignCommands.d.ts +42 -0
  134. package/src/libs/engine/src/commands/basic/AlignCommands.js +138 -0
  135. package/src/libs/engine/src/commands/basic/CollapseGroupCommand.d.ts +14 -0
  136. package/src/libs/engine/src/commands/basic/CollapseGroupCommand.js +70 -0
  137. package/src/libs/engine/src/commands/basic/CopyCommand.d.ts +29 -0
  138. package/src/libs/engine/src/commands/basic/CopyCommand.js +131 -0
  139. package/src/libs/engine/src/commands/basic/CutCommand.d.ts +49 -0
  140. package/src/libs/engine/src/commands/basic/CutCommand.js +68 -0
  141. package/src/libs/engine/src/commands/basic/DeleteSelectionCommand.d.ts +58 -0
  142. package/src/libs/engine/src/commands/basic/DeleteSelectionCommand.js +309 -0
  143. package/src/libs/engine/src/commands/basic/DuplicateCommand.d.ts +31 -0
  144. package/src/libs/engine/src/commands/basic/DuplicateCommand.js +232 -0
  145. package/src/libs/engine/src/commands/basic/ExpandGroupCommand.d.ts +12 -0
  146. package/src/libs/engine/src/commands/basic/ExpandGroupCommand.js +69 -0
  147. package/src/libs/engine/src/commands/basic/MoveGroupCommand.d.ts +46 -0
  148. package/src/libs/engine/src/commands/basic/MoveGroupCommand.js +77 -0
  149. package/src/libs/engine/src/commands/basic/MoveNodeCommand.d.ts +30 -0
  150. package/src/libs/engine/src/commands/basic/MoveNodeCommand.js +87 -0
  151. package/src/libs/engine/src/commands/basic/NodeZOrderCommands.d.ts +39 -0
  152. package/src/libs/engine/src/commands/basic/NodeZOrderCommands.js +120 -0
  153. package/src/libs/engine/src/commands/basic/PasteCommand.d.ts +33 -0
  154. package/src/libs/engine/src/commands/basic/PasteCommand.js +228 -0
  155. package/src/libs/engine/src/commands/basic/PortCommands.d.ts +22 -0
  156. package/src/libs/engine/src/commands/basic/PortCommands.js +85 -0
  157. package/src/libs/engine/src/commands/basic/ReconnectLinkCommand.d.ts +15 -0
  158. package/src/libs/engine/src/commands/basic/ReconnectLinkCommand.js +59 -0
  159. package/src/libs/engine/src/commands/basic/RemoveFromGroupCommand.d.ts +12 -0
  160. package/src/libs/engine/src/commands/basic/RemoveFromGroupCommand.js +64 -0
  161. package/src/libs/engine/src/commands/basic/RemoveGroupCommand.d.ts +12 -0
  162. package/src/libs/engine/src/commands/basic/RemoveGroupCommand.js +56 -0
  163. package/src/libs/engine/src/commands/basic/RemoveLinkCommand.d.ts +12 -0
  164. package/src/libs/engine/src/commands/basic/RemoveLinkCommand.js +57 -0
  165. package/src/libs/engine/src/commands/basic/RemoveNodeCommand.d.ts +23 -0
  166. package/src/libs/engine/src/commands/basic/RemoveNodeCommand.js +108 -0
  167. package/src/libs/engine/src/commands/basic/ResizeNodeCommand.d.ts +16 -0
  168. package/src/libs/engine/src/commands/basic/ResizeNodeCommand.js +81 -0
  169. package/src/libs/engine/src/commands/basic/RotateNodeCommand.d.ts +37 -0
  170. package/src/libs/engine/src/commands/basic/RotateNodeCommand.js +88 -0
  171. package/src/libs/engine/src/commands/basic/SetFlexItemCommand.d.ts +14 -0
  172. package/src/libs/engine/src/commands/basic/SetFlexItemCommand.js +74 -0
  173. package/src/libs/engine/src/commands/basic/SetGridItemCommand.d.ts +14 -0
  174. package/src/libs/engine/src/commands/basic/SetGridItemCommand.js +74 -0
  175. package/src/libs/engine/src/commands/basic/SetLayoutCommand.d.ts +16 -0
  176. package/src/libs/engine/src/commands/basic/SetLayoutCommand.js +80 -0
  177. package/src/libs/engine/src/commands/basic/SetLinkDisplayLabelCommand.d.ts +28 -0
  178. package/src/libs/engine/src/commands/basic/SetLinkDisplayLabelCommand.js +83 -0
  179. package/src/libs/engine/src/commands/basic/SetLinkLabelCommand.d.ts +24 -0
  180. package/src/libs/engine/src/commands/basic/SetLinkLabelCommand.js +81 -0
  181. package/src/libs/engine/src/commands/basic/SetLinkLabelsCommand.d.ts +14 -0
  182. package/src/libs/engine/src/commands/basic/SetLinkLabelsCommand.js +75 -0
  183. package/src/libs/engine/src/commands/basic/SetLinkPathTypeCommand.d.ts +14 -0
  184. package/src/libs/engine/src/commands/basic/SetLinkPathTypeCommand.js +77 -0
  185. package/src/libs/engine/src/commands/basic/SetLinkPointsCommand.d.ts +32 -0
  186. package/src/libs/engine/src/commands/basic/SetLinkPointsCommand.js +87 -0
  187. package/src/libs/engine/src/commands/basic/SetNodeDataCommand.d.ts +14 -0
  188. package/src/libs/engine/src/commands/basic/SetNodeDataCommand.js +93 -0
  189. package/src/libs/engine/src/commands/basic/SetNodeLabelCommand.d.ts +26 -0
  190. package/src/libs/engine/src/commands/basic/SetNodeLabelCommand.js +81 -0
  191. package/src/libs/engine/src/commands/basic/SetNodeShapeConfigCommand.d.ts +14 -0
  192. package/src/libs/engine/src/commands/basic/SetNodeShapeConfigCommand.js +69 -0
  193. package/src/libs/engine/src/commands/basic/SetNodeStyleCommand.d.ts +15 -0
  194. package/src/libs/engine/src/commands/basic/SetNodeStyleCommand.js +88 -0
  195. package/src/libs/engine/src/commands/basic/SetParentCommand.d.ts +13 -0
  196. package/src/libs/engine/src/commands/basic/SetParentCommand.js +109 -0
  197. package/src/libs/engine/src/commands/basic/SetStrokePointsCommand.d.ts +34 -0
  198. package/src/libs/engine/src/commands/basic/SetStrokePointsCommand.js +86 -0
  199. package/src/libs/engine/src/commands/basic/StrokeLifecycleCommands.d.ts +31 -0
  200. package/src/libs/engine/src/commands/basic/StrokeLifecycleCommands.js +88 -0
  201. package/src/libs/engine/src/commands/basic/UpdateLinkStyleCommand.d.ts +15 -0
  202. package/src/libs/engine/src/commands/basic/UpdateLinkStyleCommand.js +72 -0
  203. package/src/libs/engine/src/commands/basic/index.d.ts +41 -0
  204. package/src/libs/engine/src/commands/basic/index.js +52 -0
  205. package/src/libs/engine/src/commands/basic/remapNodePortIds.d.ts +23 -0
  206. package/src/libs/engine/src/commands/basic/remapNodePortIds.js +46 -0
  207. package/src/libs/engine/src/commands/basic/resolveLinkNodeIds.d.ts +31 -0
  208. package/src/libs/engine/src/commands/basic/resolveLinkNodeIds.js +49 -0
  209. package/src/libs/engine/src/commands/composite/BatchCommand.d.ts +19 -0
  210. package/src/libs/engine/src/commands/composite/BatchCommand.js +61 -0
  211. package/src/libs/engine/src/commands/composite/MacroCommand.d.ts +35 -0
  212. package/src/libs/engine/src/commands/composite/MacroCommand.js +87 -0
  213. package/src/libs/engine/src/commands/composite/index.d.ts +2 -0
  214. package/src/libs/engine/src/commands/composite/index.js +7 -0
  215. package/src/libs/engine/src/commands/index.d.ts +4 -0
  216. package/src/libs/engine/src/commands/index.js +9 -0
  217. package/src/libs/engine/src/comments/comment-store.d.ts +238 -0
  218. package/src/libs/engine/src/comments/comment-store.js +538 -0
  219. package/src/libs/engine/src/comments/index.d.ts +4 -0
  220. package/src/libs/engine/src/comments/index.js +31 -0
  221. package/src/libs/engine/src/comments/mentions.d.ts +52 -0
  222. package/src/libs/engine/src/comments/mentions.js +94 -0
  223. package/src/libs/engine/src/comments/read-state.d.ts +37 -0
  224. package/src/libs/engine/src/comments/read-state.js +105 -0
  225. package/src/libs/engine/src/comments/types.d.ts +154 -0
  226. package/src/libs/engine/src/comments/types.js +107 -0
  227. package/src/libs/engine/src/config/InteractionConfig.d.ts +330 -0
  228. package/src/libs/engine/src/config/InteractionConfig.js +154 -0
  229. package/src/libs/engine/src/config/index.d.ts +1 -0
  230. package/src/libs/engine/src/config/index.js +6 -0
  231. package/src/libs/engine/src/dsl/DSL.d.ts +197 -0
  232. package/src/libs/engine/src/dsl/DSL.js +564 -0
  233. package/src/libs/engine/src/dsl/advanced/StyleParser.d.ts +75 -0
  234. package/src/libs/engine/src/dsl/advanced/StyleParser.js +166 -0
  235. package/src/libs/engine/src/dsl/advanced/TemplateParser.d.ts +88 -0
  236. package/src/libs/engine/src/dsl/advanced/TemplateParser.js +226 -0
  237. package/src/libs/engine/src/dsl/advanced/index.d.ts +9 -0
  238. package/src/libs/engine/src/dsl/advanced/index.js +13 -0
  239. package/src/libs/engine/src/dsl/detector/LayoutDetector.d.ts +80 -0
  240. package/src/libs/engine/src/dsl/detector/LayoutDetector.js +333 -0
  241. package/src/libs/engine/src/dsl/extended/BPMNGenerator.d.ts +38 -0
  242. package/src/libs/engine/src/dsl/extended/BPMNGenerator.js +90 -0
  243. package/src/libs/engine/src/dsl/extended/BPMNParser.d.ts +83 -0
  244. package/src/libs/engine/src/dsl/extended/BPMNParser.js +198 -0
  245. package/src/libs/engine/src/dsl/extended/ERDGenerator.d.ts +38 -0
  246. package/src/libs/engine/src/dsl/extended/ERDGenerator.js +126 -0
  247. package/src/libs/engine/src/dsl/extended/ERDParser.d.ts +81 -0
  248. package/src/libs/engine/src/dsl/extended/ERDParser.js +161 -0
  249. package/src/libs/engine/src/dsl/extended/ERDTransformer.d.ts +43 -0
  250. package/src/libs/engine/src/dsl/extended/ERDTransformer.js +105 -0
  251. package/src/libs/engine/src/dsl/extended/UMLGenerator.d.ts +42 -0
  252. package/src/libs/engine/src/dsl/extended/UMLGenerator.js +157 -0
  253. package/src/libs/engine/src/dsl/extended/UMLParser.d.ts +99 -0
  254. package/src/libs/engine/src/dsl/extended/UMLParser.js +200 -0
  255. package/src/libs/engine/src/dsl/extended/index.d.ts +13 -0
  256. package/src/libs/engine/src/dsl/extended/index.js +27 -0
  257. package/src/libs/engine/src/dsl/generator/DSLFormatter.d.ts +87 -0
  258. package/src/libs/engine/src/dsl/generator/DSLFormatter.js +261 -0
  259. package/src/libs/engine/src/dsl/generator/DSLGenerator.d.ts +96 -0
  260. package/src/libs/engine/src/dsl/generator/DSLGenerator.js +328 -0
  261. package/src/libs/engine/src/dsl/generator/DiagramAnalyzer.d.ts +111 -0
  262. package/src/libs/engine/src/dsl/generator/DiagramAnalyzer.js +361 -0
  263. package/src/libs/engine/src/dsl/index.d.ts +35 -0
  264. package/src/libs/engine/src/dsl/index.js +64 -0
  265. package/src/libs/engine/src/dsl/lexer/Lexer.d.ts +117 -0
  266. package/src/libs/engine/src/dsl/lexer/Lexer.js +521 -0
  267. package/src/libs/engine/src/dsl/mermaid/MermaidClass.d.ts +136 -0
  268. package/src/libs/engine/src/dsl/mermaid/MermaidClass.js +429 -0
  269. package/src/libs/engine/src/dsl/mermaid/MermaidER.d.ts +118 -0
  270. package/src/libs/engine/src/dsl/mermaid/MermaidER.js +338 -0
  271. package/src/libs/engine/src/dsl/mermaid/MermaidState.d.ts +89 -0
  272. package/src/libs/engine/src/dsl/mermaid/MermaidState.js +613 -0
  273. package/src/libs/engine/src/dsl/mermaid/index.d.ts +10 -0
  274. package/src/libs/engine/src/dsl/mermaid/index.js +33 -0
  275. package/src/libs/engine/src/dsl/mermaid/layout.d.ts +70 -0
  276. package/src/libs/engine/src/dsl/mermaid/layout.js +162 -0
  277. package/src/libs/engine/src/dsl/mermaid/lines.d.ts +25 -0
  278. package/src/libs/engine/src/dsl/mermaid/lines.js +74 -0
  279. package/src/libs/engine/src/dsl/parser/Parser.d.ts +131 -0
  280. package/src/libs/engine/src/dsl/parser/Parser.js +725 -0
  281. package/src/libs/engine/src/dsl/sync/BidirectionalSync.d.ts +154 -0
  282. package/src/libs/engine/src/dsl/sync/BidirectionalSync.js +389 -0
  283. package/src/libs/engine/src/dsl/sync/IntegratedSyncManager.d.ts +128 -0
  284. package/src/libs/engine/src/dsl/sync/IntegratedSyncManager.js +244 -0
  285. package/src/libs/engine/src/dsl/sync/LayoutApplicator.d.ts +140 -0
  286. package/src/libs/engine/src/dsl/sync/LayoutApplicator.js +271 -0
  287. package/src/libs/engine/src/dsl/sync/SyncStateManager.d.ts +145 -0
  288. package/src/libs/engine/src/dsl/sync/SyncStateManager.js +253 -0
  289. package/src/libs/engine/src/dsl/sync/index.d.ts +13 -0
  290. package/src/libs/engine/src/dsl/sync/index.js +21 -0
  291. package/src/libs/engine/src/dsl/transformer/ASTTransformer.d.ts +150 -0
  292. package/src/libs/engine/src/dsl/transformer/ASTTransformer.js +605 -0
  293. package/src/libs/engine/src/dsl/types/ASTNode.d.ts +159 -0
  294. package/src/libs/engine/src/dsl/types/ASTNode.js +31 -0
  295. package/src/libs/engine/src/dsl/types/Token.d.ts +79 -0
  296. package/src/libs/engine/src/dsl/types/Token.js +84 -0
  297. package/src/libs/engine/src/engine/DiagramEngine.d.ts +917 -0
  298. package/src/libs/engine/src/engine/DiagramEngine.js +2190 -0
  299. package/src/libs/engine/src/engine/DiagramMode.d.ts +51 -0
  300. package/src/libs/engine/src/engine/DiagramMode.js +53 -0
  301. package/src/libs/engine/src/engine/DiagramModeTypes.d.ts +73 -0
  302. package/src/libs/engine/src/engine/DiagramModeTypes.js +4 -0
  303. package/src/libs/engine/src/engine/ModeManager.d.ts +155 -0
  304. package/src/libs/engine/src/engine/ModeManager.js +387 -0
  305. package/src/libs/engine/src/engine/index.d.ts +2 -0
  306. package/src/libs/engine/src/engine/index.js +7 -0
  307. package/src/libs/engine/src/events/EventBus.d.ts +106 -0
  308. package/src/libs/engine/src/events/EventBus.js +226 -0
  309. package/src/libs/engine/src/events/index.d.ts +1 -0
  310. package/src/libs/engine/src/events/index.js +6 -0
  311. package/src/libs/engine/src/index.d.ts +43 -0
  312. package/src/libs/engine/src/index.js +142 -0
  313. package/src/libs/engine/src/interaction/GroupCollapseService.d.ts +53 -0
  314. package/src/libs/engine/src/interaction/GroupCollapseService.js +274 -0
  315. package/src/libs/engine/src/interaction/GroupMembershipService.d.ts +107 -0
  316. package/src/libs/engine/src/interaction/GroupMembershipService.js +245 -0
  317. package/src/libs/engine/src/interaction/SemanticMembershipService.d.ts +28 -0
  318. package/src/libs/engine/src/interaction/SemanticMembershipService.js +168 -0
  319. package/src/libs/engine/src/interaction/SwimlaneService.d.ts +62 -0
  320. package/src/libs/engine/src/interaction/SwimlaneService.js +180 -0
  321. package/src/libs/engine/src/interaction/index.d.ts +4 -0
  322. package/src/libs/engine/src/interaction/index.js +9 -0
  323. package/src/libs/engine/src/interop/drawio/importDrawio.d.ts +52 -0
  324. package/src/libs/engine/src/interop/drawio/importDrawio.js +940 -0
  325. package/src/libs/engine/src/interop/drawio/index.d.ts +1 -0
  326. package/src/libs/engine/src/interop/drawio/index.js +12 -0
  327. package/src/libs/engine/src/interop/drawio/xml.d.ts +26 -0
  328. package/src/libs/engine/src/interop/drawio/xml.js +213 -0
  329. package/src/libs/engine/src/layout/CompoundLayoutService.d.ts +121 -0
  330. package/src/libs/engine/src/layout/CompoundLayoutService.js +616 -0
  331. package/src/libs/engine/src/layout/ILayoutAlgorithm.d.ts +120 -0
  332. package/src/libs/engine/src/layout/ILayoutAlgorithm.js +88 -0
  333. package/src/libs/engine/src/layout/LayoutManager.d.ts +155 -0
  334. package/src/libs/engine/src/layout/LayoutManager.js +640 -0
  335. package/src/libs/engine/src/layout/SmartSpacingCalculator.d.ts +62 -0
  336. package/src/libs/engine/src/layout/SmartSpacingCalculator.js +134 -0
  337. package/src/libs/engine/src/layout/ViewportTransform.d.ts +55 -0
  338. package/src/libs/engine/src/layout/ViewportTransform.js +118 -0
  339. package/src/libs/engine/src/layout/algorithms/ForceDirectedLayoutAlgorithm.d.ts +34 -0
  340. package/src/libs/engine/src/layout/algorithms/ForceDirectedLayoutAlgorithm.js +317 -0
  341. package/src/libs/engine/src/layout/algorithms/GridLayoutAlgorithm.d.ts +56 -0
  342. package/src/libs/engine/src/layout/algorithms/GridLayoutAlgorithm.js +223 -0
  343. package/src/libs/engine/src/layout/algorithms/HierarchicalLayoutAlgorithm.d.ts +60 -0
  344. package/src/libs/engine/src/layout/algorithms/HierarchicalLayoutAlgorithm.js +307 -0
  345. package/src/libs/engine/src/layout/algorithms/HybridLayoutAlgorithm.d.ts +62 -0
  346. package/src/libs/engine/src/layout/algorithms/HybridLayoutAlgorithm.js +324 -0
  347. package/src/libs/engine/src/layout/community-layout-adapter.d.ts +107 -0
  348. package/src/libs/engine/src/layout/community-layout-adapter.js +486 -0
  349. package/src/libs/engine/src/layout/component-packing.d.ts +98 -0
  350. package/src/libs/engine/src/layout/component-packing.js +307 -0
  351. package/src/libs/engine/src/layout/dagre-layout-adapter.d.ts +122 -0
  352. package/src/libs/engine/src/layout/dagre-layout-adapter.js +697 -0
  353. package/src/libs/engine/src/layout/edge-bundling.interface.d.ts +159 -0
  354. package/src/libs/engine/src/layout/edge-bundling.interface.js +379 -0
  355. package/src/libs/engine/src/layout/elk-layout-adapter.d.ts +121 -0
  356. package/src/libs/engine/src/layout/elk-layout-adapter.js +586 -0
  357. package/src/libs/engine/src/layout/elk-loader.d.ts +1 -0
  358. package/src/libs/engine/src/layout/elk-loader.js +24 -0
  359. package/src/libs/engine/src/layout/force-layout-adapter.d.ts +167 -0
  360. package/src/libs/engine/src/layout/force-layout-adapter.js +790 -0
  361. package/src/libs/engine/src/layout/grid-pack/grid-pack-engine.d.ts +323 -0
  362. package/src/libs/engine/src/layout/grid-pack/grid-pack-engine.js +685 -0
  363. package/src/libs/engine/src/layout/incremental/mental-map.d.ts +98 -0
  364. package/src/libs/engine/src/layout/incremental/mental-map.js +221 -0
  365. package/src/libs/engine/src/layout/incremental-layout.interface.d.ts +145 -0
  366. package/src/libs/engine/src/layout/incremental-layout.interface.js +300 -0
  367. package/src/libs/engine/src/layout/index.d.ts +83 -0
  368. package/src/libs/engine/src/layout/index.js +116 -0
  369. package/src/libs/engine/src/layout/layout-adapter.interface.d.ts +185 -0
  370. package/src/libs/engine/src/layout/layout-adapter.interface.js +10 -0
  371. package/src/libs/engine/src/layout/layout-auto-select.d.ts +160 -0
  372. package/src/libs/engine/src/layout/layout-auto-select.js +621 -0
  373. package/src/libs/engine/src/layout/layout-constraints.interface.d.ts +117 -0
  374. package/src/libs/engine/src/layout/layout-constraints.interface.js +138 -0
  375. package/src/libs/engine/src/layout/layout-graph.d.ts +70 -0
  376. package/src/libs/engine/src/layout/layout-graph.js +119 -0
  377. package/src/libs/engine/src/layout/layout-history.d.ts +147 -0
  378. package/src/libs/engine/src/layout/layout-history.js +258 -0
  379. package/src/libs/engine/src/layout/layout-host.d.ts +172 -0
  380. package/src/libs/engine/src/layout/layout-host.js +523 -0
  381. package/src/libs/engine/src/layout/layout-presets.d.ts +91 -0
  382. package/src/libs/engine/src/layout/layout-presets.js +333 -0
  383. package/src/libs/engine/src/layout/layout-quality-extended.d.ts +66 -0
  384. package/src/libs/engine/src/layout/layout-quality-extended.js +246 -0
  385. package/src/libs/engine/src/layout/layout-quality-metrics.d.ts +127 -0
  386. package/src/libs/engine/src/layout/layout-quality-metrics.js +466 -0
  387. package/src/libs/engine/src/layout/layout-registry.d.ts +309 -0
  388. package/src/libs/engine/src/layout/layout-registry.js +414 -0
  389. package/src/libs/engine/src/layout/layout.service.d.ts +100 -0
  390. package/src/libs/engine/src/layout/layout.service.js +216 -0
  391. package/src/libs/engine/src/layout/overlap-removal.d.ts +20 -0
  392. package/src/libs/engine/src/layout/overlap-removal.js +117 -0
  393. package/src/libs/engine/src/layout/port-aware-layout.interface.d.ts +232 -0
  394. package/src/libs/engine/src/layout/port-aware-layout.interface.js +413 -0
  395. package/src/libs/engine/src/layout/port-label-bridge.d.ts +77 -0
  396. package/src/libs/engine/src/layout/port-label-bridge.js +250 -0
  397. package/src/libs/engine/src/layout/portfolio-layouts.d.ts +53 -0
  398. package/src/libs/engine/src/layout/portfolio-layouts.js +388 -0
  399. package/src/libs/engine/src/layout/rng.d.ts +34 -0
  400. package/src/libs/engine/src/layout/rng.js +71 -0
  401. package/src/libs/engine/src/layout/spectral-layout-adapter.d.ts +72 -0
  402. package/src/libs/engine/src/layout/spectral-layout-adapter.js +379 -0
  403. package/src/libs/engine/src/layout/steppable-layout.d.ts +40 -0
  404. package/src/libs/engine/src/layout/steppable-layout.js +34 -0
  405. package/src/libs/engine/src/layout/subgraph-layout.interface.d.ts +269 -0
  406. package/src/libs/engine/src/layout/subgraph-layout.interface.js +452 -0
  407. package/src/libs/engine/src/layout/sugiyama/layered-layout.d.ts +9 -0
  408. package/src/libs/engine/src/layout/sugiyama/layered-layout.js +83 -0
  409. package/src/libs/engine/src/layout/sugiyama/sugiyama.d.ts +91 -0
  410. package/src/libs/engine/src/layout/sugiyama/sugiyama.js +797 -0
  411. package/src/libs/engine/src/layout/tree-layout.d.ts +43 -0
  412. package/src/libs/engine/src/layout/tree-layout.js +426 -0
  413. package/src/libs/engine/src/layout/types.d.ts +263 -0
  414. package/src/libs/engine/src/layout/types.js +6 -0
  415. package/src/libs/engine/src/lib/performance/mobile-performance.service.d.ts +43 -0
  416. package/src/libs/engine/src/lib/performance/mobile-performance.service.js +95 -0
  417. package/src/libs/engine/src/models/DiagramEntity.d.ts +174 -0
  418. package/src/libs/engine/src/models/DiagramEntity.js +366 -0
  419. package/src/libs/engine/src/models/DiagramModel.d.ts +960 -0
  420. package/src/libs/engine/src/models/DiagramModel.js +2416 -0
  421. package/src/libs/engine/src/models/GroupModel.d.ts +573 -0
  422. package/src/libs/engine/src/models/GroupModel.js +1373 -0
  423. package/src/libs/engine/src/models/LinkModel.d.ts +395 -0
  424. package/src/libs/engine/src/models/LinkModel.js +1045 -0
  425. package/src/libs/engine/src/models/NodeModel.d.ts +666 -0
  426. package/src/libs/engine/src/models/NodeModel.js +1512 -0
  427. package/src/libs/engine/src/models/PortModel.d.ts +292 -0
  428. package/src/libs/engine/src/models/PortModel.js +637 -0
  429. package/src/libs/engine/src/models/StrokeModel.d.ts +160 -0
  430. package/src/libs/engine/src/models/StrokeModel.js +387 -0
  431. package/src/libs/engine/src/models/index.d.ts +7 -0
  432. package/src/libs/engine/src/models/index.js +12 -0
  433. package/src/libs/engine/src/models/readonly-lock.d.ts +108 -0
  434. package/src/libs/engine/src/models/readonly-lock.js +125 -0
  435. package/src/libs/engine/src/performance/LRUCache.d.ts +78 -0
  436. package/src/libs/engine/src/performance/LRUCache.js +179 -0
  437. package/src/libs/engine/src/performance/PerformanceMonitor.d.ts +47 -0
  438. package/src/libs/engine/src/performance/PerformanceMonitor.js +112 -0
  439. package/src/libs/engine/src/performance/SpatialIndex.d.ts +157 -0
  440. package/src/libs/engine/src/performance/SpatialIndex.js +306 -0
  441. package/src/libs/engine/src/performance/index.d.ts +2 -0
  442. package/src/libs/engine/src/performance/index.js +7 -0
  443. package/src/libs/engine/src/plugins/PluginManager.d.ts +95 -0
  444. package/src/libs/engine/src/plugins/PluginManager.js +388 -0
  445. package/src/libs/engine/src/plugins/index.d.ts +1 -0
  446. package/src/libs/engine/src/plugins/index.js +6 -0
  447. package/src/libs/engine/src/ports/connection-rules.d.ts +32 -0
  448. package/src/libs/engine/src/ports/connection-rules.js +131 -0
  449. package/src/libs/engine/src/ports/dynamic-ports.d.ts +27 -0
  450. package/src/libs/engine/src/ports/dynamic-ports.js +135 -0
  451. package/src/libs/engine/src/ports/index.d.ts +5 -0
  452. package/src/libs/engine/src/ports/index.js +16 -0
  453. package/src/libs/engine/src/ports/port-groups.d.ts +43 -0
  454. package/src/libs/engine/src/ports/port-groups.js +185 -0
  455. package/src/libs/engine/src/ports/port-type-registry.d.ts +34 -0
  456. package/src/libs/engine/src/ports/port-type-registry.js +87 -0
  457. package/src/libs/engine/src/ports/port-types.d.ts +266 -0
  458. package/src/libs/engine/src/ports/port-types.js +30 -0
  459. package/src/libs/engine/src/rendering/HtmlTemplateRenderer.d.ts +136 -0
  460. package/src/libs/engine/src/rendering/HtmlTemplateRenderer.js +292 -0
  461. package/src/libs/engine/src/rendering/LemonadeJSRenderer.d.ts +160 -0
  462. package/src/libs/engine/src/rendering/LemonadeJSRenderer.js +362 -0
  463. package/src/libs/engine/src/rendering/index.d.ts +2 -0
  464. package/src/libs/engine/src/rendering/index.js +7 -0
  465. package/src/libs/engine/src/routing/LiveReroutingEngine.d.ts +75 -0
  466. package/src/libs/engine/src/routing/LiveReroutingEngine.js +173 -0
  467. package/src/libs/engine/src/routing/ObstacleIndex.d.ts +42 -0
  468. package/src/libs/engine/src/routing/ObstacleIndex.js +215 -0
  469. package/src/libs/engine/src/routing/ObstacleMap.d.ts +68 -0
  470. package/src/libs/engine/src/routing/ObstacleMap.js +312 -0
  471. package/src/libs/engine/src/routing/ObstacleMapBuilder.d.ts +28 -0
  472. package/src/libs/engine/src/routing/ObstacleMapBuilder.js +76 -0
  473. package/src/libs/engine/src/routing/PathSimplifier.d.ts +119 -0
  474. package/src/libs/engine/src/routing/PathSimplifier.js +224 -0
  475. package/src/libs/engine/src/routing/RoutingEngine.d.ts +118 -0
  476. package/src/libs/engine/src/routing/RoutingEngine.js +546 -0
  477. package/src/libs/engine/src/routing/algorithms/AStarRouter.d.ts +90 -0
  478. package/src/libs/engine/src/routing/algorithms/AStarRouter.js +331 -0
  479. package/src/libs/engine/src/routing/algorithms/DijkstraRouter.d.ts +74 -0
  480. package/src/libs/engine/src/routing/algorithms/DijkstraRouter.js +297 -0
  481. package/src/libs/engine/src/routing/algorithms/ElkRouter.d.ts +34 -0
  482. package/src/libs/engine/src/routing/algorithms/ElkRouter.js +210 -0
  483. package/src/libs/engine/src/routing/algorithms/ManhattanRouter.d.ts +18 -0
  484. package/src/libs/engine/src/routing/algorithms/ManhattanRouter.js +224 -0
  485. package/src/libs/engine/src/routing/algorithms/OrthogonalRouter.d.ts +173 -0
  486. package/src/libs/engine/src/routing/algorithms/OrthogonalRouter.js +1092 -0
  487. package/src/libs/engine/src/routing/algorithms/StraightRouter.d.ts +8 -0
  488. package/src/libs/engine/src/routing/algorithms/StraightRouter.js +53 -0
  489. package/src/libs/engine/src/routing/algorithms/VisibilityGraphRouter.d.ts +59 -0
  490. package/src/libs/engine/src/routing/algorithms/VisibilityGraphRouter.js +258 -0
  491. package/src/libs/engine/src/routing/global/GlobalRouteSolver.d.ts +64 -0
  492. package/src/libs/engine/src/routing/global/GlobalRouteSolver.js +334 -0
  493. package/src/libs/engine/src/routing/global/solver-host.d.ts +65 -0
  494. package/src/libs/engine/src/routing/global/solver-host.js +87 -0
  495. package/src/libs/engine/src/routing/index.d.ts +15 -0
  496. package/src/libs/engine/src/routing/index.js +20 -0
  497. package/src/libs/engine/src/routing/types.d.ts +161 -0
  498. package/src/libs/engine/src/routing/types.js +4 -0
  499. package/src/libs/engine/src/selection/SelectionManager.d.ts +161 -0
  500. package/src/libs/engine/src/selection/SelectionManager.js +483 -0
  501. package/src/libs/engine/src/selection/index.d.ts +1 -0
  502. package/src/libs/engine/src/selection/index.js +6 -0
  503. package/src/libs/engine/src/serialization/DiagramMigrations.d.ts +41 -0
  504. package/src/libs/engine/src/serialization/DiagramMigrations.js +124 -0
  505. package/src/libs/engine/src/serialization/DiagramValidator.d.ts +20 -0
  506. package/src/libs/engine/src/serialization/DiagramValidator.js +136 -0
  507. package/src/libs/engine/src/serialization/DocumentEnvelope.d.ts +53 -0
  508. package/src/libs/engine/src/serialization/DocumentEnvelope.js +111 -0
  509. package/src/libs/engine/src/serialization/Incremental.d.ts +77 -0
  510. package/src/libs/engine/src/serialization/Incremental.js +227 -0
  511. package/src/libs/engine/src/serialization/Serializer.d.ts +29 -0
  512. package/src/libs/engine/src/serialization/Serializer.js +45 -0
  513. package/src/libs/engine/src/serialization/Subgraph.d.ts +51 -0
  514. package/src/libs/engine/src/serialization/Subgraph.js +172 -0
  515. package/src/libs/engine/src/serialization/TextFormat.d.ts +71 -0
  516. package/src/libs/engine/src/serialization/TextFormat.js +261 -0
  517. package/src/libs/engine/src/state/ConnectionStateManager.d.ts +178 -0
  518. package/src/libs/engine/src/state/ConnectionStateManager.js +319 -0
  519. package/src/libs/engine/src/state/DiagramStore.d.ts +134 -0
  520. package/src/libs/engine/src/state/DiagramStore.js +372 -0
  521. package/src/libs/engine/src/state/index.d.ts +2 -0
  522. package/src/libs/engine/src/state/index.js +7 -0
  523. package/src/libs/engine/src/sync/awareness.d.ts +91 -0
  524. package/src/libs/engine/src/sync/awareness.js +221 -0
  525. package/src/libs/engine/src/sync/batcher.d.ts +84 -0
  526. package/src/libs/engine/src/sync/batcher.js +0 -0
  527. package/src/libs/engine/src/sync/causal-buffer.d.ts +81 -0
  528. package/src/libs/engine/src/sync/causal-buffer.js +199 -0
  529. package/src/libs/engine/src/sync/index.d.ts +20 -0
  530. package/src/libs/engine/src/sync/index.js +41 -0
  531. package/src/libs/engine/src/sync/protocol.d.ts +74 -0
  532. package/src/libs/engine/src/sync/protocol.js +39 -0
  533. package/src/libs/engine/src/sync/sync-adapter.d.ts +243 -0
  534. package/src/libs/engine/src/sync/sync-adapter.js +524 -0
  535. package/src/libs/engine/src/sync/transport.d.ts +30 -0
  536. package/src/libs/engine/src/sync/transport.js +28 -0
  537. package/src/libs/engine/src/sync/transports/broadcast-channel.d.ts +39 -0
  538. package/src/libs/engine/src/sync/transports/broadcast-channel.js +117 -0
  539. package/src/libs/engine/src/sync/transports/memory.d.ts +38 -0
  540. package/src/libs/engine/src/sync/transports/memory.js +111 -0
  541. package/src/libs/engine/src/sync/transports/unreliable.d.ts +59 -0
  542. package/src/libs/engine/src/sync/transports/unreliable.js +153 -0
  543. package/src/libs/engine/src/sync/transports/websocket.d.ts +60 -0
  544. package/src/libs/engine/src/sync/transports/websocket.js +210 -0
  545. package/src/libs/engine/src/sync/version-vector.d.ts +47 -0
  546. package/src/libs/engine/src/sync/version-vector.js +218 -0
  547. package/src/libs/engine/src/template-library/common-templates.d.ts +46 -0
  548. package/src/libs/engine/src/template-library/common-templates.js +395 -0
  549. package/src/libs/engine/src/template-library/data-viz-templates.d.ts +52 -0
  550. package/src/libs/engine/src/template-library/data-viz-templates.js +471 -0
  551. package/src/libs/engine/src/template-library/erd-templates.d.ts +71 -0
  552. package/src/libs/engine/src/template-library/erd-templates.js +773 -0
  553. package/src/libs/engine/src/template-library/index.d.ts +141 -0
  554. package/src/libs/engine/src/template-library/index.js +271 -0
  555. package/src/libs/engine/src/template-library/integration.d.ts +80 -0
  556. package/src/libs/engine/src/template-library/integration.js +141 -0
  557. package/src/libs/engine/src/template-library/workflow-templates.d.ts +52 -0
  558. package/src/libs/engine/src/template-library/workflow-templates.js +438 -0
  559. package/src/libs/engine/src/templates/NodeFactory.d.ts +118 -0
  560. package/src/libs/engine/src/templates/NodeFactory.js +436 -0
  561. package/src/libs/engine/src/templates/NodeTemplate.d.ts +342 -0
  562. package/src/libs/engine/src/templates/NodeTemplate.js +13 -0
  563. package/src/libs/engine/src/templates/TemplateLoader.d.ts +46 -0
  564. package/src/libs/engine/src/templates/TemplateLoader.js +114 -0
  565. package/src/libs/engine/src/templates/TemplateRegistry.d.ts +70 -0
  566. package/src/libs/engine/src/templates/TemplateRegistry.js +128 -0
  567. package/src/libs/engine/src/templates/generated/bpmn/bpmn-business-rule-task.template.d.ts +11 -0
  568. package/src/libs/engine/src/templates/generated/bpmn/bpmn-business-rule-task.template.js +123 -0
  569. package/src/libs/engine/src/templates/generated/bpmn/bpmn-end-event.template.d.ts +11 -0
  570. package/src/libs/engine/src/templates/generated/bpmn/bpmn-end-event.template.js +123 -0
  571. package/src/libs/engine/src/templates/generated/bpmn/bpmn-error-event.template.d.ts +11 -0
  572. package/src/libs/engine/src/templates/generated/bpmn/bpmn-error-event.template.js +123 -0
  573. package/src/libs/engine/src/templates/generated/bpmn/bpmn-exclusive-gateway.template.d.ts +11 -0
  574. package/src/libs/engine/src/templates/generated/bpmn/bpmn-exclusive-gateway.template.js +124 -0
  575. package/src/libs/engine/src/templates/generated/bpmn/bpmn-inclusive-gateway.template.d.ts +11 -0
  576. package/src/libs/engine/src/templates/generated/bpmn/bpmn-inclusive-gateway.template.js +123 -0
  577. package/src/libs/engine/src/templates/generated/bpmn/bpmn-intermediate-event.template.d.ts +11 -0
  578. package/src/libs/engine/src/templates/generated/bpmn/bpmn-intermediate-event.template.js +124 -0
  579. package/src/libs/engine/src/templates/generated/bpmn/bpmn-manual-task.template.d.ts +11 -0
  580. package/src/libs/engine/src/templates/generated/bpmn/bpmn-manual-task.template.js +123 -0
  581. package/src/libs/engine/src/templates/generated/bpmn/bpmn-message-event.template.d.ts +11 -0
  582. package/src/libs/engine/src/templates/generated/bpmn/bpmn-message-event.template.js +122 -0
  583. package/src/libs/engine/src/templates/generated/bpmn/bpmn-parallel-gateway.template.d.ts +11 -0
  584. package/src/libs/engine/src/templates/generated/bpmn/bpmn-parallel-gateway.template.js +125 -0
  585. package/src/libs/engine/src/templates/generated/bpmn/bpmn-script-task.template.d.ts +11 -0
  586. package/src/libs/engine/src/templates/generated/bpmn/bpmn-script-task.template.js +123 -0
  587. package/src/libs/engine/src/templates/generated/bpmn/bpmn-service-task.template.d.ts +11 -0
  588. package/src/libs/engine/src/templates/generated/bpmn/bpmn-service-task.template.js +123 -0
  589. package/src/libs/engine/src/templates/generated/bpmn/bpmn-start-event.template.d.ts +11 -0
  590. package/src/libs/engine/src/templates/generated/bpmn/bpmn-start-event.template.js +123 -0
  591. package/src/libs/engine/src/templates/generated/bpmn/bpmn-task.template.d.ts +11 -0
  592. package/src/libs/engine/src/templates/generated/bpmn/bpmn-task.template.js +152 -0
  593. package/src/libs/engine/src/templates/generated/bpmn/bpmn-timer-event.template.d.ts +11 -0
  594. package/src/libs/engine/src/templates/generated/bpmn/bpmn-timer-event.template.js +123 -0
  595. package/src/libs/engine/src/templates/generated/bpmn/bpmn-user-task.template.d.ts +11 -0
  596. package/src/libs/engine/src/templates/generated/bpmn/bpmn-user-task.template.js +123 -0
  597. package/src/libs/engine/src/templates/generated/bpmn/index.d.ts +15 -0
  598. package/src/libs/engine/src/templates/generated/bpmn/index.js +34 -0
  599. package/src/libs/engine/src/templates/generated/erd/erd-associative-entity.template.d.ts +11 -0
  600. package/src/libs/engine/src/templates/generated/erd/erd-associative-entity.template.js +152 -0
  601. package/src/libs/engine/src/templates/generated/erd/erd-attribute.template.d.ts +11 -0
  602. package/src/libs/engine/src/templates/generated/erd/erd-attribute.template.js +122 -0
  603. package/src/libs/engine/src/templates/generated/erd/erd-bridge-entity.template.d.ts +11 -0
  604. package/src/libs/engine/src/templates/generated/erd/erd-bridge-entity.template.js +151 -0
  605. package/src/libs/engine/src/templates/generated/erd/erd-composite-attribute.template.d.ts +11 -0
  606. package/src/libs/engine/src/templates/generated/erd/erd-composite-attribute.template.js +122 -0
  607. package/src/libs/engine/src/templates/generated/erd/erd-derived-attribute.template.d.ts +11 -0
  608. package/src/libs/engine/src/templates/generated/erd/erd-derived-attribute.template.js +122 -0
  609. package/src/libs/engine/src/templates/generated/erd/erd-discriminator.template.d.ts +11 -0
  610. package/src/libs/engine/src/templates/generated/erd/erd-discriminator.template.js +123 -0
  611. package/src/libs/engine/src/templates/generated/erd/erd-entity.template.d.ts +11 -0
  612. package/src/libs/engine/src/templates/generated/erd/erd-entity.template.js +149 -0
  613. package/src/libs/engine/src/templates/generated/erd/erd-isa.template.d.ts +11 -0
  614. package/src/libs/engine/src/templates/generated/erd/erd-isa.template.js +123 -0
  615. package/src/libs/engine/src/templates/generated/erd/erd-key-attribute.template.d.ts +11 -0
  616. package/src/libs/engine/src/templates/generated/erd/erd-key-attribute.template.js +122 -0
  617. package/src/libs/engine/src/templates/generated/erd/erd-multivalued-attribute.template.d.ts +11 -0
  618. package/src/libs/engine/src/templates/generated/erd/erd-multivalued-attribute.template.js +122 -0
  619. package/src/libs/engine/src/templates/generated/erd/erd-optional-attribute.template.d.ts +11 -0
  620. package/src/libs/engine/src/templates/generated/erd/erd-optional-attribute.template.js +122 -0
  621. package/src/libs/engine/src/templates/generated/erd/erd-partial-key.template.d.ts +11 -0
  622. package/src/libs/engine/src/templates/generated/erd/erd-partial-key.template.js +123 -0
  623. package/src/libs/engine/src/templates/generated/erd/erd-relationship.template.d.ts +11 -0
  624. package/src/libs/engine/src/templates/generated/erd/erd-relationship.template.js +121 -0
  625. package/src/libs/engine/src/templates/generated/erd/erd-subtype.template.d.ts +11 -0
  626. package/src/libs/engine/src/templates/generated/erd/erd-subtype.template.js +123 -0
  627. package/src/libs/engine/src/templates/generated/erd/erd-supertype.template.d.ts +11 -0
  628. package/src/libs/engine/src/templates/generated/erd/erd-supertype.template.js +123 -0
  629. package/src/libs/engine/src/templates/generated/erd/erd-table.template.d.ts +11 -0
  630. package/src/libs/engine/src/templates/generated/erd/erd-table.template.js +123 -0
  631. package/src/libs/engine/src/templates/generated/erd/erd-view.template.d.ts +11 -0
  632. package/src/libs/engine/src/templates/generated/erd/erd-view.template.js +123 -0
  633. package/src/libs/engine/src/templates/generated/erd/erd-weak-entity.template.d.ts +11 -0
  634. package/src/libs/engine/src/templates/generated/erd/erd-weak-entity.template.js +149 -0
  635. package/src/libs/engine/src/templates/generated/erd/erd-weak-relationship.template.d.ts +11 -0
  636. package/src/libs/engine/src/templates/generated/erd/erd-weak-relationship.template.js +122 -0
  637. package/src/libs/engine/src/templates/generated/erd/index.d.ts +19 -0
  638. package/src/libs/engine/src/templates/generated/erd/index.js +42 -0
  639. package/src/libs/engine/src/templates/generated/flowchart/flowchart-connector.template.d.ts +11 -0
  640. package/src/libs/engine/src/templates/generated/flowchart/flowchart-connector.template.js +123 -0
  641. package/src/libs/engine/src/templates/generated/flowchart/flowchart-data.template.d.ts +11 -0
  642. package/src/libs/engine/src/templates/generated/flowchart/flowchart-data.template.js +123 -0
  643. package/src/libs/engine/src/templates/generated/flowchart/flowchart-decision.template.d.ts +11 -0
  644. package/src/libs/engine/src/templates/generated/flowchart/flowchart-decision.template.js +123 -0
  645. package/src/libs/engine/src/templates/generated/flowchart/flowchart-delay.template.d.ts +11 -0
  646. package/src/libs/engine/src/templates/generated/flowchart/flowchart-delay.template.js +124 -0
  647. package/src/libs/engine/src/templates/generated/flowchart/flowchart-display.template.d.ts +11 -0
  648. package/src/libs/engine/src/templates/generated/flowchart/flowchart-display.template.js +124 -0
  649. package/src/libs/engine/src/templates/generated/flowchart/flowchart-document.template.d.ts +11 -0
  650. package/src/libs/engine/src/templates/generated/flowchart/flowchart-document.template.js +123 -0
  651. package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-input.template.d.ts +11 -0
  652. package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-input.template.js +123 -0
  653. package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-operation.template.d.ts +11 -0
  654. package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-operation.template.js +122 -0
  655. package/src/libs/engine/src/templates/generated/flowchart/flowchart-merge.template.d.ts +11 -0
  656. package/src/libs/engine/src/templates/generated/flowchart/flowchart-merge.template.js +122 -0
  657. package/src/libs/engine/src/templates/generated/flowchart/flowchart-or.template.d.ts +11 -0
  658. package/src/libs/engine/src/templates/generated/flowchart/flowchart-or.template.js +123 -0
  659. package/src/libs/engine/src/templates/generated/flowchart/flowchart-predefined-process.template.d.ts +11 -0
  660. package/src/libs/engine/src/templates/generated/flowchart/flowchart-predefined-process.template.js +123 -0
  661. package/src/libs/engine/src/templates/generated/flowchart/flowchart-preparation.template.d.ts +11 -0
  662. package/src/libs/engine/src/templates/generated/flowchart/flowchart-preparation.template.js +123 -0
  663. package/src/libs/engine/src/templates/generated/flowchart/flowchart-process.template.d.ts +11 -0
  664. package/src/libs/engine/src/templates/generated/flowchart/flowchart-process.template.js +122 -0
  665. package/src/libs/engine/src/templates/generated/flowchart/flowchart-stored-data.template.d.ts +11 -0
  666. package/src/libs/engine/src/templates/generated/flowchart/flowchart-stored-data.template.js +123 -0
  667. package/src/libs/engine/src/templates/generated/flowchart/flowchart-summing-junction.template.d.ts +11 -0
  668. package/src/libs/engine/src/templates/generated/flowchart/flowchart-summing-junction.template.js +124 -0
  669. package/src/libs/engine/src/templates/generated/flowchart/flowchart-terminal.template.d.ts +11 -0
  670. package/src/libs/engine/src/templates/generated/flowchart/flowchart-terminal.template.js +124 -0
  671. package/src/libs/engine/src/templates/generated/flowchart/index.d.ts +16 -0
  672. package/src/libs/engine/src/templates/generated/flowchart/index.js +36 -0
  673. package/src/libs/engine/src/templates/generated/index.d.ts +9 -0
  674. package/src/libs/engine/src/templates/generated/index.js +13 -0
  675. package/src/libs/engine/src/templates/generated/register.d.ts +23 -0
  676. package/src/libs/engine/src/templates/generated/register.js +31 -0
  677. package/src/libs/engine/src/templates/generated/uml/index.d.ts +30 -0
  678. package/src/libs/engine/src/templates/generated/uml/index.js +64 -0
  679. package/src/libs/engine/src/templates/generated/uml/uml-abstract-class.template.d.ts +11 -0
  680. package/src/libs/engine/src/templates/generated/uml/uml-abstract-class.template.js +204 -0
  681. package/src/libs/engine/src/templates/generated/uml/uml-activation.template.d.ts +11 -0
  682. package/src/libs/engine/src/templates/generated/uml/uml-activation.template.js +124 -0
  683. package/src/libs/engine/src/templates/generated/uml/uml-activity-partition.template.d.ts +11 -0
  684. package/src/libs/engine/src/templates/generated/uml/uml-activity-partition.template.js +124 -0
  685. package/src/libs/engine/src/templates/generated/uml/uml-activity.template.d.ts +11 -0
  686. package/src/libs/engine/src/templates/generated/uml/uml-activity.template.js +123 -0
  687. package/src/libs/engine/src/templates/generated/uml/uml-actor.template.d.ts +11 -0
  688. package/src/libs/engine/src/templates/generated/uml/uml-actor.template.js +123 -0
  689. package/src/libs/engine/src/templates/generated/uml/uml-class.template.d.ts +11 -0
  690. package/src/libs/engine/src/templates/generated/uml/uml-class.template.js +204 -0
  691. package/src/libs/engine/src/templates/generated/uml/uml-collaboration.template.d.ts +11 -0
  692. package/src/libs/engine/src/templates/generated/uml/uml-collaboration.template.js +122 -0
  693. package/src/libs/engine/src/templates/generated/uml/uml-component.template.d.ts +11 -0
  694. package/src/libs/engine/src/templates/generated/uml/uml-component.template.js +122 -0
  695. package/src/libs/engine/src/templates/generated/uml/uml-datatype.template.d.ts +11 -0
  696. package/src/libs/engine/src/templates/generated/uml/uml-datatype.template.js +204 -0
  697. package/src/libs/engine/src/templates/generated/uml/uml-decision.template.d.ts +11 -0
  698. package/src/libs/engine/src/templates/generated/uml/uml-decision.template.js +124 -0
  699. package/src/libs/engine/src/templates/generated/uml/uml-enum.template.d.ts +11 -0
  700. package/src/libs/engine/src/templates/generated/uml/uml-enum.template.js +204 -0
  701. package/src/libs/engine/src/templates/generated/uml/uml-final-node.template.d.ts +11 -0
  702. package/src/libs/engine/src/templates/generated/uml/uml-final-node.template.js +124 -0
  703. package/src/libs/engine/src/templates/generated/uml/uml-final-state.template.d.ts +11 -0
  704. package/src/libs/engine/src/templates/generated/uml/uml-final-state.template.js +124 -0
  705. package/src/libs/engine/src/templates/generated/uml/uml-fork.template.d.ts +11 -0
  706. package/src/libs/engine/src/templates/generated/uml/uml-fork.template.js +125 -0
  707. package/src/libs/engine/src/templates/generated/uml/uml-initial-node.template.d.ts +11 -0
  708. package/src/libs/engine/src/templates/generated/uml/uml-initial-node.template.js +123 -0
  709. package/src/libs/engine/src/templates/generated/uml/uml-initial-state.template.d.ts +11 -0
  710. package/src/libs/engine/src/templates/generated/uml/uml-initial-state.template.js +123 -0
  711. package/src/libs/engine/src/templates/generated/uml/uml-interface.template.d.ts +11 -0
  712. package/src/libs/engine/src/templates/generated/uml/uml-interface.template.js +204 -0
  713. package/src/libs/engine/src/templates/generated/uml/uml-join.template.d.ts +11 -0
  714. package/src/libs/engine/src/templates/generated/uml/uml-join.template.js +125 -0
  715. package/src/libs/engine/src/templates/generated/uml/uml-lifeline.template.d.ts +11 -0
  716. package/src/libs/engine/src/templates/generated/uml/uml-lifeline.template.js +123 -0
  717. package/src/libs/engine/src/templates/generated/uml/uml-merge.template.d.ts +11 -0
  718. package/src/libs/engine/src/templates/generated/uml/uml-merge.template.js +122 -0
  719. package/src/libs/engine/src/templates/generated/uml/uml-node.template.d.ts +11 -0
  720. package/src/libs/engine/src/templates/generated/uml/uml-node.template.js +122 -0
  721. package/src/libs/engine/src/templates/generated/uml/uml-note.template.d.ts +11 -0
  722. package/src/libs/engine/src/templates/generated/uml/uml-note.template.js +123 -0
  723. package/src/libs/engine/src/templates/generated/uml/uml-object.template.d.ts +11 -0
  724. package/src/libs/engine/src/templates/generated/uml/uml-object.template.js +204 -0
  725. package/src/libs/engine/src/templates/generated/uml/uml-package.template.d.ts +11 -0
  726. package/src/libs/engine/src/templates/generated/uml/uml-package.template.js +123 -0
  727. package/src/libs/engine/src/templates/generated/uml/uml-part.template.d.ts +11 -0
  728. package/src/libs/engine/src/templates/generated/uml/uml-part.template.js +122 -0
  729. package/src/libs/engine/src/templates/generated/uml/uml-port.template.d.ts +11 -0
  730. package/src/libs/engine/src/templates/generated/uml/uml-port.template.js +123 -0
  731. package/src/libs/engine/src/templates/generated/uml/uml-primitive-type.template.d.ts +11 -0
  732. package/src/libs/engine/src/templates/generated/uml/uml-primitive-type.template.js +204 -0
  733. package/src/libs/engine/src/templates/generated/uml/uml-signal.template.d.ts +11 -0
  734. package/src/libs/engine/src/templates/generated/uml/uml-signal.template.js +123 -0
  735. package/src/libs/engine/src/templates/generated/uml/uml-state.template.d.ts +11 -0
  736. package/src/libs/engine/src/templates/generated/uml/uml-state.template.js +123 -0
  737. package/src/libs/engine/src/templates/generated/uml/uml-use-case.template.d.ts +11 -0
  738. package/src/libs/engine/src/templates/generated/uml/uml-use-case.template.js +122 -0
  739. package/src/libs/engine/src/templates/index.d.ts +12 -0
  740. package/src/libs/engine/src/templates/index.js +27 -0
  741. package/src/libs/engine/src/templates/stencils.d.ts +45 -0
  742. package/src/libs/engine/src/templates/stencils.js +85 -0
  743. package/src/libs/engine/src/types/domain/bpmn.d.ts +25 -0
  744. package/src/libs/engine/src/types/domain/bpmn.js +313 -0
  745. package/src/libs/engine/src/types/domain/erd.d.ts +29 -0
  746. package/src/libs/engine/src/types/domain/erd.js +394 -0
  747. package/src/libs/engine/src/types/domain/flowchart.d.ts +26 -0
  748. package/src/libs/engine/src/types/domain/flowchart.js +434 -0
  749. package/src/libs/engine/src/types/domain/index.d.ts +4 -0
  750. package/src/libs/engine/src/types/domain/index.js +9 -0
  751. package/src/libs/engine/src/types/domain/uml.d.ts +40 -0
  752. package/src/libs/engine/src/types/domain/uml.js +758 -0
  753. package/src/libs/engine/src/types/event.types.d.ts +142 -0
  754. package/src/libs/engine/src/types/event.types.js +96 -0
  755. package/src/libs/engine/src/types/geometry.types.d.ts +84 -0
  756. package/src/libs/engine/src/types/geometry.types.js +16 -0
  757. package/src/libs/engine/src/types/index.d.ts +7 -0
  758. package/src/libs/engine/src/types/index.js +14 -0
  759. package/src/libs/engine/src/types/layout.types.d.ts +148 -0
  760. package/src/libs/engine/src/types/layout.types.js +28 -0
  761. package/src/libs/engine/src/types/model.types.d.ts +378 -0
  762. package/src/libs/engine/src/types/model.types.js +4 -0
  763. package/src/libs/engine/src/types/performance.types.d.ts +109 -0
  764. package/src/libs/engine/src/types/performance.types.js +122 -0
  765. package/src/libs/engine/src/types/plugin.types.d.ts +30 -0
  766. package/src/libs/engine/src/types/plugin.types.js +4 -0
  767. package/src/libs/engine/src/utils/deep-clone.d.ts +9 -0
  768. package/src/libs/engine/src/utils/deep-clone.js +123 -0
  769. package/src/libs/engine/src/utils/geometry.d.ts +45 -0
  770. package/src/libs/engine/src/utils/geometry.js +241 -0
  771. package/src/libs/engine/src/utils/id.d.ts +22 -0
  772. package/src/libs/engine/src/utils/id.js +44 -0
  773. package/src/libs/engine/src/utils/index.d.ts +3 -0
  774. package/src/libs/engine/src/utils/index.js +8 -0
  775. package/src/libs/engine/src/utils/transform.d.ts +84 -0
  776. package/src/libs/engine/src/utils/transform.js +200 -0
  777. package/src/libs/engine/src/validation/ConnectionGroupValidator.d.ts +22 -0
  778. package/src/libs/engine/src/validation/ConnectionGroupValidator.js +56 -0
  779. package/src/libs/engine/src/validation/TypeRegistry.d.ts +179 -0
  780. package/src/libs/engine/src/validation/TypeRegistry.js +358 -0
  781. package/src/libs/engine/src/validation/ValidationEngine.d.ts +79 -0
  782. package/src/libs/engine/src/validation/ValidationEngine.js +1150 -0
  783. package/src/libs/engine/src/validation/index.d.ts +3 -0
  784. package/src/libs/engine/src/validation/index.js +8 -0
  785. package/src/libs/renderer/src/a11y/diagram-outline.d.ts +93 -0
  786. package/src/libs/renderer/src/a11y/diagram-outline.js +0 -0
  787. package/src/libs/renderer/src/a11y/focus-containment.d.ts +90 -0
  788. package/src/libs/renderer/src/a11y/focus-containment.js +173 -0
  789. package/src/libs/renderer/src/a11y/graph-topology.d.ts +70 -0
  790. package/src/libs/renderer/src/a11y/graph-topology.js +0 -0
  791. package/src/libs/renderer/src/a11y/index.d.ts +26 -0
  792. package/src/libs/renderer/src/a11y/index.js +30 -0
  793. package/src/libs/renderer/src/a11y/live-region.d.ts +83 -0
  794. package/src/libs/renderer/src/a11y/live-region.js +170 -0
  795. package/src/libs/renderer/src/a11y/outline-view.d.ts +62 -0
  796. package/src/libs/renderer/src/a11y/outline-view.js +158 -0
  797. package/src/libs/renderer/src/a11y/reduced-motion.d.ts +48 -0
  798. package/src/libs/renderer/src/a11y/reduced-motion.js +223 -0
  799. package/src/libs/renderer/src/a11y/semantics.d.ts +76 -0
  800. package/src/libs/renderer/src/a11y/semantics.js +229 -0
  801. package/src/libs/renderer/src/canvas/canvas-context.d.ts +167 -0
  802. package/src/libs/renderer/src/canvas/canvas-context.js +267 -0
  803. package/src/libs/renderer/src/canvas/canvas-renderer.d.ts +194 -0
  804. package/src/libs/renderer/src/canvas/canvas-renderer.js +600 -0
  805. package/src/libs/renderer/src/canvas/dirty-region.d.ts +56 -0
  806. package/src/libs/renderer/src/canvas/dirty-region.js +171 -0
  807. package/src/libs/renderer/src/canvas/index.d.ts +16 -0
  808. package/src/libs/renderer/src/canvas/index.js +79 -0
  809. package/src/libs/renderer/src/canvas/path-geometry.d.ts +112 -0
  810. package/src/libs/renderer/src/canvas/path-geometry.js +673 -0
  811. package/src/libs/renderer/src/canvas/render-backend.d.ts +133 -0
  812. package/src/libs/renderer/src/canvas/render-backend.js +339 -0
  813. package/src/libs/renderer/src/canvas/style-resolution.d.ts +101 -0
  814. package/src/libs/renderer/src/canvas/style-resolution.js +466 -0
  815. package/src/libs/renderer/src/canvas/tier-policy.d.ts +33 -0
  816. package/src/libs/renderer/src/canvas/tier-policy.js +89 -0
  817. package/src/libs/renderer/src/canvas/vnode-painter.d.ts +154 -0
  818. package/src/libs/renderer/src/canvas/vnode-painter.js +649 -0
  819. package/src/libs/renderer/src/comments/comment-overlay.d.ts +56 -0
  820. package/src/libs/renderer/src/comments/comment-overlay.js +127 -0
  821. package/src/libs/renderer/src/comments/comment-panel.d.ts +45 -0
  822. package/src/libs/renderer/src/comments/comment-panel.js +287 -0
  823. package/src/libs/renderer/src/comments/comment-pins.d.ts +34 -0
  824. package/src/libs/renderer/src/comments/comment-pins.js +227 -0
  825. package/src/libs/renderer/src/comments/index.d.ts +3 -0
  826. package/src/libs/renderer/src/comments/index.js +17 -0
  827. package/src/libs/renderer/src/export/assets.d.ts +96 -0
  828. package/src/libs/renderer/src/export/assets.js +350 -0
  829. package/src/libs/renderer/src/export/batch.d.ts +49 -0
  830. package/src/libs/renderer/src/export/batch.js +95 -0
  831. package/src/libs/renderer/src/export/bounds.d.ts +81 -0
  832. package/src/libs/renderer/src/export/bounds.js +367 -0
  833. package/src/libs/renderer/src/export/capture-host.d.ts +39 -0
  834. package/src/libs/renderer/src/export/capture-host.js +1259 -0
  835. package/src/libs/renderer/src/export/custom-nodes.d.ts +88 -0
  836. package/src/libs/renderer/src/export/custom-nodes.js +237 -0
  837. package/src/libs/renderer/src/export/index.d.ts +14 -0
  838. package/src/libs/renderer/src/export/index.js +30 -0
  839. package/src/libs/renderer/src/export/node-raster.d.ts +60 -0
  840. package/src/libs/renderer/src/export/node-raster.js +161 -0
  841. package/src/libs/renderer/src/export/pagination.d.ts +116 -0
  842. package/src/libs/renderer/src/export/pagination.js +245 -0
  843. package/src/libs/renderer/src/export/pdf/flate.d.ts +13 -0
  844. package/src/libs/renderer/src/export/pdf/flate.js +287 -0
  845. package/src/libs/renderer/src/export/pdf/index.d.ts +4 -0
  846. package/src/libs/renderer/src/export/pdf/index.js +15 -0
  847. package/src/libs/renderer/src/export/pdf/pdf-export.d.ts +64 -0
  848. package/src/libs/renderer/src/export/pdf/pdf-export.js +1076 -0
  849. package/src/libs/renderer/src/export/pdf/pdf-path.d.ts +17 -0
  850. package/src/libs/renderer/src/export/pdf/pdf-path.js +85 -0
  851. package/src/libs/renderer/src/export/pdf/pdf-primitives.d.ts +115 -0
  852. package/src/libs/renderer/src/export/pdf/pdf-primitives.js +338 -0
  853. package/src/libs/renderer/src/export/pdf/png.d.ts +25 -0
  854. package/src/libs/renderer/src/export/pdf/png.js +596 -0
  855. package/src/libs/renderer/src/export/raster.d.ts +42 -0
  856. package/src/libs/renderer/src/export/raster.js +126 -0
  857. package/src/libs/renderer/src/export/round-trip.d.ts +83 -0
  858. package/src/libs/renderer/src/export/round-trip.js +432 -0
  859. package/src/libs/renderer/src/export/scope.d.ts +16 -0
  860. package/src/libs/renderer/src/export/scope.js +69 -0
  861. package/src/libs/renderer/src/export/style-flattener.d.ts +23 -0
  862. package/src/libs/renderer/src/export/style-flattener.js +144 -0
  863. package/src/libs/renderer/src/export/svg-export.d.ts +123 -0
  864. package/src/libs/renderer/src/export/svg-export.js +178 -0
  865. package/src/libs/renderer/src/export/vnode-serializer.d.ts +75 -0
  866. package/src/libs/renderer/src/export/vnode-serializer.js +344 -0
  867. package/src/libs/renderer/src/ext/capabilities.d.ts +178 -0
  868. package/src/libs/renderer/src/ext/capabilities.js +22 -0
  869. package/src/libs/renderer/src/ext/capability-factory.d.ts +44 -0
  870. package/src/libs/renderer/src/ext/capability-factory.js +194 -0
  871. package/src/libs/renderer/src/ext/components/attach.d.ts +66 -0
  872. package/src/libs/renderer/src/ext/components/attach.js +112 -0
  873. package/src/libs/renderer/src/ext/components/background.d.ts +84 -0
  874. package/src/libs/renderer/src/ext/components/background.js +202 -0
  875. package/src/libs/renderer/src/ext/components/controls.d.ts +49 -0
  876. package/src/libs/renderer/src/ext/components/controls.js +144 -0
  877. package/src/libs/renderer/src/ext/components/minimap.d.ts +78 -0
  878. package/src/libs/renderer/src/ext/components/minimap.js +326 -0
  879. package/src/libs/renderer/src/ext/diagram-registry.d.ts +109 -0
  880. package/src/libs/renderer/src/ext/diagram-registry.js +303 -0
  881. package/src/libs/renderer/src/ext/disposable.d.ts +51 -0
  882. package/src/libs/renderer/src/ext/disposable.js +104 -0
  883. package/src/libs/renderer/src/ext/extension-host.d.ts +144 -0
  884. package/src/libs/renderer/src/ext/extension-host.js +272 -0
  885. package/src/libs/renderer/src/ext/index.d.ts +62 -0
  886. package/src/libs/renderer/src/ext/index.js +91 -0
  887. package/src/libs/renderer/src/ext/link-pipeline.d.ts +195 -0
  888. package/src/libs/renderer/src/ext/link-pipeline.js +431 -0
  889. package/src/libs/renderer/src/ext/manifest.d.ts +73 -0
  890. package/src/libs/renderer/src/ext/manifest.js +149 -0
  891. package/src/libs/renderer/src/ext/node-component.d.ts +114 -0
  892. package/src/libs/renderer/src/ext/node-component.js +290 -0
  893. package/src/libs/renderer/src/ext/plugins-loader.d.ts +1 -0
  894. package/src/libs/renderer/src/ext/plugins-loader.js +18 -0
  895. package/src/libs/renderer/src/ext/portal.d.ts +129 -0
  896. package/src/libs/renderer/src/ext/portal.js +267 -0
  897. package/src/libs/renderer/src/ext/public-api.d.ts +101 -0
  898. package/src/libs/renderer/src/ext/public-api.js +201 -0
  899. package/src/libs/renderer/src/ext/registry-scope.d.ts +93 -0
  900. package/src/libs/renderer/src/ext/registry-scope.js +142 -0
  901. package/src/libs/renderer/src/ext/tools.d.ts +164 -0
  902. package/src/libs/renderer/src/ext/tools.js +170 -0
  903. package/src/libs/renderer/src/index.d.ts +34 -0
  904. package/src/libs/renderer/src/index.js +108 -0
  905. package/src/libs/renderer/src/instance/create-diagram.d.ts +385 -0
  906. package/src/libs/renderer/src/instance/create-diagram.js +1150 -0
  907. package/src/libs/renderer/src/instance/diagram-instance.d.ts +48 -0
  908. package/src/libs/renderer/src/instance/diagram-instance.js +51 -0
  909. package/src/libs/renderer/src/instance/dom-event-binder.d.ts +394 -0
  910. package/src/libs/renderer/src/instance/dom-event-binder.js +2104 -0
  911. package/src/libs/renderer/src/instance/index.d.ts +5 -0
  912. package/src/libs/renderer/src/instance/index.js +13 -0
  913. package/src/libs/renderer/src/instance/layers.d.ts +31 -0
  914. package/src/libs/renderer/src/instance/layers.js +43 -0
  915. package/src/libs/renderer/src/instance/model-input.d.ts +229 -0
  916. package/src/libs/renderer/src/instance/model-input.js +325 -0
  917. package/src/libs/renderer/src/instance/render-scheduler.d.ts +79 -0
  918. package/src/libs/renderer/src/instance/render-scheduler.js +96 -0
  919. package/src/libs/renderer/src/instance/wheel-scroll-yield.d.ts +38 -0
  920. package/src/libs/renderer/src/instance/wheel-scroll-yield.js +118 -0
  921. package/src/libs/renderer/src/interaction/ControlPointEditor.d.ts +160 -0
  922. package/src/libs/renderer/src/interaction/ControlPointEditor.js +360 -0
  923. package/src/libs/renderer/src/interaction/WaypointEditor.d.ts +133 -0
  924. package/src/libs/renderer/src/interaction/WaypointEditor.js +263 -0
  925. package/src/libs/renderer/src/interaction/highlighters.d.ts +88 -0
  926. package/src/libs/renderer/src/interaction/highlighters.js +212 -0
  927. package/src/libs/renderer/src/interaction/in-place-editor.d.ts +63 -0
  928. package/src/libs/renderer/src/interaction/in-place-editor.js +141 -0
  929. package/src/libs/renderer/src/interaction/index.d.ts +11 -0
  930. package/src/libs/renderer/src/interaction/index.js +29 -0
  931. package/src/libs/renderer/src/interaction/ink-overlay.d.ts +53 -0
  932. package/src/libs/renderer/src/interaction/ink-overlay.js +154 -0
  933. package/src/libs/renderer/src/interaction/interaction-controller.d.ts +555 -0
  934. package/src/libs/renderer/src/interaction/interaction-controller.js +1733 -0
  935. package/src/libs/renderer/src/interaction/keyboard-navigation.d.ts +223 -0
  936. package/src/libs/renderer/src/interaction/keyboard-navigation.js +885 -0
  937. package/src/libs/renderer/src/interaction/selection-tools.d.ts +343 -0
  938. package/src/libs/renderer/src/interaction/selection-tools.js +918 -0
  939. package/src/libs/renderer/src/interaction/snapping.d.ts +210 -0
  940. package/src/libs/renderer/src/interaction/snapping.js +569 -0
  941. package/src/libs/renderer/src/interaction/touch-gestures.d.ts +160 -0
  942. package/src/libs/renderer/src/interaction/touch-gestures.js +549 -0
  943. package/src/libs/renderer/src/interaction/whiteboard-tools.d.ts +171 -0
  944. package/src/libs/renderer/src/interaction/whiteboard-tools.js +476 -0
  945. package/src/libs/renderer/src/lazy/host-culling.d.ts +116 -0
  946. package/src/libs/renderer/src/lazy/host-culling.js +135 -0
  947. package/src/libs/renderer/src/lazy/index.d.ts +7 -0
  948. package/src/libs/renderer/src/lazy/index.js +28 -0
  949. package/src/libs/renderer/src/lazy/progressive-mounter.d.ts +80 -0
  950. package/src/libs/renderer/src/lazy/progressive-mounter.js +264 -0
  951. package/src/libs/renderer/src/lazy/types.d.ts +43 -0
  952. package/src/libs/renderer/src/lazy/types.js +14 -0
  953. package/src/libs/renderer/src/lazy/view-lifecycle.d.ts +97 -0
  954. package/src/libs/renderer/src/lazy/view-lifecycle.js +221 -0
  955. package/src/libs/renderer/src/perf/index.d.ts +2 -0
  956. package/src/libs/renderer/src/perf/index.js +7 -0
  957. package/src/libs/renderer/src/perf/perf-hud.d.ts +46 -0
  958. package/src/libs/renderer/src/perf/perf-hud.js +105 -0
  959. package/src/libs/renderer/src/perf/quality-governor.d.ts +77 -0
  960. package/src/libs/renderer/src/perf/quality-governor.js +154 -0
  961. package/src/libs/renderer/src/platform/index.d.ts +1 -0
  962. package/src/libs/renderer/src/platform/index.js +5 -0
  963. package/src/libs/renderer/src/platform/platform.d.ts +34 -0
  964. package/src/libs/renderer/src/platform/platform.js +64 -0
  965. package/src/libs/renderer/src/presence/bind-presence.d.ts +51 -0
  966. package/src/libs/renderer/src/presence/bind-presence.js +144 -0
  967. package/src/libs/renderer/src/presence/index.d.ts +4 -0
  968. package/src/libs/renderer/src/presence/index.js +18 -0
  969. package/src/libs/renderer/src/presence/presence-overlay.d.ts +121 -0
  970. package/src/libs/renderer/src/presence/presence-overlay.js +465 -0
  971. package/src/libs/renderer/src/presentation/index.d.ts +3 -0
  972. package/src/libs/renderer/src/presentation/index.js +14 -0
  973. package/src/libs/renderer/src/presentation/presentation.d.ts +94 -0
  974. package/src/libs/renderer/src/presentation/presentation.js +158 -0
  975. package/src/libs/renderer/src/presentation/viewport-channel.d.ts +78 -0
  976. package/src/libs/renderer/src/presentation/viewport-channel.js +86 -0
  977. package/src/libs/renderer/src/services/animation-lifecycle.d.ts +153 -0
  978. package/src/libs/renderer/src/services/animation-lifecycle.js +326 -0
  979. package/src/libs/renderer/src/services/animation-performance.service.d.ts +191 -0
  980. package/src/libs/renderer/src/services/animation-performance.service.js +371 -0
  981. package/src/libs/renderer/src/services/animation-sequencer.d.ts +226 -0
  982. package/src/libs/renderer/src/services/animation-sequencer.js +379 -0
  983. package/src/libs/renderer/src/services/animation.service.d.ts +182 -0
  984. package/src/libs/renderer/src/services/animation.service.js +858 -0
  985. package/src/libs/renderer/src/services/custom-animation-registry.d.ts +182 -0
  986. package/src/libs/renderer/src/services/custom-animation-registry.js +361 -0
  987. package/src/libs/renderer/src/ssr/index.d.ts +1 -0
  988. package/src/libs/renderer/src/ssr/index.js +6 -0
  989. package/src/libs/renderer/src/ssr/render-to-static.d.ts +91 -0
  990. package/src/libs/renderer/src/ssr/render-to-static.js +81 -0
  991. package/src/libs/renderer/src/svg/ArrowRenderer.d.ts +159 -0
  992. package/src/libs/renderer/src/svg/ArrowRenderer.js +723 -0
  993. package/src/libs/renderer/src/svg/JumpPointDetector.d.ts +79 -0
  994. package/src/libs/renderer/src/svg/JumpPointDetector.js +176 -0
  995. package/src/libs/renderer/src/svg/JumpPointRenderer.d.ts +59 -0
  996. package/src/libs/renderer/src/svg/JumpPointRenderer.js +309 -0
  997. package/src/libs/renderer/src/svg/LabelRenderer.d.ts +76 -0
  998. package/src/libs/renderer/src/svg/LabelRenderer.js +273 -0
  999. package/src/libs/renderer/src/svg/auto-size.d.ts +76 -0
  1000. package/src/libs/renderer/src/svg/auto-size.js +142 -0
  1001. package/src/libs/renderer/src/svg/channel-nudging.d.ts +34 -0
  1002. package/src/libs/renderer/src/svg/channel-nudging.js +226 -0
  1003. package/src/libs/renderer/src/svg/edge-optimizer.d.ts +228 -0
  1004. package/src/libs/renderer/src/svg/edge-optimizer.js +606 -0
  1005. package/src/libs/renderer/src/svg/edge-templates.d.ts +152 -0
  1006. package/src/libs/renderer/src/svg/edge-templates.js +233 -0
  1007. package/src/libs/renderer/src/svg/html-node.d.ts +50 -0
  1008. package/src/libs/renderer/src/svg/html-node.js +214 -0
  1009. package/src/libs/renderer/src/svg/index.d.ts +25 -0
  1010. package/src/libs/renderer/src/svg/index.js +32 -0
  1011. package/src/libs/renderer/src/svg/link-fanout.d.ts +127 -0
  1012. package/src/libs/renderer/src/svg/link-fanout.js +333 -0
  1013. package/src/libs/renderer/src/svg/link-hit-test.d.ts +142 -0
  1014. package/src/libs/renderer/src/svg/link-hit-test.js +182 -0
  1015. package/src/libs/renderer/src/svg/motion-tracker.d.ts +18 -0
  1016. package/src/libs/renderer/src/svg/motion-tracker.js +71 -0
  1017. package/src/libs/renderer/src/svg/node-sizing.d.ts +51 -0
  1018. package/src/libs/renderer/src/svg/node-sizing.js +65 -0
  1019. package/src/libs/renderer/src/svg/node-toolbar.d.ts +30 -0
  1020. package/src/libs/renderer/src/svg/node-toolbar.js +45 -0
  1021. package/src/libs/renderer/src/svg/notation-shapes.d.ts +2 -0
  1022. package/src/libs/renderer/src/svg/notation-shapes.js +126 -0
  1023. package/src/libs/renderer/src/svg/paint-servers.d.ts +49 -0
  1024. package/src/libs/renderer/src/svg/paint-servers.js +225 -0
  1025. package/src/libs/renderer/src/svg/panel.d.ts +115 -0
  1026. package/src/libs/renderer/src/svg/panel.js +353 -0
  1027. package/src/libs/renderer/src/svg/path-outline.d.ts +35 -0
  1028. package/src/libs/renderer/src/svg/path-outline.js +134 -0
  1029. package/src/libs/renderer/src/svg/port-glyph.d.ts +27 -0
  1030. package/src/libs/renderer/src/svg/port-glyph.js +97 -0
  1031. package/src/libs/renderer/src/svg/port-label.d.ts +74 -0
  1032. package/src/libs/renderer/src/svg/port-label.js +201 -0
  1033. package/src/libs/renderer/src/svg/port-layout.d.ts +50 -0
  1034. package/src/libs/renderer/src/svg/port-layout.js +212 -0
  1035. package/src/libs/renderer/src/svg/port-positioning.d.ts +33 -0
  1036. package/src/libs/renderer/src/svg/port-positioning.js +101 -0
  1037. package/src/libs/renderer/src/svg/port-spots.d.ts +69 -0
  1038. package/src/libs/renderer/src/svg/port-spots.js +154 -0
  1039. package/src/libs/renderer/src/svg/route-memo.d.ts +63 -0
  1040. package/src/libs/renderer/src/svg/route-memo.js +206 -0
  1041. package/src/libs/renderer/src/svg/route-solver-bridge.d.ts +48 -0
  1042. package/src/libs/renderer/src/svg/route-solver-bridge.js +151 -0
  1043. package/src/libs/renderer/src/svg/shape-registry.d.ts +189 -0
  1044. package/src/libs/renderer/src/svg/shape-registry.js +1104 -0
  1045. package/src/libs/renderer/src/svg/stroke-layer.d.ts +36 -0
  1046. package/src/libs/renderer/src/svg/stroke-layer.js +183 -0
  1047. package/src/libs/renderer/src/svg/svg-renderer.d.ts +1737 -0
  1048. package/src/libs/renderer/src/svg/svg-renderer.js +7772 -0
  1049. package/src/libs/renderer/src/svg/text-block.d.ts +54 -0
  1050. package/src/libs/renderer/src/svg/text-block.js +171 -0
  1051. package/src/libs/renderer/src/themes/color-mode.d.ts +81 -0
  1052. package/src/libs/renderer/src/themes/color-mode.js +158 -0
  1053. package/src/libs/renderer/src/themes/contrast.d.ts +67 -0
  1054. package/src/libs/renderer/src/themes/contrast.js +215 -0
  1055. package/src/libs/renderer/src/themes/default-dark-theme.d.ts +6 -0
  1056. package/src/libs/renderer/src/themes/default-dark-theme.js +126 -0
  1057. package/src/libs/renderer/src/themes/default-light-theme.d.ts +6 -0
  1058. package/src/libs/renderer/src/themes/default-light-theme.js +168 -0
  1059. package/src/libs/renderer/src/themes/default-theme-set.d.ts +10 -0
  1060. package/src/libs/renderer/src/themes/default-theme-set.js +25 -0
  1061. package/src/libs/renderer/src/themes/high-contrast-theme.d.ts +5 -0
  1062. package/src/libs/renderer/src/themes/high-contrast-theme.js +170 -0
  1063. package/src/libs/renderer/src/themes/index.d.ts +22 -0
  1064. package/src/libs/renderer/src/themes/index.js +93 -0
  1065. package/src/libs/renderer/src/themes/style-cascade.d.ts +23 -0
  1066. package/src/libs/renderer/src/themes/style-cascade.js +194 -0
  1067. package/src/libs/renderer/src/themes/style-registry.d.ts +40 -0
  1068. package/src/libs/renderer/src/themes/style-registry.js +129 -0
  1069. package/src/libs/renderer/src/themes/theme-a11y.d.ts +65 -0
  1070. package/src/libs/renderer/src/themes/theme-a11y.js +256 -0
  1071. package/src/libs/renderer/src/themes/theme-css.d.ts +30 -0
  1072. package/src/libs/renderer/src/themes/theme-css.js +304 -0
  1073. package/src/libs/renderer/src/themes/theme-ref.d.ts +63 -0
  1074. package/src/libs/renderer/src/themes/theme-ref.js +206 -0
  1075. package/src/libs/renderer/src/themes/theme-vars.d.ts +49 -0
  1076. package/src/libs/renderer/src/themes/theme-vars.js +112 -0
  1077. package/src/libs/renderer/src/themes/token-bridge.d.ts +62 -0
  1078. package/src/libs/renderer/src/themes/token-bridge.js +354 -0
  1079. package/src/libs/renderer/src/types/geometry.types.d.ts +10 -0
  1080. package/src/libs/renderer/src/types/geometry.types.js +3 -0
  1081. package/src/libs/renderer/src/types/index.d.ts +5 -0
  1082. package/src/libs/renderer/src/types/index.js +14 -0
  1083. package/src/libs/renderer/src/types/property-schema/conditions.d.ts +96 -0
  1084. package/src/libs/renderer/src/types/property-schema/conditions.js +8 -0
  1085. package/src/libs/renderer/src/types/property-schema/editor-types.d.ts +310 -0
  1086. package/src/libs/renderer/src/types/property-schema/editor-types.js +8 -0
  1087. package/src/libs/renderer/src/types/property-schema/groups.d.ts +58 -0
  1088. package/src/libs/renderer/src/types/property-schema/groups.js +8 -0
  1089. package/src/libs/renderer/src/types/property-schema/index.d.ts +101 -0
  1090. package/src/libs/renderer/src/types/property-schema/index.js +98 -0
  1091. package/src/libs/renderer/src/types/property-schema/property-definition.d.ts +117 -0
  1092. package/src/libs/renderer/src/types/property-schema/property-definition.js +8 -0
  1093. package/src/libs/renderer/src/types/property-schema/schema.d.ts +108 -0
  1094. package/src/libs/renderer/src/types/property-schema/schema.js +8 -0
  1095. package/src/libs/renderer/src/types/property-schema/validation.d.ts +181 -0
  1096. package/src/libs/renderer/src/types/property-schema/validation.js +8 -0
  1097. package/src/libs/renderer/src/types/renderer.interface.d.ts +623 -0
  1098. package/src/libs/renderer/src/types/renderer.interface.js +3 -0
  1099. package/src/libs/renderer/src/types/theme.types.d.ts +305 -0
  1100. package/src/libs/renderer/src/types/theme.types.js +3 -0
  1101. package/src/libs/renderer/src/types/vnode.types.d.ts +139 -0
  1102. package/src/libs/renderer/src/types/vnode.types.js +3 -0
  1103. package/src/libs/renderer/src/utils/animation-presets.d.ts +310 -0
  1104. package/src/libs/renderer/src/utils/animation-presets.js +406 -0
  1105. package/src/libs/renderer/src/utils/animation-priority.d.ts +118 -0
  1106. package/src/libs/renderer/src/utils/animation-priority.js +258 -0
  1107. package/src/libs/renderer/src/utils/animation-utils.d.ts +159 -0
  1108. package/src/libs/renderer/src/utils/animation-utils.js +323 -0
  1109. package/src/libs/renderer/src/utils/lru-cache.d.ts +34 -0
  1110. package/src/libs/renderer/src/utils/lru-cache.js +72 -0
  1111. package/src/libs/renderer/src/viewport/index.d.ts +1 -0
  1112. package/src/libs/renderer/src/viewport/index.js +6 -0
  1113. package/src/libs/renderer/src/viewport/viewport-controller.d.ts +198 -0
  1114. package/src/libs/renderer/src/viewport/viewport-controller.js +315 -0
  1115. package/src/libs/renderer/src/vnode/container-id-generator.d.ts +94 -0
  1116. package/src/libs/renderer/src/vnode/container-id-generator.js +110 -0
  1117. package/src/libs/renderer/src/vnode/foreign-object.d.ts +157 -0
  1118. package/src/libs/renderer/src/vnode/foreign-object.js +167 -0
  1119. package/src/libs/renderer/src/vnode/index.d.ts +56 -0
  1120. package/src/libs/renderer/src/vnode/index.js +78 -0
  1121. package/src/libs/renderer/src/vnode/patch.d.ts +189 -0
  1122. package/src/libs/renderer/src/vnode/patch.js +564 -0
  1123. package/src/index.js.map +0 -1
  1124. package/src/lib/dashboard-kit/dashboard.js.map +0 -1
  1125. package/src/lib/dashboard-kit/grid-binder.js.map +0 -1
  1126. package/src/lib/dashboard-kit/grid-mapping.js.map +0 -1
  1127. package/src/lib/dashboard-kit/index.js.map +0 -1
  1128. package/src/lib/dashboard-kit/styles.js.map +0 -1
  1129. package/src/lib/dashboard-kit/widgets.js.map +0 -1
  1130. package/src/lib/diagram-kit/card.js.map +0 -1
  1131. package/src/lib/diagram-kit/editing.js.map +0 -1
  1132. package/src/lib/diagram-kit/er.js.map +0 -1
  1133. package/src/lib/diagram-kit/handles.js.map +0 -1
  1134. package/src/lib/diagram-kit/index.js.map +0 -1
  1135. package/src/lib/diagram-kit/rows.js.map +0 -1
  1136. package/src/lib/diagram-kit/styles.js.map +0 -1
  1137. package/src/lib/diagram-kit/uml.js.map +0 -1
  1138. package/src/lib/diagram-kit/update.js.map +0 -1
  1139. package/src/lib/grafloria-flow-element.js.map +0 -1
  1140. package/src/lib/grafloria.js.map +0 -1
  1141. package/src/lib/load.js.map +0 -1
  1142. package/src/lib/node-type-registry.js.map +0 -1
  1143. package/src/lib/stencil-kit/builders.js.map +0 -1
  1144. package/src/lib/stencil-kit/card-builders.js.map +0 -1
  1145. package/src/lib/stencil-kit/index.js.map +0 -1
  1146. package/src/lib/stencil-kit/palette.js.map +0 -1
  1147. package/src/lib/stencil-kit/shape-data.js.map +0 -1
  1148. package/src/lib/stencil-kit/styles.js.map +0 -1
@@ -0,0 +1,1733 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InteractionController = void 0;
4
+ const engine_1 = require("@grafloria/engine");
5
+ // Wave 6: THE port-position function — hit-test and magnet where you DRAW.
6
+ const port_positioning_1 = require("../svg/port-positioning");
7
+ const WaypointEditor_1 = require("./WaypointEditor");
8
+ const ControlPointEditor_1 = require("./ControlPointEditor");
9
+ const ArrowRenderer_1 = require("../svg/ArrowRenderer");
10
+ const link_hit_test_1 = require("../svg/link-hit-test");
11
+ // wave10/gallery: the HOST's connection-veto registry. See
12
+ // installHostConnectionValidatorBridge() — the drag path never asked it.
13
+ const tools_1 = require("../ext/tools");
14
+ /**
15
+ * InteractionController — the framework-agnostic interaction brain.
16
+ *
17
+ * Owns all pointer/keyboard-driven interaction LOGIC for a diagram: hover
18
+ * detection, port connection dragging, link endpoint reconnection, inline label
19
+ * repositioning, and waypoint / control-point editing.
20
+ *
21
+ * ## Framework contract
22
+ *
23
+ * This class answers **"WHAT changed?"** — never **"who should re-render?"**.
24
+ * Every handler returns a boolean (or a value) telling the host whether a
25
+ * re-render is warranted; the host framework decides how to act on that:
26
+ *
27
+ * - Angular → `cdr.markForCheck()` (see `InteractionHandlerService`)
28
+ * - React → `setState` / `useSyncExternalStore`
29
+ * - Vue → touch a `ref`
30
+ * - Vanilla → call your own `render()`
31
+ *
32
+ * It therefore has **zero framework imports** (no Angular, no DOM beyond the
33
+ * ambient `performance.now()` clock) and is instantiated with a plain `new`.
34
+ * It takes WORLD coordinates only: converting client/screen pixels into world
35
+ * space is the job of {@link ViewportController}, so this class never touches
36
+ * an event, an element, or a bounding rect.
37
+ *
38
+ * Supports three interaction modes (driven by the engine's interaction config):
39
+ * - DIRECT: Drag node body to move, drag port to connect
40
+ * - DELIBERATE: Select node first, then drag to move
41
+ * - SMART: Visio-style with hover-based port visibility
42
+ *
43
+ * The Angular `InteractionHandlerService` is a thin `@Injectable` subclass of
44
+ * this class and adds no behaviour of its own.
45
+ */
46
+ class InteractionController {
47
+ /**
48
+ * Wave 9 — Card 7. Is the document locked?
49
+ *
50
+ * The InteractionController is the LAST place a read-only bypass could hide,
51
+ * because it is the one layer that mutates the model DIRECTLY — it never touches
52
+ * the CommandManager. Most of its writes now hit the model-level guards anyway,
53
+ * but `moveControlPoint` writes `link.segments` as a RAW PUBLIC FIELD, which no
54
+ * model guard can see. So the refusal has to be here as well.
55
+ */
56
+ isReadonlyEngine(engine) {
57
+ var _a;
58
+ return ((_a = engine === null || engine === void 0 ? void 0 : engine.getDiagram()) === null || _a === void 0 ? void 0 : _a.isReadonly()) === true;
59
+ }
60
+ /** Read-only probe for the methods that are handed a link but no engine. */
61
+ isReadonlyLink(link) {
62
+ var _a;
63
+ return ((_a = link === null || link === void 0 ? void 0 : link.diagram) === null || _a === void 0 ? void 0 : _a.isReadonly()) === true;
64
+ }
65
+ /** Grow every hit target by `world` units (0 = mouse-precision, the default). */
66
+ setHitSlop(world) {
67
+ this.hitSlop = Math.max(0, world);
68
+ }
69
+ getHitSlop() {
70
+ return this.hitSlop;
71
+ }
72
+ setLinkHitAreaWidth(width) {
73
+ this.linkHitAreaWidthConfig = Math.max(0, width);
74
+ }
75
+ constructor() {
76
+ /**
77
+ * Shared arrow renderer used only for canonical arrow tip-offset geometry
78
+ * when computing arrowhead hit anchors (see {@link buildLinkHitOptions}).
79
+ */
80
+ this.arrowRenderer = new ArrowRenderer_1.ArrowRenderer();
81
+ /**
82
+ * Wave 9 — Card 2. Extra hit radius in WORLD units, granted while a TOUCH
83
+ * pointer owns the gesture (the binder sets it on touch down and clears it on
84
+ * up). A 5px port is not hittable with a fingertip; this is what makes ports,
85
+ * waypoints and control-point handles touch-sized without changing how any of
86
+ * them RENDER — the visual stays crisp, only the catchment grows.
87
+ *
88
+ * World, not screen: every hit test here is world-space, so a screen-px slop
89
+ * would shrink to nothing exactly when you are zoomed out and the targets are
90
+ * already smallest.
91
+ */
92
+ this.hitSlop = 0;
93
+ /**
94
+ * The renderer's configured interaction-stroke width (`linkHitAreaWidth`).
95
+ * The link grab distance derives from it so the painted invitation and the
96
+ * accepted press stay the SAME geometry — createDiagram syncs it whenever
97
+ * the host overrides the renderer default.
98
+ */
99
+ this.linkHitAreaWidthConfig = link_hit_test_1.DEFAULT_LINK_HIT_AREA_WIDTH;
100
+ /**
101
+ * Current hover state
102
+ */
103
+ this.hoveredNode = null;
104
+ this.hoveredPort = null;
105
+ this.hoveredLink = null;
106
+ /**
107
+ * Connection drag state
108
+ */
109
+ this.isConnecting = false;
110
+ this.connectionSourcePort = null;
111
+ /**
112
+ * Link reconnection state
113
+ */
114
+ this.isReconnectingLink = false;
115
+ this.reconnectingLink = null;
116
+ this.reconnectingEndpoint = null;
117
+ /** Wave 2: current cursor position while dragging a reconnecting endpoint. */
118
+ this.reconnectingMousePoint = null;
119
+ /**
120
+ * Wave 2 (Edges & links): inline label drag-reposition state. While active,
121
+ * mouse moves remap the cursor to a (position 0-1, offset) pair on the model
122
+ * so the label survives re-routing. See {@link computeLabelDragUpdate}.
123
+ */
124
+ this.isDraggingLabel = false;
125
+ this.editingLabelLink = null;
126
+ this.editingLabelIndex = null;
127
+ /**
128
+ * Phase 2.3a: Waypoint editing state
129
+ */
130
+ this.isDraggingWaypoint = false;
131
+ this.editingLink = null;
132
+ this.editingWaypointIndex = null;
133
+ /**
134
+ * wave12: the link's points when a waypoint drag STARTED, so endWaypointDrag can commit
135
+ * the whole gesture as one undoable SetLinkPointsCommand (FROM→TO). Absent between drags.
136
+ */
137
+ this.waypointDragStartPoints = null;
138
+ this.waypointEditor = null;
139
+ this.hoveredWaypointIndex = null;
140
+ this.hoveredWaypointLink = null;
141
+ /**
142
+ * Phase 2.3b: Control point editing state
143
+ */
144
+ this.isDraggingControlPoint = false;
145
+ this.editingControlPointLink = null;
146
+ this.editingControlPointSegmentIndex = null;
147
+ this.editingControlPointType = null;
148
+ this.controlPointEditor = null;
149
+ this.hoveredControlPointSegmentIndex = null;
150
+ this.hoveredControlPointType = null;
151
+ this.hoveredControlPointLink = null;
152
+ /**
153
+ * Phase 5: Performance optimization - debounce hover detection
154
+ */
155
+ this.hoverDebounceTimer = null;
156
+ this.HOVER_DEBOUNCE_MS = 16; // ~60fps
157
+ /**
158
+ * Phase 5: Performance monitoring
159
+ */
160
+ this.performanceMetrics = {
161
+ hoverDetectionTime: 0,
162
+ connectionUpdateTime: 0,
163
+ portHitTestTime: 0,
164
+ };
165
+ /**
166
+ * Phase 5: Port hit test cache for performance
167
+ */
168
+ this.portHitCache = new Map();
169
+ this.portHitCacheInvalidated = false;
170
+ /**
171
+ * ==========================================================================
172
+ * wave10/gallery BUG FIX — `registerConnectionValidator` did not veto a DRAG.
173
+ * ==========================================================================
174
+ *
175
+ * `ext/tools.ts` documents its registry as: "Validators registered here are
176
+ * consulted wherever the renderer offers a connection", and its whole reason
177
+ * for existing is that "a HOST had no way to inject 'an Order may not connect
178
+ * to an Invoice'".
179
+ *
180
+ * It was consulted in exactly ONE place: `canConnectPorts()` in snapping.ts —
181
+ * i.e. proximity-connect and keyboard-connect. The MOUSE DRAG, which is how
182
+ * essentially every connection in every diagram ever made actually gets made,
183
+ * never asked. You could register a validator that rejected every connection
184
+ * in the graph, drag from a port to a port, and get the link.
185
+ *
186
+ * The engine has its own validator list on `ConnectionStateManager` — which
187
+ * the drag DOES consult, and which also feeds `calculateValidTargets()`, so a
188
+ * veto registered there also dims the invalid ports during the drag. So the
189
+ * fix is a bridge, not a second enforcement point: forward the host registry
190
+ * into the engine's list, once per engine. With no validators registered
191
+ * `isValidConnection()` returns `{ valid: true }`, so the bridge costs a
192
+ * function call on a path that is already doing a hit-test.
193
+ */
194
+ this.validatorBridgedEngines = new WeakSet();
195
+ // Phase 2.3a: Initialize waypoint editor with default config
196
+ this.waypointEditor = new WaypointEditor_1.WaypointEditor({
197
+ snapToGrid: false,
198
+ gridSize: 20,
199
+ removeOnDoubleClick: true,
200
+ handleRadius: 5,
201
+ handleColor: '#3b82f6',
202
+ handleStrokeColor: '#ffffff',
203
+ minDistanceFromEndpoints: 30,
204
+ clickDetectionRadius: 10,
205
+ });
206
+ // Phase 2.3b: Initialize control point editor with default config
207
+ this.controlPointEditor = new ControlPointEditor_1.ControlPointEditor({
208
+ snapToGrid: false,
209
+ gridSize: 20,
210
+ handleRadius: 6,
211
+ handleColor: '#10b981',
212
+ handleStrokeColor: '#ffffff',
213
+ controlLineColor: '#6b7280',
214
+ controlLineWidth: 1,
215
+ controlLineDash: [5, 5],
216
+ clickDetectionRadius: 10,
217
+ showControlLines: true,
218
+ symmetricControls: false,
219
+ });
220
+ }
221
+ /**
222
+ * Phase 5: Dispose and cleanup resources
223
+ */
224
+ dispose() {
225
+ if (this.hoverDebounceTimer) {
226
+ clearTimeout(this.hoverDebounceTimer);
227
+ this.hoverDebounceTimer = null;
228
+ }
229
+ this.portHitCache.clear();
230
+ this.hoveredNode = null;
231
+ this.hoveredPort = null;
232
+ this.hoveredLink = null;
233
+ // BUGFIX (wave 3): `isConnecting` was never cleared here, so a disposed
234
+ // controller reported `isInteracting() === true` forever — surfaced by the
235
+ // first framework-free dispose test. Cleared alongside its source port.
236
+ this.isConnecting = false;
237
+ this.connectionSourcePort = null;
238
+ this.reconnectingLink = null;
239
+ this.reconnectingEndpoint = null;
240
+ this.reconnectingMousePoint = null;
241
+ this.isReconnectingLink = false;
242
+ // Wave 2: Clean up label drag state
243
+ this.isDraggingLabel = false;
244
+ this.editingLabelLink = null;
245
+ this.editingLabelIndex = null;
246
+ // Phase 2.3a: Clean up waypoint editing state
247
+ this.editingLink = null;
248
+ this.editingWaypointIndex = null;
249
+ this.isDraggingWaypoint = false;
250
+ this.hoveredWaypointIndex = null;
251
+ this.hoveredWaypointLink = null;
252
+ // Phase 2.3b: Clean up control point editing state
253
+ this.editingControlPointLink = null;
254
+ this.editingControlPointSegmentIndex = null;
255
+ this.editingControlPointType = null;
256
+ this.isDraggingControlPoint = false;
257
+ this.hoveredControlPointSegmentIndex = null;
258
+ this.hoveredControlPointType = null;
259
+ this.hoveredControlPointLink = null;
260
+ }
261
+ /**
262
+ * Phase 5: Get performance metrics
263
+ */
264
+ getPerformanceMetrics() {
265
+ return Object.assign({}, this.performanceMetrics);
266
+ }
267
+ /**
268
+ * Phase 5: Invalidate port hit cache (call when nodes move or ports change)
269
+ */
270
+ invalidatePortHitCache() {
271
+ this.portHitCacheInvalidated = true;
272
+ }
273
+ /**
274
+ * Phase 3: Handle mouse move for hover detection
275
+ * Phase 5: Enhanced with performance monitoring and validation
276
+ * Updates hover states for nodes, ports, and links
277
+ * CRITICAL FIX: Added comprehensive debugging
278
+ */
279
+ handleMouseMove(worldX, worldY, engine) {
280
+ var _a, _b;
281
+ // Phase 5: Validate inputs
282
+ if (!engine || !isFinite(worldX) || !isFinite(worldY)) {
283
+ return false;
284
+ }
285
+ const diagram = engine.getDiagram();
286
+ if (!diagram)
287
+ return false;
288
+ // Phase 5: Performance monitoring
289
+ const startTime = performance.now();
290
+ const config = engine.getInteractionConfig();
291
+ let needsRender = false;
292
+ // Find what's under the cursor
293
+ const nodeAtPosition = diagram.getNodeAtPosition(worldX, worldY);
294
+ const portAtPosition = this.findPortAtPosition(worldX, worldY, diagram, engine);
295
+ const linkAtPosition = this.findLinkAtPosition(worldX, worldY, diagram);
296
+ // CRITICAL FIX: Debug logging for port detection
297
+ const debugPortDetection = false; // Disabled - working correctly now
298
+ if (debugPortDetection && (portAtPosition || nodeAtPosition)) {
299
+ console.log('🔍 Hover detection:', {
300
+ worldPos: { x: worldX.toFixed(1), y: worldY.toFixed(1) },
301
+ node: (nodeAtPosition === null || nodeAtPosition === void 0 ? void 0 : nodeAtPosition.getMetadata('label')) || 'none',
302
+ port: portAtPosition ? `${portAtPosition.side} (${portAtPosition.id})` : 'none',
303
+ portVisibility: config.portVisibility,
304
+ });
305
+ }
306
+ // Update node hover state. Hovering a node's CHROME (a drag-handle child)
307
+ // is hovering the node: without the propagation, a window whose title bar
308
+ // covers its top strip never reads as hovered there — so its hover-visible
309
+ // ports never surfaced ("the port on the title" report, second half).
310
+ const chromeParent = ((_b = (_a = nodeAtPosition === null || nodeAtPosition === void 0 ? void 0 : nodeAtPosition.behavior) === null || _a === void 0 ? void 0 : _a.dragHandler) === null || _b === void 0 ? void 0 : _b.isDragHandler) === true && nodeAtPosition.parentId
311
+ ? diagram.getNode(nodeAtPosition.parentId)
312
+ : null;
313
+ const allNodes = diagram.getNodes();
314
+ allNodes.forEach((node) => {
315
+ const wasHovered = node.state.hovered;
316
+ const isHovered = node === nodeAtPosition || node === chromeParent;
317
+ if (wasHovered !== isHovered) {
318
+ node.setState({ hovered: isHovered });
319
+ needsRender = true;
320
+ if (debugPortDetection) {
321
+ console.log(` Node ${node.getMetadata('label')} hover: ${wasHovered} → ${isHovered}`);
322
+ }
323
+ }
324
+ });
325
+ // Update port hover state
326
+ allNodes.forEach((node) => {
327
+ node.getPorts().forEach((port) => {
328
+ const wasHovered = port.isHovered;
329
+ const isHovered = port === portAtPosition;
330
+ if (wasHovered !== isHovered) {
331
+ port.isHovered = isHovered;
332
+ needsRender = true;
333
+ // CRITICAL FIX: Mark node as dirty when port hover state changes
334
+ // This forces the renderer to regenerate the port VNodes with updated styles
335
+ node.markDirty('port-hover-changed');
336
+ // TEMPORARY DEBUG: Always log port hover changes to see what's happening
337
+ console.log(`🔘 Port ${port.side} hover: ${wasHovered} → ${isHovered}`, { nodeLabel: node.getMetadata('label') });
338
+ }
339
+ });
340
+ });
341
+ // Update link hover state
342
+ const allLinks = diagram.getLinks();
343
+ allLinks.forEach((link) => {
344
+ const currentState = link.state;
345
+ const isHovered = link === linkAtPosition;
346
+ // Don't override selected/highlighted states with hover
347
+ // Selected and highlighted links keep their state even when hovered
348
+ if (currentState === 'selected' || currentState === 'highlighted') {
349
+ return; // Keep current state, don't change to hovered
350
+ }
351
+ const wasHovered = currentState === 'hovered';
352
+ if (wasHovered !== isHovered) {
353
+ link.setState(isHovered ? 'hovered' : 'default');
354
+ needsRender = true;
355
+ }
356
+ });
357
+ // Store current hover state
358
+ this.hoveredNode = nodeAtPosition || null;
359
+ this.hoveredPort = portAtPosition;
360
+ this.hoveredLink = linkAtPosition;
361
+ // Phase 5: Track performance
362
+ this.performanceMetrics.hoverDetectionTime = performance.now() - startTime;
363
+ return needsRender;
364
+ }
365
+ /**
366
+ * Phase 3: Handle connection drag update
367
+ * Phase 5: Enhanced with performance monitoring and validation
368
+ * Updates connection preview during drag
369
+ */
370
+ handleConnectionDrag(worldX, worldY, engine) {
371
+ var _a;
372
+ // Phase 5: Validate state and inputs
373
+ if (!this.isConnecting || !this.connectionSourcePort) {
374
+ return false;
375
+ }
376
+ if (!engine || !isFinite(worldX) || !isFinite(worldY)) {
377
+ return false;
378
+ }
379
+ // Phase 5: Performance monitoring
380
+ const startTime = performance.now();
381
+ try {
382
+ const connectionStateManager = engine.getConnectionStateManager();
383
+ // Wave 6 (Card 6): MAGNET SNAP. Fall back from "the port under the cursor"
384
+ // to "the nearest VALID port within the magnet radius", so a drag latches
385
+ // on before the pointer is precisely over a 6px circle. The radius is the
386
+ // engine's `snapToPortRadius`, and the candidate set is the SAME
387
+ // valid-target set the highlight paints — the thing you can snap to is
388
+ // exactly the thing lit up as snappable, which is the whole contract.
389
+ const hoveredPort = (_a = this.hoveredPort) !== null && _a !== void 0 ? _a : this.findMagnetPort(worldX, worldY, engine);
390
+ // Update connection state with current mouse position and hovered port
391
+ connectionStateManager.updateConnection({ x: worldX, y: worldY }, hoveredPort || undefined);
392
+ // Update port highlight states
393
+ this.updatePortHighlights(engine);
394
+ // Phase 5: Track performance
395
+ this.performanceMetrics.connectionUpdateTime = performance.now() - startTime;
396
+ return true;
397
+ }
398
+ catch (error) {
399
+ // Phase 5: Error handling
400
+ console.error('Error during connection drag:', error);
401
+ this.cancelConnection(engine);
402
+ return false;
403
+ }
404
+ }
405
+ /**
406
+ * Phase 3: Start connection from port
407
+ * Phase 5: Enhanced with validation and error handling
408
+ * CRITICAL FIX: Added detailed logging
409
+ */
410
+ startConnection(port, worldX, worldY, engine) {
411
+ if (this.isReadonlyEngine(engine))
412
+ return;
413
+ // Phase 5: Validate inputs
414
+ if (!port || !engine || !isFinite(worldX) || !isFinite(worldY)) {
415
+ console.warn('❌ Invalid inputs for startConnection:', { port: !!port, engine: !!engine, worldX, worldY });
416
+ return;
417
+ }
418
+ try {
419
+ this.isConnecting = true;
420
+ this.connectionSourcePort = port;
421
+ const connectionStateManager = engine.getConnectionStateManager();
422
+ connectionStateManager.startConnection(port, { x: worldX, y: worldY });
423
+ console.debug('🔌 Connection started:', {
424
+ portId: port.id,
425
+ portType: port.type,
426
+ portSide: port.side,
427
+ position: { x: worldX.toFixed(1), y: worldY.toFixed(1) }
428
+ });
429
+ }
430
+ catch (error) {
431
+ // Phase 5: Error recovery
432
+ console.error('❌ Error starting connection:', error);
433
+ this.isConnecting = false;
434
+ this.connectionSourcePort = null;
435
+ }
436
+ }
437
+ /**
438
+ * wave12/connect-ergonomics (gap 3) — Easy Connect: start a connection from a
439
+ * node BODY, not a port glyph. Picks the source port nearest the press point
440
+ * (so a drag off the right side starts from the right port) and begins the
441
+ * normal connection drag from it. Returns false when the node has no port to
442
+ * start from. The whole gesture then flows through the existing connection
443
+ * pipeline (preview on move, {@link completeConnection} on drop).
444
+ */
445
+ startNodeBodyConnection(node, worldX, worldY, engine) {
446
+ if (this.isReadonlyEngine(engine))
447
+ return false;
448
+ const port = this.nearestPortOnNode(node, worldX, worldY);
449
+ if (!port)
450
+ return false;
451
+ this.startConnection(port, worldX, worldY, engine);
452
+ return true;
453
+ }
454
+ /** The node's port whose drawn position is nearest `(worldX, worldY)`, or null. */
455
+ nearestPortOnNode(node, worldX, worldY) {
456
+ let best = null;
457
+ let bestDistance = Infinity;
458
+ for (const port of node.getPorts().values()) {
459
+ const p = (0, port_positioning_1.portWorldPosition)(port, node);
460
+ const distance = Math.hypot(worldX - p.x, worldY - p.y);
461
+ if (distance < bestDistance) {
462
+ bestDistance = distance;
463
+ best = port;
464
+ }
465
+ }
466
+ return best;
467
+ }
468
+ /**
469
+ * Phase 3: Complete connection to target port
470
+ * Phase 5: Enhanced with validation and error handling
471
+ */
472
+ completeConnection(engine) {
473
+ var _a;
474
+ if (this.isReadonlyEngine(engine))
475
+ return false;
476
+ // Phase 5: Validate state
477
+ if (!this.isConnecting || !this.connectionSourcePort) {
478
+ return false;
479
+ }
480
+ if (!engine) {
481
+ console.warn('Invalid engine in completeConnection');
482
+ this.cancelConnection(engine);
483
+ return false;
484
+ }
485
+ try {
486
+ const config = engine.getInteractionConfig();
487
+ const connectionStateManager = engine.getConnectionStateManager();
488
+ let targetPort = this.hoveredPort;
489
+ // Smart mode: Auto-connect to nearest port if dropping on (or near) a node.
490
+ //
491
+ // wave8/culling — Card 2. This used to call `PortModel.findNearestPort`, and
492
+ // it had TWO defects, both of which the spatial index fixes:
493
+ //
494
+ // 1. It searched exactly ONE node — `this.hoveredNode` — because searching
495
+ // more meant walking every node in the diagram. So a drop that landed
496
+ // NEAR a node instead of ON it connected to nothing. `findNearestPort`
497
+ // asks the index, so the search is bounded by the snap radius rather than
498
+ // by the scene, and a near miss now snaps.
499
+ //
500
+ // 2. It measured to the BOUNDING-BOX EDGE MIDPOINT (`getEdgePosition`) while
501
+ // the renderer draws ports shape-aware. On any non-rect silhouette, or any
502
+ // side carrying more than one port, it was snapping to a point several
503
+ // pixels away from the circle the user could see. Wave 6 fixed exactly
504
+ // this divergence for the port hit-test and the magnet — this path was
505
+ // missed. Passing `portWorldPosition` is that fix: hit-test where we draw.
506
+ // wave12 (gap 3): Easy Connect makes the whole TARGET node a handle too. A
507
+ // release ANYWHERE over a node body — not just within the ~24px port-snap
508
+ // radius smart mode uses — resolves the node under the cursor and picks its
509
+ // nearest port. That is the difference from smart auto-connect: smart snaps
510
+ // to a port near the drop; easy-connect accepts the node's whole silhouette.
511
+ const smartAutoConnect = config.mode === 'smart' && config.enableSmartAutoConnect;
512
+ if (!targetPort && (smartAutoConnect || config.enableEasyConnect)) {
513
+ const diagram = engine.getDiagram();
514
+ const dragState = connectionStateManager.getState();
515
+ const pos = dragState.currentMousePosition;
516
+ if (diagram && pos) {
517
+ if (config.enableEasyConnect) {
518
+ const sourceNode = this.connectionSourcePort
519
+ ? diagram.getNodeByPortId(this.connectionSourcePort.id)
520
+ : null;
521
+ const overNode = diagram.getNodeAtPosition(pos.x, pos.y);
522
+ if (overNode && overNode.id !== (sourceNode === null || sourceNode === void 0 ? void 0 : sourceNode.id)) {
523
+ // Body-to-body: neither end named a port, so pick the NEAREST PAIR
524
+ // across the two nodes — a centre press used to tie all four source
525
+ // ports and 'top' won by iteration order, wiring side-by-side nodes
526
+ // top→top as a long arc over both (live audit; the obvious wire is
527
+ // right→left). An explicit source press near a specific port still
528
+ // wins: we only re-seed when the pair's source genuinely differs.
529
+ if (sourceNode) {
530
+ let bestSource = null;
531
+ let bestTarget = null;
532
+ let bestDistance = Infinity;
533
+ for (const s of sourceNode.getPorts().values()) {
534
+ const sp = (0, port_positioning_1.portWorldPosition)(s, sourceNode);
535
+ for (const t of overNode.getPorts().values()) {
536
+ const tp = (0, port_positioning_1.portWorldPosition)(t, overNode);
537
+ const d = Math.hypot(sp.x - tp.x, sp.y - tp.y);
538
+ if (d < bestDistance) {
539
+ bestDistance = d;
540
+ bestSource = s;
541
+ bestTarget = t;
542
+ }
543
+ }
544
+ }
545
+ if (bestSource && bestTarget) {
546
+ if (bestSource !== this.connectionSourcePort) {
547
+ // Re-seed the in-flight connection from the pair's source so
548
+ // validation and the committed link both use it.
549
+ connectionStateManager.startConnection(bestSource, pos);
550
+ this.connectionSourcePort = bestSource;
551
+ }
552
+ targetPort = bestTarget;
553
+ }
554
+ }
555
+ if (!targetPort) {
556
+ targetPort = this.nearestPortOnNode(overNode, pos.x, pos.y);
557
+ }
558
+ }
559
+ }
560
+ // Smart-mode port snap (also the fallback when easy-connect found no node).
561
+ if (!targetPort && smartAutoConnect) {
562
+ const hit = diagram.findNearestPort(pos, {
563
+ portPosition: (port, node) => (0, port_positioning_1.portWorldPosition)(port, node),
564
+ });
565
+ targetPort = (_a = hit === null || hit === void 0 ? void 0 : hit.port) !== null && _a !== void 0 ? _a : null;
566
+ }
567
+ }
568
+ }
569
+ // Complete connection if we have a valid target port
570
+ let success = false;
571
+ if (targetPort) {
572
+ const result = connectionStateManager.completeConnection(targetPort);
573
+ success = result.success;
574
+ if (success) {
575
+ console.debug('✅ Connection completed:', this.connectionSourcePort.id, '->', targetPort.id);
576
+ }
577
+ else {
578
+ console.log('❌ Connection failed: Invalid connection');
579
+ }
580
+ }
581
+ // Cleanup
582
+ this.cancelConnection(engine);
583
+ return success;
584
+ }
585
+ catch (error) {
586
+ // Phase 5: Error recovery
587
+ console.error('Error completing connection:', error);
588
+ this.cancelConnection(engine);
589
+ return false;
590
+ }
591
+ }
592
+ /**
593
+ * Phase 3: Cancel connection
594
+ */
595
+ cancelConnection(engine) {
596
+ if (!this.isConnecting) {
597
+ return;
598
+ }
599
+ const connectionStateManager = engine.getConnectionStateManager();
600
+ connectionStateManager.cancelConnection();
601
+ this.isConnecting = false;
602
+ this.connectionSourcePort = null;
603
+ // Clear port highlights
604
+ this.clearPortHighlights(engine);
605
+ console.debug('🚫 Connection cancelled');
606
+ }
607
+ /**
608
+ * Phase 3 / Wave 2: Start link reconnection.
609
+ *
610
+ * Enters endpoint-drag mode: the dragged endpoint follows the cursor while
611
+ * the OTHER endpoint stays put. Seeds the engine's {@link ReconnectionPreview}
612
+ * so the renderer can draw a ghost link, and primes port validity highlights.
613
+ */
614
+ startLinkReconnection(link, endpoint, worldX, worldY, engine) {
615
+ this.isReconnectingLink = true;
616
+ this.reconnectingLink = link;
617
+ this.reconnectingEndpoint = endpoint;
618
+ this.reconnectingMousePoint = { x: worldX, y: worldY };
619
+ // Select the endpoint on the link
620
+ if (endpoint === 'source') {
621
+ link.selectSourceEndpoint();
622
+ }
623
+ else {
624
+ link.selectTargetEndpoint();
625
+ }
626
+ // Seed the live preview + validity highlights.
627
+ engine.setReconnectionPreview({
628
+ linkId: link.id,
629
+ endpoint,
630
+ mousePoint: { x: worldX, y: worldY },
631
+ isValid: false,
632
+ });
633
+ this.updateReconnectPortHighlights(engine);
634
+ console.debug(`🔗 Link reconnection started: ${endpoint} endpoint of link ${link.id}`);
635
+ }
636
+ /**
637
+ * Wave 2: Update the in-progress endpoint reconnection as the cursor moves.
638
+ *
639
+ * Refreshes the ghost-preview endpoint, recomputes which ports are valid drop
640
+ * targets (highlighting them), and reflects whether the currently hovered
641
+ * port would be accepted. Returns true when a re-render is warranted.
642
+ */
643
+ updateLinkReconnection(worldX, worldY, engine) {
644
+ if (!this.isReconnectingLink || !this.reconnectingLink || !this.reconnectingEndpoint) {
645
+ return false;
646
+ }
647
+ if (!isFinite(worldX) || !isFinite(worldY)) {
648
+ return false;
649
+ }
650
+ this.reconnectingMousePoint = { x: worldX, y: worldY };
651
+ // Is the port under the cursor (if any) a legal drop target?
652
+ const isValid = !!(this.hoveredPort &&
653
+ this.isValidReconnectionTarget(this.reconnectingLink, this.reconnectingEndpoint, this.hoveredPort, engine));
654
+ engine.setReconnectionPreview({
655
+ linkId: this.reconnectingLink.id,
656
+ endpoint: this.reconnectingEndpoint,
657
+ mousePoint: { x: worldX, y: worldY },
658
+ isValid,
659
+ });
660
+ this.updateReconnectPortHighlights(engine);
661
+ return true;
662
+ }
663
+ /**
664
+ * Wave 2: Is `candidatePort` a legal target for reconnecting `endpoint` of
665
+ * `link`? The OTHER endpoint's port stays fixed; the candidate must differ
666
+ * from it, live on a different node, be type-compatible (input↔output, or a
667
+ * bidirectional port), and satisfy the connection-group rules. Pure w.r.t.
668
+ * the passed models — the core of the reconnect-validation tests.
669
+ */
670
+ isValidReconnectionTarget(link, endpoint, candidatePort, engine) {
671
+ const diagram = engine.getDiagram();
672
+ if (!diagram)
673
+ return false;
674
+ // The stationary endpoint's port is the one that must stay connected.
675
+ const fixedPortId = endpoint === 'source' ? link.targetPortId : link.sourcePortId;
676
+ const fixedPort = diagram.getPortById(fixedPortId);
677
+ if (!fixedPort)
678
+ return false;
679
+ // Can't drop back onto the fixed port, or onto its own node.
680
+ if (candidatePort.id === fixedPortId)
681
+ return false;
682
+ const candidateNode = diagram.getNodeByPortId(candidatePort.id);
683
+ const fixedNode = diagram.getNodeByPortId(fixedPortId);
684
+ if (!candidateNode || !fixedNode)
685
+ return false;
686
+ if (candidateNode.id === fixedNode.id)
687
+ return false;
688
+ // Type compatibility: directional ports can't share a direction; a
689
+ // bidirectional ('bi') port on either side lifts the restriction.
690
+ const isBi = (p) => p.type === 'bi';
691
+ if (!isBi(fixedPort) && !isBi(candidatePort) && fixedPort.type === candidatePort.type) {
692
+ return false;
693
+ }
694
+ // Connection-group restriction (same seam the new-link flow validates on).
695
+ return (0, engine_1.isConnectionAllowedByGroup)(fixedPort, candidatePort, engine);
696
+ }
697
+ /**
698
+ * Wave 2: Highlight ports as valid/invalid drop targets during an endpoint
699
+ * reconnection. Mirrors {@link updatePortHighlights} but uses the reconnect
700
+ * validity rule instead of the {@link ConnectionStateManager} valid-target set
701
+ * (which is empty during reconnection).
702
+ */
703
+ updateReconnectPortHighlights(engine) {
704
+ const diagram = engine.getDiagram();
705
+ if (!diagram || !this.reconnectingLink || !this.reconnectingEndpoint)
706
+ return;
707
+ diagram.getNodes().forEach((node) => {
708
+ node.getPorts().forEach((port) => {
709
+ const valid = this.isValidReconnectionTarget(this.reconnectingLink, this.reconnectingEndpoint, port, engine);
710
+ const highlighted = valid && port === this.hoveredPort;
711
+ if (port.isValidTarget !== valid || port.isHighlighted !== highlighted) {
712
+ node.markDirty('port-highlight');
713
+ }
714
+ port.isValidTarget = valid;
715
+ port.isHighlighted = highlighted;
716
+ });
717
+ });
718
+ }
719
+ /**
720
+ * Phase 3 / Wave 2: Complete link reconnection.
721
+ *
722
+ * Drops the dragged endpoint on the hovered port. Rejects (and restores the
723
+ * original connection) when there is no port under the cursor or the port
724
+ * fails {@link isValidReconnectionTarget}.
725
+ */
726
+ completeLinkReconnection(engine) {
727
+ var _a, _b;
728
+ if (this.isReadonlyEngine(engine))
729
+ return false;
730
+ if (!this.isReconnectingLink || !this.reconnectingLink || !this.reconnectingEndpoint) {
731
+ return false;
732
+ }
733
+ const targetPort = this.hoveredPort;
734
+ // Reject: no drop target, or an invalid one → restore original connection.
735
+ if (!targetPort ||
736
+ !this.isValidReconnectionTarget(this.reconnectingLink, this.reconnectingEndpoint, targetPort, engine)) {
737
+ console.debug('🚫 Link reconnection rejected: no valid target port');
738
+ this.cancelLinkReconnection(engine);
739
+ return false;
740
+ }
741
+ // Reconnect to new port
742
+ const diagram = engine.getDiagram();
743
+ if (!diagram) {
744
+ this.cancelLinkReconnection(engine);
745
+ return false;
746
+ }
747
+ // Find the node that owns the target port
748
+ let targetNode;
749
+ for (const node of diagram.getNodes()) {
750
+ if (node.getPort(targetPort.id)) {
751
+ targetNode = node;
752
+ break;
753
+ }
754
+ }
755
+ if (!targetNode) {
756
+ console.log('❌ Link reconnection failed: Target node not found');
757
+ this.cancelLinkReconnection(engine);
758
+ return false;
759
+ }
760
+ // wave12: capture the OLD endpoint before mutating, so the reconnect is undoable. The
761
+ // link still holds its original endpoint here — the reconnect call is on the next line.
762
+ const endpoint = this.reconnectingEndpoint;
763
+ const oldPortId = endpoint === 'source'
764
+ ? this.reconnectingLink.sourcePortId
765
+ : this.reconnectingLink.targetPortId;
766
+ const oldNodeId = endpoint === 'source'
767
+ ? this.reconnectingLink.sourceNodeId
768
+ : this.reconnectingLink.targetNodeId;
769
+ // Reconnect the link (live).
770
+ if (endpoint === 'source') {
771
+ this.reconnectingLink.reconnectSource(targetPort.id, targetNode.id);
772
+ }
773
+ else {
774
+ this.reconnectingLink.reconnectTarget(targetPort.id, targetNode.id);
775
+ }
776
+ // …and record it as one undoable step. execute() re-applies the already-current new
777
+ // endpoint (a no-op); undo restores the old. Only when the endpoint actually changed.
778
+ if (oldPortId !== targetPort.id) {
779
+ void engine.commandManager.execute(new engine_1.ReconnectLinkCommand(this.reconnectingLink.id, endpoint, targetPort.id, targetNode.id, oldPortId, oldNodeId));
780
+ }
781
+ // Recalculate link path
782
+ const reconnectedSourceNode = this.findNodeForPort(this.reconnectingLink.sourcePortId, diagram);
783
+ const reconnectedTargetNode = this.findNodeForPort(this.reconnectingLink.targetPortId, diagram);
784
+ if (reconnectedSourceNode && reconnectedTargetNode) {
785
+ const sourcePort = reconnectedSourceNode.getPort(this.reconnectingLink.sourcePortId);
786
+ const reconnectedTargetPort = reconnectedTargetNode.getPort(this.reconnectingLink.targetPortId);
787
+ if (sourcePort && reconnectedTargetPort) {
788
+ const sourceBounds = reconnectedSourceNode.getBoundingBox();
789
+ const targetBounds = reconnectedTargetNode.getBoundingBox();
790
+ const sourcePoint = sourcePort.getAbsolutePosition(sourceBounds);
791
+ const targetPoint = reconnectedTargetPort.getAbsolutePosition(targetBounds);
792
+ // Get port directions for orthogonal routing
793
+ const sourceDirection = (_a = sourcePort.alignment) === null || _a === void 0 ? void 0 : _a.side;
794
+ const targetDirection = (_b = reconnectedTargetPort.alignment) === null || _b === void 0 ? void 0 : _b.side;
795
+ this.reconnectingLink.generatePath(sourcePoint, targetPoint, sourceDirection, targetDirection);
796
+ }
797
+ }
798
+ console.debug(`✅ Link reconnected: ${this.reconnectingEndpoint} endpoint to port ${targetPort.id}`);
799
+ // Cleanup (clears preview + highlights + state)
800
+ this.resetReconnectionState(engine);
801
+ return true;
802
+ }
803
+ /**
804
+ * Wave 2: Cancel an in-progress endpoint reconnection, restoring the link to
805
+ * its original connection. Safe to call when not reconnecting.
806
+ */
807
+ cancelLinkReconnection(engine) {
808
+ if (!this.isReconnectingLink)
809
+ return;
810
+ this.resetReconnectionState(engine);
811
+ console.debug('🚫 Link reconnection cancelled');
812
+ }
813
+ /**
814
+ * Wave 2: Tear down all reconnection state — deselect the link's endpoints,
815
+ * clear the engine preview, and clear port highlights.
816
+ */
817
+ resetReconnectionState(engine) {
818
+ var _a;
819
+ (_a = this.reconnectingLink) === null || _a === void 0 ? void 0 : _a.deselectEndpoints();
820
+ this.isReconnectingLink = false;
821
+ this.reconnectingLink = null;
822
+ this.reconnectingEndpoint = null;
823
+ this.reconnectingMousePoint = null;
824
+ engine.setReconnectionPreview(null);
825
+ this.clearPortHighlights(engine);
826
+ }
827
+ // ============================================================================
828
+ // Wave 2 (Edges & links): inline label drag-reposition
829
+ // ============================================================================
830
+ /**
831
+ * Wave 2: Map a dragged world point to a model-space label placement.
832
+ *
833
+ * Returns the `{ position, offset }` to store on the label such that the
834
+ * renderer draws it exactly under the cursor now AND it sticks to the same
835
+ * fraction of the path after re-routing:
836
+ * - `position` (0-1) = closest point on the path to the cursor;
837
+ * - `offset` = cursor − on-path anchor at `position`.
838
+ *
839
+ * The offset is measured against the SAME anchor the renderer uses
840
+ * ({@link LinkModel.getPointAtPosition}), so `getPointAtPosition(position) +
841
+ * offset` reproduces the cursor by construction. Falls back to a direct
842
+ * polyline projection over `link.points` when the model has no segments
843
+ * (renderers sync `points` but leave `segments` stale). Returns null when the
844
+ * link has no drawable path.
845
+ */
846
+ computeLabelDragUpdate(link, worldPoint) {
847
+ var _a, _b;
848
+ const points = link.points;
849
+ if (!points || points.length < 2)
850
+ return null;
851
+ // Preferred: model's own segment-based projection.
852
+ let t = (_b = (_a = link.getClosestPoint(worldPoint)) === null || _a === void 0 ? void 0 : _a.t) !== null && _b !== void 0 ? _b : null;
853
+ // Fallback: project onto the raw points polyline (mirrors the polyline
854
+ // fallback in getPointAtPosition, so anchors stay consistent).
855
+ if (t === null) {
856
+ t = this.closestPositionOnPolyline(points, worldPoint);
857
+ }
858
+ if (t === null)
859
+ return null;
860
+ const anchor = link.getPointAtPosition(t);
861
+ if (!anchor)
862
+ return null;
863
+ return {
864
+ position: t,
865
+ offset: { x: worldPoint.x - anchor.x, y: worldPoint.y - anchor.y },
866
+ };
867
+ }
868
+ /**
869
+ * Arc-length position (0-1) of the closest point on a polyline to `query`.
870
+ * Returns null for < 2 points. Matches the parametrization used by
871
+ * {@link LinkModel.getPointAtPosition}'s polyline fallback and the
872
+ * hit-test primitive.
873
+ */
874
+ closestPositionOnPolyline(points, query) {
875
+ if (points.length < 2)
876
+ return null;
877
+ const segLengths = [];
878
+ let total = 0;
879
+ for (let i = 0; i < points.length - 1; i++) {
880
+ const len = Math.hypot(points[i + 1].x - points[i].x, points[i + 1].y - points[i].y);
881
+ segLengths.push(len);
882
+ total += len;
883
+ }
884
+ if (total <= 0)
885
+ return 0;
886
+ let bestDist = Infinity;
887
+ let bestArc = 0;
888
+ let cumulative = 0;
889
+ for (let i = 0; i < points.length - 1; i++) {
890
+ const a = points[i];
891
+ const b = points[i + 1];
892
+ const dx = b.x - a.x;
893
+ const dy = b.y - a.y;
894
+ const lenSq = dx * dx + dy * dy;
895
+ let s = lenSq === 0 ? 0 : ((query.x - a.x) * dx + (query.y - a.y) * dy) / lenSq;
896
+ s = Math.max(0, Math.min(1, s));
897
+ const cx = a.x + s * dx;
898
+ const cy = a.y + s * dy;
899
+ const dist = Math.hypot(query.x - cx, query.y - cy);
900
+ if (dist < bestDist) {
901
+ bestDist = dist;
902
+ bestArc = cumulative + s * segLengths[i];
903
+ }
904
+ cumulative += segLengths[i];
905
+ }
906
+ return bestArc / total;
907
+ }
908
+ /**
909
+ * Wave 2: Begin dragging label `labelIndex` of `link`.
910
+ */
911
+ startLabelDrag(link, labelIndex) {
912
+ this.isDraggingLabel = true;
913
+ this.editingLabelLink = link;
914
+ this.editingLabelIndex = labelIndex;
915
+ console.log(`🏷️ Started dragging label ${labelIndex} on link ${link.id}`);
916
+ }
917
+ /**
918
+ * Wave 2: Move the dragging label to follow the cursor. Writes the remapped
919
+ * `{ position, offset }` back onto the model so the label survives re-routing.
920
+ * Returns true when a re-render is warranted.
921
+ */
922
+ moveLabelDrag(worldX, worldY) {
923
+ if (this.isReadonlyLink(this.editingLabelLink))
924
+ return false;
925
+ if (!this.isDraggingLabel || !this.editingLabelLink || this.editingLabelIndex === null) {
926
+ return false;
927
+ }
928
+ if (!isFinite(worldX) || !isFinite(worldY)) {
929
+ return false;
930
+ }
931
+ const update = this.computeLabelDragUpdate(this.editingLabelLink, { x: worldX, y: worldY });
932
+ if (!update)
933
+ return false;
934
+ this.editingLabelLink.updateLabel(this.editingLabelIndex, update);
935
+ this.editingLabelLink.markDirty('label-dragged');
936
+ return true;
937
+ }
938
+ /**
939
+ * Wave 2: End the label drag.
940
+ */
941
+ endLabelDrag() {
942
+ var _a;
943
+ if (this.isDraggingLabel) {
944
+ console.log(`🏷️ Ended dragging label ${this.editingLabelIndex} on link ${(_a = this.editingLabelLink) === null || _a === void 0 ? void 0 : _a.id}`);
945
+ }
946
+ this.isDraggingLabel = false;
947
+ this.editingLabelLink = null;
948
+ this.editingLabelIndex = null;
949
+ }
950
+ /**
951
+ * Phase 3: Handle link selection
952
+ * FIXED: Support multi-select with Ctrl key, deselect other links otherwise
953
+ */
954
+ selectLink(link, engine, multiSelect = false) {
955
+ const diagram = engine.getDiagram();
956
+ if (!diagram)
957
+ return;
958
+ if (!multiSelect) {
959
+ // Clear node selections
960
+ diagram.clearSelection();
961
+ // Deselect all other links
962
+ diagram.getLinks().forEach((l) => {
963
+ if (l.id !== link.id && l.state === 'selected') {
964
+ l.setState('default');
965
+ }
966
+ });
967
+ }
968
+ // Toggle or select this link
969
+ if (multiSelect && link.state === 'selected') {
970
+ link.setState('default');
971
+ console.debug('🔗 Link deselected:', link.id);
972
+ }
973
+ else {
974
+ link.setState('selected');
975
+ console.debug('🔗 Link selected:', link.id);
976
+ }
977
+ }
978
+ /**
979
+ * Phase 3: Delete selected link
980
+ */
981
+ deleteSelectedLink(engine) {
982
+ if (this.isReadonlyEngine(engine))
983
+ return false;
984
+ const diagram = engine.getDiagram();
985
+ if (!diagram)
986
+ return false;
987
+ // Find selected link
988
+ const selectedLink = diagram.getLinks().find((link) => link.state === 'selected');
989
+ if (!selectedLink)
990
+ return false;
991
+ // Remove the link
992
+ diagram.removeLink(selectedLink.id);
993
+ console.log('🗑️ Link deleted:', selectedLink.id);
994
+ return true;
995
+ }
996
+ /**
997
+ * Find link at world position (public wrapper for hit testing)
998
+ * Used for direct link selection without requiring hover state
999
+ */
1000
+ getLinkAtPosition(worldX, worldY, engine) {
1001
+ const diagram = engine.getDiagram();
1002
+ if (!diagram)
1003
+ return null;
1004
+ return this.findLinkAtPosition(worldX, worldY, diagram);
1005
+ }
1006
+ /**
1007
+ * Part-aware public wrapper: like {@link getLinkAtPosition} but also reports
1008
+ * WHICH sub-part of the link was hit (body / label / endpoint / arrow) plus
1009
+ * local info. Foundation for later edge cards (label editing, endpoint
1010
+ * reconnection, edge toolbar placement).
1011
+ */
1012
+ getLinkHitAtPosition(worldX, worldY, engine) {
1013
+ const diagram = engine.getDiagram();
1014
+ if (!diagram)
1015
+ return null;
1016
+ return this.findLinkHitAtPosition(worldX, worldY, diagram);
1017
+ }
1018
+ /**
1019
+ * Phase 3: Get current interaction state
1020
+ */
1021
+ getState() {
1022
+ return {
1023
+ isConnecting: this.isConnecting,
1024
+ isReconnectingLink: this.isReconnectingLink,
1025
+ reconnectingEndpoint: this.reconnectingEndpoint,
1026
+ reconnectingLink: this.reconnectingLink,
1027
+ hoveredNode: this.hoveredNode,
1028
+ hoveredPort: this.hoveredPort,
1029
+ hoveredLink: this.hoveredLink,
1030
+ // Wave 2: Label drag-reposition state
1031
+ isDraggingLabel: this.isDraggingLabel,
1032
+ editingLabelLink: this.editingLabelLink,
1033
+ editingLabelIndex: this.editingLabelIndex,
1034
+ // Phase 2.3a: Waypoint editing state
1035
+ isDraggingWaypoint: this.isDraggingWaypoint,
1036
+ editingLink: this.editingLink,
1037
+ editingWaypointIndex: this.editingWaypointIndex,
1038
+ hoveredWaypointIndex: this.hoveredWaypointIndex,
1039
+ hoveredWaypointLink: this.hoveredWaypointLink,
1040
+ // Phase 2.3b: Control point editing state
1041
+ isDraggingControlPoint: this.isDraggingControlPoint,
1042
+ editingControlPointLink: this.editingControlPointLink,
1043
+ editingControlPointSegmentIndex: this.editingControlPointSegmentIndex,
1044
+ editingControlPointType: this.editingControlPointType,
1045
+ hoveredControlPointSegmentIndex: this.hoveredControlPointSegmentIndex,
1046
+ hoveredControlPointType: this.hoveredControlPointType,
1047
+ hoveredControlPointLink: this.hoveredControlPointLink,
1048
+ };
1049
+ }
1050
+ /**
1051
+ * Phase 3: Check if currently interacting
1052
+ */
1053
+ isInteracting() {
1054
+ return this.isConnecting || this.isReconnectingLink || this.isDraggingWaypoint || this.isDraggingControlPoint || this.isDraggingLabel;
1055
+ }
1056
+ /**
1057
+ * Phase 3: Get appropriate cursor for current state
1058
+ */
1059
+ getCursor(engine) {
1060
+ if (this.isConnecting) {
1061
+ return 'crosshair';
1062
+ }
1063
+ if (this.isReconnectingLink) {
1064
+ return 'move';
1065
+ }
1066
+ if (this.hoveredPort) {
1067
+ return 'crosshair';
1068
+ }
1069
+ if (this.hoveredLink) {
1070
+ const config = engine.getInteractionConfig();
1071
+ if (config.enableLinkReconnection && this.hoveredLink.state === 'selected') {
1072
+ return 'pointer';
1073
+ }
1074
+ return 'pointer';
1075
+ }
1076
+ if (this.hoveredNode) {
1077
+ const config = engine.getInteractionConfig();
1078
+ if (config.mode === 'deliberate') {
1079
+ // In deliberate mode, only show move cursor if node is selected
1080
+ return this.hoveredNode.isSelected() ? 'move' : 'pointer';
1081
+ }
1082
+ return this.hoveredNode.isDraggable() ? 'pointer' : 'default';
1083
+ }
1084
+ return 'default';
1085
+ }
1086
+ // Private helper methods
1087
+ /**
1088
+ * Find port at world position
1089
+ * Phase 5: Optimized with performance monitoring and early exit
1090
+ * CRITICAL FIX: Accept engine parameter instead of calling diagram.getEngine()
1091
+ */
1092
+ findPortAtPosition(worldX, worldY, diagram, engine) {
1093
+ var _a, _b, _c;
1094
+ // Phase 5: Performance monitoring
1095
+ const startTime = performance.now();
1096
+ try {
1097
+ const config = engine.getInteractionConfig();
1098
+ const portRadius = config.portDefaultRadius * config.portHoverScaleFactor;
1099
+ // + hitSlop: touch-sized targets (Wave 9 Card 2). 0 for a mouse.
1100
+ const hitRadius = portRadius + 2 + this.hitSlop; // Add 2px tolerance
1101
+ // Phase 5: Optimization - early exit if no nodes
1102
+ const nodes = diagram.getNodes();
1103
+ if (!nodes || nodes.length === 0) {
1104
+ return null;
1105
+ }
1106
+ for (const node of nodes) {
1107
+ // A drag-handle node is chrome: its ports are not hoverable, so a wire
1108
+ // can never START there (the rules also refuse it as a TARGET).
1109
+ if (((_b = (_a = node.behavior) === null || _a === void 0 ? void 0 : _a.dragHandler) === null || _b === void 0 ? void 0 : _b.isDragHandler) === true)
1110
+ continue;
1111
+ // connectable:false — the rules refuse this node as source AND target,
1112
+ // and the renderer paints no glyph for it (shouldRenderPort). Hovering
1113
+ // must agree, or an invisible port would still grab the cursor and
1114
+ // start a wire the engine then refuses. Dashboard tiles are the case.
1115
+ if (((_c = node.behavior) === null || _c === void 0 ? void 0 : _c.connectable) === false)
1116
+ continue;
1117
+ // CRITICAL FIX: Always check for port hits regardless of visibility mode
1118
+ // Visibility affects RENDERING, not HIT DETECTION
1119
+ // This fixes the chicken-and-egg problem where ports couldn't be hovered
1120
+ // because the node wasn't hovered yet
1121
+ // Phase 5: Optimization - rough node bounds check first
1122
+ const nodeBounds = node.getBoundingBox();
1123
+ const nodeExpandedBounds = {
1124
+ left: nodeBounds.left - hitRadius,
1125
+ right: nodeBounds.right + hitRadius,
1126
+ top: nodeBounds.top - hitRadius,
1127
+ bottom: nodeBounds.bottom + hitRadius,
1128
+ };
1129
+ // Skip node if mouse is not even near it
1130
+ if (worldX < nodeExpandedBounds.left ||
1131
+ worldX > nodeExpandedBounds.right ||
1132
+ worldY < nodeExpandedBounds.top ||
1133
+ worldY > nodeExpandedBounds.bottom) {
1134
+ continue;
1135
+ }
1136
+ const portsMap = node.getPorts();
1137
+ const ports = Array.from(portsMap.values());
1138
+ for (const port of ports) {
1139
+ // Wave 6 BUG FIX: this used `port.getAbsolutePosition(nodeBounds)`,
1140
+ // which walks the BOUNDING BOX and lands on an edge midpoint — while
1141
+ // the renderer draws the port with `getPortPositionForShape`. On any
1142
+ // non-rect shape, and on any side with more than one port, the hit
1143
+ // circle sat several pixels away from the glyph: you clicked the port
1144
+ // you could see and hit nothing. Hit-test where you DRAW.
1145
+ const portPos = (0, port_positioning_1.portWorldPosition)(port, node);
1146
+ // Check if mouse is within port radius
1147
+ const dx = worldX - portPos.x;
1148
+ const dy = worldY - portPos.y;
1149
+ const distanceSquared = dx * dx + dy * dy;
1150
+ // Phase 5: Optimization - compare squared distances to avoid sqrt
1151
+ if (distanceSquared <= hitRadius * hitRadius) {
1152
+ // Occlusion: a port whose anchor a higher node covers is not in
1153
+ // the picture (the renderer hides it via the same oracle) — it
1154
+ // must not win the hover/press race THROUGH the covering node.
1155
+ if (typeof diagram.isPointCoveredAbove === 'function' &&
1156
+ diagram.isPointCoveredAbove(portPos.x, portPos.y, node.id)) {
1157
+ continue;
1158
+ }
1159
+ return port;
1160
+ }
1161
+ }
1162
+ }
1163
+ return null;
1164
+ }
1165
+ finally {
1166
+ // Phase 5: Track performance
1167
+ this.performanceMetrics.portHitTestTime = performance.now() - startTime;
1168
+ }
1169
+ }
1170
+ /**
1171
+ * Find link at world position.
1172
+ *
1173
+ * Backward-compatible thin wrapper over {@link findLinkHitAtPosition}:
1174
+ * existing callers that only ask "which link (if any) is under the cursor?"
1175
+ * keep getting a `LinkModel | null`. Use `findLinkHitAtPosition` /
1176
+ * `getLinkHitAtPosition` when you need to know WHICH sub-part was hit.
1177
+ */
1178
+ findLinkAtPosition(worldX, worldY, diagram) {
1179
+ var _a, _b;
1180
+ return (_b = (_a = this.findLinkHitAtPosition(worldX, worldY, diagram)) === null || _a === void 0 ? void 0 : _a.link) !== null && _b !== void 0 ? _b : null;
1181
+ }
1182
+ /**
1183
+ * Part-aware link hit-test.
1184
+ *
1185
+ * Reports the link under the cursor AND which sub-part of it was hit
1186
+ * (body / label / source|target-endpoint / source|target-arrow) plus local
1187
+ * info: the label index for label hits, or the 0-1 position `t` along the
1188
+ * path for body hits. Delegates the geometry to the pure `hitTestLink`
1189
+ * primitive in `@grafloria/renderer` so the same logic backs both hit paths.
1190
+ */
1191
+ findLinkHitAtPosition(worldX, worldY, diagram) {
1192
+ var _a, _b;
1193
+ // The cross-backend link grab distance — PER LINK, derived from the same
1194
+ // formula that sizes the painted hit-area stroke (max(config, stroke+8)/2,
1195
+ // floored at DEFAULT_LINK_HIT_TOLERANCE). A flat 5 here left a dead ring
1196
+ // between the DOM hit-area's edge and the accepted press: the cursor and
1197
+ // native focus said "link", the press selected nothing (live report:
1198
+ // "sometimes clicking around the line draws a rectangle").
1199
+ const query = { x: worldX, y: worldY };
1200
+ // NEAREST link wins, not the first in model order. Fan-out siblings share
1201
+ // an anchor and run close together near it: first-in-order let an earlier
1202
+ // sibling take a press landing ON a later sibling's ink (live report:
1203
+ // fan-out edges near the shared source selected their neighbour). Ranked
1204
+ // by body distance (falling back to the part's own distance) because at a
1205
+ // shared anchor every sibling's endpoint HANDLE is equidistant — only the
1206
+ // link actually under the cursor has body distance ~0.
1207
+ let best = null;
1208
+ let bestScore = Infinity;
1209
+ for (const link of diagram.getLinks()) {
1210
+ const points = link.points;
1211
+ if (!points || points.length < 2)
1212
+ continue;
1213
+ const hitThreshold = (0, link_hit_test_1.linkBodyHitTolerance)(this.literalLinkStrokeWidth(link), this.linkHitAreaWidthConfig) +
1214
+ this.hitSlop;
1215
+ const hit = (0, link_hit_test_1.hitTestLink)(this.buildLinkHitOptions(link), query, hitThreshold);
1216
+ if (!hit)
1217
+ continue;
1218
+ const score = Math.min((_a = hit.bodyDistance) !== null && _a !== void 0 ? _a : Infinity, (_b = hit.distance) !== null && _b !== void 0 ? _b : Infinity);
1219
+ if (score < bestScore) {
1220
+ bestScore = score;
1221
+ best = Object.assign({ link }, hit);
1222
+ }
1223
+ }
1224
+ return best;
1225
+ }
1226
+ /**
1227
+ * The link's resolved numeric stroke width, mirroring the SVG renderer's
1228
+ * `linkPaintLiterals` fallback: a theme-bound `var(--…)` width is not a
1229
+ * number, so it falls back to 2 (the theme default) rather than NaN-ing the
1230
+ * grab distance.
1231
+ */
1232
+ literalLinkStrokeWidth(link) {
1233
+ var _a;
1234
+ const width = (_a = link.style) === null || _a === void 0 ? void 0 : _a.strokeWidth;
1235
+ return typeof width === 'number' && Number.isFinite(width) ? width : 2;
1236
+ }
1237
+ /**
1238
+ * Translate a link model into the framework-agnostic geometry the pure
1239
+ * `hitTestLink` primitive expects (routed points, label placements and
1240
+ * endpoint / arrowhead anchors). Endpoints default to the path ends inside
1241
+ * the primitive; arrowhead anchors are inset from those ends by the arrow's
1242
+ * canonical tip offset so they line up with the rendered markers.
1243
+ */
1244
+ buildLinkHitOptions(link) {
1245
+ var _a, _b;
1246
+ const points = link.points;
1247
+ const style = (_a = link.style) !== null && _a !== void 0 ? _a : {};
1248
+ let labels = ((_b = link.labels) !== null && _b !== void 0 ? _b : []).map((label) => ({
1249
+ position: label.position,
1250
+ offset: label.offset,
1251
+ }));
1252
+ // The DISPLAY label dialect (`edges: [{label}]` → `metadata.label`) paints
1253
+ // at the middle routed point but lived in no hit geometry at all — so the
1254
+ // label a user could SEE on such an edge reported `body`, never `label`,
1255
+ // and double-click-to-edit / label affordances could not fire on it.
1256
+ // Synthesize its box at the renderer's own anchor (points[mid], expressed
1257
+ // as the arc-length position the hit primitive expects).
1258
+ if (labels.length === 0 && points.length >= 2 && link.getLabel()) {
1259
+ const mid = Math.floor(points.length / 2);
1260
+ let total = 0;
1261
+ let toMid = 0;
1262
+ for (let i = 1; i < points.length; i++) {
1263
+ const seg = Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y);
1264
+ total += seg;
1265
+ if (i <= mid)
1266
+ toMid += seg;
1267
+ }
1268
+ if (total > 0)
1269
+ labels = [{ position: toMid / total, offset: { x: 0, y: 0 } }];
1270
+ }
1271
+ return {
1272
+ points,
1273
+ labels,
1274
+ // arrowHead renders at the target end, arrowTail at the source end.
1275
+ sourceArrow: this.arrowAnchor(points, false, style.arrowTail),
1276
+ targetArrow: this.arrowAnchor(points, true, style.arrowHead),
1277
+ };
1278
+ }
1279
+ /**
1280
+ * Anchor point for an arrowhead hit region: the terminal point moved inward
1281
+ * along the last (or first) segment by the arrow's tip offset, matching where
1282
+ * the marker actually sits. Returns null when there is no visible arrow.
1283
+ */
1284
+ arrowAnchor(points, atTarget, style) {
1285
+ if (!style || style.type === 'none' || points.length < 2)
1286
+ return null;
1287
+ const offset = this.arrowRenderer.getTipOffset(style);
1288
+ const tip = atTarget ? points[points.length - 1] : points[0];
1289
+ const adjacent = atTarget ? points[points.length - 2] : points[1];
1290
+ const dx = adjacent.x - tip.x;
1291
+ const dy = adjacent.y - tip.y;
1292
+ const len = Math.hypot(dx, dy) || 1;
1293
+ return { x: tip.x + (dx / len) * offset, y: tip.y + (dy / len) * offset };
1294
+ }
1295
+ /**
1296
+ * Wave 6 (Card 6): the nearest VALID target port within the magnet radius.
1297
+ *
1298
+ * "Valid" means the connection manager's valid-target set — the same set the
1299
+ * highlight paints — so the magnet can never latch onto a port the drop would
1300
+ * then reject. Returns null when nothing is in reach, leaving the drag free.
1301
+ */
1302
+ findMagnetPort(worldX, worldY, engine) {
1303
+ var _a;
1304
+ const diagram = engine.getDiagram();
1305
+ if (!diagram)
1306
+ return null;
1307
+ const config = engine.getInteractionConfig();
1308
+ const radius = config.snapToPortRadius;
1309
+ if (!radius || radius <= 0)
1310
+ return null;
1311
+ const dragState = engine.getConnectionStateManager().getState();
1312
+ if (!dragState.isConnecting || dragState.validTargetPorts.size === 0)
1313
+ return null;
1314
+ let best = null;
1315
+ let bestDistance = Infinity;
1316
+ for (const node of diagram.getNodes()) {
1317
+ if (((_a = node.state) === null || _a === void 0 ? void 0 : _a.visible) === false)
1318
+ continue;
1319
+ for (const port of node.getPorts()) {
1320
+ if (!dragState.validTargetPorts.has(port.id))
1321
+ continue;
1322
+ const position = (0, port_positioning_1.portWorldPosition)(port, node);
1323
+ const distance = Math.hypot(worldX - position.x, worldY - position.y);
1324
+ if (distance <= radius && distance < bestDistance) {
1325
+ bestDistance = distance;
1326
+ best = port;
1327
+ }
1328
+ }
1329
+ }
1330
+ return best;
1331
+ }
1332
+ /**
1333
+ * Update port highlight states during connection.
1334
+ *
1335
+ * Wave 6 (Card 6): this method was already correct — and already dead. It
1336
+ * loops over `dragState.validTargetPorts`, a set that NOTHING ever filled:
1337
+ * `ConnectionStateManager.calculateValidTargets()` was a comment-only stub and
1338
+ * `setValidTargets()` had no production caller. So the loop ran zero times,
1339
+ * every frame, and only the hovered port ever lit up. The manager now computes
1340
+ * the set for real, which is what finally brings this to life — plus the
1341
+ * `highlightValidTargets` config flag, itself dead config until now (declared,
1342
+ * defaulted true, written by the config panel, read by nobody).
1343
+ */
1344
+ updatePortHighlights(engine) {
1345
+ const diagram = engine.getDiagram();
1346
+ if (!diagram)
1347
+ return;
1348
+ const config = engine.getInteractionConfig();
1349
+ const dragState = engine.getConnectionStateManager().getState();
1350
+ // Clear all highlights first
1351
+ diagram.getNodes().forEach((node) => {
1352
+ node.getPorts().forEach((port) => {
1353
+ port.isHighlighted = false;
1354
+ port.isValidTarget = false;
1355
+ });
1356
+ });
1357
+ // Highlight valid target ports
1358
+ if (config.highlightValidTargets !== false) {
1359
+ dragState.validTargetPorts.forEach((portId) => {
1360
+ var _a, _b;
1361
+ const port = this.findPortById(portId, diagram);
1362
+ if (port) {
1363
+ port.isValidTarget = true;
1364
+ // A hidden port that is a live target must SURFACE — that is what the
1365
+ // 'on-hover' / 'never' visibility modes key off, and it is the whole
1366
+ // point of highlighting: you cannot drop on a port you cannot see.
1367
+ const owner = (_a = diagram.getNodeByPortId) === null || _a === void 0 ? void 0 : _a.call(diagram, portId);
1368
+ (_b = owner === null || owner === void 0 ? void 0 : owner.markDirty) === null || _b === void 0 ? void 0 : _b.call(owner, 'port-highlight');
1369
+ }
1370
+ });
1371
+ }
1372
+ // Highlight currently hovered port
1373
+ if (this.hoveredPort && dragState.isOverValidTarget) {
1374
+ this.hoveredPort.isHighlighted = true;
1375
+ }
1376
+ }
1377
+ /**
1378
+ * Clear all port highlights
1379
+ */
1380
+ clearPortHighlights(engine) {
1381
+ const diagram = engine.getDiagram();
1382
+ if (!diagram)
1383
+ return;
1384
+ diagram.getNodes().forEach((node) => {
1385
+ let changed = false;
1386
+ node.getPorts().forEach((port) => {
1387
+ if (port.isHighlighted || port.isValidTarget)
1388
+ changed = true;
1389
+ port.isHighlighted = false;
1390
+ port.isValidTarget = false;
1391
+ });
1392
+ // Bare flag writes bump no epoch — without this the teardown frame is
1393
+ // skipped as idle and the green valid-target glow lingers after every
1394
+ // Escape / invalid drop / empty drop (live audit, four ports pages).
1395
+ if (changed)
1396
+ node.markDirty('port-highlight-clear');
1397
+ });
1398
+ }
1399
+ /**
1400
+ * Find port by ID
1401
+ */
1402
+ findPortById(portId, diagram) {
1403
+ for (const node of diagram.getNodes()) {
1404
+ const port = node.getPort(portId);
1405
+ if (port) {
1406
+ return port;
1407
+ }
1408
+ }
1409
+ return null;
1410
+ }
1411
+ /**
1412
+ * Find node that owns a port
1413
+ */
1414
+ findNodeForPort(portId, diagram) {
1415
+ for (const node of diagram.getNodes()) {
1416
+ if (node.getPort(portId)) {
1417
+ return node;
1418
+ }
1419
+ }
1420
+ return undefined;
1421
+ }
1422
+ // ============================================================================
1423
+ // Phase 2.3a: Waypoint Editing Methods
1424
+ // ============================================================================
1425
+ /**
1426
+ * Hit test for waypoint handle at mouse position
1427
+ * Returns the waypoint index if hit, null otherwise
1428
+ */
1429
+ hitTestWaypoint(mouseX, mouseY, link) {
1430
+ if (!this.waypointEditor || !link.points || link.points.length < 3) {
1431
+ return null;
1432
+ }
1433
+ const hit = this.waypointEditor.hitTestWaypoint(mouseX, mouseY, link.points, this.hitSlop);
1434
+ return hit ? hit.waypointIndex : null;
1435
+ }
1436
+ /**
1437
+ * Hit test for clicking on link path (to add waypoint)
1438
+ */
1439
+ hitTestPath(mouseX, mouseY, link) {
1440
+ if (!this.waypointEditor || !link.points || link.points.length < 2) {
1441
+ return false;
1442
+ }
1443
+ const hit = this.waypointEditor.hitTestPath(mouseX, mouseY, link.points, this.hitSlop);
1444
+ return hit !== null;
1445
+ }
1446
+ /**
1447
+ * Start dragging a waypoint
1448
+ */
1449
+ startWaypointDrag(waypointIndex, link) {
1450
+ this.isDraggingWaypoint = true;
1451
+ this.editingLink = link;
1452
+ this.editingWaypointIndex = waypointIndex;
1453
+ // wave12: snapshot the path BEFORE the drag so end can commit one undoable FROM→TO step.
1454
+ this.waypointDragStartPoints = link.points.map((p) => (Object.assign({}, p)));
1455
+ console.log(`🔵 Started dragging waypoint ${waypointIndex} on link ${link.id}`);
1456
+ }
1457
+ /**
1458
+ * Move waypoint during drag
1459
+ * The waypoint is just moved, orthogonal routing happens during rendering
1460
+ */
1461
+ moveWaypoint(worldX, worldY, engine) {
1462
+ if (this.isReadonlyEngine(engine))
1463
+ return false;
1464
+ if (!this.isDraggingWaypoint || !this.editingLink || this.editingWaypointIndex === null || !this.waypointEditor) {
1465
+ return false;
1466
+ }
1467
+ const newPosition = { x: worldX, y: worldY };
1468
+ const newPoints = this.waypointEditor.moveWaypoint(this.editingWaypointIndex, newPosition, this.editingLink.points, this.editingLink.pathType);
1469
+ if (newPoints) {
1470
+ this.editingLink.setPoints(newPoints);
1471
+ this.editingLink.setMetadata('hasManualWaypoints', true);
1472
+ console.log(`🔵 Moved waypoint ${this.editingWaypointIndex} to (${worldX.toFixed(1)}, ${worldY.toFixed(1)})`);
1473
+ return true;
1474
+ }
1475
+ return false;
1476
+ }
1477
+ /**
1478
+ * End waypoint drag
1479
+ */
1480
+ endWaypointDrag(engine) {
1481
+ var _a;
1482
+ if (this.isDraggingWaypoint) {
1483
+ console.log(`🔵 Ended dragging waypoint ${this.editingWaypointIndex} on link ${(_a = this.editingLink) === null || _a === void 0 ? void 0 : _a.id}`);
1484
+ // wave12: commit the finished gesture as ONE undoable step. The live moveWaypoint
1485
+ // already applied the final points, so SetLinkPointsCommand's execute() re-sets the
1486
+ // already-current `to` (a no-op) and records one history entry; undo restores `from`.
1487
+ // Same FROM→TO snapshot pattern as node-drag and group-drag. Only commit when the
1488
+ // path actually changed — a click-with-no-drag must not litter the undo stack.
1489
+ const link = this.editingLink;
1490
+ const from = this.waypointDragStartPoints;
1491
+ if (engine && link && from) {
1492
+ const to = link.points.map((p) => (Object.assign({}, p)));
1493
+ const changed = to.length !== from.length ||
1494
+ to.some((p, i) => p.x !== from[i].x || p.y !== from[i].y);
1495
+ if (changed) {
1496
+ void engine.commandManager.execute(new engine_1.SetLinkPointsCommand(link.id, to, from));
1497
+ }
1498
+ }
1499
+ }
1500
+ this.isDraggingWaypoint = false;
1501
+ this.editingLink = null;
1502
+ this.editingWaypointIndex = null;
1503
+ this.waypointDragStartPoints = null;
1504
+ }
1505
+ /**
1506
+ * Add waypoint at click position on path
1507
+ */
1508
+ addWaypoint(clickX, clickY, link) {
1509
+ if (this.isReadonlyLink(link))
1510
+ return false;
1511
+ if (!this.waypointEditor) {
1512
+ return false;
1513
+ }
1514
+ const result = this.waypointEditor.addWaypointAtPosition(clickX, clickY, link.points);
1515
+ if (result) {
1516
+ link.setPoints(result.newPoints);
1517
+ link.setMetadata('hasManualWaypoints', true);
1518
+ console.log(`🟢 Added waypoint at index ${result.waypointIndex} on link ${link.id}`);
1519
+ return true;
1520
+ }
1521
+ return false;
1522
+ }
1523
+ /**
1524
+ * Remove waypoint at index
1525
+ */
1526
+ removeWaypoint(waypointIndex, link) {
1527
+ if (this.isReadonlyLink(link))
1528
+ return false;
1529
+ if (!this.waypointEditor) {
1530
+ return false;
1531
+ }
1532
+ const newPoints = this.waypointEditor.removeWaypoint(waypointIndex, link.points);
1533
+ if (newPoints) {
1534
+ link.setPoints(newPoints);
1535
+ if (newPoints.length <= 2) {
1536
+ link.setMetadata('hasManualWaypoints', false);
1537
+ }
1538
+ console.log(`🔴 Removed waypoint at index ${waypointIndex} from link ${link.id}`);
1539
+ return true;
1540
+ }
1541
+ return false;
1542
+ }
1543
+ /**
1544
+ * Update waypoint editor configuration
1545
+ */
1546
+ updateWaypointEditorConfig(config) {
1547
+ if (this.waypointEditor) {
1548
+ this.waypointEditor.updateConfig(config);
1549
+ }
1550
+ }
1551
+ /**
1552
+ * Synchronize editor configs with engine interaction config
1553
+ * ADDED: Call this when engine config changes to update editor visuals
1554
+ */
1555
+ syncWithEngineConfig(engine) {
1556
+ const config = engine.getInteractionConfig();
1557
+ if (config.waypointEditor) {
1558
+ this.updateWaypointEditorConfig(config.waypointEditor);
1559
+ }
1560
+ if (config.controlPointEditor) {
1561
+ this.updateControlPointEditorConfig(config.controlPointEditor);
1562
+ }
1563
+ this.installHostConnectionValidatorBridge(engine);
1564
+ }
1565
+ installHostConnectionValidatorBridge(engine) {
1566
+ var _a;
1567
+ if (this.validatorBridgedEngines.has(engine))
1568
+ return;
1569
+ const manager = (_a = engine.getConnectionStateManager) === null || _a === void 0 ? void 0 : _a.call(engine);
1570
+ if (!(manager === null || manager === void 0 ? void 0 : manager.addValidator))
1571
+ return;
1572
+ this.validatorBridgedEngines.add(engine);
1573
+ manager.addValidator((source, target) => {
1574
+ const diagram = engine.getDiagram();
1575
+ const sourceNode = diagram === null || diagram === void 0 ? void 0 : diagram.getNodeByPortId(source.id);
1576
+ const targetNode = diagram === null || diagram === void 0 ? void 0 : diagram.getNodeByPortId(target.id);
1577
+ if (!sourceNode || !targetNode)
1578
+ return true;
1579
+ return (0, tools_1.isValidConnection)({
1580
+ sourceNode,
1581
+ sourcePort: source,
1582
+ targetNode,
1583
+ targetPort: target,
1584
+ }).valid;
1585
+ });
1586
+ }
1587
+ /**
1588
+ * Update hovered waypoint (for Delete key support)
1589
+ * Call this from mousemove to track which waypoint is under cursor
1590
+ */
1591
+ updateHoveredWaypoint(worldX, worldY, link) {
1592
+ if (!link || !this.waypointEditor) {
1593
+ this.hoveredWaypointIndex = null;
1594
+ this.hoveredWaypointLink = null;
1595
+ return;
1596
+ }
1597
+ const waypointIndex = this.hitTestWaypoint(worldX, worldY, link);
1598
+ this.hoveredWaypointIndex = waypointIndex;
1599
+ this.hoveredWaypointLink = waypointIndex !== null ? link : null;
1600
+ }
1601
+ /**
1602
+ * Delete currently hovered waypoint (for Delete key)
1603
+ */
1604
+ deleteHoveredWaypoint() {
1605
+ if (this.isReadonlyLink(this.hoveredLink))
1606
+ return false;
1607
+ if (this.hoveredWaypointIndex !== null && this.hoveredWaypointLink) {
1608
+ const removed = this.removeWaypoint(this.hoveredWaypointIndex, this.hoveredWaypointLink);
1609
+ if (removed) {
1610
+ this.hoveredWaypointIndex = null;
1611
+ this.hoveredWaypointLink = null;
1612
+ return true;
1613
+ }
1614
+ }
1615
+ return false;
1616
+ }
1617
+ // ============================================================================
1618
+ // Phase 2.3b: Control Point Editing Methods
1619
+ // ============================================================================
1620
+ /**
1621
+ * Hit test for control point handle at mouse position
1622
+ * Returns the control point info if hit, null otherwise
1623
+ */
1624
+ hitTestControlPoint(mouseX, mouseY, link) {
1625
+ if (!this.controlPointEditor || !link.segments || link.segments.length === 0) {
1626
+ return null;
1627
+ }
1628
+ const hit = this.controlPointEditor.hitTestControlPoint(mouseX, mouseY, link.segments, this.hitSlop);
1629
+ if (hit) {
1630
+ return {
1631
+ segmentIndex: hit.segmentIndex,
1632
+ controlType: hit.controlType,
1633
+ };
1634
+ }
1635
+ return null;
1636
+ }
1637
+ /**
1638
+ * Start dragging a control point
1639
+ */
1640
+ startControlPointDrag(segmentIndex, controlType, link) {
1641
+ this.isDraggingControlPoint = true;
1642
+ this.editingControlPointLink = link;
1643
+ this.editingControlPointSegmentIndex = segmentIndex;
1644
+ this.editingControlPointType = controlType;
1645
+ console.log(`🟢 Started dragging ${controlType} of segment ${segmentIndex} on link ${link.id}`);
1646
+ }
1647
+ /**
1648
+ * Move control point during drag
1649
+ */
1650
+ moveControlPoint(worldX, worldY, engine) {
1651
+ if (this.isReadonlyEngine(engine))
1652
+ return false; // RAW segments write below — no model guard can see it
1653
+ if (!this.isDraggingControlPoint ||
1654
+ !this.editingControlPointLink ||
1655
+ this.editingControlPointSegmentIndex === null ||
1656
+ !this.editingControlPointType ||
1657
+ !this.controlPointEditor) {
1658
+ return false;
1659
+ }
1660
+ const newPosition = { x: worldX, y: worldY };
1661
+ const newSegments = this.controlPointEditor.moveControlPoint(this.editingControlPointSegmentIndex, this.editingControlPointType, newPosition, this.editingControlPointLink.segments);
1662
+ if (newSegments) {
1663
+ this.editingControlPointLink.segments = newSegments;
1664
+ // Mark link as dirty to trigger re-render with updated segments
1665
+ this.editingControlPointLink.markDirty();
1666
+ console.log(`🟢 Moved ${this.editingControlPointType} of segment ${this.editingControlPointSegmentIndex} to (${worldX.toFixed(1)}, ${worldY.toFixed(1)})`);
1667
+ return true;
1668
+ }
1669
+ return false;
1670
+ }
1671
+ /**
1672
+ * End control point drag
1673
+ */
1674
+ endControlPointDrag() {
1675
+ var _a;
1676
+ if (this.isDraggingControlPoint) {
1677
+ console.log(`🟢 Ended dragging ${this.editingControlPointType} of segment ${this.editingControlPointSegmentIndex} on link ${(_a = this.editingControlPointLink) === null || _a === void 0 ? void 0 : _a.id}`);
1678
+ }
1679
+ this.isDraggingControlPoint = false;
1680
+ this.editingControlPointLink = null;
1681
+ this.editingControlPointSegmentIndex = null;
1682
+ this.editingControlPointType = null;
1683
+ }
1684
+ /**
1685
+ * Update control point editor configuration
1686
+ */
1687
+ updateControlPointEditorConfig(config) {
1688
+ if (this.controlPointEditor) {
1689
+ this.controlPointEditor.updateConfig(config);
1690
+ }
1691
+ }
1692
+ /**
1693
+ * Update hovered control point (for Delete key support)
1694
+ * Call this from mousemove to track which control point is under cursor
1695
+ */
1696
+ updateHoveredControlPoint(worldX, worldY, link) {
1697
+ if (!link || !this.controlPointEditor) {
1698
+ this.hoveredControlPointSegmentIndex = null;
1699
+ this.hoveredControlPointType = null;
1700
+ this.hoveredControlPointLink = null;
1701
+ return;
1702
+ }
1703
+ const hit = this.hitTestControlPoint(worldX, worldY, link);
1704
+ if (hit) {
1705
+ this.hoveredControlPointSegmentIndex = hit.segmentIndex;
1706
+ this.hoveredControlPointType = hit.controlType;
1707
+ this.hoveredControlPointLink = link;
1708
+ }
1709
+ else {
1710
+ this.hoveredControlPointSegmentIndex = null;
1711
+ this.hoveredControlPointType = null;
1712
+ this.hoveredControlPointLink = null;
1713
+ }
1714
+ }
1715
+ /**
1716
+ * Reset control point to auto-generated position (for Delete key)
1717
+ * This removes custom control point adjustment, reverting to default bezier
1718
+ */
1719
+ resetHoveredControlPoint() {
1720
+ if (this.hoveredControlPointSegmentIndex !== null &&
1721
+ this.hoveredControlPointType &&
1722
+ this.hoveredControlPointLink) {
1723
+ // For now, we don't support "deleting" control points
1724
+ // Control points are intrinsic to bezier curves
1725
+ // User would need to change pathType instead
1726
+ console.log('⚠️ Control points cannot be deleted, only moved');
1727
+ return false;
1728
+ }
1729
+ return false;
1730
+ }
1731
+ }
1732
+ exports.InteractionController = InteractionController;
1733
+ //# sourceMappingURL=interaction-controller.js.map