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,6 +1,6 @@
1
- # Documentation Workflow Playbook
2
- > Navigation: [Docs Index](INDEX.md) | Previous: [Porting Checklist](PORTING_CHECKLIST.md)
3
- > Sections: [Workflow Steps](#3-step-by-step-workflow) | [Definition Of Done](#4-definition-of-done) | [Current Status](#6-current-status) | [Decisions Log](#7-decisions-log) | [Open Items](#8-open-items)
1
+ # Documentation Workflow Playbook
2
+ > Navigation: [Docs Index](INDEX.md) | Previous: [Porting Checklist](PORTING_CHECKLIST.md)
3
+ > Sections: [Workflow Steps](#3-step-by-step-workflow) | [Definition Of Done](#4-definition-of-done) | [Current Status](#6-current-status) | [Decisions Log](#7-decisions-log) | [Open Items](#8-open-items)
4
4
 
5
5
  ## 1. Purpose
6
6
  Create and maintain publish-ready docs (human + AI-consumable) for this library, with a repeatable process for future rework.
@@ -58,29 +58,27 @@ When resuming later:
58
58
  4. Update “Decisions Log” and “Open Items”.
59
59
  5. Re-run packaging verification.
60
60
 
61
- ## 6. Current Status
62
- - Last updated: 2026-02-26
63
- - Last completed step: 4
64
- - Next step: 5 (model/invariant docs deep pass)
65
- - Owner: Codex (with repository maintainers)
66
-
67
- ## 7. Decisions Log
68
- - 2026-02-26: Freeze first iteration scope to steps 1-4 so entry docs and API contract become publish-ready before deeper integration refactors.
69
- - 2026-02-26: Keep `docs/` as the shared source for both human and AI handoff docs, with `ai/*.json` mirroring key contract/invariant data.
70
- - 2026-02-26: Preserve legacy event name `element-drop` in docs and machine contract while documenting `elementDrop` as preferred.
71
- - 2026-02-26: Set `docs/INDEX.md` as the main docs entrypoint.
72
- - 2026-02-26: Flatten docs structure by moving `docs/ai/*` into `docs/*` and moving fixtures to `docs/fixtures/*`.
73
-
74
- ## 8. Open Items
75
- - [ ] Complete step 5: extend `STATE_INVARIANTS.md` with explicit ownership/cascade examples and coordinate edge cases.
76
- - [ ] Complete step 6: tighten host adapter mapping details for non-Konva renderer integrations.
77
- - [ ] Complete step 7: add at least one additional fixture covering manual link reroute + nested parent movement.
78
- - [ ] Complete step 9: run `npm pack --dry-run` after final doc pass and confirm package artifact list.
79
- - [ ] Complete step 10: run full terminology/link/version QA sweep across all docs.
80
- - [ ] Complete step 11: record final completion notes in changelog/task log.
81
-
82
- ## 9. Change Log
83
- - 2026-02-26: Completed workflow steps 1-4 for this iteration (audit, scope freeze, entry docs update, API contract expansion).
84
- - 2026-02-26: Updated `README.md`, `docs/INDEX.md`, `docs/API_CONTRACT.md`, and `ai/api-contract.json`.
85
- - 2026-02-26: Reorganized docs so core pages are under `docs/*` and fixtures are under `docs/fixtures/*`.
86
- - 2026-02-26: Added cross-page navigation and section-level links across core docs for human and AI readability.
61
+ ## 6. Current Status
62
+ - Last updated: 2026-04-25
63
+ - Last completed step: 10
64
+ - Next step: 7 (optional additional fixture coverage for deeper nested/manual-route scenarios)
65
+ - Owner: Codex (with repository maintainers)
66
+
67
+ ## 7. Decisions Log
68
+ - 2026-02-26: Freeze first iteration scope to steps 1-4 so entry docs and API contract become publish-ready before deeper integration refactors.
69
+ - 2026-02-26: Keep `docs/` as the shared source for both human and AI handoff docs, with `ai/*.json` mirroring key contract/invariant data.
70
+ - 2026-02-26: Preserve legacy event name `element-drop` in docs and machine contract while documenting `elementDrop` as preferred.
71
+ - 2026-02-26: Set `docs/INDEX.md` as the main docs entrypoint.
72
+ - 2026-02-26: Flatten docs structure by moving `docs/ai/*` into `docs/*` and moving fixtures to `docs/fixtures/*`.
73
+
74
+ ## 8. Open Items
75
+ - [ ] Complete step 7: add at least one additional fixture covering manual link reroute + nested parent movement.
76
+ - [ ] Complete step 11: record final completion notes in the external release changelog/task log used by maintainers.
77
+
78
+ ## 9. Change Log
79
+ - 2026-02-26: Completed workflow steps 1-4 for this iteration (audit, scope freeze, entry docs update, API contract expansion).
80
+ - 2026-02-26: Updated `README.md`, `docs/INDEX.md`, `docs/API_CONTRACT.md`, and `ai/api-contract.json`.
81
+ - 2026-02-26: Reorganized docs so core pages are under `docs/*` and fixtures are under `docs/fixtures/*`.
82
+ - 2026-02-26: Added cross-page navigation and section-level links across core docs for human and AI readability.
83
+ - 2026-04-25: Completed release-doc pass for `v0.2.2` including `v0.2.1` scope consolidation; refreshed API/event contracts in `docs/*` and `ai/*`.
84
+ - 2026-04-25: Ran release validations: `npm run typecheck`, `npm test -- --watchAll=false`, `npm run build`, `npm run rollup-build-lib`, and `npm pack --dry-run`.
package/docs/INDEX.md CHANGED
@@ -1,41 +1,41 @@
1
- # Library Documentation Index
2
-
3
- ## Purpose
4
- Primary documentation entrypoint for `orcasvn-react-diagrams`, designed to be readable by both humans and AI agents.
5
-
6
- ## Read Order
7
- 1. [Capabilities](CAPABILITIES.md)
8
- 2. [Architecture](ARCHITECTURE.md)
9
- 3. [API Contract](API_CONTRACT.md)
10
- 4. [State Invariants](STATE_INVARIANTS.md)
11
- 5. [Commands And Events](COMMANDS_EVENTS.md)
12
- 6. [Integration Playbook](INTEGRATION_PLAYBOOK.md)
13
- 7. [Porting Checklist](PORTING_CHECKLIST.md)
14
- 8. [Documentation Workflow](DOCUMENTATION_WORKFLOW.md)
15
-
16
- ## Section Map
17
- - [Supports](CAPABILITIES.md#supports), [Failure Modes](CAPABILITIES.md#failure-modes)
18
- - [Module Boundaries](ARCHITECTURE.md#module-boundaries), [Runtime Flow](ARCHITECTURE.md#runtime-flow)
19
- - [Entrypoints](API_CONTRACT.md#entrypoints), [Handle Methods](API_CONTRACT.md#handle-methods), [Events](API_CONTRACT.md#events-engineeventmap)
20
- - [Global Invariants](STATE_INVARIANTS.md#global), [Entity Rules](STATE_INVARIANTS.md#element)
21
- - [Command Model](COMMANDS_EVENTS.md#command-model), [Mutation To Event Mapping](COMMANDS_EVENTS.md#mutation-to-events-mapping)
22
- - [Path A (Editor)](INTEGRATION_PLAYBOOK.md#path-a-full-editor-konva-included), [Path B (Engine)](INTEGRATION_PLAYBOOK.md#path-b-engine-only-adapter)
23
- - [Porting Steps](PORTING_CHECKLIST.md#1-define-data-mapping), [Publish Checks](PORTING_CHECKLIST.md#8-npm-publish-accessibility-checks)
24
- - [Workflow Steps](DOCUMENTATION_WORKFLOW.md#3-step-by-step-workflow), [Current Status](DOCUMENTATION_WORKFLOW.md#6-current-status)
25
-
26
- ## Fixtures
27
- - [Empty State](fixtures/empty-state.json)
28
- - [Basic Linked Elements](fixtures/basic-linked-elements.json)
29
- - [Nested Layout](fixtures/nested-layout.json)
30
-
31
- ## Machine Discovery
32
- - Manifest: `../ai/manifest.json`
33
- - API JSON: `../ai/api-contract.json`
34
- - Invariants JSON: `../ai/invariants.json`
35
- - Fixtures: `fixtures/*.json`
36
-
37
- ## Source Of Truth Links
38
- - White paper: `../analysis/White paper/`
39
- - Development analysis: `../analysis/Development Analysis/`
40
- - Public API: `../src/api/`
41
- - Engine implementation: `../src/engine/DiagramEngine.ts`
1
+ # Library Documentation Index
2
+
3
+ ## Purpose
4
+ Primary documentation entrypoint for `orcasvn-react-diagrams`, designed to be readable by both humans and AI agents.
5
+
6
+ ## Read Order
7
+ 1. [Capabilities](CAPABILITIES.md)
8
+ 2. [Architecture](ARCHITECTURE.md)
9
+ 3. [API Contract](API_CONTRACT.md)
10
+ 4. [State Invariants](STATE_INVARIANTS.md)
11
+ 5. [Commands And Events](COMMANDS_EVENTS.md)
12
+ 6. [Integration Playbook](INTEGRATION_PLAYBOOK.md)
13
+ 7. [Porting Checklist](PORTING_CHECKLIST.md)
14
+ 8. [Documentation Workflow](DOCUMENTATION_WORKFLOW.md)
15
+
16
+ ## Section Map
17
+ - [Supports](CAPABILITIES.md#supports), [Failure Modes](CAPABILITIES.md#failure-modes)
18
+ - [Module Boundaries](ARCHITECTURE.md#module-boundaries), [Runtime Flow](ARCHITECTURE.md#runtime-flow)
19
+ - [Entrypoints](API_CONTRACT.md#entrypoints), [Handle Methods](API_CONTRACT.md#handle-methods), [Events](API_CONTRACT.md#events-engineeventmap)
20
+ - [Global Invariants](STATE_INVARIANTS.md#global), [Entity Rules](STATE_INVARIANTS.md#element)
21
+ - [Command Model](COMMANDS_EVENTS.md#command-model), [Mutation To Event Mapping](COMMANDS_EVENTS.md#mutation-to-events-mapping)
22
+ - [Path A (Editor)](INTEGRATION_PLAYBOOK.md#path-a-full-editor-konva-included), [Path B (Engine)](INTEGRATION_PLAYBOOK.md#path-b-engine-only-adapter)
23
+ - [Porting Steps](PORTING_CHECKLIST.md#1-define-data-mapping), [Publish Checks](PORTING_CHECKLIST.md#8-npm-publish-accessibility-checks)
24
+ - [Workflow Steps](DOCUMENTATION_WORKFLOW.md#3-step-by-step-workflow), [Current Status](DOCUMENTATION_WORKFLOW.md#6-current-status)
25
+
26
+ ## Fixtures
27
+ - [Empty State](fixtures/empty-state.json)
28
+ - [Basic Linked Elements](fixtures/basic-linked-elements.json)
29
+ - [Nested Layout](fixtures/nested-layout.json)
30
+
31
+ ## Machine Discovery
32
+ - Manifest: `../ai/manifest.json`
33
+ - API JSON: `../ai/api-contract.json`
34
+ - Invariants JSON: `../ai/invariants.json`
35
+ - Fixtures: `fixtures/*.json`
36
+
37
+ ## Source Of Truth Links
38
+ - White paper: `../analysis/White paper/`
39
+ - Development analysis: `../analysis/Development Analysis/`
40
+ - Public API: `../src/api/`
41
+ - Engine implementation: `../src/engine/DiagramEngine.ts`
@@ -1,54 +1,56 @@
1
- # Integration Playbook
2
- > Navigation: [Docs Index](INDEX.md) | Previous: [Commands And Events](COMMANDS_EVENTS.md) | Next: [Porting Checklist](PORTING_CHECKLIST.md)
3
- > Sections: [Objective](#objective) | [Path A](#path-a-full-editor-konva-included) | [Path B](#path-b-engine-only-adapter) | [Required Host Mappings](#required-host-mappings) | [Verification](#verification)
4
-
5
- ## Objective
6
- Embed this library into another diagram host while preserving deterministic state, events, and routing behavior.
7
-
8
- ## Path A: Full Editor (Konva Included)
9
- 1. Call `createDiagramEditor({ container, width, height, initialState })`.
10
- 2. Subscribe to:
11
- - `change` for persistence/sync
12
- - `selection` for host inspector panels
13
- - link/pointer events for UI workflows
14
- 3. Convert external pointer drops with `clientToWorld`.
15
- 4. Use `createOverlayShape` during host drag previews.
16
-
17
- ## Path B: Engine-Only Adapter
18
- 1. Implement `Renderer`:
19
- - `render(model)`
20
- - `renderSelection(ids)`
21
- - `createOverlayShape(config)`
22
- 2. Instantiate `createDiagramEngine({ renderer, router?, snapper?, textMeasurer? })`.
23
- 3. Bridge host pointer interactions into engine API methods/events.
24
- 4. Keep world/local coordinate mapping consistent with engine contracts.
25
-
26
- ## Required Host Mappings
27
- - Entity mapping:
28
- - host node -> `ElementData`
29
- - host port/anchor -> `PortData`
30
- - host edge -> `LinkData`
31
- - host label -> `TextData`
32
- - Event mapping:
33
- - host click -> `setSelection` / `emitElementClick`-equivalent behavior
34
- - host drag end -> `emitElementDrop`-equivalent payload
35
- - host link gesture -> `elementLinkStarted/Connecting/Ended` lifecycle
36
-
37
- ## Behavioral Checklist Per Integration Step
38
- - Preconditions
39
- - Entity IDs stable across re-renders.
40
- - Parent/child relationships available before routing/link creation.
41
- - Inputs
42
- - Pass world coordinates to engine mutators.
43
- - Outputs
44
- - Consume `change` event state as single source of truth.
45
- - Side effects
46
- - Expect reroutes after port/element movements.
47
- - Failure modes
48
- - If unresolved port refs exist, reroute/update is skipped.
49
-
50
- ## Verification
51
- - Replay fixtures in `fixtures/*.json`.
52
- - Compare emitted patches/events against expected flow in:
53
- - `src/engine/__tests__/DiagramEngine.test.ts`
54
- - `src/renderer/konva/__tests__/KonvaInteraction.test.ts`
1
+ # Integration Playbook
2
+ > Navigation: [Docs Index](INDEX.md) | Previous: [Commands And Events](COMMANDS_EVENTS.md) | Next: [Porting Checklist](PORTING_CHECKLIST.md)
3
+ > Sections: [Objective](#objective) | [Path A](#path-a-full-editor-konva-included) | [Path B](#path-b-engine-only-adapter) | [Required Host Mappings](#required-host-mappings) | [Verification](#verification)
4
+
5
+ ## Objective
6
+ Embed this library into another diagram host while preserving deterministic state, events, and routing behavior.
7
+
8
+ ## Path A: Full Editor (Konva Included)
9
+ 1. Call `createDiagramEditor({ container, width, height, initialState })`.
10
+ 2. Subscribe to:
11
+ - `change` for persistence/sync
12
+ - `selection` for host inspector panels
13
+ - link/pointer events for UI workflows
14
+ - deletion/text lifecycle events when host needs side-effects (`portDeleted`, `linkDeleted`, `textDeleted`, `textUpdated`)
15
+ 3. Convert external pointer drops with `clientToWorld`.
16
+ 4. Use `createOverlayShape` during host drag previews.
17
+ 5. For shape controls, pass `elementShapeHoverControls` and handle `onElementShapeHoverControlInteraction`.
18
+
19
+ ## Path B: Engine-Only Adapter
20
+ 1. Implement `Renderer`:
21
+ - `render(model)`
22
+ - `renderSelection(ids)`
23
+ - `createOverlayShape(config)`
24
+ 2. Instantiate `createDiagramEngine({ renderer, router?, snapper?, textMeasurer? })`.
25
+ 3. Bridge host pointer interactions into engine API methods/events.
26
+ 4. Keep world/local coordinate mapping consistent with engine contracts.
27
+
28
+ ## Required Host Mappings
29
+ - Entity mapping:
30
+ - host node -> `ElementData`
31
+ - host port/anchor -> `PortData`
32
+ - host edge -> `LinkData`
33
+ - host label -> `TextData`
34
+ - Event mapping:
35
+ - host click -> `setSelection` / `emitElementClick`-equivalent behavior
36
+ - host drag end -> `emitElementDrop`-equivalent payload
37
+ - host link gesture -> `elementLinkStarted/Connecting/Ended` lifecycle
38
+
39
+ ## Behavioral Checklist Per Integration Step
40
+ - Preconditions
41
+ - Entity IDs stable across re-renders.
42
+ - Parent/child relationships available before routing/link creation.
43
+ - Inputs
44
+ - Pass world coordinates to engine mutators.
45
+ - Outputs
46
+ - Consume `change` event state as single source of truth.
47
+ - Side effects
48
+ - Expect reroutes after port/element movements.
49
+ - Failure modes
50
+ - If unresolved port refs exist, reroute/update is skipped.
51
+
52
+ ## Verification
53
+ - Replay fixtures in `fixtures/*.json`.
54
+ - Compare emitted patches/events against expected flow in:
55
+ - `src/engine/__tests__/DiagramEngine.test.ts`
56
+ - `src/renderer/konva/__tests__/KonvaInteraction.test.ts`
@@ -1,58 +1,59 @@
1
- # Porting Checklist
2
- > Navigation: [Docs Index](INDEX.md) | Previous: [Integration Playbook](INTEGRATION_PLAYBOOK.md) | Next: [Documentation Workflow](DOCUMENTATION_WORKFLOW.md)
3
- > Sections: [Data Mapping](#1-define-data-mapping) | [Coordinate Semantics](#2-match-coordinate-semantics) | [Renderer Boundary](#3-implement-renderer-boundary-if-non-konva) | [Event Lifecycle](#5-event-lifecycle-compatibility) | [Fixture Validation](#7-run-fixture-based-validation) | [Publish Accessibility](#8-npm-publish-accessibility-checks)
4
-
5
- ## 1. Define Data Mapping
6
- - Map host model fields into:
7
- - `ElementData`
8
- - `PortData`
9
- - `LinkData`
10
- - `TextData`
11
- - Confirm owner-relative semantics for ports/texts.
12
-
13
- ## 2. Match Coordinate Semantics
14
- - Confirm world-to-local conversion for:
15
- - child elements
16
- - ports
17
- - owner-bound text
18
- - Validate `anchorCenter` behavior for element/port rendering.
19
-
20
- ## 3. Implement Renderer Boundary (if non-Konva)
21
- - Implement `Renderer` contract in `src/renderer/Renderer.ts`.
22
- - Support selection highlighting and overlay shape lifecycle.
23
- - Ensure incremental sync supports add/update/remove entity operations.
24
-
25
- ## 4. Route/Snap Strategy Compatibility
26
- - Port router to `RouterStrategy.route(source, target, context?)`.
27
- - Port snapper to `SnapStrategy.snap(point)`.
28
- - Validate manual-route endpoint updates preserve interior points.
29
-
30
- ## 5. Event Lifecycle Compatibility
31
- - Ensure host can emulate:
32
- - `elementDrop` + legacy `element-drop`
33
- - `paperClick`
34
- - `elementLinkStarted/Connecting/Ended`
35
- - `portMouseDown/portMouseUp`
36
-
37
- ## 6. Verify Cascading Deletes
38
- - Deleting element should remove descendant ports, connected links, owned texts.
39
- - Deleting port should remove connected links and owned texts.
40
- - Deleting link should remove owned texts.
41
-
42
- ## 7. Run Fixture-Based Validation
43
- - Load fixtures from `fixtures/*.json`.
44
- - Validate state snapshots before/after operations.
45
- - Validate emitted patch entities and event payload shape.
46
-
47
- ## 8. npm Publish Accessibility Checks
48
- - Ensure package includes:
49
- - `docs/*`
50
- - `ai/manifest.json`
51
- - machine JSON (`ai/api-contract.json`, `ai/invariants.json`)
52
- - Validate with `npm pack --dry-run`.
53
-
54
- ## Verification References
55
- - `src/renderer/Renderer.ts`
56
- - `src/engine/DiagramEngine.ts`
57
- - `src/models/DiagramModel.ts`
58
- - `src/engine/__tests__/DiagramEngine.test.ts`
1
+ # Porting Checklist
2
+ > Navigation: [Docs Index](INDEX.md) | Previous: [Integration Playbook](INTEGRATION_PLAYBOOK.md) | Next: [Documentation Workflow](DOCUMENTATION_WORKFLOW.md)
3
+ > Sections: [Data Mapping](#1-define-data-mapping) | [Coordinate Semantics](#2-match-coordinate-semantics) | [Renderer Boundary](#3-implement-renderer-boundary-if-non-konva) | [Event Lifecycle](#5-event-lifecycle-compatibility) | [Fixture Validation](#7-run-fixture-based-validation) | [Publish Accessibility](#8-npm-publish-accessibility-checks)
4
+
5
+ ## 1. Define Data Mapping
6
+ - Map host model fields into:
7
+ - `ElementData`
8
+ - `PortData`
9
+ - `LinkData`
10
+ - `TextData`
11
+ - Confirm owner-relative semantics for ports/texts.
12
+
13
+ ## 2. Match Coordinate Semantics
14
+ - Confirm world-to-local conversion for:
15
+ - child elements
16
+ - ports
17
+ - owner-bound text
18
+ - Validate `anchorCenter` behavior for element/port rendering.
19
+
20
+ ## 3. Implement Renderer Boundary (if non-Konva)
21
+ - Implement `Renderer` contract in `src/renderer/Renderer.ts`.
22
+ - Support selection highlighting and overlay shape lifecycle.
23
+ - Ensure incremental sync supports add/update/remove entity operations.
24
+
25
+ ## 4. Route/Snap Strategy Compatibility
26
+ - Port router to `RouterStrategy.route(source, target, context?)`.
27
+ - Port snapper to `SnapStrategy.snap(point)`.
28
+ - Validate manual-route endpoint updates preserve interior points.
29
+
30
+ ## 5. Event Lifecycle Compatibility
31
+ - Ensure host can emulate:
32
+ - `elementDrop` + legacy `element-drop`
33
+ - `paperClick`
34
+ - `elementLinkStarted/Connecting/Ended`
35
+ - `portMouseDown/portMouseUp`
36
+ - deletion and text lifecycle events (`portDeleted`, `linkDeleted`, `textDeleted`, `textUpdated`)
37
+
38
+ ## 6. Verify Cascading Deletes
39
+ - Deleting element should remove descendant ports, connected links, owned texts.
40
+ - Deleting port should remove connected links and owned texts.
41
+ - Deleting link should remove owned texts.
42
+
43
+ ## 7. Run Fixture-Based Validation
44
+ - Load fixtures from `fixtures/*.json`.
45
+ - Validate state snapshots before/after operations.
46
+ - Validate emitted patch entities and event payload shape.
47
+
48
+ ## 8. npm Publish Accessibility Checks
49
+ - Ensure package includes:
50
+ - `docs/*`
51
+ - `ai/manifest.json`
52
+ - machine JSON (`ai/api-contract.json`, `ai/invariants.json`)
53
+ - Validate with `npm pack --dry-run`.
54
+
55
+ ## Verification References
56
+ - `src/renderer/Renderer.ts`
57
+ - `src/engine/DiagramEngine.ts`
58
+ - `src/models/DiagramModel.ts`
59
+ - `src/engine/__tests__/DiagramEngine.test.ts`
@@ -1,56 +1,60 @@
1
- # State Invariants
2
- > Navigation: [Docs Index](INDEX.md) | Previous: [API Contract](API_CONTRACT.md) | Next: [Commands And Events](COMMANDS_EVENTS.md)
3
- > Sections: [Global](#global) | [Element](#element) | [Port](#port) | [Link](#link) | [Text](#text) | [Selection And View](#selection-and-view) | [Failure Modes](#failure-modes)
4
-
5
- ## Global
6
- - State shape always serializes as:
7
- - `elements[]`, `ports[]`, `links[]`, `texts[]`
8
- - IDs are expected unique by entity type.
9
- - Missing references are tolerated at runtime (non-throwing), but produce degraded behavior.
10
-
11
- ## Element
12
- - Position is local to parent if `parentId` exists; otherwise world.
13
- - World position resolves by summing ancestor positions.
14
- - If `anchorCenter=true`, world top-left is shifted by half size.
15
- - Deleting an element cascades to:
16
- - child ports
17
- - links connected through removed ports
18
- - owned texts
19
-
20
- ## Port
21
- - Port position is local to owner element.
22
- - Default `anchorCenter=true` in model constructor.
23
- - Moving ports can be constrained by:
24
- - `moveMode: inside|border`
25
- - `style.moveAxis`
26
- - `style.moveBounds`
27
- - Port removal cascades to connected links and owned texts.
28
-
29
- ## Link
30
- - `routing` defaults to `auto`.
31
- - Auto routing recomputes from router strategy and normalized endpoints.
32
- - Manual routing preserves interior bends on endpoint movement.
33
- - Links with unresolved source/target world positions are skipped by reroute/update paths.
34
-
35
- ## Text
36
- - `ownerId` can reference element, port, or link.
37
- - Owned text position is stored owner-relative.
38
- - Text with missing owner behaves as standalone world-position text.
39
- - Size is measured on add/update when using engine text measurer.
40
-
41
- ## Selection And View
42
- - `setSelection` emits:
43
- - `selection`
44
- - plus derived `elementSelected`/`portSelected`/`textSelected`
45
- - `setViewport` emits `change` with `entity=viewport` and does not force render directly.
46
-
47
- ## Failure Modes
48
- - Non-existent target IDs: operation is no-op.
49
- - Orphan ownership references: text persists, ownership index may not bind to entity.
50
- - Invalid or missing routing endpoints: route update is skipped.
51
-
52
- ## Verification References
53
- - `src/models/DiagramModel.ts`
54
- - `src/models/__tests__/DiagramModel.test.ts`
55
- - `src/engine/DiagramEngine.ts`
56
- - `src/engine/__tests__/DiagramEngine.test.ts`
1
+ # State Invariants
2
+ > Navigation: [Docs Index](INDEX.md) | Previous: [API Contract](API_CONTRACT.md) | Next: [Commands And Events](COMMANDS_EVENTS.md)
3
+ > Sections: [Global](#global) | [Element](#element) | [Port](#port) | [Link](#link) | [Text](#text) | [Selection And View](#selection-and-view) | [Failure Modes](#failure-modes)
4
+
5
+ ## Global
6
+ - State shape always serializes as:
7
+ - `elements[]`, `ports[]`, `links[]`, `texts[]`
8
+ - IDs are expected unique by entity type.
9
+ - Missing references are tolerated at runtime (non-throwing), but produce degraded behavior.
10
+
11
+ ## Element
12
+ - Position is local to parent if `parentId` exists; otherwise world.
13
+ - World position resolves by summing ancestor positions.
14
+ - If `anchorCenter=true`, world top-left is shifted by half size.
15
+ - Deleting an element cascades to:
16
+ - child ports
17
+ - links connected through removed ports
18
+ - owned texts
19
+
20
+ ## Port
21
+ - Port position is local to owner element.
22
+ - Default `anchorCenter=true` in model constructor.
23
+ - Default `orientToHostBorder=true` in model constructor.
24
+ - Moving ports can be constrained by:
25
+ - `moveMode: inside|border`
26
+ - element-level `portMovement.moveMode: free|inside|border|anchors`
27
+ - anchor presets via `portMovement.anchorConstraint`
28
+ - `style.moveAxis`
29
+ - `style.moveBounds`
30
+ - Port removal cascades to connected links and owned texts.
31
+
32
+ ## Link
33
+ - `routing` defaults to `auto`.
34
+ - Auto routing recomputes from router strategy and normalized endpoints.
35
+ - Manual routing preserves interior bends on endpoint movement.
36
+ - Links with unresolved source/target world positions are skipped by reroute/update paths.
37
+
38
+ ## Text
39
+ - `ownerId` can reference element, port, or link.
40
+ - Owned text position is stored owner-relative.
41
+ - Text with missing owner behaves as standalone world-position text.
42
+ - Size is measured on add/update when using engine text measurer.
43
+ - Text layout can compute derived `displayContent`, `displayOffset`, and `displayClipSize`.
44
+
45
+ ## Selection And View
46
+ - `setSelection` emits:
47
+ - `selection`
48
+ - plus derived `elementSelected`/`portSelected`/`textSelected`
49
+ - `setViewport` emits `change` with `entity=viewport` and does not force render directly.
50
+
51
+ ## Failure Modes
52
+ - Non-existent target IDs: operation is no-op.
53
+ - Orphan ownership references: text persists, ownership index may not bind to entity.
54
+ - Invalid or missing routing endpoints: route update is skipped.
55
+
56
+ ## Verification References
57
+ - `src/models/DiagramModel.ts`
58
+ - `src/models/__tests__/DiagramModel.test.ts`
59
+ - `src/engine/DiagramEngine.ts`
60
+ - `src/engine/__tests__/DiagramEngine.test.ts`
@@ -1,52 +1,52 @@
1
- {
2
- "name": "basic-linked-elements",
3
- "description": "Two elements with one port each and one auto-routed link.",
4
- "state": {
5
- "elements": [
6
- {
7
- "id": "e1",
8
- "position": { "x": 40, "y": 80 },
9
- "size": { "width": 120, "height": 80 },
10
- "shapeId": "default"
11
- },
12
- {
13
- "id": "e2",
14
- "position": { "x": 320, "y": 80 },
15
- "size": { "width": 120, "height": 80 },
16
- "shapeId": "default"
17
- }
18
- ],
19
- "ports": [
20
- {
21
- "id": "p1",
22
- "elementId": "e1",
23
- "position": { "x": 120, "y": 40 },
24
- "shapeId": "port"
25
- },
26
- {
27
- "id": "p2",
28
- "elementId": "e2",
29
- "position": { "x": 0, "y": 40 },
30
- "shapeId": "port"
31
- }
32
- ],
33
- "links": [
34
- {
35
- "id": "l1",
36
- "sourcePortId": "p1",
37
- "targetPortId": "p2",
38
- "points": [],
39
- "routing": "auto"
40
- }
41
- ],
42
- "texts": [
43
- {
44
- "id": "t1",
45
- "content": "Link Label",
46
- "position": { "x": 0, "y": -12 },
47
- "ownerId": "l1"
48
- }
49
- ]
50
- }
51
- }
52
-
1
+ {
2
+ "name": "basic-linked-elements",
3
+ "description": "Two elements with one port each and one auto-routed link.",
4
+ "state": {
5
+ "elements": [
6
+ {
7
+ "id": "e1",
8
+ "position": { "x": 40, "y": 80 },
9
+ "size": { "width": 120, "height": 80 },
10
+ "shapeId": "default"
11
+ },
12
+ {
13
+ "id": "e2",
14
+ "position": { "x": 320, "y": 80 },
15
+ "size": { "width": 120, "height": 80 },
16
+ "shapeId": "default"
17
+ }
18
+ ],
19
+ "ports": [
20
+ {
21
+ "id": "p1",
22
+ "elementId": "e1",
23
+ "position": { "x": 120, "y": 40 },
24
+ "shapeId": "port"
25
+ },
26
+ {
27
+ "id": "p2",
28
+ "elementId": "e2",
29
+ "position": { "x": 0, "y": 40 },
30
+ "shapeId": "port"
31
+ }
32
+ ],
33
+ "links": [
34
+ {
35
+ "id": "l1",
36
+ "sourcePortId": "p1",
37
+ "targetPortId": "p2",
38
+ "points": [],
39
+ "routing": "auto"
40
+ }
41
+ ],
42
+ "texts": [
43
+ {
44
+ "id": "t1",
45
+ "content": "Link Label",
46
+ "position": { "x": 0, "y": -12 },
47
+ "ownerId": "l1"
48
+ }
49
+ ]
50
+ }
51
+ }
52
+
@@ -1,11 +1,11 @@
1
- {
2
- "name": "empty-state",
3
- "description": "Baseline state with no entities.",
4
- "state": {
5
- "elements": [],
6
- "ports": [],
7
- "links": [],
8
- "texts": []
9
- }
10
- }
11
-
1
+ {
2
+ "name": "empty-state",
3
+ "description": "Baseline state with no entities.",
4
+ "state": {
5
+ "elements": [],
6
+ "ports": [],
7
+ "links": [],
8
+ "texts": []
9
+ }
10
+ }
11
+