orcasvn-react-diagrams 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -1
- package/ai/api-contract.json +57 -5
- package/ai/invariants.json +5 -3
- package/ai/manifest.json +1 -1
- package/dist/cjs/examples.js +11775 -0
- package/dist/cjs/index.js +3889 -1112
- package/dist/cjs/types/api/createDiagramEditor.d.ts +7 -2
- package/dist/cjs/types/api/types.d.ts +178 -0
- package/dist/cjs/types/displaybox/demos/DeletionEventsDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/ShapeHoverControlsDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/TextLayoutDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/deletionEventsDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/rotatedCreationDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/roundedRectRadiusDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/shapeBorderMovementDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/shapeHoverControlsDemo.d.ts +10 -0
- package/dist/cjs/types/displaybox/demos/textDemo.d.ts +4 -0
- package/dist/cjs/types/displaybox/useDemoEditor.d.ts +5 -2
- package/dist/cjs/types/engine/AutoLayoutService.d.ts +24 -0
- package/dist/cjs/types/engine/DiagramEngine.d.ts +32 -14
- package/dist/cjs/types/engine/EngineCommands.d.ts +4 -1
- package/dist/cjs/types/engine/LinkRoutingService.d.ts +35 -0
- package/dist/cjs/types/engine/MutationPipeline.d.ts +23 -0
- package/dist/cjs/types/engine/TextLayoutService.d.ts +40 -0
- package/dist/cjs/types/examples/index.d.ts +2 -0
- package/dist/cjs/types/measure/textStyleDefaults.d.ts +9 -0
- package/dist/cjs/types/models/DiagramModel.d.ts +1 -0
- package/dist/cjs/types/models/ElementModel.d.ts +1 -0
- package/dist/cjs/types/models/PortModel.d.ts +3 -0
- package/dist/cjs/types/models/TextModel.d.ts +8 -0
- package/dist/cjs/types/renderer/RenderTypes.d.ts +34 -1
- package/dist/cjs/types/renderer/konva/KonvaHitTester.d.ts +1 -1
- package/dist/cjs/types/renderer/konva/KonvaInteraction.d.ts +53 -3
- package/dist/cjs/types/renderer/konva/KonvaNodeFactory.d.ts +18 -1
- package/dist/cjs/types/renderer/konva/KonvaRenderer.d.ts +49 -2
- package/dist/cjs/types/shapes/BuiltInShapes.d.ts +107 -0
- package/dist/cjs/types/shapes/__tests__/BuiltInShapes.test.d.ts +1 -0
- package/dist/cjs/types/shapes/index.d.ts +1 -0
- package/dist/cjs/types/utils/__tests__/borderGeometry.test.d.ts +1 -0
- package/dist/cjs/types/utils/borderGeometry.d.ts +6 -0
- package/dist/cjs/types/utils/geometry.d.ts +22 -0
- package/dist/esm/examples.js +11767 -0
- package/dist/esm/examples.js.map +1 -0
- package/dist/esm/index.js +3890 -1113
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/api/createDiagramEditor.d.ts +7 -2
- package/dist/esm/types/api/types.d.ts +178 -0
- package/dist/esm/types/displaybox/demos/DeletionEventsDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/ShapeHoverControlsDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/TextLayoutDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/deletionEventsDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/rotatedCreationDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/roundedRectRadiusDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/shapeBorderMovementDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/shapeHoverControlsDemo.d.ts +10 -0
- package/dist/esm/types/displaybox/demos/textDemo.d.ts +4 -0
- package/dist/esm/types/displaybox/useDemoEditor.d.ts +5 -2
- package/dist/esm/types/engine/AutoLayoutService.d.ts +24 -0
- package/dist/esm/types/engine/DiagramEngine.d.ts +32 -14
- package/dist/esm/types/engine/EngineCommands.d.ts +4 -1
- package/dist/esm/types/engine/LinkRoutingService.d.ts +35 -0
- package/dist/esm/types/engine/MutationPipeline.d.ts +23 -0
- package/dist/esm/types/engine/TextLayoutService.d.ts +40 -0
- package/dist/esm/types/examples/index.d.ts +2 -0
- package/dist/esm/types/measure/textStyleDefaults.d.ts +9 -0
- package/dist/esm/types/models/DiagramModel.d.ts +1 -0
- package/dist/esm/types/models/ElementModel.d.ts +1 -0
- package/dist/esm/types/models/PortModel.d.ts +3 -0
- package/dist/esm/types/models/TextModel.d.ts +8 -0
- package/dist/esm/types/renderer/RenderTypes.d.ts +34 -1
- package/dist/esm/types/renderer/konva/KonvaHitTester.d.ts +1 -1
- package/dist/esm/types/renderer/konva/KonvaInteraction.d.ts +53 -3
- package/dist/esm/types/renderer/konva/KonvaNodeFactory.d.ts +18 -1
- package/dist/esm/types/renderer/konva/KonvaRenderer.d.ts +49 -2
- package/dist/esm/types/shapes/BuiltInShapes.d.ts +107 -0
- package/dist/esm/types/shapes/__tests__/BuiltInShapes.test.d.ts +1 -0
- package/dist/esm/types/shapes/index.d.ts +1 -0
- package/dist/esm/types/utils/__tests__/borderGeometry.test.d.ts +1 -0
- package/dist/esm/types/utils/borderGeometry.d.ts +6 -0
- package/dist/esm/types/utils/geometry.d.ts +22 -0
- package/dist/examples.d.ts +532 -0
- package/dist/index.d.ts +233 -2
- package/docs/API_CONTRACT.md +59 -3
- package/docs/ARCHITECTURE.md +1 -0
- package/docs/CAPABILITIES.md +3 -1
- package/docs/COMMANDS_EVENTS.md +5 -0
- package/docs/DOCUMENTATION_WORKFLOW.md +6 -8
- package/docs/INTEGRATION_PLAYBOOK.md +2 -0
- package/docs/PORTING_CHECKLIST.md +1 -0
- package/docs/STATE_INVARIANTS.md +4 -0
- package/package.json +20 -10
- package/src/displaybox/demos/AutoLayoutDemoTab.tsx +501 -0
- package/src/displaybox/demos/DeletionEventsDemoTab.tsx +147 -0
- package/src/displaybox/demos/EngineEventsDemoTab.tsx +151 -0
- package/src/displaybox/demos/EventHandlersDemoTab.tsx +110 -0
- package/src/displaybox/demos/ExternalDragDropDemoTab.tsx +261 -0
- package/src/displaybox/demos/LinkCancelDemoTab.tsx +238 -0
- package/src/displaybox/demos/ObstacleRoutingDemoTab.tsx +30 -0
- package/src/displaybox/demos/ShapeHoverControlsDemoTab.tsx +558 -0
- package/src/displaybox/demos/SimpleDemo.tsx +73 -0
- package/src/displaybox/demos/SvgPathDemoTab.tsx +327 -0
- package/src/displaybox/demos/TextLayoutDemoTab.tsx +386 -0
- package/src/displaybox/demos/autoLayoutDemo.ts +111 -0
- package/src/displaybox/demos/basicDemo.ts +131 -0
- package/src/displaybox/demos/childConstraintsDemo.ts +65 -0
- package/src/displaybox/demos/customDemo.ts +59 -0
- package/src/displaybox/demos/deletionEventsDemo.ts +91 -0
- package/src/displaybox/demos/engineEventsDemo.ts +64 -0
- package/src/displaybox/demos/eventHandlersDemo.ts +41 -0
- package/src/displaybox/demos/externalDragDropDemo.ts +28 -0
- package/src/displaybox/demos/gridOverlayDemo.ts +50 -0
- package/src/displaybox/demos/index.tsx +217 -0
- package/src/displaybox/demos/linkBendHandlesDemo.ts +143 -0
- package/src/displaybox/demos/linkCancelDemo.ts +56 -0
- package/src/displaybox/demos/linkPortCreationDemo.ts +46 -0
- package/src/displaybox/demos/multiLevelTreeDemo.ts +120 -0
- package/src/displaybox/demos/multipleElementsDemo.ts +62 -0
- package/src/displaybox/demos/nestedDemo.ts +78 -0
- package/src/displaybox/demos/obstacleRoutingDemo.ts +176 -0
- package/src/displaybox/demos/portBorderDemo.ts +98 -0
- package/src/displaybox/demos/portConstraintsDemo.ts +175 -0
- package/src/displaybox/demos/rotatedCreationDemo.ts +185 -0
- package/src/displaybox/demos/roundedRectRadiusDemo.ts +93 -0
- package/src/displaybox/demos/routingDemo.ts +57 -0
- package/src/displaybox/demos/selectionDemo.ts +49 -0
- package/src/displaybox/demos/shapeBorderMovementDemo.ts +126 -0
- package/src/displaybox/demos/shapeGalleryDemo.ts +73 -0
- package/src/displaybox/demos/shapeHoverControlsDemo.ts +172 -0
- package/src/displaybox/demos/shared.ts +161 -0
- package/src/displaybox/demos/svgPathDemo.ts +71 -0
- package/src/displaybox/demos/textDemo.ts +62 -0
- package/src/displaybox/types.ts +66 -0
- package/src/examples/index.ts +21 -0
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
|
|
3
|
+
type Point = {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
};
|
|
7
|
+
type Size = {
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
};
|
|
11
|
+
type Rect = {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
};
|
|
17
|
+
type ClientRectLike = {
|
|
18
|
+
left: number;
|
|
19
|
+
top: number;
|
|
20
|
+
};
|
|
21
|
+
type DiagramContainer = {
|
|
22
|
+
getBoundingClientRect: () => ClientRectLike;
|
|
23
|
+
};
|
|
24
|
+
type MoveConstraint = 'free' | 'inside' | 'border';
|
|
25
|
+
type BorderSide = 'left' | 'right' | 'top' | 'bottom';
|
|
26
|
+
type HostAnchorPreset = 'vertices' | 'cardinal';
|
|
27
|
+
type PortAnchor = {
|
|
28
|
+
id: string;
|
|
29
|
+
position: Point;
|
|
30
|
+
side?: BorderSide;
|
|
31
|
+
normal?: Point;
|
|
32
|
+
meta?: Record<string, unknown>;
|
|
33
|
+
};
|
|
34
|
+
type PortAnchorConstraint = {
|
|
35
|
+
preset: HostAnchorPreset;
|
|
36
|
+
fallback?: 'nearest';
|
|
37
|
+
};
|
|
38
|
+
type ResolvePortAnchorsOptions = {
|
|
39
|
+
preset: HostAnchorPreset;
|
|
40
|
+
};
|
|
41
|
+
type ShapeVertexTarget = {
|
|
42
|
+
id: string;
|
|
43
|
+
position: Point;
|
|
44
|
+
};
|
|
45
|
+
type ShapeEdgeTarget = {
|
|
46
|
+
id: string;
|
|
47
|
+
start: Point;
|
|
48
|
+
end: Point;
|
|
49
|
+
midpoint: Point;
|
|
50
|
+
};
|
|
51
|
+
declare enum EllipseMidPoint {
|
|
52
|
+
top = "top",
|
|
53
|
+
right = "right",
|
|
54
|
+
bottom = "bottom",
|
|
55
|
+
left = "left"
|
|
56
|
+
}
|
|
57
|
+
type ShapeEllipseMidPointTarget = {
|
|
58
|
+
id: EllipseMidPoint;
|
|
59
|
+
ellipseMidPoint: EllipseMidPoint;
|
|
60
|
+
position: Point;
|
|
61
|
+
};
|
|
62
|
+
type ShapeHoverGeometry = {
|
|
63
|
+
vertices: ShapeVertexTarget[];
|
|
64
|
+
edges: ShapeEdgeTarget[];
|
|
65
|
+
};
|
|
66
|
+
type HoverControlIcon = {
|
|
67
|
+
svgPath: string;
|
|
68
|
+
size?: Size;
|
|
69
|
+
style?: Record<string, unknown>;
|
|
70
|
+
};
|
|
71
|
+
type ShapeControlTargetKind = 'vertex' | 'edge' | 'midpoint' | 'ellipse-midpoint';
|
|
72
|
+
type ShapeControlVisibilityTrigger = 'element-hover' | 'target-hover';
|
|
73
|
+
type ShapeControlDefinition = {
|
|
74
|
+
id: string;
|
|
75
|
+
targetKind: ShapeControlTargetKind;
|
|
76
|
+
icon: HoverControlIcon;
|
|
77
|
+
targetIndices?: number[];
|
|
78
|
+
ellipseMidPoints?: EllipseMidPoint | EllipseMidPoint[];
|
|
79
|
+
allowAllTargets?: boolean;
|
|
80
|
+
visibilityTriggers?: ShapeControlVisibilityTrigger[];
|
|
81
|
+
lineStyle?: Record<string, unknown>;
|
|
82
|
+
tolerance?: number;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* @deprecated Use ShapeControlDefinition with targetKind='edge'.
|
|
86
|
+
*/
|
|
87
|
+
type EdgeHoverControl = {
|
|
88
|
+
kind: 'edge';
|
|
89
|
+
icon: HoverControlIcon;
|
|
90
|
+
lineStyle?: Record<string, unknown>;
|
|
91
|
+
tolerance?: number;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* @deprecated Use ShapeControlDefinition with targetKind='vertex'.
|
|
95
|
+
*/
|
|
96
|
+
type VertexHoverControl = {
|
|
97
|
+
kind: 'vertex';
|
|
98
|
+
icon: HoverControlIcon;
|
|
99
|
+
tolerance?: number;
|
|
100
|
+
};
|
|
101
|
+
type ElementShapeHoverControls = {
|
|
102
|
+
controls?: ShapeControlDefinition[];
|
|
103
|
+
/**
|
|
104
|
+
* @deprecated Legacy singleton edge control. Use controls[] instead.
|
|
105
|
+
*/
|
|
106
|
+
edge?: EdgeHoverControl;
|
|
107
|
+
/**
|
|
108
|
+
* @deprecated Legacy singleton vertex control. Use controls[] instead.
|
|
109
|
+
*/
|
|
110
|
+
vertex?: VertexHoverControl;
|
|
111
|
+
/**
|
|
112
|
+
* @deprecated Legacy resolution preference for singleton edge/vertex controls.
|
|
113
|
+
*/
|
|
114
|
+
priority?: 'vertex-first';
|
|
115
|
+
};
|
|
116
|
+
type ElementPortMovementPolicy = {
|
|
117
|
+
moveMode: MoveConstraint | 'anchors';
|
|
118
|
+
anchorConstraint?: PortAnchorConstraint;
|
|
119
|
+
};
|
|
120
|
+
type LinkRoutingMode = 'auto' | 'manual';
|
|
121
|
+
type AnchorReference = 'top-left' | 'center';
|
|
122
|
+
type RerouteLinksOptions = {
|
|
123
|
+
includeManual?: boolean;
|
|
124
|
+
};
|
|
125
|
+
type ElementLayoutMode = 'manual' | 'horizontal' | 'vertical';
|
|
126
|
+
type ElementLayoutAlign = 'start' | 'center' | 'end';
|
|
127
|
+
type ElementLayoutChildFitMainAxis = 'none' | 'distribute';
|
|
128
|
+
type ElementLayoutChildFitCrossAxis = 'none' | 'stretch';
|
|
129
|
+
type TextLayoutBoundsMode = 'owner-width' | 'owner-box' | 'fixed';
|
|
130
|
+
type TextLayoutWrapMode = 'none' | 'word' | 'char';
|
|
131
|
+
type TextLayoutOverflowMode = 'clip' | 'ellipsis-end' | 'ellipsis-middle' | 'ellipsis-start';
|
|
132
|
+
type ElementLayout = {
|
|
133
|
+
mode: ElementLayoutMode;
|
|
134
|
+
padding?: number | {
|
|
135
|
+
x: number;
|
|
136
|
+
y: number;
|
|
137
|
+
};
|
|
138
|
+
gap?: number;
|
|
139
|
+
align?: ElementLayoutAlign;
|
|
140
|
+
childFitMainAxis?: ElementLayoutChildFitMainAxis;
|
|
141
|
+
childFitCrossAxis?: ElementLayoutChildFitCrossAxis;
|
|
142
|
+
childFitMinSize?: Partial<Size>;
|
|
143
|
+
childFitMaxSize?: Partial<Size>;
|
|
144
|
+
};
|
|
145
|
+
type TextLayout = {
|
|
146
|
+
boundsMode?: TextLayoutBoundsMode;
|
|
147
|
+
wrap?: TextLayoutWrapMode;
|
|
148
|
+
overflow?: TextLayoutOverflowMode;
|
|
149
|
+
padding?: number;
|
|
150
|
+
maxLines?: number;
|
|
151
|
+
fixedSize?: Size;
|
|
152
|
+
};
|
|
153
|
+
type ElementDropEvent = {
|
|
154
|
+
elementId: string;
|
|
155
|
+
startWorld: Point;
|
|
156
|
+
endWorld: Point;
|
|
157
|
+
delta: Point;
|
|
158
|
+
startParentId?: string | null;
|
|
159
|
+
selectionIds: string[];
|
|
160
|
+
anchor: AnchorReference;
|
|
161
|
+
};
|
|
162
|
+
type OverlayShapeConfig = {
|
|
163
|
+
shapeId: string;
|
|
164
|
+
position: Point;
|
|
165
|
+
size: Size;
|
|
166
|
+
style?: Record<string, unknown>;
|
|
167
|
+
anchorCenter?: boolean;
|
|
168
|
+
};
|
|
169
|
+
type OverlayShapeHandle = {
|
|
170
|
+
update: (config: OverlayShapeConfig) => void;
|
|
171
|
+
destroy: () => void;
|
|
172
|
+
};
|
|
173
|
+
type ElementData = {
|
|
174
|
+
id: string;
|
|
175
|
+
position: Point;
|
|
176
|
+
size: Size;
|
|
177
|
+
shapeId: string;
|
|
178
|
+
style?: Record<string, unknown>;
|
|
179
|
+
portIds?: string[];
|
|
180
|
+
textIds?: string[];
|
|
181
|
+
parentId?: string | null;
|
|
182
|
+
moveMode?: MoveConstraint;
|
|
183
|
+
anchorCenter?: boolean;
|
|
184
|
+
layout?: ElementLayout;
|
|
185
|
+
portMovement?: ElementPortMovementPolicy;
|
|
186
|
+
};
|
|
187
|
+
type PortData = {
|
|
188
|
+
id: string;
|
|
189
|
+
elementId: string;
|
|
190
|
+
position: Point;
|
|
191
|
+
shapeId?: string;
|
|
192
|
+
size?: Size;
|
|
193
|
+
style?: Record<string, unknown>;
|
|
194
|
+
textIds?: string[];
|
|
195
|
+
moveMode?: MoveConstraint;
|
|
196
|
+
anchorCenter?: boolean;
|
|
197
|
+
orientToHostBorder?: boolean;
|
|
198
|
+
currentAnchorId?: string;
|
|
199
|
+
};
|
|
200
|
+
type ShapeDrawContext = {
|
|
201
|
+
ctx: CanvasRenderingContext2D;
|
|
202
|
+
model: ElementData | PortData;
|
|
203
|
+
};
|
|
204
|
+
type LinkData = {
|
|
205
|
+
id: string;
|
|
206
|
+
sourcePortId: string;
|
|
207
|
+
targetPortId: string;
|
|
208
|
+
points: Point[];
|
|
209
|
+
routing?: LinkRoutingMode;
|
|
210
|
+
style?: Record<string, unknown>;
|
|
211
|
+
textIds?: string[];
|
|
212
|
+
};
|
|
213
|
+
type TextData = {
|
|
214
|
+
id: string;
|
|
215
|
+
content: string;
|
|
216
|
+
position: Point;
|
|
217
|
+
size?: Size;
|
|
218
|
+
style?: Record<string, unknown>;
|
|
219
|
+
ownerId?: string | null;
|
|
220
|
+
layout?: TextLayout;
|
|
221
|
+
displayContent?: string;
|
|
222
|
+
displayOffset?: Point;
|
|
223
|
+
displayClipSize?: Size;
|
|
224
|
+
};
|
|
225
|
+
type DiagramState = {
|
|
226
|
+
elements: ElementData[];
|
|
227
|
+
ports: PortData[];
|
|
228
|
+
links: LinkData[];
|
|
229
|
+
texts: TextData[];
|
|
230
|
+
};
|
|
231
|
+
type DiagramPatch = {
|
|
232
|
+
type: string;
|
|
233
|
+
entity: 'element' | 'port' | 'link' | 'text' | 'selection' | 'viewport' | 'config';
|
|
234
|
+
id?: string;
|
|
235
|
+
payload?: Record<string, unknown>;
|
|
236
|
+
};
|
|
237
|
+
type EngineChangeEvent = {
|
|
238
|
+
patches: DiagramPatch[];
|
|
239
|
+
state: DiagramState;
|
|
240
|
+
};
|
|
241
|
+
type EngineSelectionEvent = {
|
|
242
|
+
selectedIds: string[];
|
|
243
|
+
};
|
|
244
|
+
type EngineConfigEvent = {
|
|
245
|
+
type: 'routing' | 'snapping' | 'rendering';
|
|
246
|
+
};
|
|
247
|
+
type EnginePointerInfo = {
|
|
248
|
+
client: Point;
|
|
249
|
+
world: Point;
|
|
250
|
+
button?: number;
|
|
251
|
+
buttons?: number;
|
|
252
|
+
altKey?: boolean;
|
|
253
|
+
ctrlKey?: boolean;
|
|
254
|
+
metaKey?: boolean;
|
|
255
|
+
shiftKey?: boolean;
|
|
256
|
+
pointerType?: string;
|
|
257
|
+
};
|
|
258
|
+
type PaperClickEvent = {
|
|
259
|
+
pointer: EnginePointerInfo;
|
|
260
|
+
};
|
|
261
|
+
type PortMouseEvent = {
|
|
262
|
+
portId: string;
|
|
263
|
+
elementId: string;
|
|
264
|
+
pointer: EnginePointerInfo;
|
|
265
|
+
};
|
|
266
|
+
type PortMovedEvent = {
|
|
267
|
+
portId: string;
|
|
268
|
+
elementId: string;
|
|
269
|
+
oldWorld: Point;
|
|
270
|
+
newWorld: Point;
|
|
271
|
+
delta: Point;
|
|
272
|
+
};
|
|
273
|
+
type PortSelectedEvent = {
|
|
274
|
+
portId: string;
|
|
275
|
+
elementId: string;
|
|
276
|
+
};
|
|
277
|
+
type ElementPointerEvent = {
|
|
278
|
+
elementId: string;
|
|
279
|
+
pointer: EnginePointerInfo;
|
|
280
|
+
isMulti: boolean;
|
|
281
|
+
};
|
|
282
|
+
type ElementMovedEvent = {
|
|
283
|
+
elementId: string;
|
|
284
|
+
oldWorld: Point;
|
|
285
|
+
newWorld: Point;
|
|
286
|
+
delta: Point;
|
|
287
|
+
};
|
|
288
|
+
type ElementResizedEvent = {
|
|
289
|
+
elementId: string;
|
|
290
|
+
oldSize: Size;
|
|
291
|
+
newSize: Size;
|
|
292
|
+
};
|
|
293
|
+
type ElementDeletedEvent = {
|
|
294
|
+
elementId: string;
|
|
295
|
+
};
|
|
296
|
+
type PortDeletedEvent = {
|
|
297
|
+
portId: string;
|
|
298
|
+
elementId: string;
|
|
299
|
+
};
|
|
300
|
+
type LinkDeletedEvent = {
|
|
301
|
+
linkId: string;
|
|
302
|
+
sourcePortId: string;
|
|
303
|
+
targetPortId: string;
|
|
304
|
+
};
|
|
305
|
+
type TextDeletedEvent = {
|
|
306
|
+
textId: string;
|
|
307
|
+
ownerId?: string | null;
|
|
308
|
+
};
|
|
309
|
+
type TextUpdatedEvent = {
|
|
310
|
+
textId: string;
|
|
311
|
+
ownerId?: string | null;
|
|
312
|
+
content: string;
|
|
313
|
+
displayContent: string;
|
|
314
|
+
reason: 'content' | 'layout';
|
|
315
|
+
};
|
|
316
|
+
type ElementLinkStartedEvent = {
|
|
317
|
+
sourcePortId: string;
|
|
318
|
+
sourceElementId: string;
|
|
319
|
+
startWorld: Point;
|
|
320
|
+
};
|
|
321
|
+
type ElementLinkConnectingEvent = {
|
|
322
|
+
sourcePortId: string;
|
|
323
|
+
sourceElementId: string;
|
|
324
|
+
targetPortId: string;
|
|
325
|
+
targetElementId: string;
|
|
326
|
+
cancel: () => void;
|
|
327
|
+
cancelled: boolean;
|
|
328
|
+
};
|
|
329
|
+
type ElementLinkEndedEvent = {
|
|
330
|
+
sourcePortId: string;
|
|
331
|
+
sourceElementId: string;
|
|
332
|
+
linkId?: string;
|
|
333
|
+
targetPortId?: string;
|
|
334
|
+
targetElementId?: string;
|
|
335
|
+
cancelled: boolean;
|
|
336
|
+
};
|
|
337
|
+
type ElementSelectedEvent = {
|
|
338
|
+
elementId: string;
|
|
339
|
+
};
|
|
340
|
+
type TextSelectedEvent = {
|
|
341
|
+
textId: string;
|
|
342
|
+
};
|
|
343
|
+
type EngineEventMap = {
|
|
344
|
+
change: EngineChangeEvent;
|
|
345
|
+
selection: EngineSelectionEvent;
|
|
346
|
+
config: EngineConfigEvent;
|
|
347
|
+
/**
|
|
348
|
+
* Deprecated (legacy kebab-case). Prefer `elementDrop`.
|
|
349
|
+
*/
|
|
350
|
+
'element-drop': ElementDropEvent;
|
|
351
|
+
elementDrop: ElementDropEvent;
|
|
352
|
+
paperClick: PaperClickEvent;
|
|
353
|
+
portMouseDown: PortMouseEvent;
|
|
354
|
+
portMouseUp: PortMouseEvent;
|
|
355
|
+
portMoved: PortMovedEvent;
|
|
356
|
+
portSelected: PortSelectedEvent;
|
|
357
|
+
elementClick: ElementPointerEvent;
|
|
358
|
+
elementDragged: ElementDropEvent;
|
|
359
|
+
elementMoved: ElementMovedEvent;
|
|
360
|
+
elementResized: ElementResizedEvent;
|
|
361
|
+
elementDeleted: ElementDeletedEvent;
|
|
362
|
+
portDeleted: PortDeletedEvent;
|
|
363
|
+
linkDeleted: LinkDeletedEvent;
|
|
364
|
+
textDeleted: TextDeletedEvent;
|
|
365
|
+
textUpdated: TextUpdatedEvent;
|
|
366
|
+
elementSelected: ElementSelectedEvent;
|
|
367
|
+
elementLinkStarted: ElementLinkStartedEvent;
|
|
368
|
+
elementLinkConnecting: ElementLinkConnectingEvent;
|
|
369
|
+
elementLinkEnded: ElementLinkEndedEvent;
|
|
370
|
+
textSelected: TextSelectedEvent;
|
|
371
|
+
};
|
|
372
|
+
type DiagramEngineHandle = {
|
|
373
|
+
load: (state: DiagramState) => void;
|
|
374
|
+
getState: () => DiagramState;
|
|
375
|
+
getViewport: () => {
|
|
376
|
+
pan: Point;
|
|
377
|
+
zoom: number;
|
|
378
|
+
};
|
|
379
|
+
/**
|
|
380
|
+
* Convert client/screen coordinates into diagram world coordinates.
|
|
381
|
+
* Formula: world = (client - containerRect - pan) / zoom.
|
|
382
|
+
*/
|
|
383
|
+
clientToWorld: (clientPoint: Point, container: DiagramContainer) => Point;
|
|
384
|
+
createOverlayShape: (config: OverlayShapeConfig) => OverlayShapeHandle;
|
|
385
|
+
on: <T extends keyof EngineEventMap>(event: T, handler: (payload: EngineEventMap[T]) => void) => () => void;
|
|
386
|
+
addElement: (element: ElementData) => void;
|
|
387
|
+
moveElementTo: (id: string, x: number, y: number) => void;
|
|
388
|
+
resizeElement: (id: string, width: number, height: number) => void;
|
|
389
|
+
setElementLayout: (id: string, layout: ElementLayout | undefined) => void;
|
|
390
|
+
removeElement: (id: string) => void;
|
|
391
|
+
addPortToElement: (elementId: string, port: PortData) => void;
|
|
392
|
+
movePortTo: (id: string, x: number, y: number) => void;
|
|
393
|
+
removePort: (id: string) => void;
|
|
394
|
+
addLink: (link: LinkData) => void;
|
|
395
|
+
updateLinkPoints: (id: string, points: Point[]) => void;
|
|
396
|
+
setLinkRoutingMode: (id: string, mode: LinkRoutingMode) => void;
|
|
397
|
+
rerouteAllLinks: () => void;
|
|
398
|
+
rerouteLinks: (linkIds: string[], options?: RerouteLinksOptions) => void;
|
|
399
|
+
removeLink: (id: string) => void;
|
|
400
|
+
addText: (text: TextData) => void;
|
|
401
|
+
updateText: (id: string, content: string) => void;
|
|
402
|
+
moveTextTo: (id: string, x: number, y: number) => void;
|
|
403
|
+
removeText: (id: string) => void;
|
|
404
|
+
setSelection: (ids: string[]) => void;
|
|
405
|
+
setViewport: (pan: Point, zoom: number) => void;
|
|
406
|
+
setRouting: (router: unknown) => void;
|
|
407
|
+
setSnapping: (snapper: unknown) => void;
|
|
408
|
+
registerShape: (shape: {
|
|
409
|
+
id: string;
|
|
410
|
+
baseRotation?: number;
|
|
411
|
+
draw?: (context: ShapeDrawContext) => void;
|
|
412
|
+
createNode?: (model: ElementData | PortData) => unknown;
|
|
413
|
+
svgPath?: string;
|
|
414
|
+
svgSize?: Size;
|
|
415
|
+
projectToBorder?: (point: Point, rect: Rect) => Point;
|
|
416
|
+
resolveBorderSide?: (point: Point, rect: Rect) => BorderSide;
|
|
417
|
+
resolvePortAnchors?: (rect: Rect, options: ResolvePortAnchorsOptions) => PortAnchor[];
|
|
418
|
+
resolveHoverGeometry?: (rect: Rect) => ShapeHoverGeometry | undefined;
|
|
419
|
+
resolveEllipseMidPoints?: (rect: Rect) => ShapeEllipseMidPointTarget[] | undefined;
|
|
420
|
+
}) => void;
|
|
421
|
+
render: () => void;
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
type RouteObstacle = {
|
|
425
|
+
id: string;
|
|
426
|
+
rect: Rect;
|
|
427
|
+
};
|
|
428
|
+
type RouteEndpoint = {
|
|
429
|
+
elementId?: string;
|
|
430
|
+
rect?: Rect;
|
|
431
|
+
onEdgeSide?: 'left' | 'right' | 'top' | 'bottom';
|
|
432
|
+
};
|
|
433
|
+
type RouteContext = {
|
|
434
|
+
linkId: string;
|
|
435
|
+
sourcePortId: string;
|
|
436
|
+
targetPortId: string;
|
|
437
|
+
obstacles: RouteObstacle[];
|
|
438
|
+
bounds?: Rect;
|
|
439
|
+
sourceEndpoint?: RouteEndpoint;
|
|
440
|
+
targetEndpoint?: RouteEndpoint;
|
|
441
|
+
};
|
|
442
|
+
interface RouterStrategy {
|
|
443
|
+
route(source: Point, target: Point, context?: RouteContext): Point[];
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
type BuiltInShapeKind = 'rect' | 'circle' | 'ellipse' | 'diamond' | 'triangle' | 'pentagon' | 'hexagon';
|
|
447
|
+
|
|
448
|
+
type SimpleShape = {
|
|
449
|
+
id: string;
|
|
450
|
+
kind: BuiltInShapeKind;
|
|
451
|
+
style?: Record<string, unknown>;
|
|
452
|
+
};
|
|
453
|
+
type DiagramEditorHandle = DiagramEngineHandle & {
|
|
454
|
+
resize: (width: number, height: number) => void;
|
|
455
|
+
setElementShapeHoverControls: (controls?: ElementShapeHoverControls) => void;
|
|
456
|
+
destroy: () => void;
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
type DemoActionHelpers = {
|
|
460
|
+
nextOffset: () => number;
|
|
461
|
+
};
|
|
462
|
+
type DemoAction = {
|
|
463
|
+
id: string;
|
|
464
|
+
label: string;
|
|
465
|
+
run: (editor: DiagramEditorHandle, state: DiagramState, demo: DemoConfig, helpers: DemoActionHelpers) => void;
|
|
466
|
+
};
|
|
467
|
+
type DemoConfig = {
|
|
468
|
+
id: string;
|
|
469
|
+
title: string;
|
|
470
|
+
description: string;
|
|
471
|
+
createState: () => DiagramState;
|
|
472
|
+
elementShapes?: SimpleShape[];
|
|
473
|
+
portShapes?: SimpleShape[];
|
|
474
|
+
defaultElementShapeId?: string;
|
|
475
|
+
defaultPortShapeId?: string;
|
|
476
|
+
router?: RouterStrategy;
|
|
477
|
+
snapDefault?: boolean;
|
|
478
|
+
stageStyle?: CSSProperties;
|
|
479
|
+
actions: DemoAction[];
|
|
480
|
+
};
|
|
481
|
+
type DemoDefinition = {
|
|
482
|
+
id: string;
|
|
483
|
+
title: string;
|
|
484
|
+
description: string;
|
|
485
|
+
Component: React.ComponentType;
|
|
486
|
+
};
|
|
487
|
+
type ToolboxItem = {
|
|
488
|
+
id: string;
|
|
489
|
+
label: string;
|
|
490
|
+
shapeId: string;
|
|
491
|
+
size: {
|
|
492
|
+
width: number;
|
|
493
|
+
height: number;
|
|
494
|
+
};
|
|
495
|
+
};
|
|
496
|
+
type DiagramCounts = {
|
|
497
|
+
elements: number;
|
|
498
|
+
ports: number;
|
|
499
|
+
links: number;
|
|
500
|
+
texts: number;
|
|
501
|
+
};
|
|
502
|
+
type ViewportSnapshot = {
|
|
503
|
+
pan: {
|
|
504
|
+
x: number;
|
|
505
|
+
y: number;
|
|
506
|
+
};
|
|
507
|
+
zoom: number;
|
|
508
|
+
};
|
|
509
|
+
type DisplayBoxMetrics = {
|
|
510
|
+
selection: string[];
|
|
511
|
+
counts: DiagramCounts;
|
|
512
|
+
viewport: ViewportSnapshot;
|
|
513
|
+
snapEnabled: boolean;
|
|
514
|
+
};
|
|
515
|
+
|
|
516
|
+
declare const baseElementShapes: SimpleShape[];
|
|
517
|
+
declare const basePortShapes: SimpleShape[];
|
|
518
|
+
declare const customGalleryShapes: SimpleShape[];
|
|
519
|
+
declare const externalToolboxItems: ToolboxItem[];
|
|
520
|
+
declare const defaultGhostSize: {
|
|
521
|
+
width: number;
|
|
522
|
+
height: number;
|
|
523
|
+
};
|
|
524
|
+
declare const defaultSvgPath = "M10 10 H110 V90 H10 Z";
|
|
525
|
+
declare const defaultSvgPathSize: {
|
|
526
|
+
width: number;
|
|
527
|
+
height: number;
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
declare const demoTabs: DemoDefinition[];
|
|
531
|
+
|
|
532
|
+
export { type DemoAction, type DemoActionHelpers, type DemoConfig, type DemoDefinition, type DiagramCounts, type DisplayBoxMetrics, type ToolboxItem, type ViewportSnapshot, baseElementShapes, basePortShapes, customGalleryShapes, defaultGhostSize, defaultSvgPath, defaultSvgPathSize, demoTabs, externalToolboxItems };
|