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,144 +1,200 @@
1
- # API Contract
2
- > Navigation: [Docs Index](INDEX.md) | Previous: [Architecture](ARCHITECTURE.md) | Next: [State Invariants](STATE_INVARIANTS.md)
3
- > Sections: [Entrypoints](#entrypoints) | [Editor Config](#editor-config-diagrameditorconfig) | [Engine Config](#engine-config-diagramengineconfig) | [Public State Types](#public-state-types) | [Handle Methods](#handle-methods) | [Events](#events-engineeventmap) | [Behavioral Notes](#behavioral-notes)
4
-
5
- ## Entrypoints
6
- - `createDiagramEditor(config): DiagramEditorHandle`
7
- - `createDiagramEngine(config): DiagramEngineHandle`
8
-
9
- Primary definitions:
10
- - `src/api/types.ts`
11
- - `src/api/createDiagramEditor.ts`
12
- - `src/engine/DiagramEngine.ts`
13
-
14
- ## Editor Config (`DiagramEditorConfig`)
15
-
16
- ### Required
17
- - `container: HTMLDivElement | string`
18
-
19
- ### Optional
20
- - `width?: number` (default: `900`)
21
- - `height?: number` (default: `560`)
22
- - `initialState?: DiagramState`
23
- - `elementShapes?: SimpleShape[]`
24
- - `portShapes?: SimpleShape[]`
25
- - `panKey?: 'Control' | 'Shift' | 'Alt' | 'Meta'` (default: `'Control'`)
26
- - `onChange?: (event: EngineChangeEvent) => void`
27
- - `onSelection?: (event: EngineSelectionEvent) => void`
28
-
29
- ## Engine Config (`DiagramEngineConfig`)
30
-
31
- ### Required
32
- - `renderer: Renderer`
33
-
34
- ### Optional
35
- - `scheduler?: RenderScheduler`
36
- - `router?: RouterStrategy`
37
- - `snapper?: SnapStrategy`
38
- - `shapeRegistry?: ShapeRegistry`
39
- - `textMeasurer?: TextMeasurer`
40
-
41
- Defaults:
42
- - `scheduler`: `RenderScheduler`
43
- - `router`: `ObstacleRouter`
44
- - `snapper`: `DefaultSnapper`
45
- - `shapeRegistry`: `ShapeRegistry`
46
- - `textMeasurer`: `CanvasTextMeasurer`
47
-
48
- ## Public State Types
49
-
50
- ### `DiagramState`
51
- - `elements: ElementData[]` (required)
52
- - `ports: PortData[]` (required)
53
- - `links: LinkData[]` (required)
54
- - `texts: TextData[]` (required)
55
-
56
- ### `ElementData`
57
- - Required: `id`, `position`, `size`, `shapeId`
58
- - Optional: `style`, `portIds`, `textIds`, `parentId`, `moveMode`, `anchorCenter`, `layout`
59
- - Defaults at runtime/model:
60
- - `portIds`: `[]`
61
- - `textIds`: `[]`
62
- - `parentId`: `null`
63
-
64
- ### `ElementLayout`
65
- - Required: `mode: 'manual' | 'horizontal' | 'vertical'`
66
- - Optional: `padding?: number | { x: number; y: number }`, `gap?: number`, `align?: 'start' | 'center' | 'end'`
67
- - Layout defaults when `mode !== 'manual'`:
68
- - `padding`: `12` (or `{ x: 12, y: 12 }`)
69
- - `gap`: `12`
70
- - `align`: `'center'`
71
-
72
- ### `PortData`
73
- - Required: `id`, `elementId`, `position`
74
- - Optional: `shapeId`, `size`, `style`, `textIds`, `moveMode`, `anchorCenter`
75
- - Defaults at runtime/model:
76
- - `textIds`: `[]`
77
- - `anchorCenter`: `true`
78
-
79
- ### `LinkData`
80
- - Required: `id`, `sourcePortId`, `targetPortId`, `points`
81
- - Optional: `routing`, `style`, `textIds`
82
- - Defaults at runtime/model:
83
- - `routing`: `'auto'`
84
- - `textIds`: `[]`
85
-
86
- ### `TextData`
87
- - Required: `id`, `content`, `position`
88
- - Optional: `size`, `style`, `ownerId`
89
- - Defaults at runtime/model:
90
- - `ownerId`: `null`
91
-
92
- ## Handle Methods
93
-
94
- ### Shared (`DiagramEngineHandle` and `DiagramEditorHandle`)
95
- - State: `load`, `getState`, `getViewport`
96
- - Coordinates: `clientToWorld`
97
- - Overlay: `createOverlayShape`
98
- - Events: `on`
99
- - Element: `addElement`, `moveElementTo`, `resizeElement`, `setElementLayout`, `removeElement`
100
- - Port: `addPortToElement`, `movePortTo`, `removePort`
101
- - Link: `addLink`, `updateLinkPoints`, `setLinkRoutingMode`, `rerouteAllLinks`, `rerouteLinks`, `removeLink`
102
- - Text: `addText`, `updateText`, `moveTextTo`, `removeText`
103
- - Selection/viewport/config: `setSelection`, `setViewport`, `setRouting`, `setSnapping`
104
- - Rendering: `registerShape`, `render`
105
-
106
- ### Editor Only (`DiagramEditorHandle`)
107
- - `resize(width, height)`
108
- - `destroy()`
109
-
110
- ## Events (`EngineEventMap`)
111
-
112
- - `change: EngineChangeEvent`
113
- - `selection: EngineSelectionEvent`
114
- - `config: EngineConfigEvent`
115
- - `elementDrop: ElementDropEvent`
116
- - `element-drop: ElementDropEvent` (deprecated legacy event name)
117
- - `paperClick: PaperClickEvent`
118
- - `portMouseDown: PortMouseEvent`
119
- - `portMouseUp: PortMouseEvent`
120
- - `portMoved: PortMovedEvent`
121
- - `portSelected: PortSelectedEvent`
122
- - `elementClick: ElementPointerEvent`
123
- - `elementDragged: ElementDropEvent`
124
- - `elementMoved: ElementMovedEvent`
125
- - `elementResized: ElementResizedEvent`
126
- - `elementDeleted: ElementDeletedEvent`
127
- - `elementSelected: ElementSelectedEvent`
128
- - `elementLinkStarted: ElementLinkStartedEvent`
129
- - `elementLinkConnecting: ElementLinkConnectingEvent` (cancelable through `cancel()`)
130
- - `elementLinkEnded: ElementLinkEndedEvent`
131
- - `textSelected: TextSelectedEvent`
132
-
133
- ## Behavioral Notes
134
-
135
- - Missing IDs in most mutators are no-op (non-throwing).
136
- - `setViewport` emits a `change` patch with `entity: 'viewport'` and skips immediate render scheduling.
137
- - `clientToWorld` uses: `world = (client - containerRect - pan) / zoom`, with zoom fallback to `1` when zoom is `0`.
138
- - `rerouteLinks(ids)` skips manual links unless `options.includeManual === true`.
139
- - `updateLinkPoints` always marks the link as manual routing.
140
-
141
- ## Verification References
142
- - `src/api/__tests__/createDiagramEditor.test.ts`
143
- - `src/engine/__tests__/DiagramEngine.test.ts`
144
- - `src/renderer/konva/__tests__/KonvaInteraction.test.ts`
1
+ # API Contract
2
+ > Navigation: [Docs Index](INDEX.md) | Previous: [Architecture](ARCHITECTURE.md) | Next: [State Invariants](STATE_INVARIANTS.md)
3
+ > Sections: [Entrypoints](#entrypoints) | [Editor Config](#editor-config-diagrameditorconfig) | [Engine Config](#engine-config-diagramengineconfig) | [Public State Types](#public-state-types) | [Handle Methods](#handle-methods) | [Events](#events-engineeventmap) | [Behavioral Notes](#behavioral-notes)
4
+
5
+ ## Entrypoints
6
+ - `createDiagramEditor(config): DiagramEditorHandle`
7
+ - `createDiagramEngine(config): DiagramEngineHandle`
8
+
9
+ Primary definitions:
10
+ - `src/api/types.ts`
11
+ - `src/api/createDiagramEditor.ts`
12
+ - `src/engine/DiagramEngine.ts`
13
+
14
+ ## Editor Config (`DiagramEditorConfig`)
15
+
16
+ ### Required
17
+ - `container: HTMLDivElement | string`
18
+
19
+ ### Optional
20
+ - `width?: number` (default: `900`)
21
+ - `height?: number` (default: `560`)
22
+ - `initialState?: DiagramState`
23
+ - `elementShapes?: SimpleShape[]`
24
+ - `portShapes?: SimpleShape[]`
25
+ - `panKey?: 'Control' | 'Shift' | 'Alt' | 'Meta'` (default: `'Control'`)
26
+ - `elementShapeHoverControls?: ElementShapeHoverControls`
27
+ - `onElementShapeHoverControlInteraction?: (event: ElementShapeHoverControlInteractionEvent) => void`
28
+ - `onElementShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void` (deprecated callback contract)
29
+ - `onChange?: (event: EngineChangeEvent) => void`
30
+ - `onSelection?: (event: EngineSelectionEvent) => void`
31
+
32
+ ## Engine Config (`DiagramEngineConfig`)
33
+
34
+ ### Required
35
+ - `renderer: Renderer`
36
+
37
+ ### Optional
38
+ - `scheduler?: RenderScheduler`
39
+ - `router?: RouterStrategy`
40
+ - `snapper?: SnapStrategy`
41
+ - `shapeRegistry?: ShapeRegistry`
42
+ - `textMeasurer?: TextMeasurer`
43
+
44
+ Defaults:
45
+ - `scheduler`: `RenderScheduler`
46
+ - `router`: `ObstacleRouter`
47
+ - `snapper`: `DefaultSnapper`
48
+ - `shapeRegistry`: `ShapeRegistry`
49
+ - `textMeasurer`: `CanvasTextMeasurer`
50
+
51
+ ## Public State Types
52
+
53
+ ### `DiagramState`
54
+ - `elements: ElementData[]` (required)
55
+ - `ports: PortData[]` (required)
56
+ - `links: LinkData[]` (required)
57
+ - `texts: TextData[]` (required)
58
+
59
+ ### `ElementData`
60
+ - Required: `id`, `position`, `size`, `shapeId`
61
+ - Optional: `style`, `portIds`, `textIds`, `parentId`, `moveMode`, `anchorCenter`, `layout`, `portMovement`
62
+ - Defaults at runtime/model:
63
+ - `portIds`: `[]`
64
+ - `textIds`: `[]`
65
+ - `parentId`: `null`
66
+
67
+ ### `ElementLayout`
68
+ - Required: `mode: 'manual' | 'horizontal' | 'vertical'`
69
+ - Optional: `padding?: number | { x: number; y: number }`, `gap?: number`, `align?: 'start' | 'center' | 'end'`
70
+ - Optional fit controls: `childFitMainAxis?: 'none' | 'distribute'`, `childFitCrossAxis?: 'none' | 'stretch'`, `childFitMinSize?: Partial<Size>`, `childFitMaxSize?: Partial<Size>`
71
+ - Layout defaults when `mode !== 'manual'`:
72
+ - `padding`: `12` (or `{ x: 12, y: 12 }`)
73
+ - `gap`: `12`
74
+ - `align`: `'center'`
75
+
76
+ ### `ElementPortMovementPolicy`
77
+ - `moveMode: 'free' | 'inside' | 'border' | 'anchors'`
78
+ - Optional `anchorConstraint?: PortAnchorConstraint`
79
+
80
+ ### `PortAnchorConstraint`
81
+ - `preset: 'vertices' | 'cardinal'`
82
+ - Optional `fallback?: 'nearest'`
83
+
84
+ ### `PortData`
85
+ - Required: `id`, `elementId`, `position`
86
+ - Optional: `shapeId`, `size`, `style`, `textIds`, `moveMode`, `anchorCenter`, `orientToHostBorder`, `currentAnchorId`
87
+ - Defaults at runtime/model:
88
+ - `textIds`: `[]`
89
+ - `anchorCenter`: `true`
90
+ - `orientToHostBorder`: `true`
91
+
92
+ ### `LinkData`
93
+ - Required: `id`, `sourcePortId`, `targetPortId`, `points`
94
+ - Optional: `routing`, `style`, `textIds`
95
+ - Defaults at runtime/model:
96
+ - `routing`: `'auto'`
97
+ - `textIds`: `[]`
98
+
99
+ ### `TextData`
100
+ - Required: `id`, `content`, `position`
101
+ - Optional: `size`, `style`, `ownerId`, `layout`, `displayContent`, `displayOffset`, `displayClipSize`
102
+ - Defaults at runtime/model:
103
+ - `ownerId`: `null`
104
+ - `displayContent`: mirrors `content` at creation
105
+
106
+ ### `TextLayout`
107
+ - Optional `boundsMode?: 'owner-width' | 'owner-box' | 'fixed'`
108
+ - Optional `wrap?: 'none' | 'word' | 'char'`
109
+ - Optional `overflow?: 'clip' | 'ellipsis-end' | 'ellipsis-middle' | 'ellipsis-start'`
110
+ - Optional `padding?: number`
111
+ - Optional `maxLines?: number`
112
+ - Optional `fixedSize?: Size`
113
+
114
+ ### Hover Control Contracts
115
+ - `ElementShapeHoverControls`:
116
+ - Preferred: `controls?: ShapeControlDefinition[]`
117
+ - Legacy deprecated: `edge`, `vertex`, `priority`
118
+ - `ShapeControlDefinition`:
119
+ - Required: `id`, `targetKind`, `icon`
120
+ - Optional: `targetIndices`, `ellipseMidPoints`, `allowAllTargets`, `visibilityTriggers`, `lineStyle`, `tolerance`
121
+ - `ShapeControlTargetKind`: `'vertex' | 'edge' | 'midpoint' | 'ellipse-midpoint'`
122
+ - `ShapeControlVisibilityTrigger`: `'element-hover' | 'target-hover'`
123
+ - `ElementShapeHoverControlInteractionEvent`:
124
+ - lifecycle: `eventType` is `'click' | 'drag-start' | 'drag-move' | 'drag-end'`
125
+ - includes `controlId`, `elementId`, `targetKind`, `targetIndex`, `pointer`, and resolved target payload (`edge`, `vertex`, or `ellipseMidPoint`) when available
126
+
127
+ ## Handle Methods
128
+
129
+ ### Shared (`DiagramEngineHandle` and `DiagramEditorHandle`)
130
+ - State: `load`, `getState`, `getViewport`
131
+ - Coordinates: `clientToWorld`
132
+ - Overlay: `createOverlayShape`
133
+ - Events: `on`
134
+ - Element: `addElement`, `moveElementTo`, `resizeElement`, `setElementLayout`, `removeElement`
135
+ - Port: `addPortToElement`, `movePortTo`, `removePort`
136
+ - Link: `addLink`, `updateLinkPoints`, `setLinkRoutingMode`, `rerouteAllLinks`, `rerouteLinks`, `removeLink`
137
+ - Text: `addText`, `updateText`, `moveTextTo`, `removeText`
138
+ - Selection/viewport/config: `setSelection`, `setViewport`, `setRouting`, `setSnapping`
139
+ - Rendering: `registerShape`, `render`
140
+
141
+ ### Editor Only (`DiagramEditorHandle`)
142
+ - `resize(width, height)`
143
+ - `setElementShapeHoverControls(controls?)`
144
+ - `destroy()`
145
+
146
+ ### `registerShape` Definition Contract
147
+ - Required: `id`
148
+ - Optional behavior hooks:
149
+ - `baseRotation?: number`
150
+ - `draw?(context)`
151
+ - `createNode?(model)`
152
+ - `svgPath?: string`
153
+ - `svgSize?: Size`
154
+ - `projectToBorder?(point, rect)`
155
+ - `resolveBorderSide?(point, rect)`
156
+ - `resolvePortAnchors?(rect, options)`
157
+ - `resolveHoverGeometry?(rect)`
158
+ - `resolveEllipseMidPoints?(rect)`
159
+
160
+ ## Events (`EngineEventMap`)
161
+
162
+ - `change: EngineChangeEvent`
163
+ - `selection: EngineSelectionEvent`
164
+ - `config: EngineConfigEvent`
165
+ - `elementDrop: ElementDropEvent`
166
+ - `element-drop: ElementDropEvent` (deprecated legacy event name)
167
+ - `paperClick: PaperClickEvent`
168
+ - `portMouseDown: PortMouseEvent`
169
+ - `portMouseUp: PortMouseEvent`
170
+ - `portMoved: PortMovedEvent`
171
+ - `portSelected: PortSelectedEvent`
172
+ - `elementClick: ElementPointerEvent`
173
+ - `elementDragged: ElementDropEvent`
174
+ - `elementMoved: ElementMovedEvent`
175
+ - `elementResized: ElementResizedEvent`
176
+ - `elementDeleted: ElementDeletedEvent`
177
+ - `portDeleted: PortDeletedEvent`
178
+ - `linkDeleted: LinkDeletedEvent`
179
+ - `textDeleted: TextDeletedEvent`
180
+ - `textUpdated: TextUpdatedEvent`
181
+ - `elementSelected: ElementSelectedEvent`
182
+ - `elementLinkStarted: ElementLinkStartedEvent`
183
+ - `elementLinkConnecting: ElementLinkConnectingEvent` (cancelable through `cancel()`)
184
+ - `elementLinkEnded: ElementLinkEndedEvent`
185
+ - `textSelected: TextSelectedEvent`
186
+
187
+ ## Behavioral Notes
188
+
189
+ - Missing IDs in most mutators are no-op (non-throwing).
190
+ - `setViewport` emits a `change` patch with `entity: 'viewport'` and skips immediate render scheduling.
191
+ - `clientToWorld` uses: `world = (client - containerRect - pan) / zoom`, with zoom fallback to `1` when zoom is `0`.
192
+ - `rerouteLinks(ids)` skips manual links unless `options.includeManual === true`.
193
+ - `updateLinkPoints` always marks the link as manual routing.
194
+ - Text layout/overflow resolution updates `displayContent` and emits `textUpdated` when `updateText` is called.
195
+ - Deletion mutators emit cascading `portDeleted`/`linkDeleted`/`textDeleted` for removed dependent entities.
196
+
197
+ ## Verification References
198
+ - `src/api/__tests__/createDiagramEditor.test.ts`
199
+ - `src/engine/__tests__/DiagramEngine.test.ts`
200
+ - `src/renderer/konva/__tests__/KonvaInteraction.test.ts`
@@ -1,31 +1,32 @@
1
- # Architecture
2
- > Navigation: [Docs Index](INDEX.md) | Previous: [Capabilities](CAPABILITIES.md) | Next: [API Contract](API_CONTRACT.md)
3
- > Sections: [Module Boundaries](#module-boundaries) | [Runtime Flow](#runtime-flow) | [Integration Boundary](#integration-boundary) | [Key Sources](#key-sources)
4
-
5
- ## Module Boundaries
6
- - `src/api/`: public entry points and type contracts.
7
- - `src/engine/`: command execution, event bus, selection, viewport, routing/snap integration.
8
- - `src/models/`: in-memory state graph for elements/ports/links/texts.
9
- - `src/renderer/`: renderer interface and shape registry contracts.
10
- - `src/renderer/konva/`: Konva implementation for render + interaction overlays.
11
- - `src/strategies/`: pluggable router and snap strategy interfaces/defaults.
12
- - `src/measure/`: text measuring abstraction and canvas implementation.
13
- - `src/utils/`: geometry, patch helpers, guards, ids.
14
-
15
- ## Runtime Flow
16
- 1. Host calls API mutator.
17
- 2. Engine executes command(s) against model.
18
- 3. Engine emits patches + latest state via `change`.
19
- 4. Scheduler requests render.
20
- 5. Renderer syncs model to view nodes.
21
-
22
- ## Integration Boundary
23
- - Engine core does not require Konva if you use `createDiagramEngine` with a custom `Renderer`.
24
- - `createDiagramEditor` wires Konva stage, hit testing, and interaction defaults.
25
-
26
- ## Key Sources
27
- - `src/api/createDiagramEditor.ts`
28
- - `src/engine/DiagramEngine.ts`
29
- - `src/models/DiagramModel.ts`
30
- - `src/renderer/Renderer.ts`
31
- - `analysis/Development Analysis/folder-structure.md`
1
+ # Architecture
2
+ > Navigation: [Docs Index](INDEX.md) | Previous: [Capabilities](CAPABILITIES.md) | Next: [API Contract](API_CONTRACT.md)
3
+ > Sections: [Module Boundaries](#module-boundaries) | [Runtime Flow](#runtime-flow) | [Integration Boundary](#integration-boundary) | [Key Sources](#key-sources)
4
+
5
+ ## Module Boundaries
6
+ - `src/api/`: public entry points and type contracts.
7
+ - `src/engine/`: command execution, event bus, selection, viewport, routing/snap integration.
8
+ - `src/engine/`: `DiagramEngine` orchestration plus extracted services (`TextLayoutService`, `AutoLayoutService`, `LinkRoutingService`, `MutationPipeline`).
9
+ - `src/models/`: in-memory state graph for elements/ports/links/texts.
10
+ - `src/renderer/`: renderer interface and shape registry contracts.
11
+ - `src/renderer/konva/`: Konva implementation for render + interaction overlays.
12
+ - `src/strategies/`: pluggable router and snap strategy interfaces/defaults.
13
+ - `src/measure/`: text measuring abstraction and canvas implementation.
14
+ - `src/utils/`: geometry, patch helpers, guards, ids.
15
+
16
+ ## Runtime Flow
17
+ 1. Host calls API mutator.
18
+ 2. Engine executes command(s) against model.
19
+ 3. Engine emits patches + latest state via `change`.
20
+ 4. Scheduler requests render.
21
+ 5. Renderer syncs model to view nodes.
22
+
23
+ ## Integration Boundary
24
+ - Engine core does not require Konva if you use `createDiagramEngine` with a custom `Renderer`.
25
+ - `createDiagramEditor` wires Konva stage, hit testing, and interaction defaults.
26
+
27
+ ## Key Sources
28
+ - `src/api/createDiagramEditor.ts`
29
+ - `src/engine/DiagramEngine.ts`
30
+ - `src/models/DiagramModel.ts`
31
+ - `src/renderer/Renderer.ts`
32
+ - `analysis/Development Analysis/folder-structure.md`
@@ -1,38 +1,40 @@
1
- # Capabilities
2
- > Navigation: [Docs Index](INDEX.md) | Next: [Architecture](ARCHITECTURE.md)
3
- > Sections: [Supports](#supports) | [Does Not Support](#does-not-support) | [Preconditions](#preconditions) | [Side Effects](#side-effects) | [Failure Modes](#failure-modes) | [Verification References](#verification-references)
4
-
5
- ## Supports
6
- - CRUD for elements, ports, links, and texts.
7
- - Nested elements with world/local coordinate resolution.
8
- - Link routing modes: `auto` and `manual`.
9
- - Manual bend editing while preserving interior bends during endpoint moves.
10
- - Selection, marquee selection, and viewport pan/zoom.
11
- - Shape registration by canvas draw, custom node factory, or SVG path metadata.
12
- - Overlay shapes for external drag ghosting and previews.
13
- - Event-driven host integration (`change`, `selection`, pointer/link lifecycle events).
14
-
15
- ## Does Not Support
16
- - Real-time collaborative editing.
17
- - Rich text editing beyond plain text entry.
18
- - WebGL rendering backend in this package.
19
- - Server-side conflict resolution or persistence workflows.
20
-
21
- ## Preconditions
22
- - Runtime: Node `>=18.17 <19` for this repo toolchain.
23
- - Browser host with Konva-compatible canvas environment when using `createDiagramEditor`.
24
-
25
- ## Side Effects
26
- - Engine mutators emit `change` events with patches and latest state.
27
- - Selection updates emit both `selection` and derived entity-specific selection events.
28
- - Rendering is scheduled after model changes, except viewport patches that set `render: false`.
29
-
30
- ## Failure Modes
31
- - Missing IDs are ignored in most mutators (no throw, no mutation).
32
- - Link reroute skips links whose endpoints are unresolved.
33
- - Text owner references can be orphaned; text remains standalone in world coordinates.
34
-
35
- ## Verification References
36
- - `src/engine/__tests__/DiagramEngine.test.ts`
37
- - `src/renderer/konva/__tests__/KonvaInteraction.test.ts`
38
- - `src/models/__tests__/DiagramModel.test.ts`
1
+ # Capabilities
2
+ > Navigation: [Docs Index](INDEX.md) | Next: [Architecture](ARCHITECTURE.md)
3
+ > Sections: [Supports](#supports) | [Does Not Support](#does-not-support) | [Preconditions](#preconditions) | [Side Effects](#side-effects) | [Failure Modes](#failure-modes) | [Verification References](#verification-references)
4
+
5
+ ## Supports
6
+ - CRUD for elements, ports, links, and texts.
7
+ - Nested elements with world/local coordinate resolution.
8
+ - Link routing modes: `auto` and `manual`.
9
+ - Manual bend editing while preserving interior bends during endpoint moves.
10
+ - Selection, marquee selection, and viewport pan/zoom.
11
+ - Shape registration by canvas draw, custom node factory, or SVG path metadata.
12
+ - Shape-aware host border projection and anchor-constrained port placement.
13
+ - Element shape hover controls with edge/vertex/midpoint targets and interaction callbacks.
14
+ - Overlay shapes for external drag ghosting and previews.
15
+ - Event-driven host integration (`change`, `selection`, pointer/link lifecycle events).
16
+
17
+ ## Does Not Support
18
+ - Real-time collaborative editing.
19
+ - Rich text editing beyond plain text entry.
20
+ - WebGL rendering backend in this package.
21
+ - Server-side conflict resolution or persistence workflows.
22
+
23
+ ## Preconditions
24
+ - Runtime: Node `>=20.17.0 <21.0.0` for this repo toolchain.
25
+ - Browser host with Konva-compatible canvas environment when using `createDiagramEditor`.
26
+
27
+ ## Side Effects
28
+ - Engine mutators emit `change` events with patches and latest state.
29
+ - Selection updates emit both `selection` and derived entity-specific selection events.
30
+ - Rendering is scheduled after model changes, except viewport patches that set `render: false`.
31
+
32
+ ## Failure Modes
33
+ - Missing IDs are ignored in most mutators (no throw, no mutation).
34
+ - Link reroute skips links whose endpoints are unresolved.
35
+ - Text owner references can be orphaned; text remains standalone in world coordinates.
36
+
37
+ ## Verification References
38
+ - `src/engine/__tests__/DiagramEngine.test.ts`
39
+ - `src/renderer/konva/__tests__/KonvaInteraction.test.ts`
40
+ - `src/models/__tests__/DiagramModel.test.ts`
@@ -1,60 +1,65 @@
1
- # Commands And Events
2
- > Navigation: [Docs Index](INDEX.md) | Previous: [State Invariants](STATE_INVARIANTS.md) | Next: [Integration Playbook](INTEGRATION_PLAYBOOK.md)
3
- > Sections: [Command Model](#command-model) | [Patch Entities](#patch-entities) | [Mutation To Events](#mutation-to-events-mapping) | [Interaction Lifecycle](#interaction-lifecycle-events) | [Failure Modes](#failure-modes)
4
-
5
- ## Command Model
6
- - Engine mutators route through command factories in `src/engine/EngineCommands.ts`.
7
- - Each command applies model mutation and returns one or more patches.
8
- - `emitChange` publishes `{ patches, state }` on `change`.
9
-
10
- ## Patch Entities
11
- - `element`
12
- - `port`
13
- - `link`
14
- - `text`
15
- - `selection`
16
- - `viewport`
17
- - `config`
18
-
19
- ## Mutation To Events Mapping
20
- - `add/move/resize/remove element`
21
- - Always `change`
22
- - Plus `elementMoved`, `elementResized`, or `elementDeleted` when applicable
23
- - `add/move/remove port`
24
- - Always `change`
25
- - Plus `portMoved` on effective movement
26
- - `add/update/remove link`
27
- - Always `change`
28
- - `add/update/move/remove text`
29
- - Always `change`
30
- - `setSelection/toggleSelection/deleteSelection`
31
- - `selection` plus derived selected entity events
32
- - `setViewport`
33
- - `change` with viewport patch (`render: false`)
34
- - `setRouting/setSnapping/registerShape`
35
- - `config` events
36
-
37
- ## Interaction Lifecycle Events
38
- - Drag element:
39
- - `elementDrop`
40
- - legacy `element-drop`
41
- - `elementDragged`
42
- - Click paper: `paperClick`
43
- - Linking:
44
- - `elementLinkStarted`
45
- - `elementLinkConnecting` (cancelable via `cancel()`)
46
- - `elementLinkEnded`
47
-
48
- ## Preconditions
49
- - Events are emitted only after engine state transition logic.
50
- - Derived events require selected IDs to resolve to known entity types.
51
-
52
- ## Failure Modes
53
- - Unknown IDs do not emit entity-specific movement/selection events.
54
- - Canceled link creation emits `elementLinkEnded` with `cancelled=true` and no link creation.
55
-
56
- ## Verification References
57
- - `src/engine/EngineCommands.ts`
58
- - `src/engine/DiagramEngine.ts`
59
- - `src/engine/__tests__/DiagramEngine.test.ts`
60
- - `src/renderer/konva/__tests__/KonvaInteraction.test.ts`
1
+ # Commands And Events
2
+ > Navigation: [Docs Index](INDEX.md) | Previous: [State Invariants](STATE_INVARIANTS.md) | Next: [Integration Playbook](INTEGRATION_PLAYBOOK.md)
3
+ > Sections: [Command Model](#command-model) | [Patch Entities](#patch-entities) | [Mutation To Events](#mutation-to-events-mapping) | [Interaction Lifecycle](#interaction-lifecycle-events) | [Failure Modes](#failure-modes)
4
+
5
+ ## Command Model
6
+ - Engine mutators route through command factories in `src/engine/EngineCommands.ts`.
7
+ - Each command applies model mutation and returns one or more patches.
8
+ - `emitChange` publishes `{ patches, state }` on `change`.
9
+
10
+ ## Patch Entities
11
+ - `element`
12
+ - `port`
13
+ - `link`
14
+ - `text`
15
+ - `selection`
16
+ - `viewport`
17
+ - `config`
18
+
19
+ ## Mutation To Events Mapping
20
+ - `add/move/resize/remove element`
21
+ - Always `change`
22
+ - Plus `elementMoved`, `elementResized`, or `elementDeleted` when applicable
23
+ - `add/move/remove port`
24
+ - Always `change`
25
+ - Plus `portMoved` on effective movement
26
+ - Plus `portDeleted` on removal (including cascade removal)
27
+ - `add/update/remove link`
28
+ - Always `change`
29
+ - Plus `linkDeleted` on removal (including cascade removal)
30
+ - `add/update/move/remove text`
31
+ - Always `change`
32
+ - Plus `textUpdated` when `updateText` resolves display layout
33
+ - Plus `textDeleted` on removal (including cascade removal)
34
+ - `setSelection/toggleSelection/deleteSelection`
35
+ - `selection` plus derived selected entity events
36
+ - `setViewport`
37
+ - `change` with viewport patch (`render: false`)
38
+ - `setRouting/setSnapping/registerShape`
39
+ - `config` events
40
+
41
+ ## Interaction Lifecycle Events
42
+ - Drag element:
43
+ - `elementDrop`
44
+ - legacy `element-drop`
45
+ - `elementDragged`
46
+ - Click paper: `paperClick`
47
+ - Linking:
48
+ - `elementLinkStarted`
49
+ - `elementLinkConnecting` (cancelable via `cancel()`)
50
+ - `elementLinkEnded`
51
+
52
+ ## Preconditions
53
+ - Events are emitted only after engine state transition logic.
54
+ - Derived events require selected IDs to resolve to known entity types.
55
+
56
+ ## Failure Modes
57
+ - Unknown IDs do not emit entity-specific movement/selection events.
58
+ - Canceled link creation emits `elementLinkEnded` with `cancelled=true` and no link creation.
59
+ - `textUpdated` emits only when target text exists; missing IDs remain no-op.
60
+
61
+ ## Verification References
62
+ - `src/engine/EngineCommands.ts`
63
+ - `src/engine/DiagramEngine.ts`
64
+ - `src/engine/__tests__/DiagramEngine.test.ts`
65
+ - `src/renderer/konva/__tests__/KonvaInteraction.test.ts`