@grafloria/element 0.3.18 → 0.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/src/index.js +295 -0
- package/esm/src/lib/dashboard-kit/dashboard.js +590 -0
- package/esm/src/lib/dashboard-kit/grid-binder.js +1633 -0
- package/esm/src/lib/dashboard-kit/grid-mapping.js +164 -0
- package/esm/src/lib/dashboard-kit/index.js +8 -0
- package/esm/src/lib/dashboard-kit/styles.js +205 -0
- package/esm/src/lib/dashboard-kit/widgets.js +379 -0
- package/esm/src/lib/diagram-kit/card.js +199 -0
- package/esm/src/lib/diagram-kit/editing.js +448 -0
- package/esm/src/lib/diagram-kit/er.js +160 -0
- package/esm/src/lib/diagram-kit/handles.js +312 -0
- package/esm/src/lib/diagram-kit/index.js +15 -0
- package/esm/src/lib/diagram-kit/join-guidance.js +322 -0
- package/esm/src/lib/diagram-kit/rows.js +144 -0
- package/esm/src/lib/diagram-kit/styles.js +118 -0
- package/esm/src/lib/diagram-kit/uml.js +135 -0
- package/esm/src/lib/diagram-kit/update.js +244 -0
- package/esm/src/lib/grafloria-flow-element.js +266 -0
- package/esm/src/lib/grafloria.js +69 -0
- package/esm/src/lib/load.js +252 -0
- package/esm/src/lib/node-type-registry.js +42 -0
- package/esm/src/lib/stencil-kit/builders.js +18 -0
- package/esm/src/lib/stencil-kit/card-builders.js +105 -0
- package/esm/src/lib/stencil-kit/index.js +9 -0
- package/esm/src/lib/stencil-kit/palette.js +427 -0
- package/esm/src/lib/stencil-kit/shape-data.js +537 -0
- package/esm/src/lib/stencil-kit/styles.js +126 -0
- package/package.json +13 -4
- package/src/index.d.ts +2 -1
- package/src/index.js +11 -2
- package/src/lib/dashboard-kit/grid-binder.js +16 -15
- package/src/lib/dashboard-kit/styles.js +9 -3
- package/src/lib/diagram-kit/index.d.ts +1 -0
- package/src/lib/diagram-kit/index.js +11 -1
- package/src/lib/diagram-kit/join-guidance.d.ts +116 -0
- package/src/lib/diagram-kit/join-guidance.js +331 -0
- package/src/lib/stencil-kit/palette.js +60 -6
- package/src/lib/stencil-kit/shape-data.d.ts +3 -2
- package/src/lib/stencil-kit/shape-data.js +323 -31
- package/src/lib/stencil-kit/styles.js +15 -0
- package/src/libs/element/src/index.d.ts +92 -0
- package/src/libs/element/src/index.js +576 -0
- package/src/libs/element/src/lib/dashboard-kit/dashboard.d.ts +345 -0
- package/src/libs/element/src/lib/dashboard-kit/dashboard.js +594 -0
- package/src/libs/element/src/lib/dashboard-kit/grid-binder.d.ts +277 -0
- package/src/libs/element/src/lib/dashboard-kit/grid-binder.js +1636 -0
- package/src/libs/element/src/lib/dashboard-kit/grid-mapping.d.ts +141 -0
- package/src/libs/element/src/lib/dashboard-kit/grid-mapping.js +176 -0
- package/src/libs/element/src/lib/dashboard-kit/index.d.ts +5 -0
- package/src/libs/element/src/lib/dashboard-kit/index.js +33 -0
- package/src/libs/element/src/lib/dashboard-kit/styles.d.ts +25 -0
- package/src/libs/element/src/lib/dashboard-kit/styles.js +209 -0
- package/src/libs/element/src/lib/dashboard-kit/widgets.d.ts +112 -0
- package/src/libs/element/src/lib/dashboard-kit/widgets.js +389 -0
- package/src/libs/element/src/lib/diagram-kit/card.d.ts +75 -0
- package/src/libs/element/src/lib/diagram-kit/card.js +209 -0
- package/src/libs/element/src/lib/diagram-kit/editing.d.ts +58 -0
- package/src/libs/element/src/lib/diagram-kit/editing.js +453 -0
- package/src/libs/element/src/lib/diagram-kit/er.d.ts +73 -0
- package/src/libs/element/src/lib/diagram-kit/er.js +163 -0
- package/src/libs/element/src/lib/diagram-kit/handles.d.ts +181 -0
- package/src/libs/element/src/lib/diagram-kit/handles.js +325 -0
- package/src/libs/element/src/lib/diagram-kit/index.d.ts +10 -0
- package/src/libs/element/src/lib/diagram-kit/index.js +55 -0
- package/src/libs/element/src/lib/diagram-kit/join-guidance.d.ts +116 -0
- package/src/libs/element/src/lib/diagram-kit/join-guidance.js +331 -0
- package/src/libs/element/src/lib/diagram-kit/rows.d.ts +53 -0
- package/src/libs/element/src/lib/diagram-kit/rows.js +147 -0
- package/src/libs/element/src/lib/diagram-kit/styles.d.ts +18 -0
- package/src/libs/element/src/lib/diagram-kit/styles.js +122 -0
- package/src/libs/element/src/lib/diagram-kit/uml.d.ts +59 -0
- package/src/libs/element/src/lib/diagram-kit/uml.js +138 -0
- package/src/libs/element/src/lib/diagram-kit/update.d.ts +133 -0
- package/src/libs/element/src/lib/diagram-kit/update.js +251 -0
- package/src/libs/element/src/lib/grafloria-flow-element.d.ts +48 -0
- package/src/libs/element/src/lib/grafloria-flow-element.js +271 -0
- package/src/libs/element/src/lib/grafloria.d.ts +72 -0
- package/src/libs/element/src/lib/grafloria.js +74 -0
- package/src/libs/element/src/lib/load.d.ts +72 -0
- package/src/libs/element/src/lib/load.js +255 -0
- package/src/libs/element/src/lib/node-type-registry.d.ts +39 -0
- package/src/libs/element/src/lib/node-type-registry.js +50 -0
- package/src/libs/element/src/lib/stencil-kit/builders.d.ts +45 -0
- package/src/libs/element/src/lib/stencil-kit/builders.js +24 -0
- package/src/libs/element/src/lib/stencil-kit/card-builders.d.ts +2 -0
- package/src/libs/element/src/lib/stencil-kit/card-builders.js +108 -0
- package/src/libs/element/src/lib/stencil-kit/index.d.ts +7 -0
- package/src/libs/element/src/lib/stencil-kit/index.js +19 -0
- package/src/libs/element/src/lib/stencil-kit/palette.d.ts +93 -0
- package/src/libs/element/src/lib/stencil-kit/palette.js +430 -0
- package/src/libs/element/src/lib/stencil-kit/shape-data.d.ts +28 -0
- package/src/libs/element/src/lib/stencil-kit/shape-data.js +540 -0
- package/src/libs/element/src/lib/stencil-kit/styles.d.ts +2 -0
- package/src/libs/element/src/lib/stencil-kit/styles.js +129 -0
- package/src/libs/engine/src/adapters/component-adapter.interface.d.ts +302 -0
- package/src/libs/engine/src/adapters/component-adapter.interface.js +84 -0
- package/src/libs/engine/src/adapters/index.d.ts +7 -0
- package/src/libs/engine/src/adapters/index.js +11 -0
- package/src/libs/engine/src/clipboard/ClipboardManager.d.ts +81 -0
- package/src/libs/engine/src/clipboard/ClipboardManager.js +108 -0
- package/src/libs/engine/src/clipboard/index.d.ts +1 -0
- package/src/libs/engine/src/clipboard/index.js +6 -0
- package/src/libs/engine/src/collab/apply-op.d.ts +42 -0
- package/src/libs/engine/src/collab/apply-op.js +939 -0
- package/src/libs/engine/src/collab/capture.d.ts +147 -0
- package/src/libs/engine/src/collab/capture.js +510 -0
- package/src/libs/engine/src/collab/index.d.ts +12 -0
- package/src/libs/engine/src/collab/index.js +84 -0
- package/src/libs/engine/src/collab/integrity.d.ts +178 -0
- package/src/libs/engine/src/collab/integrity.js +438 -0
- package/src/libs/engine/src/collab/lww.d.ts +47 -0
- package/src/libs/engine/src/collab/lww.js +188 -0
- package/src/libs/engine/src/collab/op-log.d.ts +50 -0
- package/src/libs/engine/src/collab/op-log.js +167 -0
- package/src/libs/engine/src/collab/op.d.ts +120 -0
- package/src/libs/engine/src/collab/op.js +118 -0
- package/src/libs/engine/src/collab/replica.d.ts +188 -0
- package/src/libs/engine/src/collab/replica.js +526 -0
- package/src/libs/engine/src/collab/undo.d.ts +106 -0
- package/src/libs/engine/src/collab/undo.js +388 -0
- package/src/libs/engine/src/commands/Command.d.ts +66 -0
- package/src/libs/engine/src/commands/Command.js +64 -0
- package/src/libs/engine/src/commands/CommandManager.d.ts +161 -0
- package/src/libs/engine/src/commands/CommandManager.js +417 -0
- package/src/libs/engine/src/commands/basic/AddGroupCommand.d.ts +13 -0
- package/src/libs/engine/src/commands/basic/AddGroupCommand.js +50 -0
- package/src/libs/engine/src/commands/basic/AddLinkCommand.d.ts +13 -0
- package/src/libs/engine/src/commands/basic/AddLinkCommand.js +50 -0
- package/src/libs/engine/src/commands/basic/AddNodeCommand.d.ts +13 -0
- package/src/libs/engine/src/commands/basic/AddNodeCommand.js +65 -0
- package/src/libs/engine/src/commands/basic/AddToGroupCommand.d.ts +12 -0
- package/src/libs/engine/src/commands/basic/AddToGroupCommand.js +73 -0
- package/src/libs/engine/src/commands/basic/AlignCommands.d.ts +42 -0
- package/src/libs/engine/src/commands/basic/AlignCommands.js +138 -0
- package/src/libs/engine/src/commands/basic/CollapseGroupCommand.d.ts +14 -0
- package/src/libs/engine/src/commands/basic/CollapseGroupCommand.js +70 -0
- package/src/libs/engine/src/commands/basic/CopyCommand.d.ts +29 -0
- package/src/libs/engine/src/commands/basic/CopyCommand.js +131 -0
- package/src/libs/engine/src/commands/basic/CutCommand.d.ts +49 -0
- package/src/libs/engine/src/commands/basic/CutCommand.js +68 -0
- package/src/libs/engine/src/commands/basic/DeleteSelectionCommand.d.ts +58 -0
- package/src/libs/engine/src/commands/basic/DeleteSelectionCommand.js +309 -0
- package/src/libs/engine/src/commands/basic/DuplicateCommand.d.ts +31 -0
- package/src/libs/engine/src/commands/basic/DuplicateCommand.js +232 -0
- package/src/libs/engine/src/commands/basic/ExpandGroupCommand.d.ts +12 -0
- package/src/libs/engine/src/commands/basic/ExpandGroupCommand.js +69 -0
- package/src/libs/engine/src/commands/basic/MoveGroupCommand.d.ts +46 -0
- package/src/libs/engine/src/commands/basic/MoveGroupCommand.js +77 -0
- package/src/libs/engine/src/commands/basic/MoveNodeCommand.d.ts +30 -0
- package/src/libs/engine/src/commands/basic/MoveNodeCommand.js +87 -0
- package/src/libs/engine/src/commands/basic/NodeZOrderCommands.d.ts +39 -0
- package/src/libs/engine/src/commands/basic/NodeZOrderCommands.js +120 -0
- package/src/libs/engine/src/commands/basic/PasteCommand.d.ts +33 -0
- package/src/libs/engine/src/commands/basic/PasteCommand.js +228 -0
- package/src/libs/engine/src/commands/basic/PortCommands.d.ts +22 -0
- package/src/libs/engine/src/commands/basic/PortCommands.js +85 -0
- package/src/libs/engine/src/commands/basic/ReconnectLinkCommand.d.ts +15 -0
- package/src/libs/engine/src/commands/basic/ReconnectLinkCommand.js +59 -0
- package/src/libs/engine/src/commands/basic/RemoveFromGroupCommand.d.ts +12 -0
- package/src/libs/engine/src/commands/basic/RemoveFromGroupCommand.js +64 -0
- package/src/libs/engine/src/commands/basic/RemoveGroupCommand.d.ts +12 -0
- package/src/libs/engine/src/commands/basic/RemoveGroupCommand.js +56 -0
- package/src/libs/engine/src/commands/basic/RemoveLinkCommand.d.ts +12 -0
- package/src/libs/engine/src/commands/basic/RemoveLinkCommand.js +57 -0
- package/src/libs/engine/src/commands/basic/RemoveNodeCommand.d.ts +23 -0
- package/src/libs/engine/src/commands/basic/RemoveNodeCommand.js +108 -0
- package/src/libs/engine/src/commands/basic/ResizeNodeCommand.d.ts +16 -0
- package/src/libs/engine/src/commands/basic/ResizeNodeCommand.js +81 -0
- package/src/libs/engine/src/commands/basic/RotateNodeCommand.d.ts +37 -0
- package/src/libs/engine/src/commands/basic/RotateNodeCommand.js +88 -0
- package/src/libs/engine/src/commands/basic/SetFlexItemCommand.d.ts +14 -0
- package/src/libs/engine/src/commands/basic/SetFlexItemCommand.js +74 -0
- package/src/libs/engine/src/commands/basic/SetGridItemCommand.d.ts +14 -0
- package/src/libs/engine/src/commands/basic/SetGridItemCommand.js +74 -0
- package/src/libs/engine/src/commands/basic/SetLayoutCommand.d.ts +16 -0
- package/src/libs/engine/src/commands/basic/SetLayoutCommand.js +80 -0
- package/src/libs/engine/src/commands/basic/SetLinkDisplayLabelCommand.d.ts +28 -0
- package/src/libs/engine/src/commands/basic/SetLinkDisplayLabelCommand.js +83 -0
- package/src/libs/engine/src/commands/basic/SetLinkLabelCommand.d.ts +24 -0
- package/src/libs/engine/src/commands/basic/SetLinkLabelCommand.js +81 -0
- package/src/libs/engine/src/commands/basic/SetLinkLabelsCommand.d.ts +14 -0
- package/src/libs/engine/src/commands/basic/SetLinkLabelsCommand.js +75 -0
- package/src/libs/engine/src/commands/basic/SetLinkPathTypeCommand.d.ts +14 -0
- package/src/libs/engine/src/commands/basic/SetLinkPathTypeCommand.js +77 -0
- package/src/libs/engine/src/commands/basic/SetLinkPointsCommand.d.ts +32 -0
- package/src/libs/engine/src/commands/basic/SetLinkPointsCommand.js +87 -0
- package/src/libs/engine/src/commands/basic/SetNodeDataCommand.d.ts +14 -0
- package/src/libs/engine/src/commands/basic/SetNodeDataCommand.js +93 -0
- package/src/libs/engine/src/commands/basic/SetNodeLabelCommand.d.ts +26 -0
- package/src/libs/engine/src/commands/basic/SetNodeLabelCommand.js +81 -0
- package/src/libs/engine/src/commands/basic/SetNodeShapeConfigCommand.d.ts +14 -0
- package/src/libs/engine/src/commands/basic/SetNodeShapeConfigCommand.js +69 -0
- package/src/libs/engine/src/commands/basic/SetNodeStyleCommand.d.ts +15 -0
- package/src/libs/engine/src/commands/basic/SetNodeStyleCommand.js +88 -0
- package/src/libs/engine/src/commands/basic/SetParentCommand.d.ts +13 -0
- package/src/libs/engine/src/commands/basic/SetParentCommand.js +109 -0
- package/src/libs/engine/src/commands/basic/SetStrokePointsCommand.d.ts +34 -0
- package/src/libs/engine/src/commands/basic/SetStrokePointsCommand.js +86 -0
- package/src/libs/engine/src/commands/basic/StrokeLifecycleCommands.d.ts +31 -0
- package/src/libs/engine/src/commands/basic/StrokeLifecycleCommands.js +88 -0
- package/src/libs/engine/src/commands/basic/UpdateLinkStyleCommand.d.ts +15 -0
- package/src/libs/engine/src/commands/basic/UpdateLinkStyleCommand.js +72 -0
- package/src/libs/engine/src/commands/basic/index.d.ts +41 -0
- package/src/libs/engine/src/commands/basic/index.js +52 -0
- package/src/libs/engine/src/commands/basic/remapNodePortIds.d.ts +23 -0
- package/src/libs/engine/src/commands/basic/remapNodePortIds.js +46 -0
- package/src/libs/engine/src/commands/basic/resolveLinkNodeIds.d.ts +31 -0
- package/src/libs/engine/src/commands/basic/resolveLinkNodeIds.js +49 -0
- package/src/libs/engine/src/commands/composite/BatchCommand.d.ts +19 -0
- package/src/libs/engine/src/commands/composite/BatchCommand.js +61 -0
- package/src/libs/engine/src/commands/composite/MacroCommand.d.ts +35 -0
- package/src/libs/engine/src/commands/composite/MacroCommand.js +87 -0
- package/src/libs/engine/src/commands/composite/index.d.ts +2 -0
- package/src/libs/engine/src/commands/composite/index.js +7 -0
- package/src/libs/engine/src/commands/index.d.ts +4 -0
- package/src/libs/engine/src/commands/index.js +9 -0
- package/src/libs/engine/src/comments/comment-store.d.ts +238 -0
- package/src/libs/engine/src/comments/comment-store.js +538 -0
- package/src/libs/engine/src/comments/index.d.ts +4 -0
- package/src/libs/engine/src/comments/index.js +31 -0
- package/src/libs/engine/src/comments/mentions.d.ts +52 -0
- package/src/libs/engine/src/comments/mentions.js +94 -0
- package/src/libs/engine/src/comments/read-state.d.ts +37 -0
- package/src/libs/engine/src/comments/read-state.js +105 -0
- package/src/libs/engine/src/comments/types.d.ts +154 -0
- package/src/libs/engine/src/comments/types.js +107 -0
- package/src/libs/engine/src/config/InteractionConfig.d.ts +330 -0
- package/src/libs/engine/src/config/InteractionConfig.js +154 -0
- package/src/libs/engine/src/config/index.d.ts +1 -0
- package/src/libs/engine/src/config/index.js +6 -0
- package/src/libs/engine/src/dsl/DSL.d.ts +197 -0
- package/src/libs/engine/src/dsl/DSL.js +564 -0
- package/src/libs/engine/src/dsl/advanced/StyleParser.d.ts +75 -0
- package/src/libs/engine/src/dsl/advanced/StyleParser.js +166 -0
- package/src/libs/engine/src/dsl/advanced/TemplateParser.d.ts +88 -0
- package/src/libs/engine/src/dsl/advanced/TemplateParser.js +226 -0
- package/src/libs/engine/src/dsl/advanced/index.d.ts +9 -0
- package/src/libs/engine/src/dsl/advanced/index.js +13 -0
- package/src/libs/engine/src/dsl/detector/LayoutDetector.d.ts +80 -0
- package/src/libs/engine/src/dsl/detector/LayoutDetector.js +333 -0
- package/src/libs/engine/src/dsl/extended/BPMNGenerator.d.ts +38 -0
- package/src/libs/engine/src/dsl/extended/BPMNGenerator.js +90 -0
- package/src/libs/engine/src/dsl/extended/BPMNParser.d.ts +83 -0
- package/src/libs/engine/src/dsl/extended/BPMNParser.js +198 -0
- package/src/libs/engine/src/dsl/extended/ERDGenerator.d.ts +38 -0
- package/src/libs/engine/src/dsl/extended/ERDGenerator.js +126 -0
- package/src/libs/engine/src/dsl/extended/ERDParser.d.ts +81 -0
- package/src/libs/engine/src/dsl/extended/ERDParser.js +161 -0
- package/src/libs/engine/src/dsl/extended/ERDTransformer.d.ts +43 -0
- package/src/libs/engine/src/dsl/extended/ERDTransformer.js +105 -0
- package/src/libs/engine/src/dsl/extended/UMLGenerator.d.ts +42 -0
- package/src/libs/engine/src/dsl/extended/UMLGenerator.js +157 -0
- package/src/libs/engine/src/dsl/extended/UMLParser.d.ts +99 -0
- package/src/libs/engine/src/dsl/extended/UMLParser.js +200 -0
- package/src/libs/engine/src/dsl/extended/index.d.ts +13 -0
- package/src/libs/engine/src/dsl/extended/index.js +27 -0
- package/src/libs/engine/src/dsl/generator/DSLFormatter.d.ts +87 -0
- package/src/libs/engine/src/dsl/generator/DSLFormatter.js +261 -0
- package/src/libs/engine/src/dsl/generator/DSLGenerator.d.ts +96 -0
- package/src/libs/engine/src/dsl/generator/DSLGenerator.js +328 -0
- package/src/libs/engine/src/dsl/generator/DiagramAnalyzer.d.ts +111 -0
- package/src/libs/engine/src/dsl/generator/DiagramAnalyzer.js +361 -0
- package/src/libs/engine/src/dsl/index.d.ts +35 -0
- package/src/libs/engine/src/dsl/index.js +64 -0
- package/src/libs/engine/src/dsl/lexer/Lexer.d.ts +117 -0
- package/src/libs/engine/src/dsl/lexer/Lexer.js +521 -0
- package/src/libs/engine/src/dsl/mermaid/MermaidClass.d.ts +136 -0
- package/src/libs/engine/src/dsl/mermaid/MermaidClass.js +429 -0
- package/src/libs/engine/src/dsl/mermaid/MermaidER.d.ts +118 -0
- package/src/libs/engine/src/dsl/mermaid/MermaidER.js +338 -0
- package/src/libs/engine/src/dsl/mermaid/MermaidState.d.ts +89 -0
- package/src/libs/engine/src/dsl/mermaid/MermaidState.js +613 -0
- package/src/libs/engine/src/dsl/mermaid/index.d.ts +10 -0
- package/src/libs/engine/src/dsl/mermaid/index.js +33 -0
- package/src/libs/engine/src/dsl/mermaid/layout.d.ts +70 -0
- package/src/libs/engine/src/dsl/mermaid/layout.js +162 -0
- package/src/libs/engine/src/dsl/mermaid/lines.d.ts +25 -0
- package/src/libs/engine/src/dsl/mermaid/lines.js +74 -0
- package/src/libs/engine/src/dsl/parser/Parser.d.ts +131 -0
- package/src/libs/engine/src/dsl/parser/Parser.js +725 -0
- package/src/libs/engine/src/dsl/sync/BidirectionalSync.d.ts +154 -0
- package/src/libs/engine/src/dsl/sync/BidirectionalSync.js +389 -0
- package/src/libs/engine/src/dsl/sync/IntegratedSyncManager.d.ts +128 -0
- package/src/libs/engine/src/dsl/sync/IntegratedSyncManager.js +244 -0
- package/src/libs/engine/src/dsl/sync/LayoutApplicator.d.ts +140 -0
- package/src/libs/engine/src/dsl/sync/LayoutApplicator.js +271 -0
- package/src/libs/engine/src/dsl/sync/SyncStateManager.d.ts +145 -0
- package/src/libs/engine/src/dsl/sync/SyncStateManager.js +253 -0
- package/src/libs/engine/src/dsl/sync/index.d.ts +13 -0
- package/src/libs/engine/src/dsl/sync/index.js +21 -0
- package/src/libs/engine/src/dsl/transformer/ASTTransformer.d.ts +150 -0
- package/src/libs/engine/src/dsl/transformer/ASTTransformer.js +605 -0
- package/src/libs/engine/src/dsl/types/ASTNode.d.ts +159 -0
- package/src/libs/engine/src/dsl/types/ASTNode.js +31 -0
- package/src/libs/engine/src/dsl/types/Token.d.ts +79 -0
- package/src/libs/engine/src/dsl/types/Token.js +84 -0
- package/src/libs/engine/src/engine/DiagramEngine.d.ts +917 -0
- package/src/libs/engine/src/engine/DiagramEngine.js +2190 -0
- package/src/libs/engine/src/engine/DiagramMode.d.ts +51 -0
- package/src/libs/engine/src/engine/DiagramMode.js +53 -0
- package/src/libs/engine/src/engine/DiagramModeTypes.d.ts +73 -0
- package/src/libs/engine/src/engine/DiagramModeTypes.js +4 -0
- package/src/libs/engine/src/engine/ModeManager.d.ts +155 -0
- package/src/libs/engine/src/engine/ModeManager.js +387 -0
- package/src/libs/engine/src/engine/index.d.ts +2 -0
- package/src/libs/engine/src/engine/index.js +7 -0
- package/src/libs/engine/src/events/EventBus.d.ts +106 -0
- package/src/libs/engine/src/events/EventBus.js +226 -0
- package/src/libs/engine/src/events/index.d.ts +1 -0
- package/src/libs/engine/src/events/index.js +6 -0
- package/src/libs/engine/src/index.d.ts +43 -0
- package/src/libs/engine/src/index.js +142 -0
- package/src/libs/engine/src/interaction/GroupCollapseService.d.ts +53 -0
- package/src/libs/engine/src/interaction/GroupCollapseService.js +274 -0
- package/src/libs/engine/src/interaction/GroupMembershipService.d.ts +107 -0
- package/src/libs/engine/src/interaction/GroupMembershipService.js +245 -0
- package/src/libs/engine/src/interaction/SemanticMembershipService.d.ts +28 -0
- package/src/libs/engine/src/interaction/SemanticMembershipService.js +168 -0
- package/src/libs/engine/src/interaction/SwimlaneService.d.ts +62 -0
- package/src/libs/engine/src/interaction/SwimlaneService.js +180 -0
- package/src/libs/engine/src/interaction/index.d.ts +4 -0
- package/src/libs/engine/src/interaction/index.js +9 -0
- package/src/libs/engine/src/interop/drawio/importDrawio.d.ts +52 -0
- package/src/libs/engine/src/interop/drawio/importDrawio.js +940 -0
- package/src/libs/engine/src/interop/drawio/index.d.ts +1 -0
- package/src/libs/engine/src/interop/drawio/index.js +12 -0
- package/src/libs/engine/src/interop/drawio/xml.d.ts +26 -0
- package/src/libs/engine/src/interop/drawio/xml.js +213 -0
- package/src/libs/engine/src/layout/CompoundLayoutService.d.ts +121 -0
- package/src/libs/engine/src/layout/CompoundLayoutService.js +616 -0
- package/src/libs/engine/src/layout/ILayoutAlgorithm.d.ts +120 -0
- package/src/libs/engine/src/layout/ILayoutAlgorithm.js +88 -0
- package/src/libs/engine/src/layout/LayoutManager.d.ts +155 -0
- package/src/libs/engine/src/layout/LayoutManager.js +640 -0
- package/src/libs/engine/src/layout/SmartSpacingCalculator.d.ts +62 -0
- package/src/libs/engine/src/layout/SmartSpacingCalculator.js +134 -0
- package/src/libs/engine/src/layout/ViewportTransform.d.ts +55 -0
- package/src/libs/engine/src/layout/ViewportTransform.js +118 -0
- package/src/libs/engine/src/layout/algorithms/ForceDirectedLayoutAlgorithm.d.ts +34 -0
- package/src/libs/engine/src/layout/algorithms/ForceDirectedLayoutAlgorithm.js +317 -0
- package/src/libs/engine/src/layout/algorithms/GridLayoutAlgorithm.d.ts +56 -0
- package/src/libs/engine/src/layout/algorithms/GridLayoutAlgorithm.js +223 -0
- package/src/libs/engine/src/layout/algorithms/HierarchicalLayoutAlgorithm.d.ts +60 -0
- package/src/libs/engine/src/layout/algorithms/HierarchicalLayoutAlgorithm.js +307 -0
- package/src/libs/engine/src/layout/algorithms/HybridLayoutAlgorithm.d.ts +62 -0
- package/src/libs/engine/src/layout/algorithms/HybridLayoutAlgorithm.js +324 -0
- package/src/libs/engine/src/layout/community-layout-adapter.d.ts +107 -0
- package/src/libs/engine/src/layout/community-layout-adapter.js +486 -0
- package/src/libs/engine/src/layout/component-packing.d.ts +98 -0
- package/src/libs/engine/src/layout/component-packing.js +307 -0
- package/src/libs/engine/src/layout/dagre-layout-adapter.d.ts +122 -0
- package/src/libs/engine/src/layout/dagre-layout-adapter.js +697 -0
- package/src/libs/engine/src/layout/edge-bundling.interface.d.ts +159 -0
- package/src/libs/engine/src/layout/edge-bundling.interface.js +379 -0
- package/src/libs/engine/src/layout/elk-layout-adapter.d.ts +121 -0
- package/src/libs/engine/src/layout/elk-layout-adapter.js +586 -0
- package/src/libs/engine/src/layout/elk-loader.d.ts +1 -0
- package/src/libs/engine/src/layout/elk-loader.js +24 -0
- package/src/libs/engine/src/layout/force-layout-adapter.d.ts +167 -0
- package/src/libs/engine/src/layout/force-layout-adapter.js +790 -0
- package/src/libs/engine/src/layout/grid-pack/grid-pack-engine.d.ts +323 -0
- package/src/libs/engine/src/layout/grid-pack/grid-pack-engine.js +685 -0
- package/src/libs/engine/src/layout/incremental/mental-map.d.ts +98 -0
- package/src/libs/engine/src/layout/incremental/mental-map.js +221 -0
- package/src/libs/engine/src/layout/incremental-layout.interface.d.ts +145 -0
- package/src/libs/engine/src/layout/incremental-layout.interface.js +300 -0
- package/src/libs/engine/src/layout/index.d.ts +83 -0
- package/src/libs/engine/src/layout/index.js +116 -0
- package/src/libs/engine/src/layout/layout-adapter.interface.d.ts +185 -0
- package/src/libs/engine/src/layout/layout-adapter.interface.js +10 -0
- package/src/libs/engine/src/layout/layout-auto-select.d.ts +160 -0
- package/src/libs/engine/src/layout/layout-auto-select.js +621 -0
- package/src/libs/engine/src/layout/layout-constraints.interface.d.ts +117 -0
- package/src/libs/engine/src/layout/layout-constraints.interface.js +138 -0
- package/src/libs/engine/src/layout/layout-graph.d.ts +70 -0
- package/src/libs/engine/src/layout/layout-graph.js +119 -0
- package/src/libs/engine/src/layout/layout-history.d.ts +147 -0
- package/src/libs/engine/src/layout/layout-history.js +258 -0
- package/src/libs/engine/src/layout/layout-host.d.ts +172 -0
- package/src/libs/engine/src/layout/layout-host.js +523 -0
- package/src/libs/engine/src/layout/layout-presets.d.ts +91 -0
- package/src/libs/engine/src/layout/layout-presets.js +333 -0
- package/src/libs/engine/src/layout/layout-quality-extended.d.ts +66 -0
- package/src/libs/engine/src/layout/layout-quality-extended.js +246 -0
- package/src/libs/engine/src/layout/layout-quality-metrics.d.ts +127 -0
- package/src/libs/engine/src/layout/layout-quality-metrics.js +466 -0
- package/src/libs/engine/src/layout/layout-registry.d.ts +309 -0
- package/src/libs/engine/src/layout/layout-registry.js +414 -0
- package/src/libs/engine/src/layout/layout.service.d.ts +100 -0
- package/src/libs/engine/src/layout/layout.service.js +216 -0
- package/src/libs/engine/src/layout/overlap-removal.d.ts +20 -0
- package/src/libs/engine/src/layout/overlap-removal.js +117 -0
- package/src/libs/engine/src/layout/port-aware-layout.interface.d.ts +232 -0
- package/src/libs/engine/src/layout/port-aware-layout.interface.js +413 -0
- package/src/libs/engine/src/layout/port-label-bridge.d.ts +77 -0
- package/src/libs/engine/src/layout/port-label-bridge.js +250 -0
- package/src/libs/engine/src/layout/portfolio-layouts.d.ts +53 -0
- package/src/libs/engine/src/layout/portfolio-layouts.js +388 -0
- package/src/libs/engine/src/layout/rng.d.ts +34 -0
- package/src/libs/engine/src/layout/rng.js +71 -0
- package/src/libs/engine/src/layout/spectral-layout-adapter.d.ts +72 -0
- package/src/libs/engine/src/layout/spectral-layout-adapter.js +379 -0
- package/src/libs/engine/src/layout/steppable-layout.d.ts +40 -0
- package/src/libs/engine/src/layout/steppable-layout.js +34 -0
- package/src/libs/engine/src/layout/subgraph-layout.interface.d.ts +269 -0
- package/src/libs/engine/src/layout/subgraph-layout.interface.js +452 -0
- package/src/libs/engine/src/layout/sugiyama/layered-layout.d.ts +9 -0
- package/src/libs/engine/src/layout/sugiyama/layered-layout.js +83 -0
- package/src/libs/engine/src/layout/sugiyama/sugiyama.d.ts +91 -0
- package/src/libs/engine/src/layout/sugiyama/sugiyama.js +797 -0
- package/src/libs/engine/src/layout/tree-layout.d.ts +43 -0
- package/src/libs/engine/src/layout/tree-layout.js +426 -0
- package/src/libs/engine/src/layout/types.d.ts +263 -0
- package/src/libs/engine/src/layout/types.js +6 -0
- package/src/libs/engine/src/lib/performance/mobile-performance.service.d.ts +43 -0
- package/src/libs/engine/src/lib/performance/mobile-performance.service.js +95 -0
- package/src/libs/engine/src/models/DiagramEntity.d.ts +174 -0
- package/src/libs/engine/src/models/DiagramEntity.js +366 -0
- package/src/libs/engine/src/models/DiagramModel.d.ts +960 -0
- package/src/libs/engine/src/models/DiagramModel.js +2416 -0
- package/src/libs/engine/src/models/GroupModel.d.ts +573 -0
- package/src/libs/engine/src/models/GroupModel.js +1373 -0
- package/src/libs/engine/src/models/LinkModel.d.ts +395 -0
- package/src/libs/engine/src/models/LinkModel.js +1045 -0
- package/src/libs/engine/src/models/NodeModel.d.ts +666 -0
- package/src/libs/engine/src/models/NodeModel.js +1512 -0
- package/src/libs/engine/src/models/PortModel.d.ts +292 -0
- package/src/libs/engine/src/models/PortModel.js +637 -0
- package/src/libs/engine/src/models/StrokeModel.d.ts +160 -0
- package/src/libs/engine/src/models/StrokeModel.js +387 -0
- package/src/libs/engine/src/models/index.d.ts +7 -0
- package/src/libs/engine/src/models/index.js +12 -0
- package/src/libs/engine/src/models/readonly-lock.d.ts +108 -0
- package/src/libs/engine/src/models/readonly-lock.js +125 -0
- package/src/libs/engine/src/performance/LRUCache.d.ts +78 -0
- package/src/libs/engine/src/performance/LRUCache.js +179 -0
- package/src/libs/engine/src/performance/PerformanceMonitor.d.ts +47 -0
- package/src/libs/engine/src/performance/PerformanceMonitor.js +112 -0
- package/src/libs/engine/src/performance/SpatialIndex.d.ts +157 -0
- package/src/libs/engine/src/performance/SpatialIndex.js +306 -0
- package/src/libs/engine/src/performance/index.d.ts +2 -0
- package/src/libs/engine/src/performance/index.js +7 -0
- package/src/libs/engine/src/plugins/PluginManager.d.ts +95 -0
- package/src/libs/engine/src/plugins/PluginManager.js +388 -0
- package/src/libs/engine/src/plugins/index.d.ts +1 -0
- package/src/libs/engine/src/plugins/index.js +6 -0
- package/src/libs/engine/src/ports/connection-rules.d.ts +32 -0
- package/src/libs/engine/src/ports/connection-rules.js +131 -0
- package/src/libs/engine/src/ports/dynamic-ports.d.ts +27 -0
- package/src/libs/engine/src/ports/dynamic-ports.js +135 -0
- package/src/libs/engine/src/ports/index.d.ts +5 -0
- package/src/libs/engine/src/ports/index.js +16 -0
- package/src/libs/engine/src/ports/port-groups.d.ts +43 -0
- package/src/libs/engine/src/ports/port-groups.js +185 -0
- package/src/libs/engine/src/ports/port-type-registry.d.ts +34 -0
- package/src/libs/engine/src/ports/port-type-registry.js +87 -0
- package/src/libs/engine/src/ports/port-types.d.ts +266 -0
- package/src/libs/engine/src/ports/port-types.js +30 -0
- package/src/libs/engine/src/rendering/HtmlTemplateRenderer.d.ts +136 -0
- package/src/libs/engine/src/rendering/HtmlTemplateRenderer.js +292 -0
- package/src/libs/engine/src/rendering/LemonadeJSRenderer.d.ts +160 -0
- package/src/libs/engine/src/rendering/LemonadeJSRenderer.js +362 -0
- package/src/libs/engine/src/rendering/index.d.ts +2 -0
- package/src/libs/engine/src/rendering/index.js +7 -0
- package/src/libs/engine/src/routing/LiveReroutingEngine.d.ts +75 -0
- package/src/libs/engine/src/routing/LiveReroutingEngine.js +173 -0
- package/src/libs/engine/src/routing/ObstacleIndex.d.ts +42 -0
- package/src/libs/engine/src/routing/ObstacleIndex.js +215 -0
- package/src/libs/engine/src/routing/ObstacleMap.d.ts +68 -0
- package/src/libs/engine/src/routing/ObstacleMap.js +312 -0
- package/src/libs/engine/src/routing/ObstacleMapBuilder.d.ts +28 -0
- package/src/libs/engine/src/routing/ObstacleMapBuilder.js +76 -0
- package/src/libs/engine/src/routing/PathSimplifier.d.ts +119 -0
- package/src/libs/engine/src/routing/PathSimplifier.js +224 -0
- package/src/libs/engine/src/routing/RoutingEngine.d.ts +118 -0
- package/src/libs/engine/src/routing/RoutingEngine.js +546 -0
- package/src/libs/engine/src/routing/algorithms/AStarRouter.d.ts +90 -0
- package/src/libs/engine/src/routing/algorithms/AStarRouter.js +331 -0
- package/src/libs/engine/src/routing/algorithms/DijkstraRouter.d.ts +74 -0
- package/src/libs/engine/src/routing/algorithms/DijkstraRouter.js +297 -0
- package/src/libs/engine/src/routing/algorithms/ElkRouter.d.ts +34 -0
- package/src/libs/engine/src/routing/algorithms/ElkRouter.js +210 -0
- package/src/libs/engine/src/routing/algorithms/ManhattanRouter.d.ts +18 -0
- package/src/libs/engine/src/routing/algorithms/ManhattanRouter.js +224 -0
- package/src/libs/engine/src/routing/algorithms/OrthogonalRouter.d.ts +173 -0
- package/src/libs/engine/src/routing/algorithms/OrthogonalRouter.js +1092 -0
- package/src/libs/engine/src/routing/algorithms/StraightRouter.d.ts +8 -0
- package/src/libs/engine/src/routing/algorithms/StraightRouter.js +53 -0
- package/src/libs/engine/src/routing/algorithms/VisibilityGraphRouter.d.ts +59 -0
- package/src/libs/engine/src/routing/algorithms/VisibilityGraphRouter.js +258 -0
- package/src/libs/engine/src/routing/global/GlobalRouteSolver.d.ts +64 -0
- package/src/libs/engine/src/routing/global/GlobalRouteSolver.js +334 -0
- package/src/libs/engine/src/routing/global/solver-host.d.ts +65 -0
- package/src/libs/engine/src/routing/global/solver-host.js +87 -0
- package/src/libs/engine/src/routing/index.d.ts +15 -0
- package/src/libs/engine/src/routing/index.js +20 -0
- package/src/libs/engine/src/routing/types.d.ts +161 -0
- package/src/libs/engine/src/routing/types.js +4 -0
- package/src/libs/engine/src/selection/SelectionManager.d.ts +161 -0
- package/src/libs/engine/src/selection/SelectionManager.js +483 -0
- package/src/libs/engine/src/selection/index.d.ts +1 -0
- package/src/libs/engine/src/selection/index.js +6 -0
- package/src/libs/engine/src/serialization/DiagramMigrations.d.ts +41 -0
- package/src/libs/engine/src/serialization/DiagramMigrations.js +124 -0
- package/src/libs/engine/src/serialization/DiagramValidator.d.ts +20 -0
- package/src/libs/engine/src/serialization/DiagramValidator.js +136 -0
- package/src/libs/engine/src/serialization/DocumentEnvelope.d.ts +53 -0
- package/src/libs/engine/src/serialization/DocumentEnvelope.js +111 -0
- package/src/libs/engine/src/serialization/Incremental.d.ts +77 -0
- package/src/libs/engine/src/serialization/Incremental.js +227 -0
- package/src/libs/engine/src/serialization/Serializer.d.ts +29 -0
- package/src/libs/engine/src/serialization/Serializer.js +45 -0
- package/src/libs/engine/src/serialization/Subgraph.d.ts +51 -0
- package/src/libs/engine/src/serialization/Subgraph.js +172 -0
- package/src/libs/engine/src/serialization/TextFormat.d.ts +71 -0
- package/src/libs/engine/src/serialization/TextFormat.js +261 -0
- package/src/libs/engine/src/state/ConnectionStateManager.d.ts +178 -0
- package/src/libs/engine/src/state/ConnectionStateManager.js +319 -0
- package/src/libs/engine/src/state/DiagramStore.d.ts +134 -0
- package/src/libs/engine/src/state/DiagramStore.js +372 -0
- package/src/libs/engine/src/state/index.d.ts +2 -0
- package/src/libs/engine/src/state/index.js +7 -0
- package/src/libs/engine/src/sync/awareness.d.ts +91 -0
- package/src/libs/engine/src/sync/awareness.js +221 -0
- package/src/libs/engine/src/sync/batcher.d.ts +84 -0
- package/src/libs/engine/src/sync/batcher.js +0 -0
- package/src/libs/engine/src/sync/causal-buffer.d.ts +81 -0
- package/src/libs/engine/src/sync/causal-buffer.js +199 -0
- package/src/libs/engine/src/sync/index.d.ts +20 -0
- package/src/libs/engine/src/sync/index.js +41 -0
- package/src/libs/engine/src/sync/protocol.d.ts +74 -0
- package/src/libs/engine/src/sync/protocol.js +39 -0
- package/src/libs/engine/src/sync/sync-adapter.d.ts +243 -0
- package/src/libs/engine/src/sync/sync-adapter.js +524 -0
- package/src/libs/engine/src/sync/transport.d.ts +30 -0
- package/src/libs/engine/src/sync/transport.js +28 -0
- package/src/libs/engine/src/sync/transports/broadcast-channel.d.ts +39 -0
- package/src/libs/engine/src/sync/transports/broadcast-channel.js +117 -0
- package/src/libs/engine/src/sync/transports/memory.d.ts +38 -0
- package/src/libs/engine/src/sync/transports/memory.js +111 -0
- package/src/libs/engine/src/sync/transports/unreliable.d.ts +59 -0
- package/src/libs/engine/src/sync/transports/unreliable.js +153 -0
- package/src/libs/engine/src/sync/transports/websocket.d.ts +60 -0
- package/src/libs/engine/src/sync/transports/websocket.js +210 -0
- package/src/libs/engine/src/sync/version-vector.d.ts +47 -0
- package/src/libs/engine/src/sync/version-vector.js +218 -0
- package/src/libs/engine/src/template-library/common-templates.d.ts +46 -0
- package/src/libs/engine/src/template-library/common-templates.js +395 -0
- package/src/libs/engine/src/template-library/data-viz-templates.d.ts +52 -0
- package/src/libs/engine/src/template-library/data-viz-templates.js +471 -0
- package/src/libs/engine/src/template-library/erd-templates.d.ts +71 -0
- package/src/libs/engine/src/template-library/erd-templates.js +773 -0
- package/src/libs/engine/src/template-library/index.d.ts +141 -0
- package/src/libs/engine/src/template-library/index.js +271 -0
- package/src/libs/engine/src/template-library/integration.d.ts +80 -0
- package/src/libs/engine/src/template-library/integration.js +141 -0
- package/src/libs/engine/src/template-library/workflow-templates.d.ts +52 -0
- package/src/libs/engine/src/template-library/workflow-templates.js +438 -0
- package/src/libs/engine/src/templates/NodeFactory.d.ts +118 -0
- package/src/libs/engine/src/templates/NodeFactory.js +436 -0
- package/src/libs/engine/src/templates/NodeTemplate.d.ts +342 -0
- package/src/libs/engine/src/templates/NodeTemplate.js +13 -0
- package/src/libs/engine/src/templates/TemplateLoader.d.ts +46 -0
- package/src/libs/engine/src/templates/TemplateLoader.js +114 -0
- package/src/libs/engine/src/templates/TemplateRegistry.d.ts +70 -0
- package/src/libs/engine/src/templates/TemplateRegistry.js +128 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-business-rule-task.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-business-rule-task.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-end-event.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-end-event.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-error-event.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-error-event.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-exclusive-gateway.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-exclusive-gateway.template.js +124 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-inclusive-gateway.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-inclusive-gateway.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-intermediate-event.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-intermediate-event.template.js +124 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-manual-task.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-manual-task.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-message-event.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-message-event.template.js +122 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-parallel-gateway.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-parallel-gateway.template.js +125 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-script-task.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-script-task.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-service-task.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-service-task.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-start-event.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-start-event.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-task.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-task.template.js +152 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-timer-event.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-timer-event.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-user-task.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/bpmn/bpmn-user-task.template.js +123 -0
- package/src/libs/engine/src/templates/generated/bpmn/index.d.ts +15 -0
- package/src/libs/engine/src/templates/generated/bpmn/index.js +34 -0
- package/src/libs/engine/src/templates/generated/erd/erd-associative-entity.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-associative-entity.template.js +152 -0
- package/src/libs/engine/src/templates/generated/erd/erd-attribute.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-attribute.template.js +122 -0
- package/src/libs/engine/src/templates/generated/erd/erd-bridge-entity.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-bridge-entity.template.js +151 -0
- package/src/libs/engine/src/templates/generated/erd/erd-composite-attribute.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-composite-attribute.template.js +122 -0
- package/src/libs/engine/src/templates/generated/erd/erd-derived-attribute.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-derived-attribute.template.js +122 -0
- package/src/libs/engine/src/templates/generated/erd/erd-discriminator.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-discriminator.template.js +123 -0
- package/src/libs/engine/src/templates/generated/erd/erd-entity.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-entity.template.js +149 -0
- package/src/libs/engine/src/templates/generated/erd/erd-isa.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-isa.template.js +123 -0
- package/src/libs/engine/src/templates/generated/erd/erd-key-attribute.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-key-attribute.template.js +122 -0
- package/src/libs/engine/src/templates/generated/erd/erd-multivalued-attribute.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-multivalued-attribute.template.js +122 -0
- package/src/libs/engine/src/templates/generated/erd/erd-optional-attribute.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-optional-attribute.template.js +122 -0
- package/src/libs/engine/src/templates/generated/erd/erd-partial-key.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-partial-key.template.js +123 -0
- package/src/libs/engine/src/templates/generated/erd/erd-relationship.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-relationship.template.js +121 -0
- package/src/libs/engine/src/templates/generated/erd/erd-subtype.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-subtype.template.js +123 -0
- package/src/libs/engine/src/templates/generated/erd/erd-supertype.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-supertype.template.js +123 -0
- package/src/libs/engine/src/templates/generated/erd/erd-table.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-table.template.js +123 -0
- package/src/libs/engine/src/templates/generated/erd/erd-view.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-view.template.js +123 -0
- package/src/libs/engine/src/templates/generated/erd/erd-weak-entity.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-weak-entity.template.js +149 -0
- package/src/libs/engine/src/templates/generated/erd/erd-weak-relationship.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/erd/erd-weak-relationship.template.js +122 -0
- package/src/libs/engine/src/templates/generated/erd/index.d.ts +19 -0
- package/src/libs/engine/src/templates/generated/erd/index.js +42 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-connector.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-connector.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-data.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-data.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-decision.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-decision.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-delay.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-delay.template.js +124 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-display.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-display.template.js +124 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-document.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-document.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-input.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-input.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-operation.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-manual-operation.template.js +122 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-merge.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-merge.template.js +122 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-or.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-or.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-predefined-process.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-predefined-process.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-preparation.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-preparation.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-process.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-process.template.js +122 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-stored-data.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-stored-data.template.js +123 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-summing-junction.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-summing-junction.template.js +124 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-terminal.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/flowchart/flowchart-terminal.template.js +124 -0
- package/src/libs/engine/src/templates/generated/flowchart/index.d.ts +16 -0
- package/src/libs/engine/src/templates/generated/flowchart/index.js +36 -0
- package/src/libs/engine/src/templates/generated/index.d.ts +9 -0
- package/src/libs/engine/src/templates/generated/index.js +13 -0
- package/src/libs/engine/src/templates/generated/register.d.ts +23 -0
- package/src/libs/engine/src/templates/generated/register.js +31 -0
- package/src/libs/engine/src/templates/generated/uml/index.d.ts +30 -0
- package/src/libs/engine/src/templates/generated/uml/index.js +64 -0
- package/src/libs/engine/src/templates/generated/uml/uml-abstract-class.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-abstract-class.template.js +204 -0
- package/src/libs/engine/src/templates/generated/uml/uml-activation.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-activation.template.js +124 -0
- package/src/libs/engine/src/templates/generated/uml/uml-activity-partition.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-activity-partition.template.js +124 -0
- package/src/libs/engine/src/templates/generated/uml/uml-activity.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-activity.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-actor.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-actor.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-class.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-class.template.js +204 -0
- package/src/libs/engine/src/templates/generated/uml/uml-collaboration.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-collaboration.template.js +122 -0
- package/src/libs/engine/src/templates/generated/uml/uml-component.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-component.template.js +122 -0
- package/src/libs/engine/src/templates/generated/uml/uml-datatype.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-datatype.template.js +204 -0
- package/src/libs/engine/src/templates/generated/uml/uml-decision.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-decision.template.js +124 -0
- package/src/libs/engine/src/templates/generated/uml/uml-enum.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-enum.template.js +204 -0
- package/src/libs/engine/src/templates/generated/uml/uml-final-node.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-final-node.template.js +124 -0
- package/src/libs/engine/src/templates/generated/uml/uml-final-state.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-final-state.template.js +124 -0
- package/src/libs/engine/src/templates/generated/uml/uml-fork.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-fork.template.js +125 -0
- package/src/libs/engine/src/templates/generated/uml/uml-initial-node.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-initial-node.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-initial-state.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-initial-state.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-interface.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-interface.template.js +204 -0
- package/src/libs/engine/src/templates/generated/uml/uml-join.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-join.template.js +125 -0
- package/src/libs/engine/src/templates/generated/uml/uml-lifeline.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-lifeline.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-merge.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-merge.template.js +122 -0
- package/src/libs/engine/src/templates/generated/uml/uml-node.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-node.template.js +122 -0
- package/src/libs/engine/src/templates/generated/uml/uml-note.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-note.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-object.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-object.template.js +204 -0
- package/src/libs/engine/src/templates/generated/uml/uml-package.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-package.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-part.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-part.template.js +122 -0
- package/src/libs/engine/src/templates/generated/uml/uml-port.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-port.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-primitive-type.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-primitive-type.template.js +204 -0
- package/src/libs/engine/src/templates/generated/uml/uml-signal.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-signal.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-state.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-state.template.js +123 -0
- package/src/libs/engine/src/templates/generated/uml/uml-use-case.template.d.ts +11 -0
- package/src/libs/engine/src/templates/generated/uml/uml-use-case.template.js +122 -0
- package/src/libs/engine/src/templates/index.d.ts +12 -0
- package/src/libs/engine/src/templates/index.js +27 -0
- package/src/libs/engine/src/templates/stencils.d.ts +45 -0
- package/src/libs/engine/src/templates/stencils.js +85 -0
- package/src/libs/engine/src/types/domain/bpmn.d.ts +25 -0
- package/src/libs/engine/src/types/domain/bpmn.js +313 -0
- package/src/libs/engine/src/types/domain/erd.d.ts +29 -0
- package/src/libs/engine/src/types/domain/erd.js +394 -0
- package/src/libs/engine/src/types/domain/flowchart.d.ts +26 -0
- package/src/libs/engine/src/types/domain/flowchart.js +434 -0
- package/src/libs/engine/src/types/domain/index.d.ts +4 -0
- package/src/libs/engine/src/types/domain/index.js +9 -0
- package/src/libs/engine/src/types/domain/uml.d.ts +40 -0
- package/src/libs/engine/src/types/domain/uml.js +758 -0
- package/src/libs/engine/src/types/event.types.d.ts +142 -0
- package/src/libs/engine/src/types/event.types.js +96 -0
- package/src/libs/engine/src/types/geometry.types.d.ts +84 -0
- package/src/libs/engine/src/types/geometry.types.js +16 -0
- package/src/libs/engine/src/types/index.d.ts +7 -0
- package/src/libs/engine/src/types/index.js +14 -0
- package/src/libs/engine/src/types/layout.types.d.ts +148 -0
- package/src/libs/engine/src/types/layout.types.js +28 -0
- package/src/libs/engine/src/types/model.types.d.ts +378 -0
- package/src/libs/engine/src/types/model.types.js +4 -0
- package/src/libs/engine/src/types/performance.types.d.ts +109 -0
- package/src/libs/engine/src/types/performance.types.js +122 -0
- package/src/libs/engine/src/types/plugin.types.d.ts +30 -0
- package/src/libs/engine/src/types/plugin.types.js +4 -0
- package/src/libs/engine/src/utils/deep-clone.d.ts +9 -0
- package/src/libs/engine/src/utils/deep-clone.js +123 -0
- package/src/libs/engine/src/utils/geometry.d.ts +45 -0
- package/src/libs/engine/src/utils/geometry.js +241 -0
- package/src/libs/engine/src/utils/id.d.ts +22 -0
- package/src/libs/engine/src/utils/id.js +44 -0
- package/src/libs/engine/src/utils/index.d.ts +3 -0
- package/src/libs/engine/src/utils/index.js +8 -0
- package/src/libs/engine/src/utils/transform.d.ts +84 -0
- package/src/libs/engine/src/utils/transform.js +200 -0
- package/src/libs/engine/src/validation/ConnectionGroupValidator.d.ts +22 -0
- package/src/libs/engine/src/validation/ConnectionGroupValidator.js +56 -0
- package/src/libs/engine/src/validation/TypeRegistry.d.ts +179 -0
- package/src/libs/engine/src/validation/TypeRegistry.js +358 -0
- package/src/libs/engine/src/validation/ValidationEngine.d.ts +79 -0
- package/src/libs/engine/src/validation/ValidationEngine.js +1150 -0
- package/src/libs/engine/src/validation/index.d.ts +3 -0
- package/src/libs/engine/src/validation/index.js +8 -0
- package/src/libs/renderer/src/a11y/diagram-outline.d.ts +93 -0
- package/src/libs/renderer/src/a11y/diagram-outline.js +0 -0
- package/src/libs/renderer/src/a11y/focus-containment.d.ts +90 -0
- package/src/libs/renderer/src/a11y/focus-containment.js +173 -0
- package/src/libs/renderer/src/a11y/graph-topology.d.ts +70 -0
- package/src/libs/renderer/src/a11y/graph-topology.js +0 -0
- package/src/libs/renderer/src/a11y/index.d.ts +26 -0
- package/src/libs/renderer/src/a11y/index.js +30 -0
- package/src/libs/renderer/src/a11y/live-region.d.ts +83 -0
- package/src/libs/renderer/src/a11y/live-region.js +170 -0
- package/src/libs/renderer/src/a11y/outline-view.d.ts +62 -0
- package/src/libs/renderer/src/a11y/outline-view.js +158 -0
- package/src/libs/renderer/src/a11y/reduced-motion.d.ts +48 -0
- package/src/libs/renderer/src/a11y/reduced-motion.js +223 -0
- package/src/libs/renderer/src/a11y/semantics.d.ts +76 -0
- package/src/libs/renderer/src/a11y/semantics.js +229 -0
- package/src/libs/renderer/src/canvas/canvas-context.d.ts +167 -0
- package/src/libs/renderer/src/canvas/canvas-context.js +267 -0
- package/src/libs/renderer/src/canvas/canvas-renderer.d.ts +194 -0
- package/src/libs/renderer/src/canvas/canvas-renderer.js +600 -0
- package/src/libs/renderer/src/canvas/dirty-region.d.ts +56 -0
- package/src/libs/renderer/src/canvas/dirty-region.js +171 -0
- package/src/libs/renderer/src/canvas/index.d.ts +16 -0
- package/src/libs/renderer/src/canvas/index.js +79 -0
- package/src/libs/renderer/src/canvas/path-geometry.d.ts +112 -0
- package/src/libs/renderer/src/canvas/path-geometry.js +673 -0
- package/src/libs/renderer/src/canvas/render-backend.d.ts +133 -0
- package/src/libs/renderer/src/canvas/render-backend.js +339 -0
- package/src/libs/renderer/src/canvas/style-resolution.d.ts +101 -0
- package/src/libs/renderer/src/canvas/style-resolution.js +466 -0
- package/src/libs/renderer/src/canvas/tier-policy.d.ts +33 -0
- package/src/libs/renderer/src/canvas/tier-policy.js +89 -0
- package/src/libs/renderer/src/canvas/vnode-painter.d.ts +154 -0
- package/src/libs/renderer/src/canvas/vnode-painter.js +649 -0
- package/src/libs/renderer/src/comments/comment-overlay.d.ts +56 -0
- package/src/libs/renderer/src/comments/comment-overlay.js +127 -0
- package/src/libs/renderer/src/comments/comment-panel.d.ts +45 -0
- package/src/libs/renderer/src/comments/comment-panel.js +287 -0
- package/src/libs/renderer/src/comments/comment-pins.d.ts +34 -0
- package/src/libs/renderer/src/comments/comment-pins.js +227 -0
- package/src/libs/renderer/src/comments/index.d.ts +3 -0
- package/src/libs/renderer/src/comments/index.js +17 -0
- package/src/libs/renderer/src/export/assets.d.ts +96 -0
- package/src/libs/renderer/src/export/assets.js +350 -0
- package/src/libs/renderer/src/export/batch.d.ts +49 -0
- package/src/libs/renderer/src/export/batch.js +95 -0
- package/src/libs/renderer/src/export/bounds.d.ts +81 -0
- package/src/libs/renderer/src/export/bounds.js +367 -0
- package/src/libs/renderer/src/export/capture-host.d.ts +39 -0
- package/src/libs/renderer/src/export/capture-host.js +1259 -0
- package/src/libs/renderer/src/export/custom-nodes.d.ts +88 -0
- package/src/libs/renderer/src/export/custom-nodes.js +237 -0
- package/src/libs/renderer/src/export/index.d.ts +14 -0
- package/src/libs/renderer/src/export/index.js +30 -0
- package/src/libs/renderer/src/export/node-raster.d.ts +60 -0
- package/src/libs/renderer/src/export/node-raster.js +161 -0
- package/src/libs/renderer/src/export/pagination.d.ts +116 -0
- package/src/libs/renderer/src/export/pagination.js +245 -0
- package/src/libs/renderer/src/export/pdf/flate.d.ts +13 -0
- package/src/libs/renderer/src/export/pdf/flate.js +287 -0
- package/src/libs/renderer/src/export/pdf/index.d.ts +4 -0
- package/src/libs/renderer/src/export/pdf/index.js +15 -0
- package/src/libs/renderer/src/export/pdf/pdf-export.d.ts +64 -0
- package/src/libs/renderer/src/export/pdf/pdf-export.js +1076 -0
- package/src/libs/renderer/src/export/pdf/pdf-path.d.ts +17 -0
- package/src/libs/renderer/src/export/pdf/pdf-path.js +85 -0
- package/src/libs/renderer/src/export/pdf/pdf-primitives.d.ts +115 -0
- package/src/libs/renderer/src/export/pdf/pdf-primitives.js +338 -0
- package/src/libs/renderer/src/export/pdf/png.d.ts +25 -0
- package/src/libs/renderer/src/export/pdf/png.js +596 -0
- package/src/libs/renderer/src/export/raster.d.ts +42 -0
- package/src/libs/renderer/src/export/raster.js +126 -0
- package/src/libs/renderer/src/export/round-trip.d.ts +83 -0
- package/src/libs/renderer/src/export/round-trip.js +432 -0
- package/src/libs/renderer/src/export/scope.d.ts +16 -0
- package/src/libs/renderer/src/export/scope.js +69 -0
- package/src/libs/renderer/src/export/style-flattener.d.ts +23 -0
- package/src/libs/renderer/src/export/style-flattener.js +144 -0
- package/src/libs/renderer/src/export/svg-export.d.ts +123 -0
- package/src/libs/renderer/src/export/svg-export.js +178 -0
- package/src/libs/renderer/src/export/vnode-serializer.d.ts +75 -0
- package/src/libs/renderer/src/export/vnode-serializer.js +344 -0
- package/src/libs/renderer/src/ext/capabilities.d.ts +178 -0
- package/src/libs/renderer/src/ext/capabilities.js +22 -0
- package/src/libs/renderer/src/ext/capability-factory.d.ts +44 -0
- package/src/libs/renderer/src/ext/capability-factory.js +194 -0
- package/src/libs/renderer/src/ext/components/attach.d.ts +66 -0
- package/src/libs/renderer/src/ext/components/attach.js +112 -0
- package/src/libs/renderer/src/ext/components/background.d.ts +84 -0
- package/src/libs/renderer/src/ext/components/background.js +202 -0
- package/src/libs/renderer/src/ext/components/controls.d.ts +49 -0
- package/src/libs/renderer/src/ext/components/controls.js +144 -0
- package/src/libs/renderer/src/ext/components/minimap.d.ts +78 -0
- package/src/libs/renderer/src/ext/components/minimap.js +326 -0
- package/src/libs/renderer/src/ext/diagram-registry.d.ts +109 -0
- package/src/libs/renderer/src/ext/diagram-registry.js +303 -0
- package/src/libs/renderer/src/ext/disposable.d.ts +51 -0
- package/src/libs/renderer/src/ext/disposable.js +104 -0
- package/src/libs/renderer/src/ext/extension-host.d.ts +144 -0
- package/src/libs/renderer/src/ext/extension-host.js +272 -0
- package/src/libs/renderer/src/ext/index.d.ts +62 -0
- package/src/libs/renderer/src/ext/index.js +91 -0
- package/src/libs/renderer/src/ext/link-pipeline.d.ts +195 -0
- package/src/libs/renderer/src/ext/link-pipeline.js +431 -0
- package/src/libs/renderer/src/ext/manifest.d.ts +73 -0
- package/src/libs/renderer/src/ext/manifest.js +149 -0
- package/src/libs/renderer/src/ext/node-component.d.ts +114 -0
- package/src/libs/renderer/src/ext/node-component.js +290 -0
- package/src/libs/renderer/src/ext/plugins-loader.d.ts +1 -0
- package/src/libs/renderer/src/ext/plugins-loader.js +18 -0
- package/src/libs/renderer/src/ext/portal.d.ts +129 -0
- package/src/libs/renderer/src/ext/portal.js +267 -0
- package/src/libs/renderer/src/ext/public-api.d.ts +101 -0
- package/src/libs/renderer/src/ext/public-api.js +201 -0
- package/src/libs/renderer/src/ext/registry-scope.d.ts +93 -0
- package/src/libs/renderer/src/ext/registry-scope.js +142 -0
- package/src/libs/renderer/src/ext/tools.d.ts +164 -0
- package/src/libs/renderer/src/ext/tools.js +170 -0
- package/src/libs/renderer/src/index.d.ts +34 -0
- package/src/libs/renderer/src/index.js +108 -0
- package/src/libs/renderer/src/instance/create-diagram.d.ts +385 -0
- package/src/libs/renderer/src/instance/create-diagram.js +1150 -0
- package/src/libs/renderer/src/instance/diagram-instance.d.ts +48 -0
- package/src/libs/renderer/src/instance/diagram-instance.js +51 -0
- package/src/libs/renderer/src/instance/dom-event-binder.d.ts +394 -0
- package/src/libs/renderer/src/instance/dom-event-binder.js +2104 -0
- package/src/libs/renderer/src/instance/index.d.ts +5 -0
- package/src/libs/renderer/src/instance/index.js +13 -0
- package/src/libs/renderer/src/instance/layers.d.ts +31 -0
- package/src/libs/renderer/src/instance/layers.js +43 -0
- package/src/libs/renderer/src/instance/model-input.d.ts +229 -0
- package/src/libs/renderer/src/instance/model-input.js +325 -0
- package/src/libs/renderer/src/instance/render-scheduler.d.ts +79 -0
- package/src/libs/renderer/src/instance/render-scheduler.js +96 -0
- package/src/libs/renderer/src/instance/wheel-scroll-yield.d.ts +38 -0
- package/src/libs/renderer/src/instance/wheel-scroll-yield.js +118 -0
- package/src/libs/renderer/src/interaction/ControlPointEditor.d.ts +160 -0
- package/src/libs/renderer/src/interaction/ControlPointEditor.js +360 -0
- package/src/libs/renderer/src/interaction/WaypointEditor.d.ts +133 -0
- package/src/libs/renderer/src/interaction/WaypointEditor.js +263 -0
- package/src/libs/renderer/src/interaction/highlighters.d.ts +88 -0
- package/src/libs/renderer/src/interaction/highlighters.js +212 -0
- package/src/libs/renderer/src/interaction/in-place-editor.d.ts +63 -0
- package/src/libs/renderer/src/interaction/in-place-editor.js +141 -0
- package/src/libs/renderer/src/interaction/index.d.ts +11 -0
- package/src/libs/renderer/src/interaction/index.js +29 -0
- package/src/libs/renderer/src/interaction/ink-overlay.d.ts +53 -0
- package/src/libs/renderer/src/interaction/ink-overlay.js +154 -0
- package/src/libs/renderer/src/interaction/interaction-controller.d.ts +555 -0
- package/src/libs/renderer/src/interaction/interaction-controller.js +1733 -0
- package/src/libs/renderer/src/interaction/keyboard-navigation.d.ts +223 -0
- package/src/libs/renderer/src/interaction/keyboard-navigation.js +885 -0
- package/src/libs/renderer/src/interaction/selection-tools.d.ts +343 -0
- package/src/libs/renderer/src/interaction/selection-tools.js +918 -0
- package/src/libs/renderer/src/interaction/snapping.d.ts +210 -0
- package/src/libs/renderer/src/interaction/snapping.js +569 -0
- package/src/libs/renderer/src/interaction/touch-gestures.d.ts +160 -0
- package/src/libs/renderer/src/interaction/touch-gestures.js +549 -0
- package/src/libs/renderer/src/interaction/whiteboard-tools.d.ts +171 -0
- package/src/libs/renderer/src/interaction/whiteboard-tools.js +476 -0
- package/src/libs/renderer/src/lazy/host-culling.d.ts +116 -0
- package/src/libs/renderer/src/lazy/host-culling.js +135 -0
- package/src/libs/renderer/src/lazy/index.d.ts +7 -0
- package/src/libs/renderer/src/lazy/index.js +28 -0
- package/src/libs/renderer/src/lazy/progressive-mounter.d.ts +80 -0
- package/src/libs/renderer/src/lazy/progressive-mounter.js +264 -0
- package/src/libs/renderer/src/lazy/types.d.ts +43 -0
- package/src/libs/renderer/src/lazy/types.js +14 -0
- package/src/libs/renderer/src/lazy/view-lifecycle.d.ts +97 -0
- package/src/libs/renderer/src/lazy/view-lifecycle.js +221 -0
- package/src/libs/renderer/src/perf/index.d.ts +2 -0
- package/src/libs/renderer/src/perf/index.js +7 -0
- package/src/libs/renderer/src/perf/perf-hud.d.ts +46 -0
- package/src/libs/renderer/src/perf/perf-hud.js +105 -0
- package/src/libs/renderer/src/perf/quality-governor.d.ts +77 -0
- package/src/libs/renderer/src/perf/quality-governor.js +154 -0
- package/src/libs/renderer/src/platform/index.d.ts +1 -0
- package/src/libs/renderer/src/platform/index.js +5 -0
- package/src/libs/renderer/src/platform/platform.d.ts +34 -0
- package/src/libs/renderer/src/platform/platform.js +64 -0
- package/src/libs/renderer/src/presence/bind-presence.d.ts +51 -0
- package/src/libs/renderer/src/presence/bind-presence.js +144 -0
- package/src/libs/renderer/src/presence/index.d.ts +4 -0
- package/src/libs/renderer/src/presence/index.js +18 -0
- package/src/libs/renderer/src/presence/presence-overlay.d.ts +121 -0
- package/src/libs/renderer/src/presence/presence-overlay.js +465 -0
- package/src/libs/renderer/src/presentation/index.d.ts +3 -0
- package/src/libs/renderer/src/presentation/index.js +14 -0
- package/src/libs/renderer/src/presentation/presentation.d.ts +94 -0
- package/src/libs/renderer/src/presentation/presentation.js +158 -0
- package/src/libs/renderer/src/presentation/viewport-channel.d.ts +78 -0
- package/src/libs/renderer/src/presentation/viewport-channel.js +86 -0
- package/src/libs/renderer/src/services/animation-lifecycle.d.ts +153 -0
- package/src/libs/renderer/src/services/animation-lifecycle.js +326 -0
- package/src/libs/renderer/src/services/animation-performance.service.d.ts +191 -0
- package/src/libs/renderer/src/services/animation-performance.service.js +371 -0
- package/src/libs/renderer/src/services/animation-sequencer.d.ts +226 -0
- package/src/libs/renderer/src/services/animation-sequencer.js +379 -0
- package/src/libs/renderer/src/services/animation.service.d.ts +182 -0
- package/src/libs/renderer/src/services/animation.service.js +858 -0
- package/src/libs/renderer/src/services/custom-animation-registry.d.ts +182 -0
- package/src/libs/renderer/src/services/custom-animation-registry.js +361 -0
- package/src/libs/renderer/src/ssr/index.d.ts +1 -0
- package/src/libs/renderer/src/ssr/index.js +6 -0
- package/src/libs/renderer/src/ssr/render-to-static.d.ts +91 -0
- package/src/libs/renderer/src/ssr/render-to-static.js +81 -0
- package/src/libs/renderer/src/svg/ArrowRenderer.d.ts +159 -0
- package/src/libs/renderer/src/svg/ArrowRenderer.js +723 -0
- package/src/libs/renderer/src/svg/JumpPointDetector.d.ts +79 -0
- package/src/libs/renderer/src/svg/JumpPointDetector.js +176 -0
- package/src/libs/renderer/src/svg/JumpPointRenderer.d.ts +59 -0
- package/src/libs/renderer/src/svg/JumpPointRenderer.js +309 -0
- package/src/libs/renderer/src/svg/LabelRenderer.d.ts +76 -0
- package/src/libs/renderer/src/svg/LabelRenderer.js +273 -0
- package/src/libs/renderer/src/svg/auto-size.d.ts +76 -0
- package/src/libs/renderer/src/svg/auto-size.js +142 -0
- package/src/libs/renderer/src/svg/channel-nudging.d.ts +34 -0
- package/src/libs/renderer/src/svg/channel-nudging.js +226 -0
- package/src/libs/renderer/src/svg/edge-optimizer.d.ts +228 -0
- package/src/libs/renderer/src/svg/edge-optimizer.js +606 -0
- package/src/libs/renderer/src/svg/edge-templates.d.ts +152 -0
- package/src/libs/renderer/src/svg/edge-templates.js +233 -0
- package/src/libs/renderer/src/svg/html-node.d.ts +50 -0
- package/src/libs/renderer/src/svg/html-node.js +214 -0
- package/src/libs/renderer/src/svg/index.d.ts +25 -0
- package/src/libs/renderer/src/svg/index.js +32 -0
- package/src/libs/renderer/src/svg/link-fanout.d.ts +127 -0
- package/src/libs/renderer/src/svg/link-fanout.js +333 -0
- package/src/libs/renderer/src/svg/link-hit-test.d.ts +142 -0
- package/src/libs/renderer/src/svg/link-hit-test.js +182 -0
- package/src/libs/renderer/src/svg/motion-tracker.d.ts +18 -0
- package/src/libs/renderer/src/svg/motion-tracker.js +71 -0
- package/src/libs/renderer/src/svg/node-sizing.d.ts +51 -0
- package/src/libs/renderer/src/svg/node-sizing.js +65 -0
- package/src/libs/renderer/src/svg/node-toolbar.d.ts +30 -0
- package/src/libs/renderer/src/svg/node-toolbar.js +45 -0
- package/src/libs/renderer/src/svg/notation-shapes.d.ts +2 -0
- package/src/libs/renderer/src/svg/notation-shapes.js +126 -0
- package/src/libs/renderer/src/svg/paint-servers.d.ts +49 -0
- package/src/libs/renderer/src/svg/paint-servers.js +225 -0
- package/src/libs/renderer/src/svg/panel.d.ts +115 -0
- package/src/libs/renderer/src/svg/panel.js +353 -0
- package/src/libs/renderer/src/svg/path-outline.d.ts +35 -0
- package/src/libs/renderer/src/svg/path-outline.js +134 -0
- package/src/libs/renderer/src/svg/port-glyph.d.ts +27 -0
- package/src/libs/renderer/src/svg/port-glyph.js +97 -0
- package/src/libs/renderer/src/svg/port-label.d.ts +74 -0
- package/src/libs/renderer/src/svg/port-label.js +201 -0
- package/src/libs/renderer/src/svg/port-layout.d.ts +50 -0
- package/src/libs/renderer/src/svg/port-layout.js +212 -0
- package/src/libs/renderer/src/svg/port-positioning.d.ts +33 -0
- package/src/libs/renderer/src/svg/port-positioning.js +101 -0
- package/src/libs/renderer/src/svg/port-spots.d.ts +69 -0
- package/src/libs/renderer/src/svg/port-spots.js +154 -0
- package/src/libs/renderer/src/svg/route-memo.d.ts +63 -0
- package/src/libs/renderer/src/svg/route-memo.js +206 -0
- package/src/libs/renderer/src/svg/route-solver-bridge.d.ts +48 -0
- package/src/libs/renderer/src/svg/route-solver-bridge.js +151 -0
- package/src/libs/renderer/src/svg/shape-registry.d.ts +189 -0
- package/src/libs/renderer/src/svg/shape-registry.js +1104 -0
- package/src/libs/renderer/src/svg/stroke-layer.d.ts +36 -0
- package/src/libs/renderer/src/svg/stroke-layer.js +183 -0
- package/src/libs/renderer/src/svg/svg-renderer.d.ts +1737 -0
- package/src/libs/renderer/src/svg/svg-renderer.js +7772 -0
- package/src/libs/renderer/src/svg/text-block.d.ts +54 -0
- package/src/libs/renderer/src/svg/text-block.js +171 -0
- package/src/libs/renderer/src/themes/color-mode.d.ts +81 -0
- package/src/libs/renderer/src/themes/color-mode.js +158 -0
- package/src/libs/renderer/src/themes/contrast.d.ts +67 -0
- package/src/libs/renderer/src/themes/contrast.js +215 -0
- package/src/libs/renderer/src/themes/default-dark-theme.d.ts +6 -0
- package/src/libs/renderer/src/themes/default-dark-theme.js +126 -0
- package/src/libs/renderer/src/themes/default-light-theme.d.ts +6 -0
- package/src/libs/renderer/src/themes/default-light-theme.js +168 -0
- package/src/libs/renderer/src/themes/default-theme-set.d.ts +10 -0
- package/src/libs/renderer/src/themes/default-theme-set.js +25 -0
- package/src/libs/renderer/src/themes/high-contrast-theme.d.ts +5 -0
- package/src/libs/renderer/src/themes/high-contrast-theme.js +170 -0
- package/src/libs/renderer/src/themes/index.d.ts +22 -0
- package/src/libs/renderer/src/themes/index.js +93 -0
- package/src/libs/renderer/src/themes/style-cascade.d.ts +23 -0
- package/src/libs/renderer/src/themes/style-cascade.js +194 -0
- package/src/libs/renderer/src/themes/style-registry.d.ts +40 -0
- package/src/libs/renderer/src/themes/style-registry.js +129 -0
- package/src/libs/renderer/src/themes/theme-a11y.d.ts +65 -0
- package/src/libs/renderer/src/themes/theme-a11y.js +256 -0
- package/src/libs/renderer/src/themes/theme-css.d.ts +30 -0
- package/src/libs/renderer/src/themes/theme-css.js +304 -0
- package/src/libs/renderer/src/themes/theme-ref.d.ts +63 -0
- package/src/libs/renderer/src/themes/theme-ref.js +206 -0
- package/src/libs/renderer/src/themes/theme-vars.d.ts +49 -0
- package/src/libs/renderer/src/themes/theme-vars.js +112 -0
- package/src/libs/renderer/src/themes/token-bridge.d.ts +62 -0
- package/src/libs/renderer/src/themes/token-bridge.js +354 -0
- package/src/libs/renderer/src/types/geometry.types.d.ts +10 -0
- package/src/libs/renderer/src/types/geometry.types.js +3 -0
- package/src/libs/renderer/src/types/index.d.ts +5 -0
- package/src/libs/renderer/src/types/index.js +14 -0
- package/src/libs/renderer/src/types/property-schema/conditions.d.ts +96 -0
- package/src/libs/renderer/src/types/property-schema/conditions.js +8 -0
- package/src/libs/renderer/src/types/property-schema/editor-types.d.ts +310 -0
- package/src/libs/renderer/src/types/property-schema/editor-types.js +8 -0
- package/src/libs/renderer/src/types/property-schema/groups.d.ts +58 -0
- package/src/libs/renderer/src/types/property-schema/groups.js +8 -0
- package/src/libs/renderer/src/types/property-schema/index.d.ts +101 -0
- package/src/libs/renderer/src/types/property-schema/index.js +98 -0
- package/src/libs/renderer/src/types/property-schema/property-definition.d.ts +117 -0
- package/src/libs/renderer/src/types/property-schema/property-definition.js +8 -0
- package/src/libs/renderer/src/types/property-schema/schema.d.ts +108 -0
- package/src/libs/renderer/src/types/property-schema/schema.js +8 -0
- package/src/libs/renderer/src/types/property-schema/validation.d.ts +181 -0
- package/src/libs/renderer/src/types/property-schema/validation.js +8 -0
- package/src/libs/renderer/src/types/renderer.interface.d.ts +623 -0
- package/src/libs/renderer/src/types/renderer.interface.js +3 -0
- package/src/libs/renderer/src/types/theme.types.d.ts +305 -0
- package/src/libs/renderer/src/types/theme.types.js +3 -0
- package/src/libs/renderer/src/types/vnode.types.d.ts +139 -0
- package/src/libs/renderer/src/types/vnode.types.js +3 -0
- package/src/libs/renderer/src/utils/animation-presets.d.ts +310 -0
- package/src/libs/renderer/src/utils/animation-presets.js +406 -0
- package/src/libs/renderer/src/utils/animation-priority.d.ts +118 -0
- package/src/libs/renderer/src/utils/animation-priority.js +258 -0
- package/src/libs/renderer/src/utils/animation-utils.d.ts +159 -0
- package/src/libs/renderer/src/utils/animation-utils.js +323 -0
- package/src/libs/renderer/src/utils/lru-cache.d.ts +34 -0
- package/src/libs/renderer/src/utils/lru-cache.js +72 -0
- package/src/libs/renderer/src/viewport/index.d.ts +1 -0
- package/src/libs/renderer/src/viewport/index.js +6 -0
- package/src/libs/renderer/src/viewport/viewport-controller.d.ts +198 -0
- package/src/libs/renderer/src/viewport/viewport-controller.js +315 -0
- package/src/libs/renderer/src/vnode/container-id-generator.d.ts +94 -0
- package/src/libs/renderer/src/vnode/container-id-generator.js +110 -0
- package/src/libs/renderer/src/vnode/foreign-object.d.ts +157 -0
- package/src/libs/renderer/src/vnode/foreign-object.js +167 -0
- package/src/libs/renderer/src/vnode/index.d.ts +56 -0
- package/src/libs/renderer/src/vnode/index.js +78 -0
- package/src/libs/renderer/src/vnode/patch.d.ts +189 -0
- package/src/libs/renderer/src/vnode/patch.js +564 -0
- package/src/index.js.map +0 -1
- package/src/lib/dashboard-kit/dashboard.js.map +0 -1
- package/src/lib/dashboard-kit/grid-binder.js.map +0 -1
- package/src/lib/dashboard-kit/grid-mapping.js.map +0 -1
- package/src/lib/dashboard-kit/index.js.map +0 -1
- package/src/lib/dashboard-kit/styles.js.map +0 -1
- package/src/lib/dashboard-kit/widgets.js.map +0 -1
- package/src/lib/diagram-kit/card.js.map +0 -1
- package/src/lib/diagram-kit/editing.js.map +0 -1
- package/src/lib/diagram-kit/er.js.map +0 -1
- package/src/lib/diagram-kit/handles.js.map +0 -1
- package/src/lib/diagram-kit/index.js.map +0 -1
- package/src/lib/diagram-kit/rows.js.map +0 -1
- package/src/lib/diagram-kit/styles.js.map +0 -1
- package/src/lib/diagram-kit/uml.js.map +0 -1
- package/src/lib/diagram-kit/update.js.map +0 -1
- package/src/lib/grafloria-flow-element.js.map +0 -1
- package/src/lib/grafloria.js.map +0 -1
- package/src/lib/load.js.map +0 -1
- package/src/lib/node-type-registry.js.map +0 -1
- package/src/lib/stencil-kit/builders.js.map +0 -1
- package/src/lib/stencil-kit/card-builders.js.map +0 -1
- package/src/lib/stencil-kit/index.js.map +0 -1
- package/src/lib/stencil-kit/palette.js.map +0 -1
- package/src/lib/stencil-kit/shape-data.js.map +0 -1
- package/src/lib/stencil-kit/styles.js.map +0 -1
|
@@ -0,0 +1,1373 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// GroupModel - Entity for organizing nodes into groups (Phase 1.6c)
|
|
3
|
+
// Layout configuration storage added in Phase 1.7
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.GroupModel = exports.DEFAULT_GROUP_HEADER_HEIGHT = exports.DEFAULT_GROUP_PADDING = void 0;
|
|
6
|
+
const DiagramEntity_1 = require("./DiagramEntity");
|
|
7
|
+
/**
|
|
8
|
+
* Defaults for groups AUTHORED in code (constructor path). A fitted frame needs
|
|
9
|
+
* breathing room and a title band or its label lands under the first member.
|
|
10
|
+
* Loaded documents are exempt: restore assigns the stored values (padding
|
|
11
|
+
* verbatim — possibly undefined, which getPadding() resolves to 0 — and
|
|
12
|
+
* headerHeight number-or-0), so legacy geometry is byte-stable.
|
|
13
|
+
*/
|
|
14
|
+
exports.DEFAULT_GROUP_PADDING = 16;
|
|
15
|
+
exports.DEFAULT_GROUP_HEADER_HEIGHT = 24;
|
|
16
|
+
class GroupModel extends DiagramEntity_1.DiagramEntity {
|
|
17
|
+
constructor(config) {
|
|
18
|
+
super(config.id);
|
|
19
|
+
this.members = new Set();
|
|
20
|
+
this.isCollapsed = false;
|
|
21
|
+
// Phase 1.7: Layout configuration storage
|
|
22
|
+
this.layoutType = 'none';
|
|
23
|
+
// Position and size for layout calculations
|
|
24
|
+
this.position = { x: 0, y: 0 };
|
|
25
|
+
// Wave-2: transient drag-hover highlight state (not serialized).
|
|
26
|
+
this.isHovered = false;
|
|
27
|
+
this.headerHeight = exports.DEFAULT_GROUP_HEADER_HEIGHT;
|
|
28
|
+
this.zIndex = 0;
|
|
29
|
+
this.fitMode = 'exact';
|
|
30
|
+
this.constrainChildren = false;
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// A — PUSH-DRIVEN LAYOUT
|
|
33
|
+
//
|
|
34
|
+
// `applyLayout` has always been a real layout engine. It was just never CALLED:
|
|
35
|
+
// it was pulled by hand, plus a one-shot on `addMember` behind an opt-IN metadata
|
|
36
|
+
// flag. Resize a container, delete a widget, or grow a child, and nothing
|
|
37
|
+
// reflowed. Everything below turns those three events into pushes, following the
|
|
38
|
+
// precedent already set by `NodeModel.setPosition` (which propagates) and
|
|
39
|
+
// `SwimlaneService.reflow` (the one place that already did this correctly).
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/**
|
|
42
|
+
* Re-entrancy guard. The cycle this closes is real and one hop long: layout
|
|
43
|
+
* writes a child's size → the child notifies its containers → the container lays
|
|
44
|
+
* out again → it writes the child's size… Held for the duration of one pass;
|
|
45
|
+
* every push that arrives DURING a pass is dropped, because that pass is already
|
|
46
|
+
* producing the answer the push would ask for.
|
|
47
|
+
*/
|
|
48
|
+
this.layoutInFlight = false;
|
|
49
|
+
this.name = config.name;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve the owning diagram, preferring an explicit argument and falling
|
|
53
|
+
* back to the reference stashed in metadata by DiagramModel.addGroup.
|
|
54
|
+
*/
|
|
55
|
+
resolveDiagram(diagram) {
|
|
56
|
+
return diagram !== null && diagram !== void 0 ? diagram : this.metadata.get('diagram');
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Whether `candidateId` may legally join this group (Wave-2).
|
|
60
|
+
* Rejects self-membership, ancestor cycles (adding an ancestor group as a
|
|
61
|
+
* member would create a containment loop), and candidates failing the
|
|
62
|
+
* per-group `memberValidation` predicate. Node candidates only run the
|
|
63
|
+
* predicate check (nodes can't form group cycles).
|
|
64
|
+
*/
|
|
65
|
+
canAddMember(candidateId, diagram) {
|
|
66
|
+
if (candidateId === this.id) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
const dm = this.resolveDiagram(diagram);
|
|
70
|
+
const candidateGroup = dm === null || dm === void 0 ? void 0 : dm.getGroup(candidateId);
|
|
71
|
+
// Cycle prevention: reject if the candidate is an ancestor of this group.
|
|
72
|
+
if (candidateGroup && dm) {
|
|
73
|
+
const ancestors = dm.getAncestors(this.id);
|
|
74
|
+
if (ancestors.some((g) => g.id === candidateId)) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Wave-5 Card 7: capacity / WIP limit — reject an add that would push the
|
|
79
|
+
// group past its limit. Already-present candidates never count (re-adds are
|
|
80
|
+
// no-ops), so this only gates genuinely new members (incl. drops, which flow
|
|
81
|
+
// through GroupMembershipService → canAddMember).
|
|
82
|
+
if (this.capacity !== undefined &&
|
|
83
|
+
!this.members.has(candidateId) &&
|
|
84
|
+
this.members.size >= this.capacity) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
// Per-group membership predicate.
|
|
88
|
+
if (this.memberValidation && !this.memberValidation(candidateId, this)) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Wave-5 Card 7: WIP state for the capacity limit. 'under' = room to spare,
|
|
95
|
+
* 'full' = exactly at the limit (the visual warning threshold), 'over' = past
|
|
96
|
+
* it (only reachable by lowering capacity below the current count). Returns
|
|
97
|
+
* 'unlimited' when no capacity is set.
|
|
98
|
+
*/
|
|
99
|
+
getWipState() {
|
|
100
|
+
const count = this.members.size;
|
|
101
|
+
if (this.capacity === undefined) {
|
|
102
|
+
return { count, state: 'unlimited' };
|
|
103
|
+
}
|
|
104
|
+
const state = count > this.capacity ? 'over' : count >= this.capacity ? 'full' : 'under';
|
|
105
|
+
return { count, capacity: this.capacity, state };
|
|
106
|
+
}
|
|
107
|
+
/** Wave-5 Card 7: true when at or beyond the capacity limit (warning state). */
|
|
108
|
+
isOverCapacity() {
|
|
109
|
+
const s = this.getWipState().state;
|
|
110
|
+
return s === 'full' || s === 'over';
|
|
111
|
+
}
|
|
112
|
+
/** Set (or clear) the capacity / WIP limit, tracked for undo/diff. */
|
|
113
|
+
setCapacity(capacity) {
|
|
114
|
+
if (this.capacity === capacity) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const old = this.capacity;
|
|
118
|
+
this.capacity = capacity;
|
|
119
|
+
this.trackChange('capacity', old, capacity);
|
|
120
|
+
this.emitter.emit('capacity:changed', this.getWipState());
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Add member to group.
|
|
124
|
+
*
|
|
125
|
+
* When the member is itself a group, this establishes containment by setting
|
|
126
|
+
* the child's `parentGroupId` (detaching it from any previous parent), which
|
|
127
|
+
* keeps the nesting tree consistent for getAncestors/getDescendants. Members
|
|
128
|
+
* that would create a cycle or fail `memberValidation` are rejected (no-op).
|
|
129
|
+
*/
|
|
130
|
+
addMember(entityId, diagram) {
|
|
131
|
+
if (this.members.has(entityId)) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const dm = this.resolveDiagram(diagram);
|
|
135
|
+
// Guard cycles + validation (no-op on rejection to preserve void contract).
|
|
136
|
+
if (!this.canAddMember(entityId, dm)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.members.add(entityId);
|
|
140
|
+
// Group member => maintain the containment back-pointer.
|
|
141
|
+
const childGroup = dm === null || dm === void 0 ? void 0 : dm.getGroup(entityId);
|
|
142
|
+
if (childGroup) {
|
|
143
|
+
this.linkChildGroup(childGroup, dm);
|
|
144
|
+
}
|
|
145
|
+
this.trackChange('members', null, entityId);
|
|
146
|
+
this.emitter.emit('member:added', entityId);
|
|
147
|
+
// PUSH (A): a container that declares a layout reflows when its membership
|
|
148
|
+
// changes. This used to require an explicit `autoLayout` metadata flag, which
|
|
149
|
+
// meant the default behaviour of a layout container was "do nothing".
|
|
150
|
+
this.requestLayout(dm);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Remove member from group. When the member is a group whose parent is this
|
|
154
|
+
* group, its `parentGroupId` back-pointer is cleared so the nesting tree
|
|
155
|
+
* stays consistent.
|
|
156
|
+
*/
|
|
157
|
+
removeMember(entityId, diagram) {
|
|
158
|
+
if (this.members.has(entityId)) {
|
|
159
|
+
this.members.delete(entityId);
|
|
160
|
+
const dm = this.resolveDiagram(diagram);
|
|
161
|
+
const childGroup = dm === null || dm === void 0 ? void 0 : dm.getGroup(entityId);
|
|
162
|
+
if (childGroup && childGroup.parentGroupId === this.id) {
|
|
163
|
+
childGroup.clearParentGroupId();
|
|
164
|
+
}
|
|
165
|
+
this.trackChange('members', entityId, null);
|
|
166
|
+
this.emitter.emit('member:removed', entityId);
|
|
167
|
+
// PUSH (A): the survivors close the gap. Deleting a dashboard widget and
|
|
168
|
+
// leaving a hole is the single most obvious symptom of a pull-only layout.
|
|
169
|
+
this.requestLayout(dm);
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Make `child` a nested group of this group: detach from previous parent's
|
|
176
|
+
* members and point `parentGroupId` here. Uses protected access allowed
|
|
177
|
+
* between GroupModel instances.
|
|
178
|
+
*/
|
|
179
|
+
linkChildGroup(child, diagram) {
|
|
180
|
+
if (child.parentGroupId === this.id) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Detach from a previous parent so its members set stays consistent.
|
|
184
|
+
//
|
|
185
|
+
// THROUGH THE FUNNEL. `trackChange` is the single channel every mutation in this
|
|
186
|
+
// engine is observed on — dirty tracking, versioning, and (wave 9) the collab capture
|
|
187
|
+
// layer that turns edits into ops. This detach mutates a THIRD group's Set and used
|
|
188
|
+
// to do it SILENTLY, so re-parenting a nested group never reached any peer: the old
|
|
189
|
+
// parent kept the child in `members` forever on every machine but the author's, and
|
|
190
|
+
// the two documents disagreed with nothing anywhere reporting a problem. Mirrors
|
|
191
|
+
// removeMember's own three lines exactly — a half-mirror is the next bug.
|
|
192
|
+
if (child.parentGroupId) {
|
|
193
|
+
const oldParent = diagram.getGroup(child.parentGroupId);
|
|
194
|
+
if (oldParent === null || oldParent === void 0 ? void 0 : oldParent.members.delete(child.id)) {
|
|
195
|
+
oldParent.trackChange('members', child.id, null);
|
|
196
|
+
oldParent.emitter.emit('member:removed', child.id);
|
|
197
|
+
oldParent.requestLayout(diagram);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const old = child.parentGroupId;
|
|
201
|
+
child.parentGroupId = this.id;
|
|
202
|
+
child.trackChange('parentGroupId', old, this.id);
|
|
203
|
+
child.emitter.emit('parent:changed', { oldParentId: old, newParentId: this.id });
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Clear this group's parent back-pointer (used when detached from a parent).
|
|
207
|
+
*/
|
|
208
|
+
clearParentGroupId() {
|
|
209
|
+
if (this.parentGroupId === undefined) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const old = this.parentGroupId;
|
|
213
|
+
this.parentGroupId = undefined;
|
|
214
|
+
this.trackChange('parentGroupId', old, undefined);
|
|
215
|
+
this.emitter.emit('parent:changed', { oldParentId: old, newParentId: undefined });
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Reparent this group under `newParentId` (or detach when undefined),
|
|
219
|
+
* keeping both the `parentGroupId` pointer and the parents' `members` sets
|
|
220
|
+
* consistent. Rejects cycles (a group cannot be nested under one of its own
|
|
221
|
+
* descendants) and returns false without mutating anything.
|
|
222
|
+
*/
|
|
223
|
+
setParent(newParentId, diagram) {
|
|
224
|
+
const dm = this.resolveDiagram(diagram);
|
|
225
|
+
if (newParentId !== undefined) {
|
|
226
|
+
if (newParentId === this.id) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
// Cycle prevention: the new parent must not live inside this subtree.
|
|
230
|
+
if (dm && dm.getDescendants(this.id).some((g) => g.id === newParentId)) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
// Honour the target group's own membership predicate.
|
|
234
|
+
const newParent = dm === null || dm === void 0 ? void 0 : dm.getGroup(newParentId);
|
|
235
|
+
if (newParent && !newParent.canAddMember(this.id, dm)) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const oldParentId = this.parentGroupId;
|
|
240
|
+
if (oldParentId === newParentId) {
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
// Detach from old parent's members — THROUGH THE FUNNEL, see linkChildGroup. These
|
|
244
|
+
// two writes touch a group that is neither `this` nor the caller, and mutating a
|
|
245
|
+
// model this engine is watching without telling it is how an edit becomes invisible
|
|
246
|
+
// to undo, to dirty tracking and to every peer in the session at once.
|
|
247
|
+
if (dm && oldParentId) {
|
|
248
|
+
const oldParent = dm.getGroup(oldParentId);
|
|
249
|
+
if (oldParent === null || oldParent === void 0 ? void 0 : oldParent.members.delete(this.id)) {
|
|
250
|
+
oldParent.trackChange('members', this.id, null);
|
|
251
|
+
oldParent.emitter.emit('member:removed', this.id);
|
|
252
|
+
oldParent.requestLayout(dm);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
this.parentGroupId = newParentId;
|
|
256
|
+
this.trackChange('parentGroupId', oldParentId, newParentId);
|
|
257
|
+
this.emitter.emit('parent:changed', { oldParentId, newParentId });
|
|
258
|
+
// Attach to new parent's members (kept in sync with parentGroupId).
|
|
259
|
+
if (dm && newParentId) {
|
|
260
|
+
const newParent = dm.getGroup(newParentId);
|
|
261
|
+
if (newParent && !newParent.members.has(this.id)) {
|
|
262
|
+
newParent.members.add(this.id);
|
|
263
|
+
newParent.trackChange('members', null, this.id);
|
|
264
|
+
newParent.emitter.emit('member:added', this.id);
|
|
265
|
+
newParent.requestLayout(dm);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Set transient drag-hover highlight state and notify listeners (Wave-2).
|
|
272
|
+
* Renderers/canvas can subscribe to 'hover:changed' to outline a drop target.
|
|
273
|
+
*/
|
|
274
|
+
setHovered(hovered) {
|
|
275
|
+
if (this.isHovered !== hovered) {
|
|
276
|
+
this.isHovered = hovered;
|
|
277
|
+
this.emitter.emit('hover:changed', hovered);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Expand the group
|
|
282
|
+
*/
|
|
283
|
+
expand() {
|
|
284
|
+
if (this.isCollapsed) {
|
|
285
|
+
this.isCollapsed = false;
|
|
286
|
+
this.trackChange('isCollapsed', true, false);
|
|
287
|
+
this.emitter.emit('expanded');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Collapse the group
|
|
292
|
+
*/
|
|
293
|
+
collapse() {
|
|
294
|
+
if (!this.isCollapsed) {
|
|
295
|
+
this.isCollapsed = true;
|
|
296
|
+
this.trackChange('isCollapsed', false, true);
|
|
297
|
+
this.emitter.emit('collapsed');
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Wave-5 Card 4: set (or clear) the reversible collapse snapshot. Tracked as a
|
|
302
|
+
* change so the incremental diff-capture serializes it and undo/redo see it.
|
|
303
|
+
*/
|
|
304
|
+
setCollapsedState(state) {
|
|
305
|
+
const old = this.collapsedState;
|
|
306
|
+
this.collapsedState = state;
|
|
307
|
+
this.trackChange('collapsedState', old, state);
|
|
308
|
+
}
|
|
309
|
+
setLayout(type, config) {
|
|
310
|
+
const oldType = this.layoutType;
|
|
311
|
+
const oldConfig = this.layoutConfig;
|
|
312
|
+
this.layoutType = type;
|
|
313
|
+
this.layoutConfig = config;
|
|
314
|
+
this.version++;
|
|
315
|
+
this.trackChange('layoutType', oldType, type);
|
|
316
|
+
this.trackChange('layoutConfig', oldConfig, config);
|
|
317
|
+
this.emitter.emit('layout:changed', { type, config });
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Clear layout configuration (Phase 1.7)
|
|
321
|
+
*/
|
|
322
|
+
clearLayout() {
|
|
323
|
+
const oldType = this.layoutType;
|
|
324
|
+
const oldConfig = this.layoutConfig;
|
|
325
|
+
this.layoutType = 'none';
|
|
326
|
+
this.layoutConfig = undefined;
|
|
327
|
+
this.version++;
|
|
328
|
+
this.trackChange('layoutType', oldType, 'none');
|
|
329
|
+
this.trackChange('layoutConfig', oldConfig, undefined);
|
|
330
|
+
this.emitter.emit('layout:cleared');
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Get layout configuration (Phase 1.7)
|
|
334
|
+
*/
|
|
335
|
+
getLayout() {
|
|
336
|
+
return {
|
|
337
|
+
type: this.layoutType,
|
|
338
|
+
config: this.layoutConfig,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Check if group has layout configured (Phase 1.7)
|
|
343
|
+
*/
|
|
344
|
+
hasLayout() {
|
|
345
|
+
return this.layoutType !== 'none' && this.layoutConfig !== undefined;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Get layout as flexbox config (Phase 1.7)
|
|
349
|
+
* @throws Error if layout is not flexbox
|
|
350
|
+
*/
|
|
351
|
+
getFlexboxLayout() {
|
|
352
|
+
if (this.layoutType !== 'flexbox') {
|
|
353
|
+
throw new Error(`Group ${this.id} does not have flexbox layout`);
|
|
354
|
+
}
|
|
355
|
+
return this.layoutConfig;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get layout as grid config (Phase 1.7)
|
|
359
|
+
* @throws Error if layout is not grid
|
|
360
|
+
*/
|
|
361
|
+
getGridLayout() {
|
|
362
|
+
if (this.layoutType !== 'grid') {
|
|
363
|
+
throw new Error(`Group ${this.id} does not have grid layout`);
|
|
364
|
+
}
|
|
365
|
+
return this.layoutConfig;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Calculate bounds from member nodes using global bounds
|
|
369
|
+
*/
|
|
370
|
+
calculateBounds(diagram) {
|
|
371
|
+
const nodes = Array.from(this.members)
|
|
372
|
+
.map(id => diagram.getNode(id))
|
|
373
|
+
.filter(n => n !== undefined);
|
|
374
|
+
if (nodes.length === 0) {
|
|
375
|
+
this.bounds = undefined;
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
// Use global bounds (accounts for transforms)
|
|
379
|
+
let minX = Infinity;
|
|
380
|
+
let minY = Infinity;
|
|
381
|
+
let maxX = -Infinity;
|
|
382
|
+
let maxY = -Infinity;
|
|
383
|
+
for (const node of nodes) {
|
|
384
|
+
const bounds = node.getGlobalBounds();
|
|
385
|
+
minX = Math.min(minX, bounds.left);
|
|
386
|
+
minY = Math.min(minY, bounds.top);
|
|
387
|
+
maxX = Math.max(maxX, bounds.right);
|
|
388
|
+
maxY = Math.max(maxY, bounds.bottom);
|
|
389
|
+
}
|
|
390
|
+
this.bounds = {
|
|
391
|
+
x: minX,
|
|
392
|
+
y: minY,
|
|
393
|
+
width: maxX - minX,
|
|
394
|
+
height: maxY - minY
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
// ---------------------------------------------------------------------------
|
|
398
|
+
// Wave-5 Card 3 — Subflow geometry: auto-fit, extent clamping & z-order
|
|
399
|
+
// ---------------------------------------------------------------------------
|
|
400
|
+
/**
|
|
401
|
+
* Resolve {@link padding} to a full four-sided rectangle. `undefined` (the
|
|
402
|
+
* author never said) resolves to {@link DEFAULT_GROUP_PADDING}; an explicit
|
|
403
|
+
* value — including the 0 that loaders pin for legacy documents — is taken
|
|
404
|
+
* as written.
|
|
405
|
+
*/
|
|
406
|
+
getPadding() {
|
|
407
|
+
var _a, _b, _c, _d;
|
|
408
|
+
const p = this.padding;
|
|
409
|
+
if (p === undefined) {
|
|
410
|
+
return {
|
|
411
|
+
top: exports.DEFAULT_GROUP_PADDING,
|
|
412
|
+
right: exports.DEFAULT_GROUP_PADDING,
|
|
413
|
+
bottom: exports.DEFAULT_GROUP_PADDING,
|
|
414
|
+
left: exports.DEFAULT_GROUP_PADDING,
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
if (typeof p === 'number') {
|
|
418
|
+
return { top: p, right: p, bottom: p, left: p };
|
|
419
|
+
}
|
|
420
|
+
return {
|
|
421
|
+
top: (_a = p.top) !== null && _a !== void 0 ? _a : 0,
|
|
422
|
+
right: (_b = p.right) !== null && _b !== void 0 ? _b : 0,
|
|
423
|
+
bottom: (_c = p.bottom) !== null && _c !== void 0 ? _c : 0,
|
|
424
|
+
left: (_d = p.left) !== null && _d !== void 0 ? _d : 0,
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* The group's outer frame rectangle in world coordinates. Prefers explicit
|
|
429
|
+
* geometry (position + size) and falls back to the derived member `bounds`,
|
|
430
|
+
* matching how GroupMembershipService hit-tests a group.
|
|
431
|
+
*/
|
|
432
|
+
getOuterBounds() {
|
|
433
|
+
if (this.size) {
|
|
434
|
+
return {
|
|
435
|
+
x: this.position.x,
|
|
436
|
+
y: this.position.y,
|
|
437
|
+
width: this.size.width,
|
|
438
|
+
height: this.size.height,
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
if (this.bounds) {
|
|
442
|
+
return Object.assign({}, this.bounds);
|
|
443
|
+
}
|
|
444
|
+
return { x: this.position.x, y: this.position.y, width: 0, height: 0 };
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* The rectangle members must stay inside: the outer frame minus padding and
|
|
448
|
+
* minus the header band (which is reserved at the top). Never returns a
|
|
449
|
+
* negative width/height.
|
|
450
|
+
*/
|
|
451
|
+
getInnerBounds() {
|
|
452
|
+
const outer = this.getOuterBounds();
|
|
453
|
+
const pad = this.getPadding();
|
|
454
|
+
const x = outer.x + pad.left;
|
|
455
|
+
const y = outer.y + pad.top + this.headerHeight;
|
|
456
|
+
const width = Math.max(0, outer.width - pad.left - pad.right);
|
|
457
|
+
const height = Math.max(0, outer.height - pad.top - pad.bottom - this.headerHeight);
|
|
458
|
+
return { x, y, width, height };
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Auto-fit the group frame to its members' bounding box plus padding and the
|
|
462
|
+
* header band. This is the real consumer of `padding`/`headerHeight` that
|
|
463
|
+
* `calculateBounds` (a tight, padding-free box) never was.
|
|
464
|
+
*
|
|
465
|
+
* Member groups contribute their own OUTER frame (so a parent fits around a
|
|
466
|
+
* nested group's full extent, not just its raw member points). With
|
|
467
|
+
* `deepRecursive`, descendant groups are fitted first (deepest first) so the
|
|
468
|
+
* parent fits around already-fitted children.
|
|
469
|
+
*
|
|
470
|
+
* The computed content rectangle is reconciled with the current frame per the
|
|
471
|
+
* effective fit mode (grow-only / shrink-only / exact) and written to both
|
|
472
|
+
* `position`/`size` (authoritative geometry) and `bounds` (hit-test rect).
|
|
473
|
+
* No-op with no positioned members (nothing to fit around).
|
|
474
|
+
*/
|
|
475
|
+
fitToContents(diagram, options) {
|
|
476
|
+
var _a;
|
|
477
|
+
const dm = this.resolveDiagram(diagram);
|
|
478
|
+
if (!dm) {
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
if (options === null || options === void 0 ? void 0 : options.deepRecursive) {
|
|
482
|
+
// Deepest-first so each parent fits around already-fitted children.
|
|
483
|
+
const descendants = dm
|
|
484
|
+
.getDescendants(this.id)
|
|
485
|
+
.sort((a, b) => dm.getDepth(b.id) - dm.getDepth(a.id));
|
|
486
|
+
for (const child of descendants) {
|
|
487
|
+
child.fitToContents(dm, { mode: options.mode });
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
const content = this.computeMemberExtent(dm);
|
|
491
|
+
if (!content) {
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
const pad = this.getPadding();
|
|
495
|
+
const fitted = {
|
|
496
|
+
x: content.x - pad.left,
|
|
497
|
+
y: content.y - pad.top - this.headerHeight,
|
|
498
|
+
width: content.width + pad.left + pad.right,
|
|
499
|
+
height: content.height + pad.top + pad.bottom + this.headerHeight,
|
|
500
|
+
};
|
|
501
|
+
const mode = (_a = options === null || options === void 0 ? void 0 : options.mode) !== null && _a !== void 0 ? _a : this.fitMode;
|
|
502
|
+
const target = this.reconcileFit(fitted, mode);
|
|
503
|
+
this.setFrame(target);
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Bounding box (world coords) of this group's members. Nodes contribute their
|
|
507
|
+
* global bounds; member groups contribute their outer frame. Returns
|
|
508
|
+
* undefined when nothing is positioned.
|
|
509
|
+
*/
|
|
510
|
+
computeMemberExtent(diagram) {
|
|
511
|
+
let minX = Infinity;
|
|
512
|
+
let minY = Infinity;
|
|
513
|
+
let maxX = -Infinity;
|
|
514
|
+
let maxY = -Infinity;
|
|
515
|
+
let count = 0;
|
|
516
|
+
for (const id of this.members) {
|
|
517
|
+
const node = diagram.getNode(id);
|
|
518
|
+
if (node) {
|
|
519
|
+
const b = node.getGlobalBounds();
|
|
520
|
+
minX = Math.min(minX, b.left);
|
|
521
|
+
minY = Math.min(minY, b.top);
|
|
522
|
+
maxX = Math.max(maxX, b.right);
|
|
523
|
+
maxY = Math.max(maxY, b.bottom);
|
|
524
|
+
count++;
|
|
525
|
+
continue;
|
|
526
|
+
}
|
|
527
|
+
const child = diagram.getGroup(id);
|
|
528
|
+
if (child) {
|
|
529
|
+
const r = child.getOuterBounds();
|
|
530
|
+
if (r.width > 0 || r.height > 0) {
|
|
531
|
+
minX = Math.min(minX, r.x);
|
|
532
|
+
minY = Math.min(minY, r.y);
|
|
533
|
+
maxX = Math.max(maxX, r.x + r.width);
|
|
534
|
+
maxY = Math.max(maxY, r.y + r.height);
|
|
535
|
+
count++;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
if (count === 0) {
|
|
540
|
+
return undefined;
|
|
541
|
+
}
|
|
542
|
+
return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
543
|
+
}
|
|
544
|
+
/** Apply a fit mode to reconcile a freshly computed rect with the current frame. */
|
|
545
|
+
reconcileFit(fitted, mode) {
|
|
546
|
+
if (mode === 'exact' || !this.size) {
|
|
547
|
+
return fitted;
|
|
548
|
+
}
|
|
549
|
+
const current = this.getOuterBounds();
|
|
550
|
+
if (mode === 'grow-only') {
|
|
551
|
+
// Union: expand to contain content, never shrink.
|
|
552
|
+
const x = Math.min(current.x, fitted.x);
|
|
553
|
+
const y = Math.min(current.y, fitted.y);
|
|
554
|
+
const right = Math.max(current.x + current.width, fitted.x + fitted.width);
|
|
555
|
+
const bottom = Math.max(current.y + current.height, fitted.y + fitted.height);
|
|
556
|
+
return { x, y, width: right - x, height: bottom - y };
|
|
557
|
+
}
|
|
558
|
+
// shrink-only: never grow beyond the current frame — clamp the fitted rect
|
|
559
|
+
// inside it (but still snap smaller when content is smaller).
|
|
560
|
+
const x = Math.max(current.x, fitted.x);
|
|
561
|
+
const y = Math.max(current.y, fitted.y);
|
|
562
|
+
const right = Math.min(current.x + current.width, fitted.x + fitted.width);
|
|
563
|
+
const bottom = Math.min(current.y + current.height, fitted.y + fitted.height);
|
|
564
|
+
return {
|
|
565
|
+
x,
|
|
566
|
+
y,
|
|
567
|
+
width: Math.max(0, right - x),
|
|
568
|
+
height: Math.max(0, bottom - y),
|
|
569
|
+
};
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Write a world rectangle into the group's authoritative geometry
|
|
573
|
+
* (position + size) and the derived hit-test `bounds`, keeping the existing
|
|
574
|
+
* `depth` when present. Tracks a single 'bounds' change for undo/diff.
|
|
575
|
+
*/
|
|
576
|
+
setFrame(rect) {
|
|
577
|
+
var _a, _b;
|
|
578
|
+
const oldBounds = this.bounds;
|
|
579
|
+
this.position = { x: rect.x, y: rect.y };
|
|
580
|
+
this.size = {
|
|
581
|
+
width: rect.width,
|
|
582
|
+
height: rect.height,
|
|
583
|
+
depth: (_b = (_a = this.size) === null || _a === void 0 ? void 0 : _a.depth) !== null && _b !== void 0 ? _b : 0,
|
|
584
|
+
};
|
|
585
|
+
this.bounds = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };
|
|
586
|
+
this.trackChange('bounds', oldBounds, this.bounds);
|
|
587
|
+
this.emitter.emit('bounds:changed', this.bounds);
|
|
588
|
+
// PUSH (A): the frame IS the layout's coordinate system and available width.
|
|
589
|
+
// Resizing or moving a container without reflowing its children is how you
|
|
590
|
+
// get a 12-column dashboard whose columns stop matching its own edges.
|
|
591
|
+
this.requestLayout();
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Clamp a member node so it stays fully inside the group's inner extent.
|
|
595
|
+
* No-op unless `constrainChildren` is set and the node is a direct member.
|
|
596
|
+
* Returns true when the node was actually moved. Absolute-coordinate model:
|
|
597
|
+
* this adjusts the node's world position directly.
|
|
598
|
+
*/
|
|
599
|
+
clampChildToExtent(nodeId, diagram) {
|
|
600
|
+
if (!this.constrainChildren || !this.members.has(nodeId)) {
|
|
601
|
+
return false;
|
|
602
|
+
}
|
|
603
|
+
const dm = this.resolveDiagram(diagram);
|
|
604
|
+
const node = dm === null || dm === void 0 ? void 0 : dm.getNode(nodeId);
|
|
605
|
+
if (!node) {
|
|
606
|
+
return false;
|
|
607
|
+
}
|
|
608
|
+
const inner = this.getInnerBounds();
|
|
609
|
+
if (inner.width <= 0 || inner.height <= 0) {
|
|
610
|
+
return false;
|
|
611
|
+
}
|
|
612
|
+
const b = node.getGlobalBounds();
|
|
613
|
+
const w = b.right - b.left;
|
|
614
|
+
const h = b.bottom - b.top;
|
|
615
|
+
// Largest top-left that still fits; clamp within [inner.x, inner.right - w].
|
|
616
|
+
const maxX = Math.max(inner.x, inner.x + inner.width - w);
|
|
617
|
+
const maxY = Math.max(inner.y, inner.y + inner.height - h);
|
|
618
|
+
const clampedLeft = Math.min(Math.max(b.left, inner.x), maxX);
|
|
619
|
+
const clampedTop = Math.min(Math.max(b.top, inner.y), maxY);
|
|
620
|
+
const dx = clampedLeft - b.left;
|
|
621
|
+
const dy = clampedTop - b.top;
|
|
622
|
+
if (dx === 0 && dy === 0) {
|
|
623
|
+
return false;
|
|
624
|
+
}
|
|
625
|
+
node.setPosition(node.position.x + dx, node.position.y + dy);
|
|
626
|
+
return true;
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* Wave-5 Card 4: restore raw geometry (position + optional size + bounds)
|
|
630
|
+
* captured before a collapse. Unlike setFrame this permits size === undefined
|
|
631
|
+
* so a group that had no explicit frame is restored to exactly that.
|
|
632
|
+
*/
|
|
633
|
+
restoreGeometry(geo) {
|
|
634
|
+
const oldBounds = this.bounds;
|
|
635
|
+
this.position = { x: geo.position.x, y: geo.position.y };
|
|
636
|
+
this.size = geo.size ? Object.assign({}, geo.size) : undefined;
|
|
637
|
+
this.bounds = geo.bounds ? Object.assign({}, geo.bounds) : undefined;
|
|
638
|
+
this.trackChange('bounds', oldBounds, this.bounds);
|
|
639
|
+
this.emitter.emit('bounds:changed', this.bounds);
|
|
640
|
+
}
|
|
641
|
+
/** Set the group's stacking index (lower renders further back). */
|
|
642
|
+
setZIndex(z) {
|
|
643
|
+
if (this.zIndex === z) {
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
const old = this.zIndex;
|
|
647
|
+
this.zIndex = z;
|
|
648
|
+
this.trackChange('zIndex', old, z);
|
|
649
|
+
this.emitter.emit('zindex:changed', z);
|
|
650
|
+
}
|
|
651
|
+
/**
|
|
652
|
+
* Bring this group in front of every other group (highest zIndex + 1).
|
|
653
|
+
* Minimal z-order API — the renderer honors zIndex ordering.
|
|
654
|
+
*/
|
|
655
|
+
bringToFront(diagram) {
|
|
656
|
+
const dm = this.resolveDiagram(diagram);
|
|
657
|
+
if (!dm) {
|
|
658
|
+
this.setZIndex(this.zIndex + 1);
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
const max = Math.max(0, ...dm.getGroups().map((g) => g.zIndex));
|
|
662
|
+
this.setZIndex(max + 1);
|
|
663
|
+
}
|
|
664
|
+
/** Send this group behind every other group (lowest zIndex - 1). */
|
|
665
|
+
sendToBack(diagram) {
|
|
666
|
+
const dm = this.resolveDiagram(diagram);
|
|
667
|
+
if (!dm) {
|
|
668
|
+
this.setZIndex(this.zIndex - 1);
|
|
669
|
+
return;
|
|
670
|
+
}
|
|
671
|
+
const min = Math.min(0, ...dm.getGroups().map((g) => g.zIndex));
|
|
672
|
+
this.setZIndex(min - 1);
|
|
673
|
+
}
|
|
674
|
+
/**
|
|
675
|
+
* Is push-driven reflow active for this container?
|
|
676
|
+
*
|
|
677
|
+
* DEFAULT ON for any group that declares a layout — a container that says
|
|
678
|
+
* "I am a 12-column grid" and then lets its children drift is not a layout
|
|
679
|
+
* container. `metadata('autoLayout')` survives as the explicit override:
|
|
680
|
+
* set it to `false` to freeze the children (useful while dragging, or for a
|
|
681
|
+
* container whose positions are authored by hand). Setting it to `true`
|
|
682
|
+
* remains valid and is now simply the default.
|
|
683
|
+
*/
|
|
684
|
+
isAutoLayoutEnabled() {
|
|
685
|
+
if (this.getMetadata('autoLayout') === false) {
|
|
686
|
+
return false;
|
|
687
|
+
}
|
|
688
|
+
return this.hasLayout();
|
|
689
|
+
}
|
|
690
|
+
/**
|
|
691
|
+
* THE push entry point: "something changed, reflow if you are supposed to."
|
|
692
|
+
* Distinct from {@link applyLayout}, which is the unconditional PULL — an
|
|
693
|
+
* explicit `applyLayout()` still works on an opted-out container.
|
|
694
|
+
*/
|
|
695
|
+
requestLayout(diagram) {
|
|
696
|
+
if (!this.isAutoLayoutEnabled()) {
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
this.applyLayout(diagram);
|
|
700
|
+
}
|
|
701
|
+
/**
|
|
702
|
+
* Apply layout to member nodes (Phase 1.7+)
|
|
703
|
+
* Positions child nodes based on flex or grid layout configuration
|
|
704
|
+
*/
|
|
705
|
+
applyLayout(diagram) {
|
|
706
|
+
if (!this.hasLayout() || this.layoutInFlight) {
|
|
707
|
+
return;
|
|
708
|
+
}
|
|
709
|
+
// Get diagram from metadata if not provided
|
|
710
|
+
const diagramToUse = diagram || this.metadata.get('diagram');
|
|
711
|
+
if (!diagramToUse) {
|
|
712
|
+
console.warn(`Cannot apply layout to group ${this.id}: diagram not available`);
|
|
713
|
+
return;
|
|
714
|
+
}
|
|
715
|
+
// Get member entities (nodes and groups)
|
|
716
|
+
const entities = [];
|
|
717
|
+
for (const id of this.members) {
|
|
718
|
+
const node = diagramToUse.getNode(id);
|
|
719
|
+
if (node) {
|
|
720
|
+
entities.push(node);
|
|
721
|
+
}
|
|
722
|
+
else {
|
|
723
|
+
const group = diagramToUse.getGroup(id);
|
|
724
|
+
if (group) {
|
|
725
|
+
entities.push(group);
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
if (entities.length === 0) {
|
|
730
|
+
return;
|
|
731
|
+
}
|
|
732
|
+
this.layoutInFlight = true;
|
|
733
|
+
try {
|
|
734
|
+
if (this.layoutType === 'flexbox') {
|
|
735
|
+
this.applyFlexboxLayout(entities);
|
|
736
|
+
}
|
|
737
|
+
else if (this.layoutType === 'grid') {
|
|
738
|
+
this.applyGridLayout(entities);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
finally {
|
|
742
|
+
this.layoutInFlight = false;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
// ---------------------------------------------------------------------------
|
|
746
|
+
// Entity writers — the ONLY places a layout pass touches a child's geometry
|
|
747
|
+
// ---------------------------------------------------------------------------
|
|
748
|
+
/**
|
|
749
|
+
* D — auto-layout SKIPS LOCKED MEMBERS.
|
|
750
|
+
*
|
|
751
|
+
* A locked member keeps both its position and its size, but still consumes its
|
|
752
|
+
* slot in the flow (callers advance the cursor by the child's CURRENT size), so
|
|
753
|
+
* the container never stacks another widget on top of a pinned one. This is the
|
|
754
|
+
* precedent `LayoutManager` already set for graph layouts — it restores locked
|
|
755
|
+
* node positions after every run — and it is what "pin this tile" means to
|
|
756
|
+
* someone building a dashboard.
|
|
757
|
+
*/
|
|
758
|
+
isPinned(entity) {
|
|
759
|
+
var _a;
|
|
760
|
+
return ((_a = entity.state) === null || _a === void 0 ? void 0 : _a.locked) === true;
|
|
761
|
+
}
|
|
762
|
+
/**
|
|
763
|
+
* Move a member. Nodes go through `setPosition` (tracked + propagating);
|
|
764
|
+
* member GROUPS go through `setFrame` when they have a frame, which is what
|
|
765
|
+
* cascades the reflow down into a nested container's own children.
|
|
766
|
+
*/
|
|
767
|
+
placeEntity(entity, x, y) {
|
|
768
|
+
if (this.isPinned(entity)) {
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
if ('setPosition' in entity && typeof entity.setPosition === 'function') {
|
|
772
|
+
entity.setPosition(x, y);
|
|
773
|
+
return;
|
|
774
|
+
}
|
|
775
|
+
const group = entity;
|
|
776
|
+
if (group.size) {
|
|
777
|
+
group.setFrame({ x, y, width: group.size.width, height: group.size.height });
|
|
778
|
+
return;
|
|
779
|
+
}
|
|
780
|
+
group.position = { x, y };
|
|
781
|
+
group.requestLayout();
|
|
782
|
+
}
|
|
783
|
+
/**
|
|
784
|
+
* Resize a member along one or both axes. `undefined` leaves that axis alone.
|
|
785
|
+
* Nodes go through `setSize` so the write is tracked and honours the per-node
|
|
786
|
+
* lock; member groups go through `setFrame` so their own children follow.
|
|
787
|
+
*/
|
|
788
|
+
resizeEntity(entity, width, height) {
|
|
789
|
+
if (this.isPinned(entity) || !entity.size) {
|
|
790
|
+
return;
|
|
791
|
+
}
|
|
792
|
+
const w = width !== null && width !== void 0 ? width : entity.size.width;
|
|
793
|
+
const h = height !== null && height !== void 0 ? height : entity.size.height;
|
|
794
|
+
if (w === entity.size.width && h === entity.size.height) {
|
|
795
|
+
return;
|
|
796
|
+
}
|
|
797
|
+
if ('setSize' in entity && typeof entity.setSize === 'function') {
|
|
798
|
+
entity.setSize(w, h, entity.size.depth);
|
|
799
|
+
return;
|
|
800
|
+
}
|
|
801
|
+
const group = entity;
|
|
802
|
+
group.setFrame({ x: group.position.x, y: group.position.y, width: w, height: h });
|
|
803
|
+
}
|
|
804
|
+
/**
|
|
805
|
+
* B — the per-item flex config, finally read. `order` is a stable sort key
|
|
806
|
+
* (equal orders keep membership order), exactly like CSS.
|
|
807
|
+
*/
|
|
808
|
+
orderFlexEntities(entities) {
|
|
809
|
+
const anyOrdered = entities.some((e) => { var _a; return ((_a = this.flexItemOf(e)) === null || _a === void 0 ? void 0 : _a.order) !== undefined; });
|
|
810
|
+
if (!anyOrdered) {
|
|
811
|
+
return entities;
|
|
812
|
+
}
|
|
813
|
+
return entities
|
|
814
|
+
.map((entity, i) => ({ entity, i }))
|
|
815
|
+
.sort((a, b) => {
|
|
816
|
+
var _a, _b, _c, _d;
|
|
817
|
+
const oa = (_b = (_a = this.flexItemOf(a.entity)) === null || _a === void 0 ? void 0 : _a.order) !== null && _b !== void 0 ? _b : 0;
|
|
818
|
+
const ob = (_d = (_c = this.flexItemOf(b.entity)) === null || _c === void 0 ? void 0 : _c.order) !== null && _d !== void 0 ? _d : 0;
|
|
819
|
+
return oa !== ob ? oa - ob : a.i - b.i;
|
|
820
|
+
})
|
|
821
|
+
.map((e) => e.entity);
|
|
822
|
+
}
|
|
823
|
+
/** FlexItemConfig of a member, if it is a node that carries one. */
|
|
824
|
+
flexItemOf(entity) {
|
|
825
|
+
const node = entity;
|
|
826
|
+
return typeof node.getFlexItem === 'function' ? node.getFlexItem() : undefined;
|
|
827
|
+
}
|
|
828
|
+
/** GridItemConfig of a member, if it is a node that carries one. */
|
|
829
|
+
gridItemOf(entity) {
|
|
830
|
+
const node = entity;
|
|
831
|
+
return typeof node.getGridItem === 'function' ? node.getGridItem() : undefined;
|
|
832
|
+
}
|
|
833
|
+
/**
|
|
834
|
+
* Apply flexbox layout to entities (nodes or groups).
|
|
835
|
+
*
|
|
836
|
+
* B — a real single-pass flex algorithm, written axis-agnostically so `row` and
|
|
837
|
+
* `column` share one code path: line breaking (`wrap`), `flexGrow` distribution,
|
|
838
|
+
* `justifyContent` on the main axis, and `alignItems`/`alignSelf` (including
|
|
839
|
+
* `stretch`) on the cross axis. Previously only `justifyContent: 'center'` and
|
|
840
|
+
* `alignItems: 'center'` existed and `wrap` was unread.
|
|
841
|
+
*
|
|
842
|
+
* The Bootstrap-style `columns` path is untouched and still takes priority for
|
|
843
|
+
* row containers — see {@link applyColumnBasedLayout}.
|
|
844
|
+
*/
|
|
845
|
+
applyFlexboxLayout(entities) {
|
|
846
|
+
var _a, _b, _c;
|
|
847
|
+
const config = this.getFlexboxLayout();
|
|
848
|
+
const padding = this.normalizePadding(config.padding);
|
|
849
|
+
const isColumn = config.direction === 'column' || config.direction === 'column-reverse';
|
|
850
|
+
const isReverse = config.direction.endsWith('-reverse');
|
|
851
|
+
// PRESERVED QUIRK: the main-axis gap reads `gap.row` for BOTH directions when
|
|
852
|
+
// gap is an object. Every asserted pixel in the existing specs was produced by
|
|
853
|
+
// that reading; the cross-axis (line) gap is new and picks the correct member.
|
|
854
|
+
const mainGap = typeof config.gap === 'number' ? config.gap : config.gap.row;
|
|
855
|
+
const crossGap = typeof config.gap === 'number' ? config.gap : isColumn ? config.gap.column : config.gap.row;
|
|
856
|
+
const ordered = this.orderFlexEntities(entities);
|
|
857
|
+
const directed = isReverse ? ordered.slice().reverse() : ordered;
|
|
858
|
+
const startX = this.position.x + padding.left;
|
|
859
|
+
const startY = this.position.y + padding.top;
|
|
860
|
+
// Bootstrap 12-column path (rows only), unchanged.
|
|
861
|
+
if (!isColumn && config.columns !== undefined && config.columns > 0 && this.size) {
|
|
862
|
+
this.applyColumnBasedLayout(directed, config, padding, startX, startY);
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
const contentWidth = this.size ? this.size.width - padding.left - padding.right : undefined;
|
|
866
|
+
const contentHeight = this.size ? this.size.height - padding.top - padding.bottom : undefined;
|
|
867
|
+
const mainAvail = isColumn ? contentHeight : contentWidth;
|
|
868
|
+
const crossAvail = isColumn ? contentWidth : contentHeight;
|
|
869
|
+
const mainOf = (e) => { var _a, _b, _c; return (_c = (isColumn ? (_a = e.size) === null || _a === void 0 ? void 0 : _a.height : (_b = e.size) === null || _b === void 0 ? void 0 : _b.width)) !== null && _c !== void 0 ? _c : (isColumn ? 50 : 100); };
|
|
870
|
+
const crossOf = (e) => { var _a, _b, _c; return (_c = (isColumn ? (_a = e.size) === null || _a === void 0 ? void 0 : _a.width : (_b = e.size) === null || _b === void 0 ? void 0 : _b.height)) !== null && _c !== void 0 ? _c : (isColumn ? 100 : 50); };
|
|
871
|
+
// ---- 1. Line breaking (`wrap`) -----------------------------------------
|
|
872
|
+
// Without a container extent there is no overflow to detect, so an unsized
|
|
873
|
+
// container is always single-line regardless of `wrap` — which is exactly the
|
|
874
|
+
// behaviour every pre-existing spec was written against.
|
|
875
|
+
const wraps = config.wrap !== 'nowrap' && mainAvail !== undefined;
|
|
876
|
+
const lines = [];
|
|
877
|
+
if (!wraps) {
|
|
878
|
+
lines.push(directed);
|
|
879
|
+
}
|
|
880
|
+
else {
|
|
881
|
+
let line = [];
|
|
882
|
+
let used = 0;
|
|
883
|
+
for (const entity of directed) {
|
|
884
|
+
const size = mainOf(entity);
|
|
885
|
+
const next = line.length === 0 ? size : used + mainGap + size;
|
|
886
|
+
if (line.length > 0 && next > mainAvail) {
|
|
887
|
+
lines.push(line);
|
|
888
|
+
line = [entity];
|
|
889
|
+
used = size;
|
|
890
|
+
}
|
|
891
|
+
else {
|
|
892
|
+
line.push(entity);
|
|
893
|
+
used = next;
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
if (line.length > 0) {
|
|
897
|
+
lines.push(line);
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
if (config.wrap === 'wrap-reverse') {
|
|
901
|
+
lines.reverse();
|
|
902
|
+
}
|
|
903
|
+
// ---- 2. Per-line: grow, justify, align ----------------------------------
|
|
904
|
+
let crossCursor = isColumn ? startX : startY;
|
|
905
|
+
for (const line of lines) {
|
|
906
|
+
// flexGrow — distribute leftover main-axis space by factor.
|
|
907
|
+
if (mainAvail !== undefined) {
|
|
908
|
+
const totalGrow = line.reduce((s, e) => { var _a, _b; return s + ((_b = (_a = this.flexItemOf(e)) === null || _a === void 0 ? void 0 : _a.flexGrow) !== null && _b !== void 0 ? _b : 0); }, 0);
|
|
909
|
+
if (totalGrow > 0) {
|
|
910
|
+
const used = line.reduce((s, e) => s + mainOf(e), 0) + mainGap * Math.max(0, line.length - 1);
|
|
911
|
+
const free = mainAvail - used;
|
|
912
|
+
if (free > 0) {
|
|
913
|
+
for (const entity of line) {
|
|
914
|
+
const grow = (_b = (_a = this.flexItemOf(entity)) === null || _a === void 0 ? void 0 : _a.flexGrow) !== null && _b !== void 0 ? _b : 0;
|
|
915
|
+
if (grow <= 0)
|
|
916
|
+
continue;
|
|
917
|
+
const target = mainOf(entity) + (free * grow) / totalGrow;
|
|
918
|
+
this.resizeEntity(entity, isColumn ? undefined : target, isColumn ? target : undefined);
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
// The line's cross extent. A SINGLE line in a sized container fills the
|
|
924
|
+
// container's content box (that is what makes `center`/`end`/`stretch`
|
|
925
|
+
// measure against the container, as the legacy centering code did); wrapped
|
|
926
|
+
// lines measure against their own tallest item, as CSS does.
|
|
927
|
+
const lineCross = lines.length === 1 && crossAvail !== undefined
|
|
928
|
+
? crossAvail
|
|
929
|
+
: line.reduce((m, e) => Math.max(m, crossOf(e)), 0);
|
|
930
|
+
// justifyContent — main-axis offset + inter-item spacing.
|
|
931
|
+
const usedMain = line.reduce((s, e) => s + mainOf(e), 0) + mainGap * Math.max(0, line.length - 1);
|
|
932
|
+
const free = mainAvail !== undefined ? mainAvail - usedMain : 0;
|
|
933
|
+
const { offset, spacing } = this.resolveJustify(config.justifyContent, mainAvail !== undefined ? free : 0, line.length);
|
|
934
|
+
let mainCursor = (isColumn ? startY : startX) + offset;
|
|
935
|
+
for (const entity of line) {
|
|
936
|
+
const align = (_c = this.flexItemOf(entity)) === null || _c === void 0 ? void 0 : _c.alignSelf;
|
|
937
|
+
const effectiveAlign = align === undefined || align === 'auto' ? config.alignItems : align;
|
|
938
|
+
if (effectiveAlign === 'stretch') {
|
|
939
|
+
this.resizeEntity(entity, isColumn ? lineCross : undefined, isColumn ? undefined : lineCross);
|
|
940
|
+
}
|
|
941
|
+
const crossOffset = this.resolveAlign(effectiveAlign, lineCross, crossOf(entity));
|
|
942
|
+
const cross = crossCursor + crossOffset;
|
|
943
|
+
this.placeEntity(entity, isColumn ? cross : mainCursor, isColumn ? mainCursor : cross);
|
|
944
|
+
mainCursor += mainOf(entity) + mainGap + spacing;
|
|
945
|
+
}
|
|
946
|
+
crossCursor += lineCross + crossGap;
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Main-axis distribution for one flex line: how far the first item is pushed in,
|
|
951
|
+
* and how much EXTRA space goes between consecutive items (on top of `gap`).
|
|
952
|
+
* `start` (and anything unrecognised) is the identity, so a container with no
|
|
953
|
+
* size — where `free` is passed as 0 — always lays out from the content origin.
|
|
954
|
+
*/
|
|
955
|
+
resolveJustify(justify, free, count) {
|
|
956
|
+
if (free <= 0 || count === 0) {
|
|
957
|
+
return { offset: 0, spacing: 0 };
|
|
958
|
+
}
|
|
959
|
+
switch (justify) {
|
|
960
|
+
case 'center':
|
|
961
|
+
return { offset: free / 2, spacing: 0 };
|
|
962
|
+
case 'end':
|
|
963
|
+
return { offset: free, spacing: 0 };
|
|
964
|
+
case 'space-between':
|
|
965
|
+
return count === 1
|
|
966
|
+
? { offset: 0, spacing: 0 }
|
|
967
|
+
: { offset: 0, spacing: free / (count - 1) };
|
|
968
|
+
case 'space-around': {
|
|
969
|
+
const unit = free / count;
|
|
970
|
+
return { offset: unit / 2, spacing: unit };
|
|
971
|
+
}
|
|
972
|
+
case 'space-evenly': {
|
|
973
|
+
const unit = free / (count + 1);
|
|
974
|
+
return { offset: unit, spacing: unit };
|
|
975
|
+
}
|
|
976
|
+
default:
|
|
977
|
+
return { offset: 0, spacing: 0 };
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
/**
|
|
981
|
+
* Cross-axis offset of one item inside its line. `stretch` has already resized
|
|
982
|
+
* the item by the time this runs, so it lands at the line start like `start`.
|
|
983
|
+
* `baseline` degrades to `start`: this model has no text baselines to align to,
|
|
984
|
+
* and quietly inventing one would be worse than saying so.
|
|
985
|
+
*/
|
|
986
|
+
resolveAlign(align, lineCross, itemCross) {
|
|
987
|
+
switch (align) {
|
|
988
|
+
case 'center':
|
|
989
|
+
return (lineCross - itemCross) / 2;
|
|
990
|
+
case 'end':
|
|
991
|
+
return lineCross - itemCross;
|
|
992
|
+
default:
|
|
993
|
+
return 0;
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
/**
|
|
997
|
+
* Apply column-based layout (like Bootstrap 12-column grid)
|
|
998
|
+
*/
|
|
999
|
+
applyColumnBasedLayout(entities, config, padding, startX, startY) {
|
|
1000
|
+
var _a, _b, _c;
|
|
1001
|
+
if (!this.size || !config.columns)
|
|
1002
|
+
return;
|
|
1003
|
+
const totalColumns = config.columns;
|
|
1004
|
+
const gap = typeof config.gap === 'number' ? config.gap : config.gap.column || 0;
|
|
1005
|
+
// Available width for content (excluding padding)
|
|
1006
|
+
const availableWidth = this.size.width - padding.left - padding.right;
|
|
1007
|
+
// Calculate column width (including gaps)
|
|
1008
|
+
const totalGaps = (totalColumns - 1) * gap;
|
|
1009
|
+
const columnWidth = (availableWidth - totalGaps) / totalColumns;
|
|
1010
|
+
let currentX = startX;
|
|
1011
|
+
let currentY = startY;
|
|
1012
|
+
let currentColumn = 0;
|
|
1013
|
+
let currentRowHeight = 0; // Track max height in current row
|
|
1014
|
+
const rowEntities = []; // Track entities in current row
|
|
1015
|
+
for (const entity of entities) {
|
|
1016
|
+
// Get column span from metadata (default = 1)
|
|
1017
|
+
const columnSpan = entity.getMetadata('columnSpan') || 1;
|
|
1018
|
+
const clampedSpan = Math.min(columnSpan, totalColumns);
|
|
1019
|
+
// Check if entity fits in current row
|
|
1020
|
+
if (currentColumn + clampedSpan > totalColumns) {
|
|
1021
|
+
// Move to next row
|
|
1022
|
+
currentColumn = 0;
|
|
1023
|
+
currentX = startX;
|
|
1024
|
+
currentY += currentRowHeight + gap;
|
|
1025
|
+
currentRowHeight = 0;
|
|
1026
|
+
rowEntities.length = 0; // Clear row entities
|
|
1027
|
+
}
|
|
1028
|
+
// Calculate entity width based on column span
|
|
1029
|
+
const entityWidth = columnWidth * clampedSpan + gap * (clampedSpan - 1);
|
|
1030
|
+
// Update entity size to match column width. Routed through resizeEntity /
|
|
1031
|
+
// placeEntity so the write is tracked, honours the per-node lock (D), and
|
|
1032
|
+
// cascades into a member group's own children (A).
|
|
1033
|
+
this.resizeEntity(entity, entityWidth);
|
|
1034
|
+
this.placeEntity(entity, currentX, currentY);
|
|
1035
|
+
// Track row height (max height in this row). A PINNED member keeps its own
|
|
1036
|
+
// size, so the cursor advances by what it actually occupies.
|
|
1037
|
+
const occupiedWidth = this.isPinned(entity) ? (_b = (_a = entity.size) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : entityWidth : entityWidth;
|
|
1038
|
+
const entityHeight = ((_c = entity.size) === null || _c === void 0 ? void 0 : _c.height) || 100;
|
|
1039
|
+
currentRowHeight = Math.max(currentRowHeight, entityHeight);
|
|
1040
|
+
rowEntities.push(entity);
|
|
1041
|
+
// Move to next column position
|
|
1042
|
+
currentX += occupiedWidth + gap;
|
|
1043
|
+
currentColumn += clampedSpan;
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
/**
|
|
1047
|
+
* Apply grid layout to entities (nodes or groups).
|
|
1048
|
+
*
|
|
1049
|
+
* B — placement now comes from each item's {@link GridItemConfig} (explicit
|
|
1050
|
+
* `columnStart`/`rowStart` lines and `columnEnd`/`rowEnd` spans), not from the
|
|
1051
|
+
* member's ARRAY INDEX. Items with no explicit placement auto-flow into the
|
|
1052
|
+
* first cell no explicit item has claimed, in `autoFlow` order. Tracks are
|
|
1053
|
+
* uniform: derived from the container's content box when it has one, and from
|
|
1054
|
+
* the widest/tallest member otherwise (which is what the old per-entity
|
|
1055
|
+
* arithmetic already produced for the equal-sized children it was written for).
|
|
1056
|
+
*/
|
|
1057
|
+
applyGridLayout(entities) {
|
|
1058
|
+
var _a, _b;
|
|
1059
|
+
const config = this.getGridLayout();
|
|
1060
|
+
const columns = Math.max(1, this.parseGridColumns(config.templateColumns));
|
|
1061
|
+
const columnGap = config.columnGap || 0;
|
|
1062
|
+
const rowGap = config.rowGap || 0;
|
|
1063
|
+
const padding = this.normalizePadding(config.padding);
|
|
1064
|
+
const startX = this.position.x + padding.left;
|
|
1065
|
+
const startY = this.position.y + padding.top;
|
|
1066
|
+
// `templateRows` bounds a column-flow grid's row axis (CSS: column flow grows
|
|
1067
|
+
// COLUMNS, so the rows have to be finite). With none declared, fall back to
|
|
1068
|
+
// "as many rows as there are members", which can never force a wrap.
|
|
1069
|
+
const templateRowCount = config.templateRows ? this.parseGridColumns(config.templateRows) : 0;
|
|
1070
|
+
const rowLimit = templateRowCount > 0 ? templateRowCount : Math.max(1, entities.length);
|
|
1071
|
+
const placements = this.resolveGridPlacements(entities, columns, config.autoFlow, rowLimit);
|
|
1072
|
+
// Track sizes.
|
|
1073
|
+
const rowCount = placements.reduce((m, p) => Math.max(m, p.row + p.rowSpan), 1);
|
|
1074
|
+
const contentWidth = this.size ? this.size.width - padding.left - padding.right : undefined;
|
|
1075
|
+
const contentHeight = this.size ? this.size.height - padding.top - padding.bottom : undefined;
|
|
1076
|
+
const rowTracks = Math.max(rowCount, templateRowCount || 0, 1);
|
|
1077
|
+
const columnWidth = contentWidth !== undefined
|
|
1078
|
+
? (contentWidth - columnGap * (columns - 1)) / columns
|
|
1079
|
+
: entities.reduce((m, e) => { var _a, _b; return Math.max(m, (_b = (_a = e.size) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0); }, 0) || 100;
|
|
1080
|
+
const rowHeight = contentHeight !== undefined
|
|
1081
|
+
? (contentHeight - rowGap * (rowTracks - 1)) / rowTracks
|
|
1082
|
+
: entities.reduce((m, e) => { var _a, _b; return Math.max(m, (_b = (_a = e.size) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0); }, 0) || 100;
|
|
1083
|
+
for (const { entity, row, column, rowSpan, columnSpan } of placements) {
|
|
1084
|
+
const x = startX + column * (columnWidth + columnGap);
|
|
1085
|
+
const y = startY + row * (rowHeight + rowGap);
|
|
1086
|
+
// Cell-filling is OPT-IN. CSS defaults `justify-items`/`align-items` to
|
|
1087
|
+
// stretch, but this engine's grid never resized anything, and silently
|
|
1088
|
+
// starting to would re-geometry every existing grid container. Ask for it.
|
|
1089
|
+
const item = this.gridItemOf(entity);
|
|
1090
|
+
const justify = (_a = item === null || item === void 0 ? void 0 : item.justifySelf) !== null && _a !== void 0 ? _a : config.justifyItems;
|
|
1091
|
+
const alignSelf = (_b = item === null || item === void 0 ? void 0 : item.alignSelf) !== null && _b !== void 0 ? _b : config.alignItems;
|
|
1092
|
+
const stretchW = justify === 'stretch';
|
|
1093
|
+
const stretchH = alignSelf === 'stretch';
|
|
1094
|
+
if (stretchW || stretchH) {
|
|
1095
|
+
this.resizeEntity(entity, stretchW ? columnWidth * columnSpan + columnGap * (columnSpan - 1) : undefined, stretchH ? rowHeight * rowSpan + rowGap * (rowSpan - 1) : undefined);
|
|
1096
|
+
}
|
|
1097
|
+
this.placeEntity(entity, x, y);
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
/**
|
|
1101
|
+
* Resolve every member to a 0-based grid cell + span.
|
|
1102
|
+
*
|
|
1103
|
+
* Two passes, because explicit placement must WIN: pass 1 reserves the cells
|
|
1104
|
+
* claimed by items with a `GridItemConfig` line (or a `gridColumn`/`gridRow`
|
|
1105
|
+
* metadata fallback); pass 2 flows the rest into the first cell still free.
|
|
1106
|
+
* Without the reservation an auto item would happily land under a pinned one —
|
|
1107
|
+
* which is precisely the bug "placement by array index" always had.
|
|
1108
|
+
*/
|
|
1109
|
+
resolveGridPlacements(entities, columns, autoFlow, rowLimit) {
|
|
1110
|
+
var _a, _b;
|
|
1111
|
+
const occupied = new Set();
|
|
1112
|
+
const key = (r, c) => `${r}:${c}`;
|
|
1113
|
+
const occupy = (p) => {
|
|
1114
|
+
for (let r = p.row; r < p.row + p.rowSpan; r++) {
|
|
1115
|
+
for (let c = p.column; c < p.column + p.columnSpan; c++) {
|
|
1116
|
+
occupied.add(key(r, c));
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
};
|
|
1120
|
+
const fits = (row, column, rowSpan, columnSpan) => {
|
|
1121
|
+
if (column + columnSpan > columns)
|
|
1122
|
+
return false;
|
|
1123
|
+
for (let r = row; r < row + rowSpan; r++) {
|
|
1124
|
+
for (let c = column; c < column + columnSpan; c++) {
|
|
1125
|
+
if (occupied.has(key(r, c)))
|
|
1126
|
+
return false;
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
return true;
|
|
1130
|
+
};
|
|
1131
|
+
const line = (v) => typeof v === 'number' && v >= 1 ? v - 1 : undefined; // CSS lines are 1-based
|
|
1132
|
+
const specs = entities.map((entity) => {
|
|
1133
|
+
var _a, _b;
|
|
1134
|
+
const item = this.gridItemOf(entity);
|
|
1135
|
+
const column = (_a = line(item === null || item === void 0 ? void 0 : item.columnStart)) !== null && _a !== void 0 ? _a : line(entity.getMetadata('gridColumn'));
|
|
1136
|
+
const row = (_b = line(item === null || item === void 0 ? void 0 : item.rowStart)) !== null && _b !== void 0 ? _b : line(entity.getMetadata('gridRow'));
|
|
1137
|
+
// Span: the CSS end-line form first, then the `columnSpan`/`rowSpan`
|
|
1138
|
+
// metadata the Bootstrap path already uses (kept working on purpose).
|
|
1139
|
+
const endCol = line(item === null || item === void 0 ? void 0 : item.columnEnd);
|
|
1140
|
+
const endRow = line(item === null || item === void 0 ? void 0 : item.rowEnd);
|
|
1141
|
+
const columnSpan = Math.max(1, Math.min(columns, endCol !== undefined && column !== undefined
|
|
1142
|
+
? endCol - column
|
|
1143
|
+
: entity.getMetadata('columnSpan') || 1));
|
|
1144
|
+
const rowSpan = Math.max(1, endRow !== undefined && row !== undefined
|
|
1145
|
+
? endRow - row
|
|
1146
|
+
: entity.getMetadata('rowSpan') || 1);
|
|
1147
|
+
return { entity, row, column, rowSpan, columnSpan };
|
|
1148
|
+
});
|
|
1149
|
+
const placements = [];
|
|
1150
|
+
// Pass 1 — explicit placements reserve their cells.
|
|
1151
|
+
for (const spec of specs) {
|
|
1152
|
+
if (spec.row === undefined || spec.column === undefined)
|
|
1153
|
+
continue;
|
|
1154
|
+
const p = {
|
|
1155
|
+
entity: spec.entity,
|
|
1156
|
+
row: spec.row,
|
|
1157
|
+
column: Math.min(spec.column, Math.max(0, columns - spec.columnSpan)),
|
|
1158
|
+
rowSpan: spec.rowSpan,
|
|
1159
|
+
columnSpan: spec.columnSpan,
|
|
1160
|
+
};
|
|
1161
|
+
occupy(p);
|
|
1162
|
+
placements.push(p);
|
|
1163
|
+
}
|
|
1164
|
+
// Pass 2 — auto-flow the rest into the first cell pass 1 left free.
|
|
1165
|
+
//
|
|
1166
|
+
// `row` flow scans row-major (across, then down); `column` flow scans
|
|
1167
|
+
// column-major (down `rowLimit` rows, then across). The row axis is
|
|
1168
|
+
// unbounded in row flow, so the scan is capped rather than trusted.
|
|
1169
|
+
const columnFirst = autoFlow === 'column';
|
|
1170
|
+
const maxScan = (entities.length + 2) * (columns + 2);
|
|
1171
|
+
for (const spec of specs) {
|
|
1172
|
+
if (spec.row !== undefined && spec.column !== undefined)
|
|
1173
|
+
continue;
|
|
1174
|
+
let row = (_a = spec.row) !== null && _a !== void 0 ? _a : 0;
|
|
1175
|
+
let column = (_b = spec.column) !== null && _b !== void 0 ? _b : 0;
|
|
1176
|
+
if (spec.column !== undefined) {
|
|
1177
|
+
// Column pinned by the author: walk DOWN that column for a free row.
|
|
1178
|
+
while (!fits(row, column, spec.rowSpan, spec.columnSpan) && row < maxScan)
|
|
1179
|
+
row++;
|
|
1180
|
+
}
|
|
1181
|
+
else if (spec.row !== undefined) {
|
|
1182
|
+
// Row pinned: walk ACROSS that row.
|
|
1183
|
+
while (!fits(row, column, spec.rowSpan, spec.columnSpan) && column < columns)
|
|
1184
|
+
column++;
|
|
1185
|
+
if (column >= columns)
|
|
1186
|
+
column = 0;
|
|
1187
|
+
}
|
|
1188
|
+
else if (columnFirst) {
|
|
1189
|
+
let scanned = 0;
|
|
1190
|
+
while (!fits(row, column, spec.rowSpan, spec.columnSpan) && scanned++ < maxScan) {
|
|
1191
|
+
row++;
|
|
1192
|
+
if (row + spec.rowSpan > rowLimit) {
|
|
1193
|
+
row = 0;
|
|
1194
|
+
column++;
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
else {
|
|
1199
|
+
let scanned = 0;
|
|
1200
|
+
while (!fits(row, column, spec.rowSpan, spec.columnSpan) && scanned++ < maxScan) {
|
|
1201
|
+
column++;
|
|
1202
|
+
if (column + spec.columnSpan > columns) {
|
|
1203
|
+
column = 0;
|
|
1204
|
+
row++;
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
const p = {
|
|
1209
|
+
entity: spec.entity,
|
|
1210
|
+
row,
|
|
1211
|
+
column: Math.min(column, Math.max(0, columns - spec.columnSpan)),
|
|
1212
|
+
rowSpan: spec.rowSpan,
|
|
1213
|
+
columnSpan: spec.columnSpan,
|
|
1214
|
+
};
|
|
1215
|
+
occupy(p);
|
|
1216
|
+
placements.push(p);
|
|
1217
|
+
}
|
|
1218
|
+
return placements;
|
|
1219
|
+
}
|
|
1220
|
+
/**
|
|
1221
|
+
* Normalize padding to all four sides
|
|
1222
|
+
*/
|
|
1223
|
+
normalizePadding(padding) {
|
|
1224
|
+
if (padding === undefined) {
|
|
1225
|
+
return { top: 0, right: 0, bottom: 0, left: 0 };
|
|
1226
|
+
}
|
|
1227
|
+
if (typeof padding === 'number') {
|
|
1228
|
+
return { top: padding, right: padding, bottom: padding, left: padding };
|
|
1229
|
+
}
|
|
1230
|
+
return padding;
|
|
1231
|
+
}
|
|
1232
|
+
/**
|
|
1233
|
+
* Parse grid template columns to get column count
|
|
1234
|
+
*/
|
|
1235
|
+
parseGridColumns(templateColumns) {
|
|
1236
|
+
// Simple parser - count space-separated values
|
|
1237
|
+
// Example: "1fr 1fr 1fr" = 3 columns, "repeat(3, 1fr)" = 3 columns
|
|
1238
|
+
const repeatMatch = templateColumns.match(/repeat\((\d+),/);
|
|
1239
|
+
if (repeatMatch) {
|
|
1240
|
+
return parseInt(repeatMatch[1], 10);
|
|
1241
|
+
}
|
|
1242
|
+
return templateColumns.split(' ').length;
|
|
1243
|
+
}
|
|
1244
|
+
/**
|
|
1245
|
+
* Serialize to JSON
|
|
1246
|
+
*/
|
|
1247
|
+
serialize() {
|
|
1248
|
+
var _a;
|
|
1249
|
+
// The 'diagram' metadata key is RUNTIME wiring (a live DiagramModel
|
|
1250
|
+
// back-reference stashed by DiagramModel.addGroup/installGroup). It must
|
|
1251
|
+
// never reach the payload: serializing it embeds the entire live model
|
|
1252
|
+
// into the JSON (circular reference — JSON.stringify throws). The install
|
|
1253
|
+
// path re-stashes it on load.
|
|
1254
|
+
const metadata = Object.fromEntries(Array.from(this.metadata).filter(([key]) => key !== 'diagram'));
|
|
1255
|
+
return {
|
|
1256
|
+
id: this.id,
|
|
1257
|
+
uuid: this.uuid,
|
|
1258
|
+
type: 'group',
|
|
1259
|
+
version: this.version,
|
|
1260
|
+
metadata,
|
|
1261
|
+
name: this.name,
|
|
1262
|
+
members: Array.from(this.members),
|
|
1263
|
+
isCollapsed: this.isCollapsed,
|
|
1264
|
+
bounds: this.bounds,
|
|
1265
|
+
layoutType: this.layoutType, // Phase 1.7
|
|
1266
|
+
layoutConfig: this.layoutConfig, // Phase 1.7
|
|
1267
|
+
// Group geometry: round-trip position (always present) and size (optional)
|
|
1268
|
+
// so layout/placement survives save/load.
|
|
1269
|
+
position: { x: this.position.x, y: this.position.y },
|
|
1270
|
+
size: this.size
|
|
1271
|
+
? { width: this.size.width, height: this.size.height, depth: this.size.depth }
|
|
1272
|
+
: undefined,
|
|
1273
|
+
// Wave-2: containment tree pointer (undefined for top-level groups).
|
|
1274
|
+
parentGroupId: this.parentGroupId,
|
|
1275
|
+
// Wave-5 Card 3: padding is RESOLVED at save time — a document must mean
|
|
1276
|
+
// what it meant, so an authored group pins today's default into the file
|
|
1277
|
+
// (a future default change can never re-geometry it). headerHeight 0 is
|
|
1278
|
+
// still omitted: loaders pin the absent key back to 0, which keeps legacy
|
|
1279
|
+
// documents byte-stable through load→save.
|
|
1280
|
+
padding: (_a = this.padding) !== null && _a !== void 0 ? _a : exports.DEFAULT_GROUP_PADDING,
|
|
1281
|
+
headerHeight: this.headerHeight !== 0 ? this.headerHeight : undefined,
|
|
1282
|
+
zIndex: this.zIndex !== 0 ? this.zIndex : undefined,
|
|
1283
|
+
fitMode: this.fitMode !== 'exact' ? this.fitMode : undefined,
|
|
1284
|
+
constrainChildren: this.constrainChildren ? true : undefined,
|
|
1285
|
+
// Wave-5 Card 4: present only while collapsed.
|
|
1286
|
+
collapsedState: this.collapsedState,
|
|
1287
|
+
// Wave-5 Card 5: per-group compound-layout intent (present only when set).
|
|
1288
|
+
subgraphLayout: this.subgraphLayout,
|
|
1289
|
+
// Wave-5 Card 6: swimlane/pool band config (present only on pools & lanes).
|
|
1290
|
+
laneConfig: this.laneConfig,
|
|
1291
|
+
// Wave-5 Card 7: declarative auto-membership rule + capacity/WIP limit.
|
|
1292
|
+
membershipRule: this.membershipRule,
|
|
1293
|
+
capacity: this.capacity,
|
|
1294
|
+
};
|
|
1295
|
+
}
|
|
1296
|
+
/**
|
|
1297
|
+
* Deserialize from JSON
|
|
1298
|
+
*/
|
|
1299
|
+
static fromJSON(data) {
|
|
1300
|
+
var _a;
|
|
1301
|
+
const group = new GroupModel({ id: data.id, name: data.name });
|
|
1302
|
+
group.members = new Set(data.members);
|
|
1303
|
+
group.isCollapsed = data.isCollapsed;
|
|
1304
|
+
group.bounds = data.bounds;
|
|
1305
|
+
// Wave-2: restore containment tree pointer.
|
|
1306
|
+
if (data.parentGroupId !== undefined) {
|
|
1307
|
+
group.parentGroupId = data.parentGroupId;
|
|
1308
|
+
}
|
|
1309
|
+
// Restore group geometry (position/size). Position defaults to origin when
|
|
1310
|
+
// absent so older serialized payloads keep working.
|
|
1311
|
+
if (data.position) {
|
|
1312
|
+
group.position = { x: data.position.x, y: data.position.y };
|
|
1313
|
+
}
|
|
1314
|
+
if (data.size) {
|
|
1315
|
+
group.size = {
|
|
1316
|
+
width: data.size.width,
|
|
1317
|
+
height: data.size.height,
|
|
1318
|
+
depth: data.size.depth,
|
|
1319
|
+
};
|
|
1320
|
+
}
|
|
1321
|
+
// Phase 1.7: Restore layout configuration
|
|
1322
|
+
if (data.layoutType) {
|
|
1323
|
+
group.layoutType = data.layoutType;
|
|
1324
|
+
}
|
|
1325
|
+
if (data.layoutConfig) {
|
|
1326
|
+
group.layoutConfig = data.layoutConfig;
|
|
1327
|
+
}
|
|
1328
|
+
// Wave-5 Card 3: restore subflow geometry. Absent keys PIN TO 0 — they were
|
|
1329
|
+
// written by an engine whose values were 0, and a loaded document must mean
|
|
1330
|
+
// what it meant when saved. Leaving padding `undefined` here would let
|
|
1331
|
+
// getPadding() resolve it to the authored default and silently re-geometry
|
|
1332
|
+
// every legacy fit.
|
|
1333
|
+
group.padding = (_a = data.padding) !== null && _a !== void 0 ? _a : 0;
|
|
1334
|
+
group.headerHeight = typeof data.headerHeight === 'number' ? data.headerHeight : 0;
|
|
1335
|
+
if (typeof data.zIndex === 'number') {
|
|
1336
|
+
group.zIndex = data.zIndex;
|
|
1337
|
+
}
|
|
1338
|
+
if (data.fitMode) {
|
|
1339
|
+
group.fitMode = data.fitMode;
|
|
1340
|
+
}
|
|
1341
|
+
if (data.constrainChildren !== undefined) {
|
|
1342
|
+
group.constrainChildren = data.constrainChildren;
|
|
1343
|
+
}
|
|
1344
|
+
// Wave-5 Card 4: restore collapse snapshot (only present while collapsed).
|
|
1345
|
+
if (data.collapsedState) {
|
|
1346
|
+
group.collapsedState = data.collapsedState;
|
|
1347
|
+
}
|
|
1348
|
+
// Wave-5 Card 5: restore per-group compound-layout intent.
|
|
1349
|
+
if (data.subgraphLayout) {
|
|
1350
|
+
group.subgraphLayout = data.subgraphLayout;
|
|
1351
|
+
}
|
|
1352
|
+
// Wave-5 Card 6: restore swimlane/pool band config.
|
|
1353
|
+
if (data.laneConfig) {
|
|
1354
|
+
group.laneConfig = data.laneConfig;
|
|
1355
|
+
}
|
|
1356
|
+
// Wave-5 Card 7: restore declarative membership rule + capacity/WIP limit.
|
|
1357
|
+
if (data.membershipRule) {
|
|
1358
|
+
group.membershipRule = data.membershipRule;
|
|
1359
|
+
}
|
|
1360
|
+
if (typeof data.capacity === 'number') {
|
|
1361
|
+
group.capacity = data.capacity;
|
|
1362
|
+
}
|
|
1363
|
+
// Restore metadata
|
|
1364
|
+
for (const [key, value] of Object.entries(data.metadata)) {
|
|
1365
|
+
group.metadata.set(key, value);
|
|
1366
|
+
}
|
|
1367
|
+
// Last: restore persisted identity (uuid) and mutation counter (version).
|
|
1368
|
+
group.restoreIdentity(data);
|
|
1369
|
+
return group;
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
exports.GroupModel = GroupModel;
|
|
1373
|
+
//# sourceMappingURL=GroupModel.js.map
|