@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,413 @@
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
+ exports.balance = exports.findSmallestWidthAlignment = exports.alignCoordinates = exports.horizontalCompaction = exports.verticalAlignment = exports.hasConflict = exports.addConflict = exports.findType2Conflicts = exports.findType1Conflicts = exports.positionX = void 0;
7
+ var graphlib_1 = __importDefault(require("../graphlib"));
8
+ var util_1 = __importDefault(require("../util"));
9
+ var Graph = graphlib_1.default.Graph;
10
+ /*
11
+ * This module provides coordinate assignment based on Brandes and Köpf, "Fast
12
+ * and Simple Horizontal Coordinate Assignment."
13
+ */
14
+ /*
15
+ * Marks all edges in the graph with a type-1 conflict with the "type1Conflict"
16
+ * property. A type-1 conflict is one where a non-inner segment crosses an
17
+ * inner segment. An inner segment is an edge with both incident nodes marked
18
+ * with the "dummy" property.
19
+ *
20
+ * This algorithm scans layer by layer, starting with the second, for type-1
21
+ * conflicts between the current layer and the previous layer. For each layer
22
+ * it scans the nodes from left to right until it reaches one that is incident
23
+ * on an inner segment. It then scans predecessors to determine if they have
24
+ * edges that cross that inner segment. At the end a final scan is done for all
25
+ * nodes on the current rank to see if they cross the last visited inner
26
+ * segment.
27
+ *
28
+ * This algorithm (safely) assumes that a dummy node will only be incident on a
29
+ * single node in the layers being scanned.
30
+ */
31
+ var findType1Conflicts = function (g, layering) {
32
+ var conflicts = {};
33
+ var visitLayer = function (prevLayer, layer) {
34
+ // last visited node in the previous layer that is incident on an inner
35
+ // segment.
36
+ var k0 = 0;
37
+ // Tracks the last node in this layer scanned for crossings with a type-1
38
+ // segment.
39
+ var scanPos = 0;
40
+ var prevLayerLength = prevLayer.length;
41
+ var lastNode = layer[(layer === null || layer === void 0 ? void 0 : layer.length) - 1];
42
+ layer.forEach(function (v, i) {
43
+ var w = findOtherInnerSegmentNode(g, v);
44
+ var k1 = w ? g.node(w).order : prevLayerLength;
45
+ if (w || v === lastNode) {
46
+ layer.slice(scanPos, i + 1).forEach(function (scanNode) {
47
+ var _a;
48
+ (_a = g.predecessors(scanNode)) === null || _a === void 0 ? void 0 : _a.forEach(function (u) {
49
+ var uLabel = g.node(u);
50
+ var uPos = uLabel.order;
51
+ if ((uPos < k0 || k1 < uPos) &&
52
+ !(uLabel.dummy && g.node(scanNode).dummy)) {
53
+ addConflict(conflicts, u, scanNode);
54
+ }
55
+ });
56
+ });
57
+ scanPos = i + 1;
58
+ k0 = k1;
59
+ }
60
+ });
61
+ return layer;
62
+ };
63
+ layering.reduce(visitLayer);
64
+ return conflicts;
65
+ };
66
+ exports.findType1Conflicts = findType1Conflicts;
67
+ var findType2Conflicts = function (g, layering) {
68
+ var conflicts = {};
69
+ var scan = function (south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {
70
+ var v;
71
+ var range = [];
72
+ for (var i = southPos; i < southEnd; i++) {
73
+ range.push(i);
74
+ }
75
+ range.forEach(function (i) {
76
+ var _a;
77
+ v = south[i];
78
+ if (g.node(v).dummy) {
79
+ (_a = g.predecessors(v)) === null || _a === void 0 ? void 0 : _a.forEach(function (u) {
80
+ var uNode = g.node(u);
81
+ if (uNode.dummy &&
82
+ (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {
83
+ addConflict(conflicts, u, v);
84
+ }
85
+ });
86
+ }
87
+ });
88
+ };
89
+ var visitLayer = function (north, south) {
90
+ var prevNorthPos = -1;
91
+ var nextNorthPos;
92
+ var southPos = 0;
93
+ south.forEach(function (v, southLookahead) {
94
+ if (g.node(v).dummy === "border") {
95
+ var predecessors = g.predecessors(v) || [];
96
+ if (predecessors.length) {
97
+ nextNorthPos = g.node(predecessors[0]).order;
98
+ scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);
99
+ southPos = southLookahead;
100
+ prevNorthPos = nextNorthPos;
101
+ }
102
+ }
103
+ scan(south, southPos, south.length, nextNorthPos, north.length);
104
+ });
105
+ return south;
106
+ };
107
+ layering.reduce(visitLayer);
108
+ return conflicts;
109
+ };
110
+ exports.findType2Conflicts = findType2Conflicts;
111
+ var findOtherInnerSegmentNode = function (g, v) {
112
+ var _a;
113
+ if (g.node(v).dummy) {
114
+ return (_a = g.predecessors(v)) === null || _a === void 0 ? void 0 : _a.find(function (u) { return g.node(u).dummy; });
115
+ }
116
+ };
117
+ var addConflict = function (conflicts, v, w) {
118
+ var vv = v;
119
+ var ww = w;
120
+ if (vv > ww) {
121
+ var tmp = vv;
122
+ vv = ww;
123
+ ww = tmp;
124
+ }
125
+ var conflictsV = conflicts[vv];
126
+ if (!conflictsV) {
127
+ conflicts[vv] = conflictsV = {};
128
+ }
129
+ conflictsV[ww] = true;
130
+ };
131
+ exports.addConflict = addConflict;
132
+ var hasConflict = function (conflicts, v, w) {
133
+ var vv = v;
134
+ var ww = w;
135
+ if (vv > ww) {
136
+ var tmp = v;
137
+ vv = ww;
138
+ ww = tmp;
139
+ }
140
+ return conflicts[vv] && conflicts[vv].hasOwnProperty(ww);
141
+ };
142
+ exports.hasConflict = hasConflict;
143
+ /*
144
+ * Try to align nodes into vertical "blocks" where possible. This algorithm
145
+ * attempts to align a node with one of its median neighbors. If the edge
146
+ * connecting a neighbor is a type-1 conflict then we ignore that possibility.
147
+ * If a previous node has already formed a block with a node after the node
148
+ * we're trying to form a block with, we also ignore that possibility - our
149
+ * blocks would be split in that scenario.
150
+ */
151
+ var verticalAlignment = function (g, layering, conflicts, neighborFn) {
152
+ var root = {};
153
+ var align = {};
154
+ var pos = {};
155
+ // We cache the position here based on the layering because the graph and
156
+ // layering may be out of sync. The layering matrix is manipulated to
157
+ // generate different extreme alignments.
158
+ layering.forEach(function (layer) {
159
+ layer.forEach(function (v, order) {
160
+ root[v] = v;
161
+ align[v] = v;
162
+ pos[v] = order;
163
+ });
164
+ });
165
+ layering.forEach(function (layer) {
166
+ var prevIdx = -1;
167
+ layer.forEach(function (v) {
168
+ var ws = neighborFn(v);
169
+ if (ws.length) {
170
+ ws = ws.sort(function (a, b) { return pos[a] - pos[b]; });
171
+ var mp = (ws.length - 1) / 2;
172
+ for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {
173
+ var w = ws[i];
174
+ if (align[v] === v &&
175
+ prevIdx < pos[w] &&
176
+ !hasConflict(conflicts, v, w)) {
177
+ align[w] = v;
178
+ align[v] = root[v] = root[w];
179
+ prevIdx = pos[w];
180
+ }
181
+ }
182
+ }
183
+ });
184
+ });
185
+ return { root: root, align: align };
186
+ };
187
+ exports.verticalAlignment = verticalAlignment;
188
+ var horizontalCompaction = function (g, layering, root, align, reverseSep) {
189
+ // This portion of the algorithm differs from BK due to a number of problems.
190
+ // Instead of their algorithm we construct a new block graph and do two
191
+ // sweeps. The first sweep places blocks with the smallest possible
192
+ // coordinates. The second sweep removes unused space by moving blocks to the
193
+ // greatest coordinates without violating separation.
194
+ var xs = {};
195
+ var blockG = buildBlockGraph(g, layering, root, reverseSep);
196
+ var borderType = reverseSep ? "borderLeft" : "borderRight";
197
+ var iterate = function (setXsFunc, nextNodesFunc) {
198
+ var stack = blockG.nodes();
199
+ var elem = stack.pop();
200
+ var visited = {};
201
+ while (elem) {
202
+ if (visited[elem]) {
203
+ setXsFunc(elem);
204
+ }
205
+ else {
206
+ visited[elem] = true;
207
+ stack.push(elem);
208
+ stack = stack.concat(nextNodesFunc(elem));
209
+ }
210
+ elem = stack.pop();
211
+ }
212
+ };
213
+ // First pass, assign smallest coordinates
214
+ var pass1 = function (elem) {
215
+ xs[elem] = (blockG.inEdges(elem) || []).reduce(function (acc, e) {
216
+ return Math.max(acc, (xs[e.v] || 0) + blockG.edge(e));
217
+ }, 0);
218
+ };
219
+ // Second pass, assign greatest coordinates
220
+ var pass2 = function (elem) {
221
+ var min = (blockG.outEdges(elem) || []).reduce(function (acc, e) {
222
+ return Math.min(acc, (xs[e.w] || 0) - blockG.edge(e));
223
+ }, Number.POSITIVE_INFINITY);
224
+ var node = g.node(elem);
225
+ if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {
226
+ xs[elem] = Math.max(xs[elem], min);
227
+ }
228
+ };
229
+ iterate(pass1, blockG.predecessors.bind(blockG));
230
+ iterate(pass2, blockG.successors.bind(blockG));
231
+ // Assign x coordinates to all nodes
232
+ // @ts-ignore
233
+ Object.values(align).forEach(function (v) {
234
+ xs[v] = xs[root[v]];
235
+ });
236
+ return xs;
237
+ };
238
+ exports.horizontalCompaction = horizontalCompaction;
239
+ var buildBlockGraph = function (g, layering, root, reverseSep) {
240
+ var blockGraph = new Graph();
241
+ var graphLabel = g.graph();
242
+ var sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);
243
+ layering.forEach(function (layer) {
244
+ var u;
245
+ layer.forEach(function (v) {
246
+ var vRoot = root[v];
247
+ blockGraph.setNode(vRoot);
248
+ if (u) {
249
+ var uRoot = root[u];
250
+ var prevMax = blockGraph.edge(uRoot, vRoot);
251
+ blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));
252
+ }
253
+ u = v;
254
+ });
255
+ });
256
+ return blockGraph;
257
+ };
258
+ /*
259
+ * Returns the alignment that has the smallest width of the given alignments.
260
+ */
261
+ var findSmallestWidthAlignment = function (g, xss) {
262
+ // @ts-ignore
263
+ return util_1.default.minBy(Object.values(xss), function (xs) {
264
+ var max = Number.NEGATIVE_INFINITY;
265
+ var min = Number.POSITIVE_INFINITY;
266
+ Object.keys(xs).forEach(function (v) {
267
+ var x = xs[v];
268
+ var halfWidth = width(g, v) / 2;
269
+ max = Math.max(x + halfWidth, max);
270
+ min = Math.min(x - halfWidth, min);
271
+ });
272
+ return max - min;
273
+ });
274
+ };
275
+ exports.findSmallestWidthAlignment = findSmallestWidthAlignment;
276
+ /*
277
+ * Align the coordinates of each of the layout alignments such that
278
+ * left-biased alignments have their minimum coordinate at the same point as
279
+ * the minimum coordinate of the smallest width alignment and right-biased
280
+ * alignments have their maximum coordinate at the same point as the maximum
281
+ * coordinate of the smallest width alignment.
282
+ */
283
+ function alignCoordinates(xss, alignTo) {
284
+ // @ts-ignore
285
+ var alignToVals = Object.values(alignTo);
286
+ var alignToMin = Math.min.apply(Math, alignToVals);
287
+ var alignToMax = Math.max.apply(Math, alignToVals);
288
+ ["u", "d"].forEach(function (vert) {
289
+ ["l", "r"].forEach(function (horiz) {
290
+ var alignment = vert + horiz;
291
+ var xs = xss[alignment];
292
+ var delta;
293
+ if (xs === alignTo)
294
+ return;
295
+ var xsVals = Object.values(xs);
296
+ delta = horiz === "l" ? alignToMin - Math.min.apply(Math, xsVals) : alignToMax - Math.max.apply(Math, xsVals);
297
+ if (delta) {
298
+ xss[alignment] = {};
299
+ Object.keys(xs).forEach(function (key) {
300
+ xss[alignment][key] = xs[key] + delta;
301
+ });
302
+ }
303
+ });
304
+ });
305
+ }
306
+ exports.alignCoordinates = alignCoordinates;
307
+ var balance = function (xss, align) {
308
+ var result = {};
309
+ Object.keys(xss.ul).forEach(function (key) {
310
+ if (align) {
311
+ result[key] = xss[align.toLowerCase()][key];
312
+ }
313
+ else {
314
+ // @ts-ignore
315
+ var values = Object.values(xss).map(function (x) { return x[key]; });
316
+ var xs = values.sort(function (a, b) { return (a - b); });
317
+ result[key] = (xs[1] + xs[2]) / 2;
318
+ }
319
+ });
320
+ return result;
321
+ // return _.mapValues(xss.ul, function(ignore, v) {
322
+ // if (align) {
323
+ // return xss[align.toLowerCase()][v];
324
+ // } else {
325
+ // const xs = _.sortBy(_.map(xss, v));
326
+ // return (xs[1] + xs[2]) / 2;
327
+ // }
328
+ // });
329
+ };
330
+ exports.balance = balance;
331
+ var positionX = function (g) {
332
+ var layering = util_1.default.buildLayerMatrix(g);
333
+ var conflicts = Object.assign(findType1Conflicts(g, layering), findType2Conflicts(g, layering));
334
+ var xss = {};
335
+ var adjustedLayering;
336
+ ["u", "d"].forEach(function (vert) {
337
+ // @ts-ignore
338
+ adjustedLayering = vert === "u" ? layering : Object.values(layering).reverse();
339
+ ["l", "r"].forEach(function (horiz) {
340
+ if (horiz === "r") {
341
+ // @ts-ignore
342
+ adjustedLayering = adjustedLayering.map(function (inner) { return Object.values(inner).reverse(); });
343
+ }
344
+ var neighborFn = (vert === "u" ? g.predecessors : g.successors).bind(g);
345
+ var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);
346
+ var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === "r");
347
+ if (horiz === "r") {
348
+ // @ts-ignore
349
+ xs = Object.values(xs).map(function (x) { return -x; });
350
+ }
351
+ xss[vert + horiz] = xs;
352
+ });
353
+ });
354
+ var smallestWidth = findSmallestWidthAlignment(g, xss);
355
+ alignCoordinates(xss, smallestWidth);
356
+ return balance(xss, g.graph().align);
357
+ };
358
+ exports.positionX = positionX;
359
+ var sep = function (nodeSep, edgeSep, reverseSep) {
360
+ return function (g, v, w) {
361
+ var vLabel = g.node(v);
362
+ var wLabel = g.node(w);
363
+ var sum = 0;
364
+ var delta;
365
+ sum += vLabel.width / 2;
366
+ if (vLabel.hasOwnProperty("labelpos")) {
367
+ switch ((vLabel.labelpos || '').toLowerCase()) {
368
+ case "l":
369
+ delta = -vLabel.width / 2;
370
+ break;
371
+ case "r":
372
+ delta = vLabel.width / 2;
373
+ break;
374
+ }
375
+ }
376
+ if (delta) {
377
+ sum += reverseSep ? delta : -delta;
378
+ }
379
+ delta = 0;
380
+ sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;
381
+ sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;
382
+ sum += wLabel.width / 2;
383
+ if (wLabel.hasOwnProperty("labelpos")) {
384
+ switch ((wLabel.labelpos || '').toLowerCase()) {
385
+ case "l":
386
+ delta = wLabel.width / 2;
387
+ break;
388
+ case "r":
389
+ delta = -wLabel.width / 2;
390
+ break;
391
+ }
392
+ }
393
+ if (delta) {
394
+ sum += reverseSep ? delta : -delta;
395
+ }
396
+ delta = 0;
397
+ return sum;
398
+ };
399
+ };
400
+ var width = function (g, v) { var _a; return ((_a = g.node(v)) === null || _a === void 0 ? void 0 : _a.width) || 0; };
401
+ exports.default = {
402
+ positionX: positionX,
403
+ findType1Conflicts: findType1Conflicts,
404
+ findType2Conflicts: findType2Conflicts,
405
+ addConflict: addConflict,
406
+ hasConflict: hasConflict,
407
+ verticalAlignment: verticalAlignment,
408
+ horizontalCompaction: horizontalCompaction,
409
+ alignCoordinates: alignCoordinates,
410
+ findSmallestWidthAlignment: findSmallestWidthAlignment,
411
+ balance: balance
412
+ };
413
+ //# sourceMappingURL=bk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bk.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/position/bk.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAmC;AACnC,iDAA2B;AAI3B,IAAM,KAAK,GAAI,kBAAgB,CAAC,KAAK,CAAC;AAEtC;;;GAGG;AAGH;;;;;;;;;;;;;;;;GAgBG;AACH,IAAM,kBAAkB,GAAG,UAAC,CAAS,EAAE,QAAa;IAClD,IAAM,SAAS,GAAG,EAAE,CAAC;IAErB,IAAM,UAAU,GAAG,UAAC,SAAc,EAAE,KAAU;QAC5C,uEAAuE;QACvE,WAAW;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACT,yEAAyE;QACzE,WAAW;QACb,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC;QACzC,IAAM,QAAQ,GAAG,KAAK,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,IAAG,CAAC,CAAC,CAAC;QAExC,KAAK,CAAC,OAAO,CAAC,UAAC,CAAS,EAAE,CAAS;YACnC,IAAM,CAAC,GAAG,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC;YAEjD,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;gBACvB,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,QAAa;;oBAC/C,MAAA,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,0CAAE,OAAO,CAAC,UAAC,CAAM;wBACvC,IAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACzB,IAAM,IAAI,GAAG,MAAM,CAAC,KAAe,CAAC;wBACpC,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;4BACxB,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;4BAC7C,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;yBACrC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChB,EAAE,GAAG,EAAE,CAAC;aACT;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5B,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AA8WA,gDAAkB;AA5WpB,IAAM,kBAAkB,GAAG,UAAC,CAAS,EAAE,QAAa;IAClD,IAAM,SAAS,GAAG,EAAE,CAAC;IAErB,IAAM,IAAI,GAAG,UAAC,KAAe,EAAE,QAAgB,EAAE,QAAgB,EAAE,eAAuB,EAAE,eAAuB;QACjH,IAAI,CAAM,CAAC;QACX,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAG;YACzC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACf;QACD,KAAK,CAAC,OAAO,CAAC,UAAC,CAAC;;YACd,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;gBACnB,MAAA,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC,UAAC,CAAM;oBAChC,IAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,KAAK,CAAC,KAAK;wBACX,CAAE,KAAK,CAAC,KAAgB,GAAG,eAAe,IAAK,KAAK,CAAC,KAAgB,GAAG,eAAe,CAAC,EAAE;wBAC5F,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC9B;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAGF,IAAM,UAAU,GAAG,UAAC,KAAe,EAAE,KAAe;QAClD,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,YAAoB,CAAC;QACzB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEf,KAAK,CAAC,OAAO,CAAC,UAAC,CAAS,EAAE,cAAsB;YAChD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAChC,IAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7C,IAAI,YAAY,CAAC,MAAM,EAAE;oBACvB,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC;oBACvD,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;oBAClE,QAAQ,GAAG,cAAc,CAAC;oBAC1B,YAAY,GAAG,YAAY,CAAC;iBAC7B;aACF;YACD,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5B,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AA8TA,gDAAkB;AA5TpB,IAAM,yBAAyB,GAAG,UAAC,CAAS,EAAE,CAAS;;IACrD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QACnB,OAAO,MAAA,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAf,CAAe,CAAC,CAAC;KACxD;AACH,CAAC,CAAC;AAEF,IAAM,WAAW,GAAG,UAAC,SAAc,EAAE,CAAS,EAAE,CAAS;IACvD,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,EAAE,EAAE;QACX,IAAM,GAAG,GAAG,EAAE,CAAC;QACf,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,GAAG,CAAC;KACV;IAED,IAAI,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,EAAE;QACf,SAAS,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;KACjC;IACD,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AACxB,CAAC,CAAC;AAySA,kCAAW;AAvSb,IAAM,WAAW,GAAG,UAAC,SAAc,EAAE,CAAS,EAAE,CAAS;IACvD,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,EAAE,EAAE;QACX,IAAM,GAAG,GAAG,CAAC,CAAC;QACd,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,GAAG,CAAC;KACV;IACD,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC;AA+RA,kCAAW;AA7Rb;;;;;;;GAOG;AACH,IAAM,iBAAiB,GAAG,UAAC,CAAS,EAAE,QAAa,EAAE,SAAc,EAAE,UAAkC;IACrG,IAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,IAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,IAAM,GAAG,GAAQ,EAAE,CAAC;IAEpB,yEAAyE;IACzE,qEAAqE;IACrE,yCAAyC;IACzC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAU;QAC1B,KAAK,CAAC,OAAO,CAAC,UAAC,CAAS,EAAE,KAAa;YACrC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAU;QAC1B,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,KAAK,CAAC,OAAO,CAAC,UAAC,CAAM;YACnB,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAQ,CAAC;YAC9B,IAAI,EAAE,CAAC,MAAM,EAAE;gBACb,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAC,CAAS,EAAE,CAAS,IAAK,OAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAf,CAAe,CAAC,CAAC;gBACxD,IAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;oBAC7D,IAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBAChB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;wBACd,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;wBAChB,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;wBACjC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBACb,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC7B,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;qBAClB;iBACF;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,CAAC;AACzB,CAAC,CAAC;AAgPA,8CAAiB;AA9OnB,IAAM,oBAAoB,GAAG,UAAC,CAAS,EAAE,QAAa,EAAE,IAAY,EAAE,KAAe,EAAE,UAAmB;IACxG,6EAA6E;IAC7E,uEAAuE;IACvE,mEAAmE;IACnE,6EAA6E;IAC7E,qDAAqD;IACrD,IAAM,EAAE,GAAQ,EAAE,CAAC;IACnB,IAAM,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IAE7D,IAAM,OAAO,GAAG,UAAC,SAAqC,EAAE,aAAqC;QAC3F,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACvB,IAAM,OAAO,GAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,EAAE;YACX,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;gBACjB,SAAS,CAAC,IAAI,CAAC,CAAC;aACjB;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;aAC3C;YAED,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;SACpB;IACH,CAAC,CAAC;IAEF,0CAA0C;IAC1C,IAAM,KAAK,GAAG,UAAC,IAAY;QACzB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAC,GAAW,EAAE,CAAM;YACjE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC,CAAC;IAEF,2CAA2C;IAC3C,IAAM,KAAK,GAAG,UAAC,IAAY;QACzB,IAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAC,GAAW,EAAE,CAAM;YACnE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAE7B,IAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;YACtE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;SACpC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/C,oCAAoC;IACpC,aAAa;IACb,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,CAAM;QAClC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAuLA,oDAAoB;AApLtB,IAAM,eAAe,GAAG,UAAC,CAAS,EAAE,QAAa,EAAE,IAAY,EAAE,UAAmB;IAClF,IAAM,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;IAC/B,IAAM,UAAU,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,OAAiB,EAAE,UAAU,CAAC,OAAiB,EAAE,UAAqB,CAAC,CAAC;IAErG,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAU;QAC1B,IAAI,CAAM,CAAC;QACX,KAAK,CAAC,OAAO,CAAC,UAAC,CAAM;YACnB,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,EAAE;gBACL,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC9C,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;aAC1E;YACD,CAAC,GAAG,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF;;GAEG;AACH,IAAM,0BAA0B,GAAG,UAAC,CAAS,EAAE,GAAQ;IACrD,aAAa;IACb,OAAO,cAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAC,EAAE;QACvC,IAAI,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACnC,IAAI,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEnC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,CAAS;YAChC,IAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,IAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAElC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC;YACnC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA8IA,gEAA0B;AA5I5B;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,GAAQ,EAAE,OAAY;IAC9C,aAAa;IACb,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IACvD,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,WAAW,CAAC,CAAC;IAC5C,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,WAAW,CAAC,CAAC;IAE5C,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI;QACtB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;YACvB,IAAM,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;YAC/B,IAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1B,IAAI,KAAa,CAAC;YAClB,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO;YAE3B,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAa,CAAC;YAC7C,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,MAAM,CAAC,CAAC;YAE5F,IAAI,KAAK,EAAE;gBACT,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;oBAC1B,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACxC,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AA4GC,4CAAgB;AA1GlB,IAAM,OAAO,GAAG,UAAC,GAAQ,EAAE,KAAa;IACtC,IAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;QAC9B,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7C;aAAM;YACL,aAAa;YACb,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,GAAG,CAAC,EAAN,CAAM,CAAC,CAAC;YAC1D,IAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAC,CAAS,EAAE,CAAS,IAAK,OAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAP,CAAO,CAAC,CAAC;YAC1D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACnC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;IAEd,mDAAmD;IACnD,iBAAiB;IACjB,0CAA0C;IAC1C,aAAa;IACb,0CAA0C;IAC1C,kCAAkC;IAClC,MAAM;IACN,MAAM;AACR,CAAC,CAAC;AAsFA,0BAAO;AApFT,IAAM,SAAS,GAAG,UAAC,CAAS;IAC1B,IAAM,QAAQ,GAAG,cAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAC7B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,EAC/B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnC,IAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,IAAI,gBAAqB,CAAC;IAC1B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI;QACtB,aAAa;QACb,gBAAgB,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/E,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;YACvB,IAAI,KAAK,KAAK,GAAG,EAAE;gBACjB,aAAa;gBACb,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAC,KAAU,IAAK,OAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAA9B,CAA8B,CAAC,CAAC;aACzF;YAED,IAAM,UAAU,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAC5E,IAAI,EAAE,GAAG,oBAAoB,CAAC,CAAC,EAAE,gBAAgB,EAC/C,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;YAC1C,IAAI,KAAK,KAAK,GAAG,EAAE;gBACjB,aAAa;gBACb,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,EAAF,CAAE,CAAC,CAAC;aAC/C;YACD,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAM,aAAa,GAAG,0BAA0B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAe,CAAC,CAAC;AACjD,CAAC,CAAC;AA2CA,8BAAS;AAzCX,IAAM,GAAG,GAAG,UAAC,OAAe,EAAE,OAAe,EAAE,UAAmB;IAChE,OAAO,UAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACrC,IAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,CAAC;QAEV,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACrC,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC/C,KAAK,GAAG;oBAAE,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAC3C,KAAK,GAAG;oBAAE,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;oBAAC,MAAM;aACzC;SACF;QACD,IAAI,KAAK,EAAE;YACT,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SACpC;QACD,KAAK,GAAG,CAAC,CAAC;QAEV,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE9C,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACrC,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC/C,KAAK,GAAG;oBAAE,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAC1C,KAAK,GAAG;oBAAE,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;oBAAC,MAAM;aAC1C;SACF;QACD,IAAI,KAAK,EAAE;YACT,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SACpC;QACD,KAAK,GAAG,CAAC,CAAC;QAEV,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,KAAK,GAAG,UAAC,CAAS,EAAE,CAAS,YAAK,OAAA,CAAA,MAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,KAAI,CAAC,CAAA,EAAA,CAAC;AAe9D,kBAAe;IACb,SAAS,WAAA;IACT,kBAAkB,oBAAA;IAClB,kBAAkB,oBAAA;IAClB,WAAW,aAAA;IACX,WAAW,aAAA;IACX,iBAAiB,mBAAA;IACjB,oBAAoB,sBAAA;IACpB,gBAAgB,kBAAA;IAChB,0BAA0B,4BAAA;IAC1B,OAAO,SAAA;CACR,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { graphlib as IGraphLib } from '../../graphlib';
2
+ declare type Graph = IGraphLib.Graph;
3
+ declare const position: (g: Graph) => void;
4
+ export default position;
@@ -0,0 +1,58 @@
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
+ var bk_1 = require("./bk");
8
+ var positionY = function (g) {
9
+ var layering = util_1.default.buildLayerMatrix(g);
10
+ var rankSep = g.graph().ranksep;
11
+ var prevY = 0;
12
+ layering.forEach(function (layer) {
13
+ var heights = layer.map(function (v) { return g.node(v).height; });
14
+ var maxHeight = Math.max.apply(Math, heights);
15
+ layer.forEach(function (v) {
16
+ g.node(v).y = prevY + maxHeight / 2;
17
+ });
18
+ prevY += maxHeight + rankSep;
19
+ });
20
+ };
21
+ var positionX = function (g) {
22
+ var layering = util_1.default.buildLayerMatrix(g);
23
+ var conflicts = Object.assign((0, bk_1.findType1Conflicts)(g, layering), (0, bk_1.findType2Conflicts)(g, layering));
24
+ var xss = {};
25
+ var adjustedLayering;
26
+ ["u", "d"].forEach(function (vert) {
27
+ // @ts-ignore
28
+ adjustedLayering = vert === "u" ? layering : Object.values(layering).reverse();
29
+ ["l", "r"].forEach(function (horiz) {
30
+ if (horiz === "r") {
31
+ // @ts-ignore
32
+ adjustedLayering = adjustedLayering.map(function (inner) { return Object.values(inner).reverse(); });
33
+ }
34
+ var neighborFn = (vert === "u" ? g.predecessors : g.successors).bind(g);
35
+ var align = (0, bk_1.verticalAlignment)(g, adjustedLayering, conflicts, neighborFn);
36
+ var xs = (0, bk_1.horizontalCompaction)(g, adjustedLayering, align.root, align.align, horiz === "r");
37
+ if (horiz === "r") {
38
+ Object.keys(xs).forEach(function (xsKey) { return xs[xsKey] = -xs[xsKey]; });
39
+ }
40
+ xss[vert + horiz] = xs;
41
+ });
42
+ });
43
+ var smallestWidth = (0, bk_1.findSmallestWidthAlignment)(g, xss);
44
+ smallestWidth && (0, bk_1.alignCoordinates)(xss, smallestWidth);
45
+ return (0, bk_1.balance)(xss, g.graph().align);
46
+ };
47
+ var position = function (g) {
48
+ var _a;
49
+ // tslint:disable-next-line
50
+ g = util_1.default.asNonCompoundGraph(g);
51
+ positionY(g);
52
+ var xs = positionX(g);
53
+ (_a = Object.keys(xs)) === null || _a === void 0 ? void 0 : _a.forEach(function (key) {
54
+ g.node(key).x = xs[key];
55
+ });
56
+ };
57
+ exports.default = position;
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/position/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { graphlib as IGraphLib } from '../../graphlib';
2
+ declare type IGraph = IGraphLib.Graph;
3
+ declare const feasibleTree: (g: IGraph) => IGraph;
4
+ declare const feasibleTreeWithLayer: (g: IGraph) => any;
5
+ export { feasibleTree, feasibleTreeWithLayer };
6
+ declare const _default: {
7
+ feasibleTree: (g: IGraph) => IGraph;
8
+ feasibleTreeWithLayer: (g: IGraph) => any;
9
+ };
10
+ export default _default;
@@ -0,0 +1,156 @@
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
+ exports.feasibleTreeWithLayer = exports.feasibleTree = void 0;
7
+ var graphlib_1 = __importDefault(require("../graphlib"));
8
+ var util_1 = require("./util");
9
+ var util_2 = require("../util");
10
+ var Graph = graphlib_1.default.Graph;
11
+ /*
12
+ * Constructs a spanning tree with tight edges and adjusted the input node's
13
+ * ranks to achieve this. A tight edge is one that is has a length that matches
14
+ * its "minlen" attribute.
15
+ *
16
+ * The basic structure for this function is derived from Gansner, et al., "A
17
+ * Technique for Drawing Directed Graphs."
18
+ *
19
+ * Pre-conditions:
20
+ *
21
+ * 1. Graph must be a DAG.
22
+ * 2. Graph must be connected.
23
+ * 3. Graph must have at least one node.
24
+ * 5. Graph nodes must have been previously assigned a "rank" property that
25
+ * respects the "minlen" property of incident edges.
26
+ * 6. Graph edges must have a "minlen" property.
27
+ *
28
+ * Post-conditions:
29
+ *
30
+ * - Graph nodes will have their rank adjusted to ensure that all edges are
31
+ * tight.
32
+ *
33
+ * Returns a tree (undirected graph) that is constructed using only "tight"
34
+ * edges.
35
+ */
36
+ var feasibleTree = function (g) {
37
+ var t = new Graph({ directed: false });
38
+ // Choose arbitrary node from which to start our tree
39
+ var start = g.nodes()[0];
40
+ var size = g.nodeCount();
41
+ t.setNode(start, {});
42
+ var edge;
43
+ var delta;
44
+ while (tightTree(t, g) < size) {
45
+ edge = findMinSlackEdge(t, g);
46
+ delta = t.hasNode(edge.v) ? (0, util_1.slack)(g, edge) : -(0, util_1.slack)(g, edge);
47
+ shiftRanks(t, g, delta);
48
+ }
49
+ return t;
50
+ };
51
+ exports.feasibleTree = feasibleTree;
52
+ /*
53
+ * Finds a maximal tree of tight edges and returns the number of nodes in the
54
+ * tree.
55
+ */
56
+ var tightTree = function (t, g) {
57
+ var dfs = function (v) {
58
+ g.nodeEdges(v).forEach(function (e) {
59
+ var edgeV = e.v;
60
+ var w = (v === edgeV) ? e.w : edgeV;
61
+ if (!t.hasNode(w) && !(0, util_1.slack)(g, e)) {
62
+ t.setNode(w, {});
63
+ t.setEdge(v, w, {});
64
+ dfs(w);
65
+ }
66
+ });
67
+ };
68
+ t.nodes().forEach(dfs);
69
+ return t.nodeCount();
70
+ };
71
+ /*
72
+ * Constructs a spanning tree with tight edges and adjusted the input node's
73
+ * ranks to achieve this. A tight edge is one that is has a length that matches
74
+ * its "minlen" attribute.
75
+ *
76
+ * The basic structure for this function is derived from Gansner, et al., "A
77
+ * Technique for Drawing Directed Graphs."
78
+ *
79
+ * Pre-conditions:
80
+ *
81
+ * 1. Graph must be a DAG.
82
+ * 2. Graph must be connected.
83
+ * 3. Graph must have at least one node.
84
+ * 5. Graph nodes must have been previously assigned a "rank" property that
85
+ * respects the "minlen" property of incident edges.
86
+ * 6. Graph edges must have a "minlen" property.
87
+ *
88
+ * Post-conditions:
89
+ *
90
+ * - Graph nodes will have their rank adjusted to ensure that all edges are
91
+ * tight.
92
+ *
93
+ * Returns a tree (undirected graph) that is constructed using only "tight"
94
+ * edges.
95
+ */
96
+ var feasibleTreeWithLayer = function (g) {
97
+ var t = new Graph({ directed: false });
98
+ // Choose arbitrary node from which to start our tree
99
+ var start = g.nodes()[0];
100
+ var size = g.nodeCount();
101
+ t.setNode(start, {});
102
+ var edge;
103
+ var delta;
104
+ while (tightTreeWithLayer(t, g) < size) {
105
+ edge = findMinSlackEdge(t, g);
106
+ delta = t.hasNode(edge.v) ? (0, util_1.slack)(g, edge) : -(0, util_1.slack)(g, edge);
107
+ shiftRanks(t, g, delta);
108
+ }
109
+ return t;
110
+ };
111
+ exports.feasibleTreeWithLayer = feasibleTreeWithLayer;
112
+ /*
113
+ * Finds a maximal tree of tight edges and returns the number of nodes in the
114
+ * tree.
115
+ */
116
+ var tightTreeWithLayer = function (t, g) {
117
+ var dfs = function (v) {
118
+ var _a;
119
+ (_a = g.nodeEdges(v)) === null || _a === void 0 ? void 0 : _a.forEach(function (e) {
120
+ var edgeV = e.v;
121
+ var w = (v === edgeV) ? e.w : edgeV;
122
+ // 对于指定layer的,直接加入tight-tree,不参与调整
123
+ if (!t.hasNode(w) && (g.node(w).layer !== undefined || !(0, util_1.slack)(g, e))) {
124
+ t.setNode(w, {});
125
+ t.setEdge(v, w, {});
126
+ dfs(w);
127
+ }
128
+ });
129
+ };
130
+ t.nodes().forEach(dfs);
131
+ return t.nodeCount();
132
+ };
133
+ /*
134
+ * Finds the edge with the smallest slack that is incident on tree and returns
135
+ * it.
136
+ */
137
+ var findMinSlackEdge = function (t, g) {
138
+ return (0, util_2.minBy)(g.edges(), function (e) {
139
+ if (t.hasNode(e.v) !== t.hasNode(e.w)) {
140
+ return (0, util_1.slack)(g, e);
141
+ }
142
+ return Infinity;
143
+ });
144
+ };
145
+ var shiftRanks = function (t, g, delta) {
146
+ t.nodes().forEach(function (v) {
147
+ if (!g.node(v).rank)
148
+ g.node(v).rank = 0;
149
+ g.node(v).rank += delta;
150
+ });
151
+ };
152
+ exports.default = {
153
+ feasibleTree: feasibleTree,
154
+ feasibleTreeWithLayer: feasibleTreeWithLayer
155
+ };
156
+ //# sourceMappingURL=feasible-tree.js.map