@antv/layout 1.2.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 (137) hide show
  1. package/dist/11.index.min.js +2 -0
  2. package/dist/11.index.min.js.map +1 -0
  3. package/dist/435.index.min.js +3 -0
  4. package/dist/435.index.min.js.LICENSE.txt +5 -0
  5. package/dist/435.index.min.js.map +1 -0
  6. package/dist/index.min.js +2 -1
  7. package/dist/index.min.js.LICENSE.txt +5 -0
  8. package/dist/index.min.js.map +1 -1
  9. package/lib/circular.js +258 -0
  10. package/lib/circular.js.map +1 -0
  11. package/lib/concentric.js +221 -0
  12. package/lib/concentric.js.map +1 -0
  13. package/lib/d3Force/forceInBox.js +331 -0
  14. package/lib/d3Force/forceInBox.js.map +1 -0
  15. package/lib/d3Force/index.js +339 -0
  16. package/lib/d3Force/index.js.map +1 -0
  17. package/lib/dagre/acyclic.js +62 -0
  18. package/lib/dagre/acyclic.js.map +1 -0
  19. package/lib/dagre/add-border-segments.js +37 -0
  20. package/lib/dagre/add-border-segments.js.map +1 -0
  21. package/lib/dagre/coordinate-system.js +65 -0
  22. package/lib/dagre/coordinate-system.js.map +1 -0
  23. package/lib/dagre/data/list.js +50 -0
  24. package/lib/dagre/data/list.js.map +1 -0
  25. package/lib/dagre/greedy-fas.js +147 -0
  26. package/lib/dagre/greedy-fas.js.map +1 -0
  27. package/lib/dagre/layout.js +468 -0
  28. package/lib/dagre/layout.js.map +1 -0
  29. package/lib/dagre/nesting-graph.js +153 -0
  30. package/lib/dagre/nesting-graph.js.map +1 -0
  31. package/lib/dagre/normalize.js +98 -0
  32. package/lib/dagre/normalize.js.map +1 -0
  33. package/lib/dagre/order/add-subgraph-constraints.js +41 -0
  34. package/lib/dagre/order/add-subgraph-constraints.js.map +1 -0
  35. package/lib/dagre/order/barycenter.js +23 -0
  36. package/lib/dagre/order/barycenter.js.map +1 -0
  37. package/lib/dagre/order/build-layer-graph.js +96 -0
  38. package/lib/dagre/order/build-layer-graph.js.map +1 -0
  39. package/lib/dagre/order/cross-count.js +63 -0
  40. package/lib/dagre/order/cross-count.js.map +1 -0
  41. package/lib/dagre/order/index.js +91 -0
  42. package/lib/dagre/order/index.js.map +1 -0
  43. package/lib/dagre/order/init-data-order.js +28 -0
  44. package/lib/dagre/order/init-data-order.js.map +1 -0
  45. package/lib/dagre/order/init-order.js +50 -0
  46. package/lib/dagre/order/init-order.js.map +1 -0
  47. package/lib/dagre/order/resolve-conflicts.js +121 -0
  48. package/lib/dagre/order/resolve-conflicts.js.map +1 -0
  49. package/lib/dagre/order/sort-subgraph.js +84 -0
  50. package/lib/dagre/order/sort-subgraph.js.map +1 -0
  51. package/lib/dagre/order/sort.js +74 -0
  52. package/lib/dagre/order/sort.js.map +1 -0
  53. package/lib/dagre/parent-dummy-chains.js +80 -0
  54. package/lib/dagre/parent-dummy-chains.js.map +1 -0
  55. package/lib/dagre/position/bk.js +398 -0
  56. package/lib/dagre/position/bk.js.map +1 -0
  57. package/lib/dagre/position/index.js +54 -0
  58. package/lib/dagre/position/index.js.map +1 -0
  59. package/lib/dagre/rank/feasible-tree.js +164 -0
  60. package/lib/dagre/rank/feasible-tree.js.map +1 -0
  61. package/lib/dagre/rank/index.js +48 -0
  62. package/lib/dagre/rank/index.js.map +1 -0
  63. package/lib/dagre/rank/network-simplex.js +232 -0
  64. package/lib/dagre/rank/network-simplex.js.map +1 -0
  65. package/lib/dagre/rank/util.js +138 -0
  66. package/lib/dagre/rank/util.js.map +1 -0
  67. package/lib/dagre/util.js +289 -0
  68. package/lib/dagre/util.js.map +1 -0
  69. package/lib/dagre.d.ts +1 -2
  70. package/lib/dagre.js +543 -0
  71. package/lib/dagre.js.map +1 -0
  72. package/lib/force/forceNBody.js +103 -0
  73. package/lib/force/forceNBody.js.map +1 -0
  74. package/lib/force/index.js +797 -0
  75. package/lib/force/index.js.map +1 -0
  76. package/lib/force/types.js +2 -0
  77. package/lib/force/types.js.map +1 -0
  78. package/lib/forceAtlas2/body.js +91 -0
  79. package/lib/forceAtlas2/body.js.map +1 -0
  80. package/lib/forceAtlas2/index.js +562 -0
  81. package/lib/forceAtlas2/index.js.map +1 -0
  82. package/lib/forceAtlas2/quad.js +98 -0
  83. package/lib/forceAtlas2/quad.js.map +1 -0
  84. package/lib/forceAtlas2/quadTree.js +105 -0
  85. package/lib/forceAtlas2/quadTree.js.map +1 -0
  86. package/lib/fruchterman.js +376 -0
  87. package/lib/fruchterman.js.map +1 -0
  88. package/lib/grid.js +308 -0
  89. package/lib/grid.js.map +1 -0
  90. package/lib/index.js +16 -0
  91. package/lib/index.js.map +1 -0
  92. package/lib/mds.js +137 -0
  93. package/lib/mds.js.map +1 -0
  94. package/lib/radial/index.js +355 -0
  95. package/lib/radial/index.js.map +1 -0
  96. package/lib/radial/mds.js +29 -0
  97. package/lib/radial/mds.js.map +1 -0
  98. package/lib/radial/radial-nonoverlap-force.js +100 -0
  99. package/lib/radial/radial-nonoverlap-force.js.map +1 -0
  100. package/lib/random.js +98 -0
  101. package/lib/random.js.map +1 -0
  102. package/lib/registry.d.ts +0 -1
  103. package/lib/registry.js +25 -0
  104. package/lib/registry.js.map +1 -0
  105. package/lib/supervisor.js +95 -0
  106. package/lib/supervisor.js.map +1 -0
  107. package/lib/types.js +4 -0
  108. package/lib/types.js.map +1 -0
  109. package/lib/util/array.js +2 -0
  110. package/lib/util/array.js.map +1 -0
  111. package/lib/util/common.d.ts +12 -0
  112. package/lib/util/common.js +32 -0
  113. package/lib/util/common.js.map +1 -0
  114. package/lib/util/function.js +124 -0
  115. package/lib/util/function.js.map +1 -0
  116. package/lib/util/gpu.js +214 -0
  117. package/lib/util/gpu.js.map +1 -0
  118. package/lib/util/index.js +7 -0
  119. package/lib/util/index.js.map +1 -0
  120. package/lib/util/math.js +228 -0
  121. package/lib/util/math.js.map +1 -0
  122. package/lib/util/number.js +5 -0
  123. package/lib/util/number.js.map +1 -0
  124. package/lib/util/object.js +42 -0
  125. package/lib/util/object.js.map +1 -0
  126. package/lib/util/string.js +15 -0
  127. package/lib/util/string.js.map +1 -0
  128. package/lib/worker.d.ts +1 -3
  129. package/lib/worker.js +45 -0
  130. package/lib/worker.js.map +1 -0
  131. package/package.json +6 -8
  132. package/dist/5e37927bd3e57252658c.worker.js +0 -2
  133. package/dist/5e37927bd3e57252658c.worker.js.map +0 -1
  134. package/esm/5e37927bd3e57252658c.worker.js +0 -2
  135. package/esm/5e37927bd3e57252658c.worker.js.map +0 -1
  136. package/esm/index.esm.js +0 -2
  137. package/esm/index.esm.js.map +0 -1
package/lib/grid.js ADDED
@@ -0,0 +1,308 @@
1
+ import { __assign, __awaiter, __generator } from "tslib";
2
+ import { isString, isNumber } from "@antv/util";
3
+ import { isArray, formatSizeFn, formatNumberFn, cloneFormatData } from "./util";
4
+ import { handleSingleNodeGraph } from "./util/common";
5
+ var DEFAULTS_LAYOUT_OPTIONS = {
6
+ begin: [0, 0],
7
+ preventOverlap: true,
8
+ preventOverlapPadding: 10,
9
+ condense: false,
10
+ rows: undefined,
11
+ cols: undefined,
12
+ position: undefined,
13
+ sortBy: "degree",
14
+ nodeSize: 30,
15
+ width: 300,
16
+ height: 300,
17
+ };
18
+ /**
19
+ * Layout arranging the nodes in a grid.
20
+ *
21
+ * @example
22
+ * // Assign layout options when initialization.
23
+ * const layout = new GridLayout({ rows: 10 });
24
+ * const positions = await layout.execute(graph); // { nodes: [], edges: [] }
25
+ *
26
+ * // Or use different options later.
27
+ * const layout = new GridLayout({ rows: 10 });
28
+ * const positions = await layout.execute(graph, { rows: 20 }); // { nodes: [], edges: [] }
29
+ *
30
+ * // If you want to assign the positions directly to the nodes, use assign method.
31
+ * await layout.assign(graph, { rows: 20 });
32
+ */
33
+ var GridLayout = /** @class */ (function () {
34
+ function GridLayout(options) {
35
+ if (options === void 0) { options = {}; }
36
+ this.options = options;
37
+ this.id = "grid";
38
+ this.options = __assign(__assign({}, DEFAULTS_LAYOUT_OPTIONS), options);
39
+ }
40
+ /**
41
+ * Return the positions of nodes and edges(if needed).
42
+ */
43
+ GridLayout.prototype.execute = function (graph, options) {
44
+ return __awaiter(this, void 0, void 0, function () {
45
+ return __generator(this, function (_a) {
46
+ return [2 /*return*/, this.genericGridLayout(false, graph, options)];
47
+ });
48
+ });
49
+ };
50
+ /**
51
+ * To directly assign the positions to the nodes.
52
+ */
53
+ GridLayout.prototype.assign = function (graph, options) {
54
+ return __awaiter(this, void 0, void 0, function () {
55
+ return __generator(this, function (_a) {
56
+ this.genericGridLayout(true, graph, options);
57
+ return [2 /*return*/];
58
+ });
59
+ });
60
+ };
61
+ GridLayout.prototype.genericGridLayout = function (assign, graph, options) {
62
+ return __awaiter(this, void 0, void 0, function () {
63
+ var mergedOptions, _a, begin, condense, preventOverlapPadding, preventOverlap, propsRows, propsCols, paramNodeSpacing, paramNodeSize, propsWidth, propsHeight, position, sortBy, nodes, edges, n, layoutNodes, width, height, cells, rcs, splits, sm, lg, sm, lg, cellWidth, cellHeight, nodeSpacing_1, nodeSize_1, cellUsed, rc, id2manPos, i, node, rcPos, pos, result;
64
+ return __generator(this, function (_b) {
65
+ mergedOptions = __assign(__assign({}, this.options), options);
66
+ _a = mergedOptions.begin, begin = _a === void 0 ? [0, 0] : _a, condense = mergedOptions.condense, preventOverlapPadding = mergedOptions.preventOverlapPadding, preventOverlap = mergedOptions.preventOverlap, propsRows = mergedOptions.rows, propsCols = mergedOptions.cols, paramNodeSpacing = mergedOptions.nodeSpacing, paramNodeSize = mergedOptions.nodeSize, propsWidth = mergedOptions.width, propsHeight = mergedOptions.height, position = mergedOptions.position;
67
+ sortBy = mergedOptions.sortBy;
68
+ nodes = graph.getAllNodes();
69
+ edges = graph.getAllEdges();
70
+ n = nodes === null || nodes === void 0 ? void 0 : nodes.length;
71
+ // Need no layout if there is no node.
72
+ if (!n || n === 1) {
73
+ return [2 /*return*/, handleSingleNodeGraph(graph, assign, begin)];
74
+ }
75
+ layoutNodes = nodes.map(function (node) { return cloneFormatData(node); });
76
+ if (
77
+ // `id` should be reserved keyword
78
+ sortBy !== "id" &&
79
+ (!isString(sortBy) || layoutNodes[0].data[sortBy] === undefined)) {
80
+ sortBy = "degree";
81
+ }
82
+ if (sortBy === "degree") {
83
+ layoutNodes.sort(function (n1, n2) {
84
+ return graph.getDegree(n2.id, "both") - graph.getDegree(n1.id, "both");
85
+ });
86
+ }
87
+ else if (sortBy === "id") {
88
+ // sort nodes by ID
89
+ layoutNodes.sort(function (n1, n2) {
90
+ if (isNumber(n2.id) && isNumber(n1.id)) {
91
+ return n2.id - n1.id;
92
+ }
93
+ return ("" + n1.id).localeCompare("" + n2.id);
94
+ });
95
+ }
96
+ else {
97
+ // sort nodes by value
98
+ layoutNodes.sort(function (n1, n2) { return n2.data[sortBy] - n1.data[sortBy]; });
99
+ }
100
+ width = !propsWidth && typeof window !== "undefined"
101
+ ? window.innerWidth
102
+ : propsWidth;
103
+ height = !propsHeight && typeof window !== "undefined"
104
+ ? window.innerHeight
105
+ : propsHeight;
106
+ cells = n;
107
+ rcs = { rows: propsRows, cols: propsCols };
108
+ // if rows or columns were set in self, use those values
109
+ if (propsRows != null && propsCols != null) {
110
+ rcs.rows = propsRows;
111
+ rcs.cols = propsCols;
112
+ }
113
+ else if (propsRows != null && propsCols == null) {
114
+ rcs.rows = propsRows;
115
+ rcs.cols = Math.ceil(cells / rcs.rows);
116
+ }
117
+ else if (propsRows == null && propsCols != null) {
118
+ rcs.cols = propsCols;
119
+ rcs.rows = Math.ceil(cells / rcs.cols);
120
+ }
121
+ else {
122
+ splits = Math.sqrt((cells * height) / width);
123
+ rcs.rows = Math.round(splits);
124
+ rcs.cols = Math.round((width / height) * splits);
125
+ }
126
+ rcs.rows = Math.max(rcs.rows, 1);
127
+ rcs.cols = Math.max(rcs.cols, 1);
128
+ if (rcs.cols * rcs.rows > cells) {
129
+ sm = small(rcs);
130
+ lg = large(rcs);
131
+ // reducing the small side takes away the most cells, so try it first
132
+ if ((sm - 1) * lg >= cells) {
133
+ small(rcs, sm - 1);
134
+ }
135
+ else if ((lg - 1) * sm >= cells) {
136
+ large(rcs, lg - 1);
137
+ }
138
+ }
139
+ else {
140
+ // if rounding was too low, add rows or columns
141
+ while (rcs.cols * rcs.rows < cells) {
142
+ sm = small(rcs);
143
+ lg = large(rcs);
144
+ // try to add to larger side first (adds less in multiplication)
145
+ if ((lg + 1) * sm >= cells) {
146
+ large(rcs, lg + 1);
147
+ }
148
+ else {
149
+ small(rcs, sm + 1);
150
+ }
151
+ }
152
+ }
153
+ cellWidth = condense ? 0 : width / rcs.cols;
154
+ cellHeight = condense ? 0 : height / rcs.rows;
155
+ if (preventOverlap || paramNodeSpacing) {
156
+ nodeSpacing_1 = formatNumberFn(10, paramNodeSpacing);
157
+ nodeSize_1 = formatSizeFn(30, paramNodeSize, false);
158
+ layoutNodes.forEach(function (node) {
159
+ if (!node.data.x || !node.data.y) {
160
+ // for bb
161
+ node.data.x = 0;
162
+ node.data.y = 0;
163
+ }
164
+ var oNode = graph.getNode(node.id);
165
+ var res = nodeSize_1(oNode) || 30;
166
+ var nodeW;
167
+ var nodeH;
168
+ if (isArray(res)) {
169
+ nodeW = res[0];
170
+ nodeH = res[1];
171
+ }
172
+ else {
173
+ nodeW = res;
174
+ nodeH = res;
175
+ }
176
+ var p = nodeSpacing_1 !== undefined ? nodeSpacing_1(node) : preventOverlapPadding;
177
+ var w = nodeW + p;
178
+ var h = nodeH + p;
179
+ cellWidth = Math.max(cellWidth, w);
180
+ cellHeight = Math.max(cellHeight, h);
181
+ });
182
+ }
183
+ cellUsed = {};
184
+ rc = { row: 0, col: 0 };
185
+ id2manPos = {};
186
+ for (i = 0; i < layoutNodes.length; i++) {
187
+ node = layoutNodes[i];
188
+ rcPos = void 0;
189
+ if (position) {
190
+ // TODO: not sure the api name
191
+ rcPos = position(graph.getNode(node.id));
192
+ }
193
+ if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) {
194
+ pos = {
195
+ row: rcPos.row,
196
+ col: rcPos.col,
197
+ };
198
+ if (pos.col === undefined) {
199
+ // find unused col
200
+ pos.col = 0;
201
+ while (used(cellUsed, pos)) {
202
+ pos.col++;
203
+ }
204
+ }
205
+ else if (pos.row === undefined) {
206
+ // find unused row
207
+ pos.row = 0;
208
+ while (used(cellUsed, pos)) {
209
+ pos.row++;
210
+ }
211
+ }
212
+ id2manPos[node.id] = pos;
213
+ use(cellUsed, pos);
214
+ }
215
+ getPos(node, begin, cellWidth, cellHeight, id2manPos, rcs, rc, cellUsed);
216
+ }
217
+ result = {
218
+ nodes: layoutNodes,
219
+ edges: edges,
220
+ };
221
+ if (assign) {
222
+ layoutNodes.forEach(function (node) {
223
+ graph.mergeNodeData(node.id, {
224
+ x: node.data.x,
225
+ y: node.data.y,
226
+ });
227
+ });
228
+ }
229
+ return [2 /*return*/, result];
230
+ });
231
+ });
232
+ };
233
+ return GridLayout;
234
+ }());
235
+ export { GridLayout };
236
+ var small = function (rcs, val) {
237
+ var res;
238
+ var rows = rcs.rows || 5;
239
+ var cols = rcs.cols || 5;
240
+ if (val == null) {
241
+ res = Math.min(rows, cols);
242
+ }
243
+ else {
244
+ var min = Math.min(rows, cols);
245
+ if (min === rcs.rows) {
246
+ rcs.rows = val;
247
+ }
248
+ else {
249
+ rcs.cols = val;
250
+ }
251
+ }
252
+ return res;
253
+ };
254
+ var large = function (rcs, val) {
255
+ var result;
256
+ var usedRows = rcs.rows || 5;
257
+ var usedCols = rcs.cols || 5;
258
+ if (val == null) {
259
+ result = Math.max(usedRows, usedCols);
260
+ }
261
+ else {
262
+ var max = Math.max(usedRows, usedCols);
263
+ if (max === rcs.rows) {
264
+ rcs.rows = val;
265
+ }
266
+ else {
267
+ rcs.cols = val;
268
+ }
269
+ }
270
+ return result;
271
+ };
272
+ var used = function (cellUsed, rc) {
273
+ return cellUsed["c-" + rc.row + "-" + rc.col] || false;
274
+ };
275
+ var use = function (cellUsed, rc) {
276
+ return (cellUsed["c-" + rc.row + "-" + rc.col] = true);
277
+ };
278
+ var moveToNextCell = function (rcs, rc) {
279
+ var cols = rcs.cols || 5;
280
+ rc.col++;
281
+ if (rc.col >= cols) {
282
+ rc.col = 0;
283
+ rc.row++;
284
+ }
285
+ };
286
+ var getPos = function (node, begin, cellWidth, cellHeight, id2manPos, rcs, rc, cellUsed) {
287
+ var x;
288
+ var y;
289
+ // see if we have a manual position set
290
+ var rcPos = id2manPos[node.id];
291
+ if (rcPos) {
292
+ x = rcPos.col * cellWidth + cellWidth / 2 + begin[0];
293
+ y = rcPos.row * cellHeight + cellHeight / 2 + begin[1];
294
+ }
295
+ else {
296
+ // otherwise set automatically
297
+ while (used(cellUsed, rc)) {
298
+ moveToNextCell(rcs, rc);
299
+ }
300
+ x = rc.col * cellWidth + cellWidth / 2 + begin[0];
301
+ y = rc.row * cellHeight + cellHeight / 2 + begin[1];
302
+ use(cellUsed, rc);
303
+ moveToNextCell(rcs, rc);
304
+ }
305
+ node.data.x = x;
306
+ node.data.y = y;
307
+ };
308
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../src/grid.ts"],"names":[],"mappings":"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"}
package/lib/index.js ADDED
@@ -0,0 +1,16 @@
1
+ export * from "./circular";
2
+ export * from "./supervisor";
3
+ export * from "./registry";
4
+ export * from "./grid";
5
+ export * from "./random";
6
+ export * from "./mds";
7
+ export * from "./concentric";
8
+ export * from "./radial";
9
+ export * from "./fruchterman";
10
+ export * from "./d3Force";
11
+ export * from "./force";
12
+ export * from "./forceAtlas2";
13
+ export * from "./dagre";
14
+ export * from "./types";
15
+ export * from "./util";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
package/lib/mds.js ADDED
@@ -0,0 +1,137 @@
1
+ import { __assign, __awaiter, __generator } from "tslib";
2
+ import { Matrix as MLMatrix, SingularValueDecomposition } from "ml-matrix";
3
+ import { cloneFormatData, floydWarshall, getAdjMatrix, scaleMatrix, } from "./util";
4
+ import { handleSingleNodeGraph } from "./util/common";
5
+ var DEFAULTS_LAYOUT_OPTIONS = {
6
+ center: [0, 0],
7
+ linkDistance: 50,
8
+ };
9
+ /**
10
+ * Layout arranging the nodes with multiple dimensional scaling algorithm
11
+ *
12
+ * @example
13
+ * // Assign layout options when initialization.
14
+ * const layout = new MDSLayout({ center: [100, 100] });
15
+ * const positions = await layout.execute(graph); // { nodes: [], edges: [] }
16
+ *
17
+ * // Or use different options later.
18
+ * const layout = new MDSLayout({ center: [100, 100] });
19
+ * const positions = await layout.execute(graph, { rows: 20 }); // { nodes: [], edges: [] }
20
+ *
21
+ * // If you want to assign the positions directly to the nodes, use assign method.
22
+ * await layout.assign(graph, { center: [100, 100] });
23
+ */
24
+ var MDSLayout = /** @class */ (function () {
25
+ function MDSLayout(options) {
26
+ if (options === void 0) { options = {}; }
27
+ this.options = options;
28
+ this.id = "mds";
29
+ this.options = __assign(__assign({}, DEFAULTS_LAYOUT_OPTIONS), options);
30
+ }
31
+ /**
32
+ * Return the positions of nodes and edges(if needed).
33
+ */
34
+ MDSLayout.prototype.execute = function (graph, options) {
35
+ return __awaiter(this, void 0, void 0, function () {
36
+ return __generator(this, function (_a) {
37
+ return [2 /*return*/, this.genericMDSLayout(false, graph, options)];
38
+ });
39
+ });
40
+ };
41
+ /**
42
+ * To directly assign the positions to the nodes.
43
+ */
44
+ MDSLayout.prototype.assign = function (graph, options) {
45
+ return __awaiter(this, void 0, void 0, function () {
46
+ return __generator(this, function (_a) {
47
+ this.genericMDSLayout(true, graph, options);
48
+ return [2 /*return*/];
49
+ });
50
+ });
51
+ };
52
+ MDSLayout.prototype.genericMDSLayout = function (assign, graph, options) {
53
+ return __awaiter(this, void 0, void 0, function () {
54
+ var mergedOptions, _a, center, _b, linkDistance, nodes, edges, adjMatrix, distances, scaledD, positions, layoutNodes, result;
55
+ return __generator(this, function (_c) {
56
+ mergedOptions = __assign(__assign({}, this.options), options);
57
+ _a = mergedOptions.center, center = _a === void 0 ? [0, 0] : _a, _b = mergedOptions.linkDistance, linkDistance = _b === void 0 ? 50 : _b;
58
+ nodes = graph.getAllNodes();
59
+ edges = graph.getAllEdges();
60
+ if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length) || nodes.length === 1) {
61
+ return [2 /*return*/, handleSingleNodeGraph(graph, assign, center)];
62
+ }
63
+ adjMatrix = getAdjMatrix({ nodes: nodes, edges: edges }, false);
64
+ distances = floydWarshall(adjMatrix);
65
+ handleInfinity(distances);
66
+ scaledD = scaleMatrix(distances, linkDistance);
67
+ positions = runMDS(scaledD);
68
+ layoutNodes = [];
69
+ positions.forEach(function (p, i) {
70
+ var cnode = cloneFormatData(nodes[i]);
71
+ cnode.data.x = p[0] + center[0];
72
+ cnode.data.y = p[1] + center[1];
73
+ layoutNodes.push(cnode);
74
+ });
75
+ if (assign) {
76
+ layoutNodes.forEach(function (node) {
77
+ return graph.mergeNodeData(node.id, {
78
+ x: node.data.x,
79
+ y: node.data.y,
80
+ });
81
+ });
82
+ }
83
+ result = {
84
+ nodes: layoutNodes,
85
+ edges: edges,
86
+ };
87
+ return [2 /*return*/, result];
88
+ });
89
+ });
90
+ };
91
+ return MDSLayout;
92
+ }());
93
+ export { MDSLayout };
94
+ var handleInfinity = function (distances) {
95
+ var maxDistance = -999999;
96
+ distances.forEach(function (row) {
97
+ row.forEach(function (value) {
98
+ if (value === Infinity) {
99
+ return;
100
+ }
101
+ if (maxDistance < value) {
102
+ maxDistance = value;
103
+ }
104
+ });
105
+ });
106
+ distances.forEach(function (row, i) {
107
+ row.forEach(function (value, j) {
108
+ if (value === Infinity) {
109
+ distances[i][j] = maxDistance;
110
+ }
111
+ });
112
+ });
113
+ };
114
+ /**
115
+ * mds 算法
116
+ * @return {array} positions 计算后的节点位置数组
117
+ */
118
+ var runMDS = function (distances) {
119
+ var dimension = 2;
120
+ // square distances
121
+ var M = MLMatrix.mul(MLMatrix.pow(distances, 2), -0.5);
122
+ // double centre the rows/columns
123
+ var rowMeans = M.mean("row");
124
+ var colMeans = M.mean("column");
125
+ var totalMean = M.mean();
126
+ M.add(totalMean).subRowVector(rowMeans).subColumnVector(colMeans);
127
+ // take the SVD of the double centred matrix, and return the
128
+ // points from it
129
+ var ret = new SingularValueDecomposition(M);
130
+ var eigenValues = MLMatrix.sqrt(ret.diagonalMatrix).diagonal();
131
+ return ret.leftSingularVectors.toJSON().map(function (row) {
132
+ return MLMatrix.mul([row], [eigenValues])
133
+ .toJSON()[0]
134
+ .splice(0, dimension);
135
+ });
136
+ };
137
+ //# sourceMappingURL=mds.js.map
package/lib/mds.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mds.js","sourceRoot":"","sources":["../src/mds.ts"],"names":[],"mappings":"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"}