@focus.matters/diagrams 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/{DirectedPoint-aLZ8iXbb.js → DirectedPoint-BcpEj8ub.js} +2 -2
  2. package/dist/DirectedPoint-BcpEj8ub.js.map +1 -0
  3. package/dist/diagrams.css +1 -1
  4. package/dist/index-hTkL5cDr.js +12037 -0
  5. package/dist/index-hTkL5cDr.js.map +1 -0
  6. package/dist/index.es.js +8 -6
  7. package/dist/index.umd.js +5 -4
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/src/Diagrams/components/Canvas.d.ts +1 -0
  10. package/dist/src/Diagrams/components/extensions/RenderDiagramExtensions.d.ts +4 -0
  11. package/dist/src/Diagrams/components/extensions/RenderUIExtensions.d.ts +4 -0
  12. package/dist/src/Diagrams/components/extra/AlignmentSuggestions.d.ts +1 -0
  13. package/dist/src/Diagrams/components/extra/GatewayRender.d.ts +1 -0
  14. package/dist/src/Diagrams/components/extra/NodeGatewayRender.d.ts +6 -0
  15. package/dist/src/Diagrams/components/objects/EdgeLabels.d.ts +7 -0
  16. package/dist/src/Diagrams/components/objects/RenderEdge/EdgeMarker.d.ts +1 -0
  17. package/dist/src/Diagrams/components/objects/RenderEdge/buildEdgePath.d.ts +5 -0
  18. package/dist/src/Diagrams/components/objects/RenderEdge/index.d.ts +1 -0
  19. package/dist/src/Diagrams/components/objects/RenderEdge/types.d.ts +2 -1
  20. package/dist/src/Diagrams/components/objects/Shapes.d.ts +1 -0
  21. package/dist/src/Diagrams/components/objects/edgeLabelPlacement.d.ts +4 -0
  22. package/dist/src/Diagrams/custom/agent/edges/AgentEdge.d.ts +19 -1
  23. package/dist/src/Diagrams/custom/agent/nodes/AgentNode.d.ts +20 -1
  24. package/dist/src/Diagrams/custom/bpmn/BPMDiagram.d.ts +10 -1
  25. package/dist/src/Diagrams/custom/bpmn/bpmnEvents.d.ts +2 -1
  26. package/dist/src/Diagrams/custom/bpmn/config/BPMNElementCatalog.d.ts +26 -0
  27. package/dist/src/Diagrams/custom/bpmn/config/BPMNLabels.d.ts +27 -0
  28. package/dist/src/Diagrams/custom/bpmn/edges/BPMNEdge.d.ts +77 -0
  29. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNArtifactTransformer.d.ts +5 -0
  30. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNEventAttachments.d.ts +19 -0
  31. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNGridSnap.d.ts +4 -2
  32. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNLaneResizer.d.ts +1 -1
  33. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNModelerExtension.d.ts +97 -0
  34. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNNodeResizer.d.ts +31 -0
  35. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNPropertyChangeEvent.d.ts +4 -0
  36. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNResizeSuggester.d.ts +23 -0
  37. package/dist/src/Diagrams/custom/bpmn/nodes/BPMNEventDefinition.d.ts +28 -0
  38. package/dist/src/Diagrams/custom/bpmn/nodes/BPMNode.d.ts +9 -0
  39. package/dist/src/Diagrams/custom/bpmn/nodes/BlackBoxPoolNode.d.ts +17 -0
  40. package/dist/src/Diagrams/custom/bpmn/nodes/DataStoreNode.d.ts +14 -0
  41. package/dist/src/Diagrams/custom/bpmn/nodes/DocumentAnnotationNode.d.ts +19 -0
  42. package/dist/src/Diagrams/custom/bpmn/nodes/DocumentNode.d.ts +13 -0
  43. package/dist/src/Diagrams/custom/bpmn/nodes/EventNode.d.ts +82 -12
  44. package/dist/src/Diagrams/custom/bpmn/nodes/GateNode.d.ts +27 -2
  45. package/dist/src/Diagrams/custom/bpmn/nodes/Lanes/LaneScreenRenderer.d.ts +1 -1
  46. package/dist/src/Diagrams/custom/bpmn/nodes/Lanes/index.d.ts +30 -6
  47. package/dist/src/Diagrams/custom/bpmn/nodes/TaskNode.d.ts +108 -3
  48. package/dist/src/Diagrams/custom/bpmn/nodes/TextAnnotationNode.d.ts +75 -0
  49. package/dist/src/Diagrams/custom/bpmn/nodes/UnknownBPMNNode.d.ts +20 -1
  50. package/dist/src/Diagrams/custom/bpmn/ui/BPMNDiagramControls.d.ts +6 -0
  51. package/dist/src/Diagrams/custom/bpmn/ui/BPMNElementMenu.d.ts +11 -0
  52. package/dist/src/Diagrams/custom/bpmn/ui/BPMNIcon.d.ts +9 -0
  53. package/dist/src/Diagrams/custom/bpmn/ui/BPMNPropertiesPanel.d.ts +6 -0
  54. package/dist/src/Diagrams/custom/bpmn/ui/BPMNResizeHandle.d.ts +7 -0
  55. package/dist/src/Diagrams/custom/bpmn/ui/resolveToolbarMenuPlacement.d.ts +18 -0
  56. package/dist/src/Diagrams/custom/bpmn/ui/resolveVisibleEdgeToolbarAnchor.d.ts +4 -0
  57. package/dist/src/Diagrams/custom/communication/edges/CommunicationEdge.d.ts +1 -27
  58. package/dist/src/Diagrams/custom/editable/EditableLabel.d.ts +1 -1
  59. package/dist/src/Diagrams/custom/editable/EditableNode.d.ts +8 -2
  60. package/dist/src/Diagrams/store/Canvas.d.ts +16 -6
  61. package/dist/src/Diagrams/store/Diagram.d.ts +77 -19
  62. package/dist/src/Diagrams/store/elements/DEdgeLabelChangeEvent.d.ts +5 -0
  63. package/dist/src/Diagrams/store/elements/Edge.d.ts +58 -8
  64. package/dist/src/Diagrams/store/elements/EdgeLabel.d.ts +64 -0
  65. package/dist/src/Diagrams/store/elements/Events.d.ts +5 -5
  66. package/dist/src/Diagrams/store/elements/Gateway.d.ts +24 -4
  67. package/dist/src/Diagrams/store/elements/Node.d.ts +69 -7
  68. package/dist/src/Diagrams/store/extensions/DiagramExtension.d.ts +11 -1
  69. package/dist/src/Diagrams/store/extensions/DistancesBalancer.d.ts +7 -1
  70. package/dist/src/Diagrams/store/extensions/Dragger.d.ts +19 -4
  71. package/dist/src/Diagrams/store/extensions/EdgesDragger.d.ts +15 -4
  72. package/dist/src/Diagrams/store/extensions/History.d.ts +10 -2
  73. package/dist/src/Diagrams/store/extensions/Hotkeys.d.ts +4 -1
  74. package/dist/src/Diagrams/store/extensions/LabelsAligner.d.ts +21 -0
  75. package/dist/src/Diagrams/store/extensions/NodesAligner.d.ts +10 -3
  76. package/dist/src/Diagrams/store/extensions/NodesConnector.d.ts +32 -3
  77. package/dist/src/Diagrams/store/extensions/Priorities.d.ts +2 -1
  78. package/dist/src/Diagrams/store/extensions/Rules.d.ts +6 -1
  79. package/dist/src/Diagrams/store/extensions/Selector.d.ts +17 -4
  80. package/dist/src/Diagrams/store/extensions/StraightDrag.d.ts +3 -0
  81. package/dist/src/Diagrams/store/extensions/StraightLabelsDrag.d.ts +10 -0
  82. package/dist/src/Diagrams/store/extensions/nodePositionProposalRanking.d.ts +8 -0
  83. package/dist/src/Diagrams/store/routers/CurvedRouter.d.ts +13 -0
  84. package/dist/src/Diagrams/store/routers/EdgesRouter.d.ts +21 -0
  85. package/dist/src/Diagrams/store/routers/OrthogonalRouter.d.ts +16 -0
  86. package/dist/src/Diagrams/store/routers/StraightRouter.d.ts +13 -0
  87. package/dist/src/Diagrams/store/routers/cardinalAxisConstraint.d.ts +7 -0
  88. package/dist/src/Diagrams/store/routers/getEdgesRouter.d.ts +4 -0
  89. package/dist/src/Diagrams/store/routers/resolveConnectionCandidate.d.ts +22 -0
  90. package/dist/src/Diagrams/store/types.d.ts +16 -7
  91. package/dist/src/Diagrams/util/bpmn/applyBPMNImportPlan.d.ts +1 -0
  92. package/dist/src/Diagrams/util/bpmn/buildBPMNImportPlan.d.ts +1 -1
  93. package/dist/src/Diagrams/util/bpmn/index.d.ts +2 -1
  94. package/dist/src/Diagrams/util/bpmn/sanitizeId.d.ts +2 -0
  95. package/dist/src/Diagrams/util/bpmn/types.d.ts +1 -0
  96. package/dist/src/Diagrams/util/paths/orthogonalRouter.d.ts +2 -0
  97. package/dist/src/index.d.ts +8 -5
  98. package/package.json +1 -1
  99. package/dist/DirectedPoint-aLZ8iXbb.js.map +0 -1
  100. package/dist/index-B_tKoJcy.js +0 -7229
  101. package/dist/index-B_tKoJcy.js.map +0 -1
  102. package/dist/src/Diagrams/util/paths/findBestPathBetweenNodes.d.ts +0 -8
@@ -2,34 +2,8 @@ import { Edge } from '../../../store/elements/Edge';
2
2
  import { Element } from '../../../store/elements/Element';
3
3
  import { TEdgeState } from '../../../store/types';
4
4
  type CommunicationEdgeState = Partial<TEdgeState>;
5
- type SerializedCommunicationEdge = ReturnType<Edge["serialize"]> & {
6
- label?: string;
7
- labelPositioning?: [number, number];
8
- };
5
+ /** Applies communication-diagram styling on top of shared editable edge state. */
9
6
  export declare class CommunicationEdge extends Edge {
10
- isEditingLabel: boolean;
11
- labelDraft: string;
12
7
  constructor(parent: Element | null, state: CommunicationEdgeState);
13
- setLabel(label: string): void;
14
- beginLabelEdit(): void;
15
- cancelLabelEdit(): void;
16
- confirmLabelEdit(): void;
17
- serialize(): {
18
- label: string;
19
- labelPositioning: [number, number];
20
- arrowHeadEnd: import('../../../store/types').EdgeArrowHead | undefined;
21
- arrowHeadStart: import('../../../store/types').EdgeArrowHead | undefined;
22
- displacementEnd: [number, number] | undefined;
23
- displacementStart: [number, number] | undefined;
24
- lineStyle: import('../../../store/types').EdgeLineStyle | undefined;
25
- pathType: import('../../../store/types').EdgePathType | undefined;
26
- steps: import('../../../store/elements/EdgePoint').TSerializedEdgePoint[];
27
- stroke: string | undefined;
28
- strokeWidth: number | undefined;
29
- to: string;
30
- toParentId: string;
31
- class: string;
32
- };
33
- deserialize(o: SerializedCommunicationEdge): void;
34
8
  }
35
9
  export {};
@@ -1,5 +1,5 @@
1
- import { EditableNode } from './EditableNode';
2
1
  import { Dimensions } from '../../store/primitives/Dimensions';
2
+ import { EditableNode } from './EditableNode';
3
3
  export declare const EditableLabel: (({ node, box }: {
4
4
  node: EditableNode;
5
5
  box: Dimensions;
@@ -1,15 +1,21 @@
1
- import { Node, TNodeConstructorProps } from '../../store/elements/Node';
2
- import { Element } from '../../store/elements/Element';
3
1
  import { FC } from 'react';
2
+ import { Element } from '../../store/elements/Element';
3
+ import { Node, TNodeConstructorProps } from '../../store/elements/Node';
4
+ /** Provides editable node labels while preserving the pending edit for confirmation or cancellation. */
4
5
  export declare abstract class EditableNode extends Node {
5
6
  editionMode: boolean;
6
7
  constructor(parent: Element | null, state: TNodeConstructorProps);
7
8
  get label(): string;
8
9
  private previous;
10
+ /** Starts a label editing session and saves the current value for a possible cancellation. */
9
11
  edit(): void;
12
+ /** Restores the saved label value and closes the active editing session without emitting changes. */
10
13
  cancel(): void;
14
+ /** Confirms the edit unless an event listener cancels it, then returns whether it was accepted. */
11
15
  confirm(): boolean;
12
16
  get isChanged(): boolean;
13
17
  protected get screenLabelBox(): import('../../store/primitives/Dimensions').Dimensions;
18
+ /** Returns the current label bounds so surrounding controls can avoid its rendered area. */
19
+ get labelScreenBox(): import('../../store/primitives/Dimensions').Dimensions;
14
20
  RenderScreen: FC<any>;
15
21
  }
@@ -1,15 +1,17 @@
1
- import { Coordinates } from './primitives/Coordinates';
2
- import { Dimensions } from './primitives/Dimensions';
3
1
  import { Diagram } from './Diagram';
4
2
  import { Element } from './elements/Element';
3
+ import { Coordinates } from './primitives/Coordinates';
4
+ import { Dimensions } from './primitives/Dimensions';
5
5
  export type ScaleEvent = {
6
6
  previousScale: number;
7
7
  newScale: number;
8
8
  displacement: Coordinates;
9
9
  };
10
+ /** Owns viewport scale, displacement, interaction sessions, and rendered canvas bounds. */
10
11
  export declare class Canvas extends Element {
11
12
  private unbindDocumentEvents;
12
13
  private mouseSessionStartedInFrame;
14
+ private centerAnimationFrame;
13
15
  protected _displacement: Coordinates;
14
16
  _scale: number;
15
17
  private gridSize;
@@ -22,19 +24,25 @@ export declare class Canvas extends Element {
22
24
  get framePosition(): Coordinates;
23
25
  get frameDimensions(): Dimensions;
24
26
  constructor(parent: Diagram);
27
+ /** Releases document listeners and cancels any viewport animation still in flight. */
25
28
  dispose(): void;
29
+ /** Marks programmatic pointer sessions as eligible for the canvas drag lifecycle. */
26
30
  markMouseSessionStartedInFrame(): void;
27
31
  get dragging(): boolean;
28
32
  protected _dragging: boolean;
29
33
  displacementStart: null | Coordinates;
30
34
  eventStart: null | Coordinates;
31
35
  protected bound(): void;
32
- centerOnPoint(c: Coordinates): void;
33
- /**
34
- * @returns how much it displaced
35
- */
36
+ /** Centers a world point in the viewport and optionally animates the pan. */
37
+ centerOnPoint(c: Coordinates, animated?: boolean): void;
38
+ private animateDisplacement;
39
+ private cancelCenterAnimation;
40
+ private applyDisplacement;
41
+ /** Applies a relative viewport displacement and returns the bounded movement used. */
36
42
  displace(c: Coordinates): Coordinates;
43
+ /** Replaces the viewport displacement while respecting configured canvas bounds. */
37
44
  setDisplacement(c: Coordinates): void;
45
+ /** Changes viewport scale around a screen-space focus point and preserves alignment. */
38
46
  setScale(newScale: number, zoomCenter?: Coordinates): void;
39
47
  /**
40
48
  * Given a pair of coordinates in the canvas, returns the matching coordinates in the screen
@@ -44,6 +52,7 @@ export declare class Canvas extends Element {
44
52
  * Given a pair of coordinates in the screen, returns the matching coordinates in the canvas
45
53
  */
46
54
  inverseFit<T extends Coordinates | Dimensions>(value: T): T;
55
+ /** Returns the CSS transform values representing current scale and displacement. */
47
56
  getDisplacementStyles(): {
48
57
  position: string;
49
58
  width: string;
@@ -53,6 +62,7 @@ export declare class Canvas extends Element {
53
62
  willChange: string;
54
63
  };
55
64
  protected setDisplacementStyles(element?: HTMLElement | null): void;
65
+ /** Updates the visual grid interval used by canvas background and snapping helpers. */
56
66
  setGridSize(gridSize: number): void;
57
67
  useRef: (el: HTMLElement | null) => void;
58
68
  private isInsideFrameFromTarget;
@@ -1,87 +1,122 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { Canvas } from './Canvas';
3
- import { Node } from './elements/Node';
4
- import { Coordinates } from './primitives/Coordinates';
5
3
  import { Edge } from './elements/Edge';
6
- import { Gateway } from './elements/Gateway';
7
4
  import { Element, Class } from './elements/Element';
8
- import { Priorities } from './extensions/Priorities';
9
- import { Rules } from './extensions/Rules';
10
- import { DiagramExtension } from './extensions/DiagramExtension';
11
- import { NodesAligner } from './extensions/NodesAligner';
5
+ import { Gateway } from './elements/Gateway';
6
+ import { Node } from './elements/Node';
12
7
  import { Creator } from './extensions/Creator';
8
+ import { DiagramExtension } from './extensions/DiagramExtension';
9
+ import { DistancesBalancer } from './extensions/DistancesBalancer';
10
+ import { Dragger } from './extensions/Dragger';
13
11
  import { EdgesDragger } from './extensions/EdgesDragger';
12
+ import { GridSnap } from './extensions/GridSnap';
13
+ import { History } from './extensions/History';
14
14
  import { Hotkeys } from './extensions/Hotkeys';
15
+ import { LabelsAligner } from './extensions/LabelsAligner';
15
16
  import { Measurer } from './extensions/Measurer';
16
- import { Selector } from './extensions/Selector';
17
+ import { NodesAligner } from './extensions/NodesAligner';
17
18
  import { NodesConnector } from './extensions/NodesConnector';
18
- import { GridSnap } from './extensions/GridSnap';
19
- import { StraightDrag } from './extensions/StraightDrag';
20
- import { DistancesBalancer } from './extensions/DistancesBalancer';
21
19
  import { NodesResizer } from './extensions/NodesResizer';
22
- import { History } from './extensions/History';
23
- import { Dragger } from './extensions/Dragger';
24
20
  import { PathFindingRenderer } from './extensions/PathFindingRenderer';
25
- declare const DefaultExtensions: Readonly<{
21
+ import { Priorities } from './extensions/Priorities';
22
+ import { Rules } from './extensions/Rules';
23
+ import { Selector } from './extensions/Selector';
24
+ import { StraightDrag } from './extensions/StraightDrag';
25
+ import { StraightLabelsDrag } from './extensions/StraightLabelsDrag';
26
+ import { Coordinates } from './primitives/Coordinates';
27
+ import { EdgePathType, TEdgeAnchorState } from './types';
28
+ declare const getDefaultExtensions: () => {
26
29
  Creator: typeof Creator;
27
30
  DistancesBalancer: typeof DistancesBalancer;
31
+ StraightDrag: typeof StraightDrag;
32
+ StraightLabelsDrag: typeof StraightLabelsDrag;
28
33
  Dragger: typeof Dragger;
29
34
  EdgesDragger: typeof EdgesDragger;
30
35
  GridSnap: typeof GridSnap;
31
36
  History: typeof History;
32
37
  Hotkeys: typeof Hotkeys;
38
+ LabelsAligner: typeof LabelsAligner;
33
39
  Measurer: typeof Measurer;
34
40
  NodesAligner: typeof NodesAligner;
35
41
  NodesConnector: typeof NodesConnector;
36
42
  NodesResizer: typeof NodesResizer;
37
43
  PathFindingRenderer: typeof PathFindingRenderer;
38
44
  Selector: typeof Selector;
39
- StraightDrag: typeof StraightDrag;
40
- }>;
45
+ };
41
46
  export type TDefaultExensions = {
42
- [key in keyof typeof DefaultExtensions]: boolean;
47
+ [key in keyof ReturnType<typeof getDefaultExtensions>]: boolean;
43
48
  };
44
49
  export type TDiagramSettings = Partial<{
45
50
  extensions: TDefaultExensions;
46
51
  }>;
52
+ /** Owns diagram elements, extensions, camera state, and application interactions. */
47
53
  export declare class Diagram extends Element {
48
54
  readonly priorities: Priorities;
49
55
  rules: Rules;
50
56
  private focusContentTimer;
51
57
  private knownClasses;
58
+ /** Returns the registered runtime constructor associated with a serialized class name. */
52
59
  getClass(name: string): any;
60
+ /** Registers a runtime constructor so persisted elements can be restored safely. */
53
61
  registerClass(clazz: any, className?: any): void;
54
62
  edgeClass: typeof Edge;
63
+ /** Replaces the edge constructor used for subsequently created connections. */
55
64
  setDefaultEdge(clazz: typeof Edge): void;
56
65
  protected _extensions: Map<Class<DiagramExtension>, DiagramExtension>;
57
66
  protected _nodes: Map<string, Node<import('./types').TOrientation>>;
58
67
  protected _edges: Map<string, Edge>;
68
+ private _hoveredNode;
59
69
  canvas: Canvas;
60
70
  constructor(settings?: TDiagramSettings);
61
71
  get edges(): Readonly<Edge[]>;
72
+ /** Returns registered extensions in deterministic registration order for rendering. */
73
+ get extensions(): ReadonlyArray<DiagramExtension>;
62
74
  get nodes(): Readonly<Node[]>;
75
+ /** Returns the sole node currently hovered within this diagram application. */
76
+ get hoveredNode(): Node<any> | null;
77
+ /** Atomically transfers or clears the application-level node hover owner. */
78
+ setNodeHover(node: Node<any>, hovered: boolean): void;
79
+ /** Clears the application hover owner and its mirrored node presentation flag. */
80
+ clearNodeHover(): void;
63
81
  private getUniqueNodeId;
82
+ /** Adds a node, assigns a collision-free identifier, and attaches diagram state. */
64
83
  add<T extends Node>(node: T): T;
84
+ /** Registers an already constructed edge with both of its endpoint gateways. */
65
85
  addEdge(edge: Edge): void;
86
+ /** Creates and registers a routed edge between two compatible node gateways. */
66
87
  connect(from: Gateway, to: Gateway, options?: {
67
88
  fromDisplacement?: Coordinates;
89
+ pathType?: EdgePathType;
90
+ startAnchor?: TEdgeAnchorState;
91
+ endAnchor?: TEdgeAnchorState;
68
92
  toDisplacement?: Coordinates;
69
93
  }): Edge;
70
- connectWithEdge(from: Gateway, to: Gateway, existentEdge: Edge): Edge;
94
+ /** Registers an existing edge instance and synchronizes both endpoint indexes. */
95
+ connectWithEdge(_from: Gateway, _to: Gateway, existentEdge: Edge): Edge;
96
+ /** Deletes a node and disconnects every edge still attached to its gateways. */
71
97
  delete(node: Node<any>): void;
98
+ /** Disconnects an edge from all gateway indexes and removes diagram ownership. */
72
99
  disconnect(edge: Edge): void;
73
100
  Context: ({ children }: {
74
101
  children: ReactNode;
75
102
  }) => import("react").JSX.Element;
103
+ /** Returns the edge registered under the requested application identifier. */
76
104
  getEdgeById(id: string): Edge | undefined;
105
+ /** Returns the node registered under the requested application identifier. */
77
106
  getNodeById(id: string): Node<import('./types').TOrientation> | undefined;
78
107
  get showGrid(): boolean;
108
+ /** Returns the initialized extension instance for the requested constructor. */
79
109
  getExtension<T extends DiagramExtension>(e: Class<T>): T;
110
+ /** Instantiates and initializes one extension before exposing it to callers. */
80
111
  registerExtension(e: Class<DiagramExtension>): void;
112
+ /** Toggles whether the diagram grid is currently visible to the application. */
81
113
  toggleGrid(): void;
82
114
  static use: () => Diagram;
115
+ /** Exports the complete current diagram contract as a serialized JSON string. */
83
116
  export(): string;
117
+ /** Requests reset approval and removes all nodes when the operation is accepted. */
84
118
  reset(): Promise<boolean>;
119
+ /** Serializes camera state and every owned node into the current persistence contract. */
85
120
  serialize(): {
86
121
  position: {
87
122
  x: number;
@@ -109,7 +144,25 @@ export declare class Diagram extends Element {
109
144
  displacementEnd: [number, number] | undefined;
110
145
  displacementStart: [number, number] | undefined;
111
146
  lineStyle: import('./types').EdgeLineStyle | undefined;
112
- pathType: import('./types').EdgePathType | undefined;
147
+ labels: {
148
+ alignment: "right" | "left" | "center";
149
+ id: string;
150
+ size: {
151
+ height: number;
152
+ width: number;
153
+ };
154
+ text: string;
155
+ position: [number, number];
156
+ }[];
157
+ pathType: EdgePathType;
158
+ startAnchor: {
159
+ mode: import('./types').EdgeAnchorMode;
160
+ position: [number, number] | undefined;
161
+ };
162
+ endAnchor: {
163
+ mode: import('./types').EdgeAnchorMode;
164
+ position: [number, number] | undefined;
165
+ };
113
166
  steps: import('./elements/EdgePoint').TSerializedEdgePoint[];
114
167
  stroke: string | undefined;
115
168
  strokeWidth: number | undefined;
@@ -121,14 +174,19 @@ export declare class Diagram extends Element {
121
174
  }[];
122
175
  fill: string | undefined;
123
176
  labelFontSize: number | undefined;
177
+ labelOffset: [number, number] | undefined;
124
178
  stroke: string | undefined;
125
179
  strokewWidth: number | undefined;
126
180
  class: string;
127
181
  }[];
128
182
  };
183
+ /** Imports serialized nodes and edges while remapping any colliding identifiers. */
129
184
  import(w: string): void;
185
+ /** Pastes serialized nodes near the pointer while assigning fresh identifiers. */
130
186
  paste(w: string): void;
187
+ /** Fits all diagram content inside the current viewport with configurable padding. */
131
188
  focusContentInViewport(padding?: number): boolean;
189
+ /** Retries viewport fitting while layout dimensions settle after initial rendering. */
132
190
  focusContentInViewportWithRetry(attempts?: number, delayMs?: number): void;
133
191
  }
134
192
  export {};
@@ -0,0 +1,5 @@
1
+ import { DChangeEvent } from './Events';
2
+ /** Records an editable edge-label text or position mutation in diagram history. */
3
+ export declare class DEdgeLabelChangeEvent extends DChangeEvent {
4
+ protected readonly __brand: void;
5
+ }
@@ -1,35 +1,83 @@
1
- import { TEdgeState } from '../types';
1
+ import { MouseEvent } from 'react';
2
+ import { Midpoint } from '../../components/objects/RenderEdge';
2
3
  import { Coordinates } from '../primitives/Coordinates';
4
+ import { Dimensions } from '../primitives/Dimensions';
5
+ import { EdgeRouterAnchor } from '../routers/EdgesRouter';
6
+ import { EdgePathType, TEdgeAnchorState, TEdgeState } from '../types';
7
+ import { EdgeLabel } from './EdgeLabel';
3
8
  import { EdgePoint, TSerializedEdgePoint } from './EdgePoint';
4
9
  import { Element } from './Element';
5
- import { Midpoint } from '../../components/objects/RenderEdge';
6
- import { MouseEvent } from 'react';
7
- import { Dimensions } from '../primitives/Dimensions';
10
+ import { Gateway } from './Gateway';
11
+ /** Models a routed connection, its endpoint anchors, editable label, and state. */
8
12
  export declare class Edge extends Element {
9
13
  state: TEdgeState;
10
14
  id: Readonly<string>;
11
15
  constructor(parent: Element | null, state: TEdgeState);
12
16
  get arrowHeadEnd(): import('../types').EdgeArrowHead | undefined;
13
17
  get arrowHeadStart(): import('../types').EdgeArrowHead | undefined;
14
- get from(): import('./Gateway').Gateway;
18
+ get from(): Gateway;
15
19
  get hasManualSteps(): EdgePoint | undefined;
16
20
  get lineStyle(): import('../types').EdgeLineStyle | undefined;
17
- get pathType(): import('../types').EdgePathType | undefined;
21
+ get pathType(): EdgePathType;
22
+ get startAnchor(): TEdgeAnchorState;
23
+ get endAnchor(): TEdgeAnchorState;
18
24
  get steps(): EdgePoint[];
19
25
  get stroke(): string | undefined;
20
26
  get strokeWidth(): number | undefined;
27
+ get labels(): readonly EdgeLabel[];
28
+ /** Creates one independent blank label exactly at the supplied world position. */
29
+ createLabel(position: Coordinates): EdgeLabel;
30
+ /** Removes one owned label and optionally records the deletion in history. */
31
+ removeLabel(label: EdgeLabel, emitChange?: boolean): void;
32
+ /** Updates the first label used by property panels, creating it when necessary. */
33
+ setPrimaryLabel(text: string): EdgeLabel | null;
34
+ /** Finds the length-weighted route midpoint used for programmatic first labels. */
35
+ defaultLabelPosition(): Coordinates;
36
+ /** Reports whether any routed segment intersects the supplied diagram bounds. */
21
37
  collides(box: Dimensions): boolean;
38
+ /** Updates one observable edge-state property through a MobX action boundary. */
22
39
  setState<K extends keyof TEdgeState>(prop: K, value: TEdgeState[K]): void;
40
+ /** Replaces the route and marks both endpoint coordinates as immutable anchors. */
23
41
  setSteps(steps: Coordinates[]): void;
24
- get to(): import('./Gateway').Gateway;
42
+ /** Changes this edge routing strategy and immediately rebuilds its route. */
43
+ setPathType(pathType: EdgePathType): void;
44
+ /** Resolves a persisted fixed endpoint against the node's current geometry. */
45
+ resolveEndpointAnchor(endpoint: "from" | "to"): EdgeRouterAnchor;
46
+ /** Changes one endpoint between automatic and exact boundary positioning. */
47
+ setEndpointAnchor(endpoint: "from" | "to", anchor: TEdgeAnchorState, recompute?: boolean): void;
48
+ /** Reconnects one endpoint to a resolved node anchor and optionally reroutes. */
49
+ setResolvedEndpoint(endpoint: "from" | "to", resolved: EdgeRouterAnchor, anchor: TEdgeAnchorState, recompute?: boolean): void;
50
+ /** Reattaches resolved gateways safely and updates derived displacements. */
51
+ applyResolvedAnchors(start: EdgeRouterAnchor, end: EdgeRouterAnchor): void;
52
+ get to(): Gateway;
53
+ /** Restores the complete current edge contract and reconnects its target node. */
25
54
  deserialize(o: ReturnType<(typeof this)["serialize"]>): void;
55
+ /** Serializes routing, endpoint anchors, presentation, and editable label state. */
26
56
  serialize(): {
27
57
  arrowHeadEnd: import('../types').EdgeArrowHead | undefined;
28
58
  arrowHeadStart: import('../types').EdgeArrowHead | undefined;
29
59
  displacementEnd: [number, number] | undefined;
30
60
  displacementStart: [number, number] | undefined;
31
61
  lineStyle: import('../types').EdgeLineStyle | undefined;
32
- pathType: import('../types').EdgePathType | undefined;
62
+ labels: {
63
+ alignment: "right" | "left" | "center";
64
+ id: string;
65
+ size: {
66
+ height: number;
67
+ width: number;
68
+ };
69
+ text: string;
70
+ position: [number, number];
71
+ }[];
72
+ pathType: EdgePathType;
73
+ startAnchor: {
74
+ mode: import('../types').EdgeAnchorMode;
75
+ position: [number, number] | undefined;
76
+ };
77
+ endAnchor: {
78
+ mode: import('../types').EdgeAnchorMode;
79
+ position: [number, number] | undefined;
80
+ };
33
81
  steps: TSerializedEdgePoint[];
34
82
  stroke: string | undefined;
35
83
  strokeWidth: number | undefined;
@@ -37,6 +85,8 @@ export declare class Edge extends Element {
37
85
  toParentId: string;
38
86
  class: string;
39
87
  };
88
+ /** Starts an orthogonal segment drag by emitting its normalized diagram event. */
40
89
  dragStart(midpoint: Midpoint, ev: MouseEvent): void;
90
+ /** Starts reconnecting one endpoint while preventing duplicate pointer handling. */
41
91
  dragEndpoint(endpoint: "from" | "to", ev: MouseEvent): void;
42
92
  }
@@ -0,0 +1,64 @@
1
+ import { Coordinates } from '../primitives/Coordinates';
2
+ import { Edge } from './Edge';
3
+ import { Element } from './Element';
4
+ type EdgeLabelState = {
5
+ alignment?: "left" | "center" | "right";
6
+ id?: string;
7
+ text?: string;
8
+ position: Coordinates;
9
+ size?: {
10
+ height: number;
11
+ width: number;
12
+ };
13
+ };
14
+ /** Models one independently editable and movable screen-rendered edge label. */
15
+ export declare class EdgeLabel extends Element {
16
+ parent: Edge;
17
+ readonly id: string;
18
+ text: string;
19
+ alignment: "left" | "center" | "right";
20
+ size: {
21
+ height: number;
22
+ width: number;
23
+ };
24
+ position: Coordinates;
25
+ isEditing: boolean;
26
+ draft: string;
27
+ private isNew;
28
+ constructor(parent: Edge, state: EdgeLabelState, isNew?: boolean);
29
+ /** Replaces persisted text for programmatic editors without emitting history. */
30
+ setText(text: string): void;
31
+ /** Changes horizontal text alignment and records the presentation update in history. */
32
+ setAlignment(alignment: "left" | "center" | "right"): void;
33
+ /** Replaces the persisted world-space label box size without emitting history immediately. */
34
+ setSize(size: {
35
+ height: number;
36
+ width: number;
37
+ }): void;
38
+ /** Opens this label editor with a draft copied from its persisted text value. */
39
+ beginEdit(): void;
40
+ /** Updates only the transient input draft while the label remains in edition. */
41
+ setDraft(text: string): void;
42
+ /** Cancels editing and discards a newly-created label that has never persisted. */
43
+ cancelEdit(): void;
44
+ /** Removes this label and emits history only when it has already been persisted. */
45
+ delete(): void;
46
+ /** Commits edited text, removing empty labels and emitting one history change. */
47
+ confirmEdit(): void;
48
+ /** Moves this label to an absolute diagram position without changing its edge. */
49
+ setPosition(position: Coordinates): void;
50
+ /** Records the completed pointer movement as one undoable diagram mutation. */
51
+ commitPosition(): void;
52
+ /** Serializes identity, alignment, size, text, and absolute world position for persistence. */
53
+ serialize(): {
54
+ alignment: "right" | "left" | "center";
55
+ id: string;
56
+ size: {
57
+ height: number;
58
+ width: number;
59
+ };
60
+ text: string;
61
+ position: [number, number];
62
+ };
63
+ }
64
+ export {};
@@ -1,11 +1,11 @@
1
- import { MouseEvent as ME, KeyboardEvent as KE } from 'react';
2
- import { Element } from './Element';
1
+ import { KeyboardEvent as KE, MouseEvent as ME } from 'react';
2
+ import { Midpoint } from '../../components/objects/RenderEdge';
3
3
  import { Coordinates } from '../primitives/Coordinates';
4
- import { Node } from './Node';
5
4
  import { Edge } from './Edge';
6
- import { Midpoint } from '../../components/objects/RenderEdge';
7
- import { MouseInformation } from './EventsMouseInformation';
5
+ import { Element } from './Element';
6
+ import { Node } from './Node';
8
7
  import { Dimensions } from '../primitives/Dimensions';
8
+ import { MouseInformation } from './EventsMouseInformation';
9
9
  export type AnyMouseEvent = ME | MouseEvent;
10
10
  export type AnyKeyboardEvent = KE | KeyboardEvent;
11
11
  export declare abstract class DEvent {
@@ -7,9 +7,11 @@ export declare class Gateway extends Element {
7
7
  parent: Node<any>;
8
8
  state: TGatewayState;
9
9
  constructor(parent: Node<any>, state: Pick<TGatewayState, "maxIncomingConnections" | "maxOutgoingConnections" | "orientation" | "id"> & Partial<TGatewayState>);
10
- addIncomingEdge(edge: Edge): void;
11
- addOutgoingEdge(edge: Edge): void;
12
- canConnect(from: Gateway): boolean;
10
+ addIncomingEdge(edge: Edge, _recompute?: boolean): void;
11
+ addOutgoingEdge(edge: Edge, recompute?: boolean): void;
12
+ canConnect(from: Gateway, ignoreEdge?: Edge): boolean;
13
+ /** Checks outgoing capacity while optionally ignoring a reconnected edge. */
14
+ canStartConnection(to: Gateway, ignoreEdge?: Edge): boolean;
13
15
  connectionDisplacement(c: Coordinates): Coordinates;
14
16
  connectionDistance(c: Coordinates): number;
15
17
  removeIncomingEdge(edge: Edge): void;
@@ -44,7 +46,25 @@ export declare class Gateway extends Element {
44
46
  displacementEnd: [number, number] | undefined;
45
47
  displacementStart: [number, number] | undefined;
46
48
  lineStyle: import('../types').EdgeLineStyle | undefined;
47
- pathType: import('../types').EdgePathType | undefined;
49
+ labels: {
50
+ alignment: "right" | "left" | "center";
51
+ id: string;
52
+ size: {
53
+ height: number;
54
+ width: number;
55
+ };
56
+ text: string;
57
+ position: [number, number];
58
+ }[];
59
+ pathType: import('../types').EdgePathType;
60
+ startAnchor: {
61
+ mode: import('../types').EdgeAnchorMode;
62
+ position: [number, number] | undefined;
63
+ };
64
+ endAnchor: {
65
+ mode: import('../types').EdgeAnchorMode;
66
+ position: [number, number] | undefined;
67
+ };
48
68
  steps: import('./EdgePoint').TSerializedEdgePoint[];
49
69
  stroke: string | undefined;
50
70
  strokeWidth: number | undefined;