orcasvn-react-diagrams 0.2.1 → 0.2.2

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 (335) hide show
  1. package/README.md +99 -88
  2. package/ai/api-contract.json +257 -205
  3. package/ai/invariants.json +43 -41
  4. package/ai/manifest.json +34 -34
  5. package/dist/cjs/{displaybox.js → examples.js} +5974 -1413
  6. package/dist/cjs/index.js +3889 -1112
  7. package/dist/cjs/types/api/createDiagramEditor.d.ts +7 -2
  8. package/dist/cjs/types/api/types.d.ts +178 -0
  9. package/dist/cjs/types/displaybox/demos/DeletionEventsDemoTab.d.ts +3 -0
  10. package/dist/cjs/types/displaybox/demos/ShapeHoverControlsDemoTab.d.ts +3 -0
  11. package/dist/cjs/types/displaybox/demos/TextLayoutDemoTab.d.ts +3 -0
  12. package/dist/cjs/types/displaybox/demos/deletionEventsDemo.d.ts +2 -0
  13. package/dist/cjs/types/displaybox/demos/rotatedCreationDemo.d.ts +2 -0
  14. package/dist/cjs/types/displaybox/demos/roundedRectRadiusDemo.d.ts +2 -0
  15. package/dist/cjs/types/displaybox/demos/shapeBorderMovementDemo.d.ts +2 -0
  16. package/dist/cjs/types/displaybox/demos/shapeHoverControlsDemo.d.ts +10 -0
  17. package/dist/cjs/types/displaybox/demos/textDemo.d.ts +4 -0
  18. package/dist/cjs/types/displaybox/useDemoEditor.d.ts +5 -2
  19. package/dist/cjs/types/engine/AutoLayoutService.d.ts +24 -0
  20. package/dist/cjs/types/engine/DiagramEngine.d.ts +32 -14
  21. package/dist/cjs/types/engine/EngineCommands.d.ts +4 -1
  22. package/dist/cjs/types/engine/LinkRoutingService.d.ts +35 -0
  23. package/dist/cjs/types/engine/MutationPipeline.d.ts +23 -0
  24. package/dist/cjs/types/engine/TextLayoutService.d.ts +40 -0
  25. package/dist/cjs/types/examples/index.d.ts +2 -0
  26. package/dist/cjs/types/measure/textStyleDefaults.d.ts +9 -0
  27. package/dist/cjs/types/models/DiagramModel.d.ts +1 -0
  28. package/dist/cjs/types/models/ElementModel.d.ts +1 -0
  29. package/dist/cjs/types/models/PortModel.d.ts +3 -0
  30. package/dist/cjs/types/models/TextModel.d.ts +8 -0
  31. package/dist/cjs/types/renderer/RenderTypes.d.ts +34 -1
  32. package/dist/cjs/types/renderer/konva/KonvaHitTester.d.ts +1 -1
  33. package/dist/cjs/types/renderer/konva/KonvaInteraction.d.ts +53 -3
  34. package/dist/cjs/types/renderer/konva/KonvaNodeFactory.d.ts +18 -1
  35. package/dist/cjs/types/renderer/konva/KonvaRenderer.d.ts +49 -2
  36. package/dist/cjs/types/shapes/BuiltInShapes.d.ts +107 -0
  37. package/dist/cjs/types/shapes/__tests__/BuiltInShapes.test.d.ts +1 -0
  38. package/dist/cjs/types/shapes/index.d.ts +1 -0
  39. package/dist/cjs/types/utils/__tests__/borderGeometry.test.d.ts +1 -0
  40. package/dist/cjs/types/utils/borderGeometry.d.ts +6 -0
  41. package/dist/cjs/types/utils/geometry.d.ts +22 -0
  42. package/dist/esm/{displaybox.js → examples.js} +5969 -1414
  43. package/dist/esm/examples.js.map +1 -0
  44. package/dist/esm/index.js +3890 -1113
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/types/api/createDiagramEditor.d.ts +7 -2
  47. package/dist/esm/types/api/types.d.ts +178 -0
  48. package/dist/esm/types/displaybox/demos/DeletionEventsDemoTab.d.ts +3 -0
  49. package/dist/esm/types/displaybox/demos/ShapeHoverControlsDemoTab.d.ts +3 -0
  50. package/dist/esm/types/displaybox/demos/TextLayoutDemoTab.d.ts +3 -0
  51. package/dist/esm/types/displaybox/demos/deletionEventsDemo.d.ts +2 -0
  52. package/dist/esm/types/displaybox/demos/rotatedCreationDemo.d.ts +2 -0
  53. package/dist/esm/types/displaybox/demos/roundedRectRadiusDemo.d.ts +2 -0
  54. package/dist/esm/types/displaybox/demos/shapeBorderMovementDemo.d.ts +2 -0
  55. package/dist/esm/types/displaybox/demos/shapeHoverControlsDemo.d.ts +10 -0
  56. package/dist/esm/types/displaybox/demos/textDemo.d.ts +4 -0
  57. package/dist/esm/types/displaybox/useDemoEditor.d.ts +5 -2
  58. package/dist/esm/types/engine/AutoLayoutService.d.ts +24 -0
  59. package/dist/esm/types/engine/DiagramEngine.d.ts +32 -14
  60. package/dist/esm/types/engine/EngineCommands.d.ts +4 -1
  61. package/dist/esm/types/engine/LinkRoutingService.d.ts +35 -0
  62. package/dist/esm/types/engine/MutationPipeline.d.ts +23 -0
  63. package/dist/esm/types/engine/TextLayoutService.d.ts +40 -0
  64. package/dist/esm/types/examples/index.d.ts +2 -0
  65. package/dist/esm/types/measure/textStyleDefaults.d.ts +9 -0
  66. package/dist/esm/types/models/DiagramModel.d.ts +1 -0
  67. package/dist/esm/types/models/ElementModel.d.ts +1 -0
  68. package/dist/esm/types/models/PortModel.d.ts +3 -0
  69. package/dist/esm/types/models/TextModel.d.ts +8 -0
  70. package/dist/esm/types/renderer/RenderTypes.d.ts +34 -1
  71. package/dist/esm/types/renderer/konva/KonvaHitTester.d.ts +1 -1
  72. package/dist/esm/types/renderer/konva/KonvaInteraction.d.ts +53 -3
  73. package/dist/esm/types/renderer/konva/KonvaNodeFactory.d.ts +18 -1
  74. package/dist/esm/types/renderer/konva/KonvaRenderer.d.ts +49 -2
  75. package/dist/esm/types/shapes/BuiltInShapes.d.ts +107 -0
  76. package/dist/esm/types/shapes/__tests__/BuiltInShapes.test.d.ts +1 -0
  77. package/dist/esm/types/shapes/index.d.ts +1 -0
  78. package/dist/esm/types/utils/__tests__/borderGeometry.test.d.ts +1 -0
  79. package/dist/esm/types/utils/borderGeometry.d.ts +6 -0
  80. package/dist/esm/types/utils/geometry.d.ts +22 -0
  81. package/dist/{displaybox.d.ts → examples.d.ts} +169 -5
  82. package/dist/index.d.ts +233 -2
  83. package/docs/API_CONTRACT.md +200 -144
  84. package/docs/ARCHITECTURE.md +32 -31
  85. package/docs/CAPABILITIES.md +40 -38
  86. package/docs/COMMANDS_EVENTS.md +65 -60
  87. package/docs/DOCUMENTATION_WORKFLOW.md +27 -29
  88. package/docs/INDEX.md +41 -41
  89. package/docs/INTEGRATION_PLAYBOOK.md +56 -54
  90. package/docs/PORTING_CHECKLIST.md +59 -58
  91. package/docs/STATE_INVARIANTS.md +60 -56
  92. package/docs/fixtures/basic-linked-elements.json +52 -52
  93. package/docs/fixtures/empty-state.json +11 -11
  94. package/docs/fixtures/nested-layout.json +54 -54
  95. package/package.json +13 -16
  96. package/src/displaybox/demos/AutoLayoutDemoTab.tsx +501 -0
  97. package/src/displaybox/demos/DeletionEventsDemoTab.tsx +147 -0
  98. package/src/displaybox/demos/EngineEventsDemoTab.tsx +151 -0
  99. package/src/displaybox/demos/EventHandlersDemoTab.tsx +110 -0
  100. package/src/displaybox/demos/ExternalDragDropDemoTab.tsx +261 -0
  101. package/src/displaybox/demos/LinkCancelDemoTab.tsx +238 -0
  102. package/src/displaybox/demos/ObstacleRoutingDemoTab.tsx +30 -0
  103. package/src/displaybox/demos/ShapeHoverControlsDemoTab.tsx +558 -0
  104. package/src/displaybox/demos/SimpleDemo.tsx +73 -0
  105. package/src/displaybox/demos/SvgPathDemoTab.tsx +327 -0
  106. package/src/displaybox/demos/TextLayoutDemoTab.tsx +386 -0
  107. package/src/displaybox/demos/autoLayoutDemo.ts +111 -0
  108. package/src/displaybox/demos/basicDemo.ts +131 -0
  109. package/src/displaybox/demos/childConstraintsDemo.ts +65 -0
  110. package/src/displaybox/demos/customDemo.ts +59 -0
  111. package/src/displaybox/demos/deletionEventsDemo.ts +91 -0
  112. package/src/displaybox/demos/engineEventsDemo.ts +64 -0
  113. package/src/displaybox/demos/eventHandlersDemo.ts +41 -0
  114. package/src/displaybox/demos/externalDragDropDemo.ts +28 -0
  115. package/src/displaybox/demos/gridOverlayDemo.ts +50 -0
  116. package/src/displaybox/demos/index.tsx +217 -0
  117. package/src/displaybox/demos/linkBendHandlesDemo.ts +143 -0
  118. package/src/displaybox/demos/linkCancelDemo.ts +56 -0
  119. package/src/displaybox/demos/linkPortCreationDemo.ts +46 -0
  120. package/src/displaybox/demos/multiLevelTreeDemo.ts +120 -0
  121. package/src/displaybox/demos/multipleElementsDemo.ts +62 -0
  122. package/src/displaybox/demos/nestedDemo.ts +78 -0
  123. package/src/displaybox/demos/obstacleRoutingDemo.ts +176 -0
  124. package/src/displaybox/demos/portBorderDemo.ts +98 -0
  125. package/src/displaybox/demos/portConstraintsDemo.ts +175 -0
  126. package/src/displaybox/demos/rotatedCreationDemo.ts +185 -0
  127. package/src/displaybox/demos/roundedRectRadiusDemo.ts +93 -0
  128. package/src/displaybox/demos/routingDemo.ts +57 -0
  129. package/src/displaybox/demos/selectionDemo.ts +49 -0
  130. package/src/displaybox/demos/shapeBorderMovementDemo.ts +126 -0
  131. package/src/displaybox/demos/shapeGalleryDemo.ts +73 -0
  132. package/src/displaybox/demos/shapeHoverControlsDemo.ts +172 -0
  133. package/src/displaybox/demos/shared.ts +161 -0
  134. package/src/displaybox/demos/svgPathDemo.ts +71 -0
  135. package/src/displaybox/demos/textDemo.ts +62 -0
  136. package/src/displaybox/types.ts +66 -0
  137. package/src/examples/index.ts +21 -0
  138. package/displaybox/package.json +0 -5
  139. package/dist/cjs/types/components/BBoxDebugger.d.ts +0 -6
  140. package/dist/cjs/types/components/CloseIcon.d.ts +0 -6
  141. package/dist/cjs/types/components/LinkDebugger.d.ts +0 -8
  142. package/dist/cjs/types/components/editor.d.ts +0 -9
  143. package/dist/cjs/types/components/elementShowbox.d.ts +0 -3
  144. package/dist/cjs/types/components/elements/dragDropHandlerElement.d.ts +0 -7
  145. package/dist/cjs/types/components/elements/element.d.ts +0 -4
  146. package/dist/cjs/types/components/elements/elementWrapper.d.ts +0 -18
  147. package/dist/cjs/types/components/links/elementLink.d.ts +0 -4
  148. package/dist/cjs/types/components/links/index.d.ts +0 -2
  149. package/dist/cjs/types/components/links/point.d.ts +0 -11
  150. package/dist/cjs/types/components/paper.d.ts +0 -49
  151. package/dist/cjs/types/components/ports/index.d.ts +0 -2
  152. package/dist/cjs/types/components/ports/port.d.ts +0 -3
  153. package/dist/cjs/types/components/shapeShowbox.d.ts +0 -3
  154. package/dist/cjs/types/components/shapes/circle.d.ts +0 -9
  155. package/dist/cjs/types/components/shapes/customShape.d.ts +0 -7
  156. package/dist/cjs/types/components/shapes/halfCircle.d.ts +0 -9
  157. package/dist/cjs/types/components/shapes/index.d.ts +0 -7
  158. package/dist/cjs/types/components/shapes/polygon.d.ts +0 -8
  159. package/dist/cjs/types/components/shapes/rectangle.d.ts +0 -10
  160. package/dist/cjs/types/components/shapes/rectangularFrame.d.ts +0 -12
  161. package/dist/cjs/types/components/shapes/shapeWrapper.d.ts +0 -8
  162. package/dist/cjs/types/components/svgUtilsShowbox.d.ts +0 -3
  163. package/dist/cjs/types/components/texts/index.d.ts +0 -2
  164. package/dist/cjs/types/components/texts/text.d.ts +0 -4
  165. package/dist/cjs/types/components/viewControls/ruler.d.ts +0 -10
  166. package/dist/cjs/types/components/viewControls/selectionFrame.d.ts +0 -4
  167. package/dist/cjs/types/contexts/editorConfigurationContext.d.ts +0 -4
  168. package/dist/cjs/types/contexts/paperEventEmitterContext.d.ts +0 -45
  169. package/dist/cjs/types/contexts/zoomContext.d.ts +0 -16
  170. package/dist/cjs/types/contexts/zoomPanContext.d.ts +0 -23
  171. package/dist/cjs/types/displaybox/index.d.ts +0 -3
  172. package/dist/cjs/types/hooks/useKeyboardCommands.d.ts +0 -5
  173. package/dist/cjs/types/hooks/useSelectionFrame.d.ts +0 -6
  174. package/dist/cjs/types/logs/Logger.d.ts +0 -14
  175. package/dist/cjs/types/logs/configureLogger.d.ts +0 -4
  176. package/dist/cjs/types/main.d.ts +0 -8
  177. package/dist/cjs/types/mocks/customPortWithBuiltinShape.d.ts +0 -2
  178. package/dist/cjs/types/mocks/diamondElement.d.ts +0 -11
  179. package/dist/cjs/types/mocks/editorContext.d.ts +0 -2
  180. package/dist/cjs/types/mocks/editorContextElementMoveAsPort.d.ts +0 -2
  181. package/dist/cjs/types/mocks/editorContextForOptimizeRerender.d.ts +0 -2
  182. package/dist/cjs/types/mocks/editorContextMultipleElements.d.ts +0 -2
  183. package/dist/cjs/types/mocks/editorContextSingleElement.d.ts +0 -2
  184. package/dist/cjs/types/mocks/editorContextSingleElementTestEvents.d.ts +0 -2
  185. package/dist/cjs/types/mocks/editorContextTriggerRenderElements.d.ts +0 -2
  186. package/dist/cjs/types/mocks/editorContextWithElementAnchorCenter.d.ts +0 -2
  187. package/dist/cjs/types/mocks/port1.d.ts +0 -5
  188. package/dist/cjs/types/mocks/port2.d.ts +0 -5
  189. package/dist/cjs/types/mocks/portIn.d.ts +0 -4
  190. package/dist/cjs/types/mocks/rectangularFrameElement.d.ts +0 -11
  191. package/dist/cjs/types/mocks/textsWithFlexBox.d.ts +0 -2
  192. package/dist/cjs/types/models/IEditorConfiguration.d.ts +0 -7
  193. package/dist/cjs/types/models/IEditorContext.d.ts +0 -56
  194. package/dist/cjs/types/models/IElement.d.ts +0 -46
  195. package/dist/cjs/types/models/IElementLink.d.ts +0 -23
  196. package/dist/cjs/types/models/IElementLinkProps.d.ts +0 -31
  197. package/dist/cjs/types/models/IElementProps.d.ts +0 -36
  198. package/dist/cjs/types/models/IElementSelectorProps.d.ts +0 -25
  199. package/dist/cjs/types/models/IFlexboxType.d.ts +0 -20
  200. package/dist/cjs/types/models/IPaperBounds.d.ts +0 -6
  201. package/dist/cjs/types/models/IPort.d.ts +0 -13
  202. package/dist/cjs/types/models/IPortProps.d.ts +0 -31
  203. package/dist/cjs/types/models/IResizability.d.ts +0 -4
  204. package/dist/cjs/types/models/IShape.d.ts +0 -18
  205. package/dist/cjs/types/models/IText.d.ts +0 -20
  206. package/dist/cjs/types/models/ITextProps.d.ts +0 -25
  207. package/dist/cjs/types/models/callbackTypes.d.ts +0 -21
  208. package/dist/cjs/types/models/enums/PositioningAnchor.d.ts +0 -4
  209. package/dist/cjs/types/models/enums/ResizingDirection.d.ts +0 -10
  210. package/dist/cjs/types/models/enums/SubObjectDirection.d.ts +0 -4
  211. package/dist/cjs/types/models/enums/TextAlign.d.ts +0 -5
  212. package/dist/cjs/types/models/enums/index.d.ts +0 -4
  213. package/dist/cjs/types/models/implementations/CustomPort.d.ts +0 -7
  214. package/dist/cjs/types/models/implementations/CustomPortFromJSXElement.d.ts +0 -7
  215. package/dist/cjs/types/models/implementations/CustomPortFromShape.d.ts +0 -7
  216. package/dist/cjs/types/models/implementations/EditorContext.d.ts +0 -67
  217. package/dist/cjs/types/models/implementations/Element.d.ts +0 -61
  218. package/dist/cjs/types/models/implementations/ElementLink.d.ts +0 -25
  219. package/dist/cjs/types/models/implementations/Port.d.ts +0 -22
  220. package/dist/cjs/types/models/implementations/Text.d.ts +0 -20
  221. package/dist/cjs/types/models/implementations/diamondElement.d.ts +0 -11
  222. package/dist/cjs/types/models/implementations/index.d.ts +0 -6
  223. package/dist/cjs/types/models/implementations/rectangularFrameElement.d.ts +0 -11
  224. package/dist/cjs/types/models/index.d.ts +0 -19
  225. package/dist/cjs/types/models/position.d.ts +0 -4
  226. package/dist/cjs/types/models/size.d.ts +0 -4
  227. package/dist/cjs/types/utils/constants.d.ts +0 -54
  228. package/dist/cjs/types/utils/elementLinkUtil.d.ts +0 -2
  229. package/dist/cjs/types/utils/generateUniqueId.d.ts +0 -1
  230. package/dist/cjs/types/utils/index.d.ts +0 -9
  231. package/dist/cjs/types/utils/lineUtil.d.ts +0 -3
  232. package/dist/cjs/types/utils/mathUtil.d.ts +0 -6
  233. package/dist/cjs/types/utils/pathUtil.d.ts +0 -13
  234. package/dist/cjs/types/utils/portSlideRailSVGUtil.d.ts +0 -3
  235. package/dist/cjs/types/utils/positionUtil.d.ts +0 -55
  236. package/dist/cjs/types/utils/svgUtil.d.ts +0 -3
  237. package/dist/esm/displaybox.js.map +0 -1
  238. package/dist/esm/types/components/BBoxDebugger.d.ts +0 -6
  239. package/dist/esm/types/components/CloseIcon.d.ts +0 -6
  240. package/dist/esm/types/components/LinkDebugger.d.ts +0 -8
  241. package/dist/esm/types/components/editor.d.ts +0 -9
  242. package/dist/esm/types/components/elementShowbox.d.ts +0 -3
  243. package/dist/esm/types/components/elements/dragDropHandlerElement.d.ts +0 -7
  244. package/dist/esm/types/components/elements/element.d.ts +0 -4
  245. package/dist/esm/types/components/elements/elementWrapper.d.ts +0 -18
  246. package/dist/esm/types/components/links/elementLink.d.ts +0 -4
  247. package/dist/esm/types/components/links/index.d.ts +0 -2
  248. package/dist/esm/types/components/links/point.d.ts +0 -11
  249. package/dist/esm/types/components/paper.d.ts +0 -49
  250. package/dist/esm/types/components/ports/index.d.ts +0 -2
  251. package/dist/esm/types/components/ports/port.d.ts +0 -3
  252. package/dist/esm/types/components/shapeShowbox.d.ts +0 -3
  253. package/dist/esm/types/components/shapes/circle.d.ts +0 -9
  254. package/dist/esm/types/components/shapes/customShape.d.ts +0 -7
  255. package/dist/esm/types/components/shapes/halfCircle.d.ts +0 -9
  256. package/dist/esm/types/components/shapes/index.d.ts +0 -7
  257. package/dist/esm/types/components/shapes/polygon.d.ts +0 -8
  258. package/dist/esm/types/components/shapes/rectangle.d.ts +0 -10
  259. package/dist/esm/types/components/shapes/rectangularFrame.d.ts +0 -12
  260. package/dist/esm/types/components/shapes/shapeWrapper.d.ts +0 -8
  261. package/dist/esm/types/components/svgUtilsShowbox.d.ts +0 -3
  262. package/dist/esm/types/components/texts/index.d.ts +0 -2
  263. package/dist/esm/types/components/texts/text.d.ts +0 -4
  264. package/dist/esm/types/components/viewControls/ruler.d.ts +0 -10
  265. package/dist/esm/types/components/viewControls/selectionFrame.d.ts +0 -4
  266. package/dist/esm/types/contexts/editorConfigurationContext.d.ts +0 -4
  267. package/dist/esm/types/contexts/paperEventEmitterContext.d.ts +0 -45
  268. package/dist/esm/types/contexts/zoomContext.d.ts +0 -16
  269. package/dist/esm/types/contexts/zoomPanContext.d.ts +0 -23
  270. package/dist/esm/types/displaybox/index.d.ts +0 -3
  271. package/dist/esm/types/hooks/useKeyboardCommands.d.ts +0 -5
  272. package/dist/esm/types/hooks/useSelectionFrame.d.ts +0 -6
  273. package/dist/esm/types/logs/Logger.d.ts +0 -14
  274. package/dist/esm/types/logs/configureLogger.d.ts +0 -4
  275. package/dist/esm/types/main.d.ts +0 -8
  276. package/dist/esm/types/mocks/customPortWithBuiltinShape.d.ts +0 -2
  277. package/dist/esm/types/mocks/diamondElement.d.ts +0 -11
  278. package/dist/esm/types/mocks/editorContext.d.ts +0 -2
  279. package/dist/esm/types/mocks/editorContextElementMoveAsPort.d.ts +0 -2
  280. package/dist/esm/types/mocks/editorContextForOptimizeRerender.d.ts +0 -2
  281. package/dist/esm/types/mocks/editorContextMultipleElements.d.ts +0 -2
  282. package/dist/esm/types/mocks/editorContextSingleElement.d.ts +0 -2
  283. package/dist/esm/types/mocks/editorContextSingleElementTestEvents.d.ts +0 -2
  284. package/dist/esm/types/mocks/editorContextTriggerRenderElements.d.ts +0 -2
  285. package/dist/esm/types/mocks/editorContextWithElementAnchorCenter.d.ts +0 -2
  286. package/dist/esm/types/mocks/port1.d.ts +0 -5
  287. package/dist/esm/types/mocks/port2.d.ts +0 -5
  288. package/dist/esm/types/mocks/portIn.d.ts +0 -4
  289. package/dist/esm/types/mocks/rectangularFrameElement.d.ts +0 -11
  290. package/dist/esm/types/mocks/textsWithFlexBox.d.ts +0 -2
  291. package/dist/esm/types/models/IEditorConfiguration.d.ts +0 -7
  292. package/dist/esm/types/models/IEditorContext.d.ts +0 -56
  293. package/dist/esm/types/models/IElement.d.ts +0 -46
  294. package/dist/esm/types/models/IElementLink.d.ts +0 -23
  295. package/dist/esm/types/models/IElementLinkProps.d.ts +0 -31
  296. package/dist/esm/types/models/IElementProps.d.ts +0 -36
  297. package/dist/esm/types/models/IElementSelectorProps.d.ts +0 -25
  298. package/dist/esm/types/models/IFlexboxType.d.ts +0 -20
  299. package/dist/esm/types/models/IPaperBounds.d.ts +0 -6
  300. package/dist/esm/types/models/IPort.d.ts +0 -13
  301. package/dist/esm/types/models/IPortProps.d.ts +0 -31
  302. package/dist/esm/types/models/IResizability.d.ts +0 -4
  303. package/dist/esm/types/models/IShape.d.ts +0 -18
  304. package/dist/esm/types/models/IText.d.ts +0 -20
  305. package/dist/esm/types/models/ITextProps.d.ts +0 -25
  306. package/dist/esm/types/models/callbackTypes.d.ts +0 -21
  307. package/dist/esm/types/models/enums/PositioningAnchor.d.ts +0 -4
  308. package/dist/esm/types/models/enums/ResizingDirection.d.ts +0 -10
  309. package/dist/esm/types/models/enums/SubObjectDirection.d.ts +0 -4
  310. package/dist/esm/types/models/enums/TextAlign.d.ts +0 -5
  311. package/dist/esm/types/models/enums/index.d.ts +0 -4
  312. package/dist/esm/types/models/implementations/CustomPort.d.ts +0 -7
  313. package/dist/esm/types/models/implementations/CustomPortFromJSXElement.d.ts +0 -7
  314. package/dist/esm/types/models/implementations/CustomPortFromShape.d.ts +0 -7
  315. package/dist/esm/types/models/implementations/EditorContext.d.ts +0 -67
  316. package/dist/esm/types/models/implementations/Element.d.ts +0 -61
  317. package/dist/esm/types/models/implementations/ElementLink.d.ts +0 -25
  318. package/dist/esm/types/models/implementations/Port.d.ts +0 -22
  319. package/dist/esm/types/models/implementations/Text.d.ts +0 -20
  320. package/dist/esm/types/models/implementations/diamondElement.d.ts +0 -11
  321. package/dist/esm/types/models/implementations/index.d.ts +0 -6
  322. package/dist/esm/types/models/implementations/rectangularFrameElement.d.ts +0 -11
  323. package/dist/esm/types/models/index.d.ts +0 -19
  324. package/dist/esm/types/models/position.d.ts +0 -4
  325. package/dist/esm/types/models/size.d.ts +0 -4
  326. package/dist/esm/types/utils/constants.d.ts +0 -54
  327. package/dist/esm/types/utils/elementLinkUtil.d.ts +0 -2
  328. package/dist/esm/types/utils/generateUniqueId.d.ts +0 -1
  329. package/dist/esm/types/utils/index.d.ts +0 -9
  330. package/dist/esm/types/utils/lineUtil.d.ts +0 -3
  331. package/dist/esm/types/utils/mathUtil.d.ts +0 -6
  332. package/dist/esm/types/utils/pathUtil.d.ts +0 -13
  333. package/dist/esm/types/utils/portSlideRailSVGUtil.d.ts +0 -3
  334. package/dist/esm/types/utils/positionUtil.d.ts +0 -55
  335. package/dist/esm/types/utils/svgUtil.d.ts +0 -3
@@ -1 +0,0 @@
1
- {"version":3,"file":"displaybox.js","sources":["../../src/displaybox/DisplayBoxSidebar.tsx","../../src/utils/ids.ts","../../node_modules/tslib/tslib.es6.js","../../src/displaybox/demos/shared.ts","../../src/displaybox/demos/basicDemo.ts","../../src/displaybox/demos/linkPortCreationDemo.ts","../../src/displaybox/demos/nestedDemo.ts","../../src/displaybox/demos/customDemo.ts","../../src/displaybox/demos/textDemo.ts","../../src/displaybox/demos/selectionDemo.ts","../../src/displaybox/demos/eventHandlersDemo.ts","../../src/displaybox/demos/engineEventsDemo.ts","../../src/displaybox/demos/linkCancelDemo.ts","../../src/displaybox/demos/autoLayoutDemo.ts","../../src/displaybox/demos/externalDragDropDemo.ts","../../src/displaybox/demos/shapeGalleryDemo.ts","../../src/displaybox/demos/svgPathDemo.ts","../../src/displaybox/demos/multiLevelTreeDemo.ts","../../src/displaybox/demos/multipleElementsDemo.ts","../../src/displaybox/demos/portConstraintsDemo.ts","../../src/displaybox/demos/portBorderDemo.ts","../../src/displaybox/demos/childConstraintsDemo.ts","../../src/displaybox/demos/gridOverlayDemo.ts","../../src/displaybox/demos/routingDemo.ts","../../src/displaybox/demos/obstacleRoutingDemo.ts","../../src/displaybox/demos/linkBendHandlesDemo.ts","../../src/displaybox/DisplayBoxControls.tsx","../../src/displaybox/DisplayBoxStage.tsx","../../src/displaybox/useDemoControls.ts","../../src/models/ElementModel.ts","../../src/models/LinkModel.ts","../../src/models/OwnershipIndex.ts","../../src/models/PortModel.ts","../../src/models/TextModel.ts","../../src/utils/geometry.ts","../../src/models/DiagramModel.ts","../../src/engine/CommandQueue.ts","../../src/engine/EventBus.ts","../../src/engine/SelectionState.ts","../../src/engine/ViewportState.ts","../../src/utils/patches.ts","../../src/engine/EngineCommands.ts","../../src/renderer/RenderScheduler.ts","../../src/strategies/ObstacleRouter.ts","../../src/strategies/DefaultSnapper.ts","../../src/renderer/RenderTypes.ts","../../src/measure/CanvasTextMeasurer.ts","../../src/engine/DiagramEngine.ts","../../src/renderer/konva/KonvaLayers.ts","../../src/renderer/konva/KonvaNodeFactory.ts","../../src/renderer/konva/KonvaRenderer.ts","../../src/renderer/konva/KonvaHitTester.ts","../../src/renderer/konva/KonvaInteraction.ts","../../src/api/createDiagramEditor.ts","../../src/displaybox/DisplayBoxMetricsContext.tsx","../../src/displaybox/useDemoEditor.ts","../../src/displaybox/useOffsetSequence.ts","../../src/displaybox/demos/EventHandlersDemoTab.tsx","../../src/displaybox/demos/EngineEventsDemoTab.tsx","../../src/displaybox/demos/LinkCancelDemoTab.tsx","../../src/displaybox/demos/AutoLayoutDemoTab.tsx","../../src/displaybox/demos/ExternalDragDropDemoTab.tsx","../../src/displaybox/demos/SvgPathDemoTab.tsx","../../src/displaybox/demos/SimpleDemo.tsx","../../src/displaybox/demos/ObstacleRoutingDemoTab.tsx","../../src/displaybox/demos/index.tsx","../../src/displaybox/DisplayBox.tsx"],"sourcesContent":["import React from 'react';\nimport type { DemoDefinition, DiagramCounts, ViewportSnapshot } from './types';\n\ntype SidebarProps = {\n demos: DemoDefinition[];\n activeDemoId: string;\n onSelectDemo: (id: string) => void;\n selection: string[];\n counts: DiagramCounts;\n viewport: ViewportSnapshot;\n snapEnabled: boolean;\n};\n\nconst DisplayBoxSidebar = ({\n demos,\n activeDemoId,\n onSelectDemo,\n selection,\n counts,\n viewport,\n snapEnabled,\n}: SidebarProps) => (\n <aside style={{ borderRight: '1px solid #e0e0e0', paddingRight: 16 }}>\n <h2 style={{ marginTop: 0 }}>Demos</h2>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {demos.map((demo) => (\n <button\n key={demo.id}\n onClick={() => onSelectDemo(demo.id)}\n aria-pressed={demo.id === activeDemoId}\n style={{\n padding: '8px 12px',\n textAlign: 'left',\n borderRadius: 6,\n border: demo.id === activeDemoId ? '2px solid #1f4d99' : '1px solid #d0d0d0',\n background: demo.id === activeDemoId ? '#e6f2ff' : '#ffffff',\n cursor: 'pointer',\n }}\n >\n {demo.title}\n </button>\n ))}\n </div>\n <div style={{ marginTop: 20, fontSize: 13, lineHeight: 1.4 }}>\n <strong>Selection</strong>\n <div>{selection.length === 0 ? 'None' : selection.join(', ')}</div>\n </div>\n <div style={{ marginTop: 12, fontSize: 13, lineHeight: 1.4 }}>\n <strong>Counts</strong>\n <div>Elements: {counts.elements}</div>\n <div>Ports: {counts.ports}</div>\n <div>Links: {counts.links}</div>\n <div>Texts: {counts.texts}</div>\n </div>\n <div style={{ marginTop: 12, fontSize: 13, lineHeight: 1.4 }}>\n <strong>Viewport</strong>\n <div>\n Pan: {Math.round(viewport.pan.x)}, {Math.round(viewport.pan.y)}\n </div>\n <div>Zoom: {viewport.zoom.toFixed(2)}</div>\n </div>\n <div style={{ marginTop: 12, fontSize: 13, lineHeight: 1.4 }}>\n <strong>Snapping</strong>\n <div>{snapEnabled ? 'On (20px grid)' : 'Off'}</div>\n </div>\n </aside>\n);\n\nexport default DisplayBoxSidebar;\n","const fallbackId = (): string =>\n `id-${Math.random().toString(36).slice(2, 10)}-${Date.now().toString(36)}`;\n\nexport const createId = (): string => {\n const cryptoApi = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (cryptoApi?.randomUUID) {\n return cryptoApi.randomUUID();\n }\n return fallbackId();\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import type { CSSProperties } from 'react';\nimport type { SimpleShape } from '../../api';\nimport type { ToolboxItem } from '../types';\nimport type { RouterStrategy } from '../../strategies/RouterStrategy';\n\nexport const baseElementShapes: SimpleShape[] = [\n {\n id: 'default',\n kind: 'rect',\n style: {\n cornerRadius: 8,\n fill: '#e6f2ff',\n stroke: '#1f4d99',\n strokeWidth: 2,\n },\n },\n {\n id: 'panel',\n kind: 'rect',\n style: {\n cornerRadius: 14,\n fill: '#fff4dd',\n stroke: '#a26722',\n strokeWidth: 2,\n },\n },\n];\n\nexport const basePortShapes: SimpleShape[] = [\n {\n id: 'port-circle',\n kind: 'circle',\n style: {\n radius: 6,\n fill: '#ffffff',\n stroke: '#1f4d99',\n strokeWidth: 2,\n name: 'port',\n },\n },\n {\n id: 'port-dark',\n kind: 'circle',\n style: {\n radius: 5,\n fill: '#1f4d99',\n stroke: '#1f4d99',\n strokeWidth: 1,\n name: 'port',\n },\n },\n];\n\nexport const customGalleryShapes: SimpleShape[] = [\n {\n id: 'rect-basic',\n kind: 'rect',\n style: {\n cornerRadius: 8,\n fill: '#e6f2ff',\n stroke: '#1f4d99',\n strokeWidth: 2,\n },\n },\n {\n id: 'circle-basic',\n kind: 'circle',\n style: {\n fill: '#eaf7e6',\n stroke: '#2f7a3d',\n strokeWidth: 2,\n },\n },\n {\n id: 'diamond-basic',\n kind: 'diamond',\n style: {\n fill: '#fff0f3',\n stroke: '#c0392b',\n strokeWidth: 2,\n },\n },\n {\n id: 'triangle-basic',\n kind: 'triangle',\n style: {\n fill: '#f3f1ff',\n stroke: '#5b3cc4',\n strokeWidth: 2,\n },\n },\n];\n\nexport const externalToolboxItems: ToolboxItem[] = [\n {\n id: 'toolbox-default',\n label: 'Standard Node',\n shapeId: 'default',\n size: { width: 180, height: 120 },\n },\n {\n id: 'toolbox-panel',\n label: 'Panel Node',\n shapeId: 'panel',\n size: { width: 220, height: 140 },\n },\n];\n\nexport const defaultGhostSize = { width: 180, height: 120 };\n\nexport const defaultSvgPath = 'M10 10 H110 V90 H10 Z';\nexport const defaultSvgPathSize = { width: 180, height: 120 };\n\nexport const orthogonalRouter: RouterStrategy = {\n route: (source, target) => {\n if (Math.abs(source.x - target.x) < 1 || Math.abs(source.y - target.y) < 1) {\n return [{ ...source }, { ...target }];\n }\n const midX = Math.round((source.x + target.x) / 2);\n return [\n { ...source },\n { x: midX, y: source.y },\n { x: midX, y: target.y },\n { ...target },\n ];\n },\n};\n\nexport const gridStageStyle: CSSProperties = {\n backgroundColor: '#f8f8f8',\n backgroundImage:\n 'linear-gradient(0deg, rgba(0,0,0,0.08) 1px, transparent 1px), linear-gradient(90deg, rgba(0,0,0,0.08) 1px, transparent 1px)',\n backgroundSize: '20px 20px',\n};\n","import type { DiagramState } from '../../api';\nimport { createId } from '../../utils/ids';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createBasicState = (): DiagramState => ({\n elements: [\n {\n id: 'element-a',\n position: { x: 120, y: 120 },\n size: { width: 220, height: 140 },\n shapeId: 'default',\n },\n {\n id: 'element-b',\n position: { x: 430, y: 260 },\n size: { width: 240, height: 150 },\n shapeId: 'default',\n },\n ],\n ports: [\n {\n id: 'port-a',\n elementId: 'element-a',\n position: { x: 40, y: 40 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n {\n id: 'port-b',\n elementId: 'element-b',\n position: { x: 60, y: 60 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n ],\n links: [\n {\n id: 'link-ab',\n sourcePortId: 'port-a',\n targetPortId: 'port-b',\n points: [],\n },\n ],\n texts: [\n {\n id: 'text-a',\n content: 'Element A',\n position: { x: 10, y: -10 },\n ownerId: 'element-a',\n style: { fontSize: 14, fontFamily: 'sans-serif' },\n },\n {\n id: 'text-b',\n content: 'Element B',\n position: { x: 10, y: -10 },\n ownerId: 'element-b',\n style: { fontSize: 14, fontFamily: 'sans-serif' },\n },\n ],\n});\n\nexport const basicDemoConfig: DemoConfig = ({\n id: 'basic',\n title: 'Basic Diagram',\n description: 'Elements, ports, link, and labels.',\n createState: createBasicState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'add-element',\n label: 'Add element',\n run: (editor, _state, demo, helpers) => {\n const offset = helpers.nextOffset();\n const id = `element-${createId()}`;\n editor.addElement({\n id,\n position: { x: 140 + offset, y: 140 + offset },\n size: { width: 200, height: 120 },\n shapeId: demo.defaultElementShapeId ?? 'default',\n });\n },\n },\n {\n id: 'add-port',\n label: 'Add port',\n run: (editor, state, demo, helpers) => {\n const element = state.elements[0];\n if (!element) return;\n const offset = helpers.nextOffset();\n editor.addPortToElement(element.id, {\n id: `port-${createId()}`,\n elementId: element.id,\n position: { x: 20 + offset, y: 20 + offset },\n shapeId: demo.defaultPortShapeId ?? 'port-circle',\n });\n },\n },\n {\n id: 'add-link',\n label: 'Add link',\n run: (editor, state) => {\n if (state.ports.length < 2) return;\n const [first, second] = state.ports;\n editor.addLink({\n id: `link-${createId()}`,\n sourcePortId: first.id,\n targetPortId: second.id,\n points: [],\n });\n },\n },\n {\n id: 'add-text',\n label: 'Add text',\n run: (editor, state) => {\n const element = state.elements[0];\n if (!element) return;\n editor.addText({\n id: `text-${createId()}`,\n content: 'New label',\n position: { x: 12, y: -12 },\n ownerId: element.id,\n });\n },\n },\n ],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createLinkPortCreationState = (): DiagramState => ({\n elements: [\n {\n id: 'link-source',\n position: { x: 140, y: 160 },\n size: { width: 220, height: 140 },\n shapeId: 'default',\n },\n {\n id: 'link-target',\n position: { x: 440, y: 200 },\n size: { width: 220, height: 140 },\n shapeId: 'panel',\n },\n ],\n ports: [\n {\n id: 'link-source-port',\n elementId: 'link-source',\n position: { x: 30, y: 30 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n ],\n links: [],\n texts: [\n { id: 'link-source-label', content: 'Drag from the port', position: { x: 12, y: -12 }, ownerId: 'link-source' },\n { id: 'link-target-label', content: 'Drop on me to create a port', position: { x: 12, y: -12 }, ownerId: 'link-target' },\n ],\n});\n\nexport const linkPortCreationDemoConfig: DemoConfig = ({\n id: 'link-port-creation',\n title: 'Link Creates Port',\n description: 'Drag from a port to an element to auto-create a target port.',\n createState: createLinkPortCreationState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport { createId } from '../../utils/ids';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createNestedState = (): DiagramState => ({\n elements: [\n {\n id: 'parent-1',\n position: { x: 140, y: 140 },\n size: { width: 320, height: 240 },\n shapeId: 'panel',\n },\n {\n id: 'child-1',\n position: { x: 40, y: 60 },\n size: { width: 160, height: 100 },\n shapeId: 'default',\n parentId: 'parent-1',\n },\n ],\n ports: [\n {\n id: 'child-port',\n elementId: 'child-1',\n position: { x: 20, y: 20 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n ],\n links: [],\n texts: [\n {\n id: 'child-label',\n content: 'Child',\n position: { x: 6, y: -16 },\n ownerId: 'child-1',\n },\n ],\n});\n\nexport const nestedDemoConfig: DemoConfig = ({\n id: 'nested',\n title: 'Nested Elements',\n description: 'Parent/child elements with world positioning.',\n createState: createNestedState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'move-parent',\n label: 'Move parent',\n run: (editor, state) => {\n const parent = state.elements.find((element) => element.id === 'parent-1');\n if (!parent) return;\n editor.moveElementTo(parent.id, parent.position.x + 40, parent.position.y + 20);\n },\n },\n {\n id: 'add-child',\n label: 'Add child',\n run: (editor, state, demo, helpers) => {\n const parent = state.elements.find((element) => element.id === 'parent-1');\n if (!parent) return;\n const offset = helpers.nextOffset();\n editor.addElement({\n id: `child-${createId()}`,\n position: { x: 30 + offset, y: 50 + offset },\n size: { width: 140, height: 90 },\n shapeId: demo.defaultElementShapeId ?? 'default',\n parentId: parent.id,\n });\n },\n },\n ],\n});\n","import type { DiagramState } from '../../api';\nimport { createId } from '../../utils/ids';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createCustomShapeState = (): DiagramState => ({\n elements: [\n {\n id: 'custom-1',\n position: { x: 120, y: 160 },\n size: { width: 260, height: 150 },\n shapeId: 'panel',\n },\n ],\n ports: [\n {\n id: 'custom-port',\n elementId: 'custom-1',\n position: { x: 30, y: 30 },\n shapeId: 'port-dark',\n anchorCenter: true,\n },\n ],\n links: [],\n texts: [\n {\n id: 'custom-text',\n content: 'Custom Shapes',\n position: { x: 20, y: -16 },\n ownerId: 'custom-1',\n },\n ],\n});\n\nexport const customDemoConfig: DemoConfig = ({\n id: 'custom',\n title: 'Custom Shapes',\n description: 'Built-in shapes with custom styling.',\n createState: createCustomShapeState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'panel',\n defaultPortShapeId: 'port-dark',\n actions: [\n {\n id: 'add-element',\n label: 'Add element',\n run: (editor, _state, demo, helpers) => {\n const offset = helpers.nextOffset();\n editor.addElement({\n id: `panel-${createId()}`,\n position: { x: 160 + offset, y: 140 + offset },\n size: { width: 220, height: 140 },\n shapeId: demo.defaultElementShapeId ?? 'panel',\n });\n },\n },\n ],\n});\n","import type { DiagramState } from '../../api';\nimport { createId } from '../../utils/ids';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createTextOwnershipState = (): DiagramState => ({\n elements: [\n {\n id: 'text-owner',\n position: { x: 180, y: 180 },\n size: { width: 220, height: 140 },\n shapeId: 'default',\n },\n ],\n ports: [\n {\n id: 'text-port',\n elementId: 'text-owner',\n position: { x: 30, y: 30 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n ],\n links: [\n {\n id: 'text-link',\n sourcePortId: 'text-port',\n targetPortId: 'text-port',\n points: [\n { x: 220, y: 220 },\n { x: 320, y: 260 },\n ],\n },\n ],\n texts: [\n {\n id: 'owner-label',\n content: 'Element Label',\n position: { x: 12, y: -10 },\n ownerId: 'text-owner',\n },\n {\n id: 'port-label',\n content: 'Port Label',\n position: { x: 10, y: -16 },\n ownerId: 'text-port',\n },\n {\n id: 'link-label',\n content: 'Link Label',\n position: { x: 10, y: 10 },\n ownerId: 'text-link',\n },\n {\n id: 'floating-text',\n content: 'Floating Text',\n position: { x: 420, y: 120 },\n },\n ],\n});\n\nexport const textDemoConfig: DemoConfig = ({\n id: 'text',\n title: 'Text + Ownership',\n description: 'Text attached to element, port, link, and floating text. Double-click to edit.',\n createState: createTextOwnershipState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'add-floating-text',\n label: 'Add floating text',\n run: (editor, _state, _demo, helpers) => {\n const offset = helpers.nextOffset();\n editor.addText({\n id: `text-${createId()}`,\n content: 'Floating text',\n position: { x: 420 + offset, y: 180 + offset },\n });\n },\n },\n ],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createSelectionState = (): DiagramState => ({\n elements: [\n {\n id: 'select-1',\n position: { x: 140, y: 140 },\n size: { width: 180, height: 120 },\n shapeId: 'default',\n },\n {\n id: 'select-2',\n position: { x: 380, y: 220 },\n size: { width: 180, height: 120 },\n shapeId: 'default',\n },\n ],\n ports: [],\n links: [],\n texts: [\n {\n id: 'select-tip',\n content: 'Click to select, drag to move, Delete/Backspace to remove.',\n position: { x: 80, y: 80 },\n },\n ],\n});\n\nexport const selectionDemoConfig: DemoConfig = ({\n id: 'selection',\n title: 'Selection + Interaction',\n description: 'Click to select, drag to move, marquee-select on empty space, delete to remove.',\n createState: createSelectionState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'select-all',\n label: 'Select all elements',\n run: (editor, state) => {\n editor.setSelection(state.elements.map((element) => element.id));\n },\n },\n ],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createEventHandlersState = (): DiagramState => ({\n elements: [\n {\n id: 'event-element',\n position: { x: 160, y: 160 },\n size: { width: 220, height: 140 },\n shapeId: 'default',\n },\n {\n id: 'event-element-2',\n position: { x: 460, y: 280 },\n size: { width: 220, height: 140 },\n shapeId: 'panel',\n },\n ],\n ports: [],\n links: [],\n texts: [\n {\n id: 'event-tip',\n content: 'Pick an engine event and interact to see the handler run.',\n position: { x: 120, y: 120 },\n },\n ],\n});\n\nexport const eventHandlersDemoConfig: DemoConfig = ({\n id: 'event-handlers',\n title: 'Event Handlers',\n description: 'Choose an engine event and watch the handler effect.',\n createState: createEventHandlersState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createEngineEventsState = (): DiagramState => ({\n elements: [\n {\n id: 'engine-events-source',\n position: { x: 140, y: 160 },\n size: { width: 220, height: 140 },\n shapeId: 'default',\n },\n {\n id: 'engine-events-target',\n position: { x: 500, y: 260 },\n size: { width: 240, height: 160 },\n shapeId: 'panel',\n },\n ],\n ports: [\n {\n id: 'engine-events-source-port',\n elementId: 'engine-events-source',\n position: { x: 40, y: 60 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n {\n id: 'engine-events-target-port',\n elementId: 'engine-events-target',\n position: { x: 60, y: 50 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n ],\n links: [\n {\n id: 'engine-events-link',\n sourcePortId: 'engine-events-source-port',\n targetPortId: 'engine-events-target-port',\n points: [],\n routing: 'auto',\n },\n ],\n texts: [\n {\n id: 'engine-events-tip',\n content: 'Select an engine event and interact to see the payload.',\n position: { x: 140, y: 120 },\n },\n ],\n});\n\nexport const engineEventsDemoConfig: DemoConfig = ({\n id: 'engine-events',\n title: 'Engine Events',\n description: 'Inspect the latest payload for each engine event.',\n createState: createEngineEventsState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createLinkCancelState = (): DiagramState => ({\n elements: [\n {\n id: 'cancel-source',\n position: { x: 140, y: 180 },\n size: { width: 200, height: 120 },\n shapeId: 'default',\n },\n {\n id: 'cancel-target',\n position: { x: 480, y: 200 },\n size: { width: 200, height: 120 },\n shapeId: 'panel',\n },\n ],\n ports: [\n {\n id: 'cancel-source-port',\n elementId: 'cancel-source',\n position: { x: 30, y: 60 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n {\n id: 'cancel-target-port',\n elementId: 'cancel-target',\n position: { x: 170, y: 50 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n ],\n links: [],\n texts: [\n {\n id: 'cancel-tip',\n content: 'Start a link from the left port. Drop on empty space to cancel, or on the right port to create.',\n position: { x: 120, y: 140 },\n },\n ],\n});\n\nexport const linkCancelDemoConfig: DemoConfig = ({\n id: 'link-cancel',\n title: 'Link Drag Cancel',\n description: 'Watch elementLinkEnded events when a link drag succeeds or gets cancelled.',\n createState: createLinkCancelState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createAutoLayoutState = (): DiagramState => ({\n elements: [\n {\n id: 'layout-row',\n position: { x: 60, y: 80 },\n size: { width: 180, height: 96 },\n shapeId: 'panel',\n layout: { mode: 'horizontal', padding: { x: 14, y: 12 }, gap: 14, align: 'center' },\n },\n { id: 'row-a', position: { x: 0, y: 0 }, size: { width: 62, height: 44 }, shapeId: 'default', parentId: 'layout-row' },\n { id: 'row-b', position: { x: 0, y: 0 }, size: { width: 96, height: 32 }, shapeId: 'default', parentId: 'layout-row' },\n { id: 'row-c', position: { x: 0, y: 0 }, size: { width: 54, height: 56 }, shapeId: 'default', parentId: 'layout-row' },\n {\n id: 'row-nested-owner',\n position: { x: 0, y: 0 },\n size: { width: 82, height: 82 },\n shapeId: 'default',\n parentId: 'layout-row',\n layout: { mode: 'vertical', padding: { x: 8, y: 6 }, gap: 6, align: 'start' },\n },\n { id: 'row-nested-child-a', position: { x: 0, y: 0 }, size: { width: 60, height: 20 }, shapeId: 'default', parentId: 'row-nested-owner' },\n { id: 'row-nested-child-b', position: { x: 0, y: 0 }, size: { width: 76, height: 22 }, shapeId: 'default', parentId: 'row-nested-owner' },\n\n {\n id: 'layout-column',\n position: { x: 400, y: 70 },\n size: { width: 120, height: 140 },\n shapeId: 'panel',\n layout: { mode: 'vertical', padding: { x: 12, y: 10 }, gap: 16, align: 'end' },\n },\n { id: 'col-a', position: { x: 0, y: 0 }, size: { width: 44, height: 28 }, shapeId: 'default', parentId: 'layout-column' },\n { id: 'col-b', position: { x: 0, y: 0 }, size: { width: 70, height: 36 }, shapeId: 'default', parentId: 'layout-column' },\n { id: 'col-c', position: { x: 0, y: 0 }, size: { width: 92, height: 44 }, shapeId: 'default', parentId: 'layout-column' },\n\n {\n id: 'layout-nested',\n position: { x: 120, y: 260 },\n size: { width: 190, height: 130 },\n shapeId: 'panel',\n layout: { mode: 'horizontal', padding: { x: 12, y: 12 }, gap: 12, align: 'start' },\n },\n {\n id: 'nested-stack',\n position: { x: 0, y: 0 },\n size: { width: 90, height: 92 },\n shapeId: 'default',\n parentId: 'layout-nested',\n layout: { mode: 'vertical', padding: { x: 8, y: 8 }, gap: 8, align: 'center' },\n },\n { id: 'stack-a', position: { x: 0, y: 0 }, size: { width: 60, height: 24 }, shapeId: 'default', parentId: 'nested-stack' },\n { id: 'stack-b', position: { x: 0, y: 0 }, size: { width: 90, height: 30 }, shapeId: 'default', parentId: 'nested-stack' },\n {\n id: 'stack-overflow',\n position: { x: 0, y: 0 },\n size: { width: 110, height: 26 },\n shapeId: 'default',\n parentId: 'nested-stack',\n },\n { id: 'nested-peer', position: { x: 0, y: 0 }, size: { width: 50, height: 90 }, shapeId: 'default', parentId: 'layout-nested' },\n\n {\n id: 'layout-manual',\n position: { x: 420, y: 260 },\n size: { width: 190, height: 120 },\n shapeId: 'panel',\n },\n { id: 'manual-a', position: { x: 12, y: 18 }, size: { width: 60, height: 30 }, shapeId: 'default', parentId: 'layout-manual' },\n { id: 'manual-b', position: { x: 90, y: 60 }, size: { width: 68, height: 32 }, shapeId: 'default', parentId: 'layout-manual' },\n ],\n ports: [],\n links: [],\n texts: [\n { id: 'label-layout-row', content: 'Row parent', position: { x: 8, y: -18 }, ownerId: 'layout-row' },\n { id: 'label-row-a', content: 'row-a', position: { x: 6, y: -14 }, ownerId: 'row-a' },\n { id: 'label-row-b', content: 'row-b', position: { x: 6, y: -14 }, ownerId: 'row-b' },\n { id: 'label-row-c', content: 'row-c', position: { x: 6, y: -14 }, ownerId: 'row-c' },\n { id: 'label-row-nested-owner', content: 'owns children', position: { x: 6, y: -16 }, ownerId: 'row-nested-owner' },\n\n { id: 'label-layout-column', content: 'Column parent', position: { x: 8, y: -18 }, ownerId: 'layout-column' },\n { id: 'label-col-a', content: 'col-a', position: { x: 6, y: -14 }, ownerId: 'col-a' },\n { id: 'label-col-b', content: 'col-b', position: { x: 6, y: -14 }, ownerId: 'col-b' },\n { id: 'label-col-c', content: 'col-c', position: { x: 6, y: -14 }, ownerId: 'col-c' },\n\n { id: 'label-layout-nested', content: 'Row + nested column', position: { x: 6, y: -18 }, ownerId: 'layout-nested' },\n { id: 'label-nested-stack', content: 'nested stack', position: { x: 6, y: -16 }, ownerId: 'nested-stack' },\n { id: 'label-stack-a', content: 'stack-a', position: { x: 6, y: -14 }, ownerId: 'stack-a' },\n { id: 'label-stack-b', content: 'stack-b', position: { x: 6, y: -14 }, ownerId: 'stack-b' },\n { id: 'label-stack-overflow', content: 'stack-overflow', position: { x: 6, y: -14 }, ownerId: 'stack-overflow' },\n { id: 'label-nested-peer', content: 'nested-peer', position: { x: 6, y: -14 }, ownerId: 'nested-peer' },\n\n { id: 'label-layout-manual', content: 'Manual (no layout)', position: { x: 6, y: -18 }, ownerId: 'layout-manual' },\n { id: 'label-manual-a', content: 'manual-a', position: { x: 6, y: -14 }, ownerId: 'manual-a' },\n { id: 'label-manual-b', content: 'manual-b', position: { x: 6, y: -14 }, ownerId: 'manual-b' },\n ],\n});\n\nexport const autoLayoutDemoConfig: DemoConfig = ({\n id: 'auto-layout',\n title: 'Element Auto-Layout',\n description: 'Arrange children horizontally or vertically with padding, alignment, and nested layouts.',\n createState: createAutoLayoutState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createExternalDragDropState = (): DiagramState => ({\n elements: [],\n ports: [],\n links: [],\n texts: [\n {\n id: 'drop-tip',\n content: 'Drag items from the toolbox into the canvas.',\n position: { x: 120, y: 120 },\n },\n ],\n});\n\nexport const externalDragDropDemoConfig: DemoConfig = ({\n id: 'external-drag-drop',\n title: 'External Drag + Drop',\n description: 'Drag items from the external toolbox into the canvas. Drops use client-to-world conversion.',\n createState: createExternalDragDropState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { basePortShapes, customGalleryShapes } from './shared';\n\nconst createShapeGalleryState = (): DiagramState => ({\n elements: [\n {\n id: 'shape-rect',\n position: { x: 120, y: 120 },\n size: { width: 180, height: 120 },\n shapeId: 'rect-basic',\n },\n {\n id: 'shape-circle',\n position: { x: 360, y: 120 },\n size: { width: 140, height: 140 },\n shapeId: 'circle-basic',\n },\n {\n id: 'shape-diamond',\n position: { x: 560, y: 110 },\n size: { width: 160, height: 130 },\n shapeId: 'diamond-basic',\n },\n {\n id: 'shape-triangle',\n position: { x: 260, y: 320 },\n size: { width: 180, height: 140 },\n shapeId: 'triangle-basic',\n },\n ],\n ports: [],\n links: [],\n texts: [\n { id: 'shape-rect-label', content: 'Rectangle', position: { x: 12, y: -12 }, ownerId: 'shape-rect' },\n { id: 'shape-circle-label', content: 'Circle', position: { x: 12, y: -12 }, ownerId: 'shape-circle' },\n { id: 'shape-diamond-label', content: 'Diamond', position: { x: 12, y: -12 }, ownerId: 'shape-diamond' },\n { id: 'shape-triangle-label', content: 'Triangle', position: { x: 12, y: -12 }, ownerId: 'shape-triangle' },\n ],\n});\n\nexport const shapeGalleryDemoConfig: DemoConfig = ({\n id: 'shape-gallery',\n title: 'Custom Shapes Gallery',\n description: 'Circle, diamond, and triangle shapes using simple shape configs.',\n createState: createShapeGalleryState,\n elementShapes: customGalleryShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'rect-basic',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createSvgPathDemoState = (): DiagramState => ({\n elements: [],\n ports: [],\n links: [],\n texts: [\n {\n id: 'svg-path-tip',\n content: 'Paste an SVG path, then click \"Add SVG Element\" to place it on the canvas.',\n position: { x: 120, y: 120 },\n },\n ],\n});\n\nexport const svgPathDemoConfig: DemoConfig = ({\n id: 'svg-path',\n title: 'SVG Path Input',\n description: 'Paste an SVG path string to register a custom shape and add it to the canvas.',\n createState: createSvgPathDemoState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createMultiLevelTreeState = (): DiagramState => ({\n elements: [\n {\n id: 'tree-root',\n position: { x: 120, y: 120 },\n size: { width: 300, height: 220 },\n shapeId: 'panel',\n },\n {\n id: 'tree-child-1',\n position: { x: 40, y: 40 },\n size: { width: 200, height: 140 },\n shapeId: 'default',\n parentId: 'tree-root',\n },\n {\n id: 'tree-child-2',\n position: { x: 30, y: 30 },\n size: { width: 150, height: 100 },\n shapeId: 'default',\n parentId: 'tree-child-1',\n },\n {\n id: 'tree-child-3',\n position: { x: 20, y: 20 },\n size: { width: 110, height: 70 },\n shapeId: 'default',\n parentId: 'tree-child-2',\n },\n {\n id: 'tree-root-2',\n position: { x: 520, y: 140 },\n size: { width: 260, height: 200 },\n shapeId: 'panel',\n },\n {\n id: 'tree2-child-1',\n position: { x: 30, y: 40 },\n size: { width: 170, height: 120 },\n shapeId: 'default',\n parentId: 'tree-root-2',\n },\n {\n id: 'tree2-child-2',\n position: { x: 20, y: 20 },\n size: { width: 120, height: 80 },\n shapeId: 'default',\n parentId: 'tree2-child-1',\n },\n ],\n ports: [\n {\n id: 'tree-root-port',\n elementId: 'tree-root',\n position: { x: 150, y: 0 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n {\n id: 'tree-child-3-port',\n elementId: 'tree-child-3',\n position: { x: 55, y: 35 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n {\n id: 'tree-root-2-port',\n elementId: 'tree-root-2',\n position: { x: 130, y: 200 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n {\n id: 'tree2-child-2-port',\n elementId: 'tree2-child-2',\n position: { x: 60, y: 40 },\n shapeId: 'port-circle',\n anchorCenter: true,\n },\n ],\n links: [\n {\n id: 'tree-link-1',\n sourcePortId: 'tree-root-port',\n targetPortId: 'tree-root-2-port',\n points: [],\n },\n {\n id: 'tree-link-2',\n sourcePortId: 'tree-child-3-port',\n targetPortId: 'tree2-child-2-port',\n points: [],\n },\n ],\n texts: [\n { id: 'tree-root-label', content: 'Root A', position: { x: 12, y: -16 }, ownerId: 'tree-root' },\n { id: 'tree-child-1-label', content: 'Level 1', position: { x: 12, y: -16 }, ownerId: 'tree-child-1' },\n { id: 'tree-child-2-label', content: 'Level 2', position: { x: 12, y: -16 }, ownerId: 'tree-child-2' },\n { id: 'tree-child-3-label', content: 'Level 3', position: { x: 12, y: -16 }, ownerId: 'tree-child-3' },\n { id: 'tree-root-2-label', content: 'Root B', position: { x: 12, y: -16 }, ownerId: 'tree-root-2' },\n { id: 'tree2-child-1-label', content: 'Level 1', position: { x: 12, y: -16 }, ownerId: 'tree2-child-1' },\n { id: 'tree2-child-2-label', content: 'Level 2', position: { x: 12, y: -16 }, ownerId: 'tree2-child-2' },\n ],\n});\n\nexport const multiLevelTreeDemoConfig: DemoConfig = ({\n id: 'multi-level-tree',\n title: 'Multi-level Tree',\n description: 'Three-level and two-level nested trees with default links.',\n createState: createMultiLevelTreeState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createMultipleElementsState = (): DiagramState => ({\n elements: [\n {\n id: 'multi-1',\n position: { x: 120, y: 120 },\n size: { width: 220, height: 140 },\n shapeId: 'default',\n },\n {\n id: 'multi-2',\n position: { x: 420, y: 160 },\n size: { width: 220, height: 140 },\n shapeId: 'panel',\n },\n {\n id: 'multi-3',\n position: { x: 260, y: 360 },\n size: { width: 240, height: 160 },\n shapeId: 'default',\n },\n ],\n ports: [\n { id: 'm1p1', elementId: 'multi-1', position: { x: 30, y: 30 }, shapeId: 'port-circle', anchorCenter: true },\n { id: 'm2p1', elementId: 'multi-2', position: { x: 40, y: 30 }, shapeId: 'port-circle', anchorCenter: true },\n { id: 'm3p1', elementId: 'multi-3', position: { x: 40, y: 40 }, shapeId: 'port-circle', anchorCenter: true },\n ],\n links: [\n {\n id: 'link-12',\n sourcePortId: 'm1p1',\n targetPortId: 'm2p1',\n points: [],\n },\n {\n id: 'link-23',\n sourcePortId: 'm2p1',\n targetPortId: 'm3p1',\n points: [],\n },\n ],\n texts: [\n { id: 'm1-label', content: 'Multi 1', position: { x: 12, y: -12 }, ownerId: 'multi-1' },\n { id: 'm2-label', content: 'Multi 2', position: { x: 12, y: -12 }, ownerId: 'multi-2' },\n { id: 'm3-label', content: 'Multi 3', position: { x: 12, y: -12 }, ownerId: 'multi-3' },\n ],\n});\n\nexport const multipleElementsDemoConfig: DemoConfig = ({\n id: 'multiple',\n title: 'Multiple Elements + Links',\n description: 'Three elements with ports, links, and labels.',\n createState: createMultipleElementsState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createPortConstraintState = (): DiagramState => ({\n elements: [\n {\n id: 'constraint-host',\n position: { x: 140, y: 140 },\n size: { width: 260, height: 180 },\n shapeId: 'default',\n },\n ],\n ports: [\n {\n id: 'port-free',\n elementId: 'constraint-host',\n position: { x: 60, y: 40 },\n shapeId: 'port-circle',\n moveMode: 'free',\n anchorCenter: true,\n },\n {\n id: 'port-inside',\n elementId: 'constraint-host',\n position: { x: 120, y: 80 },\n shapeId: 'port-circle',\n moveMode: 'inside',\n anchorCenter: true,\n },\n {\n id: 'port-border',\n elementId: 'constraint-host',\n position: { x: 200, y: 140 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n ],\n links: [],\n texts: [\n { id: 'port-free-label', content: 'Free', position: { x: 8, y: -18 }, ownerId: 'port-free' },\n { id: 'port-inside-label', content: 'Inside', position: { x: 8, y: -18 }, ownerId: 'port-inside' },\n { id: 'port-border-label', content: 'Border', position: { x: 8, y: -18 }, ownerId: 'port-border' },\n ],\n});\n\nexport const portConstraintsDemoConfig: DemoConfig = ({\n id: 'port-constraints',\n title: 'Port Movement Constraints',\n description: 'Ports constrained to free, inside, or border movement.',\n createState: createPortConstraintState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createPortBorderState = (): DiagramState => ({\n elements: [\n {\n id: 'border-host',\n position: { x: 160, y: 140 },\n size: { width: 320, height: 200 },\n shapeId: 'default',\n },\n ],\n ports: [\n {\n id: 'border-port-1',\n elementId: 'border-host',\n position: { x: 60, y: 0 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n {\n id: 'border-port-2',\n elementId: 'border-host',\n position: { x: 320, y: 120 },\n shapeId: 'port-circle',\n moveMode: 'border',\n anchorCenter: true,\n },\n ],\n links: [\n {\n id: 'border-link',\n sourcePortId: 'border-port-1',\n targetPortId: 'border-port-2',\n points: [],\n },\n ],\n texts: [\n { id: 'border-host-label', content: 'Port Border Demo', position: { x: 12, y: -14 }, ownerId: 'border-host' },\n { id: 'border-port-1-label', content: 'Drag me', position: { x: 8, y: -18 }, ownerId: 'border-port-1' },\n { id: 'border-port-2-label', content: 'Drag me', position: { x: 8, y: -18 }, ownerId: 'border-port-2' },\n ],\n});\n\nexport const portBorderDemoConfig: DemoConfig = ({\n id: 'port-border',\n title: 'Ports On Border',\n description: 'Ports constrained to move along the element border.',\n createState: createPortBorderState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createChildConstraintState = (): DiagramState => ({\n elements: [\n {\n id: 'parent-box',\n position: { x: 120, y: 120 },\n size: { width: 320, height: 220 },\n shapeId: 'panel',\n },\n {\n id: 'child-inside',\n position: { x: 30, y: 40 },\n size: { width: 120, height: 80 },\n shapeId: 'default',\n parentId: 'parent-box',\n moveMode: 'inside',\n },\n {\n id: 'child-border',\n position: { x: 160, y: 0 },\n size: { width: 120, height: 80 },\n shapeId: 'panel',\n parentId: 'parent-box',\n moveMode: 'border',\n anchorCenter: true,\n },\n ],\n ports: [],\n links: [],\n texts: [\n { id: 'parent-label', content: 'Parent', position: { x: 12, y: -16 }, ownerId: 'parent-box' },\n { id: 'child-inside-label', content: 'Inside', position: { x: 8, y: -14 }, ownerId: 'child-inside' },\n { id: 'child-border-label', content: 'Border (center)', position: { x: 8, y: -14 }, ownerId: 'child-border' },\n ],\n});\n\nexport const childConstraintsDemoConfig: DemoConfig = ({\n id: 'child-constraints',\n title: 'Child Movement Constraints',\n description: 'Child elements constrained inside or along the parent border (anchor-center on border child).',\n createState: createChildConstraintState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [\n {\n id: 'nudge-border-child',\n label: 'Nudge border child',\n run: (editor) => {\n editor.moveElementTo('child-border', 260, 220);\n },\n },\n {\n id: 'nudge-inside-child',\n label: 'Nudge inside child',\n run: (editor) => {\n editor.moveElementTo('child-inside', 60, 140);\n },\n },\n ],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes, gridStageStyle } from './shared';\n\nconst createGridOverlayState = (): DiagramState => ({\n elements: [\n {\n id: 'grid-a',\n position: { x: 140, y: 120 },\n size: { width: 200, height: 120 },\n shapeId: 'default',\n },\n {\n id: 'grid-b',\n position: { x: 420, y: 220 },\n size: { width: 220, height: 140 },\n shapeId: 'panel',\n },\n ],\n ports: [\n { id: 'grid-a-port', elementId: 'grid-a', position: { x: 40, y: 40 }, shapeId: 'port-circle', anchorCenter: true },\n { id: 'grid-b-port', elementId: 'grid-b', position: { x: 50, y: 50 }, shapeId: 'port-circle', anchorCenter: true },\n ],\n links: [\n {\n id: 'grid-link',\n sourcePortId: 'grid-a-port',\n targetPortId: 'grid-b-port',\n points: [],\n },\n ],\n texts: [\n { id: 'grid-a-label', content: 'Grid A', position: { x: 12, y: -12 }, ownerId: 'grid-a' },\n { id: 'grid-b-label', content: 'Grid B', position: { x: 12, y: -12 }, ownerId: 'grid-b' },\n ],\n});\n\nexport const gridOverlayDemoConfig: DemoConfig = ({\n id: 'grid-overlay',\n title: 'Grid Overlay',\n description: 'Grid background with snapping enabled by default.',\n createState: createGridOverlayState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n snapDefault: true,\n stageStyle: gridStageStyle,\n actions: [],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes, orthogonalRouter } from './shared';\n\nconst createRoutingDemoState = (): DiagramState => ({\n elements: [\n {\n id: 'route-source',\n position: { x: 120, y: 160 },\n size: { width: 200, height: 120 },\n shapeId: 'default',\n },\n {\n id: 'route-target',\n position: { x: 560, y: 220 },\n size: { width: 200, height: 120 },\n shapeId: 'panel',\n },\n {\n id: 'route-obstacle',\n position: { x: 360, y: 320 },\n size: { width: 180, height: 100 },\n shapeId: 'default',\n },\n ],\n ports: [\n { id: 'route-source-port', elementId: 'route-source', position: { x: 40, y: 50 }, shapeId: 'port-circle', anchorCenter: true },\n { id: 'route-target-port', elementId: 'route-target', position: { x: 50, y: 40 }, shapeId: 'port-circle', anchorCenter: true },\n ],\n links: [\n {\n id: 'route-link',\n sourcePortId: 'route-source-port',\n targetPortId: 'route-target-port',\n points: [],\n routing: 'auto',\n },\n ],\n texts: [\n { id: 'route-source-label', content: 'Source', position: { x: 12, y: -12 }, ownerId: 'route-source' },\n { id: 'route-target-label', content: 'Target', position: { x: 12, y: -12 }, ownerId: 'route-target' },\n { id: 'route-obstacle-label', content: 'Obstacle', position: { x: 12, y: -12 }, ownerId: 'route-obstacle' },\n ],\n});\n\nexport const routingDemoConfig: DemoConfig = ({\n id: 'routing-demo',\n title: 'Routing Demo',\n description: 'Auto routing uses an orthogonal router. Toggle routing to compare.',\n createState: createRoutingDemoState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n router: orthogonalRouter,\n actions: [],\n});\n","import type { DiagramState, LinkData } from '../../api';\nimport type { DemoAction, DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst obstacleRoutingLinks: LinkData[] = [\n {\n id: 'block-link',\n sourcePortId: 'block-source-port',\n targetPortId: 'block-target-port',\n points: [],\n routing: 'auto',\n },\n {\n id: 'shared-sibling-link',\n sourcePortId: 'shared-child-a-port',\n targetPortId: 'shared-child-b-port',\n points: [],\n routing: 'auto',\n },\n {\n id: 'parent-child-link',\n sourcePortId: 'parent-host-port',\n targetPortId: 'edge-child-port',\n points: [],\n routing: 'auto',\n },\n {\n id: 'grandchild-link',\n sourcePortId: 'grandchild-a-port',\n targetPortId: 'grandchild-b-port',\n points: [],\n routing: 'auto',\n },\n];\n\nconst createObstacleRoutingState = (): DiagramState => ({\n elements: [\n {\n id: 'block-source',\n position: { x: 60, y: 40 },\n size: { width: 140, height: 90 },\n shapeId: 'default',\n },\n {\n id: 'block-target',\n position: { x: 380, y: 40 },\n size: { width: 140, height: 90 },\n shapeId: 'panel',\n },\n {\n id: 'block-obstacle',\n position: { x: 250, y: 30 },\n size: { width: 80, height: 110 },\n shapeId: 'default',\n },\n {\n id: 'shared-parent',\n position: { x: 40, y: 180 },\n size: { width: 420, height: 220 },\n shapeId: 'panel',\n style: { fill: '#fafafa' },\n },\n {\n id: 'shared-child-a',\n position: { x: 40, y: 40 },\n size: { width: 140, height: 90 },\n shapeId: 'default',\n parentId: 'shared-parent',\n },\n {\n id: 'shared-child-b',\n position: { x: 220, y: 40 },\n size: { width: 140, height: 90 },\n shapeId: 'default',\n parentId: 'shared-parent',\n },\n {\n id: 'parent-host',\n position: { x: 500, y: 180 },\n size: { width: 320, height: 220 },\n shapeId: 'panel',\n style: { fill: '#fafafa' },\n },\n {\n id: 'edge-child',\n position: { x: 40, y: 60 },\n size: { width: 160, height: 90 },\n shapeId: 'default',\n parentId: 'parent-host',\n },\n {\n id: 'grandparent',\n position: { x: 40, y: 380 },\n size: { width: 780, height: 160 },\n shapeId: 'panel',\n style: { fill: '#fafafa' },\n },\n {\n id: 'mid-parent-a',\n position: { x: 40, y: 30 },\n size: { width: 300, height: 100 },\n shapeId: 'panel',\n parentId: 'grandparent',\n },\n {\n id: 'mid-parent-b',\n position: { x: 420, y: 30 },\n size: { width: 300, height: 100 },\n shapeId: 'panel',\n parentId: 'grandparent',\n },\n {\n id: 'grandchild-a',\n position: { x: 40, y: 20 },\n size: { width: 120, height: 60 },\n shapeId: 'default',\n parentId: 'mid-parent-a',\n },\n {\n id: 'grandchild-b',\n position: { x: 40, y: 20 },\n size: { width: 120, height: 60 },\n shapeId: 'default',\n parentId: 'mid-parent-b',\n },\n ],\n ports: [\n { id: 'block-source-port', elementId: 'block-source', position: { x: 70, y: 45 }, shapeId: 'port-circle' },\n { id: 'block-target-port', elementId: 'block-target', position: { x: 70, y: 45 }, shapeId: 'port-circle' },\n { id: 'shared-child-a-port', elementId: 'shared-child-a', position: { x: 70, y: 45 }, shapeId: 'port-circle' },\n { id: 'shared-child-b-port', elementId: 'shared-child-b', position: { x: 70, y: 45 }, shapeId: 'port-circle' },\n { id: 'parent-host-port', elementId: 'parent-host', position: { x: 250, y: 110 }, shapeId: 'port-circle' },\n { id: 'edge-child-port', elementId: 'edge-child', position: { x: 0, y: 45 }, shapeId: 'port-circle' },\n { id: 'grandchild-a-port', elementId: 'grandchild-a', position: { x: 60, y: 30 }, shapeId: 'port-circle' },\n { id: 'grandchild-b-port', elementId: 'grandchild-b', position: { x: 60, y: 30 }, shapeId: 'port-circle' },\n ],\n links: obstacleRoutingLinks,\n texts: [\n { id: 'block-label', content: 'Blocking obstacle', position: { x: 60, y: 16 } },\n { id: 'shared-label', content: 'Shared parent (siblings)', position: { x: 40, y: 158 } },\n { id: 'parent-label', content: 'Parent-child (stay inside)', position: { x: 500, y: 158 } },\n { id: 'grand-label', content: 'Grandchildren (shared ancestors)', position: { x: 40, y: 358 } },\n ],\n});\n\nconst addLinksAction: DemoAction = {\n id: 'add-links',\n label: 'Add Links (Auto)',\n run: (editor, state) => {\n const existing = new Set(state.links.map((link) => link.id));\n obstacleRoutingLinks.forEach((link) => {\n if (existing.has(link.id)) return;\n editor.addLink({ ...link });\n });\n },\n};\n\nconst rerouteAllAction: DemoAction = {\n id: 'reroute-links',\n label: 'Reroute All Links',\n run: (editor) => {\n editor.rerouteAllLinks();\n },\n};\n\nexport const obstacleRoutingDemoConfig: DemoConfig = ({\n id: 'obstacle-routing',\n title: 'Obstacle Routing',\n description: 'Auto routing avoids obstacles and respects ancestor/edge rules.',\n createState: createObstacleRoutingState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [addLinksAction, rerouteAllAction],\n});\n","import type { DiagramState } from '../../api';\nimport type { DemoConfig } from '../types';\nimport { baseElementShapes, basePortShapes } from './shared';\n\nconst createLinkBendHandlesState = (): DiagramState => ({\n elements: [\n {\n id: 'bend-source',\n position: { x: 140, y: 140 },\n size: { width: 200, height: 120 },\n shapeId: 'default',\n },\n {\n id: 'bend-target',\n position: { x: 520, y: 320 },\n size: { width: 200, height: 120 },\n shapeId: 'panel',\n },\n ],\n ports: [\n { id: 'bend-source-port', elementId: 'bend-source', position: { x: 40, y: 60 }, shapeId: 'port-circle', anchorCenter: true },\n { id: 'bend-target-port', elementId: 'bend-target', position: { x: 50, y: 40 }, shapeId: 'port-circle', anchorCenter: true },\n ],\n links: [\n {\n id: 'bend-link',\n sourcePortId: 'bend-source-port',\n targetPortId: 'bend-target-port',\n routing: 'manual',\n points: [\n { x: 180, y: 200 },\n { x: 420, y: 200 },\n { x: 560, y: 360 },\n ],\n },\n ],\n texts: [\n { id: 'bend-source-label', content: 'Start', position: { x: 12, y: -12 }, ownerId: 'bend-source' },\n { id: 'bend-target-label', content: 'End', position: { x: 12, y: -12 }, ownerId: 'bend-target' },\n { id: 'bend-tip', content: 'Select the link to see bend handles.', position: { x: 140, y: 100 } },\n ],\n});\n\nexport const linkBendHandlesDemoConfig: DemoConfig = ({\n id: 'link-bends',\n title: 'Link Bend Handles',\n description: 'Select the link to reveal bend handles and drag segments.',\n createState: createLinkBendHandlesState,\n elementShapes: baseElementShapes,\n portShapes: basePortShapes,\n defaultElementShapeId: 'default',\n defaultPortShapeId: 'port-circle',\n actions: [],\n});\n","import React from 'react';\nimport type { DemoAction } from './types';\n\ntype ControlsProps = {\n actions: DemoAction[];\n snapEnabled: boolean;\n selectedLinkRouting: string;\n canToggleLinkRouting: boolean;\n onReload: () => void;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onResetViewport: () => void;\n onToggleSnap: () => void;\n onManualRender: () => void;\n onToggleLinkRouting: () => void;\n onAction: (action: DemoAction) => void;\n};\n\nconst DisplayBoxControls = ({\n actions,\n snapEnabled,\n selectedLinkRouting,\n canToggleLinkRouting,\n onReload,\n onZoomIn,\n onZoomOut,\n onResetViewport,\n onToggleSnap,\n onManualRender,\n onToggleLinkRouting,\n onAction,\n}: ControlsProps) => (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8, marginBottom: 12 }}>\n <button onClick={onReload} style={{ padding: '8px 12px' }}>\n Reload Demo State\n </button>\n <button onClick={onZoomIn} style={{ padding: '8px 12px' }}>\n Zoom In\n </button>\n <button onClick={onZoomOut} style={{ padding: '8px 12px' }}>\n Zoom Out\n </button>\n <button onClick={onResetViewport} style={{ padding: '8px 12px' }}>\n Reset Viewport\n </button>\n <button onClick={onToggleSnap} style={{ padding: '8px 12px' }}>\n Snap: {snapEnabled ? 'On' : 'Off'}\n </button>\n <button onClick={onManualRender} style={{ padding: '8px 12px' }}>\n Manual Render\n </button>\n <button onClick={onToggleLinkRouting} style={{ padding: '8px 12px' }} disabled={!canToggleLinkRouting}>\n Toggle Link Routing ({selectedLinkRouting})\n </button>\n {actions.map((action) => (\n <button key={action.id} onClick={() => onAction(action)} style={{ padding: '8px 12px' }}>\n {action.label}\n </button>\n ))}\n </div>\n);\n\nexport default DisplayBoxControls;\n","import React from 'react';\n\ntype StagePanelProps = {\n containerRef: React.RefObject<HTMLDivElement>;\n onDragOver?: (event: React.DragEvent<HTMLDivElement>) => void;\n onDragLeave?: () => void;\n onDrop?: (event: React.DragEvent<HTMLDivElement>) => void;\n stageStyle?: React.CSSProperties;\n};\n\nconst DisplayBoxStage = ({ containerRef, onDragOver, onDragLeave, onDrop, stageStyle }: StagePanelProps) => (\n <div\n ref={containerRef}\n data-testid=\"displaybox-stage\"\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n style={{\n width: '100%',\n height: 560,\n border: '1px solid #2d2d2d',\n borderRadius: 8,\n background: '#f8f8f8',\n ...(stageStyle ?? {}),\n }}\n />\n);\n\nexport default DisplayBoxStage;\n","import { useCallback, useMemo } from 'react';\nimport type { DiagramEditorHandle, DiagramState } from '../api';\nimport type { DemoAction, DemoActionHelpers, DemoConfig } from './types';\n\ntype UseDemoControlsArgs = {\n demo: DemoConfig;\n editorRef: React.MutableRefObject<DiagramEditorHandle | null>;\n diagramState: DiagramState | null;\n selection: string[];\n snapEnabled: boolean;\n setSnapEnabled: (value: boolean | ((prev: boolean) => boolean)) => void;\n actionHelpers: DemoActionHelpers;\n};\n\nconst useDemoControls = ({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n}: UseDemoControlsArgs) => {\n const selectedLink = useMemo(() => {\n if (!diagramState) return null;\n return diagramState.links.find((link) => selection.includes(link.id)) ?? null;\n }, [diagramState, selection]);\n\n const selectedLinkRouting = selectedLink?.routing ?? 'auto';\n const canToggleLinkRouting = Boolean(selectedLink);\n\n const handleAction = useCallback(\n (action: DemoAction) => {\n const editor = editorRef.current;\n if (!editor) return;\n const state = editor.getState();\n action.run(editor, state, demo, actionHelpers);\n },\n [actionHelpers, demo, editorRef],\n );\n\n const handleReload = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return;\n editor.load(demo.createState());\n }, [demo, editorRef]);\n\n const handleZoom = useCallback(\n (factor: number) => {\n const editor = editorRef.current;\n if (!editor) return;\n const current = editor.getViewport();\n const zoom = Math.max(0.2, Math.min(3, current.zoom * factor));\n editor.setViewport(current.pan, zoom);\n },\n [editorRef],\n );\n\n const handleResetViewport = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return;\n editor.setViewport({ x: 0, y: 0 }, 1);\n }, [editorRef]);\n\n const handleToggleSnap = useCallback(() => {\n setSnapEnabled((prev) => !prev);\n }, [setSnapEnabled]);\n\n const handleManualRender = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return;\n editor.render();\n }, [editorRef]);\n\n const handleToggleLinkRouting = useCallback(() => {\n const editor = editorRef.current;\n if (!editor || !selectedLink) return;\n const next = selectedLinkRouting === 'auto' ? 'manual' : 'auto';\n editor.setLinkRoutingMode(selectedLink.id, next);\n }, [editorRef, selectedLink, selectedLinkRouting]);\n\n return {\n selectedLinkRouting,\n canToggleLinkRouting,\n handleAction,\n handleReload,\n handleZoomIn: () => handleZoom(1.1),\n handleZoomOut: () => handleZoom(0.9),\n handleResetViewport,\n handleToggleSnap,\n handleManualRender,\n handleToggleLinkRouting,\n snapEnabled,\n };\n};\n\nexport default useDemoControls;\r\n","import { ElementData, MoveConstraint, Point, Size } from '../api/types';\n\nexport default class ElementModel {\n id: string;\n position: Point;\n size: Size;\n shapeId: string;\n style?: Record<string, unknown>;\n portIds: string[];\n textIds: string[];\n parentId: string | null;\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n layout?: ElementData['layout'];\n\n constructor(data: ElementData) {\n this.id = data.id;\n this.position = { ...data.position };\n this.size = { ...data.size };\n this.shapeId = data.shapeId;\n this.style = data.style;\n this.portIds = data.portIds ? [...data.portIds] : [];\n this.textIds = data.textIds ? [...data.textIds] : [];\n this.parentId = data.parentId ?? null;\n this.moveMode = data.moveMode;\n this.anchorCenter = data.anchorCenter;\n this.layout = data.layout;\n }\n\n setPosition(position: Point): void {\n this.position = { ...position };\n }\n\n setSize(size: Size): void {\n this.size = { ...size };\n }\n\n addPort(portId: string): void {\n if (!this.portIds.includes(portId)) {\n this.portIds.push(portId);\n }\n }\n\n removePort(portId: string): void {\n this.portIds = this.portIds.filter((id) => id !== portId);\n }\n\n addText(textId: string): void {\n if (!this.textIds.includes(textId)) {\n this.textIds.push(textId);\n }\n }\n\n removeText(textId: string): void {\n this.textIds = this.textIds.filter((id) => id !== textId);\n }\n\n toData(): ElementData {\n return {\n id: this.id,\n position: { ...this.position },\n size: { ...this.size },\n shapeId: this.shapeId,\n style: this.style,\n portIds: [...this.portIds],\n textIds: [...this.textIds],\n parentId: this.parentId,\n moveMode: this.moveMode,\n anchorCenter: this.anchorCenter,\n layout: this.layout,\n };\n }\n}\n","import { LinkData, LinkRoutingMode, Point } from '../api/types';\n\nexport default class LinkModel {\n id: string;\n sourcePortId: string;\n targetPortId: string;\n points: Point[];\n routing: LinkRoutingMode;\n style?: Record<string, unknown>;\n textIds: string[];\n\n constructor(data: LinkData) {\n this.id = data.id;\n this.sourcePortId = data.sourcePortId;\n this.targetPortId = data.targetPortId;\n this.points = data.points.map((point) => ({ ...point }));\n this.routing = data.routing ?? 'auto';\n this.style = data.style;\n this.textIds = data.textIds ? [...data.textIds] : [];\n }\n\n setPoints(points: Point[]): void {\n this.points = points.map((point) => ({ ...point }));\n }\n\n setRouting(mode: LinkRoutingMode): void {\n this.routing = mode;\n }\n\n addText(textId: string): void {\n if (!this.textIds.includes(textId)) {\n this.textIds.push(textId);\n }\n }\n\n removeText(textId: string): void {\n this.textIds = this.textIds.filter((id) => id !== textId);\n }\n\n toData(): LinkData {\n return {\n id: this.id,\n sourcePortId: this.sourcePortId,\n targetPortId: this.targetPortId,\n points: this.points.map((point) => ({ ...point })),\n routing: this.routing,\n style: this.style,\n textIds: [...this.textIds],\n };\n }\n}\n","export default class OwnershipIndex {\n private ownerToTexts = new Map<string, Set<string>>();\n\n add(ownerId: string, textId: string): void {\n const set = this.ownerToTexts.get(ownerId) ?? new Set<string>();\n set.add(textId);\n this.ownerToTexts.set(ownerId, set);\n }\n\n remove(ownerId: string, textId: string): void {\n const set = this.ownerToTexts.get(ownerId);\n if (!set) return;\n set.delete(textId);\n if (set.size === 0) {\n this.ownerToTexts.delete(ownerId);\n }\n }\n\n getTexts(ownerId: string): string[] {\n const set = this.ownerToTexts.get(ownerId);\n if (!set) return [];\n return Array.from(set.values());\n }\n\n clearOwner(ownerId: string): void {\n this.ownerToTexts.delete(ownerId);\n }\n}\r\n","import { MoveConstraint, Point, PortData, Size } from '../api/types';\n\nexport default class PortModel {\n id: string;\n elementId: string;\n position: Point;\n shapeId?: string;\n size?: Size;\n style?: Record<string, unknown>;\n textIds: string[];\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n\n constructor(data: PortData) {\n this.id = data.id;\n this.elementId = data.elementId;\n this.position = { ...data.position };\n this.shapeId = data.shapeId;\n this.size = data.size ? { ...data.size } : undefined;\n this.style = data.style;\n this.textIds = data.textIds ? [...data.textIds] : [];\n this.moveMode = data.moveMode;\n this.anchorCenter = data.anchorCenter ?? true;\n }\n\n setPosition(position: Point): void {\n this.position = { ...position };\n }\n\n addText(textId: string): void {\n if (!this.textIds.includes(textId)) {\n this.textIds.push(textId);\n }\n }\n\n removeText(textId: string): void {\n this.textIds = this.textIds.filter((id) => id !== textId);\n }\n\n toData(): PortData {\n return {\n id: this.id,\n elementId: this.elementId,\n position: { ...this.position },\n shapeId: this.shapeId,\n size: this.size ? { ...this.size } : undefined,\n style: this.style,\n textIds: [...this.textIds],\n moveMode: this.moveMode,\n anchorCenter: this.anchorCenter,\n };\n }\n}\n","import { Point, TextData, Size } from '../api/types';\n\nexport default class TextModel {\n id: string;\n content: string;\n position: Point;\n size?: Size;\n style?: Record<string, unknown>;\n ownerId?: string | null;\n\n constructor(data: TextData) {\n this.id = data.id;\n this.content = data.content;\n this.position = { ...data.position };\n this.size = data.size ? { ...data.size } : undefined;\n this.style = data.style;\n this.ownerId = data.ownerId ?? null;\n }\n\n setContent(content: string): void {\n this.content = content;\n }\n\n setSize(size: Size): void {\n this.size = { ...size };\n }\n\n setPosition(position: Point): void {\n this.position = { ...position };\n }\n\n toData(): TextData {\n return {\n id: this.id,\n content: this.content,\n position: { ...this.position },\n size: this.size ? { ...this.size } : undefined,\n style: this.style,\n ownerId: this.ownerId,\n };\n }\n}\r\n","import { Point, Rect } from '../api/types';\n\nexport const addPoints = (a: Point, b: Point): Point => ({ x: a.x + b.x, y: a.y + b.y });\nexport const subtractPoints = (a: Point, b: Point): Point => ({ x: a.x - b.x, y: a.y - b.y });\nexport const scalePoint = (point: Point, factor: number): Point => ({\n x: point.x * factor,\n y: point.y * factor,\n});\n\nexport const distance = (a: Point, b: Point): number => {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return Math.sqrt(dx * dx + dy * dy);\n};\n\nexport const clamp = (value: number, min: number, max: number): number => {\n if (value < min) return min;\n if (value > max) return max;\n return value;\n};\n\nexport const rectContainsPoint = (rect: Rect, point: Point): boolean => {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n};\n\nexport const rectsIntersect = (a: Rect, b: Rect): boolean => {\n return !(\n a.x + a.width < b.x ||\n b.x + b.width < a.x ||\n a.y + a.height < b.y ||\n b.y + b.height < a.y\n );\n};\n\nexport const snapToGrid = (point: Point, gridSize: number): Point => {\n if (gridSize <= 0) return { ...point };\n return {\n x: Math.round(point.x / gridSize) * gridSize,\n y: Math.round(point.y / gridSize) * gridSize,\n };\n};\r\n","import { DiagramState, ElementData, LinkData, LinkRoutingMode, Point, PortData, TextData } from '../api/types';\nimport ElementModel from './ElementModel';\nimport LinkModel from './LinkModel';\nimport OwnershipIndex from './OwnershipIndex';\nimport PortModel from './PortModel';\nimport TextModel from './TextModel';\nimport { distance } from '../utils/geometry';\n\nexport default class DiagramModel {\n elements = new Map<string, ElementModel>();\n ports = new Map<string, PortModel>();\n links = new Map<string, LinkModel>();\n texts = new Map<string, TextModel>();\n ownership = new OwnershipIndex();\n\n load(state: DiagramState): void {\n this.elements.clear();\n this.ports.clear();\n this.links.clear();\n this.texts.clear();\n this.ownership = new OwnershipIndex();\n\n state.elements.forEach((data) => this.elements.set(data.id, new ElementModel(data)));\n state.ports.forEach((data) => this.ports.set(data.id, new PortModel(data)));\n state.links.forEach((data) => this.links.set(data.id, new LinkModel(data)));\n state.texts.forEach((data) => {\n const text = new TextModel(data);\n this.texts.set(data.id, text);\n });\n\n this.ports.forEach((port) => {\n const element = this.elements.get(port.elementId);\n if (element) {\n element.addPort(port.id);\n }\n });\n\n this.texts.forEach((text) => {\n if (!text.ownerId) return;\n this.ownership.add(text.ownerId, text.id);\n\n const element = this.elements.get(text.ownerId);\n if (element) {\n element.addText(text.id);\n return;\n }\n\n const port = this.ports.get(text.ownerId);\n if (port) {\n port.addText(text.id);\n return;\n }\n\n const link = this.links.get(text.ownerId);\n if (link) {\n link.addText(text.id);\n }\n });\n }\n\n toState(): DiagramState {\n return {\n elements: Array.from(this.elements.values()).map((element) => element.toData()),\n ports: Array.from(this.ports.values()).map((port) => port.toData()),\n links: Array.from(this.links.values()).map((link) => link.toData()),\n texts: Array.from(this.texts.values()).map((text) => text.toData()),\n };\n }\n\n getElement(id: string): ElementModel | undefined {\n return this.elements.get(id);\n }\n\n setElementLayout(id: string, layout: ElementData['layout']): void {\n const element = this.elements.get(id);\n if (!element) return;\n element.layout = layout;\n }\n\n getChildren(parentId: string): ElementModel[] {\n return Array.from(this.elements.values()).filter((child) => child.parentId === parentId);\n }\n\n getElementWorldPosition(id: string): Point | null {\n const element = this.elements.get(id);\n if (!element) return null;\n return this.resolveElementWorldPosition(element);\n }\n\n getPort(id: string): PortModel | undefined {\n return this.ports.get(id);\n }\n\n getPortWorldPosition(id: string): Point | null {\n const port = this.ports.get(id);\n if (!port) return null;\n const elementPosition = this.getElementWorldPosition(port.elementId);\n if (!elementPosition) return { ...port.position };\n return {\n x: elementPosition.x + port.position.x,\n y: elementPosition.y + port.position.y,\n };\n }\n\n getLink(id: string): LinkModel | undefined {\n return this.links.get(id);\n }\n\n getLinkMidpoint(id: string): Point | null {\n const link = this.links.get(id);\n if (!link) return null;\n return this.resolveLinkMidpoint(link);\n }\n\n getText(id: string): TextModel | undefined {\n return this.texts.get(id);\n }\n\n getTextWorldPosition(id: string): Point | null {\n const text = this.texts.get(id);\n if (!text) return null;\n if (!text.ownerId) return { ...text.position };\n\n const element = this.elements.get(text.ownerId);\n if (element) {\n const elementPosition = this.resolveElementWorldPosition(element);\n return {\n x: elementPosition.x + text.position.x,\n y: elementPosition.y + text.position.y,\n };\n }\n\n const port = this.ports.get(text.ownerId);\n if (port) {\n const portPosition = this.getPortWorldPosition(port.id);\n if (!portPosition) return { ...text.position };\n return {\n x: portPosition.x + text.position.x,\n y: portPosition.y + text.position.y,\n };\n }\n\n const link = this.links.get(text.ownerId);\n if (link) {\n const midpoint = this.resolveLinkMidpoint(link);\n return {\n x: midpoint.x + text.position.x,\n y: midpoint.y + text.position.y,\n };\n }\n\n return { ...text.position };\n }\n\n addElement(data: ElementData): ElementModel {\n const element = new ElementModel(data);\n this.elements.set(element.id, element);\n return element;\n }\n\n moveElement(id: string, position: Point): void {\n const element = this.elements.get(id);\n if (!element) return;\n element.setPosition(position);\n }\n\n resizeElement(id: string, size: { width: number; height: number }): void {\n const element = this.elements.get(id);\n if (!element) return;\n element.setSize(size);\n }\n\n removeElement(id: string): void {\n const element = this.elements.get(id);\n if (!element) return;\n\n const portIds = [...element.portIds];\n const textIds = [...element.textIds];\n\n portIds.forEach((portId) => this.removePort(portId));\n textIds.forEach((textId) => this.removeText(textId));\n\n this.elements.delete(id);\n }\n\n addPort(data: PortData): PortModel {\n const port = new PortModel(data);\n this.ports.set(port.id, port);\n const element = this.elements.get(port.elementId);\n if (element) {\n element.addPort(port.id);\n }\n return port;\n }\n\n movePort(id: string, position: Point): void {\n const port = this.ports.get(id);\n if (!port) return;\n port.setPosition(position);\n }\n\n removePort(id: string): void {\n const port = this.ports.get(id);\n if (!port) return;\n\n const element = this.elements.get(port.elementId);\n if (element) {\n element.removePort(id);\n }\n\n const portTextIds = [...port.textIds];\n portTextIds.forEach((textId) => this.removeText(textId));\n\n const linksToRemove = Array.from(this.links.values())\n .filter((link) => link.sourcePortId === id || link.targetPortId === id)\n .map((link) => link.id);\n\n linksToRemove.forEach((linkId) => this.removeLink(linkId));\n\n this.ports.delete(id);\n }\n\n addLink(data: LinkData): LinkModel {\n const link = new LinkModel(data);\n this.links.set(link.id, link);\n return link;\n }\n\n updateLinkPoints(id: string, points: Point[]): void {\n const link = this.links.get(id);\n if (!link) return;\n link.setPoints(points);\n }\n\n setLinkRoutingMode(id: string, mode: LinkRoutingMode): void {\n const link = this.links.get(id);\n if (!link) return;\n link.setRouting(mode);\n }\n\n removeLink(id: string): void {\n const link = this.links.get(id);\n if (!link) return;\n\n const textIds = [...link.textIds];\n textIds.forEach((textId) => this.removeText(textId));\n\n this.links.delete(id);\n }\n\n addText(data: TextData): TextModel {\n const text = new TextModel(data);\n this.texts.set(text.id, text);\n\n if (text.ownerId) {\n this.ownership.add(text.ownerId, text.id);\n\n const element = this.elements.get(text.ownerId);\n if (element) {\n element.addText(text.id);\n }\n\n const port = this.ports.get(text.ownerId);\n if (port) {\n port.addText(text.id);\n }\n\n const link = this.links.get(text.ownerId);\n if (link) {\n link.addText(text.id);\n }\n }\n\n return text;\n }\n\n updateText(id: string, content: string): void {\n const text = this.texts.get(id);\n if (!text) return;\n text.setContent(content);\n }\n\n moveText(id: string, position: Point): void {\n const text = this.texts.get(id);\n if (!text) return;\n text.setPosition(position);\n }\n\n removeText(id: string): void {\n const text = this.texts.get(id);\n if (!text) return;\n\n if (text.ownerId) {\n this.ownership.remove(text.ownerId, id);\n\n const element = this.elements.get(text.ownerId);\n if (element) {\n element.removeText(id);\n }\n\n const port = this.ports.get(text.ownerId);\n if (port) {\n port.removeText(id);\n }\n\n const link = this.links.get(text.ownerId);\n if (link) {\n link.removeText(id);\n }\n }\n\n this.texts.delete(id);\n }\n\n private resolveElementWorldPosition(element: ElementModel): Point {\n let x = element.position.x;\n let y = element.position.y;\n if (element.anchorCenter) {\n x -= element.size.width / 2;\n y -= element.size.height / 2;\n }\n let current: ElementModel | undefined = element;\n while (current?.parentId) {\n const parent = this.elements.get(current.parentId);\n if (!parent) break;\n let parentX = parent.position.x;\n let parentY = parent.position.y;\n if (parent.anchorCenter) {\n parentX -= parent.size.width / 2;\n parentY -= parent.size.height / 2;\n }\n x += parentX;\n y += parentY;\n current = parent;\n }\n return { x, y };\n }\n\n private resolveLinkMidpoint(link: LinkModel): Point {\n const points = link.points;\n if (points.length === 0) return { x: 0, y: 0 };\n if (points.length === 1) return { ...points[0] };\n\n let total = 0;\n for (let i = 1; i < points.length; i += 1) {\n total += distance(points[i - 1], points[i]);\n }\n\n const halfway = total / 2;\n let traveled = 0;\n for (let i = 1; i < points.length; i += 1) {\n const segment = distance(points[i - 1], points[i]);\n if (traveled + segment >= halfway) {\n const ratio = segment === 0 ? 0 : (halfway - traveled) / segment;\n return {\n x: points[i - 1].x + (points[i].x - points[i - 1].x) * ratio,\n y: points[i - 1].y + (points[i].y - points[i - 1].y) * ratio,\n };\n }\n traveled += segment;\n }\n\n return { ...points[points.length - 1] };\n }\n}\n","import { DiagramPatch } from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport { EngineCommand } from './EngineCommands';\n\nexport default class CommandQueue {\n private queue: EngineCommand[] = [];\n\n enqueue(command: EngineCommand): void {\n this.queue.push(command);\n }\n\n flush(model: DiagramModel): DiagramPatch[] {\n const patches: DiagramPatch[] = [];\n while (this.queue.length > 0) {\n const command = this.queue.shift();\n if (!command) continue;\n const next = command.apply(model);\n patches.push(...next);\n }\n return patches;\n }\n\n run(command: EngineCommand, model: DiagramModel): DiagramPatch[] {\n this.enqueue(command);\n return this.flush(model);\n }\n}\r\n","export type Unsubscribe = () => void;\n\nexport default class EventBus<TEvents extends Record<string, unknown>> {\n private handlers = new Map<keyof TEvents, Set<(payload: TEvents[keyof TEvents]) => void>>();\n\n subscribe<TEvent extends keyof TEvents>(\n event: TEvent,\n handler: (payload: TEvents[TEvent]) => void\n ): Unsubscribe {\n const set = this.handlers.get(event) ?? new Set();\n set.add(handler as (payload: TEvents[keyof TEvents]) => void);\n this.handlers.set(event, set);\n\n return () => {\n const existing = this.handlers.get(event);\n if (!existing) return;\n existing.delete(handler as (payload: TEvents[keyof TEvents]) => void);\n if (existing.size === 0) {\n this.handlers.delete(event);\n }\n };\n }\n\n emit<TEvent extends keyof TEvents>(event: TEvent, payload: TEvents[TEvent]): void {\n const set = this.handlers.get(event);\n if (!set) return;\n Array.from(set.values()).forEach((handler) => {\n handler(payload as TEvents[keyof TEvents]);\n });\n }\n}\r\n","export default class SelectionState {\n private selectedIds = new Set<string>();\n\n set(ids: string[]): void {\n this.selectedIds = new Set(ids);\n }\n\n toggle(id: string): void {\n if (this.selectedIds.has(id)) {\n this.selectedIds.delete(id);\n } else {\n this.selectedIds.add(id);\n }\n }\n\n get(): string[] {\n return Array.from(this.selectedIds.values());\n }\n\n clear(): void {\n this.selectedIds.clear();\n }\n}\r\n","import { Point } from '../api/types';\n\nexport default class ViewportState {\n pan: Point = { x: 0, y: 0 };\n zoom = 1;\n\n setPan(point: Point): void {\n this.pan = { ...point };\n }\n\n setZoom(value: number): void {\n this.zoom = value;\n }\n}\r\n","import { DiagramPatch } from '../api/types';\n\nexport const patchAdd = (entity: DiagramPatch['entity'], id: string, payload?: Record<string, unknown>): DiagramPatch => ({\n type: 'add',\n entity,\n id,\n payload,\n});\n\nexport const patchUpdate = (entity: DiagramPatch['entity'], id: string, payload?: Record<string, unknown>): DiagramPatch => ({\n type: 'update',\n entity,\n id,\n payload,\n});\n\nexport const patchRemove = (entity: DiagramPatch['entity'], id: string): DiagramPatch => ({\n type: 'remove',\n entity,\n id,\n});\r\n","import { DiagramPatch, DiagramState, ElementData, LinkData, LinkRoutingMode, Point, PortData, TextData } from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport { patchAdd, patchRemove, patchUpdate } from '../utils/patches';\n\nexport type EngineCommand = {\n type: string;\n apply: (model: DiagramModel) => DiagramPatch[];\n};\n\nexport const createLoadCommand = (state: DiagramState): EngineCommand => ({\n type: 'load',\n apply: (model) => {\n model.load(state);\n return [{ type: 'load', entity: 'config', payload: {} }];\n },\n});\n\nexport const createAddElementCommand = (element: ElementData): EngineCommand => ({\n type: 'addElement',\n apply: (model) => {\n model.addElement(element);\n return [patchAdd('element', element.id, element)];\n },\n});\n\nexport const createMoveElementCommand = (id: string, position: Point): EngineCommand => ({\n type: 'moveElement',\n apply: (model) => {\n model.moveElement(id, position);\n return [patchUpdate('element', id, { position })];\n },\n});\n\nexport const createResizeElementCommand = (\n id: string,\n size: { width: number; height: number }\n): EngineCommand => ({\n type: 'resizeElement',\n apply: (model) => {\n model.resizeElement(id, size);\n return [patchUpdate('element', id, { size })];\n },\n});\n\nexport const createRemoveElementCommand = (id: string): EngineCommand => ({\n type: 'removeElement',\n apply: (model) => {\n model.removeElement(id);\n return [patchRemove('element', id)];\n },\n});\n\nexport const createSetElementLayoutCommand = (\n id: string,\n layout: ElementData['layout'],\n): EngineCommand => ({\n type: 'setElementLayout',\n apply: (model) => {\n model.setElementLayout(id, layout);\n return [patchUpdate('element', id, { layout })];\n },\n});\n\nexport const createAddPortCommand = (port: PortData): EngineCommand => ({\n type: 'addPort',\n apply: (model) => {\n model.addPort(port);\n return [patchAdd('port', port.id, port)];\n },\n});\n\nexport const createMovePortCommand = (id: string, position: Point): EngineCommand => ({\n type: 'movePort',\n apply: (model) => {\n model.movePort(id, position);\n return [patchUpdate('port', id, { position })];\n },\n});\n\nexport const createRemovePortCommand = (id: string): EngineCommand => ({\n type: 'removePort',\n apply: (model) => {\n model.removePort(id);\n return [patchRemove('port', id)];\n },\n});\n\nexport const createAddLinkCommand = (link: LinkData): EngineCommand => ({\n type: 'addLink',\n apply: (model) => {\n model.addLink(link);\n return [patchAdd('link', link.id, link)];\n },\n});\n\nexport const createUpdateLinkCommand = (\n id: string,\n update: { points?: Point[]; routing?: LinkRoutingMode }\n): EngineCommand => ({\n type: 'updateLink',\n apply: (model) => {\n if (update.points !== undefined) {\n model.updateLinkPoints(id, update.points);\n }\n if (update.routing !== undefined) {\n model.setLinkRoutingMode(id, update.routing);\n }\n const payload: Record<string, unknown> = {};\n if (update.points !== undefined) payload.points = update.points;\n if (update.routing !== undefined) payload.routing = update.routing;\n return [patchUpdate('link', id, payload)];\n },\n});\n\nexport const createRemoveLinkCommand = (id: string): EngineCommand => ({\n type: 'removeLink',\n apply: (model) => {\n model.removeLink(id);\n return [patchRemove('link', id)];\n },\n});\n\nexport const createAddTextCommand = (text: TextData): EngineCommand => ({\n type: 'addText',\n apply: (model) => {\n model.addText(text);\n return [patchAdd('text', text.id, text)];\n },\n});\n\nexport const createUpdateTextCommand = (id: string, content: string): EngineCommand => ({\n type: 'updateText',\n apply: (model) => {\n model.updateText(id, content);\n return [patchUpdate('text', id, { content })];\n },\n});\n\nexport const createMoveTextCommand = (id: string, position: Point): EngineCommand => ({\n type: 'moveText',\n apply: (model) => {\n model.moveText(id, position);\n return [patchUpdate('text', id, { position })];\n },\n});\n\nexport const createRemoveTextCommand = (id: string): EngineCommand => ({\n type: 'removeText',\n apply: (model) => {\n model.removeText(id);\n return [patchRemove('text', id)];\n },\n});\r\n","export default class RenderScheduler {\n private pending = false;\n private lastCallback: (() => void) | null = null;\n\n requestRender(callback: () => void): void {\n this.lastCallback = callback;\n if (this.pending) return;\n this.pending = true;\n\n const schedule = typeof requestAnimationFrame !== 'undefined'\n ? requestAnimationFrame\n : (cb: FrameRequestCallback) => setTimeout(() => cb(Date.now()), 16);\n\n schedule(() => {\n this.pending = false;\n const next = this.lastCallback;\n this.lastCallback = null;\n if (next) {\n next();\n }\n });\n }\n}\r\n","import { Point, Rect } from '../api/types';\nimport type { RouteContext, RouteObstacle, RouterStrategy } from './RouterStrategy';\n\ntype ObstacleRouterOptions = {\n padding?: number;\n tolerance?: number;\n stubLength?: number;\n};\n\nconst DEFAULT_PADDING = 12;\nconst DEFAULT_TOLERANCE = 0.5;\nconst DEFAULT_STUB_LENGTH = 12;\n\nconst shrinkRect = (rect: Rect, amount: number): Rect | null => {\n const width = rect.width - amount * 2;\n const height = rect.height - amount * 2;\n if (width <= 0 || height <= 0) return null;\n return {\n x: rect.x + amount,\n y: rect.y + amount,\n width,\n height,\n };\n};\n\nconst segmentIntersectsRect = (start: Point, end: Point, rect: Rect): boolean => {\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const p = [-dx, dx, -dy, dy];\n const q = [\n start.x - rect.x,\n rect.x + rect.width - start.x,\n start.y - rect.y,\n rect.y + rect.height - start.y,\n ];\n\n let t0 = 0;\n let t1 = 1;\n\n for (let i = 0; i < 4; i += 1) {\n const pi = p[i];\n const qi = q[i];\n if (pi === 0) {\n if (qi < 0) return false;\n } else {\n const r = qi / pi;\n if (pi < 0) {\n if (r > t1) return false;\n if (r > t0) t0 = r;\n } else {\n if (r < t0) return false;\n if (r < t1) t1 = r;\n }\n }\n }\n\n return true;\n};\n\nconst segmentIntersectsRectInterior = (start: Point, end: Point, rect: Rect, tolerance: number): boolean => {\n const inner = shrinkRect(rect, tolerance);\n if (!inner) return false;\n return segmentIntersectsRect(start, end, inner);\n};\n\nconst pointWithinRect = (point: Point, rect: Rect, tolerance: number): boolean => {\n return (\n point.x >= rect.x - tolerance &&\n point.x <= rect.x + rect.width + tolerance &&\n point.y >= rect.y - tolerance &&\n point.y <= rect.y + rect.height + tolerance\n );\n};\n\nconst compactPath = (points: Point[]): Point[] => {\n const deduped: Point[] = [];\n points.forEach((point) => {\n const last = deduped[deduped.length - 1];\n if (!last || last.x !== point.x || last.y !== point.y) {\n deduped.push(point);\n }\n });\n\n if (deduped.length < 3) return deduped;\n\n const compacted: Point[] = [deduped[0]];\n for (let i = 1; i < deduped.length; i += 1) {\n const prev = compacted[compacted.length - 1];\n const next = deduped[i];\n const beforePrev = compacted[compacted.length - 2];\n if (\n beforePrev &&\n ((beforePrev.x === prev.x && prev.x === next.x) || (beforePrev.y === prev.y && prev.y === next.y))\n ) {\n compacted[compacted.length - 1] = next;\n } else {\n compacted.push(next);\n }\n }\n return compacted;\n};\n\nconst pathLength = (points: Point[]): number => {\n let total = 0;\n for (let i = 1; i < points.length; i += 1) {\n const dx = points[i].x - points[i - 1].x;\n const dy = points[i].y - points[i - 1].y;\n total += Math.sqrt(dx * dx + dy * dy);\n }\n return total;\n};\n\nexport default class ObstacleRouter implements RouterStrategy {\n private padding: number;\n private tolerance: number;\n private stubLength: number;\n\n constructor(options?: ObstacleRouterOptions) {\n this.padding = options?.padding ?? DEFAULT_PADDING;\n this.tolerance = options?.tolerance ?? DEFAULT_TOLERANCE;\n this.stubLength = options?.stubLength ?? DEFAULT_STUB_LENGTH;\n }\n\n route(source: Point, target: Point, context?: RouteContext): Point[] {\n const obstacles = context?.obstacles ?? [];\n const bounds = context?.bounds;\n\n const sourceStub = this.computeStubEndpoint(source, context?.sourceEndpoint, bounds, obstacles);\n const targetStub = this.computeStubEndpoint(target, context?.targetEndpoint, bounds, obstacles);\n\n const innerSource = sourceStub ?? source;\n const innerTarget = targetStub ?? target;\n\n const core = this.routeBetween(innerSource, innerTarget, obstacles, bounds);\n const normalizedCore = this.ensureEndpoints(core, innerSource, innerTarget);\n\n const middle = normalizedCore.slice(1, -1).map((p) => ({ ...p }));\n const result: Point[] = [{ ...source }];\n const hasSourceStub = Boolean(sourceStub);\n const hasTargetStub = Boolean(targetStub);\n if (hasSourceStub && sourceStub) {\n result.push({ ...sourceStub });\n }\n result.push(...middle);\n if (hasTargetStub && targetStub) {\n result.push({ ...targetStub });\n }\n result.push({ ...target });\n\n return this.compactPreservingStubs(result, hasSourceStub, hasTargetStub);\n }\n\n private buildCandidates(source: Point, target: Point, obstacles: RouteObstacle[]): Point[][] {\n const midXValues = new Set<number>();\n const midYValues = new Set<number>();\n\n midXValues.add(Math.round((source.x + target.x) / 2));\n midXValues.add(source.x);\n midXValues.add(target.x);\n\n midYValues.add(Math.round((source.y + target.y) / 2));\n midYValues.add(source.y);\n midYValues.add(target.y);\n\n obstacles.forEach((obstacle) => {\n midXValues.add(obstacle.rect.x - this.padding);\n midXValues.add(obstacle.rect.x + obstacle.rect.width + this.padding);\n midYValues.add(obstacle.rect.y - this.padding);\n midYValues.add(obstacle.rect.y + obstacle.rect.height + this.padding);\n });\n\n const candidates: Point[][] = [];\n\n midXValues.forEach((midX) => {\n const path = compactPath([\n { ...source },\n { x: midX, y: source.y },\n { x: midX, y: target.y },\n { ...target },\n ]);\n candidates.push(path);\n });\n\n midYValues.forEach((midY) => {\n const path = compactPath([\n { ...source },\n { x: source.x, y: midY },\n { x: target.x, y: midY },\n { ...target },\n ]);\n candidates.push(path);\n });\n\n return candidates;\n }\n\n private routeBetween(source: Point, target: Point, obstacles: RouteObstacle[], bounds?: Rect): Point[] {\n const direct = compactPath([{ ...source }, { ...target }]);\n\n if (obstacles.length === 0 && (!bounds || this.pointsWithinBounds(direct, bounds))) {\n return direct;\n }\n\n if (this.isPathClear(direct, obstacles, bounds)) {\n return direct;\n }\n\n const candidates = this.buildCandidates(source, target, obstacles);\n let best: Point[] | null = null;\n let bestLength = Number.POSITIVE_INFINITY;\n\n candidates.forEach((candidate) => {\n if (!this.isPathClear(candidate, obstacles, bounds)) return;\n const length = pathLength(candidate);\n if (length < bestLength) {\n best = candidate;\n bestLength = length;\n }\n });\n\n return best ?? direct;\n }\n\n private pointsWithinBounds(points: Point[], bounds: Rect): boolean {\n return points.every((point) => pointWithinRect(point, bounds, this.tolerance));\n }\n\n private isPathClear(points: Point[], obstacles: RouteObstacle[], bounds?: Rect): boolean {\n if (points.length < 2) return true;\n if (bounds && !this.pointsWithinBounds(points, bounds)) return false;\n\n for (let i = 1; i < points.length; i += 1) {\n const start = points[i - 1];\n const end = points[i];\n if (start.x === end.x && start.y === end.y) continue;\n for (let j = 0; j < obstacles.length; j += 1) {\n if (segmentIntersectsRectInterior(start, end, obstacles[j].rect, this.tolerance)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n private computeStubEndpoint(\n point: Point,\n endpoint: RouteContext['sourceEndpoint'],\n bounds: Rect | undefined,\n obstacles: RouteObstacle[],\n ): Point | null {\n if (!endpoint?.onEdgeSide || !endpoint.rect) return null;\n const normal = this.getNormal(endpoint.onEdgeSide);\n\n let maxLength = this.stubLength;\n if (bounds) {\n maxLength = Math.min(maxLength, this.distanceToBounds(point, normal, bounds));\n }\n\n const obstacleLimit = this.distanceToObstacles(point, normal, obstacles, endpoint.elementId);\n if (obstacleLimit !== null) {\n maxLength = Math.min(maxLength, obstacleLimit);\n }\n\n if (maxLength <= 0) return null;\n\n return {\n x: point.x + normal.x * maxLength,\n y: point.y + normal.y * maxLength,\n };\n }\n\n private getNormal(side: 'left' | 'right' | 'top' | 'bottom'): Point {\n switch (side) {\n case 'left':\n return { x: -1, y: 0 };\n case 'right':\n return { x: 1, y: 0 };\n case 'top':\n return { x: 0, y: -1 };\n case 'bottom':\n default:\n return { x: 0, y: 1 };\n }\n }\n\n private distanceToBounds(point: Point, normal: Point, bounds: Rect): number {\n if (normal.x < 0) {\n return Math.max(0, point.x - bounds.x);\n }\n if (normal.x > 0) {\n return Math.max(0, bounds.x + bounds.width - point.x);\n }\n if (normal.y < 0) {\n return Math.max(0, point.y - bounds.y);\n }\n return Math.max(0, bounds.y + bounds.height - point.y);\n }\n\n private distanceToObstacles(\n point: Point,\n normal: Point,\n obstacles: RouteObstacle[],\n ignoreId?: string,\n ): number | null {\n let limit = Number.POSITIVE_INFINITY;\n const overlapsHorizontally = (rect: Rect) =>\n point.y >= rect.y - this.tolerance && point.y <= rect.y + rect.height + this.tolerance;\n const overlapsVertically = (rect: Rect) =>\n point.x >= rect.x - this.tolerance && point.x <= rect.x + rect.width + this.tolerance;\n\n obstacles.forEach((obstacle) => {\n if (ignoreId && obstacle.id === ignoreId) return;\n const rect = obstacle.rect;\n if (normal.x < 0 && overlapsHorizontally(rect) && rect.x + rect.width <= point.x) {\n const available = point.x - (rect.x + rect.width + this.tolerance);\n if (available < limit) limit = available;\n } else if (normal.x > 0 && overlapsHorizontally(rect) && rect.x >= point.x) {\n const available = rect.x - this.tolerance - point.x;\n if (available < limit) limit = available;\n } else if (normal.y < 0 && overlapsVertically(rect) && rect.y + rect.height <= point.y) {\n const available = point.y - (rect.y + rect.height + this.tolerance);\n if (available < limit) limit = available;\n } else if (normal.y > 0 && overlapsVertically(rect) && rect.y >= point.y) {\n const available = rect.y - this.tolerance - point.y;\n if (available < limit) limit = available;\n }\n });\n\n if (!Number.isFinite(limit)) return null;\n return Math.max(0, limit);\n }\n\n private ensureEndpoints(points: Point[], source: Point, target: Point): Point[] {\n if (points.length === 0) return [{ ...source }, { ...target }];\n const result = [...points];\n if (result.length === 1) {\n result.unshift({ ...source });\n result.push({ ...target });\n return result;\n }\n if (result[0].x !== source.x || result[0].y !== source.y) {\n result.unshift({ ...source });\n }\n const last = result[result.length - 1];\n if (last.x !== target.x || last.y !== target.y) {\n result.push({ ...target });\n }\n return result;\n }\n\n private compactPreservingStubs(points: Point[], hasSourceStub: boolean, hasTargetStub: boolean): Point[] {\n if (points.length <= 2) return points.map((p) => ({ ...p }));\n const deduped: Point[] = [];\n points.forEach((point) => {\n const last = deduped[deduped.length - 1];\n if (!last || last.x !== point.x || last.y !== point.y) {\n deduped.push(point);\n }\n });\n if (deduped.length < 3) return deduped.map((p) => ({ ...p }));\n\n const result: Point[] = [deduped[0]];\n for (let i = 1; i < deduped.length - 1; i += 1) {\n const prev = result[result.length - 1];\n const current = deduped[i];\n const next = deduped[i + 1];\n const isFirstTurn = hasSourceStub && result.length === 1;\n const isLastTurn = hasTargetStub && i === deduped.length - 2;\n const collinear =\n (prev.x === current.x && current.x === next.x) || (prev.y === current.y && current.y === next.y);\n if (collinear && !isFirstTurn && !isLastTurn) {\n continue;\n }\n result.push(current);\n }\n result.push(deduped[deduped.length - 1]);\n return result.map((p) => ({ ...p }));\n }\n}\n","import { Point } from '../api/types';\nimport { snapToGrid } from '../utils/geometry';\nimport { SnapStrategy } from './SnapStrategy';\n\nexport default class DefaultSnapper implements SnapStrategy {\n private gridSize: number;\n\n constructor(gridSize = 0) {\n this.gridSize = gridSize;\n }\n\n setGridSize(size: number): void {\n this.gridSize = size;\n }\n\n snap(point: Point): Point {\n return snapToGrid(point, this.gridSize);\n }\n}\r\n","import { ElementData, PortData, ShapeDrawContext } from '../api/types';\n\nexport type ShapeDefinition = {\n id: string;\n draw?: (context: ShapeDrawContext) => void;\n createNode?: (model: ElementData | PortData) => unknown;\n svgPath?: string;\n svgSize?: { width: number; height: number };\n};\n\nexport class ShapeRegistry {\n private shapes = new Map<string, ShapeDefinition>();\n\n register(shape: ShapeDefinition): void {\n this.shapes.set(shape.id, shape);\n }\n\n get(id: string): ShapeDefinition | undefined {\n return this.shapes.get(id);\n }\n\n has(id: string): boolean {\n return this.shapes.has(id);\n }\n}\r\n","import { Size, TextData } from '../api/types';\nimport { TextMeasurer } from './TextMeasurer';\n\nexport default class CanvasTextMeasurer implements TextMeasurer {\n private context: CanvasRenderingContext2D | null = null;\n\n private getContext(): CanvasRenderingContext2D | null {\n if (this.context) return this.context;\n if (typeof document === 'undefined') return null;\n const canvas = document.createElement('canvas');\n try {\n this.context = canvas.getContext('2d');\n } catch {\n this.context = null;\n }\n return this.context;\n }\n\n measure(text: TextData): Size {\n const fontSize = (text.style?.fontSize as number | undefined) ?? 12;\n const fontFamily = (text.style?.fontFamily as string | undefined) ?? 'sans-serif';\n const ctx = this.getContext();\n if (!ctx) {\n return { width: Math.max(text.content.length, 1) * fontSize * 0.6, height: fontSize * 1.2 };\n }\n ctx.font = `${fontSize}px ${fontFamily}`;\n const metrics = ctx.measureText(text.content || '');\n const width = metrics.width;\n const height = fontSize * 1.2;\n return { width, height };\n }\n}\r\n","import {\n DiagramEngineHandle,\n DiagramState,\n ElementData,\n EngineEventMap,\n ElementDropEvent,\n EnginePointerInfo,\n LinkData,\n ElementLinkConnectingEvent,\n LinkRoutingMode,\n OverlayShapeConfig,\n OverlayShapeHandle,\n Point,\n PortData,\n Rect,\n RerouteLinksOptions,\n TextData,\n PortMouseEvent,\n} from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport CommandQueue from './CommandQueue';\nimport EventBus from './EventBus';\nimport SelectionState from './SelectionState';\nimport ViewportState from './ViewportState';\nimport {\n createAddElementCommand,\n createAddLinkCommand,\n createAddPortCommand,\n createAddTextCommand,\n createLoadCommand,\n createMoveElementCommand,\n createMovePortCommand,\n createRemoveElementCommand,\n createRemoveLinkCommand,\n createRemovePortCommand,\n createRemoveTextCommand,\n createResizeElementCommand,\n createMoveTextCommand,\n createUpdateLinkCommand,\n createUpdateTextCommand,\n createSetElementLayoutCommand,\n} from './EngineCommands';\nimport { Renderer } from '../renderer/Renderer';\nimport RenderScheduler from '../renderer/RenderScheduler';\nimport ObstacleRouter from '../strategies/ObstacleRouter';\nimport DefaultSnapper from '../strategies/DefaultSnapper';\nimport { RouteContext, RouterStrategy } from '../strategies/RouterStrategy';\nimport { SnapStrategy } from '../strategies/SnapStrategy';\nimport { ShapeDefinition, ShapeRegistry } from '../renderer/RenderTypes';\nimport CanvasTextMeasurer from '../measure/CanvasTextMeasurer';\nimport { TextMeasurer } from '../measure/TextMeasurer';\nimport { clamp } from '../utils/geometry';\nimport { patchRemove, patchUpdate } from '../utils/patches';\nimport { DiagramPatch } from '../api/types';\n\nconst clampToRect = (point: Point, rect: Rect): Point => ({\n x: clamp(point.x, rect.x, rect.x + rect.width),\n y: clamp(point.y, rect.y, rect.y + rect.height),\n});\n\nconst snapToRectBorder = (point: Point, rect: Rect): Point => {\n const clamped = clampToRect(point, rect);\n const left = Math.abs(clamped.x - rect.x);\n const right = Math.abs(clamped.x - (rect.x + rect.width));\n const top = Math.abs(clamped.y - rect.y);\n const bottom = Math.abs(clamped.y - (rect.y + rect.height));\n const min = Math.min(left, right, top, bottom);\n\n if (min === left) return { x: rect.x, y: clamped.y };\n if (min === right) return { x: rect.x + rect.width, y: clamped.y };\n if (min === top) return { x: clamped.x, y: rect.y };\n return { x: clamped.x, y: rect.y + rect.height };\n};\n\nconst EDGE_TOLERANCE = 0.5;\n\nexport type DiagramEngineConfig = {\n renderer: Renderer;\n scheduler?: RenderScheduler;\n router?: RouterStrategy;\n snapper?: SnapStrategy;\n shapeRegistry?: ShapeRegistry;\n textMeasurer?: TextMeasurer;\n};\n\nexport default class DiagramEngine {\n private model = new DiagramModel();\n private events = new EventBus<EngineEventMap>();\n private commandQueue = new CommandQueue();\n private selection = new SelectionState();\n private viewport = new ViewportState();\n private renderer: Renderer;\n private scheduler: RenderScheduler;\n private router: RouterStrategy;\n private snapper: SnapStrategy;\n private shapeRegistry: ShapeRegistry;\n private textMeasurer: TextMeasurer;\n\n constructor(config: DiagramEngineConfig) {\n this.renderer = config.renderer;\n this.scheduler = config.scheduler ?? new RenderScheduler();\n this.router = config.router ?? new ObstacleRouter();\n this.snapper = config.snapper ?? new DefaultSnapper();\n this.shapeRegistry = config.shapeRegistry ?? new ShapeRegistry();\n this.textMeasurer = config.textMeasurer ?? new CanvasTextMeasurer();\n }\n\n static create(config: DiagramEngineConfig): DiagramEngine {\n return new DiagramEngine(config);\n }\n\n load(state: DiagramState): void {\n const patches = this.commandQueue.run(createLoadCommand(state), this.model);\n const layoutResult = this.applyAllLayouts();\n const routingPatches = this.routeLinksWithEmptyPoints();\n const reroutePatches =\n layoutResult.movedPortIds.length > 0 ? this.updateLinksForPorts(layoutResult.movedPortIds) : [];\n this.emitChange([...patches, ...layoutResult.patches, ...routingPatches, ...reroutePatches]);\n }\n\n getState(): DiagramState {\n return this.model.toState();\n }\n\n getViewport(): { pan: Point; zoom: number } {\n return { pan: { ...this.viewport.pan }, zoom: this.viewport.zoom };\n }\n\n clientToWorld(clientPoint: Point, container: { getBoundingClientRect: () => { left: number; top: number } }): Point {\n const rect = container.getBoundingClientRect();\n const { pan, zoom } = this.getViewport();\n const safeZoom = zoom === 0 ? 1 : zoom;\n return {\n x: (clientPoint.x - rect.left - pan.x) / safeZoom,\n y: (clientPoint.y - rect.top - pan.y) / safeZoom,\n };\n }\n\n createOverlayShape(config: OverlayShapeConfig): OverlayShapeHandle {\n return this.renderer.createOverlayShape(config);\n }\n\n on<TEvent extends keyof EngineEventMap>(event: TEvent, handler: (payload: EngineEventMap[TEvent]) => void): () => void {\n return this.events.subscribe(event, handler);\n }\n\n addElement(element: ElementData): void {\n const patches = this.commandQueue.run(createAddElementCommand(element), this.model);\n const layoutResult = this.applyLayoutCascade(element.parentId ?? null);\n const reroutePatches =\n layoutResult.movedPortIds.length > 0 ? this.updateLinksForPorts(layoutResult.movedPortIds) : [];\n this.emitChange([...patches, ...layoutResult.patches, ...reroutePatches]);\n }\n\n moveElementTo(id: string, x: number, y: number): void {\n const oldWorld = this.model.getElementWorldPosition(id);\n const snapped = this.snapper.snap({ x, y });\n const element = this.model.getElement(id);\n let position = snapped;\n if (element?.parentId) {\n const parentPosition = this.model.getElementWorldPosition(element.parentId);\n if (parentPosition) {\n position = {\n x: snapped.x - parentPosition.x,\n y: snapped.y - parentPosition.y,\n };\n const parent = this.model.getElement(element.parentId);\n if (parent && element.moveMode && element.moveMode !== 'free') {\n const widthLimit = Math.max(0, parent.size.width - element.size.width);\n const heightLimit = Math.max(0, parent.size.height - element.size.height);\n let bounds: Rect = {\n x: 0,\n y: 0,\n width: widthLimit,\n height: heightLimit,\n };\n if (element.anchorCenter) {\n bounds = element.moveMode === 'inside'\n ? {\n x: element.size.width / 2,\n y: element.size.height / 2,\n width: widthLimit,\n height: heightLimit,\n }\n : {\n x: 0,\n y: 0,\n width: parent.size.width,\n height: parent.size.height,\n };\n }\n position = element.moveMode === 'inside' ? clampToRect(position, bounds) : snapToRectBorder(position, bounds);\n }\n }\n }\n const patches = this.commandQueue.run(createMoveElementCommand(id, position), this.model);\n const movedPortIds: string[] = [];\n if (element) {\n movedPortIds.push(...this.collectElementPortIds(element.id));\n }\n const layoutResult = this.applyLayoutCascade(element?.parentId ?? null);\n movedPortIds.push(...layoutResult.movedPortIds);\n const reroutePatches =\n movedPortIds.length > 0 ? this.updateLinksForPorts(Array.from(new Set(movedPortIds))) : [];\n this.emitChange([...patches, ...layoutResult.patches, ...reroutePatches]);\n\n const newWorld = this.model.getElementWorldPosition(id);\n if (oldWorld && newWorld) {\n const delta = { x: newWorld.x - oldWorld.x, y: newWorld.y - oldWorld.y };\n if (delta.x !== 0 || delta.y !== 0) {\n this.events.emit('elementMoved', {\n elementId: id,\n oldWorld: { ...oldWorld },\n newWorld: { ...newWorld },\n delta,\n });\n }\n }\n }\n\n resizeElement(id: string, width: number, height: number): void {\n const element = this.model.getElement(id);\n const oldSize = element?.size;\n const patches = this.commandQueue.run(createResizeElementCommand(id, { width, height }), this.model);\n const movedPortIds = element ? this.collectElementPortIds(element.id) : [];\n const ownLayout = this.applyLayoutForParent(id);\n const cascadeLayout = this.applyLayoutCascade(element?.parentId ?? null);\n const allPorts = Array.from(new Set([...movedPortIds, ...ownLayout.movedPortIds, ...cascadeLayout.movedPortIds]));\n const reroutePatches = allPorts.length > 0 ? this.updateLinksForPorts(allPorts) : [];\n this.emitChange([...patches, ...ownLayout.patches, ...cascadeLayout.patches, ...reroutePatches]);\n const newSize = this.model.getElement(id)?.size;\n if (oldSize && newSize && (oldSize.width !== newSize.width || oldSize.height !== newSize.height)) {\n this.events.emit('elementResized', { elementId: id, oldSize: { ...oldSize }, newSize: { ...newSize } });\n }\n }\n\n setElementLayout(id: string, layout: ElementData['layout']): void {\n const patches = this.commandQueue.run(createSetElementLayoutCommand(id, layout), this.model);\n const layoutResult = this.applyLayoutForParent(id);\n const parentCascade = this.applyLayoutCascade(this.model.getElement(id)?.parentId ?? null);\n const allPorts = Array.from(new Set([...layoutResult.movedPortIds, ...parentCascade.movedPortIds]));\n const reroutePatches = allPorts.length > 0 ? this.updateLinksForPorts(allPorts) : [];\n this.emitChange([...patches, ...layoutResult.patches, ...parentCascade.patches, ...reroutePatches]);\n }\n\n removeElement(id: string): void {\n const existing = this.model.getElement(id);\n const parentId = existing?.parentId ?? null;\n const before = this.model.toState();\n this.commandQueue.run(createRemoveElementCommand(id), this.model);\n const patches = this.computeRemovalPatches(before);\n const layoutResult = this.applyLayoutCascade(parentId);\n const reroutePatches =\n layoutResult.movedPortIds.length > 0 ? this.updateLinksForPorts(layoutResult.movedPortIds) : [];\n this.emitChange([...patches, ...layoutResult.patches, ...reroutePatches]);\n if (existing) {\n this.events.emit('elementDeleted', { elementId: id });\n }\n }\n\n addPortToElement(elementId: string, port: PortData): void {\n const patches = this.commandQueue.run(createAddPortCommand({ ...port, elementId }), this.model);\n this.emitChange(patches);\n }\n\n movePortTo(id: string, x: number, y: number): void {\n const snapped = this.snapper.snap({ x, y });\n const port = this.model.getPort(id);\n const oldWorld = this.model.getPortWorldPosition(id);\n let position = snapped;\n if (port) {\n const elementPosition = this.model.getElementWorldPosition(port.elementId);\n if (elementPosition) {\n position = {\n x: snapped.x - elementPosition.x,\n y: snapped.y - elementPosition.y,\n };\n const element = this.model.getElement(port.elementId);\n if (element && port.moveMode && port.moveMode !== 'free') {\n const widthLimit = Math.max(0, element.size.width - (port.size?.width ?? 0));\n const heightLimit = Math.max(0, element.size.height - (port.size?.height ?? 0));\n let bounds: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n if (port.anchorCenter && port.size) {\n bounds = port.moveMode === 'inside'\n ? {\n x: port.size.width / 2,\n y: port.size.height / 2,\n width: widthLimit,\n height: heightLimit,\n }\n : {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n }\n position = port.moveMode === 'inside' ? clampToRect(position, bounds) : snapToRectBorder(position, bounds);\n }\n const style = port.style as\n | { moveBounds?: { x: number; y: number; width: number; height: number }; moveAxis?: 'horizontal' | 'vertical' }\n | undefined;\n if (style?.moveAxis === 'horizontal') {\n position.y = port.position.y;\n } else if (style?.moveAxis === 'vertical') {\n position.x = port.position.x;\n }\n if (style?.moveBounds) {\n const bounds = style.moveBounds;\n position.x = clamp(position.x, bounds.x, bounds.x + bounds.width);\n position.y = clamp(position.y, bounds.y, bounds.y + bounds.height);\n }\n }\n }\n const patches = this.commandQueue.run(createMovePortCommand(id, position), this.model);\n if (port) {\n patches.push(...this.updateLinksForPorts([port.id]));\n }\n this.emitChange(patches);\n\n const newWorld = this.model.getPortWorldPosition(id);\n if (port && oldWorld && newWorld) {\n const delta = { x: newWorld.x - oldWorld.x, y: newWorld.y - oldWorld.y };\n if (delta.x !== 0 || delta.y !== 0) {\n this.events.emit('portMoved', {\n portId: id,\n elementId: port.elementId,\n oldWorld: { ...oldWorld },\n newWorld: { ...newWorld },\n delta,\n });\n }\n }\n }\n\n removePort(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemovePortCommand(id), this.model);\n const patches = this.computeRemovalPatches(before);\n this.emitChange(patches);\n }\n\n addLink(link: LinkData): void {\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n const routing = link.routing ?? 'auto';\n let points = link.points;\n if (source && target) {\n if (routing === 'auto') {\n points = this.computeAutoRoute(link, source, target);\n } else if (points.length < 2) {\n points = [{ ...source }, { ...target }];\n }\n }\n const patches = this.commandQueue.run(\n createAddLinkCommand({ ...link, points, routing }),\n this.model\n );\n this.emitChange(patches);\n }\n\n updateLinkPoints(id: string, points: Point[]): void {\n const patches = this.commandQueue.run(\n createUpdateLinkCommand(id, { points, routing: 'manual' }),\n this.model\n );\n this.emitChange(patches);\n }\n\n setLinkRoutingMode(id: string, mode: LinkRoutingMode): void {\n const link = this.model.getLink(id);\n if (!link) return;\n const update: { points?: Point[]; routing: LinkRoutingMode } = { routing: mode };\n if (mode === 'auto') {\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (source && target) {\n update.points = this.computeAutoRoute(link, source, target);\n }\n }\n const patches = this.commandQueue.run(createUpdateLinkCommand(id, update), this.model);\n this.emitChange(patches);\n }\n\n rerouteAllLinks(): void {\n const linkIds: string[] = [];\n this.model.links.forEach((link) => {\n if ((link.routing ?? 'auto') === 'auto') {\n linkIds.push(link.id);\n }\n });\n this.rerouteLinks(linkIds);\n }\n\n rerouteLinks(linkIds: string[], options?: RerouteLinksOptions): void {\n const includeManual = Boolean(options?.includeManual);\n const patches: DiagramPatch[] = [];\n const visited = new Set<string>();\n\n linkIds.forEach((id) => {\n if (visited.has(id)) return;\n visited.add(id);\n const link = this.model.getLink(id);\n if (!link) return;\n const routing = link.routing ?? 'auto';\n if (routing === 'manual' && !includeManual) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points = this.computeAutoRoute(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n });\n\n if (patches.length > 0) {\n this.emitChange(patches);\n }\n }\n\n removeLink(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemoveLinkCommand(id), this.model);\n const patches = this.computeRemovalPatches(before);\n this.emitChange(patches);\n }\n\n addText(text: TextData): void {\n const measured = this.textMeasurer.measure(text);\n const patches = this.commandQueue.run(createAddTextCommand({ ...text, size: measured }), this.model);\n this.emitChange(patches);\n }\n\n updateText(id: string, content: string): void {\n const patches = this.commandQueue.run(createUpdateTextCommand(id, content), this.model);\n const text = this.model.getText(id);\n if (text) {\n const size = this.textMeasurer.measure(text.toData());\n text.setSize(size);\n patches.push(patchUpdate('text', id, { size }));\n }\n this.emitChange(patches);\n }\n\n moveTextTo(id: string, x: number, y: number): void {\n const text = this.model.getText(id);\n if (!text) return;\n let position: Point = { x, y };\n if (text.ownerId) {\n const element = this.model.getElement(text.ownerId);\n if (element) {\n const elementPosition = this.model.getElementWorldPosition(text.ownerId);\n if (elementPosition) {\n position = { x: x - elementPosition.x, y: y - elementPosition.y };\n }\n } else {\n const port = this.model.getPort(text.ownerId);\n if (port) {\n const portPosition = this.model.getPortWorldPosition(text.ownerId);\n if (portPosition) {\n position = { x: x - portPosition.x, y: y - portPosition.y };\n }\n } else {\n const link = this.model.getLink(text.ownerId);\n if (link) {\n const midpoint = this.model.getLinkMidpoint(text.ownerId);\n if (midpoint) {\n position = { x: x - midpoint.x, y: y - midpoint.y };\n }\n }\n }\n }\n }\n const patches = this.commandQueue.run(createMoveTextCommand(id, position), this.model);\n this.emitChange(patches);\n }\n\n removeText(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemoveTextCommand(id), this.model);\n const patches = this.computeRemovalPatches(before);\n this.emitChange(patches);\n }\n\n setSelection(ids: string[]): void {\n this.selection.set(ids);\n this.emitSelection();\n }\n\n toggleSelection(id: string): void {\n this.selection.toggle(id);\n this.emitSelection();\n }\n\n getSelection(): string[] {\n return this.selection.get();\n }\n\n getElementWorldPosition(id: string): Point | null {\n return this.model.getElementWorldPosition(id);\n }\n\n getPortWorldPosition(id: string): Point | null {\n return this.model.getPortWorldPosition(id);\n }\n\n getTextWorldPosition(id: string): Point | null {\n return this.model.getTextWorldPosition(id);\n }\n\n getPortElementId(portId: string): string | null {\n return this.model.getPort(portId)?.elementId ?? null;\n }\n\n deleteSelection(): void {\n const selected = this.selection.get();\n if (selected.length === 0) return;\n const before = this.model.toState();\n\n const elementIds: string[] = [];\n const portIds: string[] = [];\n const linkIds: string[] = [];\n const textIds: string[] = [];\n selected.forEach((id) => {\n if (this.model.getElement(id)) elementIds.push(id);\n else if (this.model.getPort(id)) portIds.push(id);\n else if (this.model.getLink(id)) linkIds.push(id);\n else if (this.model.getText(id)) textIds.push(id);\n });\n\n selected.forEach((id) => {\n if (this.model.getElement(id)) {\n this.commandQueue.run(createRemoveElementCommand(id), this.model);\n return;\n }\n if (this.model.getPort(id)) {\n this.commandQueue.run(createRemovePortCommand(id), this.model);\n return;\n }\n if (this.model.getLink(id)) {\n this.commandQueue.run(createRemoveLinkCommand(id), this.model);\n return;\n }\n if (this.model.getText(id)) {\n this.commandQueue.run(createRemoveTextCommand(id), this.model);\n }\n });\n\n const patches = this.computeRemovalPatches(before);\n this.emitChange(patches);\n elementIds.forEach((elementId) => this.events.emit('elementDeleted', { elementId }));\n this.selection.clear();\n this.emitSelection();\n }\n\n setViewport(pan: Point, zoom: number): void {\n const hasPanChange = this.viewport.pan.x !== pan.x || this.viewport.pan.y !== pan.y;\n const hasZoomChange = this.viewport.zoom !== zoom;\n if (!hasPanChange && !hasZoomChange) return;\n\n this.viewport.setPan(pan);\n this.viewport.setZoom(zoom);\n this.emitChange(\n [\n {\n type: 'viewport',\n entity: 'viewport',\n payload: { pan: { ...pan }, zoom },\n },\n ],\n { render: false },\n );\n }\n\n setRouting(router: RouterStrategy): void {\n this.router = router;\n this.events.emit('config', { type: 'routing' });\n }\n\n setSnapping(snapper: SnapStrategy): void {\n this.snapper = snapper;\n this.events.emit('config', { type: 'snapping' });\n }\n\n registerShape(shape: ShapeDefinition): void {\n this.shapeRegistry.register(shape);\n this.events.emit('config', { type: 'rendering' });\n }\n\n render(): void {\n this.renderer.render(this.model);\n }\n\n emitElementDrop(event: ElementDropEvent): void {\n this.events.emit('element-drop', event);\n this.events.emit('elementDrop', event);\n this.events.emit('elementDragged', event);\n }\n\n emitPaperClick(pointer: EnginePointerInfo): void {\n this.events.emit('paperClick', { pointer });\n }\n\n emitPortMouseDown(event: PortMouseEvent): void {\n this.events.emit('portMouseDown', event);\n }\n\n emitPortMouseUp(event: PortMouseEvent): void {\n this.events.emit('portMouseUp', event);\n }\n\n emitElementClick(elementId: string, pointer: EnginePointerInfo, isMulti: boolean): void {\n this.events.emit('elementClick', { elementId, pointer, isMulti });\n }\n\n emitElementLinkStarted(event: { sourcePortId: string; sourceElementId: string; startWorld: Point }): void {\n this.events.emit('elementLinkStarted', event);\n }\n\n emitElementLinkConnecting(event: ElementLinkConnectingEvent): boolean {\n let cancelled = false;\n const payload: ElementLinkConnectingEvent = {\n ...event,\n cancelled: false,\n cancel: () => {\n cancelled = true;\n payload.cancelled = true;\n },\n };\n this.events.emit('elementLinkConnecting', payload);\n return cancelled || payload.cancelled;\n }\n\n emitElementLinkEnded(event: {\n sourcePortId: string;\n sourceElementId: string;\n linkId?: string;\n targetPortId?: string;\n targetElementId?: string;\n cancelled: boolean;\n }): void {\n this.events.emit('elementLinkEnded', event);\n }\n\n private emitChange(patches: DiagramPatch[], options?: { render?: boolean }): void {\n const state = this.model.toState();\n this.events.emit('change', { patches, state });\n if (options?.render === false) return;\n this.scheduler.requestRender(() => this.renderer.render(this.model));\n }\n\n private emitSelection(): void {\n const selectedIds = this.selection.get();\n this.events.emit('selection', { selectedIds });\n selectedIds.forEach((id) => {\n const element = this.model.getElement(id);\n if (element) {\n this.events.emit('elementSelected', { elementId: id });\n return;\n }\n const port = this.model.getPort(id);\n if (port) {\n this.events.emit('portSelected', { portId: id, elementId: port.elementId });\n return;\n }\n const text = this.model.getText(id);\n if (text) {\n this.events.emit('textSelected', { textId: id });\n }\n });\n this.renderer.renderSelection(selectedIds);\n }\n\n private resolveLayoutPadding(layout: ElementData['layout']): { x: number; y: number } {\n const padding = layout?.padding ?? 12;\n if (typeof padding === 'number') return { x: padding, y: padding };\n return {\n x: padding.x ?? 12,\n y: padding.y ?? 12,\n };\n }\n\n private applyLayoutForParent(parentId: string): { patches: DiagramPatch[]; movedPortIds: string[] } {\n const parent = this.model.getElement(parentId);\n if (!parent) return { patches: [], movedPortIds: [] };\n const layout = parent.layout;\n if (!layout || layout.mode === 'manual') return { patches: [], movedPortIds: [] };\n\n const children = this.model.getChildren(parentId);\n if (children.length === 0) return { patches: [], movedPortIds: [] };\n\n const axis = layout.mode;\n const padding = this.resolveLayoutPadding(layout);\n const gap = layout.gap ?? 12;\n const align = layout.align ?? 'center';\n\n const sorted = [...children].sort((a, b) => {\n const aPos = axis === 'horizontal' ? a.position.x : a.position.y;\n const bPos = axis === 'horizontal' ? b.position.x : b.position.y;\n if (aPos === bPos) return a.id.localeCompare(b.id);\n return aPos - bPos;\n });\n\n const maxWidth = Math.max(...sorted.map((child) => child.size.width));\n const maxHeight = Math.max(...sorted.map((child) => child.size.height));\n const totalWidth = sorted.reduce((sum, child) => sum + child.size.width, 0);\n const totalHeight = sorted.reduce((sum, child) => sum + child.size.height, 0);\n\n const gapCount = Math.max(0, sorted.length - 1);\n let newParentWidth = parent.size.width;\n let newParentHeight = parent.size.height;\n\n if (axis === 'horizontal') {\n const neededWidth = padding.x * 2 + totalWidth + gap * gapCount;\n const neededHeight = padding.y * 2 + maxHeight;\n newParentWidth = Math.max(parent.size.width, neededWidth);\n newParentHeight = Math.max(parent.size.height, neededHeight);\n } else {\n const neededWidth = padding.x * 2 + maxWidth;\n const neededHeight = padding.y * 2 + totalHeight + gap * gapCount;\n newParentWidth = Math.max(parent.size.width, neededWidth);\n newParentHeight = Math.max(parent.size.height, neededHeight);\n }\n\n const availableWidth = Math.max(0, newParentWidth - padding.x * 2);\n const availableHeight = Math.max(0, newParentHeight - padding.y * 2);\n\n let cursorX = padding.x;\n let cursorY = padding.y;\n const desiredPositions = new Map<string, Point>();\n\n sorted.forEach((child, index) => {\n if (axis === 'horizontal') {\n const y =\n align === 'start'\n ? padding.y\n : align === 'end'\n ? newParentHeight - padding.y - child.size.height\n : padding.y + Math.max(0, (availableHeight - child.size.height) / 2);\n desiredPositions.set(child.id, { x: cursorX, y });\n cursorX += child.size.width + (index < sorted.length - 1 ? gap : 0);\n } else {\n const x =\n align === 'start'\n ? padding.x\n : align === 'end'\n ? newParentWidth - padding.x - child.size.width\n : padding.x + Math.max(0, (availableWidth - child.size.width) / 2);\n desiredPositions.set(child.id, { x, y: cursorY });\n cursorY += child.size.height + (index < sorted.length - 1 ? gap : 0);\n }\n });\n\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n\n desiredPositions.forEach((position, childId) => {\n const child = this.model.getElement(childId);\n if (!child) return;\n if (child.position.x !== position.x || child.position.y !== position.y) {\n const movePatches = this.commandQueue.run(createMoveElementCommand(childId, position), this.model);\n patches.push(...movePatches);\n movedPortIds.push(...this.collectElementPortIds(childId));\n }\n });\n\n if (newParentWidth !== parent.size.width || newParentHeight !== parent.size.height) {\n const resizePatches = this.commandQueue.run(\n createResizeElementCommand(parentId, { width: newParentWidth, height: newParentHeight }),\n this.model,\n );\n patches.push(...resizePatches);\n movedPortIds.push(...parent.portIds);\n }\n\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n private applyLayoutCascade(startParentId: string | null): { patches: DiagramPatch[]; movedPortIds: string[] } {\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n const visited = new Set<string>();\n let current = startParentId;\n while (current) {\n if (visited.has(current)) break;\n visited.add(current);\n const result = this.applyLayoutForParent(current);\n patches.push(...result.patches);\n movedPortIds.push(...result.movedPortIds);\n const parent = this.model.getElement(current);\n current = parent?.parentId ?? null;\n }\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n private applyAllLayouts(): { patches: DiagramPatch[]; movedPortIds: string[] } {\n const layoutParents = Array.from(this.model.elements.values()).filter(\n (element) => element.layout && element.layout.mode !== 'manual',\n );\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n const depth = (elementId: string): number => {\n let level = 0;\n let current = this.model.getElement(elementId);\n while (current?.parentId) {\n level += 1;\n current = this.model.getElement(current.parentId);\n }\n return level;\n };\n layoutParents\n .sort((a, b) => depth(b.id) - depth(a.id))\n .forEach((element) => {\n const result = this.applyLayoutForParent(element.id);\n patches.push(...result.patches);\n movedPortIds.push(...result.movedPortIds);\n });\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n private updateLinksForPorts(portIds: string[]): DiagramPatch[] {\n if (portIds.length === 0) return [];\n const portIdSet = new Set(portIds);\n const patches: DiagramPatch[] = [];\n const updatedLinks = new Set<string>();\n\n this.model.links.forEach((link) => {\n if (!portIdSet.has(link.sourcePortId) && !portIdSet.has(link.targetPortId)) {\n return;\n }\n if (updatedLinks.has(link.id)) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points = this.resolveLinkPointsForUpdate(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n updatedLinks.add(link.id);\n });\n\n return patches;\n }\n\n private collectElementPortIds(elementId: string): string[] {\n const childrenByParent = new Map<string, string[]>();\n this.model.elements.forEach((element) => {\n if (!element.parentId) return;\n const list = childrenByParent.get(element.parentId) ?? [];\n list.push(element.id);\n childrenByParent.set(element.parentId, list);\n });\n\n const portIds: string[] = [];\n const stack = [elementId];\n while (stack.length > 0) {\n const currentId = stack.pop();\n if (!currentId) continue;\n const element = this.model.getElement(currentId);\n if (element) {\n portIds.push(...element.portIds);\n }\n const children = childrenByParent.get(currentId);\n if (children) {\n children.forEach((childId) => stack.push(childId));\n }\n }\n return portIds;\n }\n\n private resolveLinkPointsForUpdate(link: LinkData, source: Point, target: Point): Point[] {\n const routing = link.routing ?? 'auto';\n if (routing === 'manual') {\n return this.updateManualRoute(link.points, source, target);\n }\n return this.computeAutoRoute(link, source, target);\n }\n\n private updateManualRoute(points: Point[], source: Point, target: Point): Point[] {\n if (points.length < 2) {\n return [{ ...source }, { ...target }];\n }\n return points.map((point, index) => {\n if (index === 0) return { ...source };\n if (index === points.length - 1) return { ...target };\n return { ...point };\n });\n }\n\n private computeAutoRoute(link: LinkData, source: Point, target: Point): Point[] {\n const routed = this.router.route(source, target, this.buildRouteContext(link));\n if (!routed || routed.length < 2) {\n return [{ ...source }, { ...target }];\n }\n const normalized = routed.map((point) => ({ ...point }));\n normalized[0] = { ...source };\n normalized[normalized.length - 1] = { ...target };\n return normalized;\n }\n\n private buildRouteContext(link: LinkData): RouteContext {\n const sourcePort = this.model.getPort(link.sourcePortId);\n const targetPort = this.model.getPort(link.targetPortId);\n const sourceElementId = sourcePort?.elementId;\n const targetElementId = targetPort?.elementId;\n\n const sourcePosition = this.model.getPortWorldPosition(link.sourcePortId);\n const targetPosition = this.model.getPortWorldPosition(link.targetPortId);\n const sourceRect = sourceElementId ? this.getElementRect(sourceElementId) : null;\n const targetRect = targetElementId ? this.getElementRect(targetElementId) : null;\n const sourceOnEdge = Boolean(\n sourcePosition && sourceRect && this.isPointOnRectEdge(sourcePosition, sourceRect, EDGE_TOLERANCE),\n );\n const targetOnEdge = Boolean(\n targetPosition && targetRect && this.isPointOnRectEdge(targetPosition, targetRect, EDGE_TOLERANCE),\n );\n\n const ancestorExclusions = this.getAncestorExclusions(sourceElementId, targetElementId);\n const { bounds, boundsElementId } = this.resolveRouteBounds(sourceElementId, targetElementId);\n\n const forcedObstacles = new Set<string>();\n if (sourceElementId && sourceOnEdge) forcedObstacles.add(sourceElementId);\n if (targetElementId && targetOnEdge) forcedObstacles.add(targetElementId);\n if (boundsElementId) {\n forcedObstacles.delete(boundsElementId);\n }\n\n const excluded = new Set<string>();\n ancestorExclusions.forEach((id) => excluded.add(id));\n if (sourceElementId && !sourceOnEdge) excluded.add(sourceElementId);\n if (targetElementId && !targetOnEdge) excluded.add(targetElementId);\n if (boundsElementId) excluded.add(boundsElementId);\n\n const obstacles = Array.from(this.model.elements.values())\n .filter((element) => {\n if (forcedObstacles.has(element.id)) return true;\n if (excluded.has(element.id)) return false;\n return true;\n })\n .map((element) => {\n const position = this.model.getElementWorldPosition(element.id) ?? element.position;\n return {\n id: element.id,\n rect: {\n x: position.x,\n y: position.y,\n width: element.size.width,\n height: element.size.height,\n },\n };\n });\n\n return {\n linkId: link.id,\n sourcePortId: link.sourcePortId,\n targetPortId: link.targetPortId,\n obstacles,\n bounds,\n sourceEndpoint: sourcePosition && sourceRect ? {\n elementId: sourceElementId ?? undefined,\n rect: sourceRect,\n onEdgeSide: this.resolveEdgeSide(sourcePosition, sourceRect),\n } : undefined,\n targetEndpoint: targetPosition && targetRect ? {\n elementId: targetElementId ?? undefined,\n rect: targetRect,\n onEdgeSide: this.resolveEdgeSide(targetPosition, targetRect),\n } : undefined,\n };\n }\n\n private getElementRect(elementId: string): Rect | null {\n const element = this.model.getElement(elementId);\n if (!element) return null;\n const position = this.model.getElementWorldPosition(elementId) ?? element.position;\n return {\n x: position.x,\n y: position.y,\n width: element.size.width,\n height: element.size.height,\n };\n }\n\n private getAncestorChain(elementId: string): string[] {\n const chain: string[] = [];\n let currentId: string | null = elementId;\n while (currentId) {\n const element = this.model.getElement(currentId);\n if (!element) break;\n chain.push(element.id);\n currentId = element.parentId ?? null;\n }\n return chain;\n }\n\n private getAncestorExclusions(sourceElementId?: string, targetElementId?: string): Set<string> {\n const exclusions = new Set<string>();\n if (sourceElementId) {\n this.getAncestorChain(sourceElementId).forEach((id) => exclusions.add(id));\n }\n if (targetElementId) {\n this.getAncestorChain(targetElementId).forEach((id) => exclusions.add(id));\n }\n return exclusions;\n }\n\n private resolveRouteBounds(\n sourceElementId?: string,\n targetElementId?: string,\n ): { bounds?: Rect; boundsElementId?: string } {\n if (!sourceElementId || !targetElementId) return {};\n if (sourceElementId === targetElementId) return {};\n\n const sourceChain = this.getAncestorChain(sourceElementId);\n if (sourceChain.includes(targetElementId)) {\n const rect = this.getElementRect(targetElementId);\n if (rect) {\n return { bounds: rect, boundsElementId: targetElementId };\n }\n }\n\n const targetChain = this.getAncestorChain(targetElementId);\n if (targetChain.includes(sourceElementId)) {\n const rect = this.getElementRect(sourceElementId);\n if (rect) {\n return { bounds: rect, boundsElementId: sourceElementId };\n }\n }\n\n return {};\n }\n\n private isPointOnRectEdge(point: Point, rect: Rect, tolerance: number): boolean {\n const withinX = point.x >= rect.x - tolerance && point.x <= rect.x + rect.width + tolerance;\n const withinY = point.y >= rect.y - tolerance && point.y <= rect.y + rect.height + tolerance;\n if (!withinX || !withinY) return false;\n const onLeft = Math.abs(point.x - rect.x) <= tolerance;\n const onRight = Math.abs(point.x - (rect.x + rect.width)) <= tolerance;\n const onTop = Math.abs(point.y - rect.y) <= tolerance;\n const onBottom = Math.abs(point.y - (rect.y + rect.height)) <= tolerance;\n return onLeft || onRight || onTop || onBottom;\n }\n\n private resolveEdgeSide(point: Point, rect: Rect): 'left' | 'right' | 'top' | 'bottom' | undefined {\n const distances: Array<{ side: 'left' | 'right' | 'top' | 'bottom'; value: number }> = [\n { side: 'left', value: Math.abs(point.x - rect.x) },\n { side: 'right', value: Math.abs(point.x - (rect.x + rect.width)) },\n { side: 'top', value: Math.abs(point.y - rect.y) },\n { side: 'bottom', value: Math.abs(point.y - (rect.y + rect.height)) },\n ];\n const nearest = distances.reduce((best, current) => (current.value < best.value ? current : best), distances[0]);\n return nearest.value <= EDGE_TOLERANCE ? nearest.side : undefined;\n }\n\n private routeLinksWithEmptyPoints(): DiagramPatch[] {\n const patches: DiagramPatch[] = [];\n this.model.links.forEach((link) => {\n if (link.points.length > 0) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points =\n (link.routing ?? 'auto') === 'manual'\n ? [{ ...source }, { ...target }]\n : this.computeAutoRoute(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n });\n return patches;\n }\n\n private computeRemovalPatches(before: DiagramState): DiagramPatch[] {\n const after = this.model.toState();\n const removed: DiagramPatch[] = [];\n const beforeElements = new Set(before.elements.map((element) => element.id));\n const beforePorts = new Set(before.ports.map((port) => port.id));\n const beforeLinks = new Set(before.links.map((link) => link.id));\n const beforeTexts = new Set(before.texts.map((text) => text.id));\n\n const afterElements = new Set(after.elements.map((element) => element.id));\n const afterPorts = new Set(after.ports.map((port) => port.id));\n const afterLinks = new Set(after.links.map((link) => link.id));\n const afterTexts = new Set(after.texts.map((text) => text.id));\n\n beforeElements.forEach((id) => {\n if (!afterElements.has(id)) removed.push(patchRemove('element', id));\n });\n beforePorts.forEach((id) => {\n if (!afterPorts.has(id)) removed.push(patchRemove('port', id));\n });\n beforeLinks.forEach((id) => {\n if (!afterLinks.has(id)) removed.push(patchRemove('link', id));\n });\n beforeTexts.forEach((id) => {\n if (!afterTexts.has(id)) removed.push(patchRemove('text', id));\n });\n\n return removed;\n }\n}\n\nexport const createDiagramEngine = (config: DiagramEngineConfig): DiagramEngineHandle => {\n const engine = new DiagramEngine(config);\n return {\n load: (state) => engine.load(state),\n getState: () => engine.getState(),\n getViewport: () => engine.getViewport(),\n clientToWorld: (clientPoint, container) => engine.clientToWorld(clientPoint, container),\n createOverlayShape: (config) => engine.createOverlayShape(config),\n on: (event, handler) => engine.on(event, handler),\n addElement: (element) => engine.addElement(element),\n moveElementTo: (id, x, y) => engine.moveElementTo(id, x, y),\n resizeElement: (id, width, height) => engine.resizeElement(id, width, height),\n setElementLayout: (id, layout) => engine.setElementLayout(id, layout),\n removeElement: (id) => engine.removeElement(id),\n addPortToElement: (elementId, port) => engine.addPortToElement(elementId, port),\n movePortTo: (id, x, y) => engine.movePortTo(id, x, y),\n removePort: (id) => engine.removePort(id),\n addLink: (link) => engine.addLink(link),\n updateLinkPoints: (id, points) => engine.updateLinkPoints(id, points),\n setLinkRoutingMode: (id, mode) => engine.setLinkRoutingMode(id, mode as LinkRoutingMode),\n rerouteAllLinks: () => engine.rerouteAllLinks(),\n rerouteLinks: (linkIds, options) => engine.rerouteLinks(linkIds, options),\n removeLink: (id) => engine.removeLink(id),\n addText: (text) => engine.addText(text),\n updateText: (id, content) => engine.updateText(id, content),\n moveTextTo: (id, x, y) => engine.moveTextTo(id, x, y),\n removeText: (id) => engine.removeText(id),\n setSelection: (ids) => engine.setSelection(ids),\n setViewport: (pan, zoom) => engine.setViewport(pan, zoom),\n setRouting: (router) => engine.setRouting(router as RouterStrategy),\n setSnapping: (snapper) => engine.setSnapping(snapper as SnapStrategy),\n registerShape: (shape) => engine.registerShape(shape as ShapeDefinition),\n render: () => engine.render(),\n };\n};\n","export type KonvaLayerLike = {\n name?: string;\n draw: () => void;\n destroy?: () => void;\n add?: (node: unknown) => void;\n};\n\nexport default class KonvaLayers {\n private layers = new Map<string, KonvaLayerLike>();\n private dirty = new Set<string>();\n\n addLayer(name: string, layer: KonvaLayerLike): void {\n this.layers.set(name, layer);\n }\n\n getLayer(name: string): KonvaLayerLike | undefined {\n return this.layers.get(name);\n }\n\n markDirty(name: string): void {\n if (this.layers.has(name)) {\n this.dirty.add(name);\n }\n }\n\n markAllDirty(): void {\n Array.from(this.layers.keys()).forEach((name) => this.dirty.add(name));\n }\n\n drawDirty(): void {\n const names = Array.from(this.dirty.values());\n names.forEach((name) => {\n const layer = this.layers.get(name);\n if (layer) {\n layer.draw();\n }\n });\n this.dirty.clear();\n }\n\n destroy(): void {\n Array.from(this.layers.values()).forEach((layer) => layer.destroy?.());\n this.layers.clear();\n this.dirty.clear();\n }\n}\r\n","import { ElementData, LinkData, PortData, TextData } from '../../api/types';\nimport { ShapeDefinition, ShapeRegistry } from '../RenderTypes';\n\nexport type KonvaNodeLike = {\n id?: () => string;\n setAttrs?: (attrs: Record<string, unknown>) => void;\n destroy?: () => void;\n position?: (pos: { x: number; y: number }) => void;\n x?: (value?: number) => number;\n y?: (value?: number) => number;\n getAttr?: (key: string) => unknown;\n getClientRect?: (config?: Record<string, unknown>) => { width: number; height: number };\n attrs?: Record<string, unknown>;\n moveToTop?: () => void;\n zIndex?: (value?: number) => number;\n};\n\nexport type KonvaLike = {\n Group: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Rect: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Circle: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Line: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Path: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Text: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Shape: new (config?: Record<string, unknown>) => KonvaNodeLike;\n};\n\nlet cachedKonva: KonvaLike | null = null;\n\nconst getKonva = (): KonvaLike => {\n if (cachedKonva) return cachedKonva;\n // Lazy-load Konva to avoid Jest ESM import issues in tests.\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const module = require('konva') as KonvaLike | { default?: KonvaLike };\n const resolved = (module as { default?: KonvaLike }).default ?? module;\n cachedKonva = resolved as KonvaLike;\n return cachedKonva;\n};\n\nexport default class KonvaNodeFactory {\n private registry: ShapeRegistry;\n private konva: KonvaLike;\n\n constructor(registry: ShapeRegistry, konva: KonvaLike = getKonva()) {\n this.registry = registry;\n this.konva = konva;\n }\n\n createElementNode(model: ElementData): KonvaNodeLike {\n const shape = this.registry.get(model.shapeId);\n if (shape?.createNode) {\n return shape.createNode(model) as KonvaNodeLike;\n }\n if (shape?.svgPath) {\n return this.createSvgPathNode(model, shape, { name: 'element', size: model.size });\n }\n if (shape?.draw) {\n return this.createDrawNode(model, shape, { name: 'element', size: model.size });\n }\n const node = new this.konva.Group({\n x: model.position.x,\n y: model.position.y,\n id: model.id,\n name: 'element',\n });\n return node;\n }\n\n createPortNode(model: PortData): KonvaNodeLike {\n if (model.shapeId) {\n const shape = this.registry.get(model.shapeId);\n if (shape?.createNode) {\n return shape.createNode(model) as KonvaNodeLike;\n }\n if (shape?.svgPath) {\n const size = model.size ?? { width: 8, height: 8 };\n return this.createSvgPathNode(model, shape, { name: 'port', size });\n }\n if (shape?.draw) {\n const size = model.size ?? { width: 8, height: 8 };\n return this.createDrawNode(model, shape, { name: 'port', size });\n }\n }\n const node = new this.konva.Circle({\n x: model.position.x,\n y: model.position.y,\n id: model.id,\n radius: 4,\n name: 'port',\n });\n return node;\n }\n\n createLinkNode(model: LinkData): KonvaNodeLike {\n const flatPoints: number[] = [];\n model.points.forEach((point) => {\n flatPoints.push(point.x, point.y);\n });\n const style = model.style as Record<string, unknown> | undefined;\n const strokeWidth = (style?.strokeWidth as number | undefined) ?? 2;\n const hitStrokeWidth = (style?.hitStrokeWidth as number | undefined) ?? 15;\n const stroke = (style?.stroke as string | undefined) ?? 'black';\n const node = new this.konva.Line({\n points: flatPoints,\n id: model.id,\n stroke,\n strokeWidth,\n hitStrokeWidth,\n name: 'link',\n ...(style ?? {}),\n });\n if (node.setAttrs) {\n node.setAttrs({ __baseStroke: stroke, __baseStrokeWidth: strokeWidth });\n }\n return node;\n }\n\n createTextNode(model: TextData): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const baseFill = (style?.fill as string | undefined) ?? 'black';\n const node = new this.konva.Text({\n x: model.position.x,\n y: model.position.y,\n text: model.content,\n id: model.id,\n name: 'text',\n ...(style ?? {}),\n });\n if (node.setAttrs) {\n node.setAttrs({ __baseFill: baseFill });\n }\n return node;\n }\n\n createHandleNode(config: { id: string; x: number; y: number; size: number; name: string }): KonvaNodeLike {\n return new this.konva.Rect({\n id: config.id,\n x: config.x,\n y: config.y,\n width: config.size,\n height: config.size,\n fill: '#ffffff',\n stroke: '#ff7a00',\n strokeWidth: 2,\n name: config.name,\n });\n }\n\n createHandleCircleNode(config: { id: string; x: number; y: number; radius: number; name: string }): KonvaNodeLike {\n return new this.konva.Circle({\n id: config.id,\n x: config.x,\n y: config.y,\n radius: config.radius,\n fill: '#ffffff',\n stroke: '#ff7a00',\n strokeWidth: 2,\n name: config.name,\n });\n }\n\n createTempLinkNode(config: { id: string; points: number[] }): KonvaNodeLike {\n return new this.konva.Line({\n id: config.id,\n points: config.points,\n stroke: '#999999',\n dash: [6, 4],\n strokeWidth: 2,\n name: 'temp-link',\n listening: false,\n });\n }\n\n createMarqueeNode(config: { id: string; x: number; y: number; width: number; height: number }): KonvaNodeLike {\n return new this.konva.Rect({\n id: config.id,\n x: config.x,\n y: config.y,\n width: config.width,\n height: config.height,\n fill: 'rgba(66, 133, 244, 0.12)',\n stroke: '#4285f4',\n strokeWidth: 1,\n dash: [4, 4],\n name: 'marquee',\n listening: false,\n });\n }\n\n private createDrawNode(\n model: ElementData | PortData,\n shape: ShapeDefinition,\n config: { name: string; size?: { width: number; height: number } },\n ): KonvaNodeLike {\n const attrs: Record<string, unknown> = {\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n name: config.name,\n __shapeDraw: true,\n __model: model,\n sceneFunc: (ctx: CanvasRenderingContext2D, node: KonvaNodeLike) => {\n const resolvedModel =\n (node.getAttr ? node.getAttr('__model') : node.attrs?.__model) ?? model;\n shape.draw?.({ ctx, model: resolvedModel as ElementData | PortData });\n },\n };\n if (config.size?.width !== undefined) {\n attrs.width = config.size.width;\n }\n if (config.size?.height !== undefined) {\n attrs.height = config.size.height;\n }\n return new this.konva.Shape(attrs);\n }\n\n private createSvgPathNode(\n model: ElementData | PortData,\n shape: ShapeDefinition,\n config: { name: string; size?: { width: number; height: number } },\n ): KonvaNodeLike {\n const size = config.size ?? { width: 0, height: 0 };\n const node = new this.konva.Path({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n data: shape.svgPath,\n name: config.name,\n shapeKind: 'svg-path',\n __autoOffsetX: true,\n __autoOffsetY: true,\n });\n\n const rect = node.getClientRect ? node.getClientRect({ skipTransform: true }) : null;\n const baseWidth = shape.svgSize?.width ?? rect?.width ?? size.width;\n const baseHeight = shape.svgSize?.height ?? rect?.height ?? size.height;\n const scaleX = baseWidth === 0 ? 1 : size.width / baseWidth;\n const scaleY = baseHeight === 0 ? 1 : size.height / baseHeight;\n\n if (node.setAttrs) {\n node.setAttrs({\n scaleX,\n scaleY,\n __pathBaseWidth: baseWidth,\n __pathBaseHeight: baseHeight,\n });\n }\n return node;\n }\n}\n","import { ElementData, LinkData, OverlayShapeConfig, OverlayShapeHandle, Point, PortData } from '../../api/types';\nimport DiagramModel from '../../models/DiagramModel';\nimport ElementModel from '../../models/ElementModel';\nimport { ShapeRegistry } from '../RenderTypes';\nimport { Renderer } from '../Renderer';\nimport KonvaLayers, { KonvaLayerLike } from './KonvaLayers';\nimport KonvaNodeFactory, { KonvaLike, KonvaNodeLike } from './KonvaNodeFactory';\n\nexport type KonvaStageLike = {\n add: (layer: KonvaLayerLike) => void;\n width?: (value?: number) => number;\n height?: (value?: number) => number;\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\n};\n\nexport type KonvaRendererConfig = {\n stage?: KonvaStageLike;\n container?: HTMLDivElement | string;\n width?: number;\n height?: number;\n nodeFactory?: KonvaNodeFactory;\n konva?: KonvaLike & { Stage: new (config: Record<string, unknown>) => KonvaStageLike; Layer: new () => KonvaLayerLike };\n shapeRegistry?: ShapeRegistry;\n};\n\nlet cachedKonva: KonvaRendererConfig['konva'] | null = null;\n\nconst getKonva = (): NonNullable<KonvaRendererConfig['konva']> => {\n if (cachedKonva) return cachedKonva as NonNullable<KonvaRendererConfig['konva']>;\n // Lazy-load Konva to avoid Jest ESM import issues in tests.\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const module = require('konva') as KonvaRendererConfig['konva'] | { default?: KonvaRendererConfig['konva'] };\n const resolved = (module as { default?: KonvaRendererConfig['konva'] }).default ?? module;\n cachedKonva = resolved as KonvaRendererConfig['konva'];\n return resolved as NonNullable<KonvaRendererConfig['konva']>;\n};\n\nexport default class KonvaRenderer implements Renderer {\n private stage: KonvaStageLike;\n private layers = new KonvaLayers();\n private nodeFactory: KonvaNodeFactory;\n private elementNodes = new Map<string, KonvaNodeLike>();\n private portNodes = new Map<string, KonvaNodeLike>();\n private linkNodes = new Map<string, KonvaNodeLike>();\n private textNodes = new Map<string, KonvaNodeLike>();\n private selectedIds = new Set<string>();\n private overlayLayer: KonvaLayerLike;\n private tempLinkNode: KonvaNodeLike | null = null;\n private tempPortNode: KonvaNodeLike | null = null;\n private tempPortShapeId: string | undefined;\n private marqueeNode: KonvaNodeLike | null = null;\n private resizeHandleNodes = new Map<string, KonvaNodeLike>();\n private linkHandleNodes = new Map<string, KonvaNodeLike>();\n private overlayShapes = new Map<string, { node: KonvaNodeLike; shapeId: string; config: OverlayShapeConfig }>();\n private overlayId = 0;\n\n constructor(config: KonvaRendererConfig = {}) {\n const konva = config.konva ?? getKonva();\n const registry = config.shapeRegistry ?? new ShapeRegistry();\n this.nodeFactory = config.nodeFactory ?? new KonvaNodeFactory(registry, konva);\n\n if (config.stage) {\n this.stage = config.stage;\n } else {\n this.stage = new (konva as NonNullable<typeof konva>).Stage({\n container: config.container ?? undefined,\n width: config.width ?? 800,\n height: config.height ?? 600,\n });\n }\n\n const elementLayer = new (konva as NonNullable<typeof konva>).Layer();\n const linkLayer = new (konva as NonNullable<typeof konva>).Layer();\n const portLayer = new (konva as NonNullable<typeof konva>).Layer();\n const textLayer = new (konva as NonNullable<typeof konva>).Layer();\n const overlayLayer = new (konva as NonNullable<typeof konva>).Layer();\n\n this.layers.addLayer('elements', elementLayer);\n this.layers.addLayer('links', linkLayer);\n this.layers.addLayer('ports', portLayer);\n this.layers.addLayer('texts', textLayer);\n this.layers.addLayer('overlays', overlayLayer);\n this.stage.add(elementLayer);\n this.stage.add(linkLayer);\n this.stage.add(portLayer);\n this.stage.add(textLayer);\n this.stage.add(overlayLayer);\n\n this.overlayLayer = overlayLayer;\n }\n\n render(model: DiagramModel): void {\n this.syncElements(model);\n this.syncPorts(model);\n this.syncLinks(model);\n this.syncTexts(model);\n this.layers.drawDirty();\n }\n\n renderSelection(ids: string[]): void {\n this.selectedIds = new Set(ids);\n this.elementNodes.forEach((node, id) => {\n if (!node.setAttrs) return;\n const isSelected = this.selectedIds.has(id);\n node.setAttrs({\n stroke: isSelected ? '#ff7a00' : '#1f4d99',\n strokeWidth: isSelected ? 3 : 2,\n });\n });\n this.portNodes.forEach((node, id) => {\n if (!node.setAttrs) return;\n const isSelected = this.selectedIds.has(id);\n node.setAttrs({\n stroke: isSelected ? '#ff7a00' : '#1f4d99',\n strokeWidth: isSelected ? 3 : 2,\n });\n });\n this.linkNodes.forEach((node, id) => {\n if (!node.setAttrs) return;\n const isSelected = this.selectedIds.has(id);\n const baseStroke =\n this.getNodeAttr<string>(node, '__baseStroke') ??\n this.getNodeAttr<string>(node, 'stroke') ??\n 'black';\n const baseStrokeWidth =\n this.getNodeAttr<number>(node, '__baseStrokeWidth') ??\n this.getNodeAttr<number>(node, 'strokeWidth') ??\n 2;\n node.setAttrs({\n stroke: isSelected ? '#ff7a00' : baseStroke,\n strokeWidth: isSelected ? baseStrokeWidth + 1 : baseStrokeWidth,\n });\n });\n this.textNodes.forEach((node, id) => {\n if (!node.setAttrs) return;\n const isSelected = this.selectedIds.has(id);\n const baseFill =\n this.getNodeAttr<string>(node, '__baseFill') ??\n this.getNodeAttr<string>(node, 'fill') ??\n 'black';\n node.setAttrs({\n fill: isSelected ? '#ff7a00' : baseFill,\n __baseFill: baseFill,\n });\n });\n this.layers.markDirty('elements');\n this.layers.markDirty('ports');\n this.layers.markDirty('links');\n this.layers.markDirty('texts');\n }\n\n renderResizeHandles(elementId: string, position: Point, size: { width: number; height: number }): void {\n this.clearResizeHandles();\n const handleSize = 8;\n const half = handleSize / 2;\n const corners: Array<[string, number, number]> = [\n ['nw', position.x, position.y],\n ['ne', position.x + size.width, position.y],\n ['sw', position.x, position.y + size.height],\n ['se', position.x + size.width, position.y + size.height],\n ];\n\n corners.forEach(([handle, x, y]) => {\n const node = this.nodeFactory.createHandleNode({\n id: `resize:${elementId}:${handle}`,\n x: x - half,\n y: y - half,\n size: handleSize,\n name: 'resize-handle',\n });\n this.resizeHandleNodes.set(`${elementId}:${handle}`, node);\n this.overlayLayer.add?.(node);\n });\n this.drawOverlays();\n }\n\n clearResizeHandles(): void {\n this.resizeHandleNodes.forEach((node) => node.destroy?.());\n this.resizeHandleNodes.clear();\n this.drawOverlays();\n }\n\n renderLinkHandles(linkId: string, points: Point[]): void {\n this.clearLinkHandles();\n const radius = 5;\n points.forEach((point, index) => {\n const node = this.nodeFactory.createHandleCircleNode({\n id: `link-handle:${linkId}:${index}`,\n x: point.x,\n y: point.y,\n radius,\n name: 'link-handle',\n });\n this.linkHandleNodes.set(`${linkId}:${index}`, node);\n this.overlayLayer.add?.(node);\n });\n this.drawOverlays();\n }\n\n clearLinkHandles(): void {\n this.linkHandleNodes.forEach((node) => node.destroy?.());\n this.linkHandleNodes.clear();\n this.drawOverlays();\n }\n\n renderTempLink(points: Point[]): void {\n const flatPoints: number[] = [];\n points.forEach((point) => flatPoints.push(point.x, point.y));\n if (!this.tempLinkNode) {\n this.tempLinkNode = this.nodeFactory.createTempLinkNode({\n id: 'temp-link',\n points: flatPoints,\n });\n this.overlayLayer.add?.(this.tempLinkNode);\n } else if (this.tempLinkNode.setAttrs) {\n this.tempLinkNode.setAttrs({ points: flatPoints });\n }\n this.drawOverlays();\n }\n\n renderPortPlaceholder(port: PortData): void {\n const shapeId = port.shapeId;\n if (!this.tempPortNode || this.tempPortShapeId !== shapeId) {\n this.tempPortNode?.destroy?.();\n const node = this.nodeFactory.createPortNode(port);\n if (node.setAttrs) {\n node.setAttrs({ listening: false, opacity: 0.6, name: 'port-placeholder' });\n }\n this.tempPortNode = node;\n this.tempPortShapeId = shapeId;\n this.overlayLayer.add?.(node);\n } else {\n this.updatePosition(this.tempPortNode, port.position);\n if (this.tempPortNode.setAttrs) {\n this.tempPortNode.setAttrs({ opacity: 0.6 });\n }\n }\n this.drawOverlays();\n }\n\n clearPortPlaceholder(): void {\n this.tempPortNode?.destroy?.();\n this.tempPortNode = null;\n this.tempPortShapeId = undefined;\n this.drawOverlays();\n }\n\n clearTempLink(): void {\n this.tempLinkNode?.destroy?.();\n this.tempLinkNode = null;\n this.drawOverlays();\n }\n\n renderMarquee(rect: { x: number; y: number; width: number; height: number }): void {\n if (!this.marqueeNode) {\n this.marqueeNode = this.nodeFactory.createMarqueeNode({\n id: 'marquee',\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n });\n this.overlayLayer.add?.(this.marqueeNode);\n } else if (this.marqueeNode.setAttrs) {\n this.marqueeNode.setAttrs(rect);\n }\n this.drawOverlays();\n }\n\n clearMarquee(): void {\n this.marqueeNode?.destroy?.();\n this.marqueeNode = null;\n this.drawOverlays();\n }\n\n createOverlayShape(config: OverlayShapeConfig): OverlayShapeHandle {\n const id = `overlay-${this.overlayId++}`;\n const record = this.createOverlayRecord(id, config);\n this.overlayShapes.set(id, record);\n this.drawOverlays();\n\n return {\n update: (next) => {\n this.updateOverlayRecord(id, next);\n },\n destroy: () => {\n this.destroyOverlayRecord(id);\n },\n };\n }\n\n destroy(): void {\n this.layers.destroy();\n this.elementNodes.clear();\n this.portNodes.clear();\n this.linkNodes.clear();\n this.textNodes.clear();\n this.resizeHandleNodes.clear();\n this.linkHandleNodes.clear();\n this.tempLinkNode = null;\n this.tempPortNode?.destroy?.();\n this.tempPortNode = null;\n this.tempPortShapeId = undefined;\n this.marqueeNode = null;\n this.overlayShapes.forEach((record) => record.node.destroy?.());\n this.overlayShapes.clear();\n }\n\n private drawOverlays(): void {\n this.layers.markDirty('overlays');\n this.layers.drawDirty();\n }\n\n private createOverlayRecord(\n id: string,\n config: OverlayShapeConfig,\n ): { node: KonvaNodeLike; shapeId: string; config: OverlayShapeConfig } {\n const model: ElementData = {\n id,\n position: { ...config.position },\n size: { ...config.size },\n shapeId: config.shapeId,\n style: config.style,\n anchorCenter: config.anchorCenter,\n };\n const node = this.nodeFactory.createElementNode(model);\n this.overlayLayer.add?.(node);\n this.applyOverlayConfig(node, model, config);\n return { node, shapeId: config.shapeId, config: { ...config } };\n }\n\n private updateOverlayRecord(id: string, config: OverlayShapeConfig): void {\n const record = this.overlayShapes.get(id);\n if (!record) return;\n const shouldRecreate = record.shapeId !== config.shapeId;\n if (shouldRecreate) {\n record.node.destroy?.();\n const nextRecord = this.createOverlayRecord(id, config);\n this.overlayShapes.set(id, nextRecord);\n this.drawOverlays();\n return;\n }\n\n const model: ElementData = {\n id,\n position: { ...config.position },\n size: { ...config.size },\n shapeId: config.shapeId,\n style: config.style,\n anchorCenter: config.anchorCenter,\n };\n this.applyOverlayConfig(record.node, model, config);\n record.config = { ...config };\n this.drawOverlays();\n }\n\n private destroyOverlayRecord(id: string): void {\n const record = this.overlayShapes.get(id);\n if (!record) return;\n record.node.destroy?.();\n this.overlayShapes.delete(id);\n this.drawOverlays();\n }\n\n private applyOverlayConfig(node: KonvaNodeLike, model: ElementData, config: OverlayShapeConfig): void {\n const anchorCenter = config.anchorCenter ?? false;\n const anchoredPosition = anchorCenter\n ? {\n x: model.position.x + model.size.width / 2,\n y: model.position.y + model.size.height / 2,\n }\n : model.position;\n this.updatePosition(node, anchoredPosition);\n this.updateSize(node, model.size, { anchorCenter });\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\n node.setAttrs({ __model: model });\n }\n if (node.setAttrs) {\n node.setAttrs({\n ...(config.style ?? {}),\n listening: false,\n name: 'overlay-shape',\n });\n }\n }\n\n private syncElements(model: DiagramModel): void {\n const elements = Array.from(model.elements.values()).map((element, index) => ({\n element,\n depth: this.getElementDepth(model, element),\n order: index,\n }));\n elements\n .sort((a, b) => a.depth - b.depth || a.order - b.order)\n .forEach(({ element, depth }) => {\n const data = element.toData();\n let node = this.elementNodes.get(element.id);\n if (!node) {\n node = this.nodeFactory.createElementNode(data);\n this.elementNodes.set(element.id, node);\n this.layers.getLayer('elements')?.add?.(node);\n }\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\n node.setAttrs({ __model: data });\n }\n const position = model.getElementWorldPosition(element.id) ?? element.position;\n const anchoredPosition = element.anchorCenter\n ? {\n x: position.x + element.size.width / 2,\n y: position.y + element.size.height / 2,\n }\n : position;\n this.updatePosition(node, anchoredPosition);\n this.updateSize(node, element.size, { anchorCenter: element.anchorCenter ?? false });\n if (node.setAttrs) {\n node.setAttrs({ __depth: depth });\n }\n });\n\n elements.forEach(({ element }) => {\n const node = this.elementNodes.get(element.id);\n node?.moveToTop?.();\n });\n\n Array.from(this.elementNodes.keys()).forEach((id) => {\n if (!model.elements.has(id)) {\n const node = this.elementNodes.get(id);\n node?.destroy?.();\n this.elementNodes.delete(id);\n this.layers.markDirty('elements');\n }\n });\n this.layers.markDirty('elements');\n }\n\n private getElementDepth(model: DiagramModel, element: ElementModel): number {\n let depth = 0;\n let current: ElementModel | undefined = element;\n while (current?.parentId) {\n const parent = model.getElement(current.parentId);\n if (!parent) break;\n depth += 1;\n current = parent;\n }\n return depth;\n }\n\n private syncPorts(model: DiagramModel): void {\n const ports = Array.from(model.ports.values());\n ports.forEach((port) => {\n const data = port.toData();\n let node = this.portNodes.get(port.id);\n if (!node) {\n node = this.nodeFactory.createPortNode(data);\n this.portNodes.set(port.id, node);\n this.layers.getLayer('ports')?.add?.(node);\n }\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\n node.setAttrs({ __model: data });\n }\n const position = model.getPortWorldPosition(port.id) ?? port.position;\n this.updatePosition(node, position);\n });\n\n Array.from(this.portNodes.keys()).forEach((id) => {\n if (!model.ports.has(id)) {\n const node = this.portNodes.get(id);\n node?.destroy?.();\n this.portNodes.delete(id);\n this.layers.markDirty('ports');\n }\n });\n this.layers.markDirty('ports');\n }\n\n private syncLinks(model: DiagramModel): void {\n const links = Array.from(model.links.values());\n links.forEach((link) => {\n let node = this.linkNodes.get(link.id);\n if (!node) {\n node = this.nodeFactory.createLinkNode(link.toData());\n this.linkNodes.set(link.id, node);\n this.layers.getLayer('links')?.add?.(node);\n }\n this.updateLine(node, link.toData());\n });\n\n Array.from(this.linkNodes.keys()).forEach((id) => {\n if (!model.links.has(id)) {\n const node = this.linkNodes.get(id);\n node?.destroy?.();\n this.linkNodes.delete(id);\n this.layers.markDirty('links');\n }\n });\n this.layers.markDirty('links');\n }\n\n private syncTexts(model: DiagramModel): void {\n const texts = Array.from(model.texts.values());\n texts.forEach((text) => {\n let node = this.textNodes.get(text.id);\n if (!node) {\n node = this.nodeFactory.createTextNode(text.toData());\n this.textNodes.set(text.id, node);\n this.layers.getLayer('texts')?.add?.(node);\n }\n const position = model.getTextWorldPosition(text.id) ?? text.position;\n this.updatePosition(node, position);\n if (node.setAttrs) {\n const style = text.style as Record<string, unknown> | undefined;\n const baseFill =\n (style?.fill as string | undefined) ??\n this.getNodeAttr<string>(node, '__baseFill') ??\n this.getNodeAttr<string>(node, 'fill') ??\n 'black';\n const fill = this.selectedIds.has(text.id) ? '#ff7a00' : baseFill;\n node.setAttrs({\n text: text.content,\n ...(style ?? {}),\n fill,\n __baseFill: baseFill,\n });\n }\n });\n\n Array.from(this.textNodes.keys()).forEach((id) => {\n if (!model.texts.has(id)) {\n const node = this.textNodes.get(id);\n node?.destroy?.();\n this.textNodes.delete(id);\n this.layers.markDirty('texts');\n }\n });\n this.layers.markDirty('texts');\n }\n\n private updatePosition(node: KonvaNodeLike, position: Point): void {\n if (node.position) {\n node.position({ x: position.x, y: position.y });\n return;\n }\n if (node.setAttrs) {\n node.setAttrs({ x: position.x, y: position.y });\n }\n }\n\n private getNodeAttr<T>(node: KonvaNodeLike, key: string): T | undefined {\n if (node.getAttr) return node.getAttr(key) as T;\n if (node.attrs && Object.prototype.hasOwnProperty.call(node.attrs, key)) {\n return node.attrs[key] as T;\n }\n return undefined;\n }\n\n private updateSize(\n node: KonvaNodeLike,\n size: { width: number; height: number },\n options?: { anchorCenter?: boolean },\n ): void {\n if (!node.setAttrs) return;\n const attrs: Record<string, unknown> = { width: size.width, height: size.height };\n const shapeKind = this.getNodeAttr<string>(node, 'shapeKind');\n const anchorCenter = options?.anchorCenter ?? false;\n const autoOffsetX = this.getNodeAttr<boolean>(node, '__autoOffsetX');\n const autoOffsetY = this.getNodeAttr<boolean>(node, '__autoOffsetY');\n const updateOffsetX = autoOffsetX !== false;\n const updateOffsetY = autoOffsetY !== false;\n\n if (shapeKind === 'circle') {\n const autoRadius = this.getNodeAttr<boolean>(node, '__autoRadius');\n const computedRadius = Math.min(size.width, size.height) / 2;\n const resolvedRadius =\n autoRadius === false\n ? (this.getNodeAttr<number>(node, 'radius') ?? computedRadius)\n : computedRadius;\n if (autoRadius !== false) {\n attrs.radius = computedRadius;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? 0 : -resolvedRadius;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? 0 : -resolvedRadius;\n }\n } else if (shapeKind === 'diamond' || shapeKind === 'triangle') {\n const autoPoints = this.getNodeAttr<boolean>(node, '__autoPoints');\n if (autoPoints !== false) {\n attrs.points =\n shapeKind === 'diamond'\n ? [size.width / 2, 0, size.width, size.height / 2, size.width / 2, size.height, 0, size.height / 2]\n : [size.width / 2, 0, size.width, size.height, 0, size.height];\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? size.width / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? size.height / 2 : 0;\n }\n } else if (shapeKind === 'rect') {\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? size.width / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? size.height / 2 : 0;\n }\n } else if (shapeKind === 'svg-path') {\n const baseWidth = this.getNodeAttr<number>(node, '__pathBaseWidth') ?? size.width;\n const baseHeight = this.getNodeAttr<number>(node, '__pathBaseHeight') ?? size.height;\n if (baseWidth) {\n attrs.scaleX = size.width / baseWidth;\n }\n if (baseHeight) {\n attrs.scaleY = size.height / baseHeight;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? baseWidth / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? baseHeight / 2 : 0;\n }\n }\n\n node.setAttrs(attrs);\n }\n\n private updateLine(node: KonvaNodeLike, link: LinkData): void {\n if (!node.setAttrs) return;\n const flatPoints: number[] = [];\n link.points.forEach((point) => {\n flatPoints.push(point.x, point.y);\n });\n node.setAttrs({ points: flatPoints });\n }\n}\n","import { Point } from '../../api/types';\n\nexport type HitResult = {\n id: string;\n type: 'element' | 'port' | 'link' | 'text' | 'resize-handle' | 'link-handle' | 'none';\n depth?: number;\n};\n\nexport type HitTestResolver = (point: Point) => HitResult | null;\n\nexport default class KonvaHitTester {\n private resolver?: HitTestResolver;\n\n constructor(resolver?: HitTestResolver) {\n this.resolver = resolver;\n }\n\n hitTest(point: Point): HitResult | null {\n if (!this.resolver) return null;\n return this.resolver(point);\n }\n}\r\n","import { EnginePointerInfo, LinkData, Point, PortData } from '../../api/types';\nimport DiagramEngine from '../../engine/DiagramEngine';\nimport KonvaHitTester, { HitResult } from './KonvaHitTester';\nimport { KonvaStageLike } from './KonvaRenderer';\nimport { createId } from '../../utils/ids';\nimport { rectContainsPoint, rectsIntersect } from '../../utils/geometry';\n\nexport type InteractionConfig = {\n stage?: KonvaStageLike;\n hitTester?: KonvaHitTester;\n panKey?: PanKey;\n renderer?: {\n renderResizeHandles: (elementId: string, position: Point, size: { width: number; height: number }) => void;\n clearResizeHandles: () => void;\n renderLinkHandles: (linkId: string, points: Point[]) => void;\n clearLinkHandles: () => void;\n renderTempLink: (points: Point[]) => void;\n clearTempLink: () => void;\n renderPortPlaceholder?: (port: PortData) => void;\n clearPortPlaceholder?: () => void;\n renderMarquee: (rect: { x: number; y: number; width: number; height: number }) => void;\n clearMarquee: () => void;\n };\n};\n\nexport type PanKey = 'Control' | 'Shift' | 'Alt' | 'Meta';\n\ntype DragState =\n | {\n mode: 'move';\n type: 'element';\n id: string;\n offset: Point;\n start: Point;\n anchor: 'top-left' | 'center';\n startParentId: string | null;\n selectionIds: string[];\n isMulti: boolean;\n hasMoved: boolean;\n }\n | { mode: 'move'; type: 'port' | 'text'; id: string; offset: Point }\n | {\n mode: 'link-drag';\n sourcePortId: string;\n sourceElementId: string;\n start: Point;\n current: Point;\n isMulti: boolean;\n hasMoved: boolean;\n }\n | { mode: 'link-handle'; linkId: string; pointIndex: number }\n | { mode: 'link-segment'; linkId: string; start: Point; hasMoved: boolean; pointIndex?: number }\n | {\n mode: 'resize';\n elementId: string;\n handle: 'nw' | 'ne' | 'sw' | 'se';\n origin: {\n position: Point;\n worldPosition: Point;\n size: { width: number; height: number };\n parentId: string | null;\n };\n }\n | { mode: 'marquee'; start: Point; isMulti: boolean; hasMoved: boolean }\n | { mode: 'pan'; start: Point; origin: Point };\n\nexport default class KonvaInteraction {\n private engine: DiagramEngine;\n private stage?: KonvaStageLike;\n private hitTester: KonvaHitTester;\n private renderer?: InteractionConfig['renderer'];\n private linkDragContext: { sourcePortId: string; sourceElementId: string } | null = null;\n private bound = false;\n private handlers: Array<[string, (...args: unknown[]) => void]> = [];\n private windowHandlers: Array<[keyof WindowEventMap, (event: Event) => void]> = [];\n private previousWindowKeyDown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => unknown) | null = null;\n private dragState: DragState | null = null;\n private selectionUnsub: (() => void) | null = null;\n private changeUnsub: (() => void) | null = null;\n private zoom = 1;\n private pan: Point = { x: 0, y: 0 };\n private textEditor: HTMLTextAreaElement | null = null;\n private readonly dragThreshold = 4;\n private readonly panSpeed = 0.5;\n private panKey: PanKey;\n\n constructor(engine: DiagramEngine, config: InteractionConfig = {}) {\n this.engine = engine;\n this.stage = config.stage;\n this.hitTester = config.hitTester ?? new KonvaHitTester();\n this.renderer = config.renderer;\n this.panKey = config.panKey ?? 'Control';\n }\n\n private buildPointerInfo(world: Point, nativeEvent?: MouseEvent | PointerEvent | null): EnginePointerInfo {\n const evt = nativeEvent ?? undefined;\n const client = evt ? { x: evt.clientX, y: evt.clientY } : { x: world.x, y: world.y };\n const pointerType =\n evt && 'pointerType' in evt ? (evt as PointerEvent).pointerType : undefined;\n return {\n client,\n world: { ...world },\n button: evt?.button,\n buttons: (evt as MouseEvent | PointerEvent | undefined)?.buttons,\n altKey: evt?.altKey,\n ctrlKey: evt?.ctrlKey,\n metaKey: evt?.metaKey,\n shiftKey: evt?.shiftKey,\n pointerType,\n };\n }\n\n bind(stage?: KonvaStageLike): void {\n this.stage = stage ?? this.stage;\n if (!this.stage || !this.stage.on || this.bound) return;\n\n const pointerDown = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const point = this.getPointerPosition();\n if (!point) return;\n if (this.textEditor) return;\n const hit = this.resolveHit(point);\n const nativeEvent = event?.evt;\n const isMulti = Boolean(nativeEvent && (nativeEvent.ctrlKey || nativeEvent.metaKey || nativeEvent.shiftKey));\n const isPanGesture = Boolean(nativeEvent && this.isPanKeyPressed(nativeEvent) && nativeEvent.button === 0);\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\n\n if (isPanGesture) {\n this.dragState = { mode: 'pan', start: point, origin: { ...this.pan } };\n this.setCursor('grabbing');\n return;\n }\n\n if (hit?.type === 'resize-handle') {\n const parsed = this.parseResizeHandle(hit.id);\n if (parsed) {\n const element = this.getElementById(parsed.elementId);\n if (element) {\n const worldPosition = this.engine.getElementWorldPosition(parsed.elementId) ?? element.position;\n this.dragState = {\n mode: 'resize',\n elementId: parsed.elementId,\n handle: parsed.handle,\n origin: {\n position: { ...element.position },\n worldPosition,\n size: { ...element.size },\n parentId: element.parentId ?? null,\n },\n };\n this.setCursor(this.getResizeCursor(parsed.handle));\n }\n }\n return;\n }\n\n if (hit?.type === 'link-handle') {\n const parsed = this.parseLinkHandle(hit.id);\n if (parsed) {\n this.dragState = { mode: 'link-handle', linkId: parsed.linkId, pointIndex: parsed.pointIndex };\n this.setCursor('move');\n }\n return;\n }\n\n if (!hit || hit.type === 'none') {\n this.dragState = { mode: 'marquee', start: point, isMulti, hasMoved: false };\n this.renderer?.renderMarquee({ x: point.x, y: point.y, width: 0, height: 0 });\n return;\n }\n\n if (hit.type === 'port') {\n const elementId = this.engine.getPortElementId(hit.id);\n if (!elementId) return;\n this.engine.emitPortMouseDown({ portId: hit.id, elementId, pointer: pointerInfo });\n const isSelected = this.engine.getSelection().includes(hit.id);\n if (isSelected) {\n const base = this.engine.getPortWorldPosition(hit.id);\n if (base) {\n this.dragState = {\n mode: 'move',\n type: 'port',\n id: hit.id,\n offset: { x: point.x - base.x, y: point.y - base.y },\n };\n this.setCursor('grabbing');\n }\n } else {\n this.dragState = {\n mode: 'link-drag',\n sourcePortId: hit.id,\n sourceElementId: elementId,\n start: point,\n current: point,\n isMulti,\n hasMoved: false,\n };\n this.linkDragContext = { sourcePortId: hit.id, sourceElementId: elementId };\n this.engine.emitElementLinkStarted({ sourcePortId: hit.id, sourceElementId: elementId, startWorld: { ...point } });\n this.setCursor('crosshair');\n }\n return;\n }\n\n this.handleSelection(hit, isMulti);\n if (hit.type === 'link' && !isMulti) {\n this.dragState = { mode: 'link-segment', linkId: hit.id, start: point, hasMoved: false };\n this.setCursor('move');\n return;\n }\n if (hit.type === 'text') {\n const base = this.engine.getTextWorldPosition(hit.id);\n if (base) {\n this.dragState = {\n mode: 'move',\n type: 'text',\n id: hit.id,\n offset: { x: point.x - base.x, y: point.y - base.y },\n };\n this.setCursor('grabbing');\n }\n return;\n }\n if (hit.type === 'element') {\n const baseTopLeft = this.engine.getElementWorldPosition(hit.id);\n if (baseTopLeft) {\n const element = this.getElementById(hit.id);\n if (!element) return;\n const anchor = element.anchorCenter ? 'center' : 'top-left';\n const base = element.anchorCenter\n ? {\n x: baseTopLeft.x + element.size.width / 2,\n y: baseTopLeft.y + element.size.height / 2,\n }\n : baseTopLeft;\n this.dragState = {\n mode: 'move',\n type: hit.type,\n id: hit.id,\n offset: { x: point.x - base.x, y: point.y - base.y },\n start: { ...base },\n anchor,\n startParentId: element.parentId ?? null,\n selectionIds: this.engine.getSelection(),\n isMulti,\n hasMoved: false,\n };\n this.setCursor('grabbing');\n }\n }\n };\n\n const pointerMove = () => {\n const point = this.getPointerPosition();\n if (!point) return;\n if (!this.dragState) {\n this.updateHoverCursor(point);\n return;\n }\n if (this.dragState.mode === 'move') {\n const target = {\n x: point.x - this.dragState.offset.x,\n y: point.y - this.dragState.offset.y,\n };\n if (this.dragState.type === 'element') {\n const dx = target.x - this.dragState.start.x;\n const dy = target.y - this.dragState.start.y;\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\n this.engine.moveElementTo(this.dragState.id, target.x, target.y);\n if (this.renderer && this.engine.getSelection().includes(this.dragState.id)) {\n const element = this.getElementById(this.dragState.id);\n if (element) {\n const position = this.engine.getElementWorldPosition(this.dragState.id) ?? element.position;\n this.renderer.renderResizeHandles(this.dragState.id, position, element.size);\n }\n }\n } else if (this.dragState.type === 'port') {\n const constrained = this.applyPortConstraints(this.dragState.id, target);\n this.engine.movePortTo(this.dragState.id, constrained.x, constrained.y);\n } else {\n this.engine.moveTextTo(this.dragState.id, target.x, target.y);\n }\n } else if (this.dragState.mode === 'link-drag') {\n const dx = point.x - this.dragState.start.x;\n const dy = point.y - this.dragState.start.y;\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\n this.dragState.current = point;\n if (this.dragState.hasMoved) {\n const source = this.engine.getPortWorldPosition(this.dragState.sourcePortId);\n if (source) {\n this.renderer?.renderTempLink([source, point]);\n }\n const hit = this.resolveHit(point);\n if (hit?.type === 'element') {\n const placeholder = this.createPlaceholderPort(hit.id, point, this.dragState.sourcePortId);\n if (placeholder) {\n this.renderer?.renderPortPlaceholder?.(placeholder);\n }\n } else {\n this.renderer?.clearPortPlaceholder?.();\n }\n } else {\n this.renderer?.clearPortPlaceholder?.();\n }\n } else if (this.dragState.mode === 'link-handle') {\n const linkState = this.dragState;\n const link = this.getLinkById(linkState.linkId);\n if (!link) return;\n const points = link.points.map((p, index) => (index === linkState.pointIndex ? point : p));\n this.engine.updateLinkPoints(link.id, points);\n this.renderer?.renderLinkHandles(link.id, points);\n } else if (this.dragState.mode === 'link-segment') {\n const linkState = this.dragState;\n const link = this.getLinkById(linkState.linkId);\n if (!link) return;\n const dx = point.x - linkState.start.x;\n const dy = point.y - linkState.start.y;\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\n linkState.hasMoved = linkState.hasMoved || moved;\n if (!linkState.hasMoved) return;\n\n let points = link.points.map((p) => ({ ...p }));\n if (linkState.pointIndex === undefined) {\n const nearest = this.findNearestSegmentPoint(points, point);\n if (!nearest) return;\n points = [\n ...points.slice(0, nearest.index + 1),\n { ...nearest.point },\n ...points.slice(nearest.index + 1),\n ];\n linkState.pointIndex = nearest.index + 1;\n }\n points = points.map((p, index) => (index === linkState.pointIndex ? point : p));\n this.engine.updateLinkPoints(link.id, points);\n this.renderer?.renderLinkHandles(link.id, points);\n } else if (this.dragState.mode === 'resize') {\n this.handleResizeDrag(this.dragState, point);\n } else if (this.dragState.mode === 'marquee') {\n const rect = this.normalizeRect(this.dragState.start, point);\n const moved = rect.width >= this.dragThreshold || rect.height >= this.dragThreshold;\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\n this.renderer?.renderMarquee(rect);\n } else if (this.dragState.mode === 'pan') {\n const dx = point.x - this.dragState.start.x;\n const dy = point.y - this.dragState.start.y;\n this.pan = {\n x: this.dragState.origin.x - dx * this.panSpeed,\n y: this.dragState.origin.y - dy * this.panSpeed,\n };\n this.applyStageTransform();\n this.engine.setViewport(this.pan, this.zoom);\n }\n };\n\n const pointerUp = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const nativeEvent = event?.evt;\n const pointerPoint = this.getPointerPosition();\n\n if (this.dragState?.mode === 'link-drag') {\n const point = pointerPoint;\n const pointerInfo = this.buildPointerInfo(point ?? this.dragState.start, nativeEvent);\n const sourcePortPayload = {\n portId: this.dragState.sourcePortId,\n elementId: this.dragState.sourceElementId,\n pointer: pointerInfo,\n };\n this.engine.emitPortMouseUp(sourcePortPayload);\n\n let createdLinkId: string | null = null;\n let targetPortId: string | null = null;\n let targetElementId: string | null = null;\n\n if (!this.dragState.hasMoved) {\n this.handleSelection({ id: this.dragState.sourcePortId, type: 'port' }, this.dragState.isMulti);\n } else {\n const hit = point ? this.resolveHit(point) : null;\n if (hit && hit.type === 'port' && hit.id !== this.dragState.sourcePortId) {\n targetPortId = hit.id;\n const targetElement = this.engine.getPortElementId(hit.id);\n targetElementId = targetElement;\n const cancelledByHost =\n targetElement !== null &&\n this.engine.emitElementLinkConnecting({\n sourcePortId: this.dragState.sourcePortId,\n sourceElementId: this.dragState.sourceElementId,\n targetPortId: hit.id,\n targetElementId: targetElement,\n cancel: () => {},\n cancelled: false,\n });\n if (!cancelledByHost && targetElement) {\n createdLinkId = createId();\n this.engine.addLink({\n id: createdLinkId,\n sourcePortId: this.dragState.sourcePortId,\n targetPortId: hit.id,\n points: [],\n });\n }\n } else if (hit && hit.type === 'element' && point) {\n targetElementId = hit.id;\n const createdPortId = this.createPortForLink(hit.id, point, this.dragState.sourcePortId);\n if (createdPortId) {\n targetPortId = createdPortId;\n createdLinkId = createId();\n this.engine.addLink({\n id: createdLinkId,\n sourcePortId: this.dragState.sourcePortId,\n targetPortId: createdPortId,\n points: [],\n });\n }\n }\n }\n\n this.engine.emitElementLinkEnded({\n sourcePortId: this.dragState.sourcePortId,\n sourceElementId: this.dragState.sourceElementId,\n linkId: createdLinkId ?? undefined,\n targetPortId: targetPortId ?? undefined,\n targetElementId: targetElementId ?? undefined,\n cancelled: createdLinkId === null,\n });\n\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n }\n\n if (this.dragState?.mode === 'marquee') {\n const point = pointerPoint ?? this.dragState.start;\n const rect = this.normalizeRect(this.dragState.start, point);\n this.applyMarqueeSelection(rect, this.dragState.isMulti);\n this.renderer?.clearMarquee();\n if (!this.dragState.hasMoved) {\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\n this.engine.emitPaperClick(pointerInfo);\n }\n }\n\n if (this.dragState?.mode === 'move' && this.dragState.type === 'element') {\n const element = this.getElementById(this.dragState.id);\n if (element) {\n const endTopLeft = this.engine.getElementWorldPosition(this.dragState.id) ?? element.position;\n const endWorld =\n this.dragState.anchor === 'center'\n ? {\n x: endTopLeft.x + element.size.width / 2,\n y: endTopLeft.y + element.size.height / 2,\n }\n : endTopLeft;\n const delta = {\n x: endWorld.x - this.dragState.start.x,\n y: endWorld.y - this.dragState.start.y,\n };\n const moved = this.dragState.hasMoved || Math.hypot(delta.x, delta.y) > 0;\n if (moved) {\n this.engine.emitElementDrop({\n elementId: this.dragState.id,\n startWorld: { ...this.dragState.start },\n endWorld,\n delta,\n startParentId: this.dragState.startParentId,\n selectionIds: [...this.dragState.selectionIds],\n anchor: this.dragState.anchor,\n });\n } else {\n const pointerInfo = this.buildPointerInfo(pointerPoint ?? this.dragState.start, nativeEvent);\n this.engine.emitElementClick(this.dragState.id, pointerInfo, this.dragState.isMulti);\n }\n }\n }\n\n if (this.dragState?.mode === 'move' && this.dragState.type === 'port') {\n const elementId = this.engine.getPortElementId(this.dragState.id);\n if (elementId) {\n const pointerInfo = this.buildPointerInfo(pointerPoint ?? this.engine.getPortWorldPosition(this.dragState.id) ?? { x: 0, y: 0 }, nativeEvent);\n this.engine.emitPortMouseUp({ portId: this.dragState.id, elementId, pointer: pointerInfo });\n }\n }\n\n this.dragState = null;\n this.linkDragContext = null;\n this.setCursor('default');\n };\n\n const downEvents = 'mousedown touchstart pointerdown';\n const moveEvents = 'mousemove touchmove pointermove';\n const upEvents = 'mouseup touchend pointerup';\n\n this.stage.on(downEvents, pointerDown);\n this.handlers.push([downEvents, pointerDown]);\n this.stage.on(moveEvents, pointerMove);\n this.handlers.push([moveEvents, pointerMove]);\n this.stage.on(upEvents, pointerUp);\n this.handlers.push([upEvents, pointerUp]);\n\n const doubleClick = () => {\n const point = this.getPointerPosition();\n if (!point) return;\n const hit = this.resolveHit(point);\n if (!hit || hit.type !== 'text') return;\n this.startTextEdit(hit.id);\n };\n\n this.stage.on('dblclick dbltap', doubleClick);\n this.handlers.push(['dblclick dbltap', doubleClick]);\n\n const keyDown = (event: Event) => {\n const keyEvent = event as KeyboardEvent;\n if (this.isEditableTarget(keyEvent.target)) return;\n if (keyEvent.key === 'Escape') {\n this.cancelLinkDrag();\n return;\n }\n if (keyEvent.key === 'Delete' || keyEvent.key === 'Backspace') {\n this.engine.deleteSelection();\n }\n };\n\n const wheel = (...args: unknown[]) => {\n const event = args[0] as { evt?: WheelEvent } | undefined;\n const nativeEvent = event?.evt;\n if (!nativeEvent) return;\n nativeEvent.preventDefault?.();\n const delta = nativeEvent.deltaY;\n const direction = delta > 0 ? -1 : 1;\n const factor = 1 + direction * 0.05;\n this.zoom = Math.max(0.2, Math.min(3, this.zoom * factor));\n this.applyStageTransform();\n this.engine.setViewport(this.pan, this.zoom);\n };\n\n window.addEventListener('keydown', keyDown);\n this.windowHandlers.push(['keydown', keyDown]);\n this.previousWindowKeyDown = window.onkeydown;\n window.onkeydown = (event: KeyboardEvent) => {\n keyDown(event);\n this.previousWindowKeyDown?.call(window, event);\n };\n this.stage.on('wheel', wheel);\n this.handlers.push(['wheel', wheel]);\n this.selectionUnsub = this.engine.on('selection', () => this.updateSelectionOverlays());\n this.changeUnsub = this.engine.on('change', (event) => {\n this.updateSelectionOverlays();\n this.applyViewportPatch(event.patches);\n });\n this.bound = true;\n }\n\n dispose(): void {\n if (this.stage && this.stage.off) {\n this.handlers.forEach(([event, handler]) => this.stage?.off?.(event, handler));\n }\n this.handlers = [];\n this.windowHandlers.forEach(([event, handler]) => window.removeEventListener(event, handler));\n this.windowHandlers = [];\n if (this.previousWindowKeyDown !== null) {\n window.onkeydown = this.previousWindowKeyDown;\n this.previousWindowKeyDown = null;\n }\n this.selectionUnsub?.();\n this.selectionUnsub = null;\n this.changeUnsub?.();\n this.changeUnsub = null;\n this.disposeTextEditor();\n this.bound = false;\n }\n\n private handleSelection(hit: HitResult | null, isMulti: boolean): void {\n if (!hit || hit.type === 'none') {\n this.engine.setSelection([]);\n return;\n }\n if (hit.type === 'resize-handle' || hit.type === 'link-handle') {\n return;\n }\n if (isMulti) {\n this.engine.toggleSelection(hit.id);\n return;\n }\n this.engine.setSelection([hit.id]);\n }\n\n private getPointerPosition(): Point | null {\n const stageAny = this.stage as unknown as {\n getPointerPosition?: () => { x: number; y: number } | null;\n getAbsoluteTransform?: () => { copy: () => { invert: () => void; point: (pos: Point) => Point } };\n };\n const pos = stageAny?.getPointerPosition?.();\n if (!pos) return null;\n if (stageAny.getAbsoluteTransform) {\n const transform = stageAny.getAbsoluteTransform().copy();\n transform.invert();\n const point = transform.point(pos);\n return { x: point.x, y: point.y };\n }\n return { x: pos.x, y: pos.y };\n }\n\n private getStageContainer(): HTMLDivElement | null {\n const stageAny = this.stage as unknown as {\n container?: HTMLDivElement | (() => HTMLDivElement);\n };\n const container =\n typeof stageAny?.container === 'function' ? stageAny.container() : stageAny?.container;\n return container ?? null;\n }\n\n private normalizeHit(hit: HitResult | null): HitResult | null {\n if (!hit || hit.type === 'none') return null;\n if (\n hit.type === 'port' ||\n hit.type === 'link' ||\n hit.type === 'text' ||\n hit.type === 'resize-handle' ||\n hit.type === 'link-handle'\n ) {\n return hit;\n }\n return { ...hit, type: 'element' };\n }\n\n private resolveHit(point: Point): HitResult | null {\n const primary = this.normalizeHit(this.hitTester.hitTest(point));\n const hits: HitResult[] = primary ? [primary] : [];\n const seen = new Set(hits.map((hit) => `${hit.type}:${hit.id}`));\n\n const addHit = (hit: HitResult | null) => {\n if (!hit) return;\n const key = `${hit.type}:${hit.id}`;\n if (seen.has(key)) return;\n seen.add(key);\n hits.push(hit);\n };\n\n addHit(this.findLinkHit(point));\n addHit(this.findElementHit(point));\n\n if (hits.length === 0) return null;\n\n const priority: HitResult['type'][] = ['resize-handle', 'link-handle', 'port', 'link', 'text', 'element'];\n for (let i = 0; i < priority.length; i += 1) {\n const candidates = hits.filter((hit) => hit.type === priority[i]);\n if (candidates.length === 0) continue;\n if (priority[i] === 'element') {\n return candidates.reduce((deepest, current) => {\n const deepestDepth = deepest.depth ?? -1;\n const currentDepth = current.depth ?? -1;\n if (currentDepth > deepestDepth) return current;\n if (currentDepth < deepestDepth) return deepest;\n return current; // favor later hits when depths are equal\n }, candidates[0]);\n }\n return candidates[0];\n }\n\n return hits[0];\n }\n\n private findElementHit(point: Point): HitResult | null {\n const state = this.engine.getState();\n if (!state.elements.length) return null;\n const byId = new Map(state.elements.map((element) => [element.id, element]));\n let best: HitResult | null = null;\n\n state.elements.forEach((element) => {\n const world = this.engine.getElementWorldPosition(element.id) ?? element.position;\n const rect = { x: world.x, y: world.y, width: element.size.width, height: element.size.height };\n if (!rectContainsPoint(rect, point)) return;\n const depth = this.computeElementDepth(element.id, byId);\n if (!best || depth > (best.depth ?? -1)) {\n best = { id: element.id, type: 'element', depth };\n }\n });\n\n return best;\n }\n\n private computeElementDepth(id: string, byId: Map<string, { parentId?: string | null }>): number {\n let depth = 0;\n let current = byId.get(id);\n while (current?.parentId) {\n depth += 1;\n current = byId.get(current.parentId);\n }\n return depth;\n }\n\n private findLinkHit(point: Point): HitResult | null {\n const links = this.engine.getState().links;\n if (!links.length) return null;\n\n let bestId: string | null = null;\n let bestDistance = Number.POSITIVE_INFINITY;\n\n links.forEach((link) => {\n if (link.points.length < 2) return;\n const tolerance = ((link.style as { hitStrokeWidth?: number } | undefined)?.hitStrokeWidth ?? 15) / 2;\n for (let i = 1; i < link.points.length; i += 1) {\n const projected = this.projectPointOnSegment(point, link.points[i - 1], link.points[i]);\n if (projected.distance > tolerance) continue;\n if (projected.distance < bestDistance) {\n bestDistance = projected.distance;\n bestId = link.id;\n }\n }\n });\n\n return bestId ? { id: bestId, type: 'link' as const } : null;\n }\n\n private setCursor(cursor: string): void {\n const stageAny = this.stage as unknown as {\n container?: HTMLDivElement | (() => HTMLDivElement);\n };\n const container =\n typeof stageAny?.container === 'function' ? stageAny.container() : stageAny?.container;\n if (container && container.style) {\n container.style.cursor = cursor;\n }\n }\n\n private updateHoverCursor(point: Point): void {\n const hit = this.resolveHit(point);\n if (!hit || hit.type === 'none') {\n this.setCursor('default');\n return;\n }\n if (hit.type === 'resize-handle') {\n const parsed = this.parseResizeHandle(hit.id);\n this.setCursor(parsed ? this.getResizeCursor(parsed.handle) : 'nwse-resize');\n return;\n }\n if (hit.type === 'link-handle') {\n this.setCursor('move');\n return;\n }\n if (hit.type === 'port') {\n const isSelected = this.engine.getSelection().includes(hit.id);\n this.setCursor(isSelected ? 'grab' : 'crosshair');\n return;\n }\n if (hit.type === 'link') {\n this.setCursor('pointer');\n return;\n }\n this.setCursor('grab');\n }\n\n private startTextEdit(textId: string): void {\n if (typeof document === 'undefined') return;\n const text = this.getTextById(textId);\n if (!text) return;\n const container = this.getStageContainer();\n if (!container) return;\n this.disposeTextEditor();\n\n const editor = document.createElement('textarea');\n const fontSize = (text.style?.fontSize as number | undefined) ?? 12;\n const fontFamily = (text.style?.fontFamily as string | undefined) ?? 'sans-serif';\n const baseWidth = text.size?.width ?? Math.max(text.content.length, 1) * fontSize * 0.6;\n const baseHeight = text.size?.height ?? fontSize * 1.2;\n const position = this.resolveTextScreenPosition(textId, text.position);\n\n if (container.style.position === '' || container.style.position === 'static') {\n container.style.position = 'relative';\n }\n\n editor.value = text.content;\n editor.style.position = 'absolute';\n editor.style.left = `${position.x}px`;\n editor.style.top = `${position.y}px`;\n editor.style.width = `${Math.max(baseWidth, 40)}px`;\n editor.style.height = `${Math.max(baseHeight, 20)}px`;\n editor.style.fontSize = `${fontSize}px`;\n editor.style.fontFamily = fontFamily;\n editor.style.padding = '2px 4px';\n editor.style.margin = '0';\n editor.style.border = '1px solid #1f4d99';\n editor.style.borderRadius = '4px';\n editor.style.background = '#ffffff';\n editor.style.resize = 'none';\n editor.style.outline = 'none';\n editor.style.zIndex = '10';\n\n let finalized = false;\n const finalize = (apply: boolean) => {\n if (finalized) return;\n finalized = true;\n const value = editor.value;\n editor.remove();\n this.textEditor = null;\n if (apply && value !== text.content) {\n this.engine.updateText(textId, value);\n }\n };\n\n editor.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n finalize(true);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n finalize(false);\n }\n });\n editor.addEventListener('blur', () => finalize(true));\n\n container.appendChild(editor);\n editor.focus();\n editor.select();\n this.textEditor = editor;\n }\n\n private disposeTextEditor(): void {\n if (!this.textEditor) return;\n this.textEditor.remove();\n this.textEditor = null;\n }\n\n private updateSelectionOverlays(): void {\n if (!this.renderer) return;\n const selection = this.engine.getSelection();\n if (selection.length !== 1) {\n this.renderer.clearResizeHandles();\n this.renderer.clearLinkHandles();\n return;\n }\n const id = selection[0];\n const element = this.getElementById(id);\n if (element) {\n const position = this.engine.getElementWorldPosition(id) ?? element.position;\n this.renderer.renderResizeHandles(id, position, element.size);\n this.renderer.clearLinkHandles();\n return;\n }\n const link = this.getLinkById(id);\n if (link) {\n this.renderer.renderLinkHandles(id, link.points);\n this.renderer.clearResizeHandles();\n return;\n }\n this.renderer.clearResizeHandles();\n this.renderer.clearLinkHandles();\n }\n\n private handleResizeDrag(state: Extract<DragState, { mode: 'resize' }>, point: Point): void {\n const minSize = 20;\n const origin = state.origin;\n const originX = origin.worldPosition.x;\n const originY = origin.worldPosition.y;\n const originWidth = origin.size.width;\n const originHeight = origin.size.height;\n const originRight = originX + originWidth;\n const originBottom = originY + originHeight;\n\n let x = originX;\n let y = originY;\n let width = originWidth;\n let height = originHeight;\n\n switch (state.handle) {\n case 'se':\n width = Math.max(minSize, point.x - originX);\n height = Math.max(minSize, point.y - originY);\n break;\n case 'sw':\n width = Math.max(minSize, originRight - point.x);\n x = originRight - width;\n height = Math.max(minSize, point.y - originY);\n break;\n case 'ne':\n height = Math.max(minSize, originBottom - point.y);\n y = originBottom - height;\n width = Math.max(minSize, point.x - originX);\n break;\n case 'nw':\n width = Math.max(minSize, originRight - point.x);\n height = Math.max(minSize, originBottom - point.y);\n x = originRight - width;\n y = originBottom - height;\n break;\n default:\n break;\n }\n\n this.engine.moveElementTo(state.elementId, x, y);\n this.engine.resizeElement(state.elementId, width, height);\n this.renderer?.renderResizeHandles(state.elementId, { x, y }, { width, height });\n }\n\n private parseResizeHandle(id: string): { elementId: string; handle: 'nw' | 'ne' | 'sw' | 'se' } | null {\n const parts = id.split(':');\n if (parts.length !== 3 || parts[0] !== 'resize') return null;\n const handle = parts[2] as 'nw' | 'ne' | 'sw' | 'se';\n if (!['nw', 'ne', 'sw', 'se'].includes(handle)) return null;\n return { elementId: parts[1], handle };\n }\n\n private parseLinkHandle(id: string): { linkId: string; pointIndex: number } | null {\n const parts = id.split(':');\n if (parts.length !== 3 || parts[0] !== 'link-handle') return null;\n const index = Number(parts[2]);\n if (Number.isNaN(index)) return null;\n return { linkId: parts[1], pointIndex: index };\n }\n\n private getResizeCursor(handle: 'nw' | 'ne' | 'sw' | 'se'): string {\n if (handle === 'nw' || handle === 'se') return 'nwse-resize';\n return 'nesw-resize';\n }\n\n private normalizeRect(a: Point, b: Point): { x: number; y: number; width: number; height: number } {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n const width = Math.abs(a.x - b.x);\n const height = Math.abs(a.y - b.y);\n return { x, y, width, height };\n }\n\n private findNearestSegmentPoint(points: Point[], target: Point): { index: number; point: Point } | null {\n if (points.length < 2) return null;\n let bestIndex = 0;\n let bestPoint = points[0];\n let bestDistance = Number.POSITIVE_INFINITY;\n\n for (let i = 0; i < points.length - 1; i += 1) {\n const projected = this.projectPointOnSegment(target, points[i], points[i + 1]);\n if (projected.distance < bestDistance) {\n bestDistance = projected.distance;\n bestIndex = i;\n bestPoint = projected.point;\n }\n }\n\n return { index: bestIndex, point: bestPoint };\n }\n\n private projectPointOnSegment(point: Point, a: Point, b: Point): { point: Point; distance: number } {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len2 = dx * dx + dy * dy;\n if (len2 === 0) {\n const distance = Math.hypot(point.x - a.x, point.y - a.y);\n return { point: { ...a }, distance };\n }\n const t = ((point.x - a.x) * dx + (point.y - a.y) * dy) / len2;\n const clamped = Math.max(0, Math.min(1, t));\n const projected = { x: a.x + clamped * dx, y: a.y + clamped * dy };\n const distance = Math.hypot(point.x - projected.x, point.y - projected.y);\n return { point: projected, distance };\n }\n\n private applyMarqueeSelection(\n rect: { x: number; y: number; width: number; height: number },\n isMulti: boolean,\n ): void {\n const state = this.engine.getState();\n const selected = new Set<string>(isMulti ? this.engine.getSelection() : []);\n const containsPoint = (point: Point) =>\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height;\n state.elements.forEach((element) => {\n const position = this.engine.getElementWorldPosition(element.id) ?? element.position;\n const elementRect = { x: position.x, y: position.y, width: element.size.width, height: element.size.height };\n if (rectsIntersect(rect, elementRect)) {\n selected.add(element.id);\n }\n });\n state.ports.forEach((port) => {\n const position = this.engine.getPortWorldPosition(port.id) ?? port.position;\n if (containsPoint(position)) {\n selected.add(port.id);\n }\n });\n state.texts.forEach((text) => {\n const position = this.engine.getTextWorldPosition(text.id) ?? text.position;\n const width = text.size?.width ?? 0;\n const height = text.size?.height ?? 0;\n const textRect = { x: position.x, y: position.y, width, height };\n if (rectsIntersect(rect, textRect) || containsPoint(position)) {\n selected.add(text.id);\n }\n });\n state.links.forEach((link) => {\n if (link.points.length === 0) return;\n const xs = link.points.map((point) => point.x);\n const ys = link.points.map((point) => point.y);\n const linkRect = {\n x: Math.min(...xs),\n y: Math.min(...ys),\n width: Math.max(...xs) - Math.min(...xs),\n height: Math.max(...ys) - Math.min(...ys),\n };\n if (rectsIntersect(rect, linkRect)) {\n selected.add(link.id);\n }\n });\n this.engine.setSelection(Array.from(selected));\n }\n\n private applyPortConstraints(portId: string, worldTarget: Point): Point {\n const port = this.getPortById(portId);\n if (!port) return worldTarget;\n const elementPos = this.engine.getElementWorldPosition(port.elementId);\n if (!elementPos) return worldTarget;\n const relative = { x: worldTarget.x - elementPos.x, y: worldTarget.y - elementPos.y };\n const style = port.style as { moveBounds?: { x: number; y: number; width: number; height: number }; moveAxis?: 'horizontal' | 'vertical' } | undefined;\n\n let constrained = { ...relative };\n if (style?.moveAxis === 'horizontal') {\n constrained.y = port.position.y;\n } else if (style?.moveAxis === 'vertical') {\n constrained.x = port.position.x;\n }\n if (style?.moveBounds) {\n const bounds = style.moveBounds;\n constrained.x = Math.min(bounds.x + bounds.width, Math.max(bounds.x, constrained.x));\n constrained.y = Math.min(bounds.y + bounds.height, Math.max(bounds.y, constrained.y));\n }\n return { x: elementPos.x + constrained.x, y: elementPos.y + constrained.y };\n }\n\n private createPortForLink(elementId: string, worldPoint: Point, sourcePortId: string): string | null {\n const element = this.getElementById(elementId);\n if (!element) return null;\n const elementPosition = this.engine.getElementWorldPosition(elementId) ?? element.position;\n const relative = {\n x: worldPoint.x - elementPosition.x,\n y: worldPoint.y - elementPosition.y,\n };\n const sourcePort = this.getPortById(sourcePortId);\n const portId = createId();\n this.engine.addPortToElement(elementId, {\n id: portId,\n elementId,\n position: relative,\n shapeId: sourcePort?.shapeId,\n size: sourcePort?.size ? { ...sourcePort.size } : undefined,\n style: sourcePort?.style ? { ...sourcePort.style } : undefined,\n moveMode: sourcePort?.moveMode,\n anchorCenter: sourcePort?.anchorCenter ?? true,\n });\n return portId;\n }\n\n private createPlaceholderPort(elementId: string, worldPoint: Point, sourcePortId: string) {\n const sourcePort = this.getPortById(sourcePortId);\n return {\n id: `port-placeholder:${sourcePortId}`,\n elementId,\n position: { x: worldPoint.x, y: worldPoint.y },\n shapeId: sourcePort?.shapeId,\n size: sourcePort?.size ? { ...sourcePort.size } : undefined,\n style: sourcePort?.style ? { ...sourcePort.style } : undefined,\n moveMode: sourcePort?.moveMode,\n anchorCenter: sourcePort?.anchorCenter ?? true,\n };\n }\n\n private getElementById(id: string) {\n return this.engine.getState().elements.find((element) => element.id === id);\n }\n\n private getPortById(id: string) {\n return this.engine.getState().ports.find((port) => port.id === id);\n }\n\n private getTextById(id: string) {\n return this.engine.getState().texts.find((text) => text.id === id);\n }\n\n private getLinkById(id: string): LinkData | undefined {\n return this.engine.getState().links.find((link) => link.id === id);\n }\n\n private resolveTextScreenPosition(textId: string, fallbackPosition: Point): Point {\n const world = this.engine.getTextWorldPosition(textId) ?? fallbackPosition;\n return {\n x: world.x * this.zoom + this.pan.x,\n y: world.y * this.zoom + this.pan.y,\n };\n }\n\n private applyViewportPatch(patches: { entity: string; payload?: Record<string, unknown> }[]): void {\n const viewportPatch = patches.find((patch) => patch.entity === 'viewport');\n if (!viewportPatch?.payload) return;\n const pan = viewportPatch.payload.pan as Point | undefined;\n const zoom = viewportPatch.payload.zoom as number | undefined;\n if (!pan || typeof zoom !== 'number') return;\n if (pan.x === this.pan.x && pan.y === this.pan.y && zoom === this.zoom) return;\n this.pan = { ...pan };\n this.zoom = zoom;\n this.applyStageTransform();\n }\n\n private applyStageTransform(): void {\n const stageAny = this.stage as unknown as {\n scale?: (value: { x: number; y: number }) => void;\n position?: (value: Point) => void;\n };\n stageAny?.scale?.({ x: this.zoom, y: this.zoom });\n stageAny?.position?.(this.pan);\n }\n\n private cancelLinkDrag(): void {\n if (!this.dragState || this.dragState.mode !== 'link-drag') {\n if (this.linkDragContext) {\n this.engine.emitElementLinkEnded({\n ...this.linkDragContext,\n cancelled: true,\n });\n this.linkDragContext = null;\n }\n return;\n }\n const point = this.dragState.current ?? this.dragState.start;\n const pointerInfo = this.buildPointerInfo(point, null);\n this.engine.emitPortMouseUp({\n portId: this.dragState.sourcePortId,\n elementId: this.dragState.sourceElementId,\n pointer: pointerInfo,\n });\n this.engine.emitElementLinkEnded({\n sourcePortId: this.dragState.sourcePortId,\n sourceElementId: this.dragState.sourceElementId,\n cancelled: true,\n });\n this.linkDragContext = null;\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.dragState = null;\n this.setCursor('default');\n }\n\n private isEditableTarget(target: EventTarget | null): boolean {\n if (!target || !(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName.toLowerCase();\n return tag === 'input' || tag === 'textarea' || tag === 'select';\n }\n\n private isPanKeyPressed(event: MouseEvent | PointerEvent): boolean {\n switch (this.panKey) {\n case 'Shift':\n return event.shiftKey;\n case 'Alt':\n return event.altKey;\n case 'Meta':\n return event.metaKey;\n case 'Control':\n default:\n return event.ctrlKey;\n }\n }\n}\n","import { DiagramEngineHandle, DiagramState, EngineChangeEvent, EngineSelectionEvent, LinkRoutingMode } from './types';\nimport DiagramEngine from '../engine/DiagramEngine';\nimport KonvaRenderer from '../renderer/konva/KonvaRenderer';\nimport KonvaInteraction from '../renderer/konva/KonvaInteraction';\nimport KonvaHitTester from '../renderer/konva/KonvaHitTester';\nimport type { HitResult } from '../renderer/konva/KonvaHitTester';\nimport { ShapeDefinition, ShapeRegistry } from '../renderer/RenderTypes';\nimport { RouterStrategy } from '../strategies/RouterStrategy';\nimport { SnapStrategy } from '../strategies/SnapStrategy';\n\ntype KonvaEditorLike = {\n Stage: new (config: { container: HTMLDivElement | string; width: number; height: number }) => {\n width: (value?: number) => number;\n height: (value?: number) => number;\n add: (layer: unknown) => void;\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\n getPointerPosition?: () => { x: number; y: number } | null;\n getIntersection: (pos: { x: number; y: number }) => unknown;\n getAllIntersections?: (pos: { x: number; y: number }) => unknown[];\n container?: HTMLDivElement | (() => HTMLDivElement);\n getAbsoluteTransform?: () => { copy?: () => { invert?: () => void; point: (pos: { x: number; y: number }) => { x: number; y: number } }; point?: (pos: { x: number; y: number }) => { x: number; y: number } };\n destroy: () => void;\n };\n Rect: new (config: Record<string, unknown>) => unknown;\n Circle: new (config: Record<string, unknown>) => unknown;\n Line: new (config: Record<string, unknown>) => unknown;\n};\n\nconst getKonva = (): KonvaEditorLike => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const module = require('konva') as { default?: KonvaEditorLike } | KonvaEditorLike;\n return (module as { default?: KonvaEditorLike }).default ?? (module as KonvaEditorLike);\n};\n\nexport type SimpleShape = {\n id: string;\n kind: 'rect' | 'circle' | 'diamond' | 'triangle';\n style?: Record<string, unknown>;\n};\n\nexport type DiagramEditorConfig = {\n container: HTMLDivElement | string;\n width?: number;\n height?: number;\n initialState?: DiagramState;\n elementShapes?: SimpleShape[];\n portShapes?: SimpleShape[];\n panKey?: 'Control' | 'Shift' | 'Alt' | 'Meta';\n onChange?: (event: EngineChangeEvent) => void;\n onSelection?: (event: EngineSelectionEvent) => void;\n};\n\nexport type DiagramEditorHandle = DiagramEngineHandle & {\n resize: (width: number, height: number) => void;\n destroy: () => void;\n};\n\ntype KonvaHitNode = {\n id?: () => string;\n name?: () => string;\n getAttr?: (key: string) => unknown;\n};\n\nconst registerSimpleShapes = (\n registry: ShapeRegistry,\n shapes: SimpleShape[] | undefined,\n isPort: boolean,\n): void => {\n if (!shapes) return;\n shapes.forEach((shape) => {\n const definition: ShapeDefinition = {\n id: shape.id,\n createNode: (model) => {\n const Konva = getKonva();\n const anchorCenter = isPort\n ? (model as { anchorCenter?: boolean }).anchorCenter ?? true\n : false;\n if (shape.kind === 'circle') {\n const size = (model as { size?: { width?: number; height?: number } }).size;\n const hasSize = Boolean(size?.width && size?.height);\n const hasRadius = typeof shape.style?.radius === 'number';\n const radius =\n (shape.style?.radius as number | undefined) ??\n (hasSize ? Math.min(size?.width ?? 8, size?.height ?? 8) / 2 : 4);\n const position = (model as { position: { x: number; y: number } }).position;\n const hasOffsetX = shape.style?.offsetX !== undefined;\n const hasOffsetY = shape.style?.offsetY !== undefined;\n const offsetX =\n (shape.style?.offsetX as number | undefined) ?? (anchorCenter ? 0 : -radius);\n const offsetY =\n (shape.style?.offsetY as number | undefined) ?? (anchorCenter ? 0 : -radius);\n return new Konva.Circle({\n id: (model as { id: string }).id,\n x: position.x,\n y: position.y,\n radius,\n offsetX,\n offsetY,\n ...(shape.style ?? {}),\n name: (shape.style?.name as string | undefined) ?? (isPort ? 'port' : 'element'),\n shapeKind: shape.kind,\n __autoRadius: !hasRadius,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n if (shape.kind === 'diamond' || shape.kind === 'triangle') {\n const size = (model as { size?: { width?: number; height?: number } }).size;\n const width = size?.width ?? 120;\n const height = size?.height ?? 80;\n const points =\n shape.kind === 'diamond'\n ? [width / 2, 0, width, height / 2, width / 2, height, 0, height / 2]\n : [width / 2, 0, width, height, 0, height];\n const hasOffsetX = shape.style?.offsetX !== undefined;\n const hasOffsetY = shape.style?.offsetY !== undefined;\n const offsetX =\n (shape.style?.offsetX as number | undefined) ?? (anchorCenter ? width / 2 : 0);\n const offsetY =\n (shape.style?.offsetY as number | undefined) ?? (anchorCenter ? height / 2 : 0);\n return new Konva.Line({\n id: (model as { id: string }).id,\n x: (model as { position: { x: number } }).position.x,\n y: (model as { position: { y: number } }).position.y,\n points,\n closed: true,\n offsetX,\n offsetY,\n ...(shape.style ?? {}),\n shapeKind: shape.kind,\n __autoPoints: true,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n const size = (model as { size?: { width?: number; height?: number } }).size;\n const width = size?.width ?? 160;\n const height = size?.height ?? 100;\n const hasOffsetX = shape.style?.offsetX !== undefined;\n const hasOffsetY = shape.style?.offsetY !== undefined;\n const offsetX =\n (shape.style?.offsetX as number | undefined) ?? (anchorCenter ? width / 2 : 0);\n const offsetY =\n (shape.style?.offsetY as number | undefined) ?? (anchorCenter ? height / 2 : 0);\n return new Konva.Rect({\n id: (model as { id: string }).id,\n x: (model as { position: { x: number } }).position.x,\n y: (model as { position: { y: number } }).position.y,\n width,\n height,\n offsetX,\n offsetY,\n ...(shape.style ?? {}),\n shapeKind: shape.kind,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n },\n };\n registry.register(definition);\n });\n};\n\nexport const createDiagramEditor = (config: DiagramEditorConfig): DiagramEditorHandle => {\n const Konva = getKonva();\n const stage = new Konva.Stage({\n container: config.container,\n width: config.width ?? 900,\n height: config.height ?? 560,\n });\n const stageContainer =\n typeof stage.container === 'function' ? stage.container() : (stage.container as HTMLDivElement | undefined);\n if (stageContainer && stageContainer.tabIndex < 0) {\n stageContainer.tabIndex = 0;\n }\n\n const shapeRegistry = new ShapeRegistry();\n registerSimpleShapes(shapeRegistry, config.elementShapes, false);\n registerSimpleShapes(shapeRegistry, config.portShapes, true);\n\n const renderer = new KonvaRenderer({ stage, konva: Konva as unknown as any, shapeRegistry });\n const engine = new DiagramEngine({ renderer, shapeRegistry });\n\n if (config.onChange) {\n engine.on('change', config.onChange);\n }\n if (config.onSelection) {\n engine.on('selection', config.onSelection);\n }\n\n const resolveHit = (node: KonvaHitNode | null): HitResult | null => {\n if (!node) return null;\n const id = node.id ? node.id() : (node.getAttr?.('id') as string) ?? '';\n const rawName = node.name ? node.name() : (node.getAttr?.('name') as string) ?? 'element';\n const depth = typeof node.getAttr === 'function' ? (node.getAttr('__depth') as number | undefined) : undefined;\n if (rawName === 'resize-handle') return { id, type: 'resize-handle', depth };\n if (rawName === 'link-handle') return { id, type: 'link-handle', depth };\n if (rawName === 'port') return { id, type: 'port', depth };\n if (rawName === 'link') return { id, type: 'link', depth };\n if (rawName === 'text') return { id, type: 'text', depth };\n if (rawName === 'none') return { id, type: 'none', depth };\n return { id, type: 'element', depth };\n };\n\n const prioritizeHits = (nodes: Array<KonvaHitNode | null>): HitResult => {\n const hits = nodes\n .map((node) => resolveHit(node))\n .filter((hit): hit is HitResult => Boolean(hit));\n if (hits.length === 0) return { id: '', type: 'none' };\n\n const priority: HitResult['type'][] = ['resize-handle', 'link-handle', 'port', 'link', 'text', 'element'];\n for (let i = 0; i < priority.length; i += 1) {\n const candidates = hits.filter((hit) => hit.type === priority[i]);\n if (candidates.length === 0) continue;\n if (priority[i] === 'element') {\n return candidates.reduce((deepest, current) => {\n const deepestDepth = deepest.depth ?? -1;\n const currentDepth = current.depth ?? -1;\n return currentDepth > deepestDepth ? current : deepest;\n }, candidates[0]);\n }\n return candidates[0];\n }\n return hits[0];\n };\n\n const hitTester = new KonvaHitTester((point) => {\n const toStagePoint = (world: { x: number; y: number }) => {\n const transform = stage.getAbsoluteTransform?.();\n if (!transform) return world;\n const runner = (transform as { copy?: () => unknown; point?: (pos: { x: number; y: number }) => { x: number; y: number } }).copy?.() ?? transform;\n const pointFn = (runner as { point?: (pos: { x: number; y: number }) => { x: number; y: number } }).point;\n if (!pointFn) return world;\n return pointFn.call(runner, world);\n };\n const stagePoint = toStagePoint(point);\n const all = typeof stage.getAllIntersections === 'function' ? stage.getAllIntersections(stagePoint) : null;\n if (all && all.length > 0) {\n return prioritizeHits(all as KonvaHitNode[]);\n }\n const single = stage.getIntersection(stagePoint) as KonvaHitNode | null;\n return prioritizeHits(single ? [single] : []);\n });\n\n const interaction = new KonvaInteraction(engine, { stage, hitTester, renderer, panKey: config.panKey });\n interaction.bind();\n\n if (config.initialState) {\n engine.load(config.initialState);\n }\n\n return {\n load: (state) => engine.load(state),\n getState: () => engine.getState(),\n getViewport: () => engine.getViewport(),\n clientToWorld: (clientPoint, container) => engine.clientToWorld(clientPoint, container),\n createOverlayShape: (config) => engine.createOverlayShape(config),\n on: (event, handler) => engine.on(event, handler),\n addElement: (element) => engine.addElement(element),\n moveElementTo: (id, x, y) => engine.moveElementTo(id, x, y),\n resizeElement: (id, width, height) => engine.resizeElement(id, width, height),\n setElementLayout: (id, layout) => engine.setElementLayout(id, layout),\n removeElement: (id) => engine.removeElement(id),\n addPortToElement: (elementId, port) => engine.addPortToElement(elementId, port),\n movePortTo: (id, x, y) => engine.movePortTo(id, x, y),\n removePort: (id) => engine.removePort(id),\n addLink: (link) => engine.addLink(link),\n updateLinkPoints: (id, points) => engine.updateLinkPoints(id, points),\n setLinkRoutingMode: (id, mode) => engine.setLinkRoutingMode(id, mode as LinkRoutingMode),\n rerouteAllLinks: () => engine.rerouteAllLinks(),\n rerouteLinks: (linkIds, options) => engine.rerouteLinks(linkIds, options),\n removeLink: (id) => engine.removeLink(id),\n addText: (text) => engine.addText(text),\n updateText: (id, content) => engine.updateText(id, content),\n moveTextTo: (id, x, y) => engine.moveTextTo(id, x, y),\n removeText: (id) => engine.removeText(id),\n setSelection: (ids) => engine.setSelection(ids),\n setViewport: (pan, zoom) => engine.setViewport(pan, zoom),\n setRouting: (router) => engine.setRouting(router as RouterStrategy),\n setSnapping: (snapper) => engine.setSnapping(snapper as SnapStrategy),\n registerShape: (shape) => engine.registerShape(shape as ShapeDefinition),\n render: () => engine.render(),\n resize: (width, height) => {\n stage.width(width);\n stage.height(height);\n engine.render();\n },\n destroy: () => {\n interaction.dispose();\n renderer.destroy?.();\n stage.destroy();\n },\n };\n};\n","import React, { createContext, useContext, useMemo } from 'react';\nimport type { DisplayBoxMetrics } from './types';\n\ntype DisplayBoxMetricsContextValue = {\n updateMetrics: (metrics: DisplayBoxMetrics) => void;\n};\n\nconst DisplayBoxMetricsContext = createContext<DisplayBoxMetricsContextValue | null>(null);\n\ntype DisplayBoxMetricsProviderProps = {\n onMetricsChange: (metrics: DisplayBoxMetrics) => void;\n children: React.ReactNode;\n};\n\nexport const DisplayBoxMetricsProvider = ({\n onMetricsChange,\n children,\n}: DisplayBoxMetricsProviderProps) => {\n const value = useMemo(() => ({ updateMetrics: onMetricsChange }), [onMetricsChange]);\n return <DisplayBoxMetricsContext.Provider value={value}>{children}</DisplayBoxMetricsContext.Provider>;\n};\n\nexport const useDisplayBoxMetricsUpdater = () => {\n const context = useContext(DisplayBoxMetricsContext);\n return context?.updateMetrics ?? null;\n};\r\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createDiagramEditor } from '../api';\nimport type { DiagramEditorHandle, DiagramState, SimpleShape } from '../api';\nimport DefaultSnapper from '../strategies/DefaultSnapper';\nimport type { RouterStrategy } from '../strategies/RouterStrategy';\nimport { useDisplayBoxMetricsUpdater } from './DisplayBoxMetricsContext';\nimport type { DiagramCounts, ViewportSnapshot } from './types';\n\ntype DemoEditorConfig = {\n createState: () => DiagramState;\n elementShapes?: SimpleShape[];\n portShapes?: SimpleShape[];\n router?: RouterStrategy;\n snapDefault?: boolean;\n};\n\nconst useDemoEditor = ({ createState, elementShapes, portShapes, router, snapDefault }: DemoEditorConfig) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editorRef = useRef<DiagramEditorHandle | null>(null);\n const [diagramState, setDiagramState] = useState<DiagramState | null>(null);\n const [selection, setSelection] = useState<string[]>([]);\n const [viewport, setViewport] = useState<ViewportSnapshot>({ pan: { x: 0, y: 0 }, zoom: 1 });\n const [snapEnabledState, setSnapEnabledState] = useState(Boolean(snapDefault));\n const updateMetrics = useDisplayBoxMetricsUpdater();\n\n const counts: DiagramCounts = useMemo(\n () => ({\n elements: diagramState?.elements.length ?? 0,\n ports: diagramState?.ports.length ?? 0,\n links: diagramState?.links.length ?? 0,\n texts: diagramState?.texts.length ?? 0,\n }),\n [diagramState],\n );\n\n useEffect(() => {\n if (!updateMetrics) return;\n updateMetrics({ selection, counts, viewport, snapEnabled: snapEnabledState });\n }, [updateMetrics, selection, counts, viewport, snapEnabledState]);\n\n const setSnapEnabled = useCallback((value: boolean | ((prev: boolean) => boolean)) => {\n setSnapEnabledState((prev) => {\n const next = typeof value === 'function' ? value(prev) : value;\n if (editorRef.current) {\n editorRef.current.setSnapping(new DefaultSnapper(next ? 20 : 0));\n }\n return next;\n });\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return undefined;\n\n const container = containerRef.current;\n const editor = createDiagramEditor({\n container,\n width: container.clientWidth || 900,\n height: container.clientHeight || 560,\n initialState: createState(),\n elementShapes,\n portShapes,\n onChange: (event) => {\n setDiagramState(event.state);\n const viewportPatch = event.patches.find((patch) => patch.entity === 'viewport');\n if (viewportPatch?.payload) {\n const pan = viewportPatch.payload.pan as { x: number; y: number } | undefined;\n const zoom = viewportPatch.payload.zoom as number | undefined;\n if (pan && typeof zoom === 'number') {\n setViewport({ pan, zoom });\n }\n }\n },\n onSelection: (event) => {\n setSelection(event.selectedIds);\n },\n });\n\n editorRef.current = editor;\n setSelection([]);\n setDiagramState(editor.getState());\n setViewport(editor.getViewport());\n const snapValue = Boolean(snapDefault);\n setSnapEnabledState(snapValue);\n editor.setSnapping(new DefaultSnapper(snapValue ? 20 : 0));\n if (router) {\n editor.setRouting(router);\n }\n\n const handleResize = () => {\n if (!containerRef.current) return;\n editor.resize(containerRef.current.clientWidth || 900, containerRef.current.clientHeight || 560);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n editor.destroy();\n editorRef.current = null;\n };\n }, [createState, elementShapes, portShapes, router, snapDefault]);\n\n return {\n containerRef,\n editorRef,\n diagramState,\n selection,\n viewport,\n snapEnabled: snapEnabledState,\n setSnapEnabled,\n };\n};\n\nexport default useDemoEditor;\r\n","import { useCallback, useRef } from 'react';\n\nconst useOffsetSequence = () => {\n const offsetRef = useRef(0);\n return useCallback(() => {\n const value = offsetRef.current;\n offsetRef.current += 1;\n return (value % 6) * 20;\n }, []);\n};\n\nexport default useOffsetSequence;\r\n","import React, { useEffect, useMemo, useState } from 'react';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoActionHelpers } from '../types';\nimport { eventHandlersDemoConfig } from './eventHandlersDemo';\n\nconst EventHandlersDemo = () => {\n const demo = eventHandlersDemoConfig;\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const [eventDemoEvent, setEventDemoEvent] = useState<'none' | 'elementDrop' | 'element-drop' | 'selection'>('none');\n const [eventDemoLog, setEventDemoLog] = useState('');\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return undefined;\n setEventDemoLog('');\n\n if (eventDemoEvent === 'elementDrop' || eventDemoEvent === 'element-drop') {\n return editor.on(eventDemoEvent, (event) => {\n const state = editor.getState();\n const element = state.elements.find((item) => item.id === event.elementId);\n if (!element) return;\n const start =\n event.anchor === 'center'\n ? {\n x: event.startWorld.x - element.size.width / 2,\n y: event.startWorld.y - element.size.height / 2,\n }\n : event.startWorld;\n editor.moveElementTo(event.elementId, start.x, start.y);\n setEventDemoLog(`${eventDemoEvent}: reverted ${event.elementId}`);\n });\n }\n\n if (eventDemoEvent === 'selection') {\n return editor.on('selection', (event) => {\n const label = event.selectedIds.length > 0 ? event.selectedIds.join(', ') : 'none';\n setEventDemoLog(`selection: ${label}`);\n });\n }\n\n return undefined;\n }, [eventDemoEvent, editorRef]);\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>{demo.description}</p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n <div style={{ display: 'flex', gap: 12, alignItems: 'center', marginBottom: 12 }}>\n <label htmlFor=\"event-handler-select\" style={{ fontWeight: 600 }}>\n Event\n </label>\n <select\n id=\"event-handler-select\"\n value={eventDemoEvent}\n onChange={(event) => setEventDemoEvent(event.target.value as 'none' | 'elementDrop' | 'element-drop' | 'selection')}\n style={{ padding: '6px 8px' }}\n >\n <option value=\"none\">None</option>\n <option value=\"elementDrop\">elementDrop (revert position)</option>\n <option value=\"element-drop\">element-drop (deprecated alias)</option>\n <option value=\"selection\">selection (log selection)</option>\n </select>\n <div style={{ fontSize: 12, color: '#555' }}>\n {eventDemoLog || 'Trigger the selected event to see feedback.'}\n </div>\n </div>\n <DisplayBoxStage containerRef={containerRef} />\n </section>\n );\n};\n\nexport default EventHandlersDemo;\r\n","import React, { useEffect, useMemo, useState } from 'react';\nimport type { EngineEventMap } from '../../api';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoActionHelpers } from '../types';\nimport { engineEventsDemoConfig } from './engineEventsDemo';\n\nconst engineEventOptions = [\n 'change',\n 'selection',\n 'config',\n 'elementDrop',\n 'element-drop',\n 'paperClick',\n 'portMouseDown',\n 'portMouseUp',\n 'portMoved',\n 'portSelected',\n 'elementClick',\n 'elementDragged',\n 'elementMoved',\n 'elementResized',\n 'elementDeleted',\n 'elementSelected',\n 'elementLinkStarted',\n 'elementLinkEnded',\n 'textSelected',\n] as const;\ntype EngineEventKey = typeof engineEventOptions[number];\n\nconst formatEventPayload = (payload: EngineEventMap[EngineEventKey] | null) =>\n payload ? JSON.stringify(payload, null, 2) : '';\n\nconst EngineEventsDemo = () => {\n const demo = engineEventsDemoConfig;\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const [selectedEvent, setSelectedEvent] = useState<EngineEventKey>(engineEventOptions[0]);\n const [eventPayload, setEventPayload] = useState<EngineEventMap[EngineEventKey] | null>(null);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return undefined;\n setEventPayload(null);\n return editor.on(selectedEvent, (payload) => {\n setEventPayload(payload);\n });\n }, [selectedEvent, editorRef]);\n\n const payloadText = formatEventPayload(eventPayload);\n const handleRerouteAll = () => {\n editorRef.current?.rerouteAllLinks();\n };\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>{demo.description}</p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n <div style={{ display: 'grid', gap: 12, marginBottom: 12 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 12 }}>\n <label htmlFor=\"engine-event-select\" style={{ fontWeight: 600 }}>\n Engine Event\n </label>\n <select\n id=\"engine-event-select\"\n value={selectedEvent}\n onChange={(event) => setSelectedEvent(event.target.value as EngineEventKey)}\n style={{ padding: '6px 8px', minWidth: 200 }}\n >\n {engineEventOptions.map((eventName) => (\n <option key={eventName} value={eventName}>\n {eventName}\n </option>\n ))}\n </select>\n <button type=\"button\" onClick={handleRerouteAll} style={{ padding: '6px 10px' }}>\n Reroute All Links\n </button>\n <div style={{ fontSize: 12, color: '#555' }}>\n {payloadText ? 'Latest payload captured below.' : 'Interact with the canvas to trigger the event.'}\n </div>\n </div>\n <div>\n <label htmlFor=\"engine-event-payload\" style={{ display: 'block', fontWeight: 600, marginBottom: 4 }}>\n Event Payload\n </label>\n <textarea\n id=\"engine-event-payload\"\n readOnly\n value={payloadText}\n placeholder=\"No event payload captured yet.\"\n style={{\n width: '100%',\n minHeight: 160,\n padding: '8px 10px',\n borderRadius: 8,\n border: '1px solid #2d2d2d',\n background: '#fff',\n fontFamily: 'ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace',\n fontSize: 12,\n resize: 'vertical',\n }}\n />\n </div>\n </div>\n <DisplayBoxStage containerRef={containerRef} />\n </section>\n );\n};\n\nexport default EngineEventsDemo;\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport type { ElementLinkEndedEvent } from '../../api';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoActionHelpers } from '../types';\nimport { linkCancelDemoConfig } from './linkCancelDemo';\n\ntype LinkEndedWithMeta = ElementLinkEndedEvent & { cancelledByHost?: boolean };\n\nconst badgeStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n padding: '6px 10px',\n borderRadius: 10,\n fontWeight: 600,\n background: '#f3f4f6',\n border: '1px solid #d0d5dd',\n};\n\nconst LinkCancelDemo = () => {\n const demo = linkCancelDemoConfig;\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const [lastEvent, setLastEvent] = useState<LinkEndedWithMeta | null>(null);\n const [history, setHistory] = useState<LinkEndedWithMeta[]>([]);\n const [hostCancels, setHostCancels] = useState<boolean>(true);\n const cancelledByHostRef = useRef(false);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return undefined;\n setLastEvent(null);\n setHistory([]);\n return editor.on('elementLinkEnded', (payload) => {\n const withMeta: LinkEndedWithMeta = {\n ...payload,\n cancelledByHost: payload.cancelled && cancelledByHostRef.current,\n };\n cancelledByHostRef.current = false;\n setLastEvent(withMeta);\n setHistory((prev) => [withMeta, ...prev].slice(0, 6));\n });\n }, [editorRef]);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return undefined;\n return editor.on('elementLinkConnecting', (payload) => {\n cancelledByHostRef.current = false;\n if (hostCancels) {\n payload.cancel();\n cancelledByHostRef.current = true;\n }\n });\n }, [editorRef, hostCancels]);\n\n const statusLabel = lastEvent\n ? lastEvent.cancelled\n ? lastEvent.cancelledByHost\n ? 'Cancelled by host'\n : 'Cancelled'\n : 'Link created'\n : 'Awaiting drag';\n const statusColor = lastEvent ? (lastEvent.cancelled ? '#b42318' : '#027a48') : '#444';\n const statusTone = lastEvent ? (lastEvent.cancelled ? '#fee4e2' : '#eaf6ec') : '#f3f4f6';\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>\n Start a link drag from the left port. Drop on empty canvas to cancel, or on the right port to create.\n Use the toggle to simulate host-driven cancellation; the payload from <code>elementLinkEnded</code> appears\n below.\n </p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n <div style={{ display: 'grid', gap: 12, marginBottom: 12 }}>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 12, alignItems: 'center' }}>\n <span style={{ ...badgeStyle, background: statusTone, color: statusColor, borderColor: statusColor }}>\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n background: statusColor,\n display: 'inline-block',\n }}\n />\n {statusLabel}\n </span>\n <label style={{ display: 'inline-flex', alignItems: 'center', gap: 8, fontSize: 13 }}>\n <input\n type=\"checkbox\"\n checked={hostCancels}\n onChange={(event) => setHostCancels(event.target.checked)}\n />\n Cancel link drops from host\n </label>\n {lastEvent && (\n <div style={{ fontSize: 12, color: '#333' }}>\n {lastEvent.cancelled\n ? lastEvent.cancelledByHost\n ? 'Host cancelled this drop.'\n : 'Drop missed a valid port.'\n : `Link ${lastEvent.linkId ?? '(generated)'} connected ${lastEvent.sourcePortId} → ${lastEvent.targetPortId}`}\n </div>\n )}\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12 }}>\n <div>\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>Latest payload</label>\n <textarea\n readOnly\n value={lastEvent ? JSON.stringify(lastEvent, null, 2) : ''}\n placeholder=\"Drag a link to see the payload.\"\n style={{\n width: '100%',\n minHeight: 170,\n padding: '8px 10px',\n borderRadius: 8,\n border: '1px solid #d0d5dd',\n background: '#fff',\n fontFamily:\n 'ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace',\n fontSize: 12,\n resize: 'vertical',\n }}\n />\n </div>\n <div>\n <label style={{ display: 'block', fontWeight: 600, marginBottom: 6 }}>Recent drags</label>\n <div\n style={{\n display: 'grid',\n gap: 8,\n padding: 8,\n borderRadius: 8,\n border: '1px solid #e0e0e0',\n background: '#fafafa',\n }}\n >\n {history.length === 0 && <div style={{ color: '#666', fontSize: 12 }}>No drags yet.</div>}\n {history.map((event, index) => (\n <div\n key={`${event.sourcePortId}-${event.targetPortId ?? 'none'}-${index}`}\n style={{\n padding: 8,\n borderRadius: 6,\n background: event.cancelled ? '#fff4f3' : '#f1f8f4',\n border: `1px solid ${event.cancelled ? '#f2b8b5' : '#b9dfc7'}`,\n fontSize: 12,\n }}\n >\n <div style={{ fontWeight: 600, marginBottom: 4 }}>\n {event.cancelled ? (event.cancelledByHost ? 'Cancelled by host' : 'Cancelled') : 'Created'} —{' '}\n {new Date().toLocaleTimeString()}\n </div>\n <div>sourcePortId: {event.sourcePortId}</div>\n <div>targetPortId: {event.targetPortId ?? '—'}</div>\n <div>linkId: {event.linkId ?? '—'}</div>\n {event.targetElementId && <div>targetElementId: {event.targetElementId}</div>}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n <DisplayBoxStage containerRef={containerRef} />\n </section>\n );\n};\n\nexport default LinkCancelDemo;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport type { ElementLayout, ElementLayoutMode } from '../../api';\nimport { createId } from '../../utils/ids';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoActionHelpers } from '../types';\nimport { autoLayoutDemoConfig } from './autoLayoutDemo';\nimport { gridStageStyle } from './shared';\n\nconst parentOptions = [\n { id: 'layout-row', label: 'Horizontal layout' },\n { id: 'layout-column', label: 'Vertical layout' },\n { id: 'layout-nested', label: 'Nested layout' },\n { id: 'layout-manual', label: 'Manual (compare)' },\n];\n\nconst AutoLayoutDemo = () => {\n const demo = autoLayoutDemoConfig;\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const [targetId, setTargetId] = useState<string>(parentOptions[0].id);\n const [mode, setMode] = useState<ElementLayoutMode>('horizontal');\n const [align, setAlign] = useState<ElementLayout['align']>('center');\n const [padding, setPadding] = useState<number>(12);\n const [gap, setGap] = useState<number>(12);\n const [lastTrigger, setLastTrigger] = useState<string>('None yet');\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return undefined;\n const disposers = [\n editor.on('elementMoved', () => setLastTrigger('child moved')),\n editor.on('elementResized', () => setLastTrigger('child resized')),\n editor.on('elementDeleted', () => setLastTrigger('child removed')),\n editor.on('change', () => setLastTrigger((prev) => prev)),\n ];\n return () => disposers.forEach((off) => off && off());\n }, [editorRef]);\n\n useEffect(() => {\n if (!diagramState) return;\n if (selection.length === 1) {\n const selectedId = selection[0];\n const exists = diagramState.elements.some((el) => el.id === selectedId);\n if (exists && selectedId !== targetId) {\n setTargetId(selectedId);\n }\n }\n }, [selection, diagramState, targetId]);\n\n useEffect(() => {\n if (!diagramState) return;\n const exists = diagramState.elements.some((el) => el.id === targetId);\n if (!exists) {\n setTargetId(parentOptions[0].id);\n }\n }, [diagramState, targetId]);\n\n const targetElement = useMemo(\n () => diagramState?.elements.find((el) => el.id === targetId),\n [diagramState, targetId],\n );\n\n const targetOptions = useMemo(() => {\n const seen = new Set<string>();\n const options: Array<{ id: string; label: string }> = [];\n parentOptions.forEach((option) => {\n if (!seen.has(option.id)) {\n options.push(option);\n seen.add(option.id);\n }\n });\n if (diagramState) {\n diagramState.elements\n .filter((el) => (el.layout && el.layout.mode !== 'manual') || el.parentId)\n .forEach((el) => {\n if (!seen.has(el.id)) {\n const modeLabel = el.layout?.mode ?? 'manual';\n options.push({ id: el.id, label: `${el.id} (${modeLabel})` });\n seen.add(el.id);\n }\n });\n }\n if (targetElement && !seen.has(targetElement.id)) {\n options.push({ id: targetElement.id, label: `${targetElement.id} (selected)` });\n }\n return options;\n }, [diagramState, targetElement]);\n\n useEffect(() => {\n const parent = diagramState?.elements.find((el) => el.id === targetId);\n if (!parent) return;\n const layout = parent.layout;\n setMode(layout?.mode ?? 'manual');\n setAlign(layout?.align ?? 'center');\n const paddingValue =\n typeof layout?.padding === 'number'\n ? layout.padding\n : layout?.padding\n ? Math.max(layout.padding.x ?? 0, layout.padding.y ?? 0)\n : 12;\n setPadding(paddingValue ?? 12);\n setGap(layout?.gap ?? 12);\n }, [diagramState, targetId]);\n\n const childOrder = useMemo(() => {\n if (!diagramState) return [];\n const children = diagramState.elements.filter((el) => el.parentId === targetId);\n const parent = diagramState.elements.find((el) => el.id === targetId);\n const axis = parent?.layout?.mode === 'vertical' ? 'y' : 'x';\n return [...children].sort((a, b) => {\n const aPos = axis === 'y' ? a.position.y : a.position.x;\n const bPos = axis === 'y' ? b.position.y : b.position.x;\n if (aPos === bPos) return a.id.localeCompare(b.id);\n return aPos - bPos;\n });\n }, [diagramState, targetId]);\n\n const parentSummaries = useMemo(() => {\n return parentOptions.map((option) => {\n const parent = diagramState?.elements.find((el) => el.id === option.id);\n const childCount = diagramState?.elements.filter((el) => el.parentId === option.id).length ?? 0;\n return {\n ...option,\n layoutMode: parent?.layout?.mode ?? 'manual',\n size: parent?.size ?? { width: 0, height: 0 },\n childCount,\n };\n });\n }, [diagramState]);\n\n const handleApplyLayout = () => {\n const editor = editorRef.current;\n if (!editor) return;\n if (!targetElement) return;\n const layout =\n mode === 'manual'\n ? { mode: 'manual' as const }\n : {\n mode,\n padding,\n gap,\n align: align ?? 'center',\n };\n editor.setElementLayout(targetElement.id, layout);\n setLastTrigger(`layout applied (${mode})`);\n };\n\n const handleAddChild = () => {\n const editor = editorRef.current;\n if (!editor) return;\n if (!targetElement) return;\n const offset = nextOffset();\n const sizeBump = (offset % 3) * 8;\n editor.addElement({\n id: `auto-child-${createId()}`,\n position: { x: 16 + offset, y: 16 + offset },\n size: { width: 50 + sizeBump, height: 30 + (offset % 2) * 6 },\n shapeId: demo.defaultElementShapeId ?? 'default',\n parentId: targetElement.id,\n });\n setLastTrigger('child added');\n };\n\n const handleRemoveChild = () => {\n const editor = editorRef.current;\n if (!editor) return;\n const children = childOrder;\n const target = children[children.length - 1];\n if (target) {\n editor.removeElement(target.id);\n setLastTrigger('child removed');\n }\n };\n\n const alignmentLabel =\n mode === 'horizontal' ? 'Vertical align (top/center/bottom)' : 'Horizontal align (left/center/right)';\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>\n Try horizontal, vertical, nested, and manual layout containers. Select a layout parent directly on the canvas\n or pick it from the list; the controls below always act on the current selection. Drag, resize, add, or remove\n children to see automatic reflow. Nested column shows size propagation to its parent row.\n </p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n\n <div style={{ display: 'grid', gap: 12, marginBottom: 12 }}>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 12, alignItems: 'center' }}>\n <label htmlFor=\"parent-select\" style={{ fontWeight: 600 }}>\n Target element (follows selection)\n </label>\n <select\n id=\"parent-select\"\n value={targetId}\n onChange={(event) => {\n const nextId = event.target.value;\n setTargetId(nextId);\n if (editorRef.current) {\n editorRef.current.setSelection([nextId]);\n }\n }}\n style={{ padding: '6px 10px', minWidth: 180 }}\n >\n {targetOptions.map((option) => (\n <option key={option.id} value={option.id}>\n {option.label}\n </option>\n ))}\n </select>\n\n <label htmlFor=\"mode-select\" style={{ fontWeight: 600 }}>\n Layout\n </label>\n <select\n id=\"mode-select\"\n value={mode}\n onChange={(event) => setMode(event.target.value as ElementLayoutMode)}\n style={{ padding: '6px 10px', minWidth: 140 }}\n >\n <option value=\"manual\">Manual</option>\n <option value=\"horizontal\">Horizontal</option>\n <option value=\"vertical\">Vertical</option>\n </select>\n\n <label htmlFor=\"align-select\" style={{ fontWeight: 600 }}>\n {alignmentLabel}\n </label>\n <select\n id=\"align-select\"\n value={align ?? 'center'}\n onChange={(event) => setAlign(event.target.value as ElementLayout['align'])}\n style={{ padding: '6px 10px', minWidth: 140 }}\n >\n <option value=\"start\">{mode === 'horizontal' ? 'Top' : 'Left'}</option>\n <option value=\"center\">Center</option>\n <option value=\"end\">{mode === 'horizontal' ? 'Bottom' : 'Right'}</option>\n </select>\n\n <label htmlFor=\"padding-input\" style={{ fontWeight: 600 }}>\n Padding\n </label>\n <input\n id=\"padding-input\"\n type=\"number\"\n value={padding}\n onChange={(event) => setPadding(Number(event.target.value) || 0)}\n style={{ width: 72, padding: '6px 8px' }}\n min={0}\n />\n\n <label htmlFor=\"gap-input\" style={{ fontWeight: 600 }}>\n Gap\n </label>\n <input\n id=\"gap-input\"\n type=\"number\"\n value={gap}\n onChange={(event) => setGap(Number(event.target.value) || 0)}\n style={{ width: 72, padding: '6px 8px' }}\n min={0}\n />\n\n <button type=\"button\" onClick={handleApplyLayout} style={{ padding: '6px 12px', fontWeight: 600 }}>\n Apply layout\n </button>\n <button type=\"button\" onClick={handleAddChild} style={{ padding: '6px 10px' }} disabled={!targetElement}>\n Add child\n </button>\n <button type=\"button\" onClick={handleRemoveChild} style={{ padding: '6px 10px' }} disabled={!targetElement}>\n Remove last child\n </button>\n <span\n style={{\n padding: '6px 10px',\n borderRadius: 8,\n background: '#f7f7f8',\n border: '1px solid #e0e0e0',\n display: 'inline-flex',\n gap: 6,\n alignItems: 'center',\n }}\n >\n <span style={{ fontWeight: 600 }}>Target:</span> {targetElement ? targetElement.id : '—'}\n <span style={{ width: 6, height: 6, borderRadius: '50%', background: '#1f4d99', display: 'inline-block' }} />\n Last trigger: <strong>{lastTrigger}</strong>\n </span>\n </div>\n\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12 }}>\n <div>\n <div style={{ fontWeight: 600, marginBottom: 6 }}>Child order (based on layout axis)</div>\n <ol style={{ marginTop: 0, paddingLeft: 18 }}>\n {childOrder.map((child) => (\n <li key={child.id} style={{ marginBottom: 4, fontSize: 13 }}>\n {child.id} — position ({Math.round(child.position.x)}, {Math.round(child.position.y)}) size (\n {child.size.width}×{child.size.height})\n </li>\n ))}\n {childOrder.length === 0 && <li style={{ color: '#555' }}>No children.</li>}\n </ol>\n <p style={{ fontSize: 12, color: '#555', marginTop: 4 }}>\n Drag a child before/after its sibling or resize it. The order above reflects the reflow sequence.\n </p>\n </div>\n <div>\n <div style={{ fontWeight: 600, marginBottom: 6 }}>Scenario tips</div>\n <ul style={{ marginTop: 0, paddingLeft: 18, fontSize: 13 }}>\n <li>Horizontal: try center vs bottom alignment and larger padding.</li>\n <li>Vertical: see parent grow taller as children stack.</li>\n <li>Nested: the left column owns its own children and expands the row.</li>\n <li>Deep bounds: stack-overflow widens the nested column and the outer row.</li>\n <li>Re-order: drag along the layout axis then apply layout to keep the new order.</li>\n <li>Select any container on the canvas to target it instantly—controls follow your selection.</li>\n <li>Manual: switch to manual to compare with auto layout.</li>\n </ul>\n </div>\n </div>\n\n <div>\n <div style={{ fontWeight: 600, marginBottom: 6 }}>Parent bounds snapshot</div>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))', gap: 8 }}>\n {parentSummaries.map((parent) => (\n <div\n key={parent.id}\n style={{\n padding: 10,\n borderRadius: 8,\n border: '1px solid #e0e0e0',\n background: '#fafafa',\n boxShadow: '0 1px 0 rgba(0,0,0,0.04)',\n }}\n >\n <div style={{ fontWeight: 700 }}>{parent.label}</div>\n <div style={{ fontSize: 12, color: '#444', marginTop: 2 }}>\n Layout: <code>{parent.layoutMode}</code> · {parent.childCount} children\n </div>\n <div\n style={{\n marginTop: 4,\n fontFamily:\n 'ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace',\n fontSize: 12,\n }}\n >\n {Math.round(parent.size.width)} × {Math.round(parent.size.height)} px\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n <DisplayBoxStage containerRef={containerRef} stageStyle={gridStageStyle} />\n </section>\n );\n};\n\nexport default AutoLayoutDemo;\n","import React, { useMemo, useRef, useState } from 'react';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { OverlayShapeHandle } from '../../api';\nimport type { DemoActionHelpers, ToolboxItem } from '../types';\nimport { createId } from '../../utils/ids';\nimport { baseElementShapes, defaultGhostSize, externalToolboxItems } from './shared';\nimport { externalDragDropDemoConfig } from './externalDragDropDemo';\n\nconst ExternalDragDropDemo = () => {\n const demo = externalDragDropDemoConfig;\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const ghostOverlayRef = useRef<OverlayShapeHandle | null>(null);\n const dragPayloadRef = useRef<{ shapeId: string; size: { width: number; height: number } } | null>(null);\n const dragImageRef = useRef<HTMLCanvasElement | null>(null);\n const [ghostShapeId, setGhostShapeId] = useState(externalToolboxItems[0]?.shapeId ?? 'default');\n const [ghostWidth, setGhostWidth] = useState(String(defaultGhostSize.width));\n const [ghostHeight, setGhostHeight] = useState(String(defaultGhostSize.height));\n\n React.useEffect(() => {\n return () => {\n ghostOverlayRef.current?.destroy();\n ghostOverlayRef.current = null;\n dragPayloadRef.current = null;\n dragImageRef.current = null;\n };\n }, []);\n\n const resolveGhostSize = (fallback = defaultGhostSize) => {\n const width = Number(ghostWidth);\n const height = Number(ghostHeight);\n return {\n width: Number.isFinite(width) && width > 0 ? width : fallback.width,\n height: Number.isFinite(height) && height > 0 ? height : fallback.height,\n };\n };\n\n const resolveDragPayload = (dataTransfer: DataTransfer) => {\n const raw = dataTransfer.getData('application/x-react-diagrams-element') || dataTransfer.getData('text/plain');\n if (!raw) return null;\n let shapeId = demo.defaultElementShapeId ?? 'default';\n let size = { width: 180, height: 120 };\n try {\n const parsed = JSON.parse(raw) as { shapeId?: string; size?: { width?: number; height?: number } };\n if (parsed.shapeId) shapeId = parsed.shapeId;\n if (parsed.size?.width && parsed.size?.height) {\n size = { width: parsed.size.width, height: parsed.size.height };\n }\n } catch {\n shapeId = raw;\n }\n return { shapeId, size };\n };\n\n const handleToolboxDragStart = (event: React.DragEvent<HTMLButtonElement>, item: ToolboxItem) => {\n const payload = JSON.stringify({ shapeId: item.shapeId, size: item.size });\n event.dataTransfer.setData('application/x-react-diagrams-element', payload);\n event.dataTransfer.setData('text/plain', item.shapeId);\n event.dataTransfer.effectAllowed = 'copy';\n if (!dragImageRef.current && typeof document !== 'undefined') {\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n dragImageRef.current = canvas;\n }\n if (dragImageRef.current && event.dataTransfer.setDragImage) {\n event.dataTransfer.setDragImage(dragImageRef.current, 0, 0);\n }\n dragPayloadRef.current = { shapeId: item.shapeId, size: { ...item.size } };\n };\n\n const handleToolboxDragEnd = () => {\n ghostOverlayRef.current?.destroy();\n ghostOverlayRef.current = null;\n dragPayloadRef.current = null;\n };\n\n const handleStageDragOver = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = 'copy';\n const editor = editorRef.current;\n const container = containerRef.current;\n if (!editor || !container) return;\n const payload = dragPayloadRef.current ?? resolveDragPayload(event.dataTransfer);\n if (!payload) return;\n const world = editor.clientToWorld({ x: event.clientX, y: event.clientY }, container);\n const ghostSize = resolveGhostSize(payload.size);\n const ghostShape = ghostShapeId || payload.shapeId;\n const nextConfig = {\n shapeId: ghostShape,\n position: { x: world.x - ghostSize.width / 2, y: world.y - ghostSize.height / 2 },\n size: ghostSize,\n style: { opacity: 0.35 },\n };\n if (!ghostOverlayRef.current) {\n ghostOverlayRef.current = editor.createOverlayShape(nextConfig);\n } else {\n ghostOverlayRef.current.update(nextConfig);\n }\n };\n\n const handleStageDragLeave = () => {\n ghostOverlayRef.current?.destroy();\n ghostOverlayRef.current = null;\n };\n\n const handleStageDrop = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n const editor = editorRef.current;\n const container = containerRef.current;\n if (!editor || !container) return;\n\n const payload = dragPayloadRef.current ?? resolveDragPayload(event.dataTransfer);\n if (!payload) return;\n\n const world = editor.clientToWorld({ x: event.clientX, y: event.clientY }, container);\n const id = `drop-${createId()}`;\n editor.addElement({\n id,\n position: { x: world.x - payload.size.width / 2, y: world.y - payload.size.height / 2 },\n size: payload.size,\n shapeId: payload.shapeId,\n });\n editor.setSelection([id]);\n ghostOverlayRef.current?.destroy();\n ghostOverlayRef.current = null;\n dragPayloadRef.current = null;\n };\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>{demo.description}</p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n <div style={{ display: 'flex', gap: 16, marginBottom: 12, alignItems: 'stretch' }}>\n <div\n style={{\n minWidth: 220,\n border: '1px dashed #b0b0b0',\n borderRadius: 8,\n padding: 12,\n background: '#fafafa',\n }}\n >\n <div style={{ fontWeight: 600, marginBottom: 8 }}>External Toolbox</div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {externalToolboxItems.map((item) => (\n <button\n key={item.id}\n draggable\n onDragStart={(event) => handleToolboxDragStart(event, item)}\n onDragEnd={handleToolboxDragEnd}\n style={{ padding: '8px 10px', textAlign: 'left', cursor: 'grab' }}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n <div\n style={{\n minWidth: 240,\n border: '1px solid #d6d6d6',\n borderRadius: 8,\n padding: 12,\n background: '#ffffff',\n }}\n >\n <div style={{ fontWeight: 600, marginBottom: 8 }}>Ghost Settings</div>\n <label htmlFor=\"ghost-shape-select\" style={{ display: 'block', fontSize: 12, marginBottom: 4 }}>\n Shape\n </label>\n <select\n id=\"ghost-shape-select\"\n value={ghostShapeId}\n onChange={(event) => setGhostShapeId(event.target.value)}\n style={{ width: '100%', marginBottom: 8, padding: '4px 6px' }}\n >\n {baseElementShapes.map((shape) => (\n <option key={shape.id} value={shape.id}>\n {shape.id}\n </option>\n ))}\n </select>\n <label htmlFor=\"ghost-width-input\" style={{ display: 'block', fontSize: 12, marginBottom: 4 }}>\n Width\n </label>\n <input\n id=\"ghost-width-input\"\n type=\"number\"\n min={20}\n value={ghostWidth}\n onChange={(event) => setGhostWidth(event.target.value)}\n style={{ width: '100%', marginBottom: 8, padding: '4px 6px' }}\n />\n <label htmlFor=\"ghost-height-input\" style={{ display: 'block', fontSize: 12, marginBottom: 4 }}>\n Height\n </label>\n <input\n id=\"ghost-height-input\"\n type=\"number\"\n min={20}\n value={ghostHeight}\n onChange={(event) => setGhostHeight(event.target.value)}\n style={{ width: '100%', marginBottom: 8, padding: '4px 6px' }}\n />\n <div style={{ fontSize: 12, color: '#666' }}>Drag a toolbox item to preview the ghost.</div>\n </div>\n <div style={{ fontSize: 13, lineHeight: 1.5, maxWidth: 420 }}>\n <strong>Host flow:</strong> keep drag data in your app, then on drop call <code>editor.clientToWorld</code>\n with <code>event.clientX</code>/<code>event.clientY</code> and the stage container. The example centers the\n dropped element at the cursor.\n </div>\n </div>\n <DisplayBoxStage\n containerRef={containerRef}\n onDragOver={handleStageDragOver}\n onDragLeave={handleStageDragLeave}\n onDrop={handleStageDrop}\n />\n </section>\n );\n};\n\nexport default ExternalDragDropDemo;\r\n","import React, { useMemo, useState } from 'react';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoActionHelpers } from '../types';\nimport { createId } from '../../utils/ids';\nimport { defaultSvgPath, defaultSvgPathSize } from './shared';\nimport { svgPathDemoConfig } from './svgPathDemo';\n\nconst SvgPathDemo = () => {\n const demo = svgPathDemoConfig;\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = useMemo(() => ({ nextOffset }), [nextOffset]);\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n const [svgPathInput, setSvgPathInput] = useState(defaultSvgPath);\n\n const handleAddSvgElement = () => {\n const editor = editorRef.current;\n const container = containerRef.current;\n const path = svgPathInput.trim();\n if (!editor || !container || !path) return;\n const shapeId = `svg-shape-${createId()}`;\n const size = defaultSvgPathSize;\n editor.registerShape({ id: shapeId, svgPath: path });\n const rect = container.getBoundingClientRect();\n const world = editor.clientToWorld(\n { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 },\n container,\n );\n const offset = nextOffset();\n const id = `svg-element-${createId()}`;\n editor.addElement({\n id,\n position: { x: world.x - size.width / 2 + offset, y: world.y - size.height / 2 + offset },\n size,\n shapeId,\n });\n editor.setSelection([id]);\n };\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>{demo.description}</p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) 200px',\n gap: 12,\n marginBottom: 12,\n alignItems: 'start',\n }}\n >\n <div>\n <label htmlFor=\"svg-path-input\" style={{ fontWeight: 600, display: 'block', marginBottom: 6 }}>\n SVG Path\n </label>\n <textarea\n id=\"svg-path-input\"\n value={svgPathInput}\n onChange={(event) => setSvgPathInput(event.target.value)}\n rows={3}\n style={{ width: '100%', resize: 'vertical', padding: '6px 8px' }}\n />\n <div style={{ fontSize: 12, color: '#555', marginTop: 6 }}>\n Example: <code>{defaultSvgPath}</code>\n </div>\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <button onClick={handleAddSvgElement} style={{ padding: '8px 12px' }} disabled={!svgPathInput.trim()}>\n Add SVG Element\n </button>\n <div style={{ fontSize: 12, color: '#555' }}>\n Size: {defaultSvgPathSize.width} x {defaultSvgPathSize.height}\n </div>\n </div>\n </div>\n <DisplayBoxStage containerRef={containerRef} />\n </section>\n );\n};\n\nexport default SvgPathDemo;\r\n","import React from 'react';\nimport DisplayBoxControls from '../DisplayBoxControls';\nimport DisplayBoxStage from '../DisplayBoxStage';\nimport useDemoControls from '../useDemoControls';\nimport useDemoEditor from '../useDemoEditor';\nimport useOffsetSequence from '../useOffsetSequence';\nimport type { DemoConfig, DemoActionHelpers } from '../types';\n\ntype SimpleDemoProps = {\n demo: DemoConfig;\n beforeStage?: React.ReactNode;\n stageHandlers?: {\n onDragOver?: (event: React.DragEvent<HTMLDivElement>) => void;\n onDragLeave?: () => void;\n onDrop?: (event: React.DragEvent<HTMLDivElement>) => void;\n };\n};\n\nconst SimpleDemo = ({ demo, beforeStage, stageHandlers }: SimpleDemoProps) => {\n const { containerRef, editorRef, diagramState, selection, snapEnabled, setSnapEnabled } = useDemoEditor({\n createState: demo.createState,\n elementShapes: demo.elementShapes,\n portShapes: demo.portShapes,\n router: demo.router,\n snapDefault: demo.snapDefault,\n });\n\n const nextOffset = useOffsetSequence();\n const actionHelpers: DemoActionHelpers = React.useMemo(() => ({ nextOffset }), [nextOffset]);\n\n const controls = useDemoControls({\n demo,\n editorRef,\n diagramState,\n selection,\n snapEnabled,\n setSnapEnabled,\n actionHelpers,\n });\n\n return (\n <section>\n <div style={{ marginBottom: 12 }}>\n <h2 style={{ marginTop: 0, marginBottom: 4 }}>{demo.title}</h2>\n <p style={{ marginTop: 0 }}>{demo.description}</p>\n </div>\n <DisplayBoxControls\n actions={demo.actions}\n snapEnabled={controls.snapEnabled}\n selectedLinkRouting={controls.selectedLinkRouting}\n canToggleLinkRouting={controls.canToggleLinkRouting}\n onReload={controls.handleReload}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onResetViewport={controls.handleResetViewport}\n onToggleSnap={controls.handleToggleSnap}\n onManualRender={controls.handleManualRender}\n onToggleLinkRouting={controls.handleToggleLinkRouting}\n onAction={controls.handleAction}\n />\n {beforeStage}\n <DisplayBoxStage\n containerRef={containerRef}\n onDragOver={stageHandlers?.onDragOver}\n onDragLeave={stageHandlers?.onDragLeave}\n onDrop={stageHandlers?.onDrop}\n stageStyle={demo.stageStyle}\n />\n </section>\n );\n};\n\nexport default SimpleDemo;\r\n","import React from 'react';\nimport SimpleDemo from './SimpleDemo';\nimport { obstacleRoutingDemoConfig } from './obstacleRoutingDemo';\n\nconst ObstacleRoutingDemo = () => (\n <SimpleDemo\n demo={obstacleRoutingDemoConfig}\n beforeStage={\n <div\n style={{\n marginBottom: 12,\n padding: '10px 12px',\n borderRadius: 8,\n border: '1px solid #2d2d2d',\n background: '#f4f4f4',\n }}\n >\n <strong>Expected routing behavior</strong>\n <ul style={{ margin: '6px 0 0 16px' }}>\n <li>Links between top nodes should route around the blocking element.</li>\n <li>Sibling links inside a shared parent should ignore the parent as an obstacle.</li>\n <li>Parent-child links should stay within the parent and avoid the child interior when ports are on edges.</li>\n <li>Grandchild links should ignore shared ancestors (parent + grandparent containers).</li>\n </ul>\n </div>\n }\n />\n);\n\nexport default ObstacleRoutingDemo;\n","import React from 'react';\nimport type { DemoConfig, DemoDefinition } from '../types';\nimport { basicDemoConfig } from './basicDemo';\nimport { linkPortCreationDemoConfig } from './linkPortCreationDemo';\nimport { nestedDemoConfig } from './nestedDemo';\nimport { customDemoConfig } from './customDemo';\nimport { textDemoConfig } from './textDemo';\nimport { selectionDemoConfig } from './selectionDemo';\nimport { eventHandlersDemoConfig } from './eventHandlersDemo';\nimport { engineEventsDemoConfig } from './engineEventsDemo';\nimport { linkCancelDemoConfig } from './linkCancelDemo';\nimport { autoLayoutDemoConfig } from './autoLayoutDemo';\nimport { externalDragDropDemoConfig } from './externalDragDropDemo';\nimport { shapeGalleryDemoConfig } from './shapeGalleryDemo';\nimport { svgPathDemoConfig } from './svgPathDemo';\nimport { multiLevelTreeDemoConfig } from './multiLevelTreeDemo';\nimport { multipleElementsDemoConfig } from './multipleElementsDemo';\nimport { portConstraintsDemoConfig } from './portConstraintsDemo';\nimport { portBorderDemoConfig } from './portBorderDemo';\nimport { childConstraintsDemoConfig } from './childConstraintsDemo';\nimport { gridOverlayDemoConfig } from './gridOverlayDemo';\nimport { routingDemoConfig } from './routingDemo';\nimport { obstacleRoutingDemoConfig } from './obstacleRoutingDemo';\nimport { linkBendHandlesDemoConfig } from './linkBendHandlesDemo';\nimport EventHandlersDemo from './EventHandlersDemoTab';\nimport EngineEventsDemo from './EngineEventsDemoTab';\nimport LinkCancelDemo from './LinkCancelDemoTab';\nimport AutoLayoutDemo from './AutoLayoutDemoTab';\nimport ExternalDragDropDemo from './ExternalDragDropDemoTab';\nimport SvgPathDemo from './SvgPathDemoTab';\nimport SimpleDemo from './SimpleDemo';\nimport ObstacleRoutingDemo from './ObstacleRoutingDemoTab';\n\nexport {\n baseElementShapes,\n basePortShapes,\n customGalleryShapes,\n defaultGhostSize,\n defaultSvgPath,\n defaultSvgPathSize,\n externalToolboxItems,\n} from './shared';\n\nconst wrapSimpleDemo = (demo: DemoConfig) => () => <SimpleDemo demo={demo} />;\n\nexport const demoTabs: DemoDefinition[] = [\n {\n id: basicDemoConfig.id,\n title: basicDemoConfig.title,\n description: basicDemoConfig.description,\n Component: wrapSimpleDemo(basicDemoConfig),\n },\n {\n id: linkPortCreationDemoConfig.id,\n title: linkPortCreationDemoConfig.title,\n description: linkPortCreationDemoConfig.description,\n Component: wrapSimpleDemo(linkPortCreationDemoConfig),\n },\n {\n id: nestedDemoConfig.id,\n title: nestedDemoConfig.title,\n description: nestedDemoConfig.description,\n Component: wrapSimpleDemo(nestedDemoConfig),\n },\n {\n id: customDemoConfig.id,\n title: customDemoConfig.title,\n description: customDemoConfig.description,\n Component: wrapSimpleDemo(customDemoConfig),\n },\n {\n id: textDemoConfig.id,\n title: textDemoConfig.title,\n description: textDemoConfig.description,\n Component: wrapSimpleDemo(textDemoConfig),\n },\n {\n id: selectionDemoConfig.id,\n title: selectionDemoConfig.title,\n description: selectionDemoConfig.description,\n Component: wrapSimpleDemo(selectionDemoConfig),\n },\n {\n id: eventHandlersDemoConfig.id,\n title: eventHandlersDemoConfig.title,\n description: eventHandlersDemoConfig.description,\n Component: EventHandlersDemo,\n },\n {\n id: engineEventsDemoConfig.id,\n title: engineEventsDemoConfig.title,\n description: engineEventsDemoConfig.description,\n Component: EngineEventsDemo,\n },\n {\n id: autoLayoutDemoConfig.id,\n title: autoLayoutDemoConfig.title,\n description: autoLayoutDemoConfig.description,\n Component: AutoLayoutDemo,\n },\n {\n id: linkCancelDemoConfig.id,\n title: linkCancelDemoConfig.title,\n description: linkCancelDemoConfig.description,\n Component: LinkCancelDemo,\n },\n {\n id: externalDragDropDemoConfig.id,\n title: externalDragDropDemoConfig.title,\n description: externalDragDropDemoConfig.description,\n Component: ExternalDragDropDemo,\n },\n {\n id: shapeGalleryDemoConfig.id,\n title: shapeGalleryDemoConfig.title,\n description: shapeGalleryDemoConfig.description,\n Component: wrapSimpleDemo(shapeGalleryDemoConfig),\n },\n {\n id: svgPathDemoConfig.id,\n title: svgPathDemoConfig.title,\n description: svgPathDemoConfig.description,\n Component: SvgPathDemo,\n },\n {\n id: multiLevelTreeDemoConfig.id,\n title: multiLevelTreeDemoConfig.title,\n description: multiLevelTreeDemoConfig.description,\n Component: wrapSimpleDemo(multiLevelTreeDemoConfig),\n },\n {\n id: multipleElementsDemoConfig.id,\n title: multipleElementsDemoConfig.title,\n description: multipleElementsDemoConfig.description,\n Component: wrapSimpleDemo(multipleElementsDemoConfig),\n },\n {\n id: portConstraintsDemoConfig.id,\n title: portConstraintsDemoConfig.title,\n description: portConstraintsDemoConfig.description,\n Component: wrapSimpleDemo(portConstraintsDemoConfig),\n },\n {\n id: portBorderDemoConfig.id,\n title: portBorderDemoConfig.title,\n description: portBorderDemoConfig.description,\n Component: wrapSimpleDemo(portBorderDemoConfig),\n },\n {\n id: childConstraintsDemoConfig.id,\n title: childConstraintsDemoConfig.title,\n description: childConstraintsDemoConfig.description,\n Component: wrapSimpleDemo(childConstraintsDemoConfig),\n },\n {\n id: gridOverlayDemoConfig.id,\n title: gridOverlayDemoConfig.title,\n description: gridOverlayDemoConfig.description,\n Component: wrapSimpleDemo(gridOverlayDemoConfig),\n },\n {\n id: routingDemoConfig.id,\n title: routingDemoConfig.title,\n description: routingDemoConfig.description,\n Component: wrapSimpleDemo(routingDemoConfig),\n },\n {\n id: obstacleRoutingDemoConfig.id,\n title: obstacleRoutingDemoConfig.title,\n description: obstacleRoutingDemoConfig.description,\n Component: ObstacleRoutingDemo,\n },\n {\n id: linkBendHandlesDemoConfig.id,\n title: linkBendHandlesDemoConfig.title,\n description: linkBendHandlesDemoConfig.description,\n Component: wrapSimpleDemo(linkBendHandlesDemoConfig),\n },\n];\r\n","import React, { useMemo, useState, useEffect } from 'react';\nimport DisplayBoxSidebar from './DisplayBoxSidebar';\nimport { demoTabs } from './demos';\nimport { DisplayBoxMetricsProvider } from './DisplayBoxMetricsContext';\nimport type { DisplayBoxMetrics, DemoDefinition } from './types';\n\nconst initialMetrics: DisplayBoxMetrics = {\n selection: [],\n counts: { elements: 0, ports: 0, links: 0, texts: 0 },\n viewport: { pan: { x: 0, y: 0 }, zoom: 1 },\n snapEnabled: false,\n};\n\nconst DisplayBox = () => {\n const [activeDemoId, setActiveDemoId] = useState('basic');\n const [metrics, setMetrics] = useState<DisplayBoxMetrics>(initialMetrics);\n\n const demos = useMemo<DemoDefinition[]>(() => demoTabs, []);\n const activeDemo = demos.find((demo) => demo.id === activeDemoId) ?? demos[0];\n const ActiveDemoComponent = activeDemo.Component;\n\n useEffect(() => {\n setMetrics(initialMetrics);\n }, [activeDemoId]);\n\n return (\n <div style={{ padding: 24 }}>\n <header style={{ marginBottom: 16 }}>\n <h1 style={{ marginBottom: 8 }}>Display Box</h1>\n <p style={{ margin: 0, maxWidth: 720 }}>\n Demo scenarios mapped from the legacy editor. Select a scenario to preview\n common behaviors for elements, ports, links, and labels.\n </p>\n </header>\n <DisplayBoxMetricsProvider onMetricsChange={setMetrics}>\n <div style={{ display: 'grid', gridTemplateColumns: '240px 1fr', gap: 24 }}>\n <DisplayBoxSidebar\n demos={demos}\n activeDemoId={activeDemoId}\n onSelectDemo={(id) => setActiveDemoId(id)}\n selection={metrics.selection}\n counts={metrics.counts}\n viewport={metrics.viewport}\n snapEnabled={metrics.snapEnabled}\n />\n <ActiveDemoComponent key={activeDemo.id} />\n </div>\n </DisplayBoxMetricsProvider>\n </div>\n );\n};\n\nexport default DisplayBox;\n"],"names":["cachedKonva","getKonva"],"mappings":"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","x_google_ignoreList":[2]}