@antv/layout 0.1.19-beta.3 → 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 (247) 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/er/core.d.ts +1 -0
  96. package/es/layout/er/core.js +107 -0
  97. package/es/layout/er/core.js.map +1 -0
  98. package/es/layout/er/forceGrid.d.ts +8 -0
  99. package/es/layout/er/forceGrid.js +88 -0
  100. package/es/layout/er/forceGrid.js.map +1 -0
  101. package/es/layout/er/grid.d.ts +26 -0
  102. package/es/layout/er/grid.js +162 -0
  103. package/es/layout/er/grid.js.map +1 -0
  104. package/es/layout/er/index.d.ts +29 -0
  105. package/es/layout/er/index.js +54 -0
  106. package/es/layout/er/index.js.map +1 -0
  107. package/es/layout/er/mysqlWorkbench.d.ts +6 -0
  108. package/es/layout/er/mysqlWorkbench.js +324 -0
  109. package/es/layout/er/mysqlWorkbench.js.map +1 -0
  110. package/es/layout/er/type.d.ts +35 -0
  111. package/es/layout/er/type.js +2 -0
  112. package/es/layout/er/type.js.map +1 -0
  113. package/es/layout/force/force-in-a-box.js +1 -0
  114. package/es/layout/force/force-in-a-box.js.map +1 -1
  115. package/es/layout/fruchterman.js +12 -36
  116. package/es/layout/fruchterman.js.map +1 -1
  117. package/es/layout/index.d.ts +2 -1
  118. package/es/layout/index.js +2 -1
  119. package/es/layout/index.js.map +1 -1
  120. package/es/layout/layout.js +33 -11
  121. package/es/layout/layout.js.map +1 -1
  122. package/es/layout/types.d.ts +9 -3
  123. package/es/registy/index.d.ts +1 -1
  124. package/es/registy/index.js +1 -0
  125. package/es/registy/index.js.map +1 -1
  126. package/lib/layout/dagre/index.d.ts +9 -0
  127. package/lib/layout/dagre/index.js +38 -0
  128. package/lib/layout/dagre/index.js.map +1 -0
  129. package/lib/layout/dagre/src/acyclic.d.ts +7 -0
  130. package/lib/layout/dagre/src/acyclic.js +57 -0
  131. package/lib/layout/dagre/src/acyclic.js.map +1 -0
  132. package/lib/layout/dagre/src/add-border-segments.d.ts +4 -0
  133. package/lib/layout/dagre/src/add-border-segments.js +37 -0
  134. package/lib/layout/dagre/src/add-border-segments.js.map +1 -0
  135. package/lib/layout/dagre/src/coordinate-system.d.ts +7 -0
  136. package/lib/layout/dagre/src/coordinate-system.js +59 -0
  137. package/lib/layout/dagre/src/coordinate-system.js.map +1 -0
  138. package/lib/layout/dagre/src/data/list.d.ts +8 -0
  139. package/lib/layout/dagre/src/data/list.js +53 -0
  140. package/lib/layout/dagre/src/data/list.js.map +1 -0
  141. package/lib/layout/dagre/src/debug.d.ts +4 -0
  142. package/lib/layout/dagre/src/debug.js +31 -0
  143. package/lib/layout/dagre/src/debug.js.map +1 -0
  144. package/lib/layout/dagre/src/graphlib.d.ts +2 -0
  145. package/lib/layout/dagre/src/graphlib.js +13 -0
  146. package/lib/layout/dagre/src/graphlib.js.map +1 -0
  147. package/lib/layout/dagre/src/greedy-fas.d.ts +4 -0
  148. package/lib/layout/dagre/src/greedy-fas.js +118 -0
  149. package/lib/layout/dagre/src/greedy-fas.js.map +1 -0
  150. package/lib/layout/dagre/src/layout.d.ts +4 -0
  151. package/lib/layout/dagre/src/layout.js +459 -0
  152. package/lib/layout/dagre/src/layout.js.map +1 -0
  153. package/lib/layout/dagre/src/nesting-graph.d.ts +7 -0
  154. package/lib/layout/dagre/src/nesting-graph.js +117 -0
  155. package/lib/layout/dagre/src/nesting-graph.js.map +1 -0
  156. package/lib/layout/dagre/src/normalize.d.ts +7 -0
  157. package/lib/layout/dagre/src/normalize.js +93 -0
  158. package/lib/layout/dagre/src/normalize.js.map +1 -0
  159. package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +4 -0
  160. package/lib/layout/dagre/src/order/add-subgraph-constraints.js +29 -0
  161. package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -0
  162. package/lib/layout/dagre/src/order/barycenter.d.ts +12 -0
  163. package/lib/layout/dagre/src/order/barycenter.js +26 -0
  164. package/lib/layout/dagre/src/order/barycenter.js.map +1 -0
  165. package/lib/layout/dagre/src/order/build-layer-graph.d.ts +4 -0
  166. package/lib/layout/dagre/src/order/build-layer-graph.js +72 -0
  167. package/lib/layout/dagre/src/order/build-layer-graph.js.map +1 -0
  168. package/lib/layout/dagre/src/order/cross-count.d.ts +4 -0
  169. package/lib/layout/dagre/src/order/cross-count.js +66 -0
  170. package/lib/layout/dagre/src/order/cross-count.js.map +1 -0
  171. package/lib/layout/dagre/src/order/index.d.ts +4 -0
  172. package/lib/layout/dagre/src/order/index.js +93 -0
  173. package/lib/layout/dagre/src/order/index.js.map +1 -0
  174. package/lib/layout/dagre/src/order/init-data-order.d.ts +7 -0
  175. package/lib/layout/dagre/src/order/init-data-order.js +27 -0
  176. package/lib/layout/dagre/src/order/init-data-order.js.map +1 -0
  177. package/lib/layout/dagre/src/order/init-order.d.ts +4 -0
  178. package/lib/layout/dagre/src/order/init-order.js +51 -0
  179. package/lib/layout/dagre/src/order/init-order.js.map +1 -0
  180. package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +4 -0
  181. package/lib/layout/dagre/src/order/resolve-conflicts.js +116 -0
  182. package/lib/layout/dagre/src/order/resolve-conflicts.js.map +1 -0
  183. package/lib/layout/dagre/src/order/sort-subgraph.d.ts +4 -0
  184. package/lib/layout/dagre/src/order/sort-subgraph.js +84 -0
  185. package/lib/layout/dagre/src/order/sort-subgraph.js.map +1 -0
  186. package/lib/layout/dagre/src/order/sort.d.ts +2 -0
  187. package/lib/layout/dagre/src/order/sort.js +72 -0
  188. package/lib/layout/dagre/src/order/sort.js.map +1 -0
  189. package/lib/layout/dagre/src/parent-dummy-chains.d.ts +4 -0
  190. package/lib/layout/dagre/src/parent-dummy-chains.js +80 -0
  191. package/lib/layout/dagre/src/parent-dummy-chains.js.map +1 -0
  192. package/lib/layout/dagre/src/position/bk.d.ts +32 -0
  193. package/lib/layout/dagre/src/position/bk.js +413 -0
  194. package/lib/layout/dagre/src/position/bk.js.map +1 -0
  195. package/lib/layout/dagre/src/position/index.d.ts +4 -0
  196. package/lib/layout/dagre/src/position/index.js +58 -0
  197. package/lib/layout/dagre/src/position/index.js.map +1 -0
  198. package/lib/layout/dagre/src/rank/feasible-tree.d.ts +10 -0
  199. package/lib/layout/dagre/src/rank/feasible-tree.js +156 -0
  200. package/lib/layout/dagre/src/rank/feasible-tree.js.map +1 -0
  201. package/lib/layout/dagre/src/rank/index.d.ts +4 -0
  202. package/lib/layout/dagre/src/rank/index.js +58 -0
  203. package/lib/layout/dagre/src/rank/index.js.map +1 -0
  204. package/lib/layout/dagre/src/rank/network-simplex.d.ts +12 -0
  205. package/lib/layout/dagre/src/rank/network-simplex.js +212 -0
  206. package/lib/layout/dagre/src/rank/network-simplex.js.map +1 -0
  207. package/lib/layout/dagre/src/rank/util.d.ts +12 -0
  208. package/lib/layout/dagre/src/rank/util.js +114 -0
  209. package/lib/layout/dagre/src/rank/util.js.map +1 -0
  210. package/lib/layout/dagre/src/util.d.ts +50 -0
  211. package/lib/layout/dagre/src/util.js +281 -0
  212. package/lib/layout/dagre/src/util.js.map +1 -0
  213. package/lib/layout/dagre.d.ts +3 -3
  214. package/lib/layout/dagre.js +37 -13
  215. package/lib/layout/dagre.js.map +1 -1
  216. package/lib/layout/er/core.d.ts +1 -0
  217. package/lib/layout/er/core.js +143 -0
  218. package/lib/layout/er/core.js.map +1 -0
  219. package/lib/layout/er/forceGrid.d.ts +8 -0
  220. package/lib/layout/er/forceGrid.js +97 -0
  221. package/lib/layout/er/forceGrid.js.map +1 -0
  222. package/lib/layout/er/grid.d.ts +26 -0
  223. package/lib/layout/er/grid.js +177 -0
  224. package/lib/layout/er/grid.js.map +1 -0
  225. package/lib/layout/er/index.d.ts +29 -0
  226. package/lib/layout/er/index.js +80 -0
  227. package/lib/layout/er/index.js.map +1 -0
  228. package/lib/layout/er/mysqlWorkbench.d.ts +6 -0
  229. package/lib/layout/er/mysqlWorkbench.js +326 -0
  230. package/lib/layout/er/mysqlWorkbench.js.map +1 -0
  231. package/lib/layout/er/type.d.ts +35 -0
  232. package/lib/layout/er/type.js +3 -0
  233. package/lib/layout/er/type.js.map +1 -0
  234. package/lib/layout/force/force-in-a-box.js +1 -0
  235. package/lib/layout/force/force-in-a-box.js.map +1 -1
  236. package/lib/layout/fruchterman.js +12 -36
  237. package/lib/layout/fruchterman.js.map +1 -1
  238. package/lib/layout/index.d.ts +2 -1
  239. package/lib/layout/index.js +3 -1
  240. package/lib/layout/index.js.map +1 -1
  241. package/lib/layout/layout.js +32 -10
  242. package/lib/layout/layout.js.map +1 -1
  243. package/lib/layout/types.d.ts +9 -3
  244. package/lib/registy/index.d.ts +1 -1
  245. package/lib/registy/index.js +1 -0
  246. package/lib/registy/index.js.map +1 -1
  247. package/package.json +4 -4
@@ -0,0 +1,260 @@
1
+ import { isNumber } from '../../../util';
2
+ import graphlib from './graphlib';
3
+ const Graph = graphlib.Graph;
4
+ /*
5
+ * Adds a dummy node to the graph and return v.
6
+ */
7
+ const addDummyNode = (g, type, attrs, name) => {
8
+ let v;
9
+ do {
10
+ v = `${name}${Math.random()}`;
11
+ } while (g.hasNode(v));
12
+ attrs.dummy = type;
13
+ g.setNode(v, attrs);
14
+ return v;
15
+ };
16
+ /*
17
+ * Returns a new graph with only simple edges. Handles aggregation of data
18
+ * associated with multi-edges.
19
+ */
20
+ const simplify = (g) => {
21
+ const simplified = new Graph().setGraph(g.graph());
22
+ g.nodes().forEach((v) => { simplified.setNode(v, g.node(v)); });
23
+ g.edges().forEach((e) => {
24
+ const simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };
25
+ const label = g.edge(e);
26
+ simplified.setEdge(e.v, e.w, {
27
+ weight: simpleLabel.weight + label.weight,
28
+ minlen: Math.max(simpleLabel.minlen, label.minlen)
29
+ });
30
+ });
31
+ return simplified;
32
+ };
33
+ const asNonCompoundGraph = (g) => {
34
+ const simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());
35
+ g.nodes().forEach((v) => {
36
+ var _a;
37
+ if (!((_a = g.children(v)) === null || _a === void 0 ? void 0 : _a.length)) {
38
+ simplified.setNode(v, g.node(v));
39
+ }
40
+ });
41
+ g.edges().forEach((e) => simplified.setEdge(e, g.edge(e)));
42
+ return simplified;
43
+ };
44
+ const zipObject = (keys, values) => {
45
+ const result = {};
46
+ keys.forEach((key, i) => {
47
+ result[key] = values[i];
48
+ });
49
+ return result;
50
+ };
51
+ const successorWeights = (g) => {
52
+ const weightMap = g.nodes().map((v) => {
53
+ var _a;
54
+ const sucs = {};
55
+ (_a = g.outEdges(v)) === null || _a === void 0 ? void 0 : _a.forEach((e) => {
56
+ sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;
57
+ });
58
+ return sucs;
59
+ });
60
+ return zipObject(g.nodes(), weightMap);
61
+ };
62
+ const predecessorWeights = (g) => {
63
+ const weightMap = g.nodes().map((v) => {
64
+ var _a;
65
+ const preds = {};
66
+ (_a = g.inEdges(v)) === null || _a === void 0 ? void 0 : _a.forEach((e) => {
67
+ preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;
68
+ });
69
+ return preds;
70
+ });
71
+ return zipObject(g.nodes(), weightMap);
72
+ };
73
+ /*
74
+ * Finds where a line starting at point ({x, y}) would intersect a rectangle
75
+ * ({x, y, width, height}) if it were pointing at the rectangle's center.
76
+ */
77
+ const intersectRect = (rect, point) => {
78
+ const x = rect.x;
79
+ const y = rect.y;
80
+ // Rectangle intersection algorithm from:
81
+ // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
82
+ const dx = point.x - x;
83
+ const dy = point.y - y;
84
+ let w = rect.width / 2;
85
+ let h = rect.height / 2;
86
+ if (!dx && !dy) {
87
+ // throw new Error("Not possible to find intersection inside of the rectangle");
88
+ // completely overlapped
89
+ return { x: 0, y: 0 };
90
+ }
91
+ let sx;
92
+ let sy;
93
+ if (Math.abs(dy) * w > Math.abs(dx) * h) {
94
+ // Intersection is top or bottom of rect.
95
+ if (dy < 0) {
96
+ h = -h;
97
+ }
98
+ sx = h * dx / dy;
99
+ sy = h;
100
+ }
101
+ else {
102
+ // Intersection is left or right of rect.
103
+ if (dx < 0) {
104
+ w = -w;
105
+ }
106
+ sx = w;
107
+ sy = w * dy / dx;
108
+ }
109
+ return { x: x + sx, y: y + sy };
110
+ };
111
+ /*
112
+ * Given a DAG with each node assigned "rank" and "order" properties, this
113
+ * const will produce a matrix with the ids of each node.
114
+ */
115
+ const buildLayerMatrix = (g) => {
116
+ const layering = [];
117
+ const rankMax = maxRank(g) + 1;
118
+ for (let i = 0; i < rankMax; i++) {
119
+ layering.push([]);
120
+ }
121
+ // const layering = _.map(_.range(maxRank(g) + 1), function() { return []; });
122
+ g.nodes().forEach((v) => {
123
+ const node = g.node(v);
124
+ const rank = node.rank;
125
+ if (rank !== undefined) {
126
+ layering[rank][node.order || 0] = v;
127
+ }
128
+ });
129
+ return layering;
130
+ };
131
+ /*
132
+ * Adjusts the ranks for all nodes in the graph such that all nodes v have
133
+ * rank(v) >= 0 and at least one node w has rank(w) = 0.
134
+ */
135
+ const normalizeRanks = (g) => {
136
+ const nodeRanks = g.nodes().map((v) => g.node(v).rank);
137
+ const min = Math.min(...nodeRanks);
138
+ g.nodes().forEach((v) => {
139
+ const node = g.node(v);
140
+ if (node.hasOwnProperty("rank")) {
141
+ if (!node.rank)
142
+ node.rank = 0;
143
+ node.rank -= min;
144
+ }
145
+ });
146
+ };
147
+ const removeEmptyRanks = (g) => {
148
+ // Ranks may not start at 0, so we need to offset them
149
+ const nodeRanks = g.nodes().map((v) => g.node(v).rank);
150
+ const offset = Math.min(...nodeRanks);
151
+ const layers = [];
152
+ g.nodes().forEach((v) => {
153
+ var _a;
154
+ const rank = (((_a = g.node(v)) === null || _a === void 0 ? void 0 : _a.rank) || 0) - offset;
155
+ if (!layers[rank]) {
156
+ layers[rank] = [];
157
+ }
158
+ layers[rank].push(v);
159
+ });
160
+ let delta = 0;
161
+ const nodeRankFactor = g.graph().nodeRankFactor || 0;
162
+ layers.forEach((vs, i) => {
163
+ if (vs === undefined && i % nodeRankFactor !== 0) {
164
+ --delta;
165
+ }
166
+ else if (delta) {
167
+ vs.forEach((v) => {
168
+ if (!g.node(v).rank)
169
+ g.node(v).rank = 0;
170
+ g.node(v).rank += delta;
171
+ });
172
+ }
173
+ });
174
+ };
175
+ const addBorderNode = (g, prefix, rank, order) => {
176
+ const node = {
177
+ width: 0,
178
+ height: 0
179
+ };
180
+ if (isNumber(rank) && isNumber(order)) {
181
+ node.rank = rank;
182
+ node.order = order;
183
+ }
184
+ return addDummyNode(g, "border", node, prefix);
185
+ };
186
+ const maxRank = (g) => {
187
+ const nodeRanks = g.nodes().map((v) => {
188
+ const rank = g.node(v).rank;
189
+ if (rank !== undefined) {
190
+ return rank;
191
+ }
192
+ return -Infinity;
193
+ });
194
+ return Math.max(...nodeRanks);
195
+ };
196
+ /*
197
+ * Partition a collection into two groups: `lhs` and `rhs`. If the supplied
198
+ * const returns true for an entry it goes into `lhs`. Otherwise it goes
199
+ * into `rhs.
200
+ */
201
+ const partition = (collection, fn) => {
202
+ const result = { lhs: [], rhs: [] };
203
+ collection.forEach((value) => {
204
+ if (fn(value)) {
205
+ result.lhs.push(value);
206
+ }
207
+ else {
208
+ result.rhs.push(value);
209
+ }
210
+ });
211
+ return result;
212
+ };
213
+ /*
214
+ * Returns a new const that wraps `fn` with a timer. The wrapper logs the
215
+ * time it takes to execute the function.
216
+ */
217
+ const time = (name, fn) => {
218
+ const start = Date.now();
219
+ try {
220
+ return fn();
221
+ }
222
+ finally {
223
+ console.log(`${name} time: ${(Date.now() - start)}ms`);
224
+ }
225
+ };
226
+ const notime = (name, fn) => {
227
+ return fn();
228
+ };
229
+ const minBy = (array, func) => {
230
+ let min = Infinity;
231
+ let minObject;
232
+ array.forEach((item) => {
233
+ const value = func(item);
234
+ if (min > value) {
235
+ min = value;
236
+ minObject = item;
237
+ }
238
+ });
239
+ return minObject;
240
+ };
241
+ export { addDummyNode, simplify, asNonCompoundGraph, successorWeights, predecessorWeights, intersectRect, buildLayerMatrix, normalizeRanks, removeEmptyRanks, addBorderNode, maxRank, partition, time, notime, zipObject, minBy };
242
+ export default {
243
+ addDummyNode,
244
+ simplify,
245
+ asNonCompoundGraph,
246
+ successorWeights,
247
+ predecessorWeights,
248
+ intersectRect,
249
+ buildLayerMatrix,
250
+ normalizeRanks,
251
+ removeEmptyRanks,
252
+ addBorderNode,
253
+ maxRank,
254
+ partition,
255
+ time,
256
+ notime,
257
+ zipObject,
258
+ minBy
259
+ };
260
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/util.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * @fileOverview random layout
3
3
  * @author shiwu.wyy@antfin.com
4
4
  */
5
- import { Edge, OutNode, DagreLayoutOptions } from "./types";
5
+ import { Edge, OutNode, DagreLayoutOptions, PointTuple } from "./types";
6
6
  import { Base } from "./base";
7
7
  /**
8
8
  * 层次布局
@@ -12,6 +12,8 @@ export declare class DagreLayout extends Base {
12
12
  rankdir: "TB" | "BT" | "LR" | "RL";
13
13
  /** 节点对齐方式,可选 UL, UR, DL, DR */
14
14
  align: undefined | "UL" | "UR" | "DL" | "DR";
15
+ /** 布局的起始(左上角)位置 */
16
+ begin: PointTuple;
15
17
  /** 节点大小 */
16
18
  nodeSize: number | number[] | undefined;
17
19
  /** 节点水平间距(px) */
@@ -28,8 +30,6 @@ export declare class DagreLayout extends Base {
28
30
  sortByCombo: boolean;
29
31
  /** 是否保留每条边上的dummy node */
30
32
  edgeLabelSpace: boolean;
31
- /** 是否按照给定的节点顺序排序 */
32
- keepNodeOrder: boolean;
33
33
  /** 给定的节点顺序,配合keepNodeOrder使用 */
34
34
  nodeOrder: string[];
35
35
  /** 上次的布局结果 */
@@ -2,7 +2,7 @@
2
2
  * @fileOverview random layout
3
3
  * @author shiwu.wyy@antfin.com
4
4
  */
5
- import dagre from "dagrejs";
5
+ import dagre from "./dagre/index";
6
6
  import { isArray, isNumber, isObject, getEdgeTerminal } from "../util";
7
7
  import { Base } from "./base";
8
8
  /**
@@ -23,8 +23,6 @@ export class DagreLayout extends Base {
23
23
  this.sortByCombo = false;
24
24
  /** 是否保留每条边上的dummy node */
25
25
  this.edgeLabelSpace = true;
26
- /** 是否按照给定的节点顺序排序 */
27
- this.keepNodeOrder = false;
28
26
  this.nodes = [];
29
27
  this.edges = [];
30
28
  /** 迭代结束的回调函数 */
@@ -32,7 +30,7 @@ export class DagreLayout extends Base {
32
30
  this.layoutNode = (nodeId) => {
33
31
  const self = this;
34
32
  const { nodes } = self;
35
- const node = nodes.find(node => node.id === nodeId);
33
+ const node = nodes.find((node) => node.id === nodeId);
36
34
  if (node) {
37
35
  const layout = node.layout !== false;
38
36
  return layout;
@@ -58,7 +56,7 @@ export class DagreLayout extends Base {
58
56
  */
59
57
  execute() {
60
58
  const self = this;
61
- const { nodes, nodeSize, rankdir, combos } = self;
59
+ const { nodes, nodeSize, rankdir, combos, begin } = self;
62
60
  if (!nodes)
63
61
  return;
64
62
  const edges = self.edges || [];
@@ -153,22 +151,44 @@ export class DagreLayout extends Base {
153
151
  dagre.layout(g, {
154
152
  prevGraph,
155
153
  edgeLabelSpace: self.edgeLabelSpace,
156
- keepNodeOrder: self.keepNodeOrder,
154
+ keepNodeOrder: Boolean(!!self.nodeOrder),
157
155
  nodeOrder: self.nodeOrder,
158
156
  });
159
- let coord;
157
+ const dBegin = [0, 0];
158
+ if (begin) {
159
+ let minX = Infinity;
160
+ let minY = Infinity;
161
+ g.nodes().forEach((node) => {
162
+ const coord = g.node(node);
163
+ if (minX > coord.x)
164
+ minX = coord.x;
165
+ if (minY > coord.y)
166
+ minY = coord.y;
167
+ });
168
+ g.edges().forEach((edge) => {
169
+ const coord = g.edge(edge);
170
+ coord.points.forEach((point) => {
171
+ if (minX > point.x)
172
+ minX = point.x;
173
+ if (minY > point.y)
174
+ minY = point.y;
175
+ });
176
+ });
177
+ dBegin[0] = begin[0] - minX;
178
+ dBegin[1] = begin[1] - minY;
179
+ }
160
180
  g.nodes().forEach((node) => {
161
- coord = g.node(node);
181
+ const coord = g.node(node);
162
182
  const i = nodes.findIndex((it) => it.id === node);
163
183
  if (!nodes[i])
164
184
  return;
165
- nodes[i].x = coord.x;
166
- nodes[i].y = coord.y;
185
+ nodes[i].x = coord.x + dBegin[0];
186
+ nodes[i].y = coord.y + dBegin[1];
167
187
  // @ts-ignore: pass layer order to data for increment layout use
168
188
  nodes[i]._order = coord._order;
169
189
  });
170
190
  g.edges().forEach((edge) => {
171
- coord = g.edge(edge);
191
+ const coord = g.edge(edge);
172
192
  const i = edges.findIndex((it) => {
173
193
  const source = getEdgeTerminal(it, 'source');
174
194
  const target = getEdgeTerminal(it, 'target');
@@ -176,6 +196,10 @@ export class DagreLayout extends Base {
176
196
  });
177
197
  if ((self.edgeLabelSpace) && self.controlPoints && edges[i].type !== "loop") {
178
198
  edges[i].controlPoints = coord.points.slice(1, coord.points.length - 1);
199
+ edges[i].controlPoints.forEach((point) => {
200
+ point.x += dBegin[0];
201
+ point.y += dBegin[1];
202
+ });
179
203
  }
180
204
  });
181
205
  if (self.onLayoutEnd)
@@ -1 +1 @@
1
- {"version":3,"file":"dagre.js","sourceRoot":"","sources":["../../src/layout/dagre.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dagre.js","sourceRoot":"","sources":["../../src/layout/dagre.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export default function layout(data: any, options: any): Promise<void>;
@@ -0,0 +1,107 @@
1
+ import * as d3Force from 'd3-force';
2
+ import forceGrid from './forceGrid';
3
+ import mysqlWorkbench from './mysqlWorkbench';
4
+ import { DagreLayout } from '../dagre';
5
+ export default function layout(data, options) {
6
+ const { nodes, edges } = data;
7
+ const width = options.width;
8
+ const height = options.height;
9
+ if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length))
10
+ return Promise.resolve();
11
+ // 筛选非叶子节点,做Dagre布局
12
+ const noLeafNodes = [];
13
+ nodes.forEach((node) => {
14
+ const relateEdges = edges.filter((edge) => {
15
+ return edge.source === node.id || edge.target === node.id;
16
+ });
17
+ if (relateEdges.length > 1) {
18
+ const temp = Object.assign({}, node);
19
+ delete temp.size;
20
+ noLeafNodes.push(temp);
21
+ }
22
+ });
23
+ const noLeafEdge = [];
24
+ edges.forEach((edge) => {
25
+ const sourceNode = noLeafNodes.find((node) => node.id === edge.source);
26
+ const targetNode = noLeafNodes.find((node) => node.id === edge.target);
27
+ if (sourceNode && targetNode) {
28
+ noLeafEdge.push(edge);
29
+ }
30
+ });
31
+ const graphLayout = new DagreLayout({
32
+ type: 'dagre',
33
+ ranksep: options.nodeMinGap,
34
+ nodesep: options.nodeMinGap,
35
+ });
36
+ const { nodes: nodesTmp } = graphLayout.layout({
37
+ nodes: noLeafNodes,
38
+ edges: noLeafEdge,
39
+ });
40
+ // 布局后,坐标同步
41
+ nodes.forEach((n) => {
42
+ const found = (nodesTmp || []).find((temp) => temp.id === n.id);
43
+ n.x = (found === null || found === void 0 ? void 0 : found.x) || width / 2;
44
+ n.y = (found === null || found === void 0 ? void 0 : found.y) || height / 2;
45
+ });
46
+ const copyNodes = JSON.parse(JSON.stringify(nodes));
47
+ const copyEdges = JSON.parse(JSON.stringify(edges));
48
+ const simulation = d3Force.forceSimulation().nodes(copyNodes)
49
+ .force("link", d3Force.forceLink(copyEdges).id((d) => d.id).distance((d) => {
50
+ const edgeInfo = noLeafEdge.find((edge) => edge.source === d.source && edge.target === d.target);
51
+ if (edgeInfo) {
52
+ return 30;
53
+ }
54
+ return 20;
55
+ }))
56
+ .force("charge", d3Force.forceManyBody())
57
+ .force("center", d3Force.forceCenter(width / 2, height / 2))
58
+ .force("x", d3Force.forceX(width / 2))
59
+ .force("y", d3Force.forceY(height / 2))
60
+ .alpha(0.3)
61
+ .alphaDecay(0.08)
62
+ .alphaMin(0.001);
63
+ const layoutPromise = new Promise((resolve) => {
64
+ simulation.on('end', () => {
65
+ // 坐标信息同步到nodes,edges中
66
+ nodes.forEach((node) => {
67
+ const nodeInfo = copyNodes.find((item) => item.id === node.id);
68
+ if (nodeInfo) {
69
+ node.x = nodeInfo.x;
70
+ node.y = nodeInfo.y;
71
+ }
72
+ });
73
+ const minX = Math.min(...nodes.map((node) => node.x));
74
+ const maxX = Math.max(...nodes.map((node) => node.x));
75
+ const minY = Math.min(...nodes.map((node) => node.y));
76
+ const maxY = Math.max(...nodes.map((node) => node.y));
77
+ const scalex = width / (maxX - minX);
78
+ const scaley = height / (maxY - minY);
79
+ nodes.forEach((node) => {
80
+ if (node.x !== undefined && scalex < 1) {
81
+ node.x = (node.x - minX) * scalex;
82
+ }
83
+ if (node.y !== undefined && scaley < 1) {
84
+ node.y = (node.y - minY) * scaley;
85
+ }
86
+ });
87
+ // 这一步就执行缩小空间。且不考虑节点size
88
+ nodes.forEach((node) => {
89
+ node.sizeTemp = node.size;
90
+ node.size = [10, 10];
91
+ });
92
+ mysqlWorkbench(nodes, edges);
93
+ nodes.forEach((node) => {
94
+ node.size = node.sizeTemp || [];
95
+ delete node.sizeTemp;
96
+ });
97
+ // 进行网格对齐+节点大小扩增
98
+ forceGrid({
99
+ nodes,
100
+ edges,
101
+ }, options);
102
+ resolve();
103
+ });
104
+ });
105
+ return layoutPromise;
106
+ }
107
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/layout/er/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { INode, IEdgeInfo } from './type';
2
+ export default function layout(data: {
3
+ nodes: INode[];
4
+ edges: IEdgeInfo[];
5
+ }, options: any): {
6
+ nodes: INode[];
7
+ edges: IEdgeInfo[];
8
+ } | undefined;
@@ -0,0 +1,88 @@
1
+ import Grid from './grid';
2
+ export default function layout(data, options) {
3
+ if (!data.nodes || data.nodes.length === 0)
4
+ return data;
5
+ const width = options.width;
6
+ const height = options.height;
7
+ const nodeMinGap = options.nodeMinGap;
8
+ // 2. 网格布局
9
+ let CELL_W = 10000;
10
+ let CELL_H = 10000;
11
+ data.nodes.forEach((node) => {
12
+ const nodeWidth = node.size[0] || 50;
13
+ const nodeHeight = node.size[1] || 50;
14
+ CELL_W = Math.min(nodeWidth, CELL_W);
15
+ CELL_H = Math.min(nodeHeight, CELL_H);
16
+ });
17
+ const grid = new Grid();
18
+ grid.init(width, height, {
19
+ CELL_H,
20
+ CELL_W,
21
+ });
22
+ data.nodes.forEach((d) => {
23
+ const gridpoint = grid.occupyNearest(d);
24
+ if (gridpoint) {
25
+ gridpoint.node = {
26
+ id: d.id,
27
+ size: d.size,
28
+ };
29
+ d.x = gridpoint.x;
30
+ d.y = gridpoint.y;
31
+ d.dx = gridpoint.dx;
32
+ d.dy = gridpoint.dy;
33
+ }
34
+ });
35
+ // 加入节点size
36
+ for (let i = 0; i < data.nodes.length; i++) {
37
+ // 节点宽度大于网格宽度,则往当前网格的右边插入列
38
+ const node = data.nodes[i];
39
+ const result = grid.findGridByNodeId(node.id);
40
+ if (!result)
41
+ throw new Error("can not find node cell");
42
+ const { column, row } = result;
43
+ if ((node.size[0] + nodeMinGap) > CELL_W) {
44
+ const addGridSize = Math.ceil((node.size[0] + nodeMinGap) / CELL_W) - 1;
45
+ let realAdd = addGridSize;
46
+ // 优化,假设同一列,不同行存在两个size为2的节点,遍历到第一个节点的时候,会往右插入两列,遍历到第二个节点,又往右插入。就会导致多余的网格
47
+ for (let j = 0; j < addGridSize; j++) {
48
+ const hasColumn = grid.additionColumn.indexOf(column + j + 1) > -1;
49
+ if (hasColumn && !grid.cells[column + j + 1][row].node) {
50
+ realAdd--;
51
+ }
52
+ else {
53
+ break;
54
+ }
55
+ }
56
+ grid.insertColumn(column, realAdd);
57
+ }
58
+ // 节点高度大于网格宽度,则往当前网格的下边插入行
59
+ if ((node.size[1] + nodeMinGap) > CELL_H) {
60
+ const addGridSize = Math.ceil((node.size[1] + nodeMinGap) / CELL_H) - 1;
61
+ let realAdd = addGridSize;
62
+ for (let j = 0; j < addGridSize; j++) {
63
+ const hasColumn = grid.additionRow.indexOf(row + j + 1) > -1;
64
+ if (hasColumn && !grid.cells[column][row + j + 1].node) {
65
+ realAdd--;
66
+ }
67
+ else {
68
+ break;
69
+ }
70
+ }
71
+ grid.insertRow(row, realAdd);
72
+ }
73
+ }
74
+ // 同步节点坐标
75
+ for (let i = 0; i < grid.columnNum; i++) {
76
+ for (let j = 0; j < grid.rowNum; j++) {
77
+ const cell = grid.cells[i][j];
78
+ if (cell.node) {
79
+ const node = data.nodes.find((node) => { var _a; return node.id === ((_a = cell === null || cell === void 0 ? void 0 : cell.node) === null || _a === void 0 ? void 0 : _a.id); });
80
+ if (node) {
81
+ node.x = cell.x + node.size[0] / 2;
82
+ node.y = cell.y + node.size[1] / 2;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=forceGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forceGrid.js","sourceRoot":"","sources":["../../../src/layout/er/forceGrid.ts"],"names":[],"mappings":"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"}