@antv/layout 0.1.19-beta.4 → 0.1.21
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/CHANGELOG.md +22 -0
- package/dist/layout.min.js +1 -1
- package/dist/layout.min.js.LICENSE.txt +9 -0
- package/dist/layout.min.js.map +1 -1
- package/es/layout/comboForce.js +4 -19
- package/es/layout/comboForce.js.map +1 -1
- package/es/layout/dagre/index.d.ts +9 -0
- package/es/layout/dagre/index.js +33 -0
- package/es/layout/dagre/index.js.map +1 -0
- package/es/layout/dagre/src/acyclic.d.ts +7 -0
- package/es/layout/dagre/src/acyclic.js +52 -0
- package/es/layout/dagre/src/acyclic.js.map +1 -0
- package/es/layout/dagre/src/add-border-segments.d.ts +4 -0
- package/es/layout/dagre/src/add-border-segments.js +32 -0
- package/es/layout/dagre/src/add-border-segments.js.map +1 -0
- package/es/layout/dagre/src/coordinate-system.d.ts +7 -0
- package/es/layout/dagre/src/coordinate-system.js +57 -0
- package/es/layout/dagre/src/coordinate-system.js.map +1 -0
- package/es/layout/dagre/src/data/list.d.ts +8 -0
- package/es/layout/dagre/src/data/list.js +50 -0
- package/es/layout/dagre/src/data/list.js.map +1 -0
- package/es/layout/dagre/src/debug.d.ts +4 -0
- package/es/layout/dagre/src/debug.js +26 -0
- package/es/layout/dagre/src/debug.js.map +1 -0
- package/es/layout/dagre/src/graphlib.d.ts +2 -0
- package/es/layout/dagre/src/graphlib.js +8 -0
- package/es/layout/dagre/src/graphlib.js.map +1 -0
- package/es/layout/dagre/src/greedy-fas.d.ts +4 -0
- package/es/layout/dagre/src/greedy-fas.js +113 -0
- package/es/layout/dagre/src/greedy-fas.js.map +1 -0
- package/es/layout/dagre/src/layout.d.ts +4 -0
- package/es/layout/dagre/src/layout.js +435 -0
- package/es/layout/dagre/src/layout.js.map +1 -0
- package/es/layout/dagre/src/nesting-graph.d.ts +7 -0
- package/es/layout/dagre/src/nesting-graph.js +112 -0
- package/es/layout/dagre/src/nesting-graph.js.map +1 -0
- package/es/layout/dagre/src/normalize.d.ts +7 -0
- package/es/layout/dagre/src/normalize.js +88 -0
- package/es/layout/dagre/src/normalize.js.map +1 -0
- package/es/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
- package/es/layout/dagre/src/order/add-subgraph-constraints.js +27 -0
- package/es/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
- package/es/layout/dagre/src/order/barycenter.d.ts +12 -0
- package/es/layout/dagre/src/order/barycenter.js +24 -0
- package/es/layout/dagre/src/order/barycenter.js.map +1 -0
- package/es/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
- package/es/layout/dagre/src/order/build-layer-graph.js +67 -0
- package/es/layout/dagre/src/order/build-layer-graph.js.map +1 -0
- package/es/layout/dagre/src/order/cross-count.d.ts +4 -0
- package/es/layout/dagre/src/order/cross-count.js +64 -0
- package/es/layout/dagre/src/order/cross-count.js.map +1 -0
- package/es/layout/dagre/src/order/index.d.ts +4 -0
- package/es/layout/dagre/src/order/index.js +88 -0
- package/es/layout/dagre/src/order/index.js.map +1 -0
- package/es/layout/dagre/src/order/init-data-order.d.ts +7 -0
- package/es/layout/dagre/src/order/init-data-order.js +25 -0
- package/es/layout/dagre/src/order/init-data-order.js.map +1 -0
- package/es/layout/dagre/src/order/init-order.d.ts +4 -0
- package/es/layout/dagre/src/order/init-order.js +49 -0
- package/es/layout/dagre/src/order/init-order.js.map +1 -0
- package/es/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
- package/es/layout/dagre/src/order/resolve-conflicts.js +111 -0
- package/es/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
- package/es/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
- package/es/layout/dagre/src/order/sort-subgraph.js +79 -0
- package/es/layout/dagre/src/order/sort-subgraph.js.map +1 -0
- package/es/layout/dagre/src/order/sort.d.ts +2 -0
- package/es/layout/dagre/src/order/sort.js +67 -0
- package/es/layout/dagre/src/order/sort.js.map +1 -0
- package/es/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
- package/es/layout/dagre/src/parent-dummy-chains.js +78 -0
- package/es/layout/dagre/src/parent-dummy-chains.js.map +1 -0
- package/es/layout/dagre/src/position/bk.d.ts +32 -0
- package/es/layout/dagre/src/position/bk.js +402 -0
- package/es/layout/dagre/src/position/bk.js.map +1 -0
- package/es/layout/dagre/src/position/index.d.ts +4 -0
- package/es/layout/dagre/src/position/index.js +53 -0
- package/es/layout/dagre/src/position/index.js.map +1 -0
- package/es/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
- package/es/layout/dagre/src/rank/feasible-tree.js +149 -0
- package/es/layout/dagre/src/rank/feasible-tree.js.map +1 -0
- package/es/layout/dagre/src/rank/index.d.ts +4 -0
- package/es/layout/dagre/src/rank/index.js +53 -0
- package/es/layout/dagre/src/rank/index.js.map +1 -0
- package/es/layout/dagre/src/rank/network-simplex.d.ts +12 -0
- package/es/layout/dagre/src/rank/network-simplex.js +207 -0
- package/es/layout/dagre/src/rank/network-simplex.js.map +1 -0
- package/es/layout/dagre/src/rank/util.d.ts +12 -0
- package/es/layout/dagre/src/rank/util.js +109 -0
- package/es/layout/dagre/src/rank/util.js.map +1 -0
- package/es/layout/dagre/src/util.d.ts +50 -0
- package/es/layout/dagre/src/util.js +260 -0
- package/es/layout/dagre/src/util.js.map +1 -0
- package/es/layout/dagre.d.ts +3 -3
- package/es/layout/dagre.js +35 -11
- package/es/layout/dagre.js.map +1 -1
- package/es/layout/force/force-in-a-box.js +1 -0
- package/es/layout/force/force-in-a-box.js.map +1 -1
- package/es/layout/fruchterman.js +12 -36
- package/es/layout/fruchterman.js.map +1 -1
- package/es/layout/index.d.ts +2 -1
- package/es/layout/index.js +2 -1
- package/es/layout/index.js.map +1 -1
- package/es/layout/layout.js +33 -11
- package/es/layout/layout.js.map +1 -1
- package/es/layout/types.d.ts +2 -2
- package/es/registy/index.d.ts +1 -1
- package/es/registy/index.js +1 -0
- package/es/registy/index.js.map +1 -1
- package/lib/layout/comboForce.js +4 -19
- package/lib/layout/comboForce.js.map +1 -1
- package/lib/layout/dagre/index.d.ts +9 -0
- package/lib/layout/dagre/index.js +38 -0
- package/lib/layout/dagre/index.js.map +1 -0
- package/lib/layout/dagre/src/acyclic.d.ts +7 -0
- package/lib/layout/dagre/src/acyclic.js +57 -0
- package/lib/layout/dagre/src/acyclic.js.map +1 -0
- package/lib/layout/dagre/src/add-border-segments.d.ts +4 -0
- package/lib/layout/dagre/src/add-border-segments.js +37 -0
- package/lib/layout/dagre/src/add-border-segments.js.map +1 -0
- package/lib/layout/dagre/src/coordinate-system.d.ts +7 -0
- package/lib/layout/dagre/src/coordinate-system.js +59 -0
- package/lib/layout/dagre/src/coordinate-system.js.map +1 -0
- package/lib/layout/dagre/src/data/list.d.ts +8 -0
- package/lib/layout/dagre/src/data/list.js +53 -0
- package/lib/layout/dagre/src/data/list.js.map +1 -0
- package/lib/layout/dagre/src/debug.d.ts +4 -0
- package/lib/layout/dagre/src/debug.js +31 -0
- package/lib/layout/dagre/src/debug.js.map +1 -0
- package/lib/layout/dagre/src/graphlib.d.ts +2 -0
- package/lib/layout/dagre/src/graphlib.js +13 -0
- package/lib/layout/dagre/src/graphlib.js.map +1 -0
- package/lib/layout/dagre/src/greedy-fas.d.ts +4 -0
- package/lib/layout/dagre/src/greedy-fas.js +118 -0
- package/lib/layout/dagre/src/greedy-fas.js.map +1 -0
- package/lib/layout/dagre/src/layout.d.ts +4 -0
- package/lib/layout/dagre/src/layout.js +459 -0
- package/lib/layout/dagre/src/layout.js.map +1 -0
- package/lib/layout/dagre/src/nesting-graph.d.ts +7 -0
- package/lib/layout/dagre/src/nesting-graph.js +117 -0
- package/lib/layout/dagre/src/nesting-graph.js.map +1 -0
- package/lib/layout/dagre/src/normalize.d.ts +7 -0
- package/lib/layout/dagre/src/normalize.js +93 -0
- package/lib/layout/dagre/src/normalize.js.map +1 -0
- package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
- package/lib/layout/dagre/src/order/add-subgraph-constraints.js +29 -0
- package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
- package/lib/layout/dagre/src/order/barycenter.d.ts +12 -0
- package/lib/layout/dagre/src/order/barycenter.js +26 -0
- package/lib/layout/dagre/src/order/barycenter.js.map +1 -0
- package/lib/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
- package/lib/layout/dagre/src/order/build-layer-graph.js +72 -0
- package/lib/layout/dagre/src/order/build-layer-graph.js.map +1 -0
- package/lib/layout/dagre/src/order/cross-count.d.ts +4 -0
- package/lib/layout/dagre/src/order/cross-count.js +66 -0
- package/lib/layout/dagre/src/order/cross-count.js.map +1 -0
- package/lib/layout/dagre/src/order/index.d.ts +4 -0
- package/lib/layout/dagre/src/order/index.js +93 -0
- package/lib/layout/dagre/src/order/index.js.map +1 -0
- package/lib/layout/dagre/src/order/init-data-order.d.ts +7 -0
- package/lib/layout/dagre/src/order/init-data-order.js +27 -0
- package/lib/layout/dagre/src/order/init-data-order.js.map +1 -0
- package/lib/layout/dagre/src/order/init-order.d.ts +4 -0
- package/lib/layout/dagre/src/order/init-order.js +51 -0
- package/lib/layout/dagre/src/order/init-order.js.map +1 -0
- package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
- package/lib/layout/dagre/src/order/resolve-conflicts.js +116 -0
- package/lib/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
- package/lib/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
- package/lib/layout/dagre/src/order/sort-subgraph.js +84 -0
- package/lib/layout/dagre/src/order/sort-subgraph.js.map +1 -0
- package/lib/layout/dagre/src/order/sort.d.ts +2 -0
- package/lib/layout/dagre/src/order/sort.js +72 -0
- package/lib/layout/dagre/src/order/sort.js.map +1 -0
- package/lib/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
- package/lib/layout/dagre/src/parent-dummy-chains.js +80 -0
- package/lib/layout/dagre/src/parent-dummy-chains.js.map +1 -0
- package/lib/layout/dagre/src/position/bk.d.ts +32 -0
- package/lib/layout/dagre/src/position/bk.js +417 -0
- package/lib/layout/dagre/src/position/bk.js.map +1 -0
- package/lib/layout/dagre/src/position/index.d.ts +4 -0
- package/lib/layout/dagre/src/position/index.js +58 -0
- package/lib/layout/dagre/src/position/index.js.map +1 -0
- package/lib/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
- package/lib/layout/dagre/src/rank/feasible-tree.js +156 -0
- package/lib/layout/dagre/src/rank/feasible-tree.js.map +1 -0
- package/lib/layout/dagre/src/rank/index.d.ts +4 -0
- package/lib/layout/dagre/src/rank/index.js +58 -0
- package/lib/layout/dagre/src/rank/index.js.map +1 -0
- package/lib/layout/dagre/src/rank/network-simplex.d.ts +12 -0
- package/lib/layout/dagre/src/rank/network-simplex.js +212 -0
- package/lib/layout/dagre/src/rank/network-simplex.js.map +1 -0
- package/lib/layout/dagre/src/rank/util.d.ts +12 -0
- package/lib/layout/dagre/src/rank/util.js +114 -0
- package/lib/layout/dagre/src/rank/util.js.map +1 -0
- package/lib/layout/dagre/src/util.d.ts +50 -0
- package/lib/layout/dagre/src/util.js +281 -0
- package/lib/layout/dagre/src/util.js.map +1 -0
- package/lib/layout/dagre.d.ts +3 -3
- package/lib/layout/dagre.js +37 -13
- package/lib/layout/dagre.js.map +1 -1
- package/lib/layout/force/force-in-a-box.js +1 -0
- package/lib/layout/force/force-in-a-box.js.map +1 -1
- package/lib/layout/fruchterman.js +12 -36
- package/lib/layout/fruchterman.js.map +1 -1
- package/lib/layout/index.d.ts +2 -1
- package/lib/layout/index.js +3 -1
- package/lib/layout/index.js.map +1 -1
- package/lib/layout/layout.js +32 -10
- package/lib/layout/layout.js.map +1 -1
- package/lib/layout/types.d.ts +2 -2
- package/lib/registy/index.d.ts +1 -1
- package/lib/registy/index.js +1 -0
- package/lib/registy/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Assigns an initial order value for each node by performing a DFS search
|
|
3
|
+
* starting from nodes in the first rank. Nodes are assigned an order in their
|
|
4
|
+
* rank as they are first visited.
|
|
5
|
+
*
|
|
6
|
+
* This approach comes from Gansner, et al., "A Technique for Drawing Directed
|
|
7
|
+
* Graphs."
|
|
8
|
+
*
|
|
9
|
+
* Returns a layering matrix with an array per layer and each layer sorted by
|
|
10
|
+
* the order of its nodes.
|
|
11
|
+
*/
|
|
12
|
+
const initOrder = (g) => {
|
|
13
|
+
const visited = {};
|
|
14
|
+
const simpleNodes = g.nodes().filter((v) => {
|
|
15
|
+
var _a;
|
|
16
|
+
return !((_a = g.children(v)) === null || _a === void 0 ? void 0 : _a.length);
|
|
17
|
+
});
|
|
18
|
+
const nodeRanks = simpleNodes.map((v) => g.node(v).rank);
|
|
19
|
+
const maxRank = Math.max(...nodeRanks);
|
|
20
|
+
const layers = [];
|
|
21
|
+
for (let i = 0; i < maxRank + 1; i++) {
|
|
22
|
+
layers.push([]);
|
|
23
|
+
}
|
|
24
|
+
// const layers = _.map(_.range(maxRank + 1), function() { return []; });
|
|
25
|
+
const dfs = (v) => {
|
|
26
|
+
var _a;
|
|
27
|
+
if (visited.hasOwnProperty(v))
|
|
28
|
+
return;
|
|
29
|
+
visited[v] = true;
|
|
30
|
+
const node = g.node(v);
|
|
31
|
+
layers[node.rank].push(v);
|
|
32
|
+
(_a = g.successors(v)) === null || _a === void 0 ? void 0 : _a.forEach((child) => dfs(child));
|
|
33
|
+
};
|
|
34
|
+
const orderedVs = simpleNodes.sort((a, b) => g.node(a).rank - g.node(b).rank);
|
|
35
|
+
// const orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; });
|
|
36
|
+
// 有fixOrder的,直接排序好放进去
|
|
37
|
+
const beforeSort = orderedVs.filter((n) => {
|
|
38
|
+
return g.node(n).fixorder !== undefined;
|
|
39
|
+
});
|
|
40
|
+
const fixOrderNodes = beforeSort.sort((a, b) => g.node(a).fixorder - g.node(b).fixorder);
|
|
41
|
+
fixOrderNodes.forEach((n) => {
|
|
42
|
+
layers[g.node(n).rank].push(n);
|
|
43
|
+
visited[n] = true;
|
|
44
|
+
});
|
|
45
|
+
orderedVs.forEach(dfs);
|
|
46
|
+
return layers;
|
|
47
|
+
};
|
|
48
|
+
export default initOrder;
|
|
49
|
+
//# sourceMappingURL=init-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-order.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/init-order.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,MAAM,SAAS,GAAG,CAAC,CAAQ,EAAE,EAAE;IAC7B,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;;QACzC,OAAO,CAAC,CAAA,MAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAA,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACvC,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACjB;IACD,yEAAyE;IAEzE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE;;QACxB,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO;QACtC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAClB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAA,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAY,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,GAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,CAAC,CAAC;IACtG,mFAAmF;IAEnF,sBAAsB;IACtB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACxC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAmB,GAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAmB,CAAC,CAAC;IACjH,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Given a list of entries of the form {v, barycenter, weight} and a
|
|
3
|
+
* constraint graph this function will resolve any conflicts between the
|
|
4
|
+
* constraint graph and the barycenters for the entries. If the barycenters for
|
|
5
|
+
* an entry would violate a constraint in the constraint graph then we coalesce
|
|
6
|
+
* the nodes in the conflict into a new node that respects the contraint and
|
|
7
|
+
* aggregates barycenter and weight information.
|
|
8
|
+
*
|
|
9
|
+
* This implementation is based on the description in Forster, "A Fast and
|
|
10
|
+
* Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it
|
|
11
|
+
* differs in some specific details.
|
|
12
|
+
*
|
|
13
|
+
* Pre-conditions:
|
|
14
|
+
*
|
|
15
|
+
* 1. Each entry has the form {v, barycenter, weight}, or if the node has
|
|
16
|
+
* no barycenter, then {v}.
|
|
17
|
+
*
|
|
18
|
+
* Returns:
|
|
19
|
+
*
|
|
20
|
+
* A new list of entries of the form {vs, i, barycenter, weight}. The list
|
|
21
|
+
* `vs` may either be a singleton or it may be an aggregation of nodes
|
|
22
|
+
* ordered such that they do not violate constraints from the constraint
|
|
23
|
+
* graph. The property `i` is the lowest original index of any of the
|
|
24
|
+
* elements in `vs`.
|
|
25
|
+
*/
|
|
26
|
+
const resolveConflicts = (entries, cg) => {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
const mappedEntries = {};
|
|
29
|
+
entries.forEach((entry, i) => {
|
|
30
|
+
const tmp = mappedEntries[entry.v] = {
|
|
31
|
+
i,
|
|
32
|
+
indegree: 0,
|
|
33
|
+
"in": [],
|
|
34
|
+
out: [],
|
|
35
|
+
vs: [entry.v],
|
|
36
|
+
};
|
|
37
|
+
if (entry.barycenter !== undefined) {
|
|
38
|
+
tmp.barycenter = entry.barycenter;
|
|
39
|
+
tmp.weight = entry.weight;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
cg.edges().forEach((e) => {
|
|
43
|
+
const entryV = mappedEntries[e.v];
|
|
44
|
+
const entryW = mappedEntries[e.w];
|
|
45
|
+
if (entryV !== undefined && entryW !== undefined) {
|
|
46
|
+
entryW.indegree++;
|
|
47
|
+
entryV.out.push(mappedEntries[e.w]);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// @ts-ignore
|
|
51
|
+
const sourceSet = (_b = (_a = Object.values(mappedEntries)).filter) === null || _b === void 0 ? void 0 : _b.call(_a, (entry) => !entry.indegree);
|
|
52
|
+
return doResolveConflicts(sourceSet);
|
|
53
|
+
};
|
|
54
|
+
const doResolveConflicts = (sourceSet) => {
|
|
55
|
+
const entries = [];
|
|
56
|
+
const handleIn = (vEntry) => {
|
|
57
|
+
return (uEntry) => {
|
|
58
|
+
if (uEntry.merged)
|
|
59
|
+
return;
|
|
60
|
+
if (uEntry.barycenter !== undefined ||
|
|
61
|
+
vEntry.barycenter !== undefined ||
|
|
62
|
+
uEntry.barycenter >= vEntry.barycenter) {
|
|
63
|
+
mergeEntries(vEntry, uEntry);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
const handleOut = (vEntry) => {
|
|
68
|
+
return (wEntry) => {
|
|
69
|
+
wEntry["in"].push(vEntry);
|
|
70
|
+
if (--wEntry.indegree === 0) {
|
|
71
|
+
sourceSet.push(wEntry);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
while (sourceSet === null || sourceSet === void 0 ? void 0 : sourceSet.length) {
|
|
76
|
+
const entry = sourceSet.pop();
|
|
77
|
+
entries.push(entry);
|
|
78
|
+
entry["in"].reverse().forEach((e) => handleIn(entry));
|
|
79
|
+
entry.out.forEach((e) => handleOut(entry));
|
|
80
|
+
}
|
|
81
|
+
const filtered = entries.filter((entry) => !entry.merged);
|
|
82
|
+
const keys = ["vs", "i", "barycenter", "weight"];
|
|
83
|
+
return filtered.map((entry) => {
|
|
84
|
+
const picked = {};
|
|
85
|
+
keys.forEach((key) => {
|
|
86
|
+
if (entry[key] === undefined)
|
|
87
|
+
return;
|
|
88
|
+
picked[key] = entry[key];
|
|
89
|
+
});
|
|
90
|
+
return picked;
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
const mergeEntries = (target, source) => {
|
|
94
|
+
let sum = 0;
|
|
95
|
+
let weight = 0;
|
|
96
|
+
if (target.weight) {
|
|
97
|
+
sum += target.barycenter * target.weight;
|
|
98
|
+
weight += target.weight;
|
|
99
|
+
}
|
|
100
|
+
if (source.weight) {
|
|
101
|
+
sum += source.barycenter * source.weight;
|
|
102
|
+
weight += source.weight;
|
|
103
|
+
}
|
|
104
|
+
target.vs = source.vs.concat(target.vs);
|
|
105
|
+
target.barycenter = sum / weight;
|
|
106
|
+
target.weight = weight;
|
|
107
|
+
target.i = Math.min(source.i, target.i);
|
|
108
|
+
source.merged = true;
|
|
109
|
+
};
|
|
110
|
+
export default resolveConflicts;
|
|
111
|
+
//# sourceMappingURL=resolve-conflicts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-conflicts.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/resolve-conflicts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import barycenter from './barycenter';
|
|
2
|
+
import resolveConflicts from './resolve-conflicts';
|
|
3
|
+
import sort from './sort';
|
|
4
|
+
const sortSubgraph = (g, v, cg, biasRight, usePrev) => {
|
|
5
|
+
var _a, _b, _c;
|
|
6
|
+
let movable = g.children(v);
|
|
7
|
+
// fixorder的点不参与排序(这个方案不合适,只排了新增节点,和原来的分离)
|
|
8
|
+
const node = g.node(v);
|
|
9
|
+
const bl = node ? node.borderLeft : undefined;
|
|
10
|
+
const br = node ? node.borderRight : undefined;
|
|
11
|
+
const subgraphs = {};
|
|
12
|
+
if (bl) {
|
|
13
|
+
movable = movable === null || movable === void 0 ? void 0 : movable.filter((w) => {
|
|
14
|
+
return w !== bl && w !== br;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const barycenters = barycenter(g, movable || []);
|
|
18
|
+
barycenters.forEach((entry) => {
|
|
19
|
+
var _a;
|
|
20
|
+
if ((_a = g.children(entry.v)) === null || _a === void 0 ? void 0 : _a.length) {
|
|
21
|
+
const subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);
|
|
22
|
+
subgraphs[entry.v] = subgraphResult;
|
|
23
|
+
if (subgraphResult.hasOwnProperty("barycenter")) {
|
|
24
|
+
mergeBarycenters(entry, subgraphResult);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const entries = resolveConflicts(barycenters, cg);
|
|
29
|
+
expandSubgraphs(entries, subgraphs);
|
|
30
|
+
// 添加fixorder信息到entries里边
|
|
31
|
+
// TODO: 不考虑复合情况,只用第一个点的fixorder信息,后续考虑更完备的实现
|
|
32
|
+
entries.forEach((e) => {
|
|
33
|
+
const node = g.node(e.vs[0]);
|
|
34
|
+
e.fixorder = node.fixorder;
|
|
35
|
+
e.order = node.order;
|
|
36
|
+
});
|
|
37
|
+
const result = sort(entries, biasRight, usePrev);
|
|
38
|
+
if (bl) {
|
|
39
|
+
// @ts-ignore
|
|
40
|
+
result.vs = [bl, result.vs, br].flat();
|
|
41
|
+
if ((_a = g.predecessors(bl)) === null || _a === void 0 ? void 0 : _a.length) {
|
|
42
|
+
const blPred = g.node(((_b = g.predecessors(bl)) === null || _b === void 0 ? void 0 : _b[0]) || {});
|
|
43
|
+
const brPred = g.node(((_c = g.predecessors(br)) === null || _c === void 0 ? void 0 : _c[0]) || {});
|
|
44
|
+
if (!result.hasOwnProperty("barycenter")) {
|
|
45
|
+
result.barycenter = 0;
|
|
46
|
+
result.weight = 0;
|
|
47
|
+
}
|
|
48
|
+
result.barycenter = (result.barycenter * result.weight +
|
|
49
|
+
blPred.order + brPred.order) / (result.weight + 2);
|
|
50
|
+
result.weight += 2;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
const expandSubgraphs = (entries, subgraphs) => {
|
|
56
|
+
entries.forEach((entry) => {
|
|
57
|
+
const vss = entry.vs.map((v) => {
|
|
58
|
+
if (subgraphs[v]) {
|
|
59
|
+
return subgraphs[v].vs;
|
|
60
|
+
}
|
|
61
|
+
return v;
|
|
62
|
+
});
|
|
63
|
+
entry.vs = vss.flat();
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
const mergeBarycenters = (target, other) => {
|
|
67
|
+
if (target.barycenter !== undefined) {
|
|
68
|
+
target.barycenter = (target.barycenter * target.weight +
|
|
69
|
+
other.barycenter * other.weight) /
|
|
70
|
+
(target.weight + other.weight);
|
|
71
|
+
target.weight += other.weight;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
target.barycenter = other.barycenter;
|
|
75
|
+
target.weight = other.weight;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
export default sortSubgraph;
|
|
79
|
+
//# sourceMappingURL=sort-subgraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-subgraph.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/sort-subgraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import util from '../util';
|
|
2
|
+
const sort = (entries, biasRight, usePrev) => {
|
|
3
|
+
const parts = util.partition(entries, (entry) => {
|
|
4
|
+
// NOTE: 有fixorder的也可以排
|
|
5
|
+
return (entry.hasOwnProperty("fixorder") && !isNaN(entry.fixorder)) || entry.hasOwnProperty("barycenter");
|
|
6
|
+
});
|
|
7
|
+
const sortable = parts.lhs;
|
|
8
|
+
const unsortable = parts.rhs.sort((a, b) => -a.i - (-b.i));
|
|
9
|
+
const vs = [];
|
|
10
|
+
let sum = 0;
|
|
11
|
+
let weight = 0;
|
|
12
|
+
let vsIndex = 0;
|
|
13
|
+
sortable.sort(compareWithBias(!!biasRight, !!usePrev));
|
|
14
|
+
vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
|
|
15
|
+
sortable.forEach((entry) => {
|
|
16
|
+
vsIndex += entry.vs.length;
|
|
17
|
+
vs.push(entry.vs);
|
|
18
|
+
sum += entry.barycenter * entry.weight;
|
|
19
|
+
weight += entry.weight;
|
|
20
|
+
vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
|
|
21
|
+
});
|
|
22
|
+
const result = { vs: vs.flat() };
|
|
23
|
+
if (weight) {
|
|
24
|
+
result.barycenter = sum / weight;
|
|
25
|
+
result.weight = weight;
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
29
|
+
const consumeUnsortable = (vs, unsortable, index) => {
|
|
30
|
+
let iindex = index;
|
|
31
|
+
let last;
|
|
32
|
+
while (unsortable.length && (last = unsortable[unsortable.length - 1]).i <= iindex) {
|
|
33
|
+
unsortable.pop();
|
|
34
|
+
vs.push(last.vs);
|
|
35
|
+
iindex++;
|
|
36
|
+
}
|
|
37
|
+
return iindex;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* 配置是否考虑使用之前的布局结果
|
|
41
|
+
*/
|
|
42
|
+
const compareWithBias = (bias, usePrev) => {
|
|
43
|
+
return (entryV, entryW) => {
|
|
44
|
+
// 排序的时候先判断fixorder,不行再判断重心
|
|
45
|
+
if (entryV.fixorder !== undefined && entryW.fixorder !== undefined) {
|
|
46
|
+
return entryV.fixorder - entryW.fixorder;
|
|
47
|
+
}
|
|
48
|
+
if (entryV.barycenter < entryW.barycenter) {
|
|
49
|
+
return -1;
|
|
50
|
+
}
|
|
51
|
+
if (entryV.barycenter > entryW.barycenter) {
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
// 重心相同,考虑之前排好的顺序
|
|
55
|
+
if (usePrev && entryV.order !== undefined && entryW.order !== undefined) {
|
|
56
|
+
if (entryV.order < entryW.order) {
|
|
57
|
+
return -1;
|
|
58
|
+
}
|
|
59
|
+
if (entryV.order > entryW.order) {
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
export default sort;
|
|
67
|
+
//# sourceMappingURL=sort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/sort.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const parentDummyChains = (g) => {
|
|
2
|
+
var _a;
|
|
3
|
+
const postorderNums = postorder(g);
|
|
4
|
+
(_a = g.graph().dummyChains) === null || _a === void 0 ? void 0 : _a.forEach((v) => {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
let node = g.node(v);
|
|
7
|
+
const edgeObj = node.edgeObj;
|
|
8
|
+
if (!edgeObj)
|
|
9
|
+
return;
|
|
10
|
+
const pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);
|
|
11
|
+
const path = pathData.path;
|
|
12
|
+
const lca = pathData.lca;
|
|
13
|
+
let pathIdx = 0;
|
|
14
|
+
let pathV = path[pathIdx];
|
|
15
|
+
let ascending = true;
|
|
16
|
+
while (v !== edgeObj.w) {
|
|
17
|
+
node = g.node(v);
|
|
18
|
+
if (ascending) {
|
|
19
|
+
while ((pathV = path[pathIdx]) !== lca &&
|
|
20
|
+
g.node(pathV).maxRank < node.rank) {
|
|
21
|
+
pathIdx++;
|
|
22
|
+
}
|
|
23
|
+
if (pathV === lca) {
|
|
24
|
+
ascending = false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (!ascending) {
|
|
28
|
+
while (pathIdx < path.length - 1 &&
|
|
29
|
+
((_a = g.node(pathV = path[pathIdx + 1])) === null || _a === void 0 ? void 0 : _a.minRank) <= node.rank) {
|
|
30
|
+
pathIdx++;
|
|
31
|
+
}
|
|
32
|
+
pathV = path[pathIdx];
|
|
33
|
+
}
|
|
34
|
+
g.setParent(v, pathV);
|
|
35
|
+
// tslint:disable-next-line
|
|
36
|
+
v = (_b = g.successors(v)) === null || _b === void 0 ? void 0 : _b[0];
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
// Find a path from v to w through the lowest common ancestor (LCA). Return the
|
|
41
|
+
// full path and the LCA.
|
|
42
|
+
const findPath = (g, postorderNums, v, w) => {
|
|
43
|
+
const vPath = [];
|
|
44
|
+
const wPath = [];
|
|
45
|
+
const low = Math.min(postorderNums[v].low, postorderNums[w].low);
|
|
46
|
+
const lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);
|
|
47
|
+
let parent;
|
|
48
|
+
let lca;
|
|
49
|
+
// Traverse up from v to find the LCA
|
|
50
|
+
parent = v;
|
|
51
|
+
do {
|
|
52
|
+
parent = g.parent(parent);
|
|
53
|
+
vPath.push(parent);
|
|
54
|
+
} while (parent &&
|
|
55
|
+
(postorderNums[parent].low > low || lim > postorderNums[parent].lim));
|
|
56
|
+
lca = parent;
|
|
57
|
+
// Traverse from w to LCA
|
|
58
|
+
parent = w;
|
|
59
|
+
while ((parent = g.parent(parent)) !== lca) {
|
|
60
|
+
wPath.push(parent);
|
|
61
|
+
}
|
|
62
|
+
return { lca, path: vPath.concat(wPath.reverse()) };
|
|
63
|
+
};
|
|
64
|
+
const postorder = (g) => {
|
|
65
|
+
var _a;
|
|
66
|
+
const result = {};
|
|
67
|
+
let lim = 0;
|
|
68
|
+
const dfs = (v) => {
|
|
69
|
+
var _a;
|
|
70
|
+
const low = lim;
|
|
71
|
+
(_a = g.children(v)) === null || _a === void 0 ? void 0 : _a.forEach(dfs);
|
|
72
|
+
result[v] = { low, lim: lim++ };
|
|
73
|
+
};
|
|
74
|
+
(_a = g.children()) === null || _a === void 0 ? void 0 : _a.forEach(dfs);
|
|
75
|
+
return result;
|
|
76
|
+
};
|
|
77
|
+
export default parentDummyChains;
|
|
78
|
+
//# sourceMappingURL=parent-dummy-chains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent-dummy-chains.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/parent-dummy-chains.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { graphlib as IGraphLib } from '../../graphlib';
|
|
2
|
+
declare type IGraph = IGraphLib.Graph;
|
|
3
|
+
declare const findType1Conflicts: (g: IGraph, layering?: any) => {};
|
|
4
|
+
declare const findType2Conflicts: (g: IGraph, layering?: any) => {};
|
|
5
|
+
declare const addConflict: (conflicts: any, v: number, w: number) => void;
|
|
6
|
+
declare const hasConflict: (conflicts: any, v: number, w: number) => any;
|
|
7
|
+
declare const verticalAlignment: (g: IGraph, layering: any, conflicts: any, neighborFn: (v: string) => unknown) => {
|
|
8
|
+
root: any;
|
|
9
|
+
align: any;
|
|
10
|
+
};
|
|
11
|
+
declare const horizontalCompaction: (g: IGraph, layering: any, root: string, align: string[], reverseSep: boolean) => any;
|
|
12
|
+
declare const findSmallestWidthAlignment: (g: IGraph, xss: any) => undefined;
|
|
13
|
+
declare function alignCoordinates(xss: any, alignTo: any): void;
|
|
14
|
+
declare const balance: (xss: any, align: string) => any;
|
|
15
|
+
declare const positionX: (g: IGraph) => any;
|
|
16
|
+
export { positionX, findType1Conflicts, findType2Conflicts, addConflict, hasConflict, verticalAlignment, horizontalCompaction, alignCoordinates, findSmallestWidthAlignment, balance };
|
|
17
|
+
declare const _default: {
|
|
18
|
+
positionX: (g: IGraph) => any;
|
|
19
|
+
findType1Conflicts: (g: IGraph, layering?: any) => {};
|
|
20
|
+
findType2Conflicts: (g: IGraph, layering?: any) => {};
|
|
21
|
+
addConflict: (conflicts: any, v: number, w: number) => void;
|
|
22
|
+
hasConflict: (conflicts: any, v: number, w: number) => any;
|
|
23
|
+
verticalAlignment: (g: IGraph, layering: any, conflicts: any, neighborFn: (v: string) => unknown) => {
|
|
24
|
+
root: any;
|
|
25
|
+
align: any;
|
|
26
|
+
};
|
|
27
|
+
horizontalCompaction: (g: IGraph, layering: any, root: string, align: string[], reverseSep: boolean) => any;
|
|
28
|
+
alignCoordinates: typeof alignCoordinates;
|
|
29
|
+
findSmallestWidthAlignment: (g: IGraph, xss: any) => undefined;
|
|
30
|
+
balance: (xss: any, align: string) => any;
|
|
31
|
+
};
|
|
32
|
+
export default _default;
|