@statewalker/fsm-charts 0.2.4 → 0.2.6
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 +206 -1
- package/dist/StateChart-cXyVRcs-.d.ts +94 -0
- package/dist/StateChart-cXyVRcs-.d.ts.map +1 -0
- package/dist/StateChartIndex-BK2315qj.d.ts +142 -0
- package/dist/StateChartIndex-BK2315qj.d.ts.map +1 -0
- package/dist/StateChartIndex-BOIrc_nq.js +355 -0
- package/dist/StateChartIndex-BOIrc_nq.js.map +1 -0
- package/dist/buildStatechartsPanel-CxQlIwTh.js +494 -0
- package/dist/buildStatechartsPanel-CxQlIwTh.js.map +1 -0
- package/dist/buildStatechartsPanel-hCtZbdiF.d.ts +79 -0
- package/dist/buildStatechartsPanel-hCtZbdiF.d.ts.map +1 -0
- package/dist/defineProperty-C0rC37pP.js +39 -0
- package/dist/description-panels-DI2MNlbK.js +184 -0
- package/dist/description-panels-DI2MNlbK.js.map +1 -0
- package/dist/getLabelDimensions-BY0q7j3D.d.ts +79 -0
- package/dist/getLabelDimensions-BY0q7j3D.d.ts.map +1 -0
- package/dist/getPadding-Cw0e7G2v.js +25 -0
- package/dist/getPadding-Cw0e7G2v.js.map +1 -0
- package/dist/index-config.d.ts +3 -12
- package/dist/index-config.js +2 -1
- package/dist/index-dom.d.ts +2 -49
- package/dist/index-dom.js +2 -1
- package/dist/index-html.d.ts +3 -2
- package/dist/index-html.js +2 -2
- package/dist/index-layout.d.ts +3 -77
- package/dist/index-layout.js +2 -2
- package/dist/index-runtime.d.ts +3 -141
- package/dist/index-runtime.js +2 -1
- package/dist/index.d.ts +11 -10
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -6
- package/dist/layout-Dp671N6q.js +2465 -0
- package/dist/layout-Dp671N6q.js.map +1 -0
- package/dist/newTreeBuilder-CvtLDjGj.d.ts +54 -0
- package/dist/newTreeBuilder-CvtLDjGj.d.ts.map +1 -0
- package/dist/toFsmStateConfig-DlJkyZni.js +135 -0
- package/dist/toFsmStateConfig-DlJkyZni.js.map +1 -0
- package/dist/toFsmStateConfig-DmOlTRjv.d.ts +15 -0
- package/dist/toFsmStateConfig-DmOlTRjv.d.ts.map +1 -0
- package/package.json +54 -28
- package/src/config/concatTransitionsToString.ts +4 -4
- package/src/config/index.ts +4 -4
- package/src/config/serializeProcessConfig.ts +3 -3
- package/src/config/splitTransitionString.ts +2 -4
- package/src/config/toFsmStateConfig.ts +5 -12
- package/src/dagre/acyclic.js +9 -10
- package/src/dagre/add-border-segments.js +11 -7
- package/src/dagre/coordinate-system.js +12 -12
- package/src/dagre/data/list.js +2 -2
- package/src/dagre/debug.d.ts +1 -1
- package/src/dagre/debug.js +11 -11
- package/src/dagre/greedy-fas.js +17 -21
- package/src/dagre/index.d.ts +4 -4
- package/src/dagre/index.js +4 -4
- package/src/dagre/layout.js +107 -96
- package/src/dagre/nesting-graph.js +13 -19
- package/src/dagre/normalize.js +7 -7
- package/src/dagre/order/add-subgraph-constraints.js +2 -2
- package/src/dagre/order/barycenter.d.ts +1 -1
- package/src/dagre/order/barycenter.js +4 -4
- package/src/dagre/order/build-layer-graph.d.ts +1 -1
- package/src/dagre/order/build-layer-graph.js +7 -9
- package/src/dagre/order/cross-count.js +14 -17
- package/src/dagre/order/index.js +19 -17
- package/src/dagre/order/init-order.js +5 -15
- package/src/dagre/order/resolve-conflicts.js +10 -14
- package/src/dagre/order/sort-subgraph.d.ts +1 -1
- package/src/dagre/order/sort-subgraph.js +13 -14
- package/src/dagre/order/sort.d.ts +1 -1
- package/src/dagre/order/sort.js +6 -10
- package/src/dagre/parent-dummy-chains.js +10 -4
- package/src/dagre/position/bk.d.ts +3 -3
- package/src/dagre/position/bk.js +84 -65
- package/src/dagre/position/index.js +7 -11
- package/src/dagre/rank/feasible-tree.d.ts +1 -1
- package/src/dagre/rank/feasible-tree.js +6 -6
- package/src/dagre/rank/index.js +6 -6
- package/src/dagre/rank/network-simplex.d.ts +0 -1
- package/src/dagre/rank/network-simplex.js +20 -25
- package/src/dagre/rank/util.js +2 -6
- package/src/dagre/util.d.ts +12 -6
- package/src/dagre/util.js +31 -37
- package/src/dom/buildSections.ts +15 -19
- package/src/dom/description-panels.ts +5 -7
- package/src/dom/getStatesDescriptions.ts +4 -10
- package/src/full/index.ts +1 -1
- package/src/full/toFsmStateCharts.ts +11 -11
- package/src/graphlib/alg/components.js +2 -2
- package/src/graphlib/alg/dfs.js +5 -5
- package/src/graphlib/alg/dijkstra-all.js +4 -4
- package/src/graphlib/alg/dijkstra.js +9 -12
- package/src/graphlib/alg/find-cycles.js +7 -5
- package/src/graphlib/alg/floyd-warshall.js +8 -11
- package/src/graphlib/alg/index.d.ts +11 -11
- package/src/graphlib/alg/index.js +11 -11
- package/src/graphlib/alg/is-acyclic.js +1 -1
- package/src/graphlib/alg/postorder.js +2 -2
- package/src/graphlib/alg/preorder.js +2 -2
- package/src/graphlib/alg/prim.d.ts +1 -1
- package/src/graphlib/alg/prim.js +5 -5
- package/src/graphlib/alg/tarjan.js +3 -3
- package/src/graphlib/alg/topsort.js +1 -1
- package/src/graphlib/data/priority-queue.js +8 -10
- package/src/graphlib/graph.js +53 -52
- package/src/graphlib/index.d.ts +2 -2
- package/src/graphlib/index.js +2 -2
- package/src/graphlib/json.d.ts +1 -1
- package/src/graphlib/json.js +6 -6
- package/src/html/buildStatechartCss.ts +2 -2
- package/src/html/buildStatechartStyles.ts +5 -15
- package/src/html/buildStatechartSvg.ts +8 -20
- package/src/html/buildStatechartsPanel.ts +3 -5
- package/src/html/index.ts +4 -4
- package/src/index-config.ts +2 -2
- package/src/index-dom.ts +1 -1
- package/src/index-html.ts +2 -2
- package/src/index-layout.ts +2 -2
- package/src/index-runtime.ts +2 -2
- package/src/index.ts +8 -8
- package/src/layout/buildCharts.ts +6 -7
- package/src/layout/buildFlatCharts.ts +17 -21
- package/src/layout/getGraphParamsProvider.ts +7 -19
- package/src/layout/getLabelDimensions.ts +5 -5
- package/src/layout/index.ts +5 -4
- package/src/lodash-es/index.ts +2 -2
- package/src/lodash-es/types.ts +37 -35
- package/src/runtime/RuntimeStatechartApi.ts +13 -46
- package/src/runtime/StateChartIndex.ts +7 -24
- package/src/runtime/index.ts +2 -2
- package/src/types/FsmStateConfig.ts +1 -1
- package/src/types/GraphParamsProvider.ts +3 -6
- package/src/types/Position.ts +1 -1
- package/src/types/StateChart.ts +2 -2
- package/src/types/StateGraphEdge.ts +2 -2
- package/src/types/StateGraphNode.ts +2 -2
- package/src/types/TransitionsGraph.ts +4 -4
- package/src/types/index.ts +11 -11
- package/src/utils/BasisCurve.ts +6 -15
- package/src/utils/domToText.ts +3 -7
- package/src/utils/getPadding.ts +2 -3
- package/src/utils/newId.ts +2 -1
- package/src/utils/newRegistry.ts +13 -13
- package/src/utils/serializeAttrs.ts +6 -14
- package/src/utils/serializeCss.ts +3 -7
- package/src/utils/serializeStyle.ts +2 -5
- package/src/utils/toKebabCase.ts +1 -4
- package/CHANGELOG.md +0 -1
- package/dist/StateChart-BYBjTmC2.d.ts +0 -82
- package/dist/chunk-36ZLXJVD.js +0 -606
- package/dist/chunk-AZBRQNTU.js +0 -2739
- package/dist/chunk-FIQDLBWD.js +0 -9
- package/dist/chunk-SVKVQY7B.js +0 -133
- package/dist/chunk-TZHCBZVP.js +0 -422
- package/dist/chunk-VILLJJJD.js +0 -231
- package/dist/index-html-DgSCNHkR.d.ts +0 -75
package/src/dagre/layout.js
CHANGED
|
@@ -1,113 +1,111 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import * as
|
|
6
|
-
import * as
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import * as util from
|
|
1
|
+
import { Graph } from "../graphlib/index.js";
|
|
2
|
+
import { _ } from "../lodash-es/index.ts";
|
|
3
|
+
import * as acyclic from "./acyclic.js";
|
|
4
|
+
import { addBorderSegments } from "./add-border-segments.js";
|
|
5
|
+
import * as coordinateSystem from "./coordinate-system.js";
|
|
6
|
+
import * as nestingGraph from "./nesting-graph.js";
|
|
7
|
+
import * as normalize from "./normalize.js";
|
|
8
|
+
import { order } from "./order/index.js";
|
|
9
|
+
import { parentDummyChains } from "./parent-dummy-chains.js";
|
|
10
|
+
import { position } from "./position/index.js";
|
|
11
|
+
import { rank } from "./rank/index.js";
|
|
12
|
+
import * as util from "./util.js";
|
|
13
13
|
|
|
14
14
|
export { layout };
|
|
15
15
|
|
|
16
16
|
function layout(g, opts) {
|
|
17
|
-
var time = opts
|
|
18
|
-
time(
|
|
19
|
-
var layoutGraph = time(
|
|
20
|
-
|
|
21
|
-
});
|
|
22
|
-
time(' runLayout', function () {
|
|
17
|
+
var time = opts?.debugTiming ? util.time : util.notime;
|
|
18
|
+
time("layout", () => {
|
|
19
|
+
var layoutGraph = time(" buildLayoutGraph", () => buildLayoutGraph(g));
|
|
20
|
+
time(" runLayout", () => {
|
|
23
21
|
runLayout(layoutGraph, time);
|
|
24
22
|
});
|
|
25
|
-
time(
|
|
23
|
+
time(" updateInputGraph", () => {
|
|
26
24
|
updateInputGraph(g, layoutGraph);
|
|
27
25
|
});
|
|
28
26
|
});
|
|
29
27
|
}
|
|
30
28
|
|
|
31
29
|
function runLayout(g, time) {
|
|
32
|
-
time(
|
|
30
|
+
time(" makeSpaceForEdgeLabels", () => {
|
|
33
31
|
makeSpaceForEdgeLabels(g);
|
|
34
32
|
});
|
|
35
|
-
time(
|
|
33
|
+
time(" removeSelfEdges", () => {
|
|
36
34
|
removeSelfEdges(g);
|
|
37
35
|
});
|
|
38
|
-
time(
|
|
36
|
+
time(" acyclic", () => {
|
|
39
37
|
acyclic.run(g);
|
|
40
38
|
});
|
|
41
|
-
time(
|
|
39
|
+
time(" nestingGraph.run", () => {
|
|
42
40
|
nestingGraph.run(g);
|
|
43
41
|
});
|
|
44
|
-
time(
|
|
42
|
+
time(" rank", () => {
|
|
45
43
|
rank(util.asNonCompoundGraph(g));
|
|
46
44
|
});
|
|
47
|
-
time(
|
|
45
|
+
time(" injectEdgeLabelProxies", () => {
|
|
48
46
|
injectEdgeLabelProxies(g);
|
|
49
47
|
});
|
|
50
|
-
time(
|
|
48
|
+
time(" removeEmptyRanks", () => {
|
|
51
49
|
util.removeEmptyRanks(g);
|
|
52
50
|
});
|
|
53
|
-
time(
|
|
51
|
+
time(" nestingGraph.cleanup", () => {
|
|
54
52
|
nestingGraph.cleanup(g);
|
|
55
53
|
});
|
|
56
|
-
time(
|
|
54
|
+
time(" normalizeRanks", () => {
|
|
57
55
|
util.normalizeRanks(g);
|
|
58
56
|
});
|
|
59
|
-
time(
|
|
57
|
+
time(" assignRankMinMax", () => {
|
|
60
58
|
assignRankMinMax(g);
|
|
61
59
|
});
|
|
62
|
-
time(
|
|
60
|
+
time(" removeEdgeLabelProxies", () => {
|
|
63
61
|
removeEdgeLabelProxies(g);
|
|
64
62
|
});
|
|
65
|
-
time(
|
|
63
|
+
time(" normalize.run", () => {
|
|
66
64
|
normalize.run(g);
|
|
67
65
|
});
|
|
68
|
-
time(
|
|
66
|
+
time(" parentDummyChains", () => {
|
|
69
67
|
parentDummyChains(g);
|
|
70
68
|
});
|
|
71
|
-
time(
|
|
69
|
+
time(" addBorderSegments", () => {
|
|
72
70
|
addBorderSegments(g);
|
|
73
71
|
});
|
|
74
|
-
time(
|
|
72
|
+
time(" order", () => {
|
|
75
73
|
order(g);
|
|
76
74
|
});
|
|
77
|
-
time(
|
|
75
|
+
time(" insertSelfEdges", () => {
|
|
78
76
|
insertSelfEdges(g);
|
|
79
77
|
});
|
|
80
|
-
time(
|
|
78
|
+
time(" adjustCoordinateSystem", () => {
|
|
81
79
|
coordinateSystem.adjust(g);
|
|
82
80
|
});
|
|
83
|
-
time(
|
|
81
|
+
time(" position", () => {
|
|
84
82
|
position(g);
|
|
85
83
|
});
|
|
86
|
-
time(
|
|
84
|
+
time(" positionSelfEdges", () => {
|
|
87
85
|
positionSelfEdges(g);
|
|
88
86
|
});
|
|
89
|
-
time(
|
|
87
|
+
time(" removeBorderNodes", () => {
|
|
90
88
|
removeBorderNodes(g);
|
|
91
89
|
});
|
|
92
|
-
time(
|
|
90
|
+
time(" normalize.undo", () => {
|
|
93
91
|
normalize.undo(g);
|
|
94
92
|
});
|
|
95
|
-
time(
|
|
93
|
+
time(" fixupEdgeLabelCoords", () => {
|
|
96
94
|
fixupEdgeLabelCoords(g);
|
|
97
95
|
});
|
|
98
|
-
time(
|
|
96
|
+
time(" undoCoordinateSystem", () => {
|
|
99
97
|
coordinateSystem.undo(g);
|
|
100
98
|
});
|
|
101
|
-
time(
|
|
99
|
+
time(" translateGraph", () => {
|
|
102
100
|
translateGraph(g);
|
|
103
101
|
});
|
|
104
|
-
time(
|
|
102
|
+
time(" assignNodeIntersects", () => {
|
|
105
103
|
assignNodeIntersects(g);
|
|
106
104
|
});
|
|
107
|
-
time(
|
|
105
|
+
time(" reversePoints", () => {
|
|
108
106
|
reversePointsForReversedEdges(g);
|
|
109
107
|
});
|
|
110
|
-
time(
|
|
108
|
+
time(" acyclic.undo", () => {
|
|
111
109
|
acyclic.undo(g);
|
|
112
110
|
});
|
|
113
111
|
}
|
|
@@ -119,7 +117,7 @@ function runLayout(g, time) {
|
|
|
119
117
|
* attributes can influence layout.
|
|
120
118
|
*/
|
|
121
119
|
function updateInputGraph(inputGraph, layoutGraph) {
|
|
122
|
-
_.forEach(inputGraph.nodes(),
|
|
120
|
+
_.forEach(inputGraph.nodes(), (v) => {
|
|
123
121
|
var inputLabel = inputGraph.node(v);
|
|
124
122
|
var layoutLabel = layoutGraph.node(v);
|
|
125
123
|
|
|
@@ -134,12 +132,12 @@ function updateInputGraph(inputGraph, layoutGraph) {
|
|
|
134
132
|
}
|
|
135
133
|
});
|
|
136
134
|
|
|
137
|
-
_.forEach(inputGraph.edges(),
|
|
135
|
+
_.forEach(inputGraph.edges(), (e) => {
|
|
138
136
|
var inputLabel = inputGraph.edge(e);
|
|
139
137
|
var layoutLabel = layoutGraph.edge(e);
|
|
140
138
|
|
|
141
139
|
inputLabel.points = layoutLabel.points;
|
|
142
|
-
if (_.has(layoutLabel,
|
|
140
|
+
if (_.has(layoutLabel, "x")) {
|
|
143
141
|
inputLabel.x = layoutLabel.x;
|
|
144
142
|
inputLabel.y = layoutLabel.y;
|
|
145
143
|
}
|
|
@@ -149,21 +147,21 @@ function updateInputGraph(inputGraph, layoutGraph) {
|
|
|
149
147
|
inputGraph.graph().height = layoutGraph.graph().height;
|
|
150
148
|
}
|
|
151
149
|
|
|
152
|
-
var graphNumAttrs = [
|
|
153
|
-
var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir:
|
|
154
|
-
var graphAttrs = [
|
|
155
|
-
var nodeNumAttrs = [
|
|
150
|
+
var graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"];
|
|
151
|
+
var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" };
|
|
152
|
+
var graphAttrs = ["acyclicer", "ranker", "rankdir", "align"];
|
|
153
|
+
var nodeNumAttrs = ["width", "height"];
|
|
156
154
|
var nodeDefaults = { width: 0, height: 0 };
|
|
157
|
-
var edgeNumAttrs = [
|
|
155
|
+
var edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"];
|
|
158
156
|
var edgeDefaults = {
|
|
159
157
|
minlen: 1,
|
|
160
158
|
weight: 1,
|
|
161
159
|
width: 0,
|
|
162
160
|
height: 0,
|
|
163
161
|
labeloffset: 10,
|
|
164
|
-
labelpos:
|
|
162
|
+
labelpos: "r",
|
|
165
163
|
};
|
|
166
|
-
var edgeAttrs = [
|
|
164
|
+
var edgeAttrs = ["labelpos"];
|
|
167
165
|
|
|
168
166
|
/*
|
|
169
167
|
* Constructs a new graph from the input graph, which can be used for layout.
|
|
@@ -176,20 +174,33 @@ function buildLayoutGraph(inputGraph) {
|
|
|
176
174
|
var graph = canonicalize(inputGraph.graph());
|
|
177
175
|
|
|
178
176
|
g.setGraph(
|
|
179
|
-
_.merge(
|
|
177
|
+
_.merge(
|
|
178
|
+
{},
|
|
179
|
+
graphDefaults,
|
|
180
|
+
selectNumberAttrs(graph, graphNumAttrs),
|
|
181
|
+
_.pick(graph, graphAttrs),
|
|
182
|
+
),
|
|
180
183
|
);
|
|
181
184
|
|
|
182
|
-
_.forEach(inputGraph.nodes(),
|
|
185
|
+
_.forEach(inputGraph.nodes(), (v) => {
|
|
183
186
|
var node = canonicalize(inputGraph.node(v));
|
|
184
|
-
g.setNode(
|
|
187
|
+
g.setNode(
|
|
188
|
+
v,
|
|
189
|
+
_.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults),
|
|
190
|
+
);
|
|
185
191
|
g.setParent(v, inputGraph.parent(v));
|
|
186
192
|
});
|
|
187
193
|
|
|
188
|
-
_.forEach(inputGraph.edges(),
|
|
194
|
+
_.forEach(inputGraph.edges(), (e) => {
|
|
189
195
|
var edge = canonicalize(inputGraph.edge(e));
|
|
190
196
|
g.setEdge(
|
|
191
197
|
e,
|
|
192
|
-
_.merge(
|
|
198
|
+
_.merge(
|
|
199
|
+
{},
|
|
200
|
+
edgeDefaults,
|
|
201
|
+
selectNumberAttrs(edge, edgeNumAttrs),
|
|
202
|
+
_.pick(edge, edgeAttrs),
|
|
203
|
+
),
|
|
193
204
|
);
|
|
194
205
|
});
|
|
195
206
|
|
|
@@ -207,11 +218,11 @@ function buildLayoutGraph(inputGraph) {
|
|
|
207
218
|
function makeSpaceForEdgeLabels(g) {
|
|
208
219
|
var graph = g.graph();
|
|
209
220
|
graph.ranksep /= 2;
|
|
210
|
-
_.forEach(g.edges(),
|
|
221
|
+
_.forEach(g.edges(), (e) => {
|
|
211
222
|
var edge = g.edge(e);
|
|
212
223
|
edge.minlen *= 2;
|
|
213
|
-
if (edge.labelpos.toLowerCase() !==
|
|
214
|
-
if (graph.rankdir ===
|
|
224
|
+
if (edge.labelpos.toLowerCase() !== "c") {
|
|
225
|
+
if (graph.rankdir === "TB" || graph.rankdir === "BT") {
|
|
215
226
|
edge.width += edge.labeloffset;
|
|
216
227
|
} else {
|
|
217
228
|
edge.height += edge.labeloffset;
|
|
@@ -227,20 +238,20 @@ function makeSpaceForEdgeLabels(g) {
|
|
|
227
238
|
* label's position.
|
|
228
239
|
*/
|
|
229
240
|
function injectEdgeLabelProxies(g) {
|
|
230
|
-
_.forEach(g.edges(),
|
|
241
|
+
_.forEach(g.edges(), (e) => {
|
|
231
242
|
var edge = g.edge(e);
|
|
232
243
|
if (edge.width && edge.height) {
|
|
233
244
|
var v = g.node(e.v);
|
|
234
245
|
var w = g.node(e.w);
|
|
235
246
|
var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };
|
|
236
|
-
util.addDummyNode(g,
|
|
247
|
+
util.addDummyNode(g, "edge-proxy", label, "_ep");
|
|
237
248
|
}
|
|
238
249
|
});
|
|
239
250
|
}
|
|
240
251
|
|
|
241
252
|
function assignRankMinMax(g) {
|
|
242
253
|
var maxRank = 0;
|
|
243
|
-
_.forEach(g.nodes(),
|
|
254
|
+
_.forEach(g.nodes(), (v) => {
|
|
244
255
|
var node = g.node(v);
|
|
245
256
|
if (node.borderTop) {
|
|
246
257
|
node.minRank = g.node(node.borderTop).rank;
|
|
@@ -253,9 +264,9 @@ function assignRankMinMax(g) {
|
|
|
253
264
|
}
|
|
254
265
|
|
|
255
266
|
function removeEdgeLabelProxies(g) {
|
|
256
|
-
_.forEach(g.nodes(),
|
|
267
|
+
_.forEach(g.nodes(), (v) => {
|
|
257
268
|
var node = g.node(v);
|
|
258
|
-
if (node.dummy ===
|
|
269
|
+
if (node.dummy === "edge-proxy") {
|
|
259
270
|
g.edge(node.e).labelRank = node.rank;
|
|
260
271
|
g.removeNode(v);
|
|
261
272
|
}
|
|
@@ -282,12 +293,12 @@ function translateGraph(g) {
|
|
|
282
293
|
maxY = Math.max(maxY, y + h / 2);
|
|
283
294
|
}
|
|
284
295
|
|
|
285
|
-
_.forEach(g.nodes(),
|
|
296
|
+
_.forEach(g.nodes(), (v) => {
|
|
286
297
|
getExtremes(g.node(v));
|
|
287
298
|
});
|
|
288
|
-
_.forEach(g.edges(),
|
|
299
|
+
_.forEach(g.edges(), (e) => {
|
|
289
300
|
var edge = g.edge(e);
|
|
290
|
-
if (_.has(edge,
|
|
301
|
+
if (_.has(edge, "x")) {
|
|
291
302
|
getExtremes(edge);
|
|
292
303
|
}
|
|
293
304
|
});
|
|
@@ -295,22 +306,22 @@ function translateGraph(g) {
|
|
|
295
306
|
minX -= marginX;
|
|
296
307
|
minY -= marginY;
|
|
297
308
|
|
|
298
|
-
_.forEach(g.nodes(),
|
|
309
|
+
_.forEach(g.nodes(), (v) => {
|
|
299
310
|
var node = g.node(v);
|
|
300
311
|
node.x -= minX;
|
|
301
312
|
node.y -= minY;
|
|
302
313
|
});
|
|
303
314
|
|
|
304
|
-
_.forEach(g.edges(),
|
|
315
|
+
_.forEach(g.edges(), (e) => {
|
|
305
316
|
var edge = g.edge(e);
|
|
306
|
-
_.forEach(edge.points,
|
|
317
|
+
_.forEach(edge.points, (p) => {
|
|
307
318
|
p.x -= minX;
|
|
308
319
|
p.y -= minY;
|
|
309
320
|
});
|
|
310
|
-
if (_.has(edge,
|
|
321
|
+
if (_.has(edge, "x")) {
|
|
311
322
|
edge.x -= minX;
|
|
312
323
|
}
|
|
313
|
-
if (_.has(edge,
|
|
324
|
+
if (_.has(edge, "y")) {
|
|
314
325
|
edge.y -= minY;
|
|
315
326
|
}
|
|
316
327
|
});
|
|
@@ -320,7 +331,7 @@ function translateGraph(g) {
|
|
|
320
331
|
}
|
|
321
332
|
|
|
322
333
|
function assignNodeIntersects(g) {
|
|
323
|
-
_.forEach(g.edges(),
|
|
334
|
+
_.forEach(g.edges(), (e) => {
|
|
324
335
|
var edge = g.edge(e);
|
|
325
336
|
var nodeV = g.node(e.v);
|
|
326
337
|
var nodeW = g.node(e.w);
|
|
@@ -339,17 +350,17 @@ function assignNodeIntersects(g) {
|
|
|
339
350
|
}
|
|
340
351
|
|
|
341
352
|
function fixupEdgeLabelCoords(g) {
|
|
342
|
-
_.forEach(g.edges(),
|
|
353
|
+
_.forEach(g.edges(), (e) => {
|
|
343
354
|
var edge = g.edge(e);
|
|
344
|
-
if (_.has(edge,
|
|
345
|
-
if (edge.labelpos ===
|
|
355
|
+
if (_.has(edge, "x")) {
|
|
356
|
+
if (edge.labelpos === "l" || edge.labelpos === "r") {
|
|
346
357
|
edge.width -= edge.labeloffset;
|
|
347
358
|
}
|
|
348
359
|
switch (edge.labelpos) {
|
|
349
|
-
case
|
|
360
|
+
case "l":
|
|
350
361
|
edge.x -= edge.width / 2 + edge.labeloffset;
|
|
351
362
|
break;
|
|
352
|
-
case
|
|
363
|
+
case "r":
|
|
353
364
|
edge.x += edge.width / 2 + edge.labeloffset;
|
|
354
365
|
break;
|
|
355
366
|
}
|
|
@@ -358,7 +369,7 @@ function fixupEdgeLabelCoords(g) {
|
|
|
358
369
|
}
|
|
359
370
|
|
|
360
371
|
function reversePointsForReversedEdges(g) {
|
|
361
|
-
_.forEach(g.edges(),
|
|
372
|
+
_.forEach(g.edges(), (e) => {
|
|
362
373
|
var edge = g.edge(e);
|
|
363
374
|
if (edge.reversed) {
|
|
364
375
|
edge.points.reverse();
|
|
@@ -367,7 +378,7 @@ function reversePointsForReversedEdges(g) {
|
|
|
367
378
|
}
|
|
368
379
|
|
|
369
380
|
function removeBorderNodes(g) {
|
|
370
|
-
_.forEach(g.nodes(),
|
|
381
|
+
_.forEach(g.nodes(), (v) => {
|
|
371
382
|
if (g.children(v).length) {
|
|
372
383
|
var node = g.node(v);
|
|
373
384
|
var t = g.node(node.borderTop);
|
|
@@ -382,15 +393,15 @@ function removeBorderNodes(g) {
|
|
|
382
393
|
}
|
|
383
394
|
});
|
|
384
395
|
|
|
385
|
-
_.forEach(g.nodes(),
|
|
386
|
-
if (g.node(v).dummy ===
|
|
396
|
+
_.forEach(g.nodes(), (v) => {
|
|
397
|
+
if (g.node(v).dummy === "border") {
|
|
387
398
|
g.removeNode(v);
|
|
388
399
|
}
|
|
389
400
|
});
|
|
390
401
|
}
|
|
391
402
|
|
|
392
403
|
function removeSelfEdges(g) {
|
|
393
|
-
_.forEach(g.edges(),
|
|
404
|
+
_.forEach(g.edges(), (e) => {
|
|
394
405
|
if (e.v === e.w) {
|
|
395
406
|
var node = g.node(e.v);
|
|
396
407
|
if (!node.selfEdges) {
|
|
@@ -404,15 +415,15 @@ function removeSelfEdges(g) {
|
|
|
404
415
|
|
|
405
416
|
function insertSelfEdges(g) {
|
|
406
417
|
var layers = util.buildLayerMatrix(g);
|
|
407
|
-
_.forEach(layers,
|
|
418
|
+
_.forEach(layers, (layer) => {
|
|
408
419
|
var orderShift = 0;
|
|
409
|
-
_.forEach(layer,
|
|
420
|
+
_.forEach(layer, (v, i) => {
|
|
410
421
|
var node = g.node(v);
|
|
411
422
|
node.order = i + orderShift;
|
|
412
|
-
_.forEach(node.selfEdges,
|
|
423
|
+
_.forEach(node.selfEdges, (selfEdge) => {
|
|
413
424
|
util.addDummyNode(
|
|
414
425
|
g,
|
|
415
|
-
|
|
426
|
+
"selfedge",
|
|
416
427
|
{
|
|
417
428
|
width: selfEdge.label.width,
|
|
418
429
|
height: selfEdge.label.height,
|
|
@@ -421,7 +432,7 @@ function insertSelfEdges(g) {
|
|
|
421
432
|
e: selfEdge.e,
|
|
422
433
|
label: selfEdge.label,
|
|
423
434
|
},
|
|
424
|
-
|
|
435
|
+
"_se",
|
|
425
436
|
);
|
|
426
437
|
});
|
|
427
438
|
delete node.selfEdges;
|
|
@@ -430,9 +441,9 @@ function insertSelfEdges(g) {
|
|
|
430
441
|
}
|
|
431
442
|
|
|
432
443
|
function positionSelfEdges(g) {
|
|
433
|
-
_.forEach(g.nodes(),
|
|
444
|
+
_.forEach(g.nodes(), (v) => {
|
|
434
445
|
var node = g.node(v);
|
|
435
|
-
if (node.dummy ===
|
|
446
|
+
if (node.dummy === "selfedge") {
|
|
436
447
|
var selfNode = g.node(node.e.v);
|
|
437
448
|
var x = selfNode.x + selfNode.width / 2;
|
|
438
449
|
var y = selfNode.y;
|
|
@@ -459,7 +470,7 @@ function selectNumberAttrs(obj, attrs) {
|
|
|
459
470
|
|
|
460
471
|
function canonicalize(attrs) {
|
|
461
472
|
var newAttrs = {};
|
|
462
|
-
_.forEach(attrs,
|
|
473
|
+
_.forEach(attrs, (v, k) => {
|
|
463
474
|
newAttrs[k.toLowerCase()] = v;
|
|
464
475
|
});
|
|
465
476
|
return newAttrs;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ } from
|
|
2
|
-
import * as util from
|
|
1
|
+
import { _ } from "../lodash-es/index.ts";
|
|
2
|
+
import * as util from "./util.js";
|
|
3
3
|
|
|
4
4
|
export { run, cleanup };
|
|
5
5
|
|
|
@@ -27,7 +27,7 @@ export { run, cleanup };
|
|
|
27
27
|
* Graphs."
|
|
28
28
|
*/
|
|
29
29
|
function run(g) {
|
|
30
|
-
var root = util.addDummyNode(g,
|
|
30
|
+
var root = util.addDummyNode(g, "root", {}, "_root");
|
|
31
31
|
var depths = treeDepths(g);
|
|
32
32
|
var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array
|
|
33
33
|
var nodeSep = 2 * height + 1;
|
|
@@ -35,7 +35,7 @@ function run(g) {
|
|
|
35
35
|
g.graph().nestingRoot = root;
|
|
36
36
|
|
|
37
37
|
// Multiply minlen by nodeSep to align nodes on non-border ranks.
|
|
38
|
-
_.forEach(g.edges(),
|
|
38
|
+
_.forEach(g.edges(), (e) => {
|
|
39
39
|
g.edge(e).minlen *= nodeSep;
|
|
40
40
|
});
|
|
41
41
|
|
|
@@ -43,7 +43,7 @@ function run(g) {
|
|
|
43
43
|
var weight = sumWeights(g) + 1;
|
|
44
44
|
|
|
45
45
|
// Create border nodes and link them up
|
|
46
|
-
_.forEach(g.children(),
|
|
46
|
+
_.forEach(g.children(), (child) => {
|
|
47
47
|
dfs(g, root, nodeSep, weight, height, depths, child);
|
|
48
48
|
});
|
|
49
49
|
|
|
@@ -61,8 +61,8 @@ function dfs(g, root, nodeSep, weight, height, depths, v) {
|
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
var top = util.addBorderNode(g,
|
|
65
|
-
var bottom = util.addBorderNode(g,
|
|
64
|
+
var top = util.addBorderNode(g, "_bt");
|
|
65
|
+
var bottom = util.addBorderNode(g, "_bb");
|
|
66
66
|
var label = g.node(v);
|
|
67
67
|
|
|
68
68
|
g.setParent(top, v);
|
|
@@ -70,7 +70,7 @@ function dfs(g, root, nodeSep, weight, height, depths, v) {
|
|
|
70
70
|
g.setParent(bottom, v);
|
|
71
71
|
label.borderBottom = bottom;
|
|
72
72
|
|
|
73
|
-
_.forEach(children,
|
|
73
|
+
_.forEach(children, (child) => {
|
|
74
74
|
dfs(g, root, nodeSep, weight, height, depths, child);
|
|
75
75
|
|
|
76
76
|
var childNode = g.node(child);
|
|
@@ -101,34 +101,28 @@ function treeDepths(g) {
|
|
|
101
101
|
var depths = {};
|
|
102
102
|
function dfs(v, depth) {
|
|
103
103
|
var children = g.children(v);
|
|
104
|
-
if (children
|
|
105
|
-
_.forEach(children,
|
|
104
|
+
if (children?.length) {
|
|
105
|
+
_.forEach(children, (child) => {
|
|
106
106
|
dfs(child, depth + 1);
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
depths[v] = depth;
|
|
110
110
|
}
|
|
111
|
-
_.forEach(g.children(),
|
|
111
|
+
_.forEach(g.children(), (v) => {
|
|
112
112
|
dfs(v, 1);
|
|
113
113
|
});
|
|
114
114
|
return depths;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
function sumWeights(g) {
|
|
118
|
-
return _.reduce(
|
|
119
|
-
g.edges(),
|
|
120
|
-
function (acc, e) {
|
|
121
|
-
return acc + g.edge(e).weight;
|
|
122
|
-
},
|
|
123
|
-
0
|
|
124
|
-
);
|
|
118
|
+
return _.reduce(g.edges(), (acc, e) => acc + g.edge(e).weight, 0);
|
|
125
119
|
}
|
|
126
120
|
|
|
127
121
|
function cleanup(g) {
|
|
128
122
|
var graphLabel = g.graph();
|
|
129
123
|
g.removeNode(graphLabel.nestingRoot);
|
|
130
124
|
delete graphLabel.nestingRoot;
|
|
131
|
-
_.forEach(g.edges(),
|
|
125
|
+
_.forEach(g.edges(), (e) => {
|
|
132
126
|
var edge = g.edge(e);
|
|
133
127
|
if (edge.nestingEdge) {
|
|
134
128
|
g.removeEdge(e);
|
package/src/dagre/normalize.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ } from
|
|
2
|
-
import * as util from
|
|
1
|
+
import { _ } from "../lodash-es/index.ts";
|
|
2
|
+
import * as util from "./util.js";
|
|
3
3
|
|
|
4
4
|
export { run, undo };
|
|
5
5
|
|
|
@@ -21,7 +21,7 @@ export { run, undo };
|
|
|
21
21
|
*/
|
|
22
22
|
function run(g) {
|
|
23
23
|
g.graph().dummyChains = [];
|
|
24
|
-
_.forEach(g.edges(),
|
|
24
|
+
_.forEach(g.edges(), (edge) => {
|
|
25
25
|
normalizeEdge(g, edge);
|
|
26
26
|
});
|
|
27
27
|
}
|
|
@@ -49,12 +49,12 @@ function normalizeEdge(g, e) {
|
|
|
49
49
|
edgeObj: e,
|
|
50
50
|
rank: vRank,
|
|
51
51
|
};
|
|
52
|
-
dummy = util.addDummyNode(g,
|
|
52
|
+
dummy = util.addDummyNode(g, "edge", attrs, "_d");
|
|
53
53
|
if (vRank === labelRank) {
|
|
54
54
|
attrs.width = edgeLabel.width;
|
|
55
55
|
attrs.height = edgeLabel.height;
|
|
56
56
|
// @ts-expect-error
|
|
57
|
-
attrs.dummy =
|
|
57
|
+
attrs.dummy = "edge-label";
|
|
58
58
|
// @ts-expect-error
|
|
59
59
|
attrs.labelpos = edgeLabel.labelpos;
|
|
60
60
|
}
|
|
@@ -69,7 +69,7 @@ function normalizeEdge(g, e) {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
function undo(g) {
|
|
72
|
-
_.forEach(g.graph().dummyChains,
|
|
72
|
+
_.forEach(g.graph().dummyChains, (v) => {
|
|
73
73
|
var node = g.node(v);
|
|
74
74
|
var origLabel = node.edgeLabel;
|
|
75
75
|
var w;
|
|
@@ -78,7 +78,7 @@ function undo(g) {
|
|
|
78
78
|
w = g.successors(v)[0];
|
|
79
79
|
g.removeNode(v);
|
|
80
80
|
origLabel.points.push({ x: node.x, y: node.y });
|
|
81
|
-
if (node.dummy ===
|
|
81
|
+
if (node.dummy === "edge-label") {
|
|
82
82
|
origLabel.x = node.x;
|
|
83
83
|
origLabel.y = node.y;
|
|
84
84
|
origLabel.width = node.width;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ } from
|
|
1
|
+
import { _ } from "../../lodash-es/index.ts";
|
|
2
2
|
|
|
3
3
|
export { addSubgraphConstraints };
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ function addSubgraphConstraints(g, cg, vs) {
|
|
|
6
6
|
var prev = {},
|
|
7
7
|
rootPrev;
|
|
8
8
|
|
|
9
|
-
_.forEach(vs,
|
|
9
|
+
_.forEach(vs, (v) => {
|
|
10
10
|
var child = g.parent(v),
|
|
11
11
|
parent,
|
|
12
12
|
prevChild;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { _ } from
|
|
1
|
+
import { _ } from "../../lodash-es/index.ts";
|
|
2
2
|
|
|
3
3
|
export { barycenter };
|
|
4
4
|
|
|
5
5
|
function barycenter(g, movable) {
|
|
6
|
-
return _.map(movable,
|
|
6
|
+
return _.map(movable, (v) => {
|
|
7
7
|
var inV = g.inEdges(v);
|
|
8
8
|
if (!inV.length) {
|
|
9
9
|
return { v: v };
|
|
10
10
|
} else {
|
|
11
11
|
var result = _.reduce(
|
|
12
12
|
inV,
|
|
13
|
-
|
|
13
|
+
(acc, e) => {
|
|
14
14
|
var edge = g.edge(e),
|
|
15
15
|
nodeU = g.node(e.v);
|
|
16
16
|
return {
|
|
@@ -18,7 +18,7 @@ function barycenter(g, movable) {
|
|
|
18
18
|
weight: acc.weight + edge.weight,
|
|
19
19
|
};
|
|
20
20
|
},
|
|
21
|
-
{ sum: 0, weight: 0 }
|
|
21
|
+
{ sum: 0, weight: 0 },
|
|
22
22
|
);
|
|
23
23
|
|
|
24
24
|
return {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export function buildLayerGraph(g: any, rank: any, relationship: any): Graph;
|
|
2
|
-
import { Graph } from
|
|
2
|
+
import { Graph } from "../../graphlib/index.js";
|