@antv/layout 0.1.19-beta.4 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/layout.min.js +1 -1
  3. package/dist/layout.min.js.LICENSE.txt +9 -0
  4. package/dist/layout.min.js.map +1 -1
  5. package/es/layout/comboForce.js +4 -19
  6. package/es/layout/comboForce.js.map +1 -1
  7. package/es/layout/dagre/index.d.ts +9 -0
  8. package/es/layout/dagre/index.js +33 -0
  9. package/es/layout/dagre/index.js.map +1 -0
  10. package/es/layout/dagre/src/acyclic.d.ts +7 -0
  11. package/es/layout/dagre/src/acyclic.js +52 -0
  12. package/es/layout/dagre/src/acyclic.js.map +1 -0
  13. package/es/layout/dagre/src/add-border-segments.d.ts +4 -0
  14. package/es/layout/dagre/src/add-border-segments.js +32 -0
  15. package/es/layout/dagre/src/add-border-segments.js.map +1 -0
  16. package/es/layout/dagre/src/coordinate-system.d.ts +7 -0
  17. package/es/layout/dagre/src/coordinate-system.js +57 -0
  18. package/es/layout/dagre/src/coordinate-system.js.map +1 -0
  19. package/es/layout/dagre/src/data/list.d.ts +8 -0
  20. package/es/layout/dagre/src/data/list.js +50 -0
  21. package/es/layout/dagre/src/data/list.js.map +1 -0
  22. package/es/layout/dagre/src/debug.d.ts +4 -0
  23. package/es/layout/dagre/src/debug.js +26 -0
  24. package/es/layout/dagre/src/debug.js.map +1 -0
  25. package/es/layout/dagre/src/graphlib.d.ts +2 -0
  26. package/es/layout/dagre/src/graphlib.js +8 -0
  27. package/es/layout/dagre/src/graphlib.js.map +1 -0
  28. package/es/layout/dagre/src/greedy-fas.d.ts +4 -0
  29. package/es/layout/dagre/src/greedy-fas.js +113 -0
  30. package/es/layout/dagre/src/greedy-fas.js.map +1 -0
  31. package/es/layout/dagre/src/layout.d.ts +4 -0
  32. package/es/layout/dagre/src/layout.js +435 -0
  33. package/es/layout/dagre/src/layout.js.map +1 -0
  34. package/es/layout/dagre/src/nesting-graph.d.ts +7 -0
  35. package/es/layout/dagre/src/nesting-graph.js +112 -0
  36. package/es/layout/dagre/src/nesting-graph.js.map +1 -0
  37. package/es/layout/dagre/src/normalize.d.ts +7 -0
  38. package/es/layout/dagre/src/normalize.js +88 -0
  39. package/es/layout/dagre/src/normalize.js.map +1 -0
  40. package/es/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
  41. package/es/layout/dagre/src/order/add-subgraph-constraints.js +27 -0
  42. package/es/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
  43. package/es/layout/dagre/src/order/barycenter.d.ts +12 -0
  44. package/es/layout/dagre/src/order/barycenter.js +24 -0
  45. package/es/layout/dagre/src/order/barycenter.js.map +1 -0
  46. package/es/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
  47. package/es/layout/dagre/src/order/build-layer-graph.js +67 -0
  48. package/es/layout/dagre/src/order/build-layer-graph.js.map +1 -0
  49. package/es/layout/dagre/src/order/cross-count.d.ts +4 -0
  50. package/es/layout/dagre/src/order/cross-count.js +64 -0
  51. package/es/layout/dagre/src/order/cross-count.js.map +1 -0
  52. package/es/layout/dagre/src/order/index.d.ts +4 -0
  53. package/es/layout/dagre/src/order/index.js +88 -0
  54. package/es/layout/dagre/src/order/index.js.map +1 -0
  55. package/es/layout/dagre/src/order/init-data-order.d.ts +7 -0
  56. package/es/layout/dagre/src/order/init-data-order.js +25 -0
  57. package/es/layout/dagre/src/order/init-data-order.js.map +1 -0
  58. package/es/layout/dagre/src/order/init-order.d.ts +4 -0
  59. package/es/layout/dagre/src/order/init-order.js +49 -0
  60. package/es/layout/dagre/src/order/init-order.js.map +1 -0
  61. package/es/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
  62. package/es/layout/dagre/src/order/resolve-conflicts.js +111 -0
  63. package/es/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
  64. package/es/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
  65. package/es/layout/dagre/src/order/sort-subgraph.js +79 -0
  66. package/es/layout/dagre/src/order/sort-subgraph.js.map +1 -0
  67. package/es/layout/dagre/src/order/sort.d.ts +2 -0
  68. package/es/layout/dagre/src/order/sort.js +67 -0
  69. package/es/layout/dagre/src/order/sort.js.map +1 -0
  70. package/es/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
  71. package/es/layout/dagre/src/parent-dummy-chains.js +78 -0
  72. package/es/layout/dagre/src/parent-dummy-chains.js.map +1 -0
  73. package/es/layout/dagre/src/position/bk.d.ts +32 -0
  74. package/es/layout/dagre/src/position/bk.js +402 -0
  75. package/es/layout/dagre/src/position/bk.js.map +1 -0
  76. package/es/layout/dagre/src/position/index.d.ts +4 -0
  77. package/es/layout/dagre/src/position/index.js +53 -0
  78. package/es/layout/dagre/src/position/index.js.map +1 -0
  79. package/es/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
  80. package/es/layout/dagre/src/rank/feasible-tree.js +149 -0
  81. package/es/layout/dagre/src/rank/feasible-tree.js.map +1 -0
  82. package/es/layout/dagre/src/rank/index.d.ts +4 -0
  83. package/es/layout/dagre/src/rank/index.js +53 -0
  84. package/es/layout/dagre/src/rank/index.js.map +1 -0
  85. package/es/layout/dagre/src/rank/network-simplex.d.ts +12 -0
  86. package/es/layout/dagre/src/rank/network-simplex.js +207 -0
  87. package/es/layout/dagre/src/rank/network-simplex.js.map +1 -0
  88. package/es/layout/dagre/src/rank/util.d.ts +12 -0
  89. package/es/layout/dagre/src/rank/util.js +109 -0
  90. package/es/layout/dagre/src/rank/util.js.map +1 -0
  91. package/es/layout/dagre/src/util.d.ts +50 -0
  92. package/es/layout/dagre/src/util.js +260 -0
  93. package/es/layout/dagre/src/util.js.map +1 -0
  94. package/es/layout/dagre.d.ts +3 -3
  95. package/es/layout/dagre.js +35 -11
  96. package/es/layout/dagre.js.map +1 -1
  97. package/es/layout/force/force-in-a-box.js +1 -0
  98. package/es/layout/force/force-in-a-box.js.map +1 -1
  99. package/es/layout/fruchterman.js +12 -36
  100. package/es/layout/fruchterman.js.map +1 -1
  101. package/es/layout/index.d.ts +2 -1
  102. package/es/layout/index.js +2 -1
  103. package/es/layout/index.js.map +1 -1
  104. package/es/layout/layout.js +33 -11
  105. package/es/layout/layout.js.map +1 -1
  106. package/es/layout/types.d.ts +2 -2
  107. package/es/registy/index.d.ts +1 -1
  108. package/es/registy/index.js +1 -0
  109. package/es/registy/index.js.map +1 -1
  110. package/lib/layout/comboForce.js +4 -19
  111. package/lib/layout/comboForce.js.map +1 -1
  112. package/lib/layout/dagre/index.d.ts +9 -0
  113. package/lib/layout/dagre/index.js +38 -0
  114. package/lib/layout/dagre/index.js.map +1 -0
  115. package/lib/layout/dagre/src/acyclic.d.ts +7 -0
  116. package/lib/layout/dagre/src/acyclic.js +57 -0
  117. package/lib/layout/dagre/src/acyclic.js.map +1 -0
  118. package/lib/layout/dagre/src/add-border-segments.d.ts +4 -0
  119. package/lib/layout/dagre/src/add-border-segments.js +37 -0
  120. package/lib/layout/dagre/src/add-border-segments.js.map +1 -0
  121. package/lib/layout/dagre/src/coordinate-system.d.ts +7 -0
  122. package/lib/layout/dagre/src/coordinate-system.js +59 -0
  123. package/lib/layout/dagre/src/coordinate-system.js.map +1 -0
  124. package/lib/layout/dagre/src/data/list.d.ts +8 -0
  125. package/lib/layout/dagre/src/data/list.js +53 -0
  126. package/lib/layout/dagre/src/data/list.js.map +1 -0
  127. package/lib/layout/dagre/src/debug.d.ts +4 -0
  128. package/lib/layout/dagre/src/debug.js +31 -0
  129. package/lib/layout/dagre/src/debug.js.map +1 -0
  130. package/lib/layout/dagre/src/graphlib.d.ts +2 -0
  131. package/lib/layout/dagre/src/graphlib.js +13 -0
  132. package/lib/layout/dagre/src/graphlib.js.map +1 -0
  133. package/lib/layout/dagre/src/greedy-fas.d.ts +4 -0
  134. package/lib/layout/dagre/src/greedy-fas.js +118 -0
  135. package/lib/layout/dagre/src/greedy-fas.js.map +1 -0
  136. package/lib/layout/dagre/src/layout.d.ts +4 -0
  137. package/lib/layout/dagre/src/layout.js +459 -0
  138. package/lib/layout/dagre/src/layout.js.map +1 -0
  139. package/lib/layout/dagre/src/nesting-graph.d.ts +7 -0
  140. package/lib/layout/dagre/src/nesting-graph.js +117 -0
  141. package/lib/layout/dagre/src/nesting-graph.js.map +1 -0
  142. package/lib/layout/dagre/src/normalize.d.ts +7 -0
  143. package/lib/layout/dagre/src/normalize.js +93 -0
  144. package/lib/layout/dagre/src/normalize.js.map +1 -0
  145. package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
  146. package/lib/layout/dagre/src/order/add-subgraph-constraints.js +29 -0
  147. package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
  148. package/lib/layout/dagre/src/order/barycenter.d.ts +12 -0
  149. package/lib/layout/dagre/src/order/barycenter.js +26 -0
  150. package/lib/layout/dagre/src/order/barycenter.js.map +1 -0
  151. package/lib/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
  152. package/lib/layout/dagre/src/order/build-layer-graph.js +72 -0
  153. package/lib/layout/dagre/src/order/build-layer-graph.js.map +1 -0
  154. package/lib/layout/dagre/src/order/cross-count.d.ts +4 -0
  155. package/lib/layout/dagre/src/order/cross-count.js +66 -0
  156. package/lib/layout/dagre/src/order/cross-count.js.map +1 -0
  157. package/lib/layout/dagre/src/order/index.d.ts +4 -0
  158. package/lib/layout/dagre/src/order/index.js +93 -0
  159. package/lib/layout/dagre/src/order/index.js.map +1 -0
  160. package/lib/layout/dagre/src/order/init-data-order.d.ts +7 -0
  161. package/lib/layout/dagre/src/order/init-data-order.js +27 -0
  162. package/lib/layout/dagre/src/order/init-data-order.js.map +1 -0
  163. package/lib/layout/dagre/src/order/init-order.d.ts +4 -0
  164. package/lib/layout/dagre/src/order/init-order.js +51 -0
  165. package/lib/layout/dagre/src/order/init-order.js.map +1 -0
  166. package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
  167. package/lib/layout/dagre/src/order/resolve-conflicts.js +116 -0
  168. package/lib/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
  169. package/lib/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
  170. package/lib/layout/dagre/src/order/sort-subgraph.js +84 -0
  171. package/lib/layout/dagre/src/order/sort-subgraph.js.map +1 -0
  172. package/lib/layout/dagre/src/order/sort.d.ts +2 -0
  173. package/lib/layout/dagre/src/order/sort.js +72 -0
  174. package/lib/layout/dagre/src/order/sort.js.map +1 -0
  175. package/lib/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
  176. package/lib/layout/dagre/src/parent-dummy-chains.js +80 -0
  177. package/lib/layout/dagre/src/parent-dummy-chains.js.map +1 -0
  178. package/lib/layout/dagre/src/position/bk.d.ts +32 -0
  179. package/lib/layout/dagre/src/position/bk.js +417 -0
  180. package/lib/layout/dagre/src/position/bk.js.map +1 -0
  181. package/lib/layout/dagre/src/position/index.d.ts +4 -0
  182. package/lib/layout/dagre/src/position/index.js +58 -0
  183. package/lib/layout/dagre/src/position/index.js.map +1 -0
  184. package/lib/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
  185. package/lib/layout/dagre/src/rank/feasible-tree.js +156 -0
  186. package/lib/layout/dagre/src/rank/feasible-tree.js.map +1 -0
  187. package/lib/layout/dagre/src/rank/index.d.ts +4 -0
  188. package/lib/layout/dagre/src/rank/index.js +58 -0
  189. package/lib/layout/dagre/src/rank/index.js.map +1 -0
  190. package/lib/layout/dagre/src/rank/network-simplex.d.ts +12 -0
  191. package/lib/layout/dagre/src/rank/network-simplex.js +212 -0
  192. package/lib/layout/dagre/src/rank/network-simplex.js.map +1 -0
  193. package/lib/layout/dagre/src/rank/util.d.ts +12 -0
  194. package/lib/layout/dagre/src/rank/util.js +114 -0
  195. package/lib/layout/dagre/src/rank/util.js.map +1 -0
  196. package/lib/layout/dagre/src/util.d.ts +50 -0
  197. package/lib/layout/dagre/src/util.js +281 -0
  198. package/lib/layout/dagre/src/util.js.map +1 -0
  199. package/lib/layout/dagre.d.ts +3 -3
  200. package/lib/layout/dagre.js +37 -13
  201. package/lib/layout/dagre.js.map +1 -1
  202. package/lib/layout/force/force-in-a-box.js +1 -0
  203. package/lib/layout/force/force-in-a-box.js.map +1 -1
  204. package/lib/layout/fruchterman.js +12 -36
  205. package/lib/layout/fruchterman.js.map +1 -1
  206. package/lib/layout/index.d.ts +2 -1
  207. package/lib/layout/index.js +3 -1
  208. package/lib/layout/index.js.map +1 -1
  209. package/lib/layout/layout.js +32 -10
  210. package/lib/layout/layout.js.map +1 -1
  211. package/lib/layout/types.d.ts +2 -2
  212. package/lib/registy/index.d.ts +1 -1
  213. package/lib/registy/index.js +1 -0
  214. package/lib/registy/index.js.map +1 -1
  215. package/package.json +4 -4
@@ -0,0 +1,402 @@
1
+ import graphlib from '../graphlib';
2
+ import util from '../util';
3
+ const Graph = graphlib.Graph;
4
+ /*
5
+ * This module provides coordinate assignment based on Brandes and Köpf, "Fast
6
+ * and Simple Horizontal Coordinate Assignment."
7
+ */
8
+ /*
9
+ * Marks all edges in the graph with a type-1 conflict with the "type1Conflict"
10
+ * property. A type-1 conflict is one where a non-inner segment crosses an
11
+ * inner segment. An inner segment is an edge with both incident nodes marked
12
+ * with the "dummy" property.
13
+ *
14
+ * This algorithm scans layer by layer, starting with the second, for type-1
15
+ * conflicts between the current layer and the previous layer. For each layer
16
+ * it scans the nodes from left to right until it reaches one that is incident
17
+ * on an inner segment. It then scans predecessors to determine if they have
18
+ * edges that cross that inner segment. At the end a final scan is done for all
19
+ * nodes on the current rank to see if they cross the last visited inner
20
+ * segment.
21
+ *
22
+ * This algorithm (safely) assumes that a dummy node will only be incident on a
23
+ * single node in the layers being scanned.
24
+ */
25
+ const findType1Conflicts = (g, layering) => {
26
+ const conflicts = {};
27
+ const visitLayer = (prevLayer, layer) => {
28
+ // last visited node in the previous layer that is incident on an inner
29
+ // segment.
30
+ let k0 = 0;
31
+ // Tracks the last node in this layer scanned for crossings with a type-1
32
+ // segment.
33
+ let scanPos = 0;
34
+ const prevLayerLength = prevLayer.length;
35
+ const lastNode = layer[(layer === null || layer === void 0 ? void 0 : layer.length) - 1];
36
+ layer.forEach((v, i) => {
37
+ const w = findOtherInnerSegmentNode(g, v);
38
+ const k1 = w ? g.node(w).order : prevLayerLength;
39
+ if (w || v === lastNode) {
40
+ layer.slice(scanPos, i + 1).forEach((scanNode) => {
41
+ var _a;
42
+ (_a = g.predecessors(scanNode)) === null || _a === void 0 ? void 0 : _a.forEach((u) => {
43
+ const uLabel = g.node(u);
44
+ const uPos = uLabel.order;
45
+ if ((uPos < k0 || k1 < uPos) &&
46
+ !(uLabel.dummy && g.node(scanNode).dummy)) {
47
+ addConflict(conflicts, u, scanNode);
48
+ }
49
+ });
50
+ });
51
+ scanPos = i + 1;
52
+ k0 = k1;
53
+ }
54
+ });
55
+ return layer;
56
+ };
57
+ if (layering === null || layering === void 0 ? void 0 : layering.length) {
58
+ layering.reduce(visitLayer);
59
+ }
60
+ return conflicts;
61
+ };
62
+ const findType2Conflicts = (g, layering) => {
63
+ const conflicts = {};
64
+ const scan = (south, southPos, southEnd, prevNorthBorder, nextNorthBorder) => {
65
+ let v;
66
+ const range = [];
67
+ for (let i = southPos; i < southEnd; i++) {
68
+ range.push(i);
69
+ }
70
+ range.forEach((i) => {
71
+ var _a;
72
+ v = south[i];
73
+ if (g.node(v).dummy) {
74
+ (_a = g.predecessors(v)) === null || _a === void 0 ? void 0 : _a.forEach((u) => {
75
+ const uNode = g.node(u);
76
+ if (uNode.dummy &&
77
+ (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {
78
+ addConflict(conflicts, u, v);
79
+ }
80
+ });
81
+ }
82
+ });
83
+ };
84
+ const visitLayer = (north, south) => {
85
+ let prevNorthPos = -1;
86
+ let nextNorthPos;
87
+ let southPos = 0;
88
+ south.forEach((v, southLookahead) => {
89
+ if (g.node(v).dummy === "border") {
90
+ const predecessors = g.predecessors(v) || [];
91
+ if (predecessors.length) {
92
+ nextNorthPos = g.node(predecessors[0]).order;
93
+ scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);
94
+ southPos = southLookahead;
95
+ prevNorthPos = nextNorthPos;
96
+ }
97
+ }
98
+ scan(south, southPos, south.length, nextNorthPos, north.length);
99
+ });
100
+ return south;
101
+ };
102
+ if (layering === null || layering === void 0 ? void 0 : layering.length) {
103
+ layering.reduce(visitLayer);
104
+ }
105
+ return conflicts;
106
+ };
107
+ const findOtherInnerSegmentNode = (g, v) => {
108
+ var _a;
109
+ if (g.node(v).dummy) {
110
+ return (_a = g.predecessors(v)) === null || _a === void 0 ? void 0 : _a.find((u) => g.node(u).dummy);
111
+ }
112
+ };
113
+ const addConflict = (conflicts, v, w) => {
114
+ let vv = v;
115
+ let ww = w;
116
+ if (vv > ww) {
117
+ const tmp = vv;
118
+ vv = ww;
119
+ ww = tmp;
120
+ }
121
+ let conflictsV = conflicts[vv];
122
+ if (!conflictsV) {
123
+ conflicts[vv] = conflictsV = {};
124
+ }
125
+ conflictsV[ww] = true;
126
+ };
127
+ const hasConflict = (conflicts, v, w) => {
128
+ let vv = v;
129
+ let ww = w;
130
+ if (vv > ww) {
131
+ const tmp = v;
132
+ vv = ww;
133
+ ww = tmp;
134
+ }
135
+ return conflicts[vv] && conflicts[vv].hasOwnProperty(ww);
136
+ };
137
+ /*
138
+ * Try to align nodes into vertical "blocks" where possible. This algorithm
139
+ * attempts to align a node with one of its median neighbors. If the edge
140
+ * connecting a neighbor is a type-1 conflict then we ignore that possibility.
141
+ * If a previous node has already formed a block with a node after the node
142
+ * we're trying to form a block with, we also ignore that possibility - our
143
+ * blocks would be split in that scenario.
144
+ */
145
+ const verticalAlignment = (g, layering, conflicts, neighborFn) => {
146
+ const root = {};
147
+ const align = {};
148
+ const pos = {};
149
+ // We cache the position here based on the layering because the graph and
150
+ // layering may be out of sync. The layering matrix is manipulated to
151
+ // generate different extreme alignments.
152
+ layering.forEach((layer) => {
153
+ layer.forEach((v, order) => {
154
+ root[v] = v;
155
+ align[v] = v;
156
+ pos[v] = order;
157
+ });
158
+ });
159
+ layering.forEach((layer) => {
160
+ let prevIdx = -1;
161
+ layer.forEach((v) => {
162
+ let ws = neighborFn(v);
163
+ if (ws.length) {
164
+ ws = ws.sort((a, b) => pos[a] - pos[b]);
165
+ const mp = (ws.length - 1) / 2;
166
+ for (let i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {
167
+ const w = ws[i];
168
+ if (align[v] === v &&
169
+ prevIdx < pos[w] &&
170
+ !hasConflict(conflicts, v, w)) {
171
+ align[w] = v;
172
+ align[v] = root[v] = root[w];
173
+ prevIdx = pos[w];
174
+ }
175
+ }
176
+ }
177
+ });
178
+ });
179
+ return { root, align };
180
+ };
181
+ const horizontalCompaction = (g, layering, root, align, reverseSep) => {
182
+ // This portion of the algorithm differs from BK due to a number of problems.
183
+ // Instead of their algorithm we construct a new block graph and do two
184
+ // sweeps. The first sweep places blocks with the smallest possible
185
+ // coordinates. The second sweep removes unused space by moving blocks to the
186
+ // greatest coordinates without violating separation.
187
+ const xs = {};
188
+ const blockG = buildBlockGraph(g, layering, root, reverseSep);
189
+ const borderType = reverseSep ? "borderLeft" : "borderRight";
190
+ const iterate = (setXsFunc, nextNodesFunc) => {
191
+ let stack = blockG.nodes();
192
+ let elem = stack.pop();
193
+ const visited = {};
194
+ while (elem) {
195
+ if (visited[elem]) {
196
+ setXsFunc(elem);
197
+ }
198
+ else {
199
+ visited[elem] = true;
200
+ stack.push(elem);
201
+ stack = stack.concat(nextNodesFunc(elem));
202
+ }
203
+ elem = stack.pop();
204
+ }
205
+ };
206
+ // First pass, assign smallest coordinates
207
+ const pass1 = (elem) => {
208
+ xs[elem] = (blockG.inEdges(elem) || []).reduce((acc, e) => {
209
+ return Math.max(acc, (xs[e.v] || 0) + blockG.edge(e));
210
+ }, 0);
211
+ };
212
+ // Second pass, assign greatest coordinates
213
+ const pass2 = (elem) => {
214
+ const min = (blockG.outEdges(elem) || []).reduce((acc, e) => {
215
+ return Math.min(acc, (xs[e.w] || 0) - blockG.edge(e));
216
+ }, Number.POSITIVE_INFINITY);
217
+ const node = g.node(elem);
218
+ if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {
219
+ xs[elem] = Math.max(xs[elem], min);
220
+ }
221
+ };
222
+ iterate(pass1, blockG.predecessors.bind(blockG));
223
+ iterate(pass2, blockG.successors.bind(blockG));
224
+ // Assign x coordinates to all nodes
225
+ // @ts-ignore
226
+ Object.values(align).forEach((v) => {
227
+ xs[v] = xs[root[v]];
228
+ });
229
+ return xs;
230
+ };
231
+ const buildBlockGraph = (g, layering, root, reverseSep) => {
232
+ const blockGraph = new Graph();
233
+ const graphLabel = g.graph();
234
+ const sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);
235
+ layering.forEach((layer) => {
236
+ let u;
237
+ layer.forEach((v) => {
238
+ const vRoot = root[v];
239
+ blockGraph.setNode(vRoot);
240
+ if (u) {
241
+ const uRoot = root[u];
242
+ const prevMax = blockGraph.edge(uRoot, vRoot);
243
+ blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));
244
+ }
245
+ u = v;
246
+ });
247
+ });
248
+ return blockGraph;
249
+ };
250
+ /*
251
+ * Returns the alignment that has the smallest width of the given alignments.
252
+ */
253
+ const findSmallestWidthAlignment = (g, xss) => {
254
+ // @ts-ignore
255
+ return util.minBy(Object.values(xss), (xs) => {
256
+ let max = Number.NEGATIVE_INFINITY;
257
+ let min = Number.POSITIVE_INFINITY;
258
+ Object.keys(xs).forEach((v) => {
259
+ const x = xs[v];
260
+ const halfWidth = width(g, v) / 2;
261
+ max = Math.max(x + halfWidth, max);
262
+ min = Math.min(x - halfWidth, min);
263
+ });
264
+ return max - min;
265
+ });
266
+ };
267
+ /*
268
+ * Align the coordinates of each of the layout alignments such that
269
+ * left-biased alignments have their minimum coordinate at the same point as
270
+ * the minimum coordinate of the smallest width alignment and right-biased
271
+ * alignments have their maximum coordinate at the same point as the maximum
272
+ * coordinate of the smallest width alignment.
273
+ */
274
+ function alignCoordinates(xss, alignTo) {
275
+ // @ts-ignore
276
+ const alignToVals = Object.values(alignTo);
277
+ const alignToMin = Math.min(...alignToVals);
278
+ const alignToMax = Math.max(...alignToVals);
279
+ ["u", "d"].forEach((vert) => {
280
+ ["l", "r"].forEach((horiz) => {
281
+ const alignment = vert + horiz;
282
+ const xs = xss[alignment];
283
+ let delta;
284
+ if (xs === alignTo)
285
+ return;
286
+ const xsVals = Object.values(xs);
287
+ delta = horiz === "l" ? alignToMin - Math.min(...xsVals) : alignToMax - Math.max(...xsVals);
288
+ if (delta) {
289
+ xss[alignment] = {};
290
+ Object.keys(xs).forEach((key) => {
291
+ xss[alignment][key] = xs[key] + delta;
292
+ });
293
+ }
294
+ });
295
+ });
296
+ }
297
+ const balance = (xss, align) => {
298
+ const result = {};
299
+ Object.keys(xss.ul).forEach((key) => {
300
+ if (align) {
301
+ result[key] = xss[align.toLowerCase()][key];
302
+ }
303
+ else {
304
+ // @ts-ignore
305
+ const values = Object.values(xss).map((x) => x[key]);
306
+ const xs = values.sort((a, b) => (a - b));
307
+ result[key] = (xs[1] + xs[2]) / 2;
308
+ }
309
+ });
310
+ return result;
311
+ // return _.mapValues(xss.ul, function(ignore, v) {
312
+ // if (align) {
313
+ // return xss[align.toLowerCase()][v];
314
+ // } else {
315
+ // const xs = _.sortBy(_.map(xss, v));
316
+ // return (xs[1] + xs[2]) / 2;
317
+ // }
318
+ // });
319
+ };
320
+ const positionX = (g) => {
321
+ const layering = util.buildLayerMatrix(g);
322
+ const conflicts = Object.assign(findType1Conflicts(g, layering), findType2Conflicts(g, layering));
323
+ const xss = {};
324
+ let adjustedLayering;
325
+ ["u", "d"].forEach((vert) => {
326
+ // @ts-ignore
327
+ adjustedLayering = vert === "u" ? layering : Object.values(layering).reverse();
328
+ ["l", "r"].forEach((horiz) => {
329
+ if (horiz === "r") {
330
+ // @ts-ignore
331
+ adjustedLayering = adjustedLayering.map((inner) => Object.values(inner).reverse());
332
+ }
333
+ const neighborFn = (vert === "u" ? g.predecessors : g.successors).bind(g);
334
+ const align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);
335
+ let xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === "r");
336
+ if (horiz === "r") {
337
+ // @ts-ignore
338
+ xs = Object.values(xs).map((x) => -x);
339
+ }
340
+ xss[vert + horiz] = xs;
341
+ });
342
+ });
343
+ const smallestWidth = findSmallestWidthAlignment(g, xss);
344
+ alignCoordinates(xss, smallestWidth);
345
+ return balance(xss, g.graph().align);
346
+ };
347
+ const sep = (nodeSep, edgeSep, reverseSep) => {
348
+ return (g, v, w) => {
349
+ const vLabel = g.node(v);
350
+ const wLabel = g.node(w);
351
+ let sum = 0;
352
+ let delta;
353
+ sum += vLabel.width / 2;
354
+ if (vLabel.hasOwnProperty("labelpos")) {
355
+ switch ((vLabel.labelpos || '').toLowerCase()) {
356
+ case "l":
357
+ delta = -vLabel.width / 2;
358
+ break;
359
+ case "r":
360
+ delta = vLabel.width / 2;
361
+ break;
362
+ }
363
+ }
364
+ if (delta) {
365
+ sum += reverseSep ? delta : -delta;
366
+ }
367
+ delta = 0;
368
+ sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;
369
+ sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;
370
+ sum += wLabel.width / 2;
371
+ if (wLabel.hasOwnProperty("labelpos")) {
372
+ switch ((wLabel.labelpos || '').toLowerCase()) {
373
+ case "l":
374
+ delta = wLabel.width / 2;
375
+ break;
376
+ case "r":
377
+ delta = -wLabel.width / 2;
378
+ break;
379
+ }
380
+ }
381
+ if (delta) {
382
+ sum += reverseSep ? delta : -delta;
383
+ }
384
+ delta = 0;
385
+ return sum;
386
+ };
387
+ };
388
+ const width = (g, v) => { var _a; return ((_a = g.node(v)) === null || _a === void 0 ? void 0 : _a.width) || 0; };
389
+ export { positionX, findType1Conflicts, findType2Conflicts, addConflict, hasConflict, verticalAlignment, horizontalCompaction, alignCoordinates, findSmallestWidthAlignment, balance };
390
+ export default {
391
+ positionX,
392
+ findType1Conflicts,
393
+ findType2Conflicts,
394
+ addConflict,
395
+ hasConflict,
396
+ verticalAlignment,
397
+ horizontalCompaction,
398
+ alignCoordinates,
399
+ findSmallestWidthAlignment,
400
+ balance
401
+ };
402
+ //# 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,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,IAAI,MAAM,SAAS,CAAC;AAI3B,MAAM,KAAK,GAAI,QAAgB,CAAC,KAAK,CAAC;AAEtC;;;GAGG;AAGH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAE,QAAc,EAAE,EAAE;IACvD,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,MAAM,UAAU,GAAG,CAAC,SAAc,EAAE,KAAU,EAAE,EAAE;QAChD,uEAAuE;QACvE,WAAW;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACT,yEAAyE;QACzE,WAAW;QACb,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,IAAG,CAAC,CAAC,CAAC;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACvC,MAAM,CAAC,GAAG,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,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,CAAC,QAAa,EAAE,EAAE;;oBACnD,MAAA,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,0CAAE,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;wBAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACzB,MAAM,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,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE;QACpB,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KAC7B;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAE,QAAc,EAAE,EAAE;IACvD,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,MAAM,IAAI,GAAG,CAAC,KAAe,EAAE,QAAgB,EAAE,QAAgB,EAAE,eAAuB,EAAE,eAAuB,EAAE,EAAE;QACrH,IAAI,CAAM,CAAC;QACX,MAAM,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,CAAC,CAAC,EAAE,EAAE;;YAClB,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,CAAC,CAAM,EAAE,EAAE;oBACpC,MAAM,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,MAAM,UAAU,GAAG,CAAC,KAAe,EAAE,KAAe,EAAE,EAAE;QACtD,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,YAAoB,CAAC;QACzB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,cAAsB,EAAE,EAAE;YACpD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAChC,MAAM,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,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE;QACpB,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KAC7B;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;;IACzD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QACnB,OAAO,MAAA,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KACxD;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,SAAc,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE;IAC3D,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,EAAE,EAAE;QACX,MAAM,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;AAEF,MAAM,WAAW,GAAG,CAAC,SAAc,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE;IAC3D,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,EAAE,EAAE;QACX,MAAM,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;AAEF;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAE,QAAa,EAAE,SAAc,EAAE,UAAkC,EAAE,EAAE;IACzG,MAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,MAAM,GAAG,GAAQ,EAAE,CAAC;IAEpB,yEAAyE;IACzE,qEAAqE;IACrE,yCAAyC;IACzC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;QAC9B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,KAAa,EAAE,EAAE;YACzC,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,CAAC,KAAU,EAAE,EAAE;QAC9B,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;YACvB,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAQ,CAAC;YAC9B,IAAI,EAAE,CAAC,MAAM,EAAE;gBACb,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,MAAM,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,MAAM,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,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAS,EAAE,QAAa,EAAE,IAAY,EAAE,KAAe,EAAE,UAAmB,EAAE,EAAE;IAC5G,6EAA6E;IAC7E,uEAAuE;IACvE,mEAAmE;IACnE,6EAA6E;IAC7E,qDAAqD;IACrD,MAAM,EAAE,GAAQ,EAAE,CAAC;IACnB,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IAE7D,MAAM,OAAO,GAAG,CAAC,SAAqC,EAAE,aAAqC,EAAE,EAAE;QAC/F,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,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,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAM,EAAE,EAAE;YACrE,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,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAM,EAAE,EAAE;YACvE,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,MAAM,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,CAAC,CAAM,EAAE,EAAE;QACtC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAGF,MAAM,eAAe,GAAG,CAAC,CAAS,EAAE,QAAa,EAAE,IAAY,EAAE,UAAmB,EAAE,EAAE;IACtF,MAAM,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,OAAiB,EAAE,UAAU,CAAC,OAAiB,EAAE,UAAqB,CAAC,CAAC;IAErG,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;QAC9B,IAAI,CAAM,CAAC;QACX,KAAK,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,EAAE;gBACL,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,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,MAAM,0BAA0B,GAAG,CAAC,CAAS,EAAE,GAAQ,EAAE,EAAE;IACzD,aAAa;IACb,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3C,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,CAAC,CAAS,EAAE,EAAE;YACpC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,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;AAEF;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,GAAQ,EAAE,OAAY;IAC9C,aAAa;IACb,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IAE5C,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;YAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1B,IAAI,KAAa,CAAC;YAClB,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO;YAE3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAa,CAAC;YAC7C,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,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,CAAC,GAAG,EAAE,EAAE;oBAC9B,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;AAED,MAAM,OAAO,GAAG,CAAC,GAAQ,EAAE,KAAa,EAAE,EAAE;IAC1C,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAClC,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,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,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;AAEF,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAC7B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,EAC/B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAChC,CAAC;IAEF,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,IAAI,gBAAqB,CAAC;IAC1B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,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,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,KAAK,GAAG,EAAE;gBACjB,aAAa;gBACb,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACzF;YAED,MAAM,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,MAAM,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,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/C;YACD,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,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;AAEF,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,UAAmB,EAAE,EAAE;IACpE,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,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,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,KAAI,CAAC,CAAA,EAAA,CAAC;AAE9D,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,OAAO,EACR,CAAC;AAEF,eAAe;IACb,SAAS;IACT,kBAAkB;IAClB,kBAAkB;IAClB,WAAW;IACX,WAAW;IACX,iBAAiB;IACjB,oBAAoB;IACpB,gBAAgB;IAChB,0BAA0B;IAC1B,OAAO;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,53 @@
1
+ import util from '../util';
2
+ import { alignCoordinates, balance, findSmallestWidthAlignment, findType1Conflicts, findType2Conflicts, horizontalCompaction, verticalAlignment } from './bk';
3
+ const positionY = (g) => {
4
+ const layering = util.buildLayerMatrix(g);
5
+ const rankSep = g.graph().ranksep;
6
+ let prevY = 0;
7
+ layering.forEach((layer) => {
8
+ const heights = layer.map((v) => g.node(v).height);
9
+ const maxHeight = Math.max(...heights);
10
+ layer.forEach((v) => {
11
+ g.node(v).y = prevY + maxHeight / 2;
12
+ });
13
+ prevY += maxHeight + rankSep;
14
+ });
15
+ };
16
+ const positionX = (g) => {
17
+ const layering = util.buildLayerMatrix(g);
18
+ const conflicts = Object.assign(findType1Conflicts(g, layering), findType2Conflicts(g, layering));
19
+ const xss = {};
20
+ let adjustedLayering;
21
+ ["u", "d"].forEach((vert) => {
22
+ // @ts-ignore
23
+ adjustedLayering = vert === "u" ? layering : Object.values(layering).reverse();
24
+ ["l", "r"].forEach((horiz) => {
25
+ if (horiz === "r") {
26
+ // @ts-ignore
27
+ adjustedLayering = adjustedLayering.map((inner) => Object.values(inner).reverse());
28
+ }
29
+ const neighborFn = (vert === "u" ? g.predecessors : g.successors).bind(g);
30
+ const align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);
31
+ const xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === "r");
32
+ if (horiz === "r") {
33
+ Object.keys(xs).forEach((xsKey) => xs[xsKey] = -xs[xsKey]);
34
+ }
35
+ xss[vert + horiz] = xs;
36
+ });
37
+ });
38
+ const smallestWidth = findSmallestWidthAlignment(g, xss);
39
+ smallestWidth && alignCoordinates(xss, smallestWidth);
40
+ return balance(xss, g.graph().align);
41
+ };
42
+ const position = (g) => {
43
+ var _a;
44
+ // tslint:disable-next-line
45
+ g = util.asNonCompoundGraph(g);
46
+ positionY(g);
47
+ const xs = positionX(g);
48
+ (_a = Object.keys(xs)) === null || _a === void 0 ? void 0 : _a.forEach((key) => {
49
+ g.node(key).x = xs[key];
50
+ });
51
+ };
52
+ export default position;
53
+ //# 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,149 @@
1
+ import graphlib from '../graphlib';
2
+ import { slack } from './util';
3
+ import { minBy } from '../util';
4
+ const Graph = graphlib.Graph;
5
+ /*
6
+ * Constructs a spanning tree with tight edges and adjusted the input node's
7
+ * ranks to achieve this. A tight edge is one that is has a length that matches
8
+ * its "minlen" attribute.
9
+ *
10
+ * The basic structure for this function is derived from Gansner, et al., "A
11
+ * Technique for Drawing Directed Graphs."
12
+ *
13
+ * Pre-conditions:
14
+ *
15
+ * 1. Graph must be a DAG.
16
+ * 2. Graph must be connected.
17
+ * 3. Graph must have at least one node.
18
+ * 5. Graph nodes must have been previously assigned a "rank" property that
19
+ * respects the "minlen" property of incident edges.
20
+ * 6. Graph edges must have a "minlen" property.
21
+ *
22
+ * Post-conditions:
23
+ *
24
+ * - Graph nodes will have their rank adjusted to ensure that all edges are
25
+ * tight.
26
+ *
27
+ * Returns a tree (undirected graph) that is constructed using only "tight"
28
+ * edges.
29
+ */
30
+ const feasibleTree = (g) => {
31
+ const t = new Graph({ directed: false });
32
+ // Choose arbitrary node from which to start our tree
33
+ const start = g.nodes()[0];
34
+ const size = g.nodeCount();
35
+ t.setNode(start, {});
36
+ let edge;
37
+ let delta;
38
+ while (tightTree(t, g) < size) {
39
+ edge = findMinSlackEdge(t, g);
40
+ delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);
41
+ shiftRanks(t, g, delta);
42
+ }
43
+ return t;
44
+ };
45
+ /*
46
+ * Finds a maximal tree of tight edges and returns the number of nodes in the
47
+ * tree.
48
+ */
49
+ const tightTree = (t, g) => {
50
+ const dfs = (v) => {
51
+ g.nodeEdges(v).forEach((e) => {
52
+ const edgeV = e.v;
53
+ const w = (v === edgeV) ? e.w : edgeV;
54
+ if (!t.hasNode(w) && !slack(g, e)) {
55
+ t.setNode(w, {});
56
+ t.setEdge(v, w, {});
57
+ dfs(w);
58
+ }
59
+ });
60
+ };
61
+ t.nodes().forEach(dfs);
62
+ return t.nodeCount();
63
+ };
64
+ /*
65
+ * Constructs a spanning tree with tight edges and adjusted the input node's
66
+ * ranks to achieve this. A tight edge is one that is has a length that matches
67
+ * its "minlen" attribute.
68
+ *
69
+ * The basic structure for this function is derived from Gansner, et al., "A
70
+ * Technique for Drawing Directed Graphs."
71
+ *
72
+ * Pre-conditions:
73
+ *
74
+ * 1. Graph must be a DAG.
75
+ * 2. Graph must be connected.
76
+ * 3. Graph must have at least one node.
77
+ * 5. Graph nodes must have been previously assigned a "rank" property that
78
+ * respects the "minlen" property of incident edges.
79
+ * 6. Graph edges must have a "minlen" property.
80
+ *
81
+ * Post-conditions:
82
+ *
83
+ * - Graph nodes will have their rank adjusted to ensure that all edges are
84
+ * tight.
85
+ *
86
+ * Returns a tree (undirected graph) that is constructed using only "tight"
87
+ * edges.
88
+ */
89
+ const feasibleTreeWithLayer = (g) => {
90
+ const t = new Graph({ directed: false });
91
+ // Choose arbitrary node from which to start our tree
92
+ const start = g.nodes()[0];
93
+ const size = g.nodeCount();
94
+ t.setNode(start, {});
95
+ let edge;
96
+ let delta;
97
+ while (tightTreeWithLayer(t, g) < size) {
98
+ edge = findMinSlackEdge(t, g);
99
+ delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);
100
+ shiftRanks(t, g, delta);
101
+ }
102
+ return t;
103
+ };
104
+ /*
105
+ * Finds a maximal tree of tight edges and returns the number of nodes in the
106
+ * tree.
107
+ */
108
+ const tightTreeWithLayer = (t, g) => {
109
+ const dfs = (v) => {
110
+ var _a;
111
+ (_a = g.nodeEdges(v)) === null || _a === void 0 ? void 0 : _a.forEach((e) => {
112
+ const edgeV = e.v;
113
+ const w = (v === edgeV) ? e.w : edgeV;
114
+ // 对于指定layer的,直接加入tight-tree,不参与调整
115
+ if (!t.hasNode(w) && (g.node(w).layer !== undefined || !slack(g, e))) {
116
+ t.setNode(w, {});
117
+ t.setEdge(v, w, {});
118
+ dfs(w);
119
+ }
120
+ });
121
+ };
122
+ t.nodes().forEach(dfs);
123
+ return t.nodeCount();
124
+ };
125
+ /*
126
+ * Finds the edge with the smallest slack that is incident on tree and returns
127
+ * it.
128
+ */
129
+ const findMinSlackEdge = (t, g) => {
130
+ return minBy(g.edges(), (e) => {
131
+ if (t.hasNode(e.v) !== t.hasNode(e.w)) {
132
+ return slack(g, e);
133
+ }
134
+ return Infinity;
135
+ });
136
+ };
137
+ const shiftRanks = (t, g, delta) => {
138
+ t.nodes().forEach((v) => {
139
+ if (!g.node(v).rank)
140
+ g.node(v).rank = 0;
141
+ g.node(v).rank += delta;
142
+ });
143
+ };
144
+ export { feasibleTree, feasibleTreeWithLayer };
145
+ export default {
146
+ feasibleTree,
147
+ feasibleTreeWithLayer
148
+ };
149
+ //# sourceMappingURL=feasible-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feasible-tree.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/rank/feasible-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { graphlib } from '../../graphlib';
2
+ declare type IGraph = graphlib.Graph;
3
+ declare const rank: (g: IGraph) => void;
4
+ export default rank;