@statelyai/layout 0.2.0 → 0.4.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/NOTICE.md +4 -2
- package/README.md +221 -13
- package/dist/elkjs/index.cjs +3 -2
- package/dist/elkjs/index.d.cts +13 -2
- package/dist/elkjs/index.d.mts +13 -2
- package/dist/elkjs/index.mjs +3 -3
- package/dist/elkjs/main.cjs +2 -2
- package/dist/elkjs/main.d.cts +2 -2
- package/dist/elkjs/main.d.mts +2 -2
- package/dist/elkjs/main.mjs +2 -2
- package/dist/elkjs/worker-api.cjs +1 -1
- package/dist/elkjs/worker-api.d.cts +2 -2
- package/dist/elkjs/worker-api.d.mts +2 -2
- package/dist/elkjs/worker-api.mjs +1 -1
- package/dist/elkjs/worker.cjs +2 -2
- package/dist/elkjs/worker.mjs +2 -2
- package/dist/elkjs-UciYx7lD.mjs +2973 -0
- package/dist/elkjs-ggjsBuVP.cjs +3002 -0
- package/dist/index-B6cWNrMw.d.cts +80 -0
- package/dist/index-CJQLUKD9.d.mts +80 -0
- package/dist/{index-BSH2bloA.d.mts → index-DT6lPMfS.d.cts} +117 -5
- package/dist/{index-CG712jzV.d.cts → index-F1U-fCTu.d.mts} +117 -5
- package/dist/index.cjs +39 -9
- package/dist/index.d.cts +4 -3
- package/dist/index.d.mts +4 -3
- package/dist/index.mjs +4 -3
- package/dist/layered/index.cjs +3 -1
- package/dist/layered/index.d.cts +3 -2
- package/dist/layered/index.d.mts +3 -2
- package/dist/layered/index.mjs +2 -2
- package/dist/{layered-Bz2nWmVp.mjs → layered-C7ERzZjR.mjs} +12592 -4682
- package/dist/{layered-Cf9Rn8l7.cjs → layered-CBPg6_6_.cjs} +12711 -4717
- package/dist/{layout-engine-BNex9jxg.cjs → layout-engine-DAw06RhN.cjs} +5 -18
- package/dist/{layout-engine-WbC0YjjT.mjs → layout-engine-DC3IYkIy.mjs} +3 -10
- package/dist/routing/index.cjs +29 -0
- package/dist/routing/index.d.cts +3 -0
- package/dist/routing/index.d.mts +3 -0
- package/dist/routing/index.mjs +3 -0
- package/dist/routing-CR8flv8b.mjs +2780 -0
- package/dist/routing-QIdGGFBe.cjs +2996 -0
- package/dist/types-CT2akdK0.d.mts +133 -0
- package/dist/types-uxPlGRof.d.cts +133 -0
- package/dist/{worker-client-DAT_z2OR.d.mts → worker-client-BwGGRD5y.d.mts} +1 -1
- package/dist/{worker-client-DVhklF6A.d.cts → worker-client-D4zNyPEI.d.cts} +1 -1
- package/package.json +14 -3
- package/src/authoring/coordinates.ts +38 -10
- package/src/authoring/partial.ts +7 -2
- package/src/authoring/routing.ts +4 -1
- package/src/constraints.ts +174 -6
- package/src/elkjs/index.ts +1397 -452
- package/src/elkjs/layout-quality.ts +219 -0
- package/src/elkjs/opposing-tracks.ts +161 -0
- package/src/elkjs/orthogonal-junctions.ts +174 -0
- package/src/elkjs/routes.ts +147 -0
- package/src/elkjs/statechart.ts +9 -3
- package/src/elkjs/types.ts +2 -0
- package/src/index.ts +8 -0
- package/src/internal/elkjs-compatibility.ts +4 -1
- package/src/internal/layered-trace.ts +48 -0
- package/src/internal/layout-engine.ts +2 -1
- package/src/java-random.ts +6 -0
- package/src/layered/bk-node-placement.ts +403 -92
- package/src/layered/center-labels.ts +398 -0
- package/src/layered/compaction-bounds.ts +26 -0
- package/src/layered/compaction-errors.ts +2 -0
- package/src/layered/compaction-scanline.ts +63 -0
- package/src/layered/compound-boundaries.ts +99 -0
- package/src/layered/compound.ts +445 -0
- package/src/layered/constraint-orientation.ts +141 -0
- package/src/layered/crossing-constraints.ts +243 -0
- package/src/layered/crossing-counter.ts +221 -0
- package/src/layered/crossing-graph.ts +401 -0
- package/src/layered/cycle-random.ts +22 -0
- package/src/layered/elk-port-lists.ts +243 -0
- package/src/layered/end-labels.ts +124 -0
- package/src/layered/external-port-dummy.ts +137 -0
- package/src/layered/feedback-chains.ts +114 -0
- package/src/layered/fixed-self-loop.ts +150 -0
- package/src/layered/greedy-switch-decider.ts +356 -0
- package/src/layered/grouped-compaction.ts +787 -0
- package/src/layered/gwt-sort.ts +53 -0
- package/src/layered/hierarchical-port-phases.ts +242 -0
- package/src/layered/hierarchical-port-restoration.ts +233 -0
- package/src/layered/hierarchical-port-routing.ts +179 -0
- package/src/layered/hierarchy-crossing.ts +121 -0
- package/src/layered/hierarchy-sweepiness.ts +83 -0
- package/src/layered/hints.ts +371 -0
- package/src/layered/hyperedge-dummy-merger.ts +195 -0
- package/src/layered/index.ts +911 -261
- package/src/layered/initial-model-order.ts +404 -0
- package/src/layered/inverted-ports.ts +207 -0
- package/src/layered/label-dummy-switcher.ts +200 -0
- package/src/layered/long-edges.ts +135 -44
- package/src/layered/loop-envelopes.ts +184 -0
- package/src/layered/native-routing.ts +275 -0
- package/src/layered/network-simplex.ts +11 -15
- package/src/layered/node-margins.ts +59 -0
- package/src/layered/north-south-ports.ts +271 -0
- package/src/layered/opposing-tracks.ts +944 -0
- package/src/layered/orthogonal-cycle-order.ts +106 -0
- package/src/layered/orthogonal-hypersegments.ts +92 -0
- package/src/layered/orthogonal-junctions.ts +202 -0
- package/src/layered/orthogonal-segments.ts +243 -0
- package/src/layered/placement-orientation.ts +22 -0
- package/src/layered/port-distributor.ts +192 -0
- package/src/layered/port-edge-order.ts +20 -0
- package/src/layered/replace-routing.ts +45 -0
- package/src/layered/routing-coordinates.ts +32 -0
- package/src/layered/separate-exterior-labels.ts +24 -6
- package/src/layered/spacing.ts +34 -12
- package/src/layered/splitter-order.ts +106 -0
- package/src/layered/strategies.ts +2024 -883
- package/src/layered/types.ts +34 -0
- package/src/layered/weighted-compaction.ts +84 -0
- package/src/routing/adapters.ts +143 -0
- package/src/routing/algorithms.ts +1088 -0
- package/src/routing/coordination.ts +91 -0
- package/src/routing/engine.ts +473 -0
- package/src/routing/index.ts +69 -0
- package/src/routing/layout-cache.ts +65 -0
- package/src/routing/model.ts +218 -0
- package/src/routing/path.ts +324 -0
- package/src/routing/persistent.ts +117 -0
- package/src/routing/search.ts +358 -0
- package/src/routing/spatial.ts +78 -0
- package/src/routing/types.ts +146 -0
- package/dist/elkjs-BVnDwnBQ.cjs +0 -1551
- package/dist/elkjs-CFlfkEBz.mjs +0 -1528
- /package/dist/{public-types-B8rAALJq.d.mts → public-types-9NCPoqbp.d.mts} +0 -0
- /package/dist/{public-types-CVB0hXGk.d.cts → public-types-BcRZoJE3.d.cts} +0 -0
- /package/dist/{worker-client-DkwS4sHx.mjs → worker-client-BNjwT1AJ.mjs} +0 -0
- /package/dist/{worker-client-D3HMK33r.cjs → worker-client-D4oEvhAl.cjs} +0 -0
package/NOTICE.md
CHANGED
|
@@ -7,8 +7,10 @@ The project intends to implement algorithms available in the Eclipse Layout
|
|
|
7
7
|
Kernel. Eclipse Layout Kernel is maintained by the ELK contributors and is a
|
|
8
8
|
trademark of the Eclipse Foundation. See https://github.com/eclipse-elk/elk.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Some native TypeScript phases are translated or derived from Eclipse Layout
|
|
11
|
+
Kernel v0.11.0 implementation sources. Those files retain upstream copyright
|
|
12
|
+
notices and EPL-2.0 identifiers. The native runtime does not depend on elkjs;
|
|
13
|
+
elkjs is used as a development oracle for differential testing.
|
|
12
14
|
|
|
13
15
|
The demo includes example models derived from the Eclipse ELK Models repository
|
|
14
16
|
at revision ac5af2ba511c0037e4f347e8bd91f013950951c7:
|
package/README.md
CHANGED
|
@@ -4,21 +4,37 @@ Native TypeScript graph layout algorithms built directly on
|
|
|
4
4
|
[`@statelyai/graph`](https://github.com/statelyai/graph).
|
|
5
5
|
|
|
6
6
|
This is not a new graph interchange format. Public APIs consume `Graph` and
|
|
7
|
-
return `VisualGraph`; positions remain node fields
|
|
8
|
-
|
|
7
|
+
return `VisualGraph`; positions remain node fields. Standalone routing adds
|
|
8
|
+
immutable structured routes and incremental patches alongside the existing
|
|
9
|
+
`GraphEdge.points` layout output.
|
|
9
10
|
|
|
10
11
|
## Status
|
|
11
12
|
|
|
12
13
|
<!-- layered compatibility coverage from test/oracle*.test.ts -->
|
|
13
14
|
|
|
14
|
-
The native layered implementation
|
|
15
|
-
layered inventory
|
|
16
|
-
compound graphs, cross-hierarchy edges,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
The native layered implementation reimplements ELK-derived phases and maps the
|
|
16
|
+
complete 152-option elkjs 0.11.1 layered inventory to simplified typed names.
|
|
17
|
+
Focused differential tests cover flat/compound graphs, cross-hierarchy edges,
|
|
18
|
+
ports, labels, self-loops, wrapping, directions, constraints, and phase overrides.
|
|
19
|
+
A development-only oracle compares native constraint-group resolution against
|
|
20
|
+
unmodified elkjs internals on 512 seeded intermediate graphs, including complete
|
|
21
|
+
node order and barycenters. This validates that phase independently of the
|
|
22
|
+
unfinished pipeline integration. Ordered barycenter traversal has 512 seeded
|
|
23
|
+
port-graph comparisons; cross-port layer and associate order has 256 seeded
|
|
24
|
+
mixed-role comparisons. External-port dummy construction matches every real
|
|
25
|
+
ELK factory field on 1,536 seeded boundaries; four direction regressions preserve
|
|
26
|
+
the selected descendant port across a compound boundary.
|
|
27
|
+
Initial model ordering and port-helper alignment have seven retained random
|
|
28
|
+
full-geometry regressions across independent seed ranges. Mixed-port junction
|
|
29
|
+
restoration has nineteen more, covering direct and joined routes in all directions.
|
|
30
|
+
Nested helper bounds have twelve complete-geometry regressions, including parent placement/routing after child resizing. Hierarchy boundary-side preparation and canonical port sorting add a 48-case constraint matrix and fifteen retained direction regressions. Coincident cross-port restoration retains both physical endpoints. Preserving authored compound constraints and transforming boundary-helper placement raises the matrix to 36 matches, with twelve failures retained. A separate frozen random corpus covers compound constraints and authored compound ports; see [compound helper evidence](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/compound-helper-orientation/README.md). Authored and implicit ancestor endpoints have a further 320-case strict gate: 320 complete matches after perpendicular-port pipeline integration. See [compound endpoint evidence](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/authored-compound-port-scope/README.md). Internal perpendicular boundary processors pass 800 phase/direction checks against the real worker; public pipeline integration now passes the strict endpoint gate. See [phase evidence](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/hierarchical-port-phases/README.md) and [integration evidence](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/integrated-boundary-routing/README.md). Child-scope junction transfer adds two exact random compound matches; broader random parity remains incomplete. See [junction evidence](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/compound-junction-transfer/README.md).
|
|
31
|
+
A deeper random corpus adds three levels of nesting, bounded ports, cycles, loops and cross-boundary edges. Physical hierarchy boundaries now survive feedback reversal; complete comparisons still expose substantial geometry differences.
|
|
32
|
+
That coverage does not establish broad geometry or aesthetic parity: native
|
|
33
|
+
hierarchy placement and routing still diverge materially from real ELK. The
|
|
34
|
+
[side-by-side random corpus](docs/heuristics/README.md) uses the actual elkjs
|
|
35
|
+
runtime and one shared scorer to track that gap. Native layered layout also
|
|
36
|
+
supports partial selection, route-only execution, and geometric constraints.
|
|
37
|
+
Incremental layout remains explicitly unsupported.
|
|
22
38
|
|
|
23
39
|
## Install
|
|
24
40
|
|
|
@@ -55,6 +71,100 @@ result.diagnostics;
|
|
|
55
71
|
result.metrics;
|
|
56
72
|
```
|
|
57
73
|
|
|
74
|
+
## Native compound geometry
|
|
75
|
+
|
|
76
|
+
<!-- compound geometry options and output from src/layered/types.ts and src/layered/compound.ts -->
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
const result = getLayeredLayout(graph, {
|
|
80
|
+
direction: "down",
|
|
81
|
+
padding: { top: 24, right: 40, bottom: 24, left: 40 },
|
|
82
|
+
compound: (node) => ({
|
|
83
|
+
header: { width: 200, height: 60, side: "top" },
|
|
84
|
+
direction: "right",
|
|
85
|
+
}),
|
|
86
|
+
edgeAttachment: (edge) => ({
|
|
87
|
+
source: "content", // Use "outer" for an outward/reentering transition.
|
|
88
|
+
}),
|
|
89
|
+
});
|
|
90
|
+
result.compoundGeometry.get("parent"); // { bounds, header, content }
|
|
91
|
+
result.compoundRoutes; // World-space sections, label gaps, routing diagnostics.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Each scope reserves children and measured labels before its ancestors are laid
|
|
95
|
+
out. Header measurements cannot replace finalized compound dimensions. Node
|
|
96
|
+
positions and compound bounds are parent-relative; edge label positions and
|
|
97
|
+
routes are world-relative, marked by `edgeCoordinateSpace: "world"`. Header and content rectangles are local to the
|
|
98
|
+
compound. For ancestor-to-descendant edges, content attachments leave inward;
|
|
99
|
+
outer attachments leave outward. Explicit ports retain their node-local geometry.
|
|
100
|
+
The native compound router emits orthogonal route sections for the original endpoints.
|
|
101
|
+
Use `compoundRoutes` or `getLayoutRoutes(result)` to retain label gaps and
|
|
102
|
+
fallback diagnostics; legacy `edge.points` flattens the sections. `getLayout`
|
|
103
|
+
also reports routing diagnostics in its result. Compound routing currently uses
|
|
104
|
+
orthogonal sections independently of the flat layout routing setting.
|
|
105
|
+
|
|
106
|
+
These options belong to the native contract; they do not change the pinned
|
|
107
|
+
ELK compatibility contract. The existing simplified advanced options still
|
|
108
|
+
map to ELK option IDs, but identical geometry is not guaranteed between contracts.
|
|
109
|
+
|
|
110
|
+
## Replace initial routes
|
|
111
|
+
|
|
112
|
+
<!-- layered post-layout routing option from src/layered/types.ts and src/layered/replace-routing.ts -->
|
|
113
|
+
|
|
114
|
+
Initial layered layout computes placement, labels, ports, and routes. An optional
|
|
115
|
+
replacement router then discards those routes and computes new ones on the finalized
|
|
116
|
+
geometry:
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
import { getLayeredLayout } from "@statelyai/layout";
|
|
120
|
+
import { bezierRouting } from "@statelyai/layout/routing";
|
|
121
|
+
|
|
122
|
+
const result = getLayeredLayout(graph, {
|
|
123
|
+
routing: { strategy: bezierRouting, settings: { clearance: 8 } },
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The replacement receives world-space nodes and labels, without initial paths or
|
|
128
|
+
route caches. It must synchronously return one route per edge. Node, port, label,
|
|
129
|
+
and compound geometry remain unchanged; render `getLayoutRoutes(result)` to retain
|
|
130
|
+
curves and disconnected sections. Async routers can be run separately after layout.
|
|
131
|
+
`strategies.routeEdges` remains an initial layout phase override; `routing` runs after
|
|
132
|
+
initial layout. Neither this separation nor API compatibility establishes ELK quality parity.
|
|
133
|
+
|
|
134
|
+
Post-layout replacement currently requires unconstrained full layout through `getLayout`. For scoped or constrained geometry, run standalone routing after applying the layout result.
|
|
135
|
+
|
|
136
|
+
## Standalone incremental routing
|
|
137
|
+
|
|
138
|
+
<!-- routing API and strategy catalog from src/routing/index.ts -->
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import { getDiff } from "@statelyai/graph";
|
|
142
|
+
import { orthogonalRouting, toSvgPath } from "@statelyai/layout/routing";
|
|
143
|
+
|
|
144
|
+
const previous = orthogonalRouting.route(graph);
|
|
145
|
+
const { snapshot, patches } = orthogonalRouting.update(
|
|
146
|
+
nextGraph,
|
|
147
|
+
previous,
|
|
148
|
+
getDiff(graph, nextGraph),
|
|
149
|
+
);
|
|
150
|
+
const route = snapshot.routes.get("ab");
|
|
151
|
+
const paths = route?.sections.map((section) => toSvgPath(section.path));
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Incremental results match fresh routing for the same graph and settings. Previous
|
|
155
|
+
paths are cached outputs, never constraints on new routes.
|
|
156
|
+
|
|
157
|
+
Every strategy supports incremental updates with immutable snapshots and shared
|
|
158
|
+
indexes. Nodes, ports, and labels stay fixed. Every edge receives a route;
|
|
159
|
+
fallbacks expose status and diagnostics. Deterministic soft crossing/overlap costs
|
|
160
|
+
coordinate unrelated groups; residual conflicts stay visible and reported. Native TypeScript strategies cover
|
|
161
|
+
straight, Bézier, orthogonal, polyline, octilinear, curved, organic, parallel,
|
|
162
|
+
self-loop, fan, bus, and bundled routes. Render curves directly or flatten them
|
|
163
|
+
for a lines-only renderer. ELK/native layout adapters preserve existing output.
|
|
164
|
+
|
|
165
|
+
For efficient dragging, supply the edit's diff directly: `getDiff` scans the
|
|
166
|
+
whole graph. See [routing contracts, algorithms, and examples](docs/routing.md).
|
|
167
|
+
|
|
58
168
|
## Layout while authoring
|
|
59
169
|
|
|
60
170
|
<!-- partial scopes and geometry constraints from src/types.ts and src/constraints.ts -->
|
|
@@ -93,10 +203,46 @@ and topology remain fixed. Results include field-specific graph patches and
|
|
|
93
203
|
repair/conflict diagnostics. Constraints support alignment, distribution, pins,
|
|
94
204
|
linear equalities/inequalities, and route waypoints.
|
|
95
205
|
|
|
206
|
+
Full layouts accept the same constraints on graphs with containers. A moved
|
|
207
|
+
container carries its children; a container grows to keep a moved child
|
|
208
|
+
inside; siblings never overlap. Only edges touching moved geometry are
|
|
209
|
+
re-routed. A required constraint that would need an overlap fails with
|
|
210
|
+
`UNSATISFIED_CONSTRAINT`; weaker strengths are relaxed and reported.
|
|
211
|
+
|
|
96
212
|
See [authoring layout](docs/authoring-layout.md) for baseline requirements,
|
|
97
213
|
selection semantics, routing limits, and examples. Existing ELK compatibility
|
|
98
214
|
behavior is unchanged.
|
|
99
215
|
|
|
216
|
+
## Layout hints
|
|
217
|
+
|
|
218
|
+
<!-- hint constructors and statechartHints from src/layered/hints.ts -->
|
|
219
|
+
|
|
220
|
+
Hints describe what a reader expects; the layered phases apply them during
|
|
221
|
+
layering, ordering and placement:
|
|
222
|
+
|
|
223
|
+
```ts
|
|
224
|
+
import { getLayeredLayout, hint, statechartHints } from "@statelyai/layout";
|
|
225
|
+
|
|
226
|
+
getLayeredLayout(graph, {
|
|
227
|
+
hints: [
|
|
228
|
+
hint.anchor({ id: "initial", nodeId: "idle", corner: "start" }), // top-left
|
|
229
|
+
hint.chain({ id: "happy-path", nodeIds: ["form", "checking", "done"] }), // one center line
|
|
230
|
+
],
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Statecharts: initial states anchor at the start of their container, and
|
|
234
|
+
// runs of states joined one-to-one form chains.
|
|
235
|
+
getLayeredLayout(graph, { hints: statechartHints(graph) });
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Hints never create defects (overlaps, routes through nodes, diagonal
|
|
239
|
+
segments). A hint is `prefer` by default: it is kept only when the layout is no
|
|
240
|
+
worse than one without it in crossings, bends, route length and area, and a
|
|
241
|
+
dropped hint is reported as `HINT_RELAXED`. `strength: "require"` keeps the
|
|
242
|
+
hint even at that cost. `statechartHints` requires initial-state anchors and
|
|
243
|
+
prefers chains. Hints apply to the native API; the elkjs compatibility entry
|
|
244
|
+
point is unchanged.
|
|
245
|
+
|
|
100
246
|
## elkjs compatibility
|
|
101
247
|
|
|
102
248
|
<!-- elkjs-compatible entry point and layered mapping exports from package.json#exports and src/layered/index.ts -->
|
|
@@ -134,9 +280,9 @@ The compatibility entry's named graph, edge, option, and result types are
|
|
|
134
280
|
mutually assignable with the declarations shipped by `elkjs@0.11.1`. Its
|
|
135
281
|
default class also accepts the library's broader internal graph inputs.
|
|
136
282
|
|
|
137
|
-
<!-- fixed-port placement and inline center-label guarantees from src/layered/index.ts and src/layered/
|
|
283
|
+
<!-- fixed-port placement and inline center-label guarantees from src/layered/index.ts, src/layered/strategies.ts and src/layered/orthogonal-junctions.ts -->
|
|
138
284
|
|
|
139
|
-
Fixed port sides constrain routes without collapsing fan-out targets onto each other. Port preferences cannot reintroduce cycles before layering. Inline center labels use reserved inter-rank space; orthogonally routed labels use distinct cross-axis lanes that avoid other labels and states. Dedicated label layers
|
|
285
|
+
Fixed port sides constrain routes without collapsing fan-out targets onto each other. Detached cross-port rows retain incoming adjacency through splitting and inversion for BK straightening. Port preferences cannot reintroduce cycles before layering. Inline center labels use reserved inter-rank space; orthogonally routed labels use distinct cross-axis lanes that avoid other labels and states. Dedicated label layers reserve clearance on both sides of routing tracks; route-track compaction retains their placement strategies. Inline self-loop labels reserve clearance on their assigned sides from both their owner and neighboring nodes. Hierarchy decomposition preserves native self-loop routes for ancestor-to-descendant edges. FIRST/FIRST_SEPARATE nodes may have self-loops. Fixed loops reserve their perimeter clearance before placement and in routing ranks. Track clearance follows physical edge direction through cycle reversal. Orthogonal junctions retain physical routing ownership through joining and compaction. Infeasible post-compaction relations retain the initial finite geometry.
|
|
140
286
|
|
|
141
287
|
Advanced layered settings use shorter names such as
|
|
142
288
|
`layering.strategy`, `spacing.edgeNode`, and `nodePlacement.strategy`.
|
|
@@ -209,6 +355,11 @@ API coverage separately from native algorithm fidelity.
|
|
|
209
355
|
|
|
210
356
|
## Development
|
|
211
357
|
|
|
358
|
+
<!-- heuristic corpus generation from scripts/generate-heuristic-corpus.mjs -->
|
|
359
|
+
|
|
360
|
+
For seeded native Stately layout examples and aesthetic review notes, see the
|
|
361
|
+
[heuristic review corpus](docs/heuristics/README.md).
|
|
362
|
+
|
|
212
363
|
<!-- scripts derived from package.json#scripts -->
|
|
213
364
|
|
|
214
365
|
```bash
|
|
@@ -261,5 +412,62 @@ Publishing uses npm Trusted Publishing through `.github/workflows/release.yml`.
|
|
|
261
412
|
The opt-in `layoutStatechart` export from `@statelyai/layout/elkjs` compiles
|
|
262
413
|
initial-state and preferred-path hints into scoped settings, then selects among
|
|
263
414
|
at most three fresh layout attempts. It returns all quality scores, including
|
|
264
|
-
remaining defects.
|
|
415
|
+
remaining defects. Path scoring honors inherited compound directions and
|
|
416
|
+
explicit scope overrides. See [statechart policies](docs/statechart-layout.md) for the
|
|
265
417
|
API, supported controls, tradeoffs and reproducible visual comparison.
|
|
418
|
+
|
|
419
|
+
For the strict seeded hierarchy comparison with real ELK, run
|
|
420
|
+
`pnpm test:parity:compound`. See the
|
|
421
|
+
[compound baseline](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/compound-baseline/README.md) for preserved
|
|
422
|
+
failures and side-by-side diagrams. This finite gate passes; broad native parity
|
|
423
|
+
remains work in progress.
|
|
424
|
+
|
|
425
|
+
For bounded random fixed-port self-loops, run `pnpm test:parity:self-loops`.
|
|
426
|
+
This smaller gate compares complete node/port geometry, routes and junctions
|
|
427
|
+
with real ELK; passing it does not establish broad hierarchy parity.
|
|
428
|
+
|
|
429
|
+
For bounded random flat graphs with cycles, self-loops, fixed-side/fixed-position
|
|
430
|
+
ports and labels, run `pnpm test:parity:flat`. This strict geometry gate preserves
|
|
431
|
+
all mismatches and engine errors; it currently fails. See the
|
|
432
|
+
[flat random proof](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/bk-compaction-thresholds/README.md).
|
|
433
|
+
|
|
434
|
+
For directional compaction on the same bounded random flat/hierarchical families,
|
|
435
|
+
run `pnpm exec tsx scripts/check-directional-compaction-parity.ts`. This additional
|
|
436
|
+
200-case gate preserves all failures, including real ELK errors; it currently
|
|
437
|
+
fails. See the [directional compaction proof](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/directional-compaction/README.md).
|
|
438
|
+
|
|
439
|
+
For model-order settings on bounded random flat/hierarchical graphs, run
|
|
440
|
+
`pnpm test:parity:model-order`. This strict 200-case gate alternates forced node
|
|
441
|
+
ordering, preserves complete failures and reference exceptions, and currently
|
|
442
|
+
fails. See the [inverted-port model-order proof](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/inverted-port-model-order/README.md). Remaining fixed-port route differences are traced in the
|
|
443
|
+
[helper ordering investigation](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/fixed-port-helper-investigation/README.md).
|
|
444
|
+
|
|
445
|
+
<!-- implementation from src/layered/loop-envelopes.ts, src/layered/strategies.ts, src/layered/index.ts and src/elkjs/index.ts -->
|
|
446
|
+
|
|
447
|
+
Movable self-loop labels reserve clearance before placement and retain directional alignment and stacked routing clearance. Compaction retains their complete label envelopes. See the [native loop label comparison](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/movable-loop-labels/README.md).
|
|
448
|
+
|
|
449
|
+
Routing reuses self-loop envelopes already reserved by placement, keeping neighboring hierarchy helpers in their chosen positions. See the [preplaced loop envelope regression](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/preplaced-loop-envelope/README.md).
|
|
450
|
+
|
|
451
|
+
Orthogonal junction ownership follows physical incident edge order after reversal. See the [junction ownership regression](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/physical-junction-order/README.md).
|
|
452
|
+
|
|
453
|
+
Joining reversed edge chains retains physical routing order for junction points. See the [reversed chain regression](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/reversed-junction-chains/README.md).
|
|
454
|
+
|
|
455
|
+
Crossing minimization starts from ELK's long-edge splitter order: component order, then dummies appended through authored port order. See the [splitter order replay](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/long-edge-splitter-order/README.md).
|
|
456
|
+
|
|
457
|
+
That order walks ELK's per-port edge lists, replayed through reversal history, label dummies and hierarchy segment creation. See the [port edge-list replay](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/elk-port-edge-lists/README.md).
|
|
458
|
+
|
|
459
|
+
Greedy switching decides each swap from ELK's local two-node crossing estimates. See the [greedy switch decider](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/greedy-switch-decider/README.md).
|
|
460
|
+
|
|
461
|
+
Barycenter sweeps visit each port's edges in ELK's list order. See the [port edge visit order](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/port-edge-visit-order/README.md).
|
|
462
|
+
|
|
463
|
+
A north/south port whose dummy ends crossing minimization on the other side of its node moves to that side. See the [north/south port sides](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/north-south-port-sides/README.md).
|
|
464
|
+
|
|
465
|
+
In-layer edges kept by merged hyperedge dummies join their routing hyperedge. See the [merged dummy port faces](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/merged-dummy-port-faces/README.md).
|
|
466
|
+
|
|
467
|
+
Self loops that share a port route on one track. See the [shared self-loop tracks](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/shared-self-loop-tracks/README.md).
|
|
468
|
+
|
|
469
|
+
Orthogonal routing walks port edge lists in ELK order when building hyperedge segments and assigning junctions. See the [orthogonal edge lists](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/orthogonal-edge-lists/README.md).
|
|
470
|
+
|
|
471
|
+
A merged hyperedge dummy that absorbed an inverted-port dummy keeps its in-layer route in the adjacent channel. See [merged inverted routes](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/merged-inverted-routes/README.md).
|
|
472
|
+
|
|
473
|
+
BK edge straightening ignores self loops, and hyperedge dummies merge only when ELK import detects a hyperedge. See [BK hidden self loops](https://github.com/statelyai/layout/blob/heuristics-evidence/docs/heuristics/bk-hidden-self-loops/README.md).
|
package/dist/elkjs/index.cjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
2
|
-
require('../layered-
|
|
3
|
-
const require_elkjs = require('../elkjs-
|
|
2
|
+
require('../layered-CBPg6_6_.cjs');
|
|
3
|
+
const require_elkjs = require('../elkjs-ggjsBuVP.cjs');
|
|
4
4
|
|
|
5
5
|
exports.compileStatechartLayout = require_elkjs.compileStatechartLayout;
|
|
6
6
|
exports.default = require_elkjs.ELK;
|
|
7
|
+
exports.getElkRoutes = require_elkjs.getElkRoutes;
|
|
7
8
|
exports.layoutStatechart = require_elkjs.layoutStatechart;
|
|
8
9
|
exports.scoreStatechartLayout = require_elkjs.scoreStatechartLayout;
|
package/dist/elkjs/index.d.cts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { _ as ElkShape, a as ElkEdgeSection, c as ElkLabel, d as ElkLayoutCategoryDescription, f as ElkLayoutOptionDescription, g as ElkPrimitiveEdge, h as ElkPort, i as ElkEdge, l as ElkLayoutAlgorithmDescription, m as ElkPoint, n as ELKConstructorArguments, o as ElkExtendedEdge, p as ElkNode, r as ElkCommonDescription, s as ElkGraphElement, t as ELK, u as ElkLayoutArguments, v as LaidOutElkNode, y as LayoutOptions } from "../public-types-
|
|
1
|
+
import { _ as ElkShape, a as ElkEdgeSection, c as ElkLabel, d as ElkLayoutCategoryDescription, f as ElkLayoutOptionDescription, g as ElkPrimitiveEdge, h as ElkPort, i as ElkEdge, l as ElkLayoutAlgorithmDescription, m as ElkPoint, n as ELKConstructorArguments, o as ElkExtendedEdge, p as ElkNode, r as ElkCommonDescription, s as ElkGraphElement, t as ELK, u as ElkLayoutArguments, v as LaidOutElkNode, y as LayoutOptions } from "../public-types-BcRZoJE3.cjs";
|
|
2
|
+
import { r as Route } from "../types-uxPlGRof.cjs";
|
|
2
3
|
|
|
3
4
|
//#region src/elkjs/types.d.ts
|
|
4
5
|
type ElkId = string | number;
|
|
@@ -31,6 +32,8 @@ interface ElkEdgeSection$1 extends ElkGraphElement$1 {
|
|
|
31
32
|
outgoingShape?: ElkId;
|
|
32
33
|
}
|
|
33
34
|
interface ElkEdge$1 extends ElkGraphElement$1 {
|
|
35
|
+
/** Node whose coordinate frame contains the exported route. */
|
|
36
|
+
container?: ElkId;
|
|
34
37
|
sources?: ElkId[];
|
|
35
38
|
targets?: ElkId[];
|
|
36
39
|
source?: ElkId;
|
|
@@ -131,6 +134,14 @@ declare function layoutStatechart<T extends ElkNode$1>(input: T, options: Statec
|
|
|
131
134
|
attempt: number;
|
|
132
135
|
}>;
|
|
133
136
|
//#endregion
|
|
137
|
+
//#region src/elkjs/routes.d.ts
|
|
138
|
+
interface ElkRouteOptions {
|
|
139
|
+
/** ELK stores spline controls in bendPoints; the caller must identify that encoding. */
|
|
140
|
+
routing?: "ORTHOGONAL" | "POLYLINE" | "SPLINES";
|
|
141
|
+
}
|
|
142
|
+
/** Normalize any ELK layout's section geometry, preserving ports and hyperedge junctions. */
|
|
143
|
+
declare function getElkRoutes(graph: ElkNode, options?: ElkRouteOptions): ReadonlyMap<string, Route>;
|
|
144
|
+
//#endregion
|
|
134
145
|
//#region src/elkjs/index.d.ts
|
|
135
146
|
declare class ELK$1 {
|
|
136
147
|
#private;
|
|
@@ -143,4 +154,4 @@ declare class ELK$1 {
|
|
|
143
154
|
layout<T extends ElkNode$1>(graph: T, arguments_?: ElkLayoutArguments$1): Promise<LaidOutElkNode$1<T>>;
|
|
144
155
|
}
|
|
145
156
|
//#endregion
|
|
146
|
-
export { type ELK, type ELKConstructorArguments, type ElkCommonDescription, type ElkEdge, type ElkEdgeSection, type ElkExtendedEdge, type ElkGraphElement, type ElkId, type ElkLabel, type ElkLayoutAlgorithmDescription, type ElkLayoutArguments, type ElkLayoutCategoryDescription, type ElkLayoutOptionDescription, type ElkLogging, type ElkNode, type ElkPoint, type ElkPort, type ElkPrimitiveEdge, type ElkShape, type LaidOutElkNode, type LayoutOptions, type StatechartLayoutOptions, type StatechartLayoutPlan, type StatechartLayoutScore, type StatechartScope, compileStatechartLayout, ELK$1 as default, layoutStatechart, scoreStatechartLayout };
|
|
157
|
+
export { type ELK, type ELKConstructorArguments, type ElkCommonDescription, type ElkEdge, type ElkEdgeSection, type ElkExtendedEdge, type ElkGraphElement, type ElkId, type ElkLabel, type ElkLayoutAlgorithmDescription, type ElkLayoutArguments, type ElkLayoutCategoryDescription, type ElkLayoutOptionDescription, type ElkLogging, type ElkNode, type ElkPoint, type ElkPort, type ElkPrimitiveEdge, type ElkRouteOptions, type ElkShape, type LaidOutElkNode, type LayoutOptions, type StatechartLayoutOptions, type StatechartLayoutPlan, type StatechartLayoutScore, type StatechartScope, compileStatechartLayout, ELK$1 as default, getElkRoutes, layoutStatechart, scoreStatechartLayout };
|
package/dist/elkjs/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { _ as ElkShape, a as ElkEdgeSection, c as ElkLabel, d as ElkLayoutCategoryDescription, f as ElkLayoutOptionDescription, g as ElkPrimitiveEdge, h as ElkPort, i as ElkEdge, l as ElkLayoutAlgorithmDescription, m as ElkPoint, n as ELKConstructorArguments, o as ElkExtendedEdge, p as ElkNode, r as ElkCommonDescription, s as ElkGraphElement, t as ELK, u as ElkLayoutArguments, v as LaidOutElkNode, y as LayoutOptions } from "../public-types-
|
|
1
|
+
import { _ as ElkShape, a as ElkEdgeSection, c as ElkLabel, d as ElkLayoutCategoryDescription, f as ElkLayoutOptionDescription, g as ElkPrimitiveEdge, h as ElkPort, i as ElkEdge, l as ElkLayoutAlgorithmDescription, m as ElkPoint, n as ELKConstructorArguments, o as ElkExtendedEdge, p as ElkNode, r as ElkCommonDescription, s as ElkGraphElement, t as ELK, u as ElkLayoutArguments, v as LaidOutElkNode, y as LayoutOptions } from "../public-types-9NCPoqbp.mjs";
|
|
2
|
+
import { r as Route } from "../types-CT2akdK0.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/elkjs/types.d.ts
|
|
4
5
|
type ElkId = string | number;
|
|
@@ -31,6 +32,8 @@ interface ElkEdgeSection$1 extends ElkGraphElement$1 {
|
|
|
31
32
|
outgoingShape?: ElkId;
|
|
32
33
|
}
|
|
33
34
|
interface ElkEdge$1 extends ElkGraphElement$1 {
|
|
35
|
+
/** Node whose coordinate frame contains the exported route. */
|
|
36
|
+
container?: ElkId;
|
|
34
37
|
sources?: ElkId[];
|
|
35
38
|
targets?: ElkId[];
|
|
36
39
|
source?: ElkId;
|
|
@@ -131,6 +134,14 @@ declare function layoutStatechart<T extends ElkNode$1>(input: T, options: Statec
|
|
|
131
134
|
attempt: number;
|
|
132
135
|
}>;
|
|
133
136
|
//#endregion
|
|
137
|
+
//#region src/elkjs/routes.d.ts
|
|
138
|
+
interface ElkRouteOptions {
|
|
139
|
+
/** ELK stores spline controls in bendPoints; the caller must identify that encoding. */
|
|
140
|
+
routing?: "ORTHOGONAL" | "POLYLINE" | "SPLINES";
|
|
141
|
+
}
|
|
142
|
+
/** Normalize any ELK layout's section geometry, preserving ports and hyperedge junctions. */
|
|
143
|
+
declare function getElkRoutes(graph: ElkNode, options?: ElkRouteOptions): ReadonlyMap<string, Route>;
|
|
144
|
+
//#endregion
|
|
134
145
|
//#region src/elkjs/index.d.ts
|
|
135
146
|
declare class ELK$1 {
|
|
136
147
|
#private;
|
|
@@ -143,4 +154,4 @@ declare class ELK$1 {
|
|
|
143
154
|
layout<T extends ElkNode$1>(graph: T, arguments_?: ElkLayoutArguments$1): Promise<LaidOutElkNode$1<T>>;
|
|
144
155
|
}
|
|
145
156
|
//#endregion
|
|
146
|
-
export { type ELK, type ELKConstructorArguments, type ElkCommonDescription, type ElkEdge, type ElkEdgeSection, type ElkExtendedEdge, type ElkGraphElement, type ElkId, type ElkLabel, type ElkLayoutAlgorithmDescription, type ElkLayoutArguments, type ElkLayoutCategoryDescription, type ElkLayoutOptionDescription, type ElkLogging, type ElkNode, type ElkPoint, type ElkPort, type ElkPrimitiveEdge, type ElkShape, type LaidOutElkNode, type LayoutOptions, type StatechartLayoutOptions, type StatechartLayoutPlan, type StatechartLayoutScore, type StatechartScope, compileStatechartLayout, ELK$1 as default, layoutStatechart, scoreStatechartLayout };
|
|
157
|
+
export { type ELK, type ELKConstructorArguments, type ElkCommonDescription, type ElkEdge, type ElkEdgeSection, type ElkExtendedEdge, type ElkGraphElement, type ElkId, type ElkLabel, type ElkLayoutAlgorithmDescription, type ElkLayoutArguments, type ElkLayoutCategoryDescription, type ElkLayoutOptionDescription, type ElkLogging, type ElkNode, type ElkPoint, type ElkPort, type ElkPrimitiveEdge, type ElkRouteOptions, type ElkShape, type LaidOutElkNode, type LayoutOptions, type StatechartLayoutOptions, type StatechartLayoutPlan, type StatechartLayoutScore, type StatechartScope, compileStatechartLayout, ELK$1 as default, getElkRoutes, layoutStatechart, scoreStatechartLayout };
|
package/dist/elkjs/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "../layered-
|
|
2
|
-
import {
|
|
1
|
+
import "../layered-C7ERzZjR.mjs";
|
|
2
|
+
import { a as scoreStatechartLayout, i as layoutStatechart, n as getElkRoutes, r as compileStatechartLayout, t as ELK } from "../elkjs-UciYx7lD.mjs";
|
|
3
3
|
|
|
4
|
-
export { compileStatechartLayout, ELK as default, layoutStatechart, scoreStatechartLayout };
|
|
4
|
+
export { compileStatechartLayout, ELK as default, getElkRoutes, layoutStatechart, scoreStatechartLayout };
|
package/dist/elkjs/main.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require('../layered-
|
|
1
|
+
require('../layered-CBPg6_6_.cjs');
|
|
2
2
|
const require_elkjs_worker = require('./worker.cjs');
|
|
3
|
-
const require_worker_client = require('../worker-client-
|
|
3
|
+
const require_worker_client = require('../worker-client-D4oEvhAl.cjs');
|
|
4
4
|
|
|
5
5
|
//#region src/elkjs/main.ts
|
|
6
6
|
/** Node-compatible elkjs entry point with an in-process worker fallback. */
|
package/dist/elkjs/main.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as ELKConstructorArguments } from "../public-types-
|
|
2
|
-
import { t as WorkerELK } from "../worker-client-
|
|
1
|
+
import { n as ELKConstructorArguments } from "../public-types-BcRZoJE3.cjs";
|
|
2
|
+
import { t as WorkerELK } from "../worker-client-D4zNyPEI.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/elkjs/main.d.ts
|
|
5
5
|
|
package/dist/elkjs/main.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as ELKConstructorArguments } from "../public-types-
|
|
2
|
-
import { t as WorkerELK } from "../worker-client-
|
|
1
|
+
import { n as ELKConstructorArguments } from "../public-types-9NCPoqbp.mjs";
|
|
2
|
+
import { t as WorkerELK } from "../worker-client-BwGGRD5y.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/elkjs/main.d.ts
|
|
5
5
|
|
package/dist/elkjs/main.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "../layered-
|
|
1
|
+
import "../layered-C7ERzZjR.mjs";
|
|
2
2
|
import { Worker } from "./worker.mjs";
|
|
3
|
-
import { t as WorkerELK } from "../worker-client-
|
|
3
|
+
import { t as WorkerELK } from "../worker-client-BNjwT1AJ.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/elkjs/main.ts
|
|
6
6
|
/** Node-compatible elkjs entry point with an in-process worker fallback. */
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { _ as ElkShape, a as ElkEdgeSection, c as ElkLabel, d as ElkLayoutCategoryDescription, f as ElkLayoutOptionDescription, g as ElkPrimitiveEdge, h as ElkPort, i as ElkEdge, l as ElkLayoutAlgorithmDescription, m as ElkPoint, n as ELKConstructorArguments, o as ElkExtendedEdge, p as ElkNode, r as ElkCommonDescription, s as ElkGraphElement, t as ELK, u as ElkLayoutArguments, v as LaidOutElkNode, y as LayoutOptions } from "../public-types-
|
|
2
|
-
import { t as WorkerELK } from "../worker-client-
|
|
1
|
+
import { _ as ElkShape, a as ElkEdgeSection, c as ElkLabel, d as ElkLayoutCategoryDescription, f as ElkLayoutOptionDescription, g as ElkPrimitiveEdge, h as ElkPort, i as ElkEdge, l as ElkLayoutAlgorithmDescription, m as ElkPoint, n as ELKConstructorArguments, o as ElkExtendedEdge, p as ElkNode, r as ElkCommonDescription, s as ElkGraphElement, t as ELK, u as ElkLayoutArguments, v as LaidOutElkNode, y as LayoutOptions } from "../public-types-BcRZoJE3.cjs";
|
|
2
|
+
import { t as WorkerELK } from "../worker-client-D4zNyPEI.cjs";
|
|
3
3
|
export { type ELK, type ELKConstructorArguments, type ElkCommonDescription, type ElkEdge, type ElkEdgeSection, type ElkExtendedEdge, type ElkGraphElement, type ElkLabel, type ElkLayoutAlgorithmDescription, type ElkLayoutArguments, type ElkLayoutCategoryDescription, type ElkLayoutOptionDescription, type ElkNode, type ElkPoint, type ElkPort, type ElkPrimitiveEdge, type ElkShape, type LaidOutElkNode, type LayoutOptions, WorkerELK as default };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { _ as ElkShape, a as ElkEdgeSection, c as ElkLabel, d as ElkLayoutCategoryDescription, f as ElkLayoutOptionDescription, g as ElkPrimitiveEdge, h as ElkPort, i as ElkEdge, l as ElkLayoutAlgorithmDescription, m as ElkPoint, n as ELKConstructorArguments, o as ElkExtendedEdge, p as ElkNode, r as ElkCommonDescription, s as ElkGraphElement, t as ELK, u as ElkLayoutArguments, v as LaidOutElkNode, y as LayoutOptions } from "../public-types-
|
|
2
|
-
import { t as WorkerELK } from "../worker-client-
|
|
1
|
+
import { _ as ElkShape, a as ElkEdgeSection, c as ElkLabel, d as ElkLayoutCategoryDescription, f as ElkLayoutOptionDescription, g as ElkPrimitiveEdge, h as ElkPort, i as ElkEdge, l as ElkLayoutAlgorithmDescription, m as ElkPoint, n as ELKConstructorArguments, o as ElkExtendedEdge, p as ElkNode, r as ElkCommonDescription, s as ElkGraphElement, t as ELK, u as ElkLayoutArguments, v as LaidOutElkNode, y as LayoutOptions } from "../public-types-9NCPoqbp.mjs";
|
|
2
|
+
import { t as WorkerELK } from "../worker-client-BwGGRD5y.mjs";
|
|
3
3
|
export { type ELK, type ELKConstructorArguments, type ElkCommonDescription, type ElkEdge, type ElkEdgeSection, type ElkExtendedEdge, type ElkGraphElement, type ElkLabel, type ElkLayoutAlgorithmDescription, type ElkLayoutArguments, type ElkLayoutCategoryDescription, type ElkLayoutOptionDescription, type ElkNode, type ElkPoint, type ElkPort, type ElkPrimitiveEdge, type ElkShape, type LaidOutElkNode, type LayoutOptions, WorkerELK as default };
|
package/dist/elkjs/worker.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
require('../layered-
|
|
2
|
-
const require_elkjs = require('../elkjs-
|
|
1
|
+
require('../layered-CBPg6_6_.cjs');
|
|
2
|
+
const require_elkjs = require('../elkjs-ggjsBuVP.cjs');
|
|
3
3
|
|
|
4
4
|
//#region src/elkjs/worker.ts
|
|
5
5
|
/*******************************************************************************
|
package/dist/elkjs/worker.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "../layered-
|
|
2
|
-
import { t as ELK } from "../elkjs-
|
|
1
|
+
import "../layered-C7ERzZjR.mjs";
|
|
2
|
+
import { t as ELK } from "../elkjs-UciYx7lD.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/elkjs/worker.ts
|
|
5
5
|
/*******************************************************************************
|