@antv/layout 1.1.0 → 1.2.1

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 (144) hide show
  1. package/README.md +4 -2
  2. package/dist/11.index.min.js +2 -0
  3. package/dist/11.index.min.js.map +1 -0
  4. package/dist/435.index.min.js +3 -0
  5. package/dist/435.index.min.js.LICENSE.txt +5 -0
  6. package/dist/435.index.min.js.map +1 -0
  7. package/dist/index.min.js +2 -1
  8. package/dist/index.min.js.LICENSE.txt +5 -0
  9. package/dist/index.min.js.map +1 -1
  10. package/lib/circular.js +258 -0
  11. package/lib/circular.js.map +1 -0
  12. package/lib/concentric.js +221 -0
  13. package/lib/concentric.js.map +1 -0
  14. package/lib/d3Force/forceInBox.d.ts +5 -5
  15. package/lib/d3Force/forceInBox.js +331 -0
  16. package/lib/d3Force/forceInBox.js.map +1 -0
  17. package/lib/d3Force/index.js +339 -0
  18. package/lib/d3Force/index.js.map +1 -0
  19. package/lib/dagre/acyclic.js +62 -0
  20. package/lib/dagre/acyclic.js.map +1 -0
  21. package/lib/dagre/add-border-segments.js +37 -0
  22. package/lib/dagre/add-border-segments.js.map +1 -0
  23. package/lib/dagre/coordinate-system.js +65 -0
  24. package/lib/dagre/coordinate-system.js.map +1 -0
  25. package/lib/dagre/data/list.js +50 -0
  26. package/lib/dagre/data/list.js.map +1 -0
  27. package/lib/dagre/greedy-fas.js +147 -0
  28. package/lib/dagre/greedy-fas.js.map +1 -0
  29. package/lib/dagre/layout.js +468 -0
  30. package/lib/dagre/layout.js.map +1 -0
  31. package/lib/dagre/nesting-graph.js +153 -0
  32. package/lib/dagre/nesting-graph.js.map +1 -0
  33. package/lib/dagre/normalize.js +98 -0
  34. package/lib/dagre/normalize.js.map +1 -0
  35. package/lib/dagre/order/add-subgraph-constraints.js +41 -0
  36. package/lib/dagre/order/add-subgraph-constraints.js.map +1 -0
  37. package/lib/dagre/order/barycenter.js +23 -0
  38. package/lib/dagre/order/barycenter.js.map +1 -0
  39. package/lib/dagre/order/build-layer-graph.js +96 -0
  40. package/lib/dagre/order/build-layer-graph.js.map +1 -0
  41. package/lib/dagre/order/cross-count.js +63 -0
  42. package/lib/dagre/order/cross-count.js.map +1 -0
  43. package/lib/dagre/order/index.js +91 -0
  44. package/lib/dagre/order/index.js.map +1 -0
  45. package/lib/dagre/order/init-data-order.js +28 -0
  46. package/lib/dagre/order/init-data-order.js.map +1 -0
  47. package/lib/dagre/order/init-order.js +50 -0
  48. package/lib/dagre/order/init-order.js.map +1 -0
  49. package/lib/dagre/order/resolve-conflicts.js +121 -0
  50. package/lib/dagre/order/resolve-conflicts.js.map +1 -0
  51. package/lib/dagre/order/sort-subgraph.js +84 -0
  52. package/lib/dagre/order/sort-subgraph.js.map +1 -0
  53. package/lib/dagre/order/sort.js +74 -0
  54. package/lib/dagre/order/sort.js.map +1 -0
  55. package/lib/dagre/parent-dummy-chains.js +80 -0
  56. package/lib/dagre/parent-dummy-chains.js.map +1 -0
  57. package/lib/dagre/position/bk.js +398 -0
  58. package/lib/dagre/position/bk.js.map +1 -0
  59. package/lib/dagre/position/index.js +54 -0
  60. package/lib/dagre/position/index.js.map +1 -0
  61. package/lib/dagre/rank/feasible-tree.d.ts +2 -2
  62. package/lib/dagre/rank/feasible-tree.js +164 -0
  63. package/lib/dagre/rank/feasible-tree.js.map +1 -0
  64. package/lib/dagre/rank/index.js +48 -0
  65. package/lib/dagre/rank/index.js.map +1 -0
  66. package/lib/dagre/rank/network-simplex.js +232 -0
  67. package/lib/dagre/rank/network-simplex.js.map +1 -0
  68. package/lib/dagre/rank/util.js +138 -0
  69. package/lib/dagre/rank/util.js.map +1 -0
  70. package/lib/dagre/util.js +289 -0
  71. package/lib/dagre/util.js.map +1 -0
  72. package/lib/dagre.d.ts +1 -2
  73. package/lib/dagre.js +543 -0
  74. package/lib/dagre.js.map +1 -0
  75. package/lib/force/forceNBody.d.ts +1 -1
  76. package/lib/force/forceNBody.js +103 -0
  77. package/lib/force/forceNBody.js.map +1 -0
  78. package/lib/force/index.d.ts +1 -1
  79. package/lib/force/index.js +797 -0
  80. package/lib/force/index.js.map +1 -0
  81. package/lib/force/types.d.ts +1 -0
  82. package/lib/force/types.js +2 -0
  83. package/lib/force/types.js.map +1 -0
  84. package/lib/forceAtlas2/body.js +91 -0
  85. package/lib/forceAtlas2/body.js.map +1 -0
  86. package/lib/forceAtlas2/index.js +562 -0
  87. package/lib/forceAtlas2/index.js.map +1 -0
  88. package/lib/forceAtlas2/quad.js +98 -0
  89. package/lib/forceAtlas2/quad.js.map +1 -0
  90. package/lib/forceAtlas2/quadTree.js +105 -0
  91. package/lib/forceAtlas2/quadTree.js.map +1 -0
  92. package/lib/fruchterman.js +376 -0
  93. package/lib/fruchterman.js.map +1 -0
  94. package/lib/grid.js +308 -0
  95. package/lib/grid.js.map +1 -0
  96. package/lib/index.js +16 -0
  97. package/lib/index.js.map +1 -0
  98. package/lib/mds.js +137 -0
  99. package/lib/mds.js.map +1 -0
  100. package/lib/radial/index.js +355 -0
  101. package/lib/radial/index.js.map +1 -0
  102. package/lib/radial/mds.js +29 -0
  103. package/lib/radial/mds.js.map +1 -0
  104. package/lib/radial/radial-nonoverlap-force.js +100 -0
  105. package/lib/radial/radial-nonoverlap-force.js.map +1 -0
  106. package/lib/random.js +98 -0
  107. package/lib/random.js.map +1 -0
  108. package/lib/registry.d.ts +0 -1
  109. package/lib/registry.js +25 -0
  110. package/lib/registry.js.map +1 -0
  111. package/lib/supervisor.js +95 -0
  112. package/lib/supervisor.js.map +1 -0
  113. package/lib/types.d.ts +6 -1
  114. package/lib/types.js +4 -0
  115. package/lib/types.js.map +1 -0
  116. package/lib/util/array.js +2 -0
  117. package/lib/util/array.js.map +1 -0
  118. package/lib/util/common.d.ts +12 -0
  119. package/lib/util/common.js +32 -0
  120. package/lib/util/common.js.map +1 -0
  121. package/lib/util/function.js +124 -0
  122. package/lib/util/function.js.map +1 -0
  123. package/lib/util/gpu.js +214 -0
  124. package/lib/util/gpu.js.map +1 -0
  125. package/lib/util/index.js +7 -0
  126. package/lib/util/index.js.map +1 -0
  127. package/lib/util/math.js +228 -0
  128. package/lib/util/math.js.map +1 -0
  129. package/lib/util/number.js +5 -0
  130. package/lib/util/number.js.map +1 -0
  131. package/lib/util/object.js +42 -0
  132. package/lib/util/object.js.map +1 -0
  133. package/lib/util/string.js +15 -0
  134. package/lib/util/string.js.map +1 -0
  135. package/lib/worker.d.ts +1 -3
  136. package/lib/worker.js +45 -0
  137. package/lib/worker.js.map +1 -0
  138. package/package.json +7 -8
  139. package/dist/1cc71e9bd9f41f57364d.worker.js +0 -2
  140. package/dist/1cc71e9bd9f41f57364d.worker.js.map +0 -1
  141. package/esm/1cc71e9bd9f41f57364d.worker.js +0 -2
  142. package/esm/1cc71e9bd9f41f57364d.worker.js.map +0 -1
  143. package/esm/index.esm.js +0 -2
  144. package/esm/index.esm.js.map +0 -1
@@ -0,0 +1,331 @@
1
+ import { __read } from "tslib";
2
+ import * as d3Force from "d3-force";
3
+ // https://github.com/john-guerra/forceInABox/blob/master/src/forceInABox.js
4
+ export default function forceInBox() {
5
+ function constant(_) {
6
+ return function () { return _; };
7
+ }
8
+ var groupBy = function (d) {
9
+ return d.cluster;
10
+ };
11
+ var forceNodeSize = constant(1);
12
+ var forceCharge = constant(-1);
13
+ var forceLinkDistance = constant(100);
14
+ var forceLinkStrength = constant(0.1);
15
+ var offset = [0, 0];
16
+ var nodes = [];
17
+ var nodesMap = {};
18
+ var links = [];
19
+ var centerX = 100;
20
+ var centerY = 100;
21
+ var foci = {
22
+ none: {
23
+ x: 0,
24
+ y: 0,
25
+ },
26
+ };
27
+ var templateNodes = [];
28
+ var templateForce;
29
+ var template = "force";
30
+ var enableGrouping = true;
31
+ var strength = 0.1;
32
+ function force(alpha) {
33
+ if (!enableGrouping) {
34
+ return force;
35
+ }
36
+ templateForce.tick();
37
+ getFocisFromTemplate();
38
+ for (var i = 0, n = nodes.length, node = void 0, k = alpha * strength; i < n; ++i) {
39
+ node = nodes[i];
40
+ node.vx += (foci[groupBy(node)].x - node.x) * k;
41
+ node.vy += (foci[groupBy(node)].y - node.y) * k;
42
+ }
43
+ }
44
+ function initialize() {
45
+ if (!nodes)
46
+ return;
47
+ initializeWithForce();
48
+ }
49
+ function initializeWithForce() {
50
+ if (!nodes || !nodes.length) {
51
+ return;
52
+ }
53
+ if (groupBy(nodes[0]) === undefined) {
54
+ throw Error("Couldnt find the grouping attribute for the nodes. Make sure to set it up with forceInBox.groupBy('clusterAttr') before calling .links()");
55
+ }
56
+ // checkLinksAsObjects();
57
+ var net = getGroupsGraph();
58
+ templateForce = d3Force
59
+ .forceSimulation(net.nodes)
60
+ .force("x", d3Force.forceX(centerX).strength(0.1))
61
+ .force("y", d3Force.forceY(centerY).strength(0.1))
62
+ .force("collide", d3Force.forceCollide(function (d) { return d.r; }).iterations(4))
63
+ .force("charge", d3Force.forceManyBody().strength(forceCharge))
64
+ .force("links", d3Force
65
+ .forceLink(net.nodes.length ? net.links : [])
66
+ .distance(forceLinkDistance)
67
+ .strength(forceLinkStrength));
68
+ templateNodes = templateForce.nodes();
69
+ getFocisFromTemplate();
70
+ }
71
+ function getGroupsGraph() {
72
+ var gnodes = [];
73
+ var glinks = [];
74
+ var dNodes = {};
75
+ var clustersList = [];
76
+ var clustersCounts = {};
77
+ var clustersLinks = [];
78
+ clustersCounts = computeClustersNodeCounts(nodes);
79
+ clustersLinks = computeClustersLinkCounts(links);
80
+ clustersList = Object.keys(clustersCounts);
81
+ clustersList.forEach(function (key, index) {
82
+ var val = clustersCounts[key];
83
+ // Uses approx meta-node size
84
+ gnodes.push({
85
+ id: key,
86
+ size: val.count,
87
+ r: Math.sqrt(val.sumforceNodeSize / Math.PI),
88
+ });
89
+ dNodes[key] = index;
90
+ });
91
+ clustersLinks.forEach(function (link) {
92
+ var sourceTerminal = link.source;
93
+ var targetTerminal = link.target;
94
+ var source = dNodes[sourceTerminal];
95
+ var target = dNodes[targetTerminal];
96
+ if (source !== undefined && target !== undefined) {
97
+ glinks.push({
98
+ source: source,
99
+ target: target,
100
+ count: link.count,
101
+ });
102
+ }
103
+ });
104
+ return {
105
+ nodes: gnodes,
106
+ links: glinks,
107
+ };
108
+ }
109
+ function computeClustersNodeCounts(nodes) {
110
+ var clustersCounts = {};
111
+ nodes.forEach(function (d) {
112
+ var key = groupBy(d);
113
+ if (!clustersCounts[key]) {
114
+ clustersCounts[key] = {
115
+ count: 0,
116
+ sumforceNodeSize: 0,
117
+ };
118
+ }
119
+ });
120
+ nodes.forEach(function (d) {
121
+ var key = groupBy(d);
122
+ var nodeSize = forceNodeSize(d);
123
+ var tmpCount = clustersCounts[key];
124
+ tmpCount.count = tmpCount.count + 1;
125
+ tmpCount.sumforceNodeSize =
126
+ tmpCount.sumforceNodeSize + Math.PI * (nodeSize * nodeSize) * 1.3;
127
+ clustersCounts[key] = tmpCount;
128
+ });
129
+ return clustersCounts;
130
+ }
131
+ function computeClustersLinkCounts(links) {
132
+ var dClusterLinks = {};
133
+ var clusterLinks = [];
134
+ links.forEach(function (l) {
135
+ var key = getLinkKey(l);
136
+ var count = 0;
137
+ if (dClusterLinks[key] !== undefined) {
138
+ count = dClusterLinks[key];
139
+ }
140
+ count += 1;
141
+ dClusterLinks[key] = count;
142
+ });
143
+ // @ts-ignore
144
+ var entries = Object.entries(dClusterLinks);
145
+ entries.forEach(function (_a) {
146
+ var _b = __read(_a, 2), key = _b[0], count = _b[1];
147
+ var source = key.split("~")[0];
148
+ var target = key.split("~")[1];
149
+ if (source !== undefined && target !== undefined) {
150
+ clusterLinks.push({
151
+ source: source,
152
+ target: target,
153
+ count: count,
154
+ });
155
+ }
156
+ });
157
+ return clusterLinks;
158
+ }
159
+ function getFocisFromTemplate() {
160
+ foci = {
161
+ none: {
162
+ x: 0,
163
+ y: 0,
164
+ },
165
+ };
166
+ templateNodes.forEach(function (d) {
167
+ foci[d.id] = {
168
+ x: d.x - offset[0],
169
+ y: d.y - offset[1],
170
+ };
171
+ });
172
+ return foci;
173
+ }
174
+ function getLinkKey(link) {
175
+ var source = link.source;
176
+ var target = link.target;
177
+ var sourceID = groupBy(nodesMap[source]);
178
+ var targetID = groupBy(nodesMap[target]);
179
+ return sourceID <= targetID
180
+ ? sourceID + "~" + targetID
181
+ : targetID + "~" + sourceID;
182
+ }
183
+ function genNodesMap(nodes) {
184
+ nodesMap = {};
185
+ nodes.forEach(function (node) {
186
+ nodesMap[node.id] = node;
187
+ });
188
+ }
189
+ function setTemplate(x) {
190
+ if (!arguments.length)
191
+ return template;
192
+ template = x;
193
+ initialize();
194
+ return force;
195
+ }
196
+ function setGroupBy(x) {
197
+ if (!arguments.length)
198
+ return groupBy;
199
+ if (typeof x === "string") {
200
+ groupBy = function (d) {
201
+ return d[x];
202
+ };
203
+ return force;
204
+ }
205
+ groupBy = x;
206
+ return force;
207
+ }
208
+ function setEnableGrouping(x) {
209
+ if (!arguments.length)
210
+ return enableGrouping;
211
+ enableGrouping = x;
212
+ return force;
213
+ }
214
+ function setStrength(x) {
215
+ if (!arguments.length)
216
+ return strength;
217
+ strength = x;
218
+ return force;
219
+ }
220
+ function setCenterX(_) {
221
+ if (arguments.length) {
222
+ centerX = _;
223
+ return force;
224
+ }
225
+ return centerX;
226
+ }
227
+ function setCenterY(_) {
228
+ if (arguments.length) {
229
+ centerY = _;
230
+ return force;
231
+ }
232
+ return centerY;
233
+ }
234
+ function setNodes(_) {
235
+ if (arguments.length) {
236
+ genNodesMap(_ || []);
237
+ nodes = _ || [];
238
+ return force;
239
+ }
240
+ return nodes;
241
+ }
242
+ function setLinks(_) {
243
+ if (arguments.length) {
244
+ links = _ || [];
245
+ initialize();
246
+ return force;
247
+ }
248
+ return links;
249
+ }
250
+ function setForceNodeSize(_) {
251
+ if (arguments.length) {
252
+ if (typeof _ === "function") {
253
+ forceNodeSize = _;
254
+ }
255
+ else {
256
+ forceNodeSize = constant(+_);
257
+ }
258
+ initialize();
259
+ return force;
260
+ }
261
+ return forceNodeSize;
262
+ }
263
+ function setForceCharge(_) {
264
+ if (arguments.length) {
265
+ if (typeof _ === "function") {
266
+ forceCharge = _;
267
+ }
268
+ else {
269
+ forceCharge = constant(+_);
270
+ }
271
+ initialize();
272
+ return force;
273
+ }
274
+ return forceCharge;
275
+ }
276
+ function setForceLinkDistance(_) {
277
+ if (arguments.length) {
278
+ if (typeof _ === "function") {
279
+ forceLinkDistance = _;
280
+ }
281
+ else {
282
+ forceLinkDistance = constant(+_);
283
+ }
284
+ initialize();
285
+ return force;
286
+ }
287
+ return forceLinkDistance;
288
+ }
289
+ function setForceLinkStrength(_) {
290
+ if (arguments.length) {
291
+ if (typeof _ === "function") {
292
+ forceLinkStrength = _;
293
+ }
294
+ else {
295
+ forceLinkStrength = constant(+_);
296
+ }
297
+ initialize();
298
+ return force;
299
+ }
300
+ return forceLinkStrength;
301
+ }
302
+ function setOffset(_) {
303
+ if (arguments.length) {
304
+ offset = _;
305
+ return force;
306
+ }
307
+ return offset;
308
+ }
309
+ force.initialize = function (_) {
310
+ nodes = _;
311
+ initialize();
312
+ };
313
+ force.template = setTemplate;
314
+ force.groupBy = setGroupBy;
315
+ force.enableGrouping = setEnableGrouping;
316
+ force.strength = setStrength;
317
+ force.centerX = setCenterX;
318
+ force.centerY = setCenterY;
319
+ force.nodes = setNodes;
320
+ force.links = setLinks;
321
+ force.forceNodeSize = setForceNodeSize;
322
+ // Legacy support
323
+ force.nodeSize = force.forceNodeSize;
324
+ force.forceCharge = setForceCharge;
325
+ force.forceLinkDistance = setForceLinkDistance;
326
+ force.forceLinkStrength = setForceLinkStrength;
327
+ force.offset = setOffset;
328
+ force.getFocis = getFocisFromTemplate;
329
+ return force;
330
+ }
331
+ //# sourceMappingURL=forceInBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forceInBox.js","sourceRoot":"","sources":["../../src/d3Force/forceInBox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,339 @@
1
+ import { __assign, __awaiter, __generator, __rest } from "tslib";
2
+ import * as d3Force from "d3-force";
3
+ import { isFunction, isNumber, isObject } from "@antv/util";
4
+ import { cloneFormatData, isArray } from "../util";
5
+ import forceInBox from "./forceInBox";
6
+ var DEFAULTS_LAYOUT_OPTIONS = {
7
+ center: [0, 0],
8
+ preventOverlap: false,
9
+ nodeSize: undefined,
10
+ nodeSpacing: undefined,
11
+ linkDistance: 50,
12
+ forceSimulation: null,
13
+ alphaDecay: 0.028,
14
+ alphaMin: 0.001,
15
+ alpha: 0.3,
16
+ collideStrength: 1,
17
+ clustering: false,
18
+ clusterNodeStrength: -1,
19
+ clusterEdgeStrength: 0.1,
20
+ clusterEdgeDistance: 100,
21
+ clusterFociStrength: 0.8,
22
+ clusterNodeSize: 10,
23
+ };
24
+ /**
25
+ * Layout the nodes' positions with d3's basic classic force
26
+ *
27
+ * @example
28
+ * // Assign layout options when initialization.
29
+ * const layout = new D3ForceLayout({ center: [100, 100] });
30
+ * const positions = await layout.execute(graph); // { nodes: [], edges: [] }
31
+ *
32
+ * // Or use different options later.
33
+ * const layout = new D3ForceLayout({ center: [100, 100] });
34
+ * const positions = await layout.execute(graph, { center: [100, 100] }); // { nodes: [], edges: [] }
35
+ *
36
+ * // If you want to assign the positions directly to the nodes, use assign method.
37
+ * await layout.assign(graph, { center: [100, 100] });
38
+ */
39
+ var D3ForceLayout = /** @class */ (function () {
40
+ function D3ForceLayout(options) {
41
+ if (options === void 0) { options = {}; }
42
+ this.options = options;
43
+ this.id = "d3force";
44
+ this.options = __assign(__assign({}, DEFAULTS_LAYOUT_OPTIONS), options);
45
+ }
46
+ /**
47
+ * Return the positions of nodes and edges(if needed).
48
+ */
49
+ D3ForceLayout.prototype.execute = function (graph, options) {
50
+ return __awaiter(this, void 0, void 0, function () {
51
+ return __generator(this, function (_a) {
52
+ return [2 /*return*/, this.genericForceLayout(false, graph, options)];
53
+ });
54
+ });
55
+ };
56
+ /**
57
+ * To directly assign the positions to the nodes.
58
+ */
59
+ D3ForceLayout.prototype.assign = function (graph, options) {
60
+ return __awaiter(this, void 0, void 0, function () {
61
+ return __generator(this, function (_a) {
62
+ this.genericForceLayout(true, graph, options);
63
+ return [2 /*return*/];
64
+ });
65
+ });
66
+ };
67
+ /**
68
+ * Stop simulation immediately.
69
+ */
70
+ D3ForceLayout.prototype.stop = function () {
71
+ var _a;
72
+ (_a = this.forceSimulation) === null || _a === void 0 ? void 0 : _a.stop();
73
+ };
74
+ /**
75
+ * Manually steps the simulation by the specified number of iterations.
76
+ * @see https://github.com/d3/d3-force#simulation_tick
77
+ */
78
+ D3ForceLayout.prototype.tick = function (iterations) {
79
+ var _this = this;
80
+ if (iterations === void 0) { iterations = 1; }
81
+ this.forceSimulation.tick(iterations);
82
+ var result = {
83
+ nodes: formatOutNodes(this.lastLayoutNodes),
84
+ edges: formatOutEdges(this.lastLayoutEdges),
85
+ };
86
+ if (this.lastAssign) {
87
+ result.nodes.forEach(function (node) {
88
+ return _this.lastGraph.mergeNodeData(node.id, {
89
+ x: node.data.x,
90
+ y: node.data.y,
91
+ });
92
+ });
93
+ }
94
+ return result;
95
+ };
96
+ D3ForceLayout.prototype.genericForceLayout = function (assign, graph, options) {
97
+ return __awaiter(this, void 0, void 0, function () {
98
+ var mergedOptions, nodes, edges, layoutNodes, layoutEdges, alphaMin, alphaDecay, alpha, nodeStrength, edgeStrength, linkDistance, clustering, clusterFociStrength, clusterEdgeDistance, clusterEdgeStrength, clusterNodeStrength, clusterNodeSize, _a, collideStrength, _b, center, preventOverlap, nodeSize, nodeSpacing, onTick, forceSimulation;
99
+ var _this = this;
100
+ return __generator(this, function (_c) {
101
+ mergedOptions = __assign(__assign({}, this.options), options);
102
+ nodes = graph.getAllNodes();
103
+ edges = graph.getAllEdges();
104
+ layoutNodes = nodes.map(function (node) {
105
+ var _a, _b;
106
+ return (__assign(__assign({}, cloneFormatData(node)), { x: (_a = node.data) === null || _a === void 0 ? void 0 : _a.x, y: (_b = node.data) === null || _b === void 0 ? void 0 : _b.y }));
107
+ });
108
+ layoutEdges = edges.map(function (edge) { return cloneFormatData(edge); });
109
+ // Use them later in `tick`.
110
+ this.lastLayoutNodes = layoutNodes;
111
+ this.lastLayoutEdges = layoutEdges;
112
+ this.lastAssign = assign;
113
+ this.lastGraph = graph;
114
+ alphaMin = mergedOptions.alphaMin, alphaDecay = mergedOptions.alphaDecay, alpha = mergedOptions.alpha, nodeStrength = mergedOptions.nodeStrength, edgeStrength = mergedOptions.edgeStrength, linkDistance = mergedOptions.linkDistance, clustering = mergedOptions.clustering, clusterFociStrength = mergedOptions.clusterFociStrength, clusterEdgeDistance = mergedOptions.clusterEdgeDistance, clusterEdgeStrength = mergedOptions.clusterEdgeStrength, clusterNodeStrength = mergedOptions.clusterNodeStrength, clusterNodeSize = mergedOptions.clusterNodeSize, _a = mergedOptions.collideStrength, collideStrength = _a === void 0 ? 1 : _a, _b = mergedOptions.center, center = _b === void 0 ? [0, 0] : _b, preventOverlap = mergedOptions.preventOverlap, nodeSize = mergedOptions.nodeSize, nodeSpacing = mergedOptions.nodeSpacing, onTick = mergedOptions.onTick;
115
+ forceSimulation = mergedOptions.forceSimulation;
116
+ return [2 /*return*/, new Promise(function (resolve) {
117
+ if (!forceSimulation) {
118
+ try {
119
+ // 定义节点的力
120
+ var nodeForce = d3Force.forceManyBody();
121
+ if (nodeStrength) {
122
+ nodeForce.strength(nodeStrength);
123
+ }
124
+ forceSimulation = d3Force.forceSimulation().nodes(layoutNodes);
125
+ if (clustering) {
126
+ var clusterForce = forceInBox();
127
+ clusterForce
128
+ .centerX(center[0])
129
+ .centerY(center[1])
130
+ .template("force")
131
+ .strength(clusterFociStrength);
132
+ if (layoutEdges) {
133
+ clusterForce.links(layoutEdges);
134
+ }
135
+ if (layoutNodes) {
136
+ clusterForce.nodes(layoutNodes);
137
+ }
138
+ clusterForce
139
+ .forceLinkDistance(clusterEdgeDistance)
140
+ .forceLinkStrength(clusterEdgeStrength)
141
+ .forceCharge(clusterNodeStrength)
142
+ .forceNodeSize(clusterNodeSize);
143
+ forceSimulation.force("group", clusterForce);
144
+ }
145
+ forceSimulation
146
+ .force("center", d3Force.forceCenter(center[0], center[1]))
147
+ .force("charge", nodeForce)
148
+ .alpha(alpha)
149
+ .alphaDecay(alphaDecay)
150
+ .alphaMin(alphaMin);
151
+ if (preventOverlap) {
152
+ _this.overlapProcess(forceSimulation, {
153
+ nodeSize: nodeSize,
154
+ nodeSpacing: nodeSpacing,
155
+ collideStrength: collideStrength,
156
+ });
157
+ }
158
+ // 如果有边,定义边的力
159
+ if (layoutEdges) {
160
+ // d3 的 forceLayout 会重新生成边的数据模型,为了避免污染源数据
161
+ var edgeForce = d3Force
162
+ .forceLink()
163
+ .id(function (d) { return d.id; })
164
+ .links(layoutEdges);
165
+ if (edgeStrength) {
166
+ edgeForce.strength(edgeStrength);
167
+ }
168
+ if (linkDistance) {
169
+ edgeForce.distance(linkDistance);
170
+ }
171
+ forceSimulation.force("link", edgeForce);
172
+ }
173
+ forceSimulation
174
+ .on("tick", function () {
175
+ var outNodes = formatOutNodes(layoutNodes);
176
+ onTick === null || onTick === void 0 ? void 0 : onTick({
177
+ nodes: outNodes,
178
+ edges: formatOutEdges(layoutEdges),
179
+ });
180
+ if (assign) {
181
+ outNodes.forEach(function (node) {
182
+ return graph.mergeNodeData(node.id, {
183
+ x: node.data.x,
184
+ y: node.data.y,
185
+ });
186
+ });
187
+ }
188
+ })
189
+ .on("end", function () {
190
+ var outNodes = formatOutNodes(layoutNodes);
191
+ if (assign) {
192
+ outNodes.forEach(function (node) {
193
+ return graph.mergeNodeData(node.id, {
194
+ x: node.data.x,
195
+ y: node.data.y,
196
+ });
197
+ });
198
+ }
199
+ resolve({
200
+ nodes: outNodes,
201
+ edges: formatOutEdges(layoutEdges),
202
+ });
203
+ });
204
+ }
205
+ catch (e) {
206
+ console.warn(e);
207
+ }
208
+ }
209
+ else {
210
+ // forceSimulation is defined
211
+ if (clustering) {
212
+ var clusterForce = forceInBox();
213
+ clusterForce.nodes(layoutNodes);
214
+ clusterForce.links(layoutEdges);
215
+ }
216
+ forceSimulation.nodes(layoutNodes);
217
+ if (layoutEdges) {
218
+ // d3 的 forceLayout 会重新生成边的数据模型,为了避免污染源数据
219
+ var edgeForce = d3Force
220
+ .forceLink()
221
+ .id(function (d) { return d.id; })
222
+ .links(layoutEdges);
223
+ if (edgeStrength) {
224
+ edgeForce.strength(edgeStrength);
225
+ }
226
+ if (linkDistance) {
227
+ edgeForce.distance(linkDistance);
228
+ }
229
+ forceSimulation.force("link", edgeForce);
230
+ }
231
+ if (preventOverlap) {
232
+ _this.overlapProcess(forceSimulation, {
233
+ nodeSize: nodeSize,
234
+ nodeSpacing: nodeSpacing,
235
+ collideStrength: collideStrength,
236
+ });
237
+ }
238
+ forceSimulation.alpha(alpha).restart();
239
+ // since d3 writes x and y as node's first level properties, format them into data
240
+ var outNodes = formatOutNodes(layoutNodes);
241
+ var outEdges = formatOutEdges(layoutEdges);
242
+ if (assign) {
243
+ outNodes.forEach(function (node) {
244
+ return graph.mergeNodeData(node.id, {
245
+ x: node.data.x,
246
+ y: node.data.y,
247
+ });
248
+ });
249
+ }
250
+ resolve({
251
+ nodes: outNodes,
252
+ edges: outEdges,
253
+ });
254
+ }
255
+ _this.forceSimulation = forceSimulation;
256
+ })];
257
+ });
258
+ });
259
+ };
260
+ /**
261
+ * Prevent overlappings.
262
+ * @param {object} simulation force simulation of d3
263
+ */
264
+ D3ForceLayout.prototype.overlapProcess = function (simulation, options) {
265
+ var nodeSize = options.nodeSize, nodeSpacing = options.nodeSpacing, collideStrength = options.collideStrength;
266
+ var nodeSizeFunc;
267
+ var nodeSpacingFunc;
268
+ if (isNumber(nodeSpacing)) {
269
+ nodeSpacingFunc = function () { return nodeSpacing; };
270
+ }
271
+ else if (isFunction(nodeSpacing)) {
272
+ nodeSpacingFunc = nodeSpacing;
273
+ }
274
+ else {
275
+ nodeSpacingFunc = function () { return 0; };
276
+ }
277
+ if (!nodeSize) {
278
+ nodeSizeFunc = function (d) {
279
+ if (d.size) {
280
+ if (isArray(d.size)) {
281
+ var res = d.size[0] > d.size[1] ? d.size[0] : d.size[1];
282
+ return res / 2 + nodeSpacingFunc(d);
283
+ }
284
+ if (isObject(d.size)) {
285
+ var res = d.size.width > d.size.height ? d.size.width : d.size.height;
286
+ return res / 2 + nodeSpacingFunc(d);
287
+ }
288
+ return d.size / 2 + nodeSpacingFunc(d);
289
+ }
290
+ return 10 + nodeSpacingFunc(d);
291
+ };
292
+ }
293
+ else if (isFunction(nodeSize)) {
294
+ nodeSizeFunc = function (d) {
295
+ var size = nodeSize(d);
296
+ return size + nodeSpacingFunc(d);
297
+ };
298
+ }
299
+ else if (isArray(nodeSize)) {
300
+ var larger = nodeSize[0] > nodeSize[1] ? nodeSize[0] : nodeSize[1];
301
+ var radius_1 = larger / 2;
302
+ nodeSizeFunc = function (d) { return radius_1 + nodeSpacingFunc(d); };
303
+ }
304
+ else if (isNumber(nodeSize)) {
305
+ var radius_2 = nodeSize / 2;
306
+ nodeSizeFunc = function (d) { return radius_2 + nodeSpacingFunc(d); };
307
+ }
308
+ else {
309
+ nodeSizeFunc = function () { return 10; };
310
+ }
311
+ // forceCollide's parameter is a radius
312
+ simulation.force("collisionForce", d3Force.forceCollide(nodeSizeFunc).strength(collideStrength));
313
+ };
314
+ return D3ForceLayout;
315
+ }());
316
+ export { D3ForceLayout };
317
+ /**
318
+ * Format the calculation nodes into output nodes.
319
+ * Since d3 reads properties in plain node data object which is not compact to the OutNode
320
+ * @param layoutNodes
321
+ * @returns
322
+ */
323
+ var formatOutNodes = function (layoutNodes) {
324
+ return layoutNodes.map(function (node) {
325
+ var x = node.x, y = node.y, others = __rest(node, ["x", "y"]);
326
+ return __assign(__assign({}, others), { data: __assign(__assign({}, others.data), { x: x,
327
+ y: y }) });
328
+ });
329
+ };
330
+ /**
331
+ * d3 will modify `source` and `target` on edge object.
332
+ */
333
+ var formatOutEdges = function (edges) {
334
+ return edges.map(function (edge) {
335
+ var source = edge.source, target = edge.target, rest = __rest(edge, ["source", "target"]);
336
+ return __assign(__assign({}, rest), { source: source.id, target: target.id });
337
+ });
338
+ };
339
+ //# sourceMappingURL=index.js.map