@antv/layout 0.1.19 → 0.1.20

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 (195) hide show
  1. package/CHANGELOG.md +17 -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/dagre/index.d.ts +9 -0
  6. package/es/layout/dagre/index.js +33 -0
  7. package/es/layout/dagre/index.js.map +1 -0
  8. package/es/layout/dagre/src/acyclic.d.ts +7 -0
  9. package/es/layout/dagre/src/acyclic.js +52 -0
  10. package/es/layout/dagre/src/acyclic.js.map +1 -0
  11. package/es/layout/dagre/src/add-border-segments.d.ts +4 -0
  12. package/es/layout/dagre/src/add-border-segments.js +32 -0
  13. package/es/layout/dagre/src/add-border-segments.js.map +1 -0
  14. package/es/layout/dagre/src/coordinate-system.d.ts +7 -0
  15. package/es/layout/dagre/src/coordinate-system.js +57 -0
  16. package/es/layout/dagre/src/coordinate-system.js.map +1 -0
  17. package/es/layout/dagre/src/data/list.d.ts +8 -0
  18. package/es/layout/dagre/src/data/list.js +50 -0
  19. package/es/layout/dagre/src/data/list.js.map +1 -0
  20. package/es/layout/dagre/src/debug.d.ts +4 -0
  21. package/es/layout/dagre/src/debug.js +26 -0
  22. package/es/layout/dagre/src/debug.js.map +1 -0
  23. package/es/layout/dagre/src/graphlib.d.ts +2 -0
  24. package/es/layout/dagre/src/graphlib.js +8 -0
  25. package/es/layout/dagre/src/graphlib.js.map +1 -0
  26. package/es/layout/dagre/src/greedy-fas.d.ts +4 -0
  27. package/es/layout/dagre/src/greedy-fas.js +113 -0
  28. package/es/layout/dagre/src/greedy-fas.js.map +1 -0
  29. package/es/layout/dagre/src/layout.d.ts +4 -0
  30. package/es/layout/dagre/src/layout.js +435 -0
  31. package/es/layout/dagre/src/layout.js.map +1 -0
  32. package/es/layout/dagre/src/nesting-graph.d.ts +7 -0
  33. package/es/layout/dagre/src/nesting-graph.js +112 -0
  34. package/es/layout/dagre/src/nesting-graph.js.map +1 -0
  35. package/es/layout/dagre/src/normalize.d.ts +7 -0
  36. package/es/layout/dagre/src/normalize.js +88 -0
  37. package/es/layout/dagre/src/normalize.js.map +1 -0
  38. package/es/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
  39. package/es/layout/dagre/src/order/add-subgraph-constraints.js +27 -0
  40. package/es/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
  41. package/es/layout/dagre/src/order/barycenter.d.ts +12 -0
  42. package/es/layout/dagre/src/order/barycenter.js +24 -0
  43. package/es/layout/dagre/src/order/barycenter.js.map +1 -0
  44. package/es/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
  45. package/es/layout/dagre/src/order/build-layer-graph.js +67 -0
  46. package/es/layout/dagre/src/order/build-layer-graph.js.map +1 -0
  47. package/es/layout/dagre/src/order/cross-count.d.ts +4 -0
  48. package/es/layout/dagre/src/order/cross-count.js +64 -0
  49. package/es/layout/dagre/src/order/cross-count.js.map +1 -0
  50. package/es/layout/dagre/src/order/index.d.ts +4 -0
  51. package/es/layout/dagre/src/order/index.js +88 -0
  52. package/es/layout/dagre/src/order/index.js.map +1 -0
  53. package/es/layout/dagre/src/order/init-data-order.d.ts +7 -0
  54. package/es/layout/dagre/src/order/init-data-order.js +25 -0
  55. package/es/layout/dagre/src/order/init-data-order.js.map +1 -0
  56. package/es/layout/dagre/src/order/init-order.d.ts +4 -0
  57. package/es/layout/dagre/src/order/init-order.js +49 -0
  58. package/es/layout/dagre/src/order/init-order.js.map +1 -0
  59. package/es/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
  60. package/es/layout/dagre/src/order/resolve-conflicts.js +111 -0
  61. package/es/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
  62. package/es/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
  63. package/es/layout/dagre/src/order/sort-subgraph.js +79 -0
  64. package/es/layout/dagre/src/order/sort-subgraph.js.map +1 -0
  65. package/es/layout/dagre/src/order/sort.d.ts +2 -0
  66. package/es/layout/dagre/src/order/sort.js +67 -0
  67. package/es/layout/dagre/src/order/sort.js.map +1 -0
  68. package/es/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
  69. package/es/layout/dagre/src/parent-dummy-chains.js +78 -0
  70. package/es/layout/dagre/src/parent-dummy-chains.js.map +1 -0
  71. package/es/layout/dagre/src/position/bk.d.ts +32 -0
  72. package/es/layout/dagre/src/position/bk.js +398 -0
  73. package/es/layout/dagre/src/position/bk.js.map +1 -0
  74. package/es/layout/dagre/src/position/index.d.ts +4 -0
  75. package/es/layout/dagre/src/position/index.js +53 -0
  76. package/es/layout/dagre/src/position/index.js.map +1 -0
  77. package/es/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
  78. package/es/layout/dagre/src/rank/feasible-tree.js +149 -0
  79. package/es/layout/dagre/src/rank/feasible-tree.js.map +1 -0
  80. package/es/layout/dagre/src/rank/index.d.ts +4 -0
  81. package/es/layout/dagre/src/rank/index.js +53 -0
  82. package/es/layout/dagre/src/rank/index.js.map +1 -0
  83. package/es/layout/dagre/src/rank/network-simplex.d.ts +12 -0
  84. package/es/layout/dagre/src/rank/network-simplex.js +207 -0
  85. package/es/layout/dagre/src/rank/network-simplex.js.map +1 -0
  86. package/es/layout/dagre/src/rank/util.d.ts +12 -0
  87. package/es/layout/dagre/src/rank/util.js +109 -0
  88. package/es/layout/dagre/src/rank/util.js.map +1 -0
  89. package/es/layout/dagre/src/util.d.ts +50 -0
  90. package/es/layout/dagre/src/util.js +260 -0
  91. package/es/layout/dagre/src/util.js.map +1 -0
  92. package/es/layout/dagre.d.ts +3 -3
  93. package/es/layout/dagre.js +35 -11
  94. package/es/layout/dagre.js.map +1 -1
  95. package/es/layout/force/force-in-a-box.js +1 -0
  96. package/es/layout/force/force-in-a-box.js.map +1 -1
  97. package/es/layout/fruchterman.js +12 -36
  98. package/es/layout/fruchterman.js.map +1 -1
  99. package/es/layout/types.d.ts +1 -1
  100. package/lib/layout/dagre/index.d.ts +9 -0
  101. package/lib/layout/dagre/index.js +38 -0
  102. package/lib/layout/dagre/index.js.map +1 -0
  103. package/lib/layout/dagre/src/acyclic.d.ts +7 -0
  104. package/lib/layout/dagre/src/acyclic.js +57 -0
  105. package/lib/layout/dagre/src/acyclic.js.map +1 -0
  106. package/lib/layout/dagre/src/add-border-segments.d.ts +4 -0
  107. package/lib/layout/dagre/src/add-border-segments.js +37 -0
  108. package/lib/layout/dagre/src/add-border-segments.js.map +1 -0
  109. package/lib/layout/dagre/src/coordinate-system.d.ts +7 -0
  110. package/lib/layout/dagre/src/coordinate-system.js +59 -0
  111. package/lib/layout/dagre/src/coordinate-system.js.map +1 -0
  112. package/lib/layout/dagre/src/data/list.d.ts +8 -0
  113. package/lib/layout/dagre/src/data/list.js +53 -0
  114. package/lib/layout/dagre/src/data/list.js.map +1 -0
  115. package/lib/layout/dagre/src/debug.d.ts +4 -0
  116. package/lib/layout/dagre/src/debug.js +31 -0
  117. package/lib/layout/dagre/src/debug.js.map +1 -0
  118. package/lib/layout/dagre/src/graphlib.d.ts +2 -0
  119. package/lib/layout/dagre/src/graphlib.js +13 -0
  120. package/lib/layout/dagre/src/graphlib.js.map +1 -0
  121. package/lib/layout/dagre/src/greedy-fas.d.ts +4 -0
  122. package/lib/layout/dagre/src/greedy-fas.js +118 -0
  123. package/lib/layout/dagre/src/greedy-fas.js.map +1 -0
  124. package/lib/layout/dagre/src/layout.d.ts +4 -0
  125. package/lib/layout/dagre/src/layout.js +459 -0
  126. package/lib/layout/dagre/src/layout.js.map +1 -0
  127. package/lib/layout/dagre/src/nesting-graph.d.ts +7 -0
  128. package/lib/layout/dagre/src/nesting-graph.js +117 -0
  129. package/lib/layout/dagre/src/nesting-graph.js.map +1 -0
  130. package/lib/layout/dagre/src/normalize.d.ts +7 -0
  131. package/lib/layout/dagre/src/normalize.js +93 -0
  132. package/lib/layout/dagre/src/normalize.js.map +1 -0
  133. package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
  134. package/lib/layout/dagre/src/order/add-subgraph-constraints.js +29 -0
  135. package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
  136. package/lib/layout/dagre/src/order/barycenter.d.ts +12 -0
  137. package/lib/layout/dagre/src/order/barycenter.js +26 -0
  138. package/lib/layout/dagre/src/order/barycenter.js.map +1 -0
  139. package/lib/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
  140. package/lib/layout/dagre/src/order/build-layer-graph.js +72 -0
  141. package/lib/layout/dagre/src/order/build-layer-graph.js.map +1 -0
  142. package/lib/layout/dagre/src/order/cross-count.d.ts +4 -0
  143. package/lib/layout/dagre/src/order/cross-count.js +66 -0
  144. package/lib/layout/dagre/src/order/cross-count.js.map +1 -0
  145. package/lib/layout/dagre/src/order/index.d.ts +4 -0
  146. package/lib/layout/dagre/src/order/index.js +93 -0
  147. package/lib/layout/dagre/src/order/index.js.map +1 -0
  148. package/lib/layout/dagre/src/order/init-data-order.d.ts +7 -0
  149. package/lib/layout/dagre/src/order/init-data-order.js +27 -0
  150. package/lib/layout/dagre/src/order/init-data-order.js.map +1 -0
  151. package/lib/layout/dagre/src/order/init-order.d.ts +4 -0
  152. package/lib/layout/dagre/src/order/init-order.js +51 -0
  153. package/lib/layout/dagre/src/order/init-order.js.map +1 -0
  154. package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
  155. package/lib/layout/dagre/src/order/resolve-conflicts.js +116 -0
  156. package/lib/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
  157. package/lib/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
  158. package/lib/layout/dagre/src/order/sort-subgraph.js +84 -0
  159. package/lib/layout/dagre/src/order/sort-subgraph.js.map +1 -0
  160. package/lib/layout/dagre/src/order/sort.d.ts +2 -0
  161. package/lib/layout/dagre/src/order/sort.js +72 -0
  162. package/lib/layout/dagre/src/order/sort.js.map +1 -0
  163. package/lib/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
  164. package/lib/layout/dagre/src/parent-dummy-chains.js +80 -0
  165. package/lib/layout/dagre/src/parent-dummy-chains.js.map +1 -0
  166. package/lib/layout/dagre/src/position/bk.d.ts +32 -0
  167. package/lib/layout/dagre/src/position/bk.js +413 -0
  168. package/lib/layout/dagre/src/position/bk.js.map +1 -0
  169. package/lib/layout/dagre/src/position/index.d.ts +4 -0
  170. package/lib/layout/dagre/src/position/index.js +58 -0
  171. package/lib/layout/dagre/src/position/index.js.map +1 -0
  172. package/lib/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
  173. package/lib/layout/dagre/src/rank/feasible-tree.js +156 -0
  174. package/lib/layout/dagre/src/rank/feasible-tree.js.map +1 -0
  175. package/lib/layout/dagre/src/rank/index.d.ts +4 -0
  176. package/lib/layout/dagre/src/rank/index.js +58 -0
  177. package/lib/layout/dagre/src/rank/index.js.map +1 -0
  178. package/lib/layout/dagre/src/rank/network-simplex.d.ts +12 -0
  179. package/lib/layout/dagre/src/rank/network-simplex.js +212 -0
  180. package/lib/layout/dagre/src/rank/network-simplex.js.map +1 -0
  181. package/lib/layout/dagre/src/rank/util.d.ts +12 -0
  182. package/lib/layout/dagre/src/rank/util.js +114 -0
  183. package/lib/layout/dagre/src/rank/util.js.map +1 -0
  184. package/lib/layout/dagre/src/util.d.ts +50 -0
  185. package/lib/layout/dagre/src/util.js +281 -0
  186. package/lib/layout/dagre/src/util.js.map +1 -0
  187. package/lib/layout/dagre.d.ts +3 -3
  188. package/lib/layout/dagre.js +37 -13
  189. package/lib/layout/dagre.js.map +1 -1
  190. package/lib/layout/force/force-in-a-box.js +1 -0
  191. package/lib/layout/force/force-in-a-box.js.map +1 -1
  192. package/lib/layout/fruchterman.js +12 -36
  193. package/lib/layout/fruchterman.js.map +1 -1
  194. package/lib/layout/types.d.ts +1 -1
  195. package/package.json +4 -4
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var util_1 = __importDefault(require("./util"));
7
+ /*
8
+ * Breaks any long edges in the graph into short segments that span 1 layer
9
+ * each. This operation is undoable with the denormalize function.
10
+ *
11
+ * Pre-conditions:
12
+ *
13
+ * 1. The input graph is a DAG.
14
+ * 2. Each node in the graph has a "rank" property.
15
+ *
16
+ * Post-condition:
17
+ *
18
+ * 1. All edges in the graph have a length of 1.
19
+ * 2. Dummy nodes are added where edges have been split into segments.
20
+ * 3. The graph is augmented with a "dummyChains" attribute which contains
21
+ * the first dummy in each chain of dummy nodes produced.
22
+ */
23
+ var run = function (g) {
24
+ g.graph().dummyChains = [];
25
+ g.edges().forEach(function (edge) { return normalizeEdge(g, edge); });
26
+ };
27
+ var normalizeEdge = function (g, e) {
28
+ var _a, _b;
29
+ var v = e.v;
30
+ var vRank = g.node(v).rank;
31
+ var w = e.w;
32
+ var wRank = g.node(w).rank;
33
+ var name = e.name;
34
+ var edgeLabel = g.edge(e);
35
+ var labelRank = edgeLabel.labelRank;
36
+ if (wRank === vRank + 1)
37
+ return;
38
+ g.removeEdge(e);
39
+ var dummy;
40
+ var attrs;
41
+ var i;
42
+ for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {
43
+ edgeLabel.points = [];
44
+ attrs = {
45
+ edgeLabel: edgeLabel,
46
+ width: 0,
47
+ height: 0,
48
+ edgeObj: e,
49
+ rank: vRank
50
+ };
51
+ dummy = util_1.default.addDummyNode(g, "edge", attrs, "_d");
52
+ if (vRank === labelRank) {
53
+ attrs.width = edgeLabel.width;
54
+ attrs.height = edgeLabel.height;
55
+ attrs.dummy = "edge-label";
56
+ attrs.labelpos = edgeLabel.labelpos;
57
+ }
58
+ g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);
59
+ if (i === 0) {
60
+ if (!g.graph().dummyChains)
61
+ g.graph().dummyChains = [];
62
+ (_b = (_a = g.graph()) === null || _a === void 0 ? void 0 : _a.dummyChains) === null || _b === void 0 ? void 0 : _b.push(dummy);
63
+ }
64
+ v = dummy;
65
+ }
66
+ g.setEdge(v, w, { weight: edgeLabel.weight }, name);
67
+ };
68
+ var undo = function (g) {
69
+ var _a;
70
+ (_a = g.graph().dummyChains) === null || _a === void 0 ? void 0 : _a.forEach(function (v) {
71
+ var _a;
72
+ var node = g.node(v);
73
+ var origLabel = node.edgeLabel;
74
+ var w;
75
+ node.edgeObj && g.setEdge(node.edgeObj, origLabel);
76
+ var currentV = v;
77
+ while (node.dummy) {
78
+ w = (_a = g.successors(currentV)) === null || _a === void 0 ? void 0 : _a[0];
79
+ g.removeNode(currentV);
80
+ origLabel.points.push({ x: node.x, y: node.y });
81
+ if (node.dummy === "edge-label") {
82
+ origLabel.x = node.x;
83
+ origLabel.y = node.y;
84
+ origLabel.width = node.width;
85
+ origLabel.height = node.height;
86
+ }
87
+ currentV = w;
88
+ node = g.node(currentV);
89
+ }
90
+ });
91
+ };
92
+ exports.default = { run: run, undo: undo };
93
+ //# 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,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var addSubgraphConstraints = function (g, cg, vs) {
4
+ var prev = {};
5
+ var rootPrev;
6
+ vs.forEach(function (v) {
7
+ var child = g.parent(v);
8
+ var parent;
9
+ var prevChild;
10
+ while (child) {
11
+ parent = g.parent(child);
12
+ if (parent) {
13
+ prevChild = prev[parent];
14
+ prev[parent] = child;
15
+ }
16
+ else {
17
+ prevChild = rootPrev;
18
+ rootPrev = child;
19
+ }
20
+ if (prevChild && prevChild !== child) {
21
+ cg.setEdge(prevChild, child);
22
+ return;
23
+ }
24
+ child = parent;
25
+ }
26
+ });
27
+ };
28
+ exports.default = addSubgraphConstraints;
29
+ //# 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,IAAM,sBAAsB,GAAG,UAAC,CAAQ,EAAE,EAAS,EAAE,EAAY;IAC/D,IAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,IAAI,QAAa,CAAC;IAElB,EAAE,CAAC,OAAO,CAAC,UAAC,CAAC;QACb,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,kBAAe,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,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var barycenter = function (g, movable) {
4
+ return movable.map(function (v) {
5
+ var inV = g.inEdges(v);
6
+ if (!(inV === null || inV === void 0 ? void 0 : inV.length)) {
7
+ return { v: v };
8
+ }
9
+ {
10
+ var result_1 = { sum: 0, weight: 0 };
11
+ inV.forEach(function (e) {
12
+ var edge = g.edge(e);
13
+ var nodeU = g.node(e.v);
14
+ result_1.sum += (edge.weight * nodeU.order);
15
+ result_1.weight += edge.weight;
16
+ });
17
+ return {
18
+ v: v,
19
+ barycenter: result_1.sum / result_1.weight,
20
+ weight: result_1.weight
21
+ };
22
+ }
23
+ });
24
+ };
25
+ exports.default = barycenter;
26
+ //# 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,IAAM,UAAU,GAAG,UAAC,CAAQ,EAAE,OAAiB;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC;QACnB,IAAM,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,GAAA,EAAE,CAAC;SACd;QAAE;YACD,IAAM,QAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,OAAO,CAAC,UAAC,CAAC;gBACZ,IAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,QAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAI,KAAK,CAAC,KAAgB,CAAC,CAAC;gBACtD,QAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,OAAO;gBACL,CAAC,GAAA;gBACD,UAAU,EAAE,QAAM,CAAC,GAAG,GAAG,QAAM,CAAC,MAAM;gBACtC,MAAM,EAAE,QAAM,CAAC,MAAM;aACtB,CAAC;SACH;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,kBAAe,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,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var graphlib_1 = __importDefault(require("../graphlib"));
7
+ var Graph = graphlib_1.default.Graph;
8
+ /*
9
+ * Constructs a graph that can be used to sort a layer of nodes. The graph will
10
+ * contain all base and subgraph nodes from the request layer in their original
11
+ * hierarchy and any edges that are incident on these nodes and are of the type
12
+ * requested by the "relationship" parameter.
13
+ *
14
+ * Nodes from the requested rank that do not have parents are assigned a root
15
+ * node in the output graph, which is set in the root graph attribute. This
16
+ * makes it easy to walk the hierarchy of movable nodes during ordering.
17
+ *
18
+ * Pre-conditions:
19
+ *
20
+ * 1. Input graph is a DAG
21
+ * 2. Base nodes in the input graph have a rank attribute
22
+ * 3. Subgraph nodes in the input graph has minRank and maxRank attributes
23
+ * 4. Edges have an assigned weight
24
+ *
25
+ * Post-conditions:
26
+ *
27
+ * 1. Output graph has all nodes in the movable rank with preserved
28
+ * hierarchy.
29
+ * 2. Root nodes in the movable layer are made children of the node
30
+ * indicated by the root attribute of the graph.
31
+ * 3. Non-movable nodes incident on movable nodes, selected by the
32
+ * relationship parameter, are included in the graph (without hierarchy).
33
+ * 4. Edges incident on movable nodes, selected by the relationship
34
+ * parameter, are added to the output graph.
35
+ * 5. The weights for copied edges are aggregated as need, since the output
36
+ * graph is not a multi-graph.
37
+ */
38
+ var buildLayerGraph = function (g, rank, relationship) {
39
+ var root = createRootNode(g);
40
+ var result = new Graph({ compound: true }).setGraph({ root: root })
41
+ .setDefaultNodeLabel(function (v) { return g.node(v); });
42
+ g.nodes().forEach(function (v) {
43
+ var node = g.node(v);
44
+ var parent = g.parent(v);
45
+ if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) {
46
+ result.setNode(v);
47
+ result.setParent(v, parent || root);
48
+ // This assumes we have only short edges!
49
+ g[relationship](v).forEach(function (e) {
50
+ var u = e.v === v ? e.w : e.v;
51
+ var edge = result.edge(u, v);
52
+ var weight = edge !== undefined ? edge.weight : 0;
53
+ result.setEdge(u, v, { weight: g.edge(e).weight + weight });
54
+ });
55
+ if (node.hasOwnProperty("minRank")) {
56
+ result.setNode(v, {
57
+ borderLeft: node.borderLeft[rank],
58
+ borderRight: node.borderRight[rank]
59
+ });
60
+ }
61
+ }
62
+ });
63
+ return result;
64
+ };
65
+ var createRootNode = function (g) {
66
+ var v;
67
+ while (g.hasNode((v = "_root" + Math.random())))
68
+ ;
69
+ return v;
70
+ };
71
+ exports.default = buildLayerGraph;
72
+ //# 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,yDAAmC;AAGnC,IAAM,KAAK,GAAI,kBAAgB,CAAC,KAAK,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,IAAM,eAAe,GAAG,UAAC,CAAS,EAAE,IAAY,EAAE,YAAoB;IACpE,IAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC;SAC1D,mBAAmB,CAAC,UAAC,CAAS,IAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/D,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,UAAC,CAAC;QAClB,IAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,IAAM,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,UAAC,CAAM;gBACzC,IAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,IAAM,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,IAAM,cAAc,GAAG,UAAC,CAAS;IAC/B,IAAI,CAAC,CAAC;IACN,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,UAAQ,IAAI,CAAC,MAAM,EAAI,CAAC,CAAC;QAAC,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,kBAAe,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,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var util_1 = require("../util");
4
+ /*
5
+ * A function that takes a layering (an array of layers, each with an array of
6
+ * ordererd nodes) and a graph and returns a weighted crossing count.
7
+ *
8
+ * Pre-conditions:
9
+ *
10
+ * 1. Input graph must be simple (not a multigraph), directed, and include
11
+ * only simple edges.
12
+ * 2. Edges in the input graph must have assigned weights.
13
+ *
14
+ * Post-conditions:
15
+ *
16
+ * 1. The graph and layering matrix are left unchanged.
17
+ *
18
+ * This algorithm is derived from Barth, et al., "Bilayer Cross Counting."
19
+ */
20
+ var twoLayerCrossCount = function (g, northLayer, southLayer) {
21
+ // Sort all of the edges between the north and south layers by their position
22
+ // in the north layer and then the south. Map these edges to the position of
23
+ // their head in the south layer.
24
+ var southPos = (0, util_1.zipObject)(southLayer, southLayer.map(function (v, i) { return i; }));
25
+ var unflat = northLayer.map(function (v) {
26
+ var _a;
27
+ var unsort = (_a = g.outEdges(v)) === null || _a === void 0 ? void 0 : _a.map(function (e) {
28
+ return { pos: southPos[e.w], weight: g.edge(e).weight };
29
+ });
30
+ return unsort === null || unsort === void 0 ? void 0 : unsort.sort(function (a, b) { return a.pos - b.pos; });
31
+ });
32
+ // @ts-ignore
33
+ var southEntries = unflat.flat();
34
+ // Build the accumulator tree
35
+ var firstIndex = 1;
36
+ while (firstIndex < southLayer.length)
37
+ firstIndex <<= 1;
38
+ var treeSize = 2 * firstIndex - 1;
39
+ firstIndex -= 1;
40
+ var tree = Array(treeSize).fill(0, 0, treeSize);
41
+ // Calculate the weighted crossings
42
+ var cc = 0;
43
+ southEntries.forEach(function (entry) {
44
+ var index = entry.pos + firstIndex;
45
+ tree[index] += entry.weight;
46
+ var weightSum = 0;
47
+ while (index > 0) {
48
+ if (index % 2) {
49
+ weightSum += tree[index + 1];
50
+ }
51
+ index = (index - 1) >> 1;
52
+ tree[index] += entry.weight;
53
+ }
54
+ cc += entry.weight * weightSum;
55
+ });
56
+ return cc;
57
+ };
58
+ var crossCount = function (g, layering) {
59
+ var cc = 0;
60
+ for (var i = 1; i < layering.length; ++i) {
61
+ cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);
62
+ }
63
+ return cc;
64
+ };
65
+ exports.default = crossCount;
66
+ //# 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,gCAAoC;AAIpC;;;;;;;;;;;;;;;GAeG;AAEH,IAAM,kBAAkB,GAAG,UAAC,CAAQ,EAAE,UAAoB,EAAE,UAAoB;IAC9E,6EAA6E;IAC7E,4EAA4E;IAC5E,iCAAiC;IACjC,IAAM,QAAQ,GAAG,IAAA,gBAAS,EAAC,UAAU,EACnC,UAAU,CAAC,GAAG,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,CAAC;;QAC9B,IAAM,MAAM,GAAG,MAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,GAAG,CAAC,UAAC,CAAC;YAClC,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,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAb,CAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,aAAa;IACb,IAAM,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,IAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;IACpC,UAAU,IAAI,CAAC,CAAC;IAChB,IAAM,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,UAAC,KAAU;QAC9B,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,IAAM,UAAU,GAAG,UAAC,CAAQ,EAAE,QAAa;IACzC,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,kBAAe,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,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var init_order_1 = __importDefault(require("./init-order"));
7
+ var cross_count_1 = __importDefault(require("./cross-count"));
8
+ var build_layer_graph_1 = __importDefault(require("./build-layer-graph"));
9
+ var add_subgraph_constraints_1 = __importDefault(require("./add-subgraph-constraints"));
10
+ var sort_subgraph_1 = __importDefault(require("./sort-subgraph"));
11
+ var graphlib_1 = __importDefault(require("../graphlib"));
12
+ var util_1 = __importDefault(require("../util"));
13
+ var util_2 = require("../../../../util");
14
+ var Graph = graphlib_1.default.Graph;
15
+ /*
16
+ * Applies heuristics to minimize edge crossings in the graph and sets the best
17
+ * order solution as an order attribute on each node.
18
+ *
19
+ * Pre-conditions:
20
+ *
21
+ * 1. Graph must be DAG
22
+ * 2. Graph nodes must be objects with a "rank" attribute
23
+ * 3. Graph edges must have the "weight" attribute
24
+ *
25
+ * Post-conditions:
26
+ *
27
+ * 1. Graph nodes will have an "order" attribute based on the results of the
28
+ * algorithm.
29
+ */
30
+ var order = function (g) {
31
+ var maxRank = util_1.default.maxRank(g);
32
+ var range1 = [];
33
+ var range2 = [];
34
+ for (var i = 1; i < maxRank + 1; i++)
35
+ range1.push(i);
36
+ for (var i = maxRank - 1; i > -1; i--)
37
+ range2.push(i);
38
+ var downLayerGraphs = buildLayerGraphs(g, range1, "inEdges");
39
+ var upLayerGraphs = buildLayerGraphs(g, range2, "outEdges");
40
+ var layering = (0, init_order_1.default)(g);
41
+ assignOrder(g, layering);
42
+ var bestCC = Number.POSITIVE_INFINITY;
43
+ var best;
44
+ for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
45
+ sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);
46
+ layering = util_1.default.buildLayerMatrix(g);
47
+ var cc = (0, cross_count_1.default)(g, layering);
48
+ if (cc < bestCC) {
49
+ lastBest = 0;
50
+ best = (0, util_2.clone)(layering);
51
+ bestCC = cc;
52
+ }
53
+ }
54
+ // consider use previous result, maybe somewhat reduendant
55
+ layering = (0, init_order_1.default)(g);
56
+ assignOrder(g, layering);
57
+ for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
58
+ sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2, true);
59
+ layering = util_1.default.buildLayerMatrix(g);
60
+ var cc = (0, cross_count_1.default)(g, layering);
61
+ if (cc < bestCC) {
62
+ lastBest = 0;
63
+ best = (0, util_2.clone)(layering);
64
+ bestCC = cc;
65
+ }
66
+ }
67
+ assignOrder(g, best);
68
+ };
69
+ var buildLayerGraphs = function (g, ranks, relationship) {
70
+ return ranks.map(function (rank) {
71
+ return (0, build_layer_graph_1.default)(g, rank, relationship);
72
+ });
73
+ };
74
+ var sweepLayerGraphs = function (layerGraphs, biasRight, usePrev) {
75
+ var cg = new Graph();
76
+ layerGraphs === null || layerGraphs === void 0 ? void 0 : layerGraphs.forEach(function (lg) {
77
+ var root = lg.graph().root;
78
+ var sorted = (0, sort_subgraph_1.default)(lg, root, cg, biasRight, usePrev);
79
+ sorted.vs.forEach(function (v, i) {
80
+ lg.node(v).order = i;
81
+ });
82
+ (0, add_subgraph_constraints_1.default)(lg, cg, sorted.vs);
83
+ });
84
+ };
85
+ var assignOrder = function (g, layering) {
86
+ layering === null || layering === void 0 ? void 0 : layering.forEach(function (layer) {
87
+ layer.forEach(function (v, i) {
88
+ g.node(v).order = i;
89
+ });
90
+ });
91
+ };
92
+ exports.default = order;
93
+ //# 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,4DAAqC;AACrC,8DAAuC;AACvC,0EAAkD;AAClD,wFAAgE;AAChE,kEAA2C;AAC3C,yDAAmC;AACnC,iDAA2B;AAC3B,yCAAyC;AAIzC,IAAM,KAAK,GAAI,kBAAgB,CAAC,KAAK,CAAC;AAEtC;;;;;;;;;;;;;;GAcG;AACH,IAAM,KAAK,GAAG,UAAC,CAAS;IACtB,IAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,IAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAM,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,IAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAE9D,IAAI,QAAQ,GAAG,IAAA,oBAAS,EAAC,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,cAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,IAAM,EAAE,GAAG,IAAA,qBAAU,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,EAAE,GAAG,MAAM,EAAE;YACf,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,GAAG,IAAA,YAAK,EAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,GAAG,EAAE,CAAC;SACb;KACF;IAED,0DAA0D;IAC1D,QAAQ,GAAG,IAAA,oBAAS,EAAC,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,cAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,IAAM,EAAE,GAAG,IAAA,qBAAU,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,EAAE,GAAG,MAAM,EAAE;YACf,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,GAAG,IAAA,YAAK,EAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,GAAG,EAAE,CAAC;SACb;KACF;IACD,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,IAAM,gBAAgB,GAAG,UAAC,CAAS,EAAE,KAAe,EAAE,YAAoB;IACxE,OAAO,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI;QACpB,OAAO,IAAA,2BAAe,EAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAM,gBAAgB,GAAG,UAAC,WAAqB,EAAE,SAAc,EAAE,OAAa;IAC5E,IAAM,EAAE,GAAG,IAAI,KAAK,EAAS,CAAC;IAC9B,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,UAAC,EAAE;QACtB,IAAM,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAc,CAAC;QACvC,IAAM,MAAM,GAAG,IAAA,uBAAY,EAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,UAAC,CAAS,EAAE,CAAS;YACrC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,IAAA,kCAAsB,EAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAM,WAAW,GAAG,UAAC,CAAS,EAAE,QAAa;IAC3C,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC,UAAC,KAAU;QAC3B,KAAK,CAAC,OAAO,CAAC,UAAC,CAAS,EAAE,CAAS;YACjC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,kBAAe,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,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * 按照数据中的结果设置fixorder
5
+ */
6
+ var initDataOrder = function (g, nodeOrder) {
7
+ var simpleNodes = g.nodes().filter(function (v) {
8
+ var _a;
9
+ return !((_a = g.children(v)) === null || _a === void 0 ? void 0 : _a.length);
10
+ });
11
+ var ranks = simpleNodes.map(function (v) { return g.node(v).rank; });
12
+ var maxRank = Math.max.apply(Math, ranks);
13
+ var layers = [];
14
+ for (var i = 0; i < maxRank + 1; i++) {
15
+ layers.push([]);
16
+ }
17
+ nodeOrder.forEach(function (n) {
18
+ var node = g.node(n);
19
+ // 只考虑原有节点,dummy节点需要按照后续算法排出
20
+ if (!node || node.dummy)
21
+ return;
22
+ node.fixorder = layers[node.rank].length; // 设置fixorder为当层的顺序
23
+ layers[node.rank].push(n);
24
+ });
25
+ };
26
+ exports.default = initDataOrder;
27
+ //# 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,IAAM,aAAa,GAAG,UAAC,CAAQ,EAAE,SAAmB;IAClD,IAAM,WAAW,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,UAAC,CAAC;;QACrC,OAAO,CAAC,CAAA,MAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAA,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,IAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,EAA1B,CAA0B,CAAC,CAAC;IACjE,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,KAAK,CAAC,CAAC;IACnC,IAAM,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,UAAC,CAAC;QAClB,IAAM,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,kBAAe,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;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /*
4
+ * Assigns an initial order value for each node by performing a DFS search
5
+ * starting from nodes in the first rank. Nodes are assigned an order in their
6
+ * rank as they are first visited.
7
+ *
8
+ * This approach comes from Gansner, et al., "A Technique for Drawing Directed
9
+ * Graphs."
10
+ *
11
+ * Returns a layering matrix with an array per layer and each layer sorted by
12
+ * the order of its nodes.
13
+ */
14
+ var initOrder = function (g) {
15
+ var visited = {};
16
+ var simpleNodes = g.nodes().filter(function (v) {
17
+ var _a;
18
+ return !((_a = g.children(v)) === null || _a === void 0 ? void 0 : _a.length);
19
+ });
20
+ var nodeRanks = simpleNodes.map(function (v) { return g.node(v).rank; });
21
+ var maxRank = Math.max.apply(Math, nodeRanks);
22
+ var layers = [];
23
+ for (var i = 0; i < maxRank + 1; i++) {
24
+ layers.push([]);
25
+ }
26
+ // const layers = _.map(_.range(maxRank + 1), function() { return []; });
27
+ var dfs = function (v) {
28
+ var _a;
29
+ if (visited.hasOwnProperty(v))
30
+ return;
31
+ visited[v] = true;
32
+ var node = g.node(v);
33
+ layers[node.rank].push(v);
34
+ (_a = g.successors(v)) === null || _a === void 0 ? void 0 : _a.forEach(function (child) { return dfs(child); });
35
+ };
36
+ var orderedVs = simpleNodes.sort(function (a, b) { return g.node(a).rank - g.node(b).rank; });
37
+ // const orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; });
38
+ // 有fixOrder的,直接排序好放进去
39
+ var beforeSort = orderedVs.filter(function (n) {
40
+ return g.node(n).fixorder !== undefined;
41
+ });
42
+ var fixOrderNodes = beforeSort.sort(function (a, b) { return g.node(a).fixorder - g.node(b).fixorder; });
43
+ fixOrderNodes.forEach(function (n) {
44
+ layers[g.node(n).rank].push(n);
45
+ visited[n] = true;
46
+ });
47
+ orderedVs.forEach(dfs);
48
+ return layers;
49
+ };
50
+ exports.default = initOrder;
51
+ //# 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,IAAM,SAAS,GAAG,UAAC,CAAQ;IACzB,IAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAM,WAAW,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,UAAC,CAAC;;QACrC,OAAO,CAAC,CAAA,MAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAA,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,IAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,EAA1B,CAA0B,CAAC,CAAC;IACrE,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,SAAS,CAAC,CAAC;IACvC,IAAM,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,IAAM,GAAG,GAAG,UAAC,CAAS;;QACpB,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO;QACtC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAClB,IAAM,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,UAAC,KAAK,IAAK,OAAA,GAAG,CAAC,KAAY,CAAC,EAAjB,CAAiB,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,IAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,GAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,EAAvD,CAAuD,CAAC,CAAC;IACtG,mFAAmF;IAEnF,sBAAsB;IACtB,IAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,UAAC,CAAC;QACpC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,IAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAmB,GAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAmB,EAA/D,CAA+D,CAAC,CAAC;IACjH,aAAa,CAAC,OAAO,CAAC,UAAC,CAAC;QACtB,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,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { graphlib as IGraphLib } from "../../graphlib";
2
+ declare type Graph = IGraphLib.Graph;
3
+ declare const resolveConflicts: (entries: any, cg: Graph) => any[];
4
+ export default resolveConflicts;