@antv/layout 1.2.10 → 1.2.11-beta.0

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 (134) hide show
  1. package/dist/{5fc550bbb6f708833d84.worker.js → 1364056b7ad586222caf.worker.js} +2 -2
  2. package/dist/1364056b7ad586222caf.worker.js.map +1 -0
  3. package/dist/index.min.js +1 -1
  4. package/dist/index.min.js.map +1 -1
  5. package/lib/bundle-entry.js +19 -0
  6. package/lib/bundle-entry.js.map +1 -0
  7. package/lib/bundle-supervisor.js +94 -0
  8. package/lib/bundle-supervisor.js.map +1 -0
  9. package/lib/bundle-worker.js +53 -0
  10. package/lib/bundle-worker.js.map +1 -0
  11. package/lib/circular.js +258 -0
  12. package/lib/circular.js.map +1 -0
  13. package/lib/comboCombined.js +441 -0
  14. package/lib/comboCombined.js.map +1 -0
  15. package/lib/concentric.js +229 -0
  16. package/lib/concentric.js.map +1 -0
  17. package/lib/d3Force/forceInBox.js +331 -0
  18. package/lib/d3Force/forceInBox.js.map +1 -0
  19. package/lib/d3Force/index.js +339 -0
  20. package/lib/d3Force/index.js.map +1 -0
  21. package/lib/dagre/acyclic.js +62 -0
  22. package/lib/dagre/acyclic.js.map +1 -0
  23. package/lib/dagre/add-border-segments.js +37 -0
  24. package/lib/dagre/add-border-segments.js.map +1 -0
  25. package/lib/dagre/coordinate-system.js +65 -0
  26. package/lib/dagre/coordinate-system.js.map +1 -0
  27. package/lib/dagre/data/list.js +50 -0
  28. package/lib/dagre/data/list.js.map +1 -0
  29. package/lib/dagre/greedy-fas.js +147 -0
  30. package/lib/dagre/greedy-fas.js.map +1 -0
  31. package/lib/dagre/layout.js +470 -0
  32. package/lib/dagre/layout.js.map +1 -0
  33. package/lib/dagre/nesting-graph.js +153 -0
  34. package/lib/dagre/nesting-graph.js.map +1 -0
  35. package/lib/dagre/normalize.js +98 -0
  36. package/lib/dagre/normalize.js.map +1 -0
  37. package/lib/dagre/order/add-subgraph-constraints.js +45 -0
  38. package/lib/dagre/order/add-subgraph-constraints.js.map +1 -0
  39. package/lib/dagre/order/barycenter.js +23 -0
  40. package/lib/dagre/order/barycenter.js.map +1 -0
  41. package/lib/dagre/order/build-layer-graph.js +96 -0
  42. package/lib/dagre/order/build-layer-graph.js.map +1 -0
  43. package/lib/dagre/order/cross-count.js +63 -0
  44. package/lib/dagre/order/cross-count.js.map +1 -0
  45. package/lib/dagre/order/index.js +91 -0
  46. package/lib/dagre/order/index.js.map +1 -0
  47. package/lib/dagre/order/init-data-order.js +28 -0
  48. package/lib/dagre/order/init-data-order.js.map +1 -0
  49. package/lib/dagre/order/init-order.js +50 -0
  50. package/lib/dagre/order/init-order.js.map +1 -0
  51. package/lib/dagre/order/resolve-conflicts.js +121 -0
  52. package/lib/dagre/order/resolve-conflicts.js.map +1 -0
  53. package/lib/dagre/order/sort-subgraph.js +84 -0
  54. package/lib/dagre/order/sort-subgraph.js.map +1 -0
  55. package/lib/dagre/order/sort.js +74 -0
  56. package/lib/dagre/order/sort.js.map +1 -0
  57. package/lib/dagre/parent-dummy-chains.js +80 -0
  58. package/lib/dagre/parent-dummy-chains.js.map +1 -0
  59. package/lib/dagre/position/bk.js +398 -0
  60. package/lib/dagre/position/bk.js.map +1 -0
  61. package/lib/dagre/position/index.js +54 -0
  62. package/lib/dagre/position/index.js.map +1 -0
  63. package/lib/dagre/rank/feasible-tree.js +164 -0
  64. package/lib/dagre/rank/feasible-tree.js.map +1 -0
  65. package/lib/dagre/rank/index.js +48 -0
  66. package/lib/dagre/rank/index.js.map +1 -0
  67. package/lib/dagre/rank/network-simplex.js +232 -0
  68. package/lib/dagre/rank/network-simplex.js.map +1 -0
  69. package/lib/dagre/rank/util.js +138 -0
  70. package/lib/dagre/rank/util.js.map +1 -0
  71. package/lib/dagre/util.js +289 -0
  72. package/lib/dagre/util.js.map +1 -0
  73. package/lib/dagre.js +552 -0
  74. package/lib/dagre.js.map +1 -0
  75. package/lib/force/forceNBody.js +123 -0
  76. package/lib/force/forceNBody.js.map +1 -0
  77. package/lib/force/index.js +805 -0
  78. package/lib/force/index.js.map +1 -0
  79. package/lib/force/types.js +2 -0
  80. package/lib/force/types.js.map +1 -0
  81. package/lib/forceAtlas2/body.js +91 -0
  82. package/lib/forceAtlas2/body.js.map +1 -0
  83. package/lib/forceAtlas2/index.js +562 -0
  84. package/lib/forceAtlas2/index.js.map +1 -0
  85. package/lib/forceAtlas2/quad.js +98 -0
  86. package/lib/forceAtlas2/quad.js.map +1 -0
  87. package/lib/forceAtlas2/quadTree.js +105 -0
  88. package/lib/forceAtlas2/quadTree.js.map +1 -0
  89. package/lib/fruchterman.js +376 -0
  90. package/lib/fruchterman.js.map +1 -0
  91. package/lib/grid.js +308 -0
  92. package/lib/grid.js.map +1 -0
  93. package/lib/index.js +17 -0
  94. package/lib/index.js.map +1 -0
  95. package/lib/mds.js +137 -0
  96. package/lib/mds.js.map +1 -0
  97. package/lib/radial/index.js +355 -0
  98. package/lib/radial/index.js.map +1 -0
  99. package/lib/radial/mds.js +29 -0
  100. package/lib/radial/mds.js.map +1 -0
  101. package/lib/radial/radial-nonoverlap-force.js +100 -0
  102. package/lib/radial/radial-nonoverlap-force.js.map +1 -0
  103. package/lib/random.js +98 -0
  104. package/lib/random.js.map +1 -0
  105. package/lib/registry.js +27 -0
  106. package/lib/registry.js.map +1 -0
  107. package/lib/supervisor.js +90 -0
  108. package/lib/supervisor.js.map +1 -0
  109. package/lib/types.js +4 -0
  110. package/lib/types.js.map +1 -0
  111. package/lib/util/array.js +2 -0
  112. package/lib/util/array.js.map +1 -0
  113. package/lib/util/common.d.ts +12 -0
  114. package/lib/util/common.js +32 -0
  115. package/lib/util/common.js.map +1 -0
  116. package/lib/util/function.js +126 -0
  117. package/lib/util/function.js.map +1 -0
  118. package/lib/util/gpu.js +214 -0
  119. package/lib/util/gpu.js.map +1 -0
  120. package/lib/util/index.js +7 -0
  121. package/lib/util/index.js.map +1 -0
  122. package/lib/util/math.js +257 -0
  123. package/lib/util/math.js.map +1 -0
  124. package/lib/util/number.js +5 -0
  125. package/lib/util/number.js.map +1 -0
  126. package/lib/util/object.js +42 -0
  127. package/lib/util/object.js.map +1 -0
  128. package/lib/util/string.js +15 -0
  129. package/lib/util/string.js.map +1 -0
  130. package/lib/worker.d.ts +1 -0
  131. package/lib/worker.js +45 -0
  132. package/lib/worker.js.map +1 -0
  133. package/package.json +1 -1
  134. package/dist/5fc550bbb6f708833d84.worker.js.map +0 -1
package/lib/dagre.js ADDED
@@ -0,0 +1,552 @@
1
+ import { __assign, __awaiter, __generator } from "tslib";
2
+ import { Graph } from '@antv/graphlib';
3
+ import { isNumber } from '@antv/util';
4
+ import { layout } from './dagre/layout';
5
+ import { cloneFormatData, formatNumberFn, formatNodeSize } from './util';
6
+ var DEFAULTS_LAYOUT_OPTIONS = {
7
+ rankdir: 'TB',
8
+ nodesep: 50,
9
+ ranksep: 50,
10
+ edgeLabelSpace: true,
11
+ controlPoints: false,
12
+ radial: false,
13
+ focusNode: null, // radial 为 true 时生效,关注的节点
14
+ };
15
+ /**
16
+ * Layout arranging the nodes in a circle.
17
+ *
18
+ * @example
19
+ * // Assign layout options when initialization.
20
+ * const layout = new CircularLayout({ radius: 10 });
21
+ * const positions = await layout.execute(graph); // { nodes: [], edges: [] }
22
+ *
23
+ * // Or use different options later.
24
+ * const layout = new CircularLayout({ radius: 10 });
25
+ * const positions = await layout.execute(graph, { radius: 20 }); // { nodes: [], edges: [] }
26
+ *
27
+ * // If you want to assign the positions directly to the nodes, use assign method.
28
+ * await layout.assign(graph, { radius: 20 });
29
+ */
30
+ var DagreLayout = /** @class */ (function () {
31
+ function DagreLayout(options) {
32
+ if (options === void 0) { options = {}; }
33
+ this.options = options;
34
+ this.id = 'dagre';
35
+ this.options = __assign(__assign({}, DEFAULTS_LAYOUT_OPTIONS), options);
36
+ }
37
+ /**
38
+ * Return the positions of nodes and edges(if needed).
39
+ */
40
+ DagreLayout.prototype.execute = function (graph, options) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ return __generator(this, function (_a) {
43
+ return [2 /*return*/, this.genericDagreLayout(false, graph, options)];
44
+ });
45
+ });
46
+ };
47
+ /**
48
+ * To directly assign the positions to the nodes.
49
+ */
50
+ DagreLayout.prototype.assign = function (graph, options) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ return __generator(this, function (_a) {
53
+ switch (_a.label) {
54
+ case 0: return [4 /*yield*/, this.genericDagreLayout(true, graph, options)];
55
+ case 1:
56
+ _a.sent();
57
+ return [2 /*return*/];
58
+ }
59
+ });
60
+ });
61
+ };
62
+ DagreLayout.prototype.genericDagreLayout = function (assign, graph, options) {
63
+ return __awaiter(this, void 0, void 0, function () {
64
+ var mergedOptions, nodeSize, align, _a, rankdir, ranksep, nodesep, ranksepFunc, nodesepFunc, edgeLabelSpace, nodeOrder, begin, controlPoints, radial, sortByCombo,
65
+ // focusNode,
66
+ preset, g, ranksepfunc, nodesepfunc, horisep, vertisep, nodeSizeFunc, nodes, edges, prevGraph, layoutTopLeft, minX_1, minY_1, isHorizontal, layerCoords_1, isInvert, layerCoordSort, layerCoordsArr_1, isDifferentLayer_1, filterControlPointsOutOfBoundary_1, layoutNodes, layoutEdges, result;
67
+ return __generator(this, function (_b) {
68
+ mergedOptions = __assign(__assign({}, this.options), options);
69
+ nodeSize = mergedOptions.nodeSize, align = mergedOptions.align, _a = mergedOptions.rankdir, rankdir = _a === void 0 ? 'TB' : _a, ranksep = mergedOptions.ranksep, nodesep = mergedOptions.nodesep, ranksepFunc = mergedOptions.ranksepFunc, nodesepFunc = mergedOptions.nodesepFunc, edgeLabelSpace = mergedOptions.edgeLabelSpace, nodeOrder = mergedOptions.nodeOrder, begin = mergedOptions.begin, controlPoints = mergedOptions.controlPoints, radial = mergedOptions.radial, sortByCombo = mergedOptions.sortByCombo, preset = mergedOptions.preset;
70
+ g = new Graph({
71
+ tree: [],
72
+ });
73
+ ranksepfunc = formatNumberFn(ranksep || 50, ranksepFunc);
74
+ nodesepfunc = formatNumberFn(nodesep || 50, nodesepFunc);
75
+ horisep = nodesepfunc;
76
+ vertisep = ranksepfunc;
77
+ if (rankdir === 'LR' || rankdir === 'RL') {
78
+ horisep = ranksepfunc;
79
+ vertisep = nodesepfunc;
80
+ }
81
+ nodeSizeFunc = formatNodeSize(nodeSize, undefined);
82
+ nodes = graph.getAllNodes();
83
+ edges = graph.getAllEdges();
84
+ nodes.forEach(function (node) {
85
+ var size = nodeSizeFunc(node);
86
+ var verti = vertisep(node);
87
+ var hori = horisep(node);
88
+ // FIXME: support 2 dimensions?
89
+ // const width = size[0] + 2 * hori;
90
+ // const height = size[1] + 2 * verti;
91
+ var width = size + 2 * hori;
92
+ var height = size + 2 * verti;
93
+ var layer = node.data.layer;
94
+ if (isNumber(layer)) {
95
+ // 如果有layer属性,加入到node的label中
96
+ g.addNode({
97
+ id: node.id,
98
+ data: { width: width, height: height, layer: layer },
99
+ });
100
+ }
101
+ else {
102
+ g.addNode({
103
+ id: node.id,
104
+ data: { width: width, height: height },
105
+ });
106
+ }
107
+ });
108
+ if (sortByCombo) {
109
+ g.attachTreeStructure('combo');
110
+ nodes.forEach(function (node) {
111
+ var parentId = node.data.parentId;
112
+ if (parentId === undefined)
113
+ return;
114
+ if (g.hasNode(parentId)) {
115
+ g.setParent(node.id, parentId, 'combo');
116
+ }
117
+ });
118
+ }
119
+ edges.forEach(function (edge) {
120
+ // dagrejs Wiki https://github.com/dagrejs/dagre/wiki#configuring-the-layout
121
+ g.addEdge({
122
+ id: edge.id,
123
+ source: edge.source,
124
+ target: edge.target,
125
+ data: {
126
+ weight: edge.data.weight || 1,
127
+ },
128
+ });
129
+ });
130
+ prevGraph = undefined;
131
+ if (preset === null || preset === void 0 ? void 0 : preset.nodes) {
132
+ prevGraph = new Graph({
133
+ nodes: nodes,
134
+ });
135
+ }
136
+ layout(g, {
137
+ prevGraph: prevGraph,
138
+ edgeLabelSpace: edgeLabelSpace,
139
+ keepNodeOrder: !!nodeOrder,
140
+ nodeOrder: nodeOrder || [],
141
+ acyclicer: 'greedy',
142
+ ranker: 'network-simplex',
143
+ rankdir: rankdir,
144
+ nodesep: nodesep,
145
+ align: align,
146
+ });
147
+ layoutTopLeft = [0, 0];
148
+ if (begin) {
149
+ minX_1 = Infinity;
150
+ minY_1 = Infinity;
151
+ g.getAllNodes().forEach(function (node) {
152
+ if (minX_1 > node.data.x)
153
+ minX_1 = node.data.x;
154
+ if (minY_1 > node.data.y)
155
+ minY_1 = node.data.y;
156
+ });
157
+ g.getAllEdges().forEach(function (edge) {
158
+ var _a;
159
+ (_a = edge.data.points) === null || _a === void 0 ? void 0 : _a.forEach(function (point) {
160
+ if (minX_1 > point.x)
161
+ minX_1 = point.x;
162
+ if (minY_1 > point.y)
163
+ minY_1 = point.y;
164
+ });
165
+ });
166
+ layoutTopLeft[0] = begin[0] - minX_1;
167
+ layoutTopLeft[1] = begin[1] - minY_1;
168
+ }
169
+ isHorizontal = rankdir === 'LR' || rankdir === 'RL';
170
+ if (radial) {
171
+ // const focusId = (isString(focusNode) ? focusNode : focusNode?.id) as ID;
172
+ // const focusLayer = focusId ? g.getNode(focusId)?.data._rank as number : 0;
173
+ // const layers: any[] = [];
174
+ // const dim = isHorizontal ? "y" : "x";
175
+ // const sizeDim = isHorizontal ? "height" : "width";
176
+ // // 找到整个图作为环的坐标维度(dim)的最大、最小值,考虑节点宽度
177
+ // let min = Infinity;
178
+ // let max = -Infinity;
179
+ // g.getAllNodes().forEach((node) => {
180
+ // const currentNodesep = nodesepfunc(node);
181
+ // if (focusLayer === 0) {
182
+ // if (!layers[node.data._rank!]) {
183
+ // layers[node.data._rank!] = {
184
+ // nodes: [],
185
+ // totalWidth: 0,
186
+ // maxSize: -Infinity,
187
+ // };
188
+ // }
189
+ // layers[node.data._rank!].nodes.push(node);
190
+ // layers[node.data._rank!].totalWidth += currentNodesep * 2 + node.data[sizeDim]!;
191
+ // if (
192
+ // layers[node.data._rank!].maxSize < Math.max(node.data.width!, node.data.height!)
193
+ // ) {
194
+ // layers[node.data._rank!].maxSize = Math.max(node.data.width!, node.data.height!);
195
+ // }
196
+ // } else {
197
+ // const diffLayer = node.data._rank! - focusLayer!;
198
+ // if (diffLayer === 0) {
199
+ // if (!layers[diffLayer]) {
200
+ // layers[diffLayer] = {
201
+ // nodes: [],
202
+ // totalWidth: 0,
203
+ // maxSize: -Infinity,
204
+ // };
205
+ // }
206
+ // layers[diffLayer].nodes.push(node);
207
+ // layers[diffLayer].totalWidth += currentNodesep * 2 + node.data[sizeDim]!;
208
+ // if (
209
+ // layers[diffLayer].maxSize < Math.max(node.data.width!, node.data.height!)
210
+ // ) {
211
+ // layers[diffLayer].maxSize = Math.max(node.data.width!, node.data.height!);
212
+ // }
213
+ // } else {
214
+ // const diffLayerAbs = Math.abs(diffLayer);
215
+ // if (!layers[diffLayerAbs]) {
216
+ // layers[diffLayerAbs] = {
217
+ // left: [],
218
+ // right: [],
219
+ // totalWidth: 0,
220
+ // maxSize: -Infinity,
221
+ // };
222
+ // }
223
+ // layers[diffLayerAbs].totalWidth +=
224
+ // currentNodesep * 2 + node.data[sizeDim]!;
225
+ // if (
226
+ // layers[diffLayerAbs].maxSize < Math.max(node.data.width!, node.data.height!)
227
+ // ) {
228
+ // layers[diffLayerAbs].maxSize = Math.max(
229
+ // node.data.width!,
230
+ // node.data.height!
231
+ // );
232
+ // }
233
+ // if (diffLayer < 0) {
234
+ // layers[diffLayerAbs].left.push(node);
235
+ // } else {
236
+ // layers[diffLayerAbs].right.push(node);
237
+ // }
238
+ // }
239
+ // }
240
+ // const leftPos = node.data[dim]! - node.data[sizeDim]! / 2 - currentNodesep;
241
+ // const rightPos = node.data[dim]! + node.data[sizeDim]! / 2 + currentNodesep;
242
+ // if (leftPos < min) min = leftPos;
243
+ // if (rightPos > max) max = rightPos;
244
+ // });
245
+ // // const padding = (max - min) * 0.1; // TODO
246
+ // // 初始化为第一圈的半径,后面根据每层 ranksep 叠加
247
+ // let radius = ranksep || 50; // TODO;
248
+ // const radiusMap: any = {};
249
+ // // 扩大最大最小值范围,以便为环上留出接缝处的空隙
250
+ // const rangeLength = (max - min) / 0.9;
251
+ // const range = [
252
+ // (min + max - rangeLength) * 0.5,
253
+ // (min + max + rangeLength) * 0.5,
254
+ // ];
255
+ // // 根据半径、分布比例,计算节点在环上的位置,并返回该组节点中最大的 ranksep 值
256
+ // const processNodes = (
257
+ // layerNodes: any,
258
+ // radius: number,
259
+ // propsMaxRanksep = -Infinity,
260
+ // arcRange = [0, 1]
261
+ // ) => {
262
+ // let maxRanksep = propsMaxRanksep;
263
+ // layerNodes.forEach((node: any) => {
264
+ // const coord = g.node(node);
265
+ // radiusMap[node] = radius;
266
+ // // 获取变形为 radial 后的直角坐标系坐标
267
+ // const { x: newX, y: newY } = getRadialPos(
268
+ // coord![dim]!,
269
+ // range,
270
+ // rangeLength,
271
+ // radius,
272
+ // arcRange
273
+ // );
274
+ // // 将新坐标写入源数据
275
+ // const i = nodes.findIndex((it) => it.id === node);
276
+ // if (!nodes[i]) return;
277
+ // nodes[i].x = newX + dBegin[0];
278
+ // nodes[i].y = newY + dBegin[1];
279
+ // // @ts-ignore: pass layer order to data for increment layout use
280
+ // nodes[i]._order = coord._order;
281
+ // // 找到本层最大的一个 ranksep,作为下一层与本层的间隙,叠加到下一层的半径上
282
+ // const currentNodeRanksep = ranksepfunc(nodes[i]);
283
+ // if (maxRanksep < currentNodeRanksep) maxRanksep = currentNodeRanksep;
284
+ // });
285
+ // return maxRanksep;
286
+ // };
287
+ // let isFirstLevel = true;
288
+ // const lastLayerMaxNodeSize = 0;
289
+ // layers.forEach((layerNodes) => {
290
+ // if (
291
+ // !layerNodes?.nodes?.length &&
292
+ // !layerNodes?.left?.length &&
293
+ // !layerNodes?.right?.length
294
+ // ) {
295
+ // return;
296
+ // }
297
+ // // 第一层只有一个节点,直接放在圆心,初始半径设定为 0
298
+ // if (isFirstLevel && layerNodes.nodes.length === 1) {
299
+ // // 将新坐标写入源数据
300
+ // const i = nodes.findIndex((it) => it.id === layerNodes.nodes[0]);
301
+ // if (i <= -1) return;
302
+ // nodes[i].x = dBegin[0];
303
+ // nodes[i].y = dBegin[1];
304
+ // radiusMap[layerNodes.nodes[0]] = 0;
305
+ // radius = ranksepfunc(nodes[i]);
306
+ // isFirstLevel = false;
307
+ // return;
308
+ // }
309
+ // // 为接缝留出空隙,半径也需要扩大
310
+ // radius = Math.max(radius, layerNodes.totalWidth / (2 * Math.PI)); // / 0.9;
311
+ // let maxRanksep = -Infinity;
312
+ // if (focusLayer === 0 || layerNodes.nodes?.length) {
313
+ // maxRanksep = processNodes(
314
+ // layerNodes.nodes,
315
+ // radius,
316
+ // maxRanksep,
317
+ // [0, 1]
318
+ // ); // 0.8
319
+ // } else {
320
+ // const leftRatio =
321
+ // layerNodes.left?.length /
322
+ // (layerNodes.left?.length + layerNodes.right?.length);
323
+ // maxRanksep = processNodes(layerNodes.left, radius, maxRanksep, [
324
+ // 0,
325
+ // leftRatio,
326
+ // ]); // 接缝留出 0.05 的缝隙
327
+ // maxRanksep = processNodes(layerNodes.right, radius, maxRanksep, [
328
+ // leftRatio + 0.05,
329
+ // 1,
330
+ // ]); // 接缝留出 0.05 的缝隙
331
+ // }
332
+ // radius += maxRanksep;
333
+ // isFirstLevel = false;
334
+ // lastLayerMaxNodeSize - layerNodes.maxSize;
335
+ // });
336
+ // g.edges().forEach((edge: any) => {
337
+ // const coord = g.edge(edge);
338
+ // const i = edges.findIndex((it) => {
339
+ // const source = getEdgeTerminal(it, "source");
340
+ // const target = getEdgeTerminal(it, "target");
341
+ // return source === edge.v && target === edge.w;
342
+ // });
343
+ // if (i <= -1) return;
344
+ // if (
345
+ // self.edgeLabelSpace &&
346
+ // self.controlPoints &&
347
+ // edges[i].type !== "loop"
348
+ // ) {
349
+ // const otherDim = dim === "x" ? "y" : "x";
350
+ // const controlPoints = coord?.points?.slice(
351
+ // 1,
352
+ // coord.points.length - 1
353
+ // );
354
+ // const newControlPoints: Point[] = [];
355
+ // const sourceOtherDimValue = g.node(edge.v)?.[otherDim]!;
356
+ // const otherDimDist =
357
+ // sourceOtherDimValue - g.node(edge.w)?.[otherDim]!;
358
+ // const sourceRadius = radiusMap[edge.v];
359
+ // const radiusDist = sourceRadius - radiusMap[edge.w];
360
+ // controlPoints?.forEach((point: any) => {
361
+ // // 根据该边的起点、终点半径,及起点、终点、控制点位置关系,确定该控制点的半径
362
+ // const cRadius =
363
+ // ((point[otherDim] - sourceOtherDimValue) / otherDimDist) *
364
+ // radiusDist +
365
+ // sourceRadius;
366
+ // // 获取变形为 radial 后的直角坐标系坐标
367
+ // const newPos = getRadialPos(
368
+ // point[dim],
369
+ // range,
370
+ // rangeLength,
371
+ // cRadius
372
+ // );
373
+ // newControlPoints.push({
374
+ // x: newPos.x + dBegin[0],
375
+ // y: newPos.y + dBegin[1],
376
+ // });
377
+ // });
378
+ // edges[i].controlPoints = newControlPoints;
379
+ // }
380
+ // });
381
+ }
382
+ else {
383
+ layerCoords_1 = new Set();
384
+ isInvert = rankdir === 'BT' || rankdir === 'RL';
385
+ layerCoordSort = isInvert
386
+ ? function (a, b) { return b - a; }
387
+ : function (a, b) { return a - b; };
388
+ g.getAllNodes().forEach(function (node) {
389
+ // let ndata: any = this.nodeMap[node];
390
+ // if (!ndata) {
391
+ // ndata = combos?.find((it) => it.id === node);
392
+ // }
393
+ // if (!ndata) return;
394
+ // ndata.x = node.data.x! + dBegin[0];
395
+ // ndata.y = node.data.y! + dBegin[1];
396
+ // // pass layer order to data for increment layout use
397
+ // ndata._order = node.data._order;
398
+ // layerCoords.add(isHorizontal ? ndata.x : ndata.y);
399
+ node.data.x = node.data.x + layoutTopLeft[0];
400
+ node.data.y = node.data.y + layoutTopLeft[1];
401
+ layerCoords_1.add(isHorizontal ? node.data.x : node.data.y);
402
+ });
403
+ layerCoordsArr_1 = Array.from(layerCoords_1).sort(layerCoordSort);
404
+ isDifferentLayer_1 = isHorizontal
405
+ ? function (point1, point2) { return point1.x !== point2.x; }
406
+ : function (point1, point2) { return point1.y !== point2.y; };
407
+ filterControlPointsOutOfBoundary_1 = isHorizontal
408
+ ? function (ps, point1, point2) {
409
+ var max = Math.max(point1.y, point2.y);
410
+ var min = Math.min(point1.y, point2.y);
411
+ return ps.filter(function (point) { return point.y <= max && point.y >= min; });
412
+ }
413
+ : function (ps, point1, point2) {
414
+ var max = Math.max(point1.x, point2.x);
415
+ var min = Math.min(point1.x, point2.x);
416
+ return ps.filter(function (point) { return point.x <= max && point.x >= min; });
417
+ };
418
+ g.getAllEdges().forEach(function (edge, i) {
419
+ var _a;
420
+ // const i = edges.findIndex((it) => {
421
+ // return it.source === edge.source && it.target === edge.target;
422
+ // });
423
+ // if (i <= -1) return;
424
+ if (edgeLabelSpace && controlPoints && edge.data.type !== 'loop') {
425
+ edge.data.controlPoints = getControlPoints((_a = edge.data.points) === null || _a === void 0 ? void 0 : _a.map(function (_a) {
426
+ var x = _a.x, y = _a.y;
427
+ return ({
428
+ x: x + layoutTopLeft[0],
429
+ y: y + layoutTopLeft[1],
430
+ });
431
+ }), g.getNode(edge.source), g.getNode(edge.target), layerCoordsArr_1, isHorizontal, isDifferentLayer_1, filterControlPointsOutOfBoundary_1);
432
+ }
433
+ });
434
+ }
435
+ layoutNodes = [];
436
+ // layout according to the original order in the data.nodes
437
+ layoutNodes = g
438
+ .getAllNodes()
439
+ .map(function (node) { return cloneFormatData(node); });
440
+ layoutEdges = g.getAllEdges();
441
+ if (assign) {
442
+ layoutNodes.forEach(function (node) {
443
+ graph.mergeNodeData(node.id, {
444
+ x: node.data.x,
445
+ y: node.data.y,
446
+ });
447
+ });
448
+ layoutEdges.forEach(function (edge) {
449
+ graph.mergeEdgeData(edge.id, {
450
+ controlPoints: edge.data.controlPoints,
451
+ });
452
+ });
453
+ }
454
+ result = {
455
+ nodes: layoutNodes,
456
+ edges: layoutEdges,
457
+ };
458
+ return [2 /*return*/, result];
459
+ });
460
+ });
461
+ };
462
+ return DagreLayout;
463
+ }());
464
+ export { DagreLayout };
465
+ /**
466
+ * Format controlPoints to avoid polylines crossing nodes
467
+ * @param points
468
+ * @param sourceNode
469
+ * @param targetNode
470
+ * @param layerCoordsArr
471
+ * @param isHorizontal
472
+ * @returns
473
+ */
474
+ var getControlPoints = function (points, sourceNode, targetNode, layerCoordsArr, isHorizontal, isDifferentLayer, filterControlPointsOutOfBoundary) {
475
+ var controlPoints = (points === null || points === void 0 ? void 0 : points.slice(1, points.length - 1)) || []; // 去掉头尾
476
+ // 酌情增加控制点,使折线不穿过跨层的节点
477
+ if (sourceNode && targetNode) {
478
+ var _a = sourceNode.data, sourceX = _a.x, sourceY = _a.y;
479
+ var _b = targetNode.data, targetX = _b.x, targetY = _b.y;
480
+ if (isHorizontal) {
481
+ sourceX = sourceNode.data.y;
482
+ sourceY = sourceNode.data.x;
483
+ targetX = targetNode.data.y;
484
+ targetY = targetNode.data.x;
485
+ }
486
+ // 为跨层级的边增加第一个控制点。忽略垂直的/横向的边。
487
+ // 新控制点 = {
488
+ // x: 终点x,
489
+ // y: (起点y + 下一层y) / 2, #下一层y可能不等于终点y
490
+ // }
491
+ if (targetY !== sourceY && sourceX !== targetX) {
492
+ var sourceLayer = layerCoordsArr.indexOf(sourceY);
493
+ var sourceNextLayerCoord = layerCoordsArr[sourceLayer + 1];
494
+ if (sourceNextLayerCoord) {
495
+ var firstControlPoint = controlPoints[0];
496
+ var insertStartControlPoint = (isHorizontal
497
+ ? {
498
+ x: (sourceY + sourceNextLayerCoord) / 2,
499
+ y: (firstControlPoint === null || firstControlPoint === void 0 ? void 0 : firstControlPoint.y) || targetX,
500
+ }
501
+ : {
502
+ x: (firstControlPoint === null || firstControlPoint === void 0 ? void 0 : firstControlPoint.x) || targetX,
503
+ y: (sourceY + sourceNextLayerCoord) / 2,
504
+ });
505
+ // 当新增的控制点不存在(!=当前第一个控制点)时添加
506
+ if (!firstControlPoint ||
507
+ isDifferentLayer(firstControlPoint, insertStartControlPoint)) {
508
+ controlPoints.unshift(insertStartControlPoint);
509
+ }
510
+ }
511
+ var targetLayer = layerCoordsArr.indexOf(targetY);
512
+ var layerDiff = Math.abs(targetLayer - sourceLayer);
513
+ if (layerDiff === 1) {
514
+ controlPoints = filterControlPointsOutOfBoundary(controlPoints, sourceNode.data, targetNode.data);
515
+ // one controlPoint at least
516
+ if (!controlPoints.length) {
517
+ controlPoints.push((isHorizontal
518
+ ? {
519
+ x: (sourceY + targetY) / 2,
520
+ y: sourceX,
521
+ }
522
+ : {
523
+ x: sourceX,
524
+ y: (sourceY + targetY) / 2,
525
+ }));
526
+ }
527
+ }
528
+ else if (layerDiff > 1) {
529
+ var targetLastLayerCoord = layerCoordsArr[targetLayer - 1];
530
+ if (targetLastLayerCoord) {
531
+ var lastControlPoints = controlPoints[controlPoints.length - 1];
532
+ var insertEndControlPoint = (isHorizontal
533
+ ? {
534
+ x: (targetY + targetLastLayerCoord) / 2,
535
+ y: (lastControlPoints === null || lastControlPoints === void 0 ? void 0 : lastControlPoints.y) || targetX,
536
+ }
537
+ : {
538
+ x: (lastControlPoints === null || lastControlPoints === void 0 ? void 0 : lastControlPoints.x) || sourceX,
539
+ y: (targetY + targetLastLayerCoord) / 2,
540
+ });
541
+ // 当新增的控制点不存在(!=当前最后一个控制点)时添加
542
+ if (!lastControlPoints ||
543
+ isDifferentLayer(lastControlPoints, insertEndControlPoint)) {
544
+ controlPoints.push(insertEndControlPoint);
545
+ }
546
+ }
547
+ }
548
+ }
549
+ }
550
+ return controlPoints;
551
+ };
552
+ //# sourceMappingURL=dagre.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dagre.js","sourceRoot":"","sources":["../src/dagre.ts"],"names":[],"mappings":"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"}