@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,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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feasible-tree.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/rank/feasible-tree.ts"],"names":[],"mappings":";;;;;;AACA,yDAAmC;AACnC,+BAA+B;AAC/B,gCAAgC;AAGhC,IAAM,KAAK,GAAI,kBAAgB,CAAC,KAAK,CAAC;AAGtC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,IAAM,YAAY,GAAG,UAAC,CAAS;IAC7B,IAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAQ,CAAC;IAEhD,qDAAqD;IACrD,IAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAM,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAErB,IAAI,IAAS,CAAC;IACd,IAAI,KAAa,CAAC;IAClB,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAC7B,IAAI,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;KACzB;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AA+GA,oCAAY;AA7Gd;;;GAGG;AACH,IAAM,SAAS,GAAG,UAAC,CAAS,EAAE,CAAS;IACrC,IAAM,GAAG,GAAG,UAAC,CAAS;QACpB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,CAAC;YACvB,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACtC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBACjC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpB,GAAG,CAAC,CAAC,CAAC,CAAC;aACR;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;AACvB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,IAAM,qBAAqB,GAAG,UAAC,CAAS;IACtC,IAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAQ,CAAC;IAEhD,qDAAqD;IACrD,IAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAM,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAErB,IAAI,IAAS,CAAC;IACd,IAAI,KAAa,CAAC;IAClB,OAAO,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACtC,IAAI,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;KACzB;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AA+CA,sDAAqB;AA5CvB;;;GAGG;AACH,IAAM,kBAAkB,GAAG,UAAC,CAAS,EAAE,CAAS;IAC9C,IAAM,GAAG,GAAG,UAAC,CAAS;;QACpB,MAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC,UAAC,CAAC;YACxB,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACtC,kCAAkC;YAClC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBACpE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpB,GAAG,CAAC,CAAC,CAAC,CAAC;aACR;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;AACvB,CAAC,CAAC;AAEF;;;GAGG;AACH,IAAM,gBAAgB,GAAG,UAAC,CAAS,EAAE,CAAS;IAC5C,OAAO,IAAA,YAAK,EAAC,CAAC,CAAC,KAAK,EAAE,EAAE,UAAC,CAAM;QAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACrC,OAAO,IAAA,YAAK,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACpB;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAM,UAAU,GAAG,UAAC,CAAS,EAAE,CAAS,EAAE,KAAa;IACrD,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,UAAC,CAAS;QAC1B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACvC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAe,IAAI,KAAK,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAOF,kBAAe;IACb,YAAY,cAAA;IACZ,qBAAqB,uBAAA;CACtB,CAAC"}
@@ -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;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ // "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ // var rankUtil = require("./util");
8
+ // var longestPath = rankUtil.longestPathWithLayer;
9
+ // var feasibleTree = require("./feasible-tree").feasibleTreeWithLayer;
10
+ // var networkSimplex = require("./network-simplex");
11
+ var util_1 = require("./util");
12
+ var feasible_tree_1 = require("./feasible-tree");
13
+ var network_simplex_1 = __importDefault(require("./network-simplex"));
14
+ /*
15
+ * Assigns a rank to each node in the input graph that respects the "minlen"
16
+ * constraint specified on edges between nodes.
17
+ *
18
+ * This basic structure is derived from Gansner, et al., "A Technique for
19
+ * Drawing Directed Graphs."
20
+ *
21
+ * Pre-conditions:
22
+ *
23
+ * 1. Graph must be a connected DAG
24
+ * 2. Graph nodes must be objects
25
+ * 3. Graph edges must have "weight" and "minlen" attributes
26
+ *
27
+ * Post-conditions:
28
+ *
29
+ * 1. Graph nodes will have a "rank" attribute based on the results of the
30
+ * algorithm. Ranks can start at any index (including negative), we'll
31
+ * fix them up later.
32
+ */
33
+ var rank = function (g) {
34
+ switch (g.graph().ranker) {
35
+ case "network-simplex":
36
+ networkSimplexRanker(g);
37
+ break;
38
+ case "tight-tree":
39
+ tightTreeRanker(g);
40
+ break;
41
+ case "longest-path":
42
+ longestPathRanker(g);
43
+ break;
44
+ // default: networkSimplexRanker(g);
45
+ default: tightTreeRanker(g);
46
+ }
47
+ };
48
+ // A fast and simple ranker, but results are far from optimal.
49
+ var longestPathRanker = util_1.longestPath;
50
+ var tightTreeRanker = function (g) {
51
+ (0, util_1.longestPathWithLayer)(g);
52
+ (0, feasible_tree_1.feasibleTreeWithLayer)(g);
53
+ };
54
+ var networkSimplexRanker = function (g) {
55
+ (0, network_simplex_1.default)(g);
56
+ };
57
+ exports.default = rank;
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/rank/index.ts"],"names":[],"mappings":";AAAA,gBAAgB;;;;;AAEhB,oCAAoC;AACpC,mDAAmD;AACnD,uEAAuE;AACvE,qDAAqD;AAErD,+BAA2D;AAC3D,iDAAwE;AACxE,sEAA+C;AAK/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,IAAM,IAAI,GAAG,UAAC,CAAS;IACrB,QAAO,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;QACzB,KAAK,iBAAiB;YAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QACvD,KAAK,YAAY;YAAE,eAAe,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QAC7C,KAAK,cAAc;YAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM;QACjD,oCAAoC;QACpC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KAC3B;AACH,CAAC,CAAC;AAEF,8DAA8D;AAC9D,IAAM,iBAAiB,GAAG,kBAAW,CAAC;AAEtC,IAAM,eAAe,GAAG,UAAC,CAAS;IAChC,IAAA,2BAAoB,EAAC,CAAC,CAAC,CAAC;IACxB,IAAA,qCAAY,EAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,IAAM,oBAAoB,GAAG,UAAC,CAAS;IACrC,IAAA,yBAAc,EAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { graphlib as IGraphLib } from '../../graphlib';
2
+ declare type IGraph = IGraphLib.Graph;
3
+ declare const networkSimplex: {
4
+ (g: IGraph): void;
5
+ initLowLimValues: (tree: IGraph, root?: string | undefined) => void;
6
+ initCutValues: (t: IGraph, g: IGraph) => void;
7
+ calcCutValue: (t: IGraph, g: IGraph, child: string) => number;
8
+ leaveEdge: (tree: IGraph) => import("../../graphlib").Edge | undefined;
9
+ enterEdge: (t: IGraph, g: IGraph, edge: any) => undefined;
10
+ exchangeEdges: (t: IGraph, g: IGraph, e: any, f: any) => void;
11
+ };
12
+ export default networkSimplex;
@@ -0,0 +1,212 @@
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 feasible_tree_1 = require("./feasible-tree");
7
+ var util_1 = require("./util");
8
+ var util_2 = require("../util");
9
+ var graphlib_1 = __importDefault(require("../graphlib"));
10
+ var alg = graphlib_1.default.alg;
11
+ var preorder = alg.preorder, postorder = alg.postorder;
12
+ /*
13
+ * The network simplex algorithm assigns ranks to each node in the input graph
14
+ * and iteratively improves the ranking to reduce the length of edges.
15
+ *
16
+ * Preconditions:
17
+ *
18
+ * 1. The input graph must be a DAG.
19
+ * 2. All nodes in the graph must have an object value.
20
+ * 3. All edges in the graph must have "minlen" and "weight" attributes.
21
+ *
22
+ * Postconditions:
23
+ *
24
+ * 1. All nodes in the graph will have an assigned "rank" attribute that has
25
+ * been optimized by the network simplex algorithm. Ranks start at 0.
26
+ *
27
+ *
28
+ * A rough sketch of the algorithm is as follows:
29
+ *
30
+ * 1. Assign initial ranks to each node. We use the longest path algorithm,
31
+ * which assigns ranks to the lowest position possible. In general this
32
+ * leads to very wide bottom ranks and unnecessarily long edges.
33
+ * 2. Construct a feasible tight tree. A tight tree is one such that all
34
+ * edges in the tree have no slack (difference between length of edge
35
+ * and minlen for the edge). This by itself greatly improves the assigned
36
+ * rankings by shorting edges.
37
+ * 3. Iteratively find edges that have negative cut values. Generally a
38
+ * negative cut value indicates that the edge could be removed and a new
39
+ * tree edge could be added to produce a more compact graph.
40
+ *
41
+ * Much of the algorithms here are derived from Gansner, et al., "A Technique
42
+ * for Drawing Directed Graphs." The structure of the file roughly follows the
43
+ * structure of the overall algorithm.
44
+ */
45
+ var networkSimplex = function (g) {
46
+ // tslint:disable-next-line
47
+ g = (0, util_2.simplify)(g);
48
+ (0, util_1.longestPath)(g);
49
+ var t = (0, feasible_tree_1.feasibleTree)(g);
50
+ initLowLimValues(t);
51
+ initCutValues(t, g);
52
+ var e;
53
+ var f;
54
+ while ((e = leaveEdge(t))) {
55
+ f = enterEdge(t, g, e);
56
+ exchangeEdges(t, g, e, f);
57
+ }
58
+ };
59
+ /*
60
+ * Initializes cut values for all edges in the tree.
61
+ */
62
+ var initCutValues = function (t, g) {
63
+ var vs = postorder(t, t.nodes());
64
+ vs = vs.slice(0, vs.length - 1);
65
+ vs.forEach(function (v) {
66
+ assignCutValue(t, g, v);
67
+ });
68
+ };
69
+ var assignCutValue = function (t, g, child) {
70
+ var childLab = t.node(child);
71
+ var parent = childLab.parent;
72
+ t.edge(child, parent).cutvalue = calcCutValue(t, g, child);
73
+ };
74
+ /*
75
+ * Given the tight tree, its graph, and a child in the graph calculate and
76
+ * return the cut value for the edge between the child and its parent.
77
+ */
78
+ var calcCutValue = function (t, g, child) {
79
+ var childLab = t.node(child);
80
+ var parent = childLab.parent;
81
+ // True if the child is on the tail end of the edge in the directed graph
82
+ var childIsTail = true;
83
+ // The graph's view of the tree edge we're inspecting
84
+ var graphEdge = g.edge(child, parent);
85
+ // The accumulated cut value for the edge between this node and its parent
86
+ var cutValue = 0;
87
+ if (!graphEdge) {
88
+ childIsTail = false;
89
+ graphEdge = g.edge(parent, child);
90
+ }
91
+ cutValue = graphEdge.weight;
92
+ g.nodeEdges(child).forEach(function (e) {
93
+ var isOutEdge = e.v === child;
94
+ var other = isOutEdge ? e.w : e.v;
95
+ if (other !== parent) {
96
+ var pointsToHead = isOutEdge === childIsTail;
97
+ var otherWeight = g.edge(e).weight;
98
+ cutValue += pointsToHead ? otherWeight : -otherWeight;
99
+ if (isTreeEdge(t, child, other)) {
100
+ var otherCutValue = t.edge(child, other).cutvalue;
101
+ cutValue += pointsToHead ? -otherCutValue : otherCutValue;
102
+ }
103
+ }
104
+ });
105
+ return cutValue;
106
+ };
107
+ var initLowLimValues = function (tree, root) {
108
+ if (root !== undefined) {
109
+ // tslint:disable-next-line
110
+ root = tree.nodes()[0];
111
+ }
112
+ dfsAssignLowLim(tree, {}, 1, root);
113
+ };
114
+ var dfsAssignLowLim = function (tree, visited, nextLim, v, parent) {
115
+ var _a;
116
+ var low = nextLim;
117
+ var useNextLim = nextLim;
118
+ var label = tree.node(v);
119
+ visited[v] = true;
120
+ (_a = tree.neighbors(v)) === null || _a === void 0 ? void 0 : _a.forEach(function (w) {
121
+ if (!visited.hasOwnProperty(w)) {
122
+ useNextLim = dfsAssignLowLim(tree, visited, useNextLim, w, v);
123
+ }
124
+ });
125
+ label.low = low;
126
+ label.lim = useNextLim++;
127
+ if (parent) {
128
+ label.parent = parent;
129
+ }
130
+ else {
131
+ // TODO should be able to remove this when we incrementally update low lim
132
+ delete label.parent;
133
+ }
134
+ return useNextLim;
135
+ };
136
+ var leaveEdge = function (tree) {
137
+ return tree.edges().find(function (e) {
138
+ return tree.edge(e).cutvalue < 0;
139
+ });
140
+ };
141
+ var enterEdge = function (t, g, edge) {
142
+ var v = edge.v;
143
+ var w = edge.w;
144
+ // For the rest of this function we assume that v is the tail and w is the
145
+ // head, so if we don't have this edge in the graph we should flip it to
146
+ // match the correct orientation.
147
+ if (!g.hasEdge(v, w)) {
148
+ v = edge.w;
149
+ w = edge.v;
150
+ }
151
+ var vLabel = t.node(v);
152
+ var wLabel = t.node(w);
153
+ var tailLabel = vLabel;
154
+ var flip = false;
155
+ // If the root is in the tail of the edge then we need to flip the logic that
156
+ // checks for the head and tail nodes in the candidates function below.
157
+ if (vLabel.lim > wLabel.lim) {
158
+ tailLabel = wLabel;
159
+ flip = true;
160
+ }
161
+ var candidates = g.edges().filter(function (edge) {
162
+ return flip === isDescendant(t, t.node(edge.v), tailLabel) &&
163
+ flip !== isDescendant(t, t.node(edge.w), tailLabel);
164
+ });
165
+ return (0, util_2.minBy)(candidates, function (edge) { return (0, util_1.slack)(g, edge); });
166
+ };
167
+ var exchangeEdges = function (t, g, e, f) {
168
+ var v = e.v;
169
+ var w = e.w;
170
+ t.removeEdge(v, w);
171
+ t.setEdge(f.v, f.w, {});
172
+ initLowLimValues(t);
173
+ initCutValues(t, g);
174
+ updateRanks(t, g);
175
+ };
176
+ var updateRanks = function (t, g) {
177
+ var root = t.nodes().find(function (v) { return !g.node(v).parent; });
178
+ var vs = preorder(t, root);
179
+ vs = vs.slice(1);
180
+ vs.forEach(function (v) {
181
+ var parent = t.node(v).parent;
182
+ var edge = g.edge(v, parent);
183
+ var flipped = false;
184
+ if (!edge) {
185
+ edge = g.edge(parent, v);
186
+ flipped = true;
187
+ }
188
+ g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);
189
+ });
190
+ };
191
+ /*
192
+ * Returns true if the edge is in the tree.
193
+ */
194
+ var isTreeEdge = function (tree, u, v) {
195
+ return tree.hasEdge(u, v);
196
+ };
197
+ /*
198
+ * Returns true if the specified node is descendant of the root node per the
199
+ * assigned low and lim attributes in the tree.
200
+ */
201
+ var isDescendant = function (tree, vLabel, rootLabel) {
202
+ return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;
203
+ };
204
+ // Expose some internals for testing purposes
205
+ networkSimplex.initLowLimValues = initLowLimValues;
206
+ networkSimplex.initCutValues = initCutValues;
207
+ networkSimplex.calcCutValue = calcCutValue;
208
+ networkSimplex.leaveEdge = leaveEdge;
209
+ networkSimplex.enterEdge = enterEdge;
210
+ networkSimplex.exchangeEdges = exchangeEdges;
211
+ exports.default = networkSimplex;
212
+ //# sourceMappingURL=network-simplex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-simplex.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/rank/network-simplex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { graphlib } from "../../graphlib";
2
+ declare type Graph = graphlib.Graph;
3
+ declare const longestPath: (g: Graph) => void;
4
+ declare const longestPathWithLayer: (g: Graph) => void;
5
+ declare const slack: (g: Graph, e: any) => number;
6
+ export { longestPath, longestPathWithLayer, slack, };
7
+ declare const _default: {
8
+ longestPath: (g: Graph) => void;
9
+ longestPathWithLayer: (g: Graph) => void;
10
+ slack: (g: Graph, e: any) => number;
11
+ };
12
+ export default _default;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.slack = exports.longestPathWithLayer = exports.longestPath = void 0;
4
+ /*
5
+ * Initializes ranks for the input graph using the longest path algorithm. This
6
+ * algorithm scales well and is fast in practice, it yields rather poor
7
+ * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom
8
+ * ranks wide and leaving edges longer than necessary. However, due to its
9
+ * speed, this algorithm is good for getting an initial ranking that can be fed
10
+ * into other algorithms.
11
+ *
12
+ * This algorithm does not normalize layers because it will be used by other
13
+ * algorithms in most cases. If using this algorithm directly, be sure to
14
+ * run normalize at the end.
15
+ *
16
+ * Pre-conditions:
17
+ *
18
+ * 1. Input graph is a DAG.
19
+ * 2. Input graph node labels can be assigned properties.
20
+ *
21
+ * Post-conditions:
22
+ *
23
+ * 1. Each node will be assign an (unnormalized) "rank" property.
24
+ */
25
+ var longestPath = function (g) {
26
+ var visited = {};
27
+ var dfs = function (v) {
28
+ var _a;
29
+ var label = g.node(v);
30
+ if (visited.hasOwnProperty(v)) {
31
+ return label.rank;
32
+ }
33
+ visited[v] = true;
34
+ var lengths = (_a = g.outEdges(v)) === null || _a === void 0 ? void 0 : _a.map(function (e) {
35
+ return (dfs(e.w) - g.edge(e).minlen) || Infinity;
36
+ });
37
+ var rank = Math.min.apply(Math, lengths);
38
+ if (rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3
39
+ rank === undefined || // return value of _.map([]) for Lodash 4
40
+ rank === null) { // return value of _.map([null])
41
+ rank = 0;
42
+ }
43
+ label.rank = rank;
44
+ return rank;
45
+ };
46
+ g.sources().forEach(function (source) { return dfs(source); });
47
+ };
48
+ exports.longestPath = longestPath;
49
+ var longestPathWithLayer = function (g) {
50
+ // 用longest path,找出最深的点
51
+ var visited = {};
52
+ var minRank = 0;
53
+ var dfs = function (v) {
54
+ var _a;
55
+ var label = g.node(v);
56
+ if (visited.hasOwnProperty(v)) {
57
+ return label.rank;
58
+ }
59
+ visited[v] = true;
60
+ var lengths = (_a = g.outEdges(v)) === null || _a === void 0 ? void 0 : _a.map(function (e) {
61
+ return (dfs(e.w) - g.edge(e).minlen) || Infinity;
62
+ });
63
+ var rank = Math.min.apply(Math, lengths);
64
+ if (rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3
65
+ rank === undefined || // return value of _.map([]) for Lodash 4
66
+ rank === null) { // return value of _.map([null])
67
+ rank = 0;
68
+ }
69
+ label.rank = rank;
70
+ minRank = Math.min(label.rank, minRank);
71
+ return label.rank;
72
+ };
73
+ g.sources().forEach(function (source) { return dfs(source); });
74
+ minRank += 1; // NOTE: 最小的层级是dummy root,+1
75
+ // forward一遍,赋值层级
76
+ var dfsForward = function (v, nextRank) {
77
+ var _a;
78
+ var label = g.node(v);
79
+ var currRank = (!isNaN(label.layer) ? label.layer : nextRank);
80
+ // 没有指定,取最大值
81
+ if (label.rank === undefined || label.rank < currRank) {
82
+ label.rank = currRank;
83
+ }
84
+ // DFS遍历子节点
85
+ (_a = g.outEdges(v)) === null || _a === void 0 ? void 0 : _a.map(function (e) {
86
+ dfsForward(e.w, currRank + g.edge(e).minlen);
87
+ });
88
+ };
89
+ // 指定层级的,更新下游
90
+ g.nodes().forEach(function (n) {
91
+ var label = g.node(n);
92
+ if (!isNaN(label.layer)) {
93
+ dfsForward(n, label.layer); // 默认的dummy root所在层的rank是-1
94
+ }
95
+ else {
96
+ label.rank -= minRank;
97
+ }
98
+ });
99
+ };
100
+ exports.longestPathWithLayer = longestPathWithLayer;
101
+ /*
102
+ * Returns the amount of slack for the given edge. The slack is defined as the
103
+ * difference between the length of the edge and its minimum length.
104
+ */
105
+ var slack = function (g, e) {
106
+ return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;
107
+ };
108
+ exports.slack = slack;
109
+ exports.default = {
110
+ longestPath: longestPath,
111
+ longestPathWithLayer: longestPathWithLayer,
112
+ slack: slack,
113
+ };
114
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../../src/layout/dagre/src/rank/util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { graphlib as IGraphLib } from '../graphlib';
2
+ declare type IGraph = IGraphLib.Graph;
3
+ declare const addDummyNode: (g: IGraph, type: any, attrs: any, name: string) => string;
4
+ declare const simplify: (g: IGraph) => any;
5
+ declare const asNonCompoundGraph: (g: IGraph) => IGraph;
6
+ declare const zipObject: (keys: string[], values: any) => any;
7
+ declare const successorWeights: (g: IGraph) => any;
8
+ declare const predecessorWeights: (g: IGraph) => any;
9
+ declare const intersectRect: (rect: any, point: any) => {
10
+ x: any;
11
+ y: any;
12
+ };
13
+ declare const buildLayerMatrix: (g: IGraph) => any;
14
+ declare const normalizeRanks: (g: IGraph) => void;
15
+ declare const removeEmptyRanks: (g: IGraph) => void;
16
+ declare const addBorderNode: (g: IGraph, prefix: string, rank?: number | undefined, order?: number | undefined) => string;
17
+ declare const maxRank: (g: IGraph) => number;
18
+ declare const partition: (collection: any, fn: any) => {
19
+ lhs: any;
20
+ rhs: any;
21
+ };
22
+ declare const time: (name: string, fn: () => unknown) => unknown;
23
+ declare const notime: (name: string, fn: () => unknown) => unknown;
24
+ declare const minBy: (array: any, func: (param: any) => number) => undefined;
25
+ export { addDummyNode, simplify, asNonCompoundGraph, successorWeights, predecessorWeights, intersectRect, buildLayerMatrix, normalizeRanks, removeEmptyRanks, addBorderNode, maxRank, partition, time, notime, zipObject, minBy };
26
+ declare const _default: {
27
+ addDummyNode: (g: IGraph, type: any, attrs: any, name: string) => string;
28
+ simplify: (g: IGraph) => any;
29
+ asNonCompoundGraph: (g: IGraph) => IGraph;
30
+ successorWeights: (g: IGraph) => any;
31
+ predecessorWeights: (g: IGraph) => any;
32
+ intersectRect: (rect: any, point: any) => {
33
+ x: any;
34
+ y: any;
35
+ };
36
+ buildLayerMatrix: (g: IGraph) => any;
37
+ normalizeRanks: (g: IGraph) => void;
38
+ removeEmptyRanks: (g: IGraph) => void;
39
+ addBorderNode: (g: IGraph, prefix: string, rank?: number | undefined, order?: number | undefined) => string;
40
+ maxRank: (g: IGraph) => number;
41
+ partition: (collection: any, fn: any) => {
42
+ lhs: any;
43
+ rhs: any;
44
+ };
45
+ time: (name: string, fn: () => unknown) => unknown;
46
+ notime: (name: string, fn: () => unknown) => unknown;
47
+ zipObject: (keys: string[], values: any) => any;
48
+ minBy: (array: any, func: (param: any) => number) => undefined;
49
+ };
50
+ export default _default;