@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.
Files changed (215) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/layout.min.js +1 -1
  3. package/dist/layout.min.js.LICENSE.txt +9 -0
  4. package/dist/layout.min.js.map +1 -1
  5. package/es/layout/comboForce.js +4 -19
  6. package/es/layout/comboForce.js.map +1 -1
  7. package/es/layout/dagre/index.d.ts +9 -0
  8. package/es/layout/dagre/index.js +33 -0
  9. package/es/layout/dagre/index.js.map +1 -0
  10. package/es/layout/dagre/src/acyclic.d.ts +7 -0
  11. package/es/layout/dagre/src/acyclic.js +52 -0
  12. package/es/layout/dagre/src/acyclic.js.map +1 -0
  13. package/es/layout/dagre/src/add-border-segments.d.ts +4 -0
  14. package/es/layout/dagre/src/add-border-segments.js +32 -0
  15. package/es/layout/dagre/src/add-border-segments.js.map +1 -0
  16. package/es/layout/dagre/src/coordinate-system.d.ts +7 -0
  17. package/es/layout/dagre/src/coordinate-system.js +57 -0
  18. package/es/layout/dagre/src/coordinate-system.js.map +1 -0
  19. package/es/layout/dagre/src/data/list.d.ts +8 -0
  20. package/es/layout/dagre/src/data/list.js +50 -0
  21. package/es/layout/dagre/src/data/list.js.map +1 -0
  22. package/es/layout/dagre/src/debug.d.ts +4 -0
  23. package/es/layout/dagre/src/debug.js +26 -0
  24. package/es/layout/dagre/src/debug.js.map +1 -0
  25. package/es/layout/dagre/src/graphlib.d.ts +2 -0
  26. package/es/layout/dagre/src/graphlib.js +8 -0
  27. package/es/layout/dagre/src/graphlib.js.map +1 -0
  28. package/es/layout/dagre/src/greedy-fas.d.ts +4 -0
  29. package/es/layout/dagre/src/greedy-fas.js +113 -0
  30. package/es/layout/dagre/src/greedy-fas.js.map +1 -0
  31. package/es/layout/dagre/src/layout.d.ts +4 -0
  32. package/es/layout/dagre/src/layout.js +435 -0
  33. package/es/layout/dagre/src/layout.js.map +1 -0
  34. package/es/layout/dagre/src/nesting-graph.d.ts +7 -0
  35. package/es/layout/dagre/src/nesting-graph.js +112 -0
  36. package/es/layout/dagre/src/nesting-graph.js.map +1 -0
  37. package/es/layout/dagre/src/normalize.d.ts +7 -0
  38. package/es/layout/dagre/src/normalize.js +88 -0
  39. package/es/layout/dagre/src/normalize.js.map +1 -0
  40. package/es/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
  41. package/es/layout/dagre/src/order/add-subgraph-constraints.js +27 -0
  42. package/es/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
  43. package/es/layout/dagre/src/order/barycenter.d.ts +12 -0
  44. package/es/layout/dagre/src/order/barycenter.js +24 -0
  45. package/es/layout/dagre/src/order/barycenter.js.map +1 -0
  46. package/es/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
  47. package/es/layout/dagre/src/order/build-layer-graph.js +67 -0
  48. package/es/layout/dagre/src/order/build-layer-graph.js.map +1 -0
  49. package/es/layout/dagre/src/order/cross-count.d.ts +4 -0
  50. package/es/layout/dagre/src/order/cross-count.js +64 -0
  51. package/es/layout/dagre/src/order/cross-count.js.map +1 -0
  52. package/es/layout/dagre/src/order/index.d.ts +4 -0
  53. package/es/layout/dagre/src/order/index.js +88 -0
  54. package/es/layout/dagre/src/order/index.js.map +1 -0
  55. package/es/layout/dagre/src/order/init-data-order.d.ts +7 -0
  56. package/es/layout/dagre/src/order/init-data-order.js +25 -0
  57. package/es/layout/dagre/src/order/init-data-order.js.map +1 -0
  58. package/es/layout/dagre/src/order/init-order.d.ts +4 -0
  59. package/es/layout/dagre/src/order/init-order.js +49 -0
  60. package/es/layout/dagre/src/order/init-order.js.map +1 -0
  61. package/es/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
  62. package/es/layout/dagre/src/order/resolve-conflicts.js +111 -0
  63. package/es/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
  64. package/es/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
  65. package/es/layout/dagre/src/order/sort-subgraph.js +79 -0
  66. package/es/layout/dagre/src/order/sort-subgraph.js.map +1 -0
  67. package/es/layout/dagre/src/order/sort.d.ts +2 -0
  68. package/es/layout/dagre/src/order/sort.js +67 -0
  69. package/es/layout/dagre/src/order/sort.js.map +1 -0
  70. package/es/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
  71. package/es/layout/dagre/src/parent-dummy-chains.js +78 -0
  72. package/es/layout/dagre/src/parent-dummy-chains.js.map +1 -0
  73. package/es/layout/dagre/src/position/bk.d.ts +32 -0
  74. package/es/layout/dagre/src/position/bk.js +402 -0
  75. package/es/layout/dagre/src/position/bk.js.map +1 -0
  76. package/es/layout/dagre/src/position/index.d.ts +4 -0
  77. package/es/layout/dagre/src/position/index.js +53 -0
  78. package/es/layout/dagre/src/position/index.js.map +1 -0
  79. package/es/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
  80. package/es/layout/dagre/src/rank/feasible-tree.js +149 -0
  81. package/es/layout/dagre/src/rank/feasible-tree.js.map +1 -0
  82. package/es/layout/dagre/src/rank/index.d.ts +4 -0
  83. package/es/layout/dagre/src/rank/index.js +53 -0
  84. package/es/layout/dagre/src/rank/index.js.map +1 -0
  85. package/es/layout/dagre/src/rank/network-simplex.d.ts +12 -0
  86. package/es/layout/dagre/src/rank/network-simplex.js +207 -0
  87. package/es/layout/dagre/src/rank/network-simplex.js.map +1 -0
  88. package/es/layout/dagre/src/rank/util.d.ts +12 -0
  89. package/es/layout/dagre/src/rank/util.js +109 -0
  90. package/es/layout/dagre/src/rank/util.js.map +1 -0
  91. package/es/layout/dagre/src/util.d.ts +50 -0
  92. package/es/layout/dagre/src/util.js +260 -0
  93. package/es/layout/dagre/src/util.js.map +1 -0
  94. package/es/layout/dagre.d.ts +3 -3
  95. package/es/layout/dagre.js +35 -11
  96. package/es/layout/dagre.js.map +1 -1
  97. package/es/layout/force/force-in-a-box.js +1 -0
  98. package/es/layout/force/force-in-a-box.js.map +1 -1
  99. package/es/layout/fruchterman.js +12 -36
  100. package/es/layout/fruchterman.js.map +1 -1
  101. package/es/layout/index.d.ts +2 -1
  102. package/es/layout/index.js +2 -1
  103. package/es/layout/index.js.map +1 -1
  104. package/es/layout/layout.js +33 -11
  105. package/es/layout/layout.js.map +1 -1
  106. package/es/layout/types.d.ts +2 -2
  107. package/es/registy/index.d.ts +1 -1
  108. package/es/registy/index.js +1 -0
  109. package/es/registy/index.js.map +1 -1
  110. package/lib/layout/comboForce.js +4 -19
  111. package/lib/layout/comboForce.js.map +1 -1
  112. package/lib/layout/dagre/index.d.ts +9 -0
  113. package/lib/layout/dagre/index.js +38 -0
  114. package/lib/layout/dagre/index.js.map +1 -0
  115. package/lib/layout/dagre/src/acyclic.d.ts +7 -0
  116. package/lib/layout/dagre/src/acyclic.js +57 -0
  117. package/lib/layout/dagre/src/acyclic.js.map +1 -0
  118. package/lib/layout/dagre/src/add-border-segments.d.ts +4 -0
  119. package/lib/layout/dagre/src/add-border-segments.js +37 -0
  120. package/lib/layout/dagre/src/add-border-segments.js.map +1 -0
  121. package/lib/layout/dagre/src/coordinate-system.d.ts +7 -0
  122. package/lib/layout/dagre/src/coordinate-system.js +59 -0
  123. package/lib/layout/dagre/src/coordinate-system.js.map +1 -0
  124. package/lib/layout/dagre/src/data/list.d.ts +8 -0
  125. package/lib/layout/dagre/src/data/list.js +53 -0
  126. package/lib/layout/dagre/src/data/list.js.map +1 -0
  127. package/lib/layout/dagre/src/debug.d.ts +4 -0
  128. package/lib/layout/dagre/src/debug.js +31 -0
  129. package/lib/layout/dagre/src/debug.js.map +1 -0
  130. package/lib/layout/dagre/src/graphlib.d.ts +2 -0
  131. package/lib/layout/dagre/src/graphlib.js +13 -0
  132. package/lib/layout/dagre/src/graphlib.js.map +1 -0
  133. package/lib/layout/dagre/src/greedy-fas.d.ts +4 -0
  134. package/lib/layout/dagre/src/greedy-fas.js +118 -0
  135. package/lib/layout/dagre/src/greedy-fas.js.map +1 -0
  136. package/lib/layout/dagre/src/layout.d.ts +4 -0
  137. package/lib/layout/dagre/src/layout.js +459 -0
  138. package/lib/layout/dagre/src/layout.js.map +1 -0
  139. package/lib/layout/dagre/src/nesting-graph.d.ts +7 -0
  140. package/lib/layout/dagre/src/nesting-graph.js +117 -0
  141. package/lib/layout/dagre/src/nesting-graph.js.map +1 -0
  142. package/lib/layout/dagre/src/normalize.d.ts +7 -0
  143. package/lib/layout/dagre/src/normalize.js +93 -0
  144. package/lib/layout/dagre/src/normalize.js.map +1 -0
  145. package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
  146. package/lib/layout/dagre/src/order/add-subgraph-constraints.js +29 -0
  147. package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
  148. package/lib/layout/dagre/src/order/barycenter.d.ts +12 -0
  149. package/lib/layout/dagre/src/order/barycenter.js +26 -0
  150. package/lib/layout/dagre/src/order/barycenter.js.map +1 -0
  151. package/lib/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
  152. package/lib/layout/dagre/src/order/build-layer-graph.js +72 -0
  153. package/lib/layout/dagre/src/order/build-layer-graph.js.map +1 -0
  154. package/lib/layout/dagre/src/order/cross-count.d.ts +4 -0
  155. package/lib/layout/dagre/src/order/cross-count.js +66 -0
  156. package/lib/layout/dagre/src/order/cross-count.js.map +1 -0
  157. package/lib/layout/dagre/src/order/index.d.ts +4 -0
  158. package/lib/layout/dagre/src/order/index.js +93 -0
  159. package/lib/layout/dagre/src/order/index.js.map +1 -0
  160. package/lib/layout/dagre/src/order/init-data-order.d.ts +7 -0
  161. package/lib/layout/dagre/src/order/init-data-order.js +27 -0
  162. package/lib/layout/dagre/src/order/init-data-order.js.map +1 -0
  163. package/lib/layout/dagre/src/order/init-order.d.ts +4 -0
  164. package/lib/layout/dagre/src/order/init-order.js +51 -0
  165. package/lib/layout/dagre/src/order/init-order.js.map +1 -0
  166. package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
  167. package/lib/layout/dagre/src/order/resolve-conflicts.js +116 -0
  168. package/lib/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
  169. package/lib/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
  170. package/lib/layout/dagre/src/order/sort-subgraph.js +84 -0
  171. package/lib/layout/dagre/src/order/sort-subgraph.js.map +1 -0
  172. package/lib/layout/dagre/src/order/sort.d.ts +2 -0
  173. package/lib/layout/dagre/src/order/sort.js +72 -0
  174. package/lib/layout/dagre/src/order/sort.js.map +1 -0
  175. package/lib/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
  176. package/lib/layout/dagre/src/parent-dummy-chains.js +80 -0
  177. package/lib/layout/dagre/src/parent-dummy-chains.js.map +1 -0
  178. package/lib/layout/dagre/src/position/bk.d.ts +32 -0
  179. package/lib/layout/dagre/src/position/bk.js +417 -0
  180. package/lib/layout/dagre/src/position/bk.js.map +1 -0
  181. package/lib/layout/dagre/src/position/index.d.ts +4 -0
  182. package/lib/layout/dagre/src/position/index.js +58 -0
  183. package/lib/layout/dagre/src/position/index.js.map +1 -0
  184. package/lib/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
  185. package/lib/layout/dagre/src/rank/feasible-tree.js +156 -0
  186. package/lib/layout/dagre/src/rank/feasible-tree.js.map +1 -0
  187. package/lib/layout/dagre/src/rank/index.d.ts +4 -0
  188. package/lib/layout/dagre/src/rank/index.js +58 -0
  189. package/lib/layout/dagre/src/rank/index.js.map +1 -0
  190. package/lib/layout/dagre/src/rank/network-simplex.d.ts +12 -0
  191. package/lib/layout/dagre/src/rank/network-simplex.js +212 -0
  192. package/lib/layout/dagre/src/rank/network-simplex.js.map +1 -0
  193. package/lib/layout/dagre/src/rank/util.d.ts +12 -0
  194. package/lib/layout/dagre/src/rank/util.js +114 -0
  195. package/lib/layout/dagre/src/rank/util.js.map +1 -0
  196. package/lib/layout/dagre/src/util.d.ts +50 -0
  197. package/lib/layout/dagre/src/util.js +281 -0
  198. package/lib/layout/dagre/src/util.js.map +1 -0
  199. package/lib/layout/dagre.d.ts +3 -3
  200. package/lib/layout/dagre.js +37 -13
  201. package/lib/layout/dagre.js.map +1 -1
  202. package/lib/layout/force/force-in-a-box.js +1 -0
  203. package/lib/layout/force/force-in-a-box.js.map +1 -1
  204. package/lib/layout/fruchterman.js +12 -36
  205. package/lib/layout/fruchterman.js.map +1 -1
  206. package/lib/layout/index.d.ts +2 -1
  207. package/lib/layout/index.js +3 -1
  208. package/lib/layout/index.js.map +1 -1
  209. package/lib/layout/layout.js +32 -10
  210. package/lib/layout/layout.js.map +1 -1
  211. package/lib/layout/types.d.ts +2 -2
  212. package/lib/registy/index.d.ts +1 -1
  213. package/lib/registy/index.js +1 -0
  214. package/lib/registy/index.js.map +1 -1
  215. package/package.json +4 -4
@@ -0,0 +1,112 @@
1
+ import util from './util';
2
+ /*
3
+ * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,
4
+ * adds appropriate edges to ensure that all cluster nodes are placed between
5
+ * these boundries, and ensures that the graph is connected.
6
+ *
7
+ * In addition we ensure, through the use of the minlen property, that nodes
8
+ * and subgraph border nodes to not end up on the same rank.
9
+ *
10
+ * Preconditions:
11
+ *
12
+ * 1. Input graph is a DAG
13
+ * 2. Nodes in the input graph has a minlen attribute
14
+ *
15
+ * Postconditions:
16
+ *
17
+ * 1. Input graph is connected.
18
+ * 2. Dummy nodes are added for the tops and bottoms of subgraphs.
19
+ * 3. The minlen attribute for nodes is adjusted to ensure nodes do not
20
+ * get placed on the same rank as subgraph border nodes.
21
+ *
22
+ * The nesting graph idea comes from Sander, "Layout of Compound Directed
23
+ * Graphs."
24
+ */
25
+ const run = (g) => {
26
+ var _a;
27
+ const root = util.addDummyNode(g, "root", {}, "_root");
28
+ const depths = treeDepths(g);
29
+ // @ts-ignore
30
+ const height = Math.max(...Object.values(depths)) - 1; // Note: depths is an Object not an array
31
+ const nodeSep = 2 * height + 1;
32
+ g.graph().nestingRoot = root;
33
+ // Multiply minlen by nodeSep to align nodes on non-border ranks.
34
+ g.edges().forEach((e) => { g.edge(e).minlen *= nodeSep; });
35
+ // Calculate a weight that is sufficient to keep subgraphs vertically compact
36
+ const weight = sumWeights(g) + 1;
37
+ // Create border nodes and link them up
38
+ (_a = g.children()) === null || _a === void 0 ? void 0 : _a.forEach((child) => {
39
+ dfs(g, root, nodeSep, weight, height, depths, child);
40
+ });
41
+ // Save the multiplier for node layers for later removal of empty border
42
+ // layers.
43
+ g.graph().nodeRankFactor = nodeSep;
44
+ };
45
+ const dfs = (g, root, nodeSep, weight, height, depths, v) => {
46
+ const children = g.children(v);
47
+ if (!(children === null || children === void 0 ? void 0 : children.length)) {
48
+ if (v !== root) {
49
+ g.setEdge(root, v, { weight: 0, minlen: nodeSep });
50
+ }
51
+ return;
52
+ }
53
+ const top = util.addBorderNode(g, "_bt");
54
+ const bottom = util.addBorderNode(g, "_bb");
55
+ const label = g.node(v);
56
+ g.setParent(top, v);
57
+ label.borderTop = top;
58
+ g.setParent(bottom, v);
59
+ label.borderBottom = bottom;
60
+ children === null || children === void 0 ? void 0 : children.forEach((child) => {
61
+ dfs(g, root, nodeSep, weight, height, depths, child);
62
+ const childNode = g.node(child);
63
+ const childTop = childNode.borderTop ? childNode.borderTop : child;
64
+ const childBottom = childNode.borderBottom ? childNode.borderBottom : child;
65
+ const thisWeight = childNode.borderTop ? weight : 2 * weight;
66
+ const minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;
67
+ g.setEdge(top, childTop, {
68
+ minlen,
69
+ weight: thisWeight,
70
+ nestingEdge: true
71
+ });
72
+ g.setEdge(childBottom, bottom, {
73
+ minlen,
74
+ weight: thisWeight,
75
+ nestingEdge: true
76
+ });
77
+ });
78
+ if (!g.parent(v)) {
79
+ g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });
80
+ }
81
+ };
82
+ const treeDepths = (g) => {
83
+ var _a;
84
+ const depths = {};
85
+ const dfs = (v, depth) => {
86
+ const children = g.children(v);
87
+ children === null || children === void 0 ? void 0 : children.forEach((child) => dfs(child, depth + 1));
88
+ depths[v] = depth;
89
+ };
90
+ (_a = g.children()) === null || _a === void 0 ? void 0 : _a.forEach((v) => dfs(v, 1));
91
+ return depths;
92
+ };
93
+ const sumWeights = (g) => {
94
+ let result = 0;
95
+ g.edges().forEach((e) => {
96
+ result += g.edge(e).weight;
97
+ });
98
+ return result;
99
+ };
100
+ const cleanup = (g) => {
101
+ const graphLabel = g.graph();
102
+ graphLabel.nestingRoot && g.removeNode(graphLabel.nestingRoot);
103
+ delete graphLabel.nestingRoot;
104
+ g.edges().forEach((e) => {
105
+ const edge = g.edge(e);
106
+ if (edge.nestingEdge) {
107
+ g.removeEdge(e);
108
+ }
109
+ });
110
+ };
111
+ export default { run, cleanup };
112
+ //# sourceMappingURL=nesting-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nesting-graph.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/nesting-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { graphlib } from '../graphlib';
2
+ declare type Graph = graphlib.Graph;
3
+ declare const _default: {
4
+ run: (g: Graph) => void;
5
+ undo: (g: Graph) => void;
6
+ };
7
+ export default _default;
@@ -0,0 +1,88 @@
1
+ import util from './util';
2
+ /*
3
+ * Breaks any long edges in the graph into short segments that span 1 layer
4
+ * each. This operation is undoable with the denormalize function.
5
+ *
6
+ * Pre-conditions:
7
+ *
8
+ * 1. The input graph is a DAG.
9
+ * 2. Each node in the graph has a "rank" property.
10
+ *
11
+ * Post-condition:
12
+ *
13
+ * 1. All edges in the graph have a length of 1.
14
+ * 2. Dummy nodes are added where edges have been split into segments.
15
+ * 3. The graph is augmented with a "dummyChains" attribute which contains
16
+ * the first dummy in each chain of dummy nodes produced.
17
+ */
18
+ const run = (g) => {
19
+ g.graph().dummyChains = [];
20
+ g.edges().forEach((edge) => normalizeEdge(g, edge));
21
+ };
22
+ const normalizeEdge = (g, e) => {
23
+ var _a, _b;
24
+ let v = e.v;
25
+ let vRank = g.node(v).rank;
26
+ const w = e.w;
27
+ const wRank = g.node(w).rank;
28
+ const name = e.name;
29
+ const edgeLabel = g.edge(e);
30
+ const labelRank = edgeLabel.labelRank;
31
+ if (wRank === vRank + 1)
32
+ return;
33
+ g.removeEdge(e);
34
+ let dummy;
35
+ let attrs;
36
+ let i;
37
+ for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {
38
+ edgeLabel.points = [];
39
+ attrs = {
40
+ edgeLabel,
41
+ width: 0,
42
+ height: 0,
43
+ edgeObj: e,
44
+ rank: vRank
45
+ };
46
+ dummy = util.addDummyNode(g, "edge", attrs, "_d");
47
+ if (vRank === labelRank) {
48
+ attrs.width = edgeLabel.width;
49
+ attrs.height = edgeLabel.height;
50
+ attrs.dummy = "edge-label";
51
+ attrs.labelpos = edgeLabel.labelpos;
52
+ }
53
+ g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);
54
+ if (i === 0) {
55
+ if (!g.graph().dummyChains)
56
+ g.graph().dummyChains = [];
57
+ (_b = (_a = g.graph()) === null || _a === void 0 ? void 0 : _a.dummyChains) === null || _b === void 0 ? void 0 : _b.push(dummy);
58
+ }
59
+ v = dummy;
60
+ }
61
+ g.setEdge(v, w, { weight: edgeLabel.weight }, name);
62
+ };
63
+ const undo = (g) => {
64
+ var _a;
65
+ (_a = g.graph().dummyChains) === null || _a === void 0 ? void 0 : _a.forEach((v) => {
66
+ var _a;
67
+ let node = g.node(v);
68
+ const origLabel = node.edgeLabel;
69
+ let w;
70
+ node.edgeObj && g.setEdge(node.edgeObj, origLabel);
71
+ let currentV = v;
72
+ while (node.dummy) {
73
+ w = (_a = g.successors(currentV)) === null || _a === void 0 ? void 0 : _a[0];
74
+ g.removeNode(currentV);
75
+ origLabel.points.push({ x: node.x, y: node.y });
76
+ if (node.dummy === "edge-label") {
77
+ origLabel.x = node.x;
78
+ origLabel.y = node.y;
79
+ origLabel.width = node.width;
80
+ origLabel.height = node.height;
81
+ }
82
+ currentV = w;
83
+ node = g.node(currentV);
84
+ }
85
+ });
86
+ };
87
+ export default { run, undo };
88
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { graphlib as IGraphLib } from "../../graphlib";
2
+ declare type Graph = IGraphLib.Graph;
3
+ declare const addSubgraphConstraints: (g: Graph, cg: Graph, vs: string[]) => void;
4
+ export default addSubgraphConstraints;
@@ -0,0 +1,27 @@
1
+ const addSubgraphConstraints = (g, cg, vs) => {
2
+ const prev = {};
3
+ let rootPrev;
4
+ vs.forEach((v) => {
5
+ let child = g.parent(v);
6
+ let parent;
7
+ let prevChild;
8
+ while (child) {
9
+ parent = g.parent(child);
10
+ if (parent) {
11
+ prevChild = prev[parent];
12
+ prev[parent] = child;
13
+ }
14
+ else {
15
+ prevChild = rootPrev;
16
+ rootPrev = child;
17
+ }
18
+ if (prevChild && prevChild !== child) {
19
+ cg.setEdge(prevChild, child);
20
+ return;
21
+ }
22
+ child = parent;
23
+ }
24
+ });
25
+ };
26
+ export default addSubgraphConstraints;
27
+ //# sourceMappingURL=add-subgraph-constraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-subgraph-constraints.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/add-subgraph-constraints.ts"],"names":[],"mappings":"AAIA,MAAM,sBAAsB,GAAG,CAAC,CAAQ,EAAE,EAAS,EAAE,EAAY,EAAE,EAAE;IACnE,MAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,IAAI,QAAa,CAAC;IAElB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,MAAM,CAAC;QACX,IAAI,SAAS,CAAC;QACd,OAAO,KAAK,EAAE;YACZ,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,MAAM,EAAE;gBACV,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;aACtB;iBAAM;gBACL,SAAS,GAAG,QAAQ,CAAC;gBACrB,QAAQ,GAAG,KAAK,CAAC;aAClB;YACD,IAAI,SAAS,IAAI,SAAS,KAAK,KAAK,EAAE;gBACpC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC7B,OAAO;aACR;YACD,KAAK,GAAG,MAAM,CAAC;SAChB;IACH,CAAC,CAAC,CAAC;AACH,CAAC,CAAC;AAGF,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { graphlib as IGraphLib } from "../../graphlib";
2
+ declare type Graph = IGraphLib.Graph;
3
+ declare const barycenter: (g: Graph, movable: string[]) => ({
4
+ v: string;
5
+ barycenter?: undefined;
6
+ weight?: undefined;
7
+ } | {
8
+ v: string;
9
+ barycenter: number;
10
+ weight: number;
11
+ })[];
12
+ export default barycenter;
@@ -0,0 +1,24 @@
1
+ const barycenter = (g, movable) => {
2
+ return movable.map((v) => {
3
+ const inV = g.inEdges(v);
4
+ if (!(inV === null || inV === void 0 ? void 0 : inV.length)) {
5
+ return { v };
6
+ }
7
+ {
8
+ const result = { sum: 0, weight: 0 };
9
+ inV.forEach((e) => {
10
+ const edge = g.edge(e);
11
+ const nodeU = g.node(e.v);
12
+ result.sum += (edge.weight * nodeU.order);
13
+ result.weight += edge.weight;
14
+ });
15
+ return {
16
+ v,
17
+ barycenter: result.sum / result.weight,
18
+ weight: result.weight
19
+ };
20
+ }
21
+ });
22
+ };
23
+ export default barycenter;
24
+ //# sourceMappingURL=barycenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barycenter.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/barycenter.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,OAAiB,EAAE,EAAE;IACjD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,CAAA,EAAE;YAChB,OAAO,EAAE,CAAC,EAAE,CAAC;SACd;QAAE;YACD,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAI,KAAK,CAAC,KAAgB,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,OAAO;gBACL,CAAC;gBACD,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM;gBACtC,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;SACH;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { graphlib as IGraphLib } from '../../graphlib';
2
+ declare type IGraph = IGraphLib.Graph;
3
+ declare const buildLayerGraph: (g: IGraph, rank: number, relationship: string) => any;
4
+ export default buildLayerGraph;
@@ -0,0 +1,67 @@
1
+ import graphlib from '../graphlib';
2
+ const Graph = graphlib.Graph;
3
+ /*
4
+ * Constructs a graph that can be used to sort a layer of nodes. The graph will
5
+ * contain all base and subgraph nodes from the request layer in their original
6
+ * hierarchy and any edges that are incident on these nodes and are of the type
7
+ * requested by the "relationship" parameter.
8
+ *
9
+ * Nodes from the requested rank that do not have parents are assigned a root
10
+ * node in the output graph, which is set in the root graph attribute. This
11
+ * makes it easy to walk the hierarchy of movable nodes during ordering.
12
+ *
13
+ * Pre-conditions:
14
+ *
15
+ * 1. Input graph is a DAG
16
+ * 2. Base nodes in the input graph have a rank attribute
17
+ * 3. Subgraph nodes in the input graph has minRank and maxRank attributes
18
+ * 4. Edges have an assigned weight
19
+ *
20
+ * Post-conditions:
21
+ *
22
+ * 1. Output graph has all nodes in the movable rank with preserved
23
+ * hierarchy.
24
+ * 2. Root nodes in the movable layer are made children of the node
25
+ * indicated by the root attribute of the graph.
26
+ * 3. Non-movable nodes incident on movable nodes, selected by the
27
+ * relationship parameter, are included in the graph (without hierarchy).
28
+ * 4. Edges incident on movable nodes, selected by the relationship
29
+ * parameter, are added to the output graph.
30
+ * 5. The weights for copied edges are aggregated as need, since the output
31
+ * graph is not a multi-graph.
32
+ */
33
+ const buildLayerGraph = (g, rank, relationship) => {
34
+ const root = createRootNode(g);
35
+ const result = new Graph({ compound: true }).setGraph({ root })
36
+ .setDefaultNodeLabel((v) => { return g.node(v); });
37
+ g.nodes().forEach((v) => {
38
+ const node = g.node(v);
39
+ const parent = g.parent(v);
40
+ if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) {
41
+ result.setNode(v);
42
+ result.setParent(v, parent || root);
43
+ // This assumes we have only short edges!
44
+ g[relationship](v).forEach((e) => {
45
+ const u = e.v === v ? e.w : e.v;
46
+ const edge = result.edge(u, v);
47
+ const weight = edge !== undefined ? edge.weight : 0;
48
+ result.setEdge(u, v, { weight: g.edge(e).weight + weight });
49
+ });
50
+ if (node.hasOwnProperty("minRank")) {
51
+ result.setNode(v, {
52
+ borderLeft: node.borderLeft[rank],
53
+ borderRight: node.borderRight[rank]
54
+ });
55
+ }
56
+ }
57
+ });
58
+ return result;
59
+ };
60
+ const createRootNode = (g) => {
61
+ let v;
62
+ while (g.hasNode((v = `_root${Math.random()}`)))
63
+ ;
64
+ return v;
65
+ };
66
+ export default buildLayerGraph;
67
+ //# sourceMappingURL=build-layer-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-layer-graph.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/build-layer-graph.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,aAAa,CAAC;AAGnC,MAAM,KAAK,GAAI,QAAgB,CAAC,KAAK,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,eAAe,GAAG,CAAC,CAAS,EAAE,IAAY,EAAE,YAAoB,EAAE,EAAE;IACxE,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;SAC1D,mBAAmB,CAAC,CAAC,CAAS,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/D,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAK,IAAI,CAAC,OAAkB,IAAI,IAAI,IAAI,IAAI,IAAK,IAAI,CAAC,OAAkB,EAAE;YAC9F,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC;YAEpC,yCAAyC;YACxC,CAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;gBAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBAClC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;oBAChB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBACjC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;iBACpC,CAAC,CAAC;aACJ;SACF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,EAAE;IACnC,IAAI,CAAC,CAAC;IACN,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { graphlib as IGraphLib } from '../../graphlib';
2
+ declare type Graph = IGraphLib.Graph;
3
+ declare const crossCount: (g: Graph, layering: any) => number;
4
+ export default crossCount;
@@ -0,0 +1,64 @@
1
+ import { zipObject } from '../util';
2
+ /*
3
+ * A function that takes a layering (an array of layers, each with an array of
4
+ * ordererd nodes) and a graph and returns a weighted crossing count.
5
+ *
6
+ * Pre-conditions:
7
+ *
8
+ * 1. Input graph must be simple (not a multigraph), directed, and include
9
+ * only simple edges.
10
+ * 2. Edges in the input graph must have assigned weights.
11
+ *
12
+ * Post-conditions:
13
+ *
14
+ * 1. The graph and layering matrix are left unchanged.
15
+ *
16
+ * This algorithm is derived from Barth, et al., "Bilayer Cross Counting."
17
+ */
18
+ const twoLayerCrossCount = (g, northLayer, southLayer) => {
19
+ // Sort all of the edges between the north and south layers by their position
20
+ // in the north layer and then the south. Map these edges to the position of
21
+ // their head in the south layer.
22
+ const southPos = zipObject(southLayer, southLayer.map((v, i) => i));
23
+ const unflat = northLayer.map((v) => {
24
+ var _a;
25
+ const unsort = (_a = g.outEdges(v)) === null || _a === void 0 ? void 0 : _a.map((e) => {
26
+ return { pos: southPos[e.w], weight: g.edge(e).weight };
27
+ });
28
+ return unsort === null || unsort === void 0 ? void 0 : unsort.sort((a, b) => a.pos - b.pos);
29
+ });
30
+ // @ts-ignore
31
+ const southEntries = unflat.flat();
32
+ // Build the accumulator tree
33
+ let firstIndex = 1;
34
+ while (firstIndex < southLayer.length)
35
+ firstIndex <<= 1;
36
+ const treeSize = 2 * firstIndex - 1;
37
+ firstIndex -= 1;
38
+ const tree = Array(treeSize).fill(0, 0, treeSize);
39
+ // Calculate the weighted crossings
40
+ let cc = 0;
41
+ southEntries.forEach((entry) => {
42
+ let index = entry.pos + firstIndex;
43
+ tree[index] += entry.weight;
44
+ let weightSum = 0;
45
+ while (index > 0) {
46
+ if (index % 2) {
47
+ weightSum += tree[index + 1];
48
+ }
49
+ index = (index - 1) >> 1;
50
+ tree[index] += entry.weight;
51
+ }
52
+ cc += entry.weight * weightSum;
53
+ });
54
+ return cc;
55
+ };
56
+ const crossCount = (g, layering) => {
57
+ let cc = 0;
58
+ for (let i = 1; i < layering.length; ++i) {
59
+ cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);
60
+ }
61
+ return cc;
62
+ };
63
+ export default crossCount;
64
+ //# sourceMappingURL=cross-count.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-count.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/cross-count.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpC;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAQ,EAAE,UAAoB,EAAE,UAAoB,EAAE,EAAE;IAClF,6EAA6E;IAC7E,4EAA4E;IAC5E,iCAAiC;IACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,EACnC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;;QAClC,MAAM,MAAM,GAAG,MAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,aAAa;IACb,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAEnC,6BAA6B;IAC7B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,UAAU,GAAG,UAAU,CAAC,MAAM;QAAE,UAAU,KAAK,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;IACpC,UAAU,IAAI,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAElD,mCAAmC;IACnC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,YAAY,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;QAClC,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,OAAO,KAAK,GAAG,CAAC,EAAE;YAChB,IAAI,KAAK,GAAG,CAAC,EAAE;gBACb,SAAS,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;aAC9B;YACD,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;SAC7B;QACD,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,QAAa,EAAE,EAAE;IAC7C,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACxC,EAAE,IAAI,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;KACzD;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { graphlib as IGraphLib } from '../../graphlib';
2
+ declare type IGraph = IGraphLib.Graph;
3
+ declare const order: (g: IGraph) => void;
4
+ export default order;
@@ -0,0 +1,88 @@
1
+ import initOrder from './init-order';
2
+ import crossCount from './cross-count';
3
+ import buildLayerGraph from './build-layer-graph';
4
+ import addSubgraphConstraints from './add-subgraph-constraints';
5
+ import sortSubgraph from './sort-subgraph';
6
+ import graphlib from '../graphlib';
7
+ import util from '../util';
8
+ import { clone } from '../../../../util';
9
+ const Graph = graphlib.Graph;
10
+ /*
11
+ * Applies heuristics to minimize edge crossings in the graph and sets the best
12
+ * order solution as an order attribute on each node.
13
+ *
14
+ * Pre-conditions:
15
+ *
16
+ * 1. Graph must be DAG
17
+ * 2. Graph nodes must be objects with a "rank" attribute
18
+ * 3. Graph edges must have the "weight" attribute
19
+ *
20
+ * Post-conditions:
21
+ *
22
+ * 1. Graph nodes will have an "order" attribute based on the results of the
23
+ * algorithm.
24
+ */
25
+ const order = (g) => {
26
+ const maxRank = util.maxRank(g);
27
+ const range1 = [];
28
+ const range2 = [];
29
+ for (let i = 1; i < maxRank + 1; i++)
30
+ range1.push(i);
31
+ for (let i = maxRank - 1; i > -1; i--)
32
+ range2.push(i);
33
+ const downLayerGraphs = buildLayerGraphs(g, range1, "inEdges");
34
+ const upLayerGraphs = buildLayerGraphs(g, range2, "outEdges");
35
+ let layering = initOrder(g);
36
+ assignOrder(g, layering);
37
+ let bestCC = Number.POSITIVE_INFINITY;
38
+ let best;
39
+ for (let i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
40
+ sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);
41
+ layering = util.buildLayerMatrix(g);
42
+ const cc = crossCount(g, layering);
43
+ if (cc < bestCC) {
44
+ lastBest = 0;
45
+ best = clone(layering);
46
+ bestCC = cc;
47
+ }
48
+ }
49
+ // consider use previous result, maybe somewhat reduendant
50
+ layering = initOrder(g);
51
+ assignOrder(g, layering);
52
+ for (let i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
53
+ sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2, true);
54
+ layering = util.buildLayerMatrix(g);
55
+ const cc = crossCount(g, layering);
56
+ if (cc < bestCC) {
57
+ lastBest = 0;
58
+ best = clone(layering);
59
+ bestCC = cc;
60
+ }
61
+ }
62
+ assignOrder(g, best);
63
+ };
64
+ const buildLayerGraphs = (g, ranks, relationship) => {
65
+ return ranks.map((rank) => {
66
+ return buildLayerGraph(g, rank, relationship);
67
+ });
68
+ };
69
+ const sweepLayerGraphs = (layerGraphs, biasRight, usePrev) => {
70
+ const cg = new Graph();
71
+ layerGraphs === null || layerGraphs === void 0 ? void 0 : layerGraphs.forEach((lg) => {
72
+ const root = lg.graph().root;
73
+ const sorted = sortSubgraph(lg, root, cg, biasRight, usePrev);
74
+ sorted.vs.forEach((v, i) => {
75
+ lg.node(v).order = i;
76
+ });
77
+ addSubgraphConstraints(lg, cg, sorted.vs);
78
+ });
79
+ };
80
+ const assignOrder = (g, layering) => {
81
+ layering === null || layering === void 0 ? void 0 : layering.forEach((layer) => {
82
+ layer.forEach((v, i) => {
83
+ g.node(v).order = i;
84
+ });
85
+ });
86
+ };
87
+ export default order;
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,sBAAsB,MAAM,4BAA4B,CAAC;AAChE,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIzC,MAAM,KAAK,GAAI,QAAgB,CAAC,KAAK,CAAC;AAEtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,EAAG;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAG;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAE9D,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEzB,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtC,IAAI,IAAI,CAAC;IACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE;QAC3D,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,EAAE,GAAG,MAAM,EAAE;YACf,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,GAAG,EAAE,CAAC;SACb;KACF;IAED,0DAA0D;IAC1D,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE;QAC3D,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAE5E,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,EAAE,GAAG,MAAM,EAAE;YACf,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,GAAG,EAAE,CAAC;SACb;KACF;IACD,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,KAAe,EAAE,YAAoB,EAAO,EAAE;IACjF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,OAAO,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,WAAqB,EAAE,SAAc,EAAE,OAAa,EAAE,EAAE;IAChF,MAAM,EAAE,GAAG,IAAI,KAAK,EAAS,CAAC;IAC9B,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAc,CAAC;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACzC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,QAAa,EAAE,EAAE;IAC/C,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;QAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACrC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { graphlib as IGraphLib } from "../../graphlib";
2
+ declare type Graph = IGraphLib.Graph;
3
+ /**
4
+ * 按照数据中的结果设置fixorder
5
+ */
6
+ declare const initDataOrder: (g: Graph, nodeOrder: string[]) => void;
7
+ export default initDataOrder;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 按照数据中的结果设置fixorder
3
+ */
4
+ const initDataOrder = (g, nodeOrder) => {
5
+ const simpleNodes = g.nodes().filter((v) => {
6
+ var _a;
7
+ return !((_a = g.children(v)) === null || _a === void 0 ? void 0 : _a.length);
8
+ });
9
+ const ranks = simpleNodes.map((v) => g.node(v).rank);
10
+ const maxRank = Math.max(...ranks);
11
+ const layers = [];
12
+ for (let i = 0; i < maxRank + 1; i++) {
13
+ layers.push([]);
14
+ }
15
+ nodeOrder.forEach((n) => {
16
+ const node = g.node(n);
17
+ // 只考虑原有节点,dummy节点需要按照后续算法排出
18
+ if (!node || node.dummy)
19
+ return;
20
+ node.fixorder = layers[node.rank].length; // 设置fixorder为当层的顺序
21
+ layers[node.rank].push(n);
22
+ });
23
+ };
24
+ export default initDataOrder;
25
+ //# sourceMappingURL=init-data-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-data-order.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/order/init-data-order.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,CAAQ,EAAE,SAAmB,EAAE,EAAE;IACtD,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,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,EAAG,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACjB;IACD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,4BAA4B;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QAChC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAE,IAAI,CAAC,IAAe,CAAC,CAAC,MAAM,CAAC,CAAC,mBAAmB;QACzE,MAAM,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { graphlib as IGraphLib } from "../../graphlib";
2
+ declare type Graph = IGraphLib.Graph;
3
+ declare const initOrder: (g: Graph) => any;
4
+ export default initOrder;