@weasel-js/diagram 1.10.1 → 1.11.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.
- package/README.md +467 -25
- package/dist/{layout.entry-BUkiRKuX.d.ts → body-2lC7IiIA.d.ts} +245 -264
- package/dist/chunk-C4NAI6NV.js +2041 -0
- package/dist/chunk-C4NAI6NV.js.map +1 -0
- package/dist/chunk-NUMMW5BI.js +2865 -0
- package/dist/chunk-NUMMW5BI.js.map +1 -0
- package/dist/effect.d.ts +417 -0
- package/dist/effect.js +1283 -0
- package/dist/effect.js.map +1 -0
- package/dist/fromData-GKqRgPFs.d.ts +379 -0
- package/dist/index.d.ts +181 -327
- package/dist/index.js +2 -1434
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +2 -1
- package/dist/layout.entry-BoWFcR4G.d.ts +285 -0
- package/dist/layout.js +1 -1
- package/package.json +10 -6
- package/dist/chunk-JZ4CVLAB.js +0 -1247
- package/dist/chunk-JZ4CVLAB.js.map +0 -1
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { DerivedDep, PoseDescriptor, NodeShapeEntry, MarkerRef, AddNodeSpec, Stroke, RectPose } from '@weasel-js/core';
|
|
2
|
+
import { P as PortAnchor, D as DiagramGroup, R as RowTextStyle, a as Row, O as Outline, b as PortSpec, B as BodySpec, L as LayoutPorts, c as LayoutFn, d as LayoutOptions, M as MeasureRowText, e as DiagramNode } from './body-2lC7IiIA.js';
|
|
3
|
+
import { Vec2 } from '@weasel-js/core/math';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The label trait: where along its edge a label sits. Data only — placing the
|
|
7
|
+
* label on the route is `label`'s job, so layout can read one without
|
|
8
|
+
* reaching the scene.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** Where along an edge a label sits. */
|
|
12
|
+
interface DiagramLabel {
|
|
13
|
+
/** `'start'`, `'mid'` and `'end'` are 0, 0.5 and 1; a number is that
|
|
14
|
+
* fraction of the route's length. `{ near }` is the point on the route
|
|
15
|
+
* nearest `near`, in world coordinates — where `layered` leaves a label
|
|
16
|
+
* room — so a bend added or removed elsewhere leaves the label on the
|
|
17
|
+
* stretch it was on. */
|
|
18
|
+
at: 'start' | 'mid' | 'end' | number | {
|
|
19
|
+
near: Vec2;
|
|
20
|
+
};
|
|
21
|
+
/** World units between the route and the label's near side, to the **left
|
|
22
|
+
* of the direction of travel** — above a left-to-right edge. Default 0,
|
|
23
|
+
* which centers the label on the line. */
|
|
24
|
+
offset?: number;
|
|
25
|
+
}
|
|
26
|
+
/** The label trait on a node's data, or `null`. */
|
|
27
|
+
declare function diagramLabelOf(node: {
|
|
28
|
+
data: unknown;
|
|
29
|
+
}): DiagramLabel | null;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The edge trait: what an edge's `data` says about its ends and its route, and
|
|
33
|
+
* who owns each. Data only — the routers and the scene wiring are in `edge`,
|
|
34
|
+
* so layout can read an edge without reaching the scene.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/** Where an edge attaches at one end. */
|
|
38
|
+
interface EdgeEnd {
|
|
39
|
+
/** The port to leave from, when the endpoint declares one. Falls back to
|
|
40
|
+
* the nearest port, so an edge drawn before ports were thought about still
|
|
41
|
+
* meets the shape. */
|
|
42
|
+
port?: string;
|
|
43
|
+
/** The port layout last named here. While `port` still equals it, or names
|
|
44
|
+
* none, layout owns the end and names it again on its next run. */
|
|
45
|
+
laidOut?: string;
|
|
46
|
+
}
|
|
47
|
+
/** Whether layout may name this end's port: it names none, or only the one
|
|
48
|
+
* layout last named. */
|
|
49
|
+
declare function layoutOwnsPort(end: EdgeEnd): boolean;
|
|
50
|
+
/** The trait on an edge's `data`, under the same key participants use. */
|
|
51
|
+
interface DiagramEdge {
|
|
52
|
+
from: EdgeEnd;
|
|
53
|
+
to: EdgeEnd;
|
|
54
|
+
/** Registry key for the router. Resolved by whoever builds the edge's
|
|
55
|
+
* `derivePath`; unknown keys fall back to `straight`. */
|
|
56
|
+
router?: string;
|
|
57
|
+
/** Points in world coordinates the route must pass through, in order. The
|
|
58
|
+
* author owns these; the router owns everything between them. */
|
|
59
|
+
waypoints?: readonly Vec2[];
|
|
60
|
+
/** The waypoints layout last wrote here. While `waypoints` still equals
|
|
61
|
+
* them, layout owns the route and rewrites it on its next run; once anyone
|
|
62
|
+
* edits them, they are the author's and layout leaves them alone. */
|
|
63
|
+
laidOut?: readonly Vec2[];
|
|
64
|
+
}
|
|
65
|
+
/** Whether layout may rewrite this edge's route: it has no waypoints, or only
|
|
66
|
+
* the ones layout last wrote. */
|
|
67
|
+
declare function layoutOwnsRoute(edge: DiagramEdge): boolean;
|
|
68
|
+
/** The edge trait on a node's data, or `null`. */
|
|
69
|
+
declare function diagramEdgeOf(node: {
|
|
70
|
+
data: unknown;
|
|
71
|
+
}): DiagramEdge | null;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* A group's box, and anything pinned to a point on another node.
|
|
75
|
+
*
|
|
76
|
+
* The box is an ordinary node that depends on its members and derives its pose
|
|
77
|
+
* from theirs: their union, grown by the inset. Drag a member and the box
|
|
78
|
+
* follows; lay the diagram out and the box lands around wherever the members
|
|
79
|
+
* went. Nothing has to keep it in sync, because nothing stores it.
|
|
80
|
+
*
|
|
81
|
+
* An anchored node — a group's title is the first — derives its pose from one
|
|
82
|
+
* dependency's bounds the same way, so it travels with the box it labels.
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
/** Where an anchored node sits on its dependency. */
|
|
86
|
+
interface DiagramAnchor {
|
|
87
|
+
/** The point on the dependency's bounds, normalized as a port's is. */
|
|
88
|
+
at: PortAnchor;
|
|
89
|
+
/** The point on the node's own bounds that lands there. Default `at`, so
|
|
90
|
+
* `{ u: 0, v: 0 }` puts the node's top-left on the dependency's. */
|
|
91
|
+
self?: PortAnchor;
|
|
92
|
+
/** Then moved by this much, in world units. */
|
|
93
|
+
offset?: Vec2;
|
|
94
|
+
}
|
|
95
|
+
/** The group trait on a node's data, or `null`. */
|
|
96
|
+
declare function diagramGroupOf(node: {
|
|
97
|
+
data: unknown;
|
|
98
|
+
}): DiagramGroup | null;
|
|
99
|
+
/** The anchor trait on a node's data, or `null`. */
|
|
100
|
+
declare function diagramAnchorOf(node: {
|
|
101
|
+
data: unknown;
|
|
102
|
+
}): DiagramAnchor | null;
|
|
103
|
+
/** Options for {@link groupDerivePose} and {@link anchorDerivePose}.
|
|
104
|
+
* `geometry` defaults to the kit's `AUTO_POSE_DESCRIPTOR`. */
|
|
105
|
+
interface GroupPoseOptions<TPose> {
|
|
106
|
+
geometry?: PoseDescriptor<TPose>;
|
|
107
|
+
}
|
|
108
|
+
/** A `derivePose` function as the scene calls it: the node, then what it depends on, in `dependsOn` order. */
|
|
109
|
+
type DiagramDerivePose<TPose> = (node: {
|
|
110
|
+
pose: TPose;
|
|
111
|
+
data: unknown;
|
|
112
|
+
}, deps: readonly (DerivedDep<TPose> | undefined)[]) => TPose | null;
|
|
113
|
+
/**
|
|
114
|
+
* A `derivePose` that draws a group's box around its members: the union of
|
|
115
|
+
* what each takes up, its `margin` included, grown by the trait's inset. `null` — the authored pose stands — when the node
|
|
116
|
+
* carries no group trait or every member is gone.
|
|
117
|
+
*/
|
|
118
|
+
declare function groupDerivePose<TPose>(opts?: GroupPoseOptions<TPose>): DiagramDerivePose<TPose>;
|
|
119
|
+
/** A group's box around the union of its members: grown by its inset, and
|
|
120
|
+
* widened evenly to its `minWidth`. */
|
|
121
|
+
declare function boxAround(union: {
|
|
122
|
+
x: number;
|
|
123
|
+
y: number;
|
|
124
|
+
width: number;
|
|
125
|
+
height: number;
|
|
126
|
+
}, group: DiagramGroup): {
|
|
127
|
+
x: number;
|
|
128
|
+
y: number;
|
|
129
|
+
width: number;
|
|
130
|
+
height: number;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* A `derivePose` that keeps a node at a point on its dependency's bounds.
|
|
134
|
+
* `null` when the node carries no anchor trait or the dependency is gone.
|
|
135
|
+
*/
|
|
136
|
+
declare function anchorDerivePose<TPose>(opts?: GroupPoseOptions<TPose>): DiagramDerivePose<TPose>;
|
|
137
|
+
/** Registry key for {@link GROUP_DERIVE_POSE}. */
|
|
138
|
+
declare const DIAGRAM_GROUP = "diagram:group";
|
|
139
|
+
/** Registry key for {@link ANCHOR_DERIVE_POSE}. */
|
|
140
|
+
declare const DIAGRAM_ANCHOR = "diagram:anchor";
|
|
141
|
+
/** The default group derivation, a stable reference so `toJSON` can find its key. */
|
|
142
|
+
declare const GROUP_DERIVE_POSE: DiagramDerivePose<unknown>;
|
|
143
|
+
/** The default anchor derivation, a stable reference for the same reason. */
|
|
144
|
+
declare const ANCHOR_DERIVE_POSE: DiagramDerivePose<unknown>;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Marks: what a data node draws besides its rows. A drawn mark is SVG path
|
|
148
|
+
* data in a unit square, stretched over the node's box, so it follows the node
|
|
149
|
+
* wherever layout or a drag puts it. A text mark is pinned to a point on the box.
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
/** One mark on a `DataNode`. Colors default to the node's stroke and text. */
|
|
153
|
+
type DataMark = {
|
|
154
|
+
d: string;
|
|
155
|
+
fill?: string;
|
|
156
|
+
stroke?: string;
|
|
157
|
+
strokeWidth?: number;
|
|
158
|
+
dash?: number[];
|
|
159
|
+
opacity?: number;
|
|
160
|
+
} | {
|
|
161
|
+
text: string;
|
|
162
|
+
at: PortAnchor;
|
|
163
|
+
self?: PortAnchor;
|
|
164
|
+
offset?: Vec2;
|
|
165
|
+
color?: string;
|
|
166
|
+
style?: RowTextStyle;
|
|
167
|
+
};
|
|
168
|
+
/** The trait on a drawn mark's `data`: path data in a unit square. */
|
|
169
|
+
interface DiagramMark {
|
|
170
|
+
d: string;
|
|
171
|
+
}
|
|
172
|
+
/** The mark a scene node carries, or null for a node that is not a drawn
|
|
173
|
+
* mark: how `markShape` tells which nodes it paints. */
|
|
174
|
+
declare function diagramMarkOf(node: {
|
|
175
|
+
data: unknown;
|
|
176
|
+
}): DiagramMark | null;
|
|
177
|
+
/** The painter for a drawn mark. */
|
|
178
|
+
declare function markShape<TPose>(opts?: {
|
|
179
|
+
geometry?: PoseDescriptor<TPose>;
|
|
180
|
+
}): NodeShapeEntry<unknown, TPose>;
|
|
181
|
+
/** Register {@link markShape}; returns the disposer. */
|
|
182
|
+
declare function registerMarkShape<TPose>(opts?: {
|
|
183
|
+
geometry?: PoseDescriptor<TPose>;
|
|
184
|
+
}): () => void;
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* `diagramScene` — a laid-out diagram from plain `{ nodes, edges }`.
|
|
188
|
+
*
|
|
189
|
+
* Every box is a `buildBody` body, so a data node can say anything a body
|
|
190
|
+
* can: outline, rows, padding, ports. Sizes are estimated from character
|
|
191
|
+
* counts unless `measure` is given, so layout runs without a canvas and gives
|
|
192
|
+
* the same answer in node and in a browser.
|
|
193
|
+
*/
|
|
194
|
+
|
|
195
|
+
/** One node of a {@link DiagramData}: its rows of text, and optionally its outline, ports, size, and starting place. */
|
|
196
|
+
interface DataNode {
|
|
197
|
+
id: string;
|
|
198
|
+
/** Shorthand for one `label` row per line. Ignored when `rows` is given. */
|
|
199
|
+
lines?: readonly string[];
|
|
200
|
+
rows?: readonly Row[];
|
|
201
|
+
/** Default `DiagramSceneOptions.outline`, which defaults to `'rect'`. */
|
|
202
|
+
outline?: Outline;
|
|
203
|
+
/** Perimeter ports, replacing the four compass midpoints. */
|
|
204
|
+
ports?: readonly PortSpec[];
|
|
205
|
+
/** Labels for the perimeter ports by id, drawn outside the box beside each. */
|
|
206
|
+
portLabels?: Readonly<Record<string, string>>;
|
|
207
|
+
/** Layout leaves this node at `at`. */
|
|
208
|
+
pinned?: boolean;
|
|
209
|
+
/** Where the node starts, before layout. Unset, nodes start on the
|
|
210
|
+
* diagonal in source order, which is what within-rank order is seeded
|
|
211
|
+
* from. */
|
|
212
|
+
at?: Vec2;
|
|
213
|
+
/** The smallest the box may be. Its content grows it past this. */
|
|
214
|
+
width?: number;
|
|
215
|
+
height?: number;
|
|
216
|
+
/** Default `DiagramSceneOptions.padding`. */
|
|
217
|
+
padding?: number;
|
|
218
|
+
/** Default `DiagramSceneOptions.gap`. */
|
|
219
|
+
gap?: number;
|
|
220
|
+
/** Default `DiagramSceneOptions.verticalAlign`. */
|
|
221
|
+
verticalAlign?: BodySpec['verticalAlign'];
|
|
222
|
+
/** Drawn over the box besides its rows: shapes in a unit square stretched
|
|
223
|
+
* over it, and text pinned to a point on it. */
|
|
224
|
+
marks?: readonly DataMark[];
|
|
225
|
+
}
|
|
226
|
+
/** One edge of a {@link DiagramData}, between two nodes or groups by id. */
|
|
227
|
+
interface DataEdge {
|
|
228
|
+
/** A node's id, or a group's: an edge naming a group meets its box. */
|
|
229
|
+
from: string;
|
|
230
|
+
to: string;
|
|
231
|
+
/** The port to leave from or arrive at. Unset, the end facing the other
|
|
232
|
+
* node most directly. */
|
|
233
|
+
fromPort?: string;
|
|
234
|
+
toPort?: string;
|
|
235
|
+
label?: string;
|
|
236
|
+
/** Where along the edge the label sits. Unset or at `'mid'`, under
|
|
237
|
+
* `layered` the label sits in the room layout leaves it beside its wire,
|
|
238
|
+
* at this placement's offset, else `DiagramSceneOptions.labelPlacement`'s;
|
|
239
|
+
* otherwise at the placement. */
|
|
240
|
+
labelPlacement?: DiagramLabel;
|
|
241
|
+
/** Default `DiagramSceneOptions.router`. */
|
|
242
|
+
router?: DiagramRouter;
|
|
243
|
+
/** World points the route passes through. Layout does not move them. */
|
|
244
|
+
waypoints?: readonly Vec2[];
|
|
245
|
+
/** A route a layout run wrote, as `DiagramView`'s `onMove` reports it: drawn
|
|
246
|
+
* until layout runs again, which may replace it. `waypoints` wins. */
|
|
247
|
+
routed?: readonly Vec2[];
|
|
248
|
+
/** Ports a layout run named, as `onMove` reports them: used like `routed`,
|
|
249
|
+
* and not part of the edge's id. `fromPort` and `toPort` win. */
|
|
250
|
+
routedPorts?: LayoutPorts;
|
|
251
|
+
}
|
|
252
|
+
/** A box drawn around some nodes, which layout keeps together. */
|
|
253
|
+
interface DataGroup {
|
|
254
|
+
/** Shares one namespace with node ids. */
|
|
255
|
+
id: string;
|
|
256
|
+
/** Node ids, and the ids of groups nested in this one. A node or group a
|
|
257
|
+
* later group also names stays in this one; an id that is neither is
|
|
258
|
+
* ignored, and so is one that would put a group inside itself. */
|
|
259
|
+
members: readonly string[];
|
|
260
|
+
/** Drawn inside the box, above its members. */
|
|
261
|
+
label?: string;
|
|
262
|
+
/** Between the box and its members, and around the label. Default
|
|
263
|
+
* `DiagramSceneOptions.groupPadding`. */
|
|
264
|
+
padding?: number;
|
|
265
|
+
}
|
|
266
|
+
/** A diagram as plain data, the input to `diagramScene`. */
|
|
267
|
+
interface DiagramData {
|
|
268
|
+
nodes: readonly DataNode[];
|
|
269
|
+
edges: readonly DataEdge[];
|
|
270
|
+
/** A group may be a member of another. `layered`, `tree`, and `force` keep
|
|
271
|
+
* each group's members together; `chain` and `'none'` ignore groups but
|
|
272
|
+
* still draw them. */
|
|
273
|
+
groups?: readonly DataGroup[];
|
|
274
|
+
}
|
|
275
|
+
/** The colors and outline a node is drawn with. */
|
|
276
|
+
interface NodeStyle {
|
|
277
|
+
fill: string;
|
|
278
|
+
stroke: string;
|
|
279
|
+
text: string;
|
|
280
|
+
strokeWidth?: number;
|
|
281
|
+
dash?: number[];
|
|
282
|
+
}
|
|
283
|
+
/** The stroke, markers, and label color an edge is drawn with. */
|
|
284
|
+
interface EdgeStyle {
|
|
285
|
+
stroke: string;
|
|
286
|
+
width?: number;
|
|
287
|
+
dash?: number[];
|
|
288
|
+
/** `null` for none. Default none. */
|
|
289
|
+
markerStart?: MarkerRef | null;
|
|
290
|
+
/** `null` for none. Default `'arrow'`. */
|
|
291
|
+
markerEnd?: MarkerRef | null;
|
|
292
|
+
/** Default `stroke`. */
|
|
293
|
+
label?: string;
|
|
294
|
+
}
|
|
295
|
+
/** How an edge is drawn between its ends. */
|
|
296
|
+
type DiagramRouter = 'straight' | 'bezier' | 'orthogonal';
|
|
297
|
+
/** The face a diagram node's text is set in. */
|
|
298
|
+
type DiagramTextStyle = {
|
|
299
|
+
fontFamily: string;
|
|
300
|
+
fontSize: number;
|
|
301
|
+
fontWeight?: number;
|
|
302
|
+
};
|
|
303
|
+
/** The `data` of a scene node `diagramScene` makes: its diagram role, and what it paints. */
|
|
304
|
+
interface DiagramSceneData {
|
|
305
|
+
diagram?: DiagramNode | DiagramEdge | {
|
|
306
|
+
label: DiagramLabel;
|
|
307
|
+
} | {
|
|
308
|
+
anchor: DiagramAnchor;
|
|
309
|
+
} | {
|
|
310
|
+
mark: DiagramMark;
|
|
311
|
+
};
|
|
312
|
+
fill?: {
|
|
313
|
+
paint: {
|
|
314
|
+
color: string;
|
|
315
|
+
opacity?: number;
|
|
316
|
+
};
|
|
317
|
+
};
|
|
318
|
+
stroke?: Stroke;
|
|
319
|
+
text?: string;
|
|
320
|
+
style?: DiagramTextStyle;
|
|
321
|
+
/** What a slot is filled with: an image the kit's image painter draws. */
|
|
322
|
+
image?: {
|
|
323
|
+
src: string;
|
|
324
|
+
opacity?: number;
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
/** A scene node spec, as `diagramScene` returns them. */
|
|
328
|
+
type DiagramSpec = AddNodeSpec<DiagramSceneData, 'main', RectPose>;
|
|
329
|
+
/** How `diagramScene` lays out, routes, and styles a {@link DiagramData}. */
|
|
330
|
+
interface DiagramSceneOptions {
|
|
331
|
+
/** A layout by name, or any `LayoutFn`. Default `'layered'`. `'none'`
|
|
332
|
+
* leaves every node at its `at`. */
|
|
333
|
+
layout?: 'layered' | 'tree' | 'force' | 'chain' | 'none' | LayoutFn;
|
|
334
|
+
/** Merged over `{ order: 'barycenter' }`. */
|
|
335
|
+
layoutOptions?: LayoutOptions;
|
|
336
|
+
/** Default `'bezier'`. */
|
|
337
|
+
router?: DiagramRouter;
|
|
338
|
+
/** The text style rows fall back on. Default 12px sans-serif. */
|
|
339
|
+
font?: {
|
|
340
|
+
fontFamily: string;
|
|
341
|
+
fontSize: number;
|
|
342
|
+
};
|
|
343
|
+
/** Measures one run of text. Default an estimate from character count, so
|
|
344
|
+
* layout needs no canvas; pass `canvasMeasure(ctx)` for real widths. */
|
|
345
|
+
measure?: MeasureRowText;
|
|
346
|
+
/** Default `'rect'`. */
|
|
347
|
+
outline?: Outline;
|
|
348
|
+
/** Between a box's outline and its rows. Default 8. */
|
|
349
|
+
padding?: number;
|
|
350
|
+
/** Between adjacent rows. Default 4. */
|
|
351
|
+
gap?: number;
|
|
352
|
+
/** Where a box's rows sit when it is taller than they need. Default `'center'`. */
|
|
353
|
+
verticalAlign?: BodySpec['verticalAlign'];
|
|
354
|
+
/** The narrowest a box may be. Default 64. */
|
|
355
|
+
minWidth?: number;
|
|
356
|
+
/** Where edge labels sit. Default `{ at: 'mid', offset: 9 }`. */
|
|
357
|
+
labelPlacement?: DiagramLabel;
|
|
358
|
+
nodeStyle?: (node: DataNode) => NodeStyle;
|
|
359
|
+
/** Default 12. */
|
|
360
|
+
groupPadding?: number;
|
|
361
|
+
/** A group's box and label. `text` colors the label. */
|
|
362
|
+
groupStyle?: (group: DataGroup) => NodeStyle;
|
|
363
|
+
edgeStyle?: (edge: DataEdge) => EdgeStyle;
|
|
364
|
+
}
|
|
365
|
+
/** The scene node id `diagramScene` gives an edge, built from its ends, ports,
|
|
366
|
+
* and label. Two edges differing in any of those get different ids, an empty
|
|
367
|
+
* port or label included: a `.`, `>`, `:`, `/` or `\` in one of them is
|
|
368
|
+
* escaped with a backslash. */
|
|
369
|
+
declare const edgeIdOf: (e: DataEdge) => string;
|
|
370
|
+
/** Every spec carries an id — a node's own, `<id>/<k>` for its text,
|
|
371
|
+
* `<id>/mark:<i>` for its marks, `<edge id>/label`, a group's own and
|
|
372
|
+
* `<group id>/label` — so a later call's
|
|
373
|
+
* specs can be reconciled against this one's. Throws on a repeated id among
|
|
374
|
+
* nodes and groups, which names two things as one. An edge whose
|
|
375
|
+
* end is not a node is dropped, and so is a repeat of an earlier edge with
|
|
376
|
+
* the same ends, ports and label: it would draw exactly on top of the first. */
|
|
377
|
+
declare function diagramScene(data: DiagramData, opts?: DiagramSceneOptions): DiagramSpec[];
|
|
378
|
+
|
|
379
|
+
export { ANCHOR_DERIVE_POSE as A, edgeIdOf as B, groupDerivePose as C, type DiagramData as D, type EdgeStyle as E, layoutOwnsPort as F, GROUP_DERIVE_POSE as G, layoutOwnsRoute as H, markShape as I, registerMarkShape as J, type NodeStyle as N, type DiagramSceneOptions as a, type DataEdge as b, type DataNode as c, type DiagramRouter as d, type DiagramSpec as e, type EdgeEnd as f, DIAGRAM_ANCHOR as g, DIAGRAM_GROUP as h, type DataGroup as i, type DataMark as j, type DiagramAnchor as k, type DiagramDerivePose as l, type DiagramEdge as m, type DiagramLabel as n, type DiagramMark as o, type DiagramSceneData as p, type DiagramTextStyle as q, type GroupPoseOptions as r, anchorDerivePose as s, boxAround as t, diagramAnchorOf as u, diagramEdgeOf as v, diagramGroupOf as w, diagramLabelOf as x, diagramMarkOf as y, diagramScene as z };
|