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.
- package/README.md +99 -88
- package/ai/api-contract.json +257 -205
- package/ai/invariants.json +43 -41
- package/ai/manifest.json +34 -34
- package/dist/cjs/{displaybox.js → examples.js} +5974 -1413
- package/dist/cjs/index.js +3889 -1112
- package/dist/cjs/types/api/createDiagramEditor.d.ts +7 -2
- package/dist/cjs/types/api/types.d.ts +178 -0
- package/dist/cjs/types/displaybox/demos/DeletionEventsDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/ShapeHoverControlsDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/TextLayoutDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/deletionEventsDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/rotatedCreationDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/roundedRectRadiusDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/shapeBorderMovementDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/shapeHoverControlsDemo.d.ts +10 -0
- package/dist/cjs/types/displaybox/demos/textDemo.d.ts +4 -0
- package/dist/cjs/types/displaybox/useDemoEditor.d.ts +5 -2
- package/dist/cjs/types/engine/AutoLayoutService.d.ts +24 -0
- package/dist/cjs/types/engine/DiagramEngine.d.ts +32 -14
- package/dist/cjs/types/engine/EngineCommands.d.ts +4 -1
- package/dist/cjs/types/engine/LinkRoutingService.d.ts +35 -0
- package/dist/cjs/types/engine/MutationPipeline.d.ts +23 -0
- package/dist/cjs/types/engine/TextLayoutService.d.ts +40 -0
- package/dist/cjs/types/examples/index.d.ts +2 -0
- package/dist/cjs/types/measure/textStyleDefaults.d.ts +9 -0
- package/dist/cjs/types/models/DiagramModel.d.ts +1 -0
- package/dist/cjs/types/models/ElementModel.d.ts +1 -0
- package/dist/cjs/types/models/PortModel.d.ts +3 -0
- package/dist/cjs/types/models/TextModel.d.ts +8 -0
- package/dist/cjs/types/renderer/RenderTypes.d.ts +34 -1
- package/dist/cjs/types/renderer/konva/KonvaHitTester.d.ts +1 -1
- package/dist/cjs/types/renderer/konva/KonvaInteraction.d.ts +53 -3
- package/dist/cjs/types/renderer/konva/KonvaNodeFactory.d.ts +18 -1
- package/dist/cjs/types/renderer/konva/KonvaRenderer.d.ts +49 -2
- package/dist/cjs/types/shapes/BuiltInShapes.d.ts +107 -0
- package/dist/cjs/types/shapes/__tests__/BuiltInShapes.test.d.ts +1 -0
- package/dist/cjs/types/shapes/index.d.ts +1 -0
- package/dist/cjs/types/utils/__tests__/borderGeometry.test.d.ts +1 -0
- package/dist/cjs/types/utils/borderGeometry.d.ts +6 -0
- package/dist/cjs/types/utils/geometry.d.ts +22 -0
- package/dist/esm/{displaybox.js → examples.js} +5969 -1414
- package/dist/esm/examples.js.map +1 -0
- package/dist/esm/index.js +3890 -1113
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/api/createDiagramEditor.d.ts +7 -2
- package/dist/esm/types/api/types.d.ts +178 -0
- package/dist/esm/types/displaybox/demos/DeletionEventsDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/ShapeHoverControlsDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/TextLayoutDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/deletionEventsDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/rotatedCreationDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/roundedRectRadiusDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/shapeBorderMovementDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/shapeHoverControlsDemo.d.ts +10 -0
- package/dist/esm/types/displaybox/demos/textDemo.d.ts +4 -0
- package/dist/esm/types/displaybox/useDemoEditor.d.ts +5 -2
- package/dist/esm/types/engine/AutoLayoutService.d.ts +24 -0
- package/dist/esm/types/engine/DiagramEngine.d.ts +32 -14
- package/dist/esm/types/engine/EngineCommands.d.ts +4 -1
- package/dist/esm/types/engine/LinkRoutingService.d.ts +35 -0
- package/dist/esm/types/engine/MutationPipeline.d.ts +23 -0
- package/dist/esm/types/engine/TextLayoutService.d.ts +40 -0
- package/dist/esm/types/examples/index.d.ts +2 -0
- package/dist/esm/types/measure/textStyleDefaults.d.ts +9 -0
- package/dist/esm/types/models/DiagramModel.d.ts +1 -0
- package/dist/esm/types/models/ElementModel.d.ts +1 -0
- package/dist/esm/types/models/PortModel.d.ts +3 -0
- package/dist/esm/types/models/TextModel.d.ts +8 -0
- package/dist/esm/types/renderer/RenderTypes.d.ts +34 -1
- package/dist/esm/types/renderer/konva/KonvaHitTester.d.ts +1 -1
- package/dist/esm/types/renderer/konva/KonvaInteraction.d.ts +53 -3
- package/dist/esm/types/renderer/konva/KonvaNodeFactory.d.ts +18 -1
- package/dist/esm/types/renderer/konva/KonvaRenderer.d.ts +49 -2
- package/dist/esm/types/shapes/BuiltInShapes.d.ts +107 -0
- package/dist/esm/types/shapes/__tests__/BuiltInShapes.test.d.ts +1 -0
- package/dist/esm/types/shapes/index.d.ts +1 -0
- package/dist/esm/types/utils/__tests__/borderGeometry.test.d.ts +1 -0
- package/dist/esm/types/utils/borderGeometry.d.ts +6 -0
- package/dist/esm/types/utils/geometry.d.ts +22 -0
- package/dist/{displaybox.d.ts → examples.d.ts} +169 -5
- package/dist/index.d.ts +233 -2
- package/docs/API_CONTRACT.md +200 -144
- package/docs/ARCHITECTURE.md +32 -31
- package/docs/CAPABILITIES.md +40 -38
- package/docs/COMMANDS_EVENTS.md +65 -60
- package/docs/DOCUMENTATION_WORKFLOW.md +27 -29
- package/docs/INDEX.md +41 -41
- package/docs/INTEGRATION_PLAYBOOK.md +56 -54
- package/docs/PORTING_CHECKLIST.md +59 -58
- package/docs/STATE_INVARIANTS.md +60 -56
- package/docs/fixtures/basic-linked-elements.json +52 -52
- package/docs/fixtures/empty-state.json +11 -11
- package/docs/fixtures/nested-layout.json +54 -54
- package/package.json +13 -16
- package/src/displaybox/demos/AutoLayoutDemoTab.tsx +501 -0
- package/src/displaybox/demos/DeletionEventsDemoTab.tsx +147 -0
- package/src/displaybox/demos/EngineEventsDemoTab.tsx +151 -0
- package/src/displaybox/demos/EventHandlersDemoTab.tsx +110 -0
- package/src/displaybox/demos/ExternalDragDropDemoTab.tsx +261 -0
- package/src/displaybox/demos/LinkCancelDemoTab.tsx +238 -0
- package/src/displaybox/demos/ObstacleRoutingDemoTab.tsx +30 -0
- package/src/displaybox/demos/ShapeHoverControlsDemoTab.tsx +558 -0
- package/src/displaybox/demos/SimpleDemo.tsx +73 -0
- package/src/displaybox/demos/SvgPathDemoTab.tsx +327 -0
- package/src/displaybox/demos/TextLayoutDemoTab.tsx +386 -0
- package/src/displaybox/demos/autoLayoutDemo.ts +111 -0
- package/src/displaybox/demos/basicDemo.ts +131 -0
- package/src/displaybox/demos/childConstraintsDemo.ts +65 -0
- package/src/displaybox/demos/customDemo.ts +59 -0
- package/src/displaybox/demos/deletionEventsDemo.ts +91 -0
- package/src/displaybox/demos/engineEventsDemo.ts +64 -0
- package/src/displaybox/demos/eventHandlersDemo.ts +41 -0
- package/src/displaybox/demos/externalDragDropDemo.ts +28 -0
- package/src/displaybox/demos/gridOverlayDemo.ts +50 -0
- package/src/displaybox/demos/index.tsx +217 -0
- package/src/displaybox/demos/linkBendHandlesDemo.ts +143 -0
- package/src/displaybox/demos/linkCancelDemo.ts +56 -0
- package/src/displaybox/demos/linkPortCreationDemo.ts +46 -0
- package/src/displaybox/demos/multiLevelTreeDemo.ts +120 -0
- package/src/displaybox/demos/multipleElementsDemo.ts +62 -0
- package/src/displaybox/demos/nestedDemo.ts +78 -0
- package/src/displaybox/demos/obstacleRoutingDemo.ts +176 -0
- package/src/displaybox/demos/portBorderDemo.ts +98 -0
- package/src/displaybox/demos/portConstraintsDemo.ts +175 -0
- package/src/displaybox/demos/rotatedCreationDemo.ts +185 -0
- package/src/displaybox/demos/roundedRectRadiusDemo.ts +93 -0
- package/src/displaybox/demos/routingDemo.ts +57 -0
- package/src/displaybox/demos/selectionDemo.ts +49 -0
- package/src/displaybox/demos/shapeBorderMovementDemo.ts +126 -0
- package/src/displaybox/demos/shapeGalleryDemo.ts +73 -0
- package/src/displaybox/demos/shapeHoverControlsDemo.ts +172 -0
- package/src/displaybox/demos/shared.ts +161 -0
- package/src/displaybox/demos/svgPathDemo.ts +71 -0
- package/src/displaybox/demos/textDemo.ts +62 -0
- package/src/displaybox/types.ts +66 -0
- package/src/examples/index.ts +21 -0
- package/displaybox/package.json +0 -5
- package/dist/cjs/types/components/BBoxDebugger.d.ts +0 -6
- package/dist/cjs/types/components/CloseIcon.d.ts +0 -6
- package/dist/cjs/types/components/LinkDebugger.d.ts +0 -8
- package/dist/cjs/types/components/editor.d.ts +0 -9
- package/dist/cjs/types/components/elementShowbox.d.ts +0 -3
- package/dist/cjs/types/components/elements/dragDropHandlerElement.d.ts +0 -7
- package/dist/cjs/types/components/elements/element.d.ts +0 -4
- package/dist/cjs/types/components/elements/elementWrapper.d.ts +0 -18
- package/dist/cjs/types/components/links/elementLink.d.ts +0 -4
- package/dist/cjs/types/components/links/index.d.ts +0 -2
- package/dist/cjs/types/components/links/point.d.ts +0 -11
- package/dist/cjs/types/components/paper.d.ts +0 -49
- package/dist/cjs/types/components/ports/index.d.ts +0 -2
- package/dist/cjs/types/components/ports/port.d.ts +0 -3
- package/dist/cjs/types/components/shapeShowbox.d.ts +0 -3
- package/dist/cjs/types/components/shapes/circle.d.ts +0 -9
- package/dist/cjs/types/components/shapes/customShape.d.ts +0 -7
- package/dist/cjs/types/components/shapes/halfCircle.d.ts +0 -9
- package/dist/cjs/types/components/shapes/index.d.ts +0 -7
- package/dist/cjs/types/components/shapes/polygon.d.ts +0 -8
- package/dist/cjs/types/components/shapes/rectangle.d.ts +0 -10
- package/dist/cjs/types/components/shapes/rectangularFrame.d.ts +0 -12
- package/dist/cjs/types/components/shapes/shapeWrapper.d.ts +0 -8
- package/dist/cjs/types/components/svgUtilsShowbox.d.ts +0 -3
- package/dist/cjs/types/components/texts/index.d.ts +0 -2
- package/dist/cjs/types/components/texts/text.d.ts +0 -4
- package/dist/cjs/types/components/viewControls/ruler.d.ts +0 -10
- package/dist/cjs/types/components/viewControls/selectionFrame.d.ts +0 -4
- package/dist/cjs/types/contexts/editorConfigurationContext.d.ts +0 -4
- package/dist/cjs/types/contexts/paperEventEmitterContext.d.ts +0 -45
- package/dist/cjs/types/contexts/zoomContext.d.ts +0 -16
- package/dist/cjs/types/contexts/zoomPanContext.d.ts +0 -23
- package/dist/cjs/types/displaybox/index.d.ts +0 -3
- package/dist/cjs/types/hooks/useKeyboardCommands.d.ts +0 -5
- package/dist/cjs/types/hooks/useSelectionFrame.d.ts +0 -6
- package/dist/cjs/types/logs/Logger.d.ts +0 -14
- package/dist/cjs/types/logs/configureLogger.d.ts +0 -4
- package/dist/cjs/types/main.d.ts +0 -8
- package/dist/cjs/types/mocks/customPortWithBuiltinShape.d.ts +0 -2
- package/dist/cjs/types/mocks/diamondElement.d.ts +0 -11
- package/dist/cjs/types/mocks/editorContext.d.ts +0 -2
- package/dist/cjs/types/mocks/editorContextElementMoveAsPort.d.ts +0 -2
- package/dist/cjs/types/mocks/editorContextForOptimizeRerender.d.ts +0 -2
- package/dist/cjs/types/mocks/editorContextMultipleElements.d.ts +0 -2
- package/dist/cjs/types/mocks/editorContextSingleElement.d.ts +0 -2
- package/dist/cjs/types/mocks/editorContextSingleElementTestEvents.d.ts +0 -2
- package/dist/cjs/types/mocks/editorContextTriggerRenderElements.d.ts +0 -2
- package/dist/cjs/types/mocks/editorContextWithElementAnchorCenter.d.ts +0 -2
- package/dist/cjs/types/mocks/port1.d.ts +0 -5
- package/dist/cjs/types/mocks/port2.d.ts +0 -5
- package/dist/cjs/types/mocks/portIn.d.ts +0 -4
- package/dist/cjs/types/mocks/rectangularFrameElement.d.ts +0 -11
- package/dist/cjs/types/mocks/textsWithFlexBox.d.ts +0 -2
- package/dist/cjs/types/models/IEditorConfiguration.d.ts +0 -7
- package/dist/cjs/types/models/IEditorContext.d.ts +0 -56
- package/dist/cjs/types/models/IElement.d.ts +0 -46
- package/dist/cjs/types/models/IElementLink.d.ts +0 -23
- package/dist/cjs/types/models/IElementLinkProps.d.ts +0 -31
- package/dist/cjs/types/models/IElementProps.d.ts +0 -36
- package/dist/cjs/types/models/IElementSelectorProps.d.ts +0 -25
- package/dist/cjs/types/models/IFlexboxType.d.ts +0 -20
- package/dist/cjs/types/models/IPaperBounds.d.ts +0 -6
- package/dist/cjs/types/models/IPort.d.ts +0 -13
- package/dist/cjs/types/models/IPortProps.d.ts +0 -31
- package/dist/cjs/types/models/IResizability.d.ts +0 -4
- package/dist/cjs/types/models/IShape.d.ts +0 -18
- package/dist/cjs/types/models/IText.d.ts +0 -20
- package/dist/cjs/types/models/ITextProps.d.ts +0 -25
- package/dist/cjs/types/models/callbackTypes.d.ts +0 -21
- package/dist/cjs/types/models/enums/PositioningAnchor.d.ts +0 -4
- package/dist/cjs/types/models/enums/ResizingDirection.d.ts +0 -10
- package/dist/cjs/types/models/enums/SubObjectDirection.d.ts +0 -4
- package/dist/cjs/types/models/enums/TextAlign.d.ts +0 -5
- package/dist/cjs/types/models/enums/index.d.ts +0 -4
- package/dist/cjs/types/models/implementations/CustomPort.d.ts +0 -7
- package/dist/cjs/types/models/implementations/CustomPortFromJSXElement.d.ts +0 -7
- package/dist/cjs/types/models/implementations/CustomPortFromShape.d.ts +0 -7
- package/dist/cjs/types/models/implementations/EditorContext.d.ts +0 -67
- package/dist/cjs/types/models/implementations/Element.d.ts +0 -61
- package/dist/cjs/types/models/implementations/ElementLink.d.ts +0 -25
- package/dist/cjs/types/models/implementations/Port.d.ts +0 -22
- package/dist/cjs/types/models/implementations/Text.d.ts +0 -20
- package/dist/cjs/types/models/implementations/diamondElement.d.ts +0 -11
- package/dist/cjs/types/models/implementations/index.d.ts +0 -6
- package/dist/cjs/types/models/implementations/rectangularFrameElement.d.ts +0 -11
- package/dist/cjs/types/models/index.d.ts +0 -19
- package/dist/cjs/types/models/position.d.ts +0 -4
- package/dist/cjs/types/models/size.d.ts +0 -4
- package/dist/cjs/types/utils/constants.d.ts +0 -54
- package/dist/cjs/types/utils/elementLinkUtil.d.ts +0 -2
- package/dist/cjs/types/utils/generateUniqueId.d.ts +0 -1
- package/dist/cjs/types/utils/index.d.ts +0 -9
- package/dist/cjs/types/utils/lineUtil.d.ts +0 -3
- package/dist/cjs/types/utils/mathUtil.d.ts +0 -6
- package/dist/cjs/types/utils/pathUtil.d.ts +0 -13
- package/dist/cjs/types/utils/portSlideRailSVGUtil.d.ts +0 -3
- package/dist/cjs/types/utils/positionUtil.d.ts +0 -55
- package/dist/cjs/types/utils/svgUtil.d.ts +0 -3
- package/dist/esm/displaybox.js.map +0 -1
- package/dist/esm/types/components/BBoxDebugger.d.ts +0 -6
- package/dist/esm/types/components/CloseIcon.d.ts +0 -6
- package/dist/esm/types/components/LinkDebugger.d.ts +0 -8
- package/dist/esm/types/components/editor.d.ts +0 -9
- package/dist/esm/types/components/elementShowbox.d.ts +0 -3
- package/dist/esm/types/components/elements/dragDropHandlerElement.d.ts +0 -7
- package/dist/esm/types/components/elements/element.d.ts +0 -4
- package/dist/esm/types/components/elements/elementWrapper.d.ts +0 -18
- package/dist/esm/types/components/links/elementLink.d.ts +0 -4
- package/dist/esm/types/components/links/index.d.ts +0 -2
- package/dist/esm/types/components/links/point.d.ts +0 -11
- package/dist/esm/types/components/paper.d.ts +0 -49
- package/dist/esm/types/components/ports/index.d.ts +0 -2
- package/dist/esm/types/components/ports/port.d.ts +0 -3
- package/dist/esm/types/components/shapeShowbox.d.ts +0 -3
- package/dist/esm/types/components/shapes/circle.d.ts +0 -9
- package/dist/esm/types/components/shapes/customShape.d.ts +0 -7
- package/dist/esm/types/components/shapes/halfCircle.d.ts +0 -9
- package/dist/esm/types/components/shapes/index.d.ts +0 -7
- package/dist/esm/types/components/shapes/polygon.d.ts +0 -8
- package/dist/esm/types/components/shapes/rectangle.d.ts +0 -10
- package/dist/esm/types/components/shapes/rectangularFrame.d.ts +0 -12
- package/dist/esm/types/components/shapes/shapeWrapper.d.ts +0 -8
- package/dist/esm/types/components/svgUtilsShowbox.d.ts +0 -3
- package/dist/esm/types/components/texts/index.d.ts +0 -2
- package/dist/esm/types/components/texts/text.d.ts +0 -4
- package/dist/esm/types/components/viewControls/ruler.d.ts +0 -10
- package/dist/esm/types/components/viewControls/selectionFrame.d.ts +0 -4
- package/dist/esm/types/contexts/editorConfigurationContext.d.ts +0 -4
- package/dist/esm/types/contexts/paperEventEmitterContext.d.ts +0 -45
- package/dist/esm/types/contexts/zoomContext.d.ts +0 -16
- package/dist/esm/types/contexts/zoomPanContext.d.ts +0 -23
- package/dist/esm/types/displaybox/index.d.ts +0 -3
- package/dist/esm/types/hooks/useKeyboardCommands.d.ts +0 -5
- package/dist/esm/types/hooks/useSelectionFrame.d.ts +0 -6
- package/dist/esm/types/logs/Logger.d.ts +0 -14
- package/dist/esm/types/logs/configureLogger.d.ts +0 -4
- package/dist/esm/types/main.d.ts +0 -8
- package/dist/esm/types/mocks/customPortWithBuiltinShape.d.ts +0 -2
- package/dist/esm/types/mocks/diamondElement.d.ts +0 -11
- package/dist/esm/types/mocks/editorContext.d.ts +0 -2
- package/dist/esm/types/mocks/editorContextElementMoveAsPort.d.ts +0 -2
- package/dist/esm/types/mocks/editorContextForOptimizeRerender.d.ts +0 -2
- package/dist/esm/types/mocks/editorContextMultipleElements.d.ts +0 -2
- package/dist/esm/types/mocks/editorContextSingleElement.d.ts +0 -2
- package/dist/esm/types/mocks/editorContextSingleElementTestEvents.d.ts +0 -2
- package/dist/esm/types/mocks/editorContextTriggerRenderElements.d.ts +0 -2
- package/dist/esm/types/mocks/editorContextWithElementAnchorCenter.d.ts +0 -2
- package/dist/esm/types/mocks/port1.d.ts +0 -5
- package/dist/esm/types/mocks/port2.d.ts +0 -5
- package/dist/esm/types/mocks/portIn.d.ts +0 -4
- package/dist/esm/types/mocks/rectangularFrameElement.d.ts +0 -11
- package/dist/esm/types/mocks/textsWithFlexBox.d.ts +0 -2
- package/dist/esm/types/models/IEditorConfiguration.d.ts +0 -7
- package/dist/esm/types/models/IEditorContext.d.ts +0 -56
- package/dist/esm/types/models/IElement.d.ts +0 -46
- package/dist/esm/types/models/IElementLink.d.ts +0 -23
- package/dist/esm/types/models/IElementLinkProps.d.ts +0 -31
- package/dist/esm/types/models/IElementProps.d.ts +0 -36
- package/dist/esm/types/models/IElementSelectorProps.d.ts +0 -25
- package/dist/esm/types/models/IFlexboxType.d.ts +0 -20
- package/dist/esm/types/models/IPaperBounds.d.ts +0 -6
- package/dist/esm/types/models/IPort.d.ts +0 -13
- package/dist/esm/types/models/IPortProps.d.ts +0 -31
- package/dist/esm/types/models/IResizability.d.ts +0 -4
- package/dist/esm/types/models/IShape.d.ts +0 -18
- package/dist/esm/types/models/IText.d.ts +0 -20
- package/dist/esm/types/models/ITextProps.d.ts +0 -25
- package/dist/esm/types/models/callbackTypes.d.ts +0 -21
- package/dist/esm/types/models/enums/PositioningAnchor.d.ts +0 -4
- package/dist/esm/types/models/enums/ResizingDirection.d.ts +0 -10
- package/dist/esm/types/models/enums/SubObjectDirection.d.ts +0 -4
- package/dist/esm/types/models/enums/TextAlign.d.ts +0 -5
- package/dist/esm/types/models/enums/index.d.ts +0 -4
- package/dist/esm/types/models/implementations/CustomPort.d.ts +0 -7
- package/dist/esm/types/models/implementations/CustomPortFromJSXElement.d.ts +0 -7
- package/dist/esm/types/models/implementations/CustomPortFromShape.d.ts +0 -7
- package/dist/esm/types/models/implementations/EditorContext.d.ts +0 -67
- package/dist/esm/types/models/implementations/Element.d.ts +0 -61
- package/dist/esm/types/models/implementations/ElementLink.d.ts +0 -25
- package/dist/esm/types/models/implementations/Port.d.ts +0 -22
- package/dist/esm/types/models/implementations/Text.d.ts +0 -20
- package/dist/esm/types/models/implementations/diamondElement.d.ts +0 -11
- package/dist/esm/types/models/implementations/index.d.ts +0 -6
- package/dist/esm/types/models/implementations/rectangularFrameElement.d.ts +0 -11
- package/dist/esm/types/models/index.d.ts +0 -19
- package/dist/esm/types/models/position.d.ts +0 -4
- package/dist/esm/types/models/size.d.ts +0 -4
- package/dist/esm/types/utils/constants.d.ts +0 -54
- package/dist/esm/types/utils/elementLinkUtil.d.ts +0 -2
- package/dist/esm/types/utils/generateUniqueId.d.ts +0 -1
- package/dist/esm/types/utils/index.d.ts +0 -9
- package/dist/esm/types/utils/lineUtil.d.ts +0 -3
- package/dist/esm/types/utils/mathUtil.d.ts +0 -6
- package/dist/esm/types/utils/pathUtil.d.ts +0 -13
- package/dist/esm/types/utils/portSlideRailSVGUtil.d.ts +0 -3
- package/dist/esm/types/utils/positionUtil.d.ts +0 -55
- 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-
|
|
63
|
-
- Last completed step:
|
|
64
|
-
- Next step:
|
|
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
|
|
76
|
-
- [ ] Complete step
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- 2026-
|
|
84
|
-
- 2026-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- `
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- host
|
|
31
|
-
- host
|
|
32
|
-
-
|
|
33
|
-
- host
|
|
34
|
-
|
|
35
|
-
- host
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
- Deleting
|
|
40
|
-
- Deleting
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
- Validate
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
- `
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- `src/
|
|
57
|
-
- `src/
|
|
58
|
-
- `src/
|
|
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`
|
package/docs/STATE_INVARIANTS.md
CHANGED
|
@@ -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
|
-
-
|
|
24
|
-
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
+
|