@antv/layout 0.2.0 → 0.2.3
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.
- package/dist/layout.min.js +1 -1
- package/dist/layout.min.js.LICENSE.txt +0 -9
- package/dist/layout.min.js.map +1 -1
- package/es/layout/circular.js.map +1 -1
- package/es/layout/comboCombined.js +3 -19
- package/es/layout/comboCombined.js.map +1 -1
- package/es/layout/concentric.js.map +1 -1
- package/es/layout/dagre/graph.d.ts +91 -0
- package/es/layout/dagre/graph.js +4 -0
- package/es/layout/dagre/graph.js.map +1 -0
- package/es/layout/dagre/index.d.ts +3 -4
- package/es/layout/dagre/index.js +0 -2
- package/es/layout/dagre/index.js.map +1 -1
- package/es/layout/dagre/src/acyclic.d.ts +1 -2
- package/es/layout/dagre/src/acyclic.js +7 -7
- package/es/layout/dagre/src/acyclic.js.map +1 -1
- package/es/layout/dagre/src/add-border-segments.d.ts +1 -2
- package/es/layout/dagre/src/add-border-segments.js +5 -5
- package/es/layout/dagre/src/add-border-segments.js.map +1 -1
- package/es/layout/dagre/src/coordinate-system.d.ts +1 -2
- package/es/layout/dagre/src/coordinate-system.js +15 -5
- package/es/layout/dagre/src/coordinate-system.js.map +1 -1
- package/es/layout/dagre/src/data/list.d.ts +9 -5
- package/es/layout/dagre/src/data/list.js +25 -27
- package/es/layout/dagre/src/data/list.js.map +1 -1
- package/es/layout/dagre/src/debug.d.ts +2 -3
- package/es/layout/dagre/src/debug.js +3 -5
- package/es/layout/dagre/src/debug.js.map +1 -1
- package/es/layout/dagre/src/greedy-fas.d.ts +2 -3
- package/es/layout/dagre/src/greedy-fas.js +16 -15
- package/es/layout/dagre/src/greedy-fas.js.map +1 -1
- package/es/layout/dagre/src/layout.d.ts +2 -3
- package/es/layout/dagre/src/layout.js +170 -91
- package/es/layout/dagre/src/layout.js.map +1 -1
- package/es/layout/dagre/src/nesting-graph.d.ts +1 -2
- package/es/layout/dagre/src/nesting-graph.js +15 -10
- package/es/layout/dagre/src/nesting-graph.js.map +1 -1
- package/es/layout/dagre/src/normalize.d.ts +1 -2
- package/es/layout/dagre/src/normalize.js +12 -11
- package/es/layout/dagre/src/normalize.js.map +1 -1
- package/es/layout/dagre/src/order/add-subgraph-constraints.d.ts +1 -2
- package/es/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -1
- package/es/layout/dagre/src/order/barycenter.d.ts +1 -2
- package/es/layout/dagre/src/order/barycenter.js.map +1 -1
- package/es/layout/dagre/src/order/build-layer-graph.d.ts +2 -3
- package/es/layout/dagre/src/order/build-layer-graph.js +12 -8
- package/es/layout/dagre/src/order/build-layer-graph.js.map +1 -1
- package/es/layout/dagre/src/order/cross-count.d.ts +2 -3
- package/es/layout/dagre/src/order/cross-count.js +13 -12
- package/es/layout/dagre/src/order/cross-count.js.map +1 -1
- package/es/layout/dagre/src/order/index.d.ts +2 -3
- package/es/layout/dagre/src/order/index.js +17 -15
- package/es/layout/dagre/src/order/index.js.map +1 -1
- package/es/layout/dagre/src/order/init-data-order.d.ts +1 -2
- package/es/layout/dagre/src/order/init-data-order.js +3 -5
- package/es/layout/dagre/src/order/init-data-order.js.map +1 -1
- package/es/layout/dagre/src/order/init-order.d.ts +2 -3
- package/es/layout/dagre/src/order/init-order.js +1 -2
- package/es/layout/dagre/src/order/init-order.js.map +1 -1
- package/es/layout/dagre/src/order/resolve-conflicts.d.ts +18 -3
- package/es/layout/dagre/src/order/resolve-conflicts.js +9 -29
- package/es/layout/dagre/src/order/resolve-conflicts.js.map +1 -1
- package/es/layout/dagre/src/order/sort-subgraph.d.ts +6 -3
- package/es/layout/dagre/src/order/sort-subgraph.js +19 -14
- package/es/layout/dagre/src/order/sort-subgraph.js.map +1 -1
- package/es/layout/dagre/src/order/sort.d.ts +6 -1
- package/es/layout/dagre/src/order/sort.js +2 -2
- package/es/layout/dagre/src/order/sort.js.map +1 -1
- package/es/layout/dagre/src/parent-dummy-chains.d.ts +1 -2
- package/es/layout/dagre/src/parent-dummy-chains.js +47 -44
- package/es/layout/dagre/src/parent-dummy-chains.js.map +1 -1
- package/es/layout/dagre/src/position/bk.d.ts +22 -31
- package/es/layout/dagre/src/position/bk.js +49 -83
- package/es/layout/dagre/src/position/bk.js.map +1 -1
- package/es/layout/dagre/src/position/index.d.ts +1 -2
- package/es/layout/dagre/src/position/index.js +12 -14
- package/es/layout/dagre/src/position/index.js.map +1 -1
- package/es/layout/dagre/src/rank/feasible-tree.d.ts +5 -6
- package/es/layout/dagre/src/rank/feasible-tree.js +1 -2
- package/es/layout/dagre/src/rank/feasible-tree.js.map +1 -1
- package/es/layout/dagre/src/rank/index.d.ts +2 -3
- package/es/layout/dagre/src/rank/index.js.map +1 -1
- package/es/layout/dagre/src/rank/network-simplex.d.ts +8 -11
- package/es/layout/dagre/src/rank/network-simplex.js +18 -31
- package/es/layout/dagre/src/rank/network-simplex.js.map +1 -1
- package/es/layout/dagre/src/rank/util.d.ts +4 -5
- package/es/layout/dagre/src/rank/util.js +37 -20
- package/es/layout/dagre/src/rank/util.js.map +1 -1
- package/es/layout/dagre/src/util.d.ts +29 -48
- package/es/layout/dagre/src/util.js +91 -101
- package/es/layout/dagre/src/util.js.map +1 -1
- package/es/layout/dagre.d.ts +1 -1
- package/es/layout/dagre.js +28 -24
- package/es/layout/dagre.js.map +1 -1
- package/es/layout/fruchterman.js.map +1 -1
- package/es/layout/gForce.js +14 -6
- package/es/layout/gForce.js.map +1 -1
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/layout/circular.js.map +1 -1
- package/lib/layout/comboCombined.js +2 -18
- package/lib/layout/comboCombined.js.map +1 -1
- package/lib/layout/comboForce.js +5 -5
- package/lib/layout/comboForce.js.map +1 -1
- package/lib/layout/concentric.js.map +1 -1
- package/lib/layout/dagre/graph.d.ts +91 -0
- package/lib/layout/dagre/graph.js +28 -0
- package/lib/layout/dagre/graph.js.map +1 -0
- package/lib/layout/dagre/index.d.ts +3 -4
- package/lib/layout/dagre/index.js +0 -2
- package/lib/layout/dagre/index.js.map +1 -1
- package/lib/layout/dagre/src/acyclic.d.ts +1 -2
- package/lib/layout/dagre/src/acyclic.js +7 -7
- package/lib/layout/dagre/src/acyclic.js.map +1 -1
- package/lib/layout/dagre/src/add-border-segments.d.ts +1 -2
- package/lib/layout/dagre/src/add-border-segments.js +5 -8
- package/lib/layout/dagre/src/add-border-segments.js.map +1 -1
- package/lib/layout/dagre/src/coordinate-system.d.ts +1 -2
- package/lib/layout/dagre/src/coordinate-system.js +15 -5
- package/lib/layout/dagre/src/coordinate-system.js.map +1 -1
- package/lib/layout/dagre/src/data/list.d.ts +9 -5
- package/lib/layout/dagre/src/data/list.js +25 -26
- package/lib/layout/dagre/src/data/list.js.map +1 -1
- package/lib/layout/dagre/src/debug.d.ts +2 -3
- package/lib/layout/dagre/src/debug.js +6 -11
- package/lib/layout/dagre/src/debug.js.map +1 -1
- package/lib/layout/dagre/src/greedy-fas.d.ts +2 -3
- package/lib/layout/dagre/src/greedy-fas.js +41 -15
- package/lib/layout/dagre/src/greedy-fas.js.map +1 -1
- package/lib/layout/dagre/src/layout.d.ts +2 -3
- package/lib/layout/dagre/src/layout.js +171 -100
- package/lib/layout/dagre/src/layout.js.map +1 -1
- package/lib/layout/dagre/src/nesting-graph.d.ts +1 -2
- package/lib/layout/dagre/src/nesting-graph.js +15 -13
- package/lib/layout/dagre/src/nesting-graph.js.map +1 -1
- package/lib/layout/dagre/src/normalize.d.ts +1 -2
- package/lib/layout/dagre/src/normalize.js +12 -14
- package/lib/layout/dagre/src/normalize.js.map +1 -1
- package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +1 -2
- package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -1
- package/lib/layout/dagre/src/order/barycenter.d.ts +1 -2
- package/lib/layout/dagre/src/order/barycenter.js.map +1 -1
- package/lib/layout/dagre/src/order/build-layer-graph.d.ts +2 -3
- package/lib/layout/dagre/src/order/build-layer-graph.js +13 -12
- package/lib/layout/dagre/src/order/build-layer-graph.js.map +1 -1
- package/lib/layout/dagre/src/order/cross-count.d.ts +2 -3
- package/lib/layout/dagre/src/order/cross-count.js +14 -13
- package/lib/layout/dagre/src/order/cross-count.js.map +1 -1
- package/lib/layout/dagre/src/order/index.d.ts +2 -3
- package/lib/layout/dagre/src/order/index.js +15 -13
- package/lib/layout/dagre/src/order/index.js.map +1 -1
- package/lib/layout/dagre/src/order/init-data-order.d.ts +1 -2
- package/lib/layout/dagre/src/order/init-data-order.js +3 -5
- package/lib/layout/dagre/src/order/init-data-order.js.map +1 -1
- package/lib/layout/dagre/src/order/init-order.d.ts +2 -3
- package/lib/layout/dagre/src/order/init-order.js +1 -2
- package/lib/layout/dagre/src/order/init-order.js.map +1 -1
- package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +18 -3
- package/lib/layout/dagre/src/order/resolve-conflicts.js +9 -29
- package/lib/layout/dagre/src/order/resolve-conflicts.js.map +1 -1
- package/lib/layout/dagre/src/order/sort-subgraph.d.ts +6 -3
- package/lib/layout/dagre/src/order/sort-subgraph.js +16 -11
- package/lib/layout/dagre/src/order/sort-subgraph.js.map +1 -1
- package/lib/layout/dagre/src/order/sort.d.ts +6 -1
- package/lib/layout/dagre/src/order/sort.js +2 -5
- package/lib/layout/dagre/src/order/sort.js.map +1 -1
- package/lib/layout/dagre/src/parent-dummy-chains.d.ts +1 -2
- package/lib/layout/dagre/src/parent-dummy-chains.js +47 -44
- package/lib/layout/dagre/src/parent-dummy-chains.js.map +1 -1
- package/lib/layout/dagre/src/position/bk.d.ts +22 -31
- package/lib/layout/dagre/src/position/bk.js +75 -85
- package/lib/layout/dagre/src/position/bk.js.map +1 -1
- package/lib/layout/dagre/src/position/index.d.ts +1 -2
- package/lib/layout/dagre/src/position/index.js +14 -17
- package/lib/layout/dagre/src/position/index.js.map +1 -1
- package/lib/layout/dagre/src/rank/feasible-tree.d.ts +5 -6
- package/lib/layout/dagre/src/rank/feasible-tree.js +3 -7
- package/lib/layout/dagre/src/rank/feasible-tree.js.map +1 -1
- package/lib/layout/dagre/src/rank/index.d.ts +2 -3
- package/lib/layout/dagre/src/rank/index.js.map +1 -1
- package/lib/layout/dagre/src/rank/network-simplex.d.ts +8 -11
- package/lib/layout/dagre/src/rank/network-simplex.js +27 -35
- package/lib/layout/dagre/src/rank/network-simplex.js.map +1 -1
- package/lib/layout/dagre/src/rank/util.d.ts +4 -5
- package/lib/layout/dagre/src/rank/util.js +36 -19
- package/lib/layout/dagre/src/rank/util.js.map +1 -1
- package/lib/layout/dagre/src/util.d.ts +29 -48
- package/lib/layout/dagre/src/util.js +80 -92
- package/lib/layout/dagre/src/util.js.map +1 -1
- package/lib/layout/dagre.d.ts +1 -1
- package/lib/layout/dagre.js +27 -23
- package/lib/layout/dagre.js.map +1 -1
- package/lib/layout/er/core.js +5 -1
- package/lib/layout/er/core.js.map +1 -1
- package/lib/layout/force/force-in-a-box.js +7 -3
- package/lib/layout/force/force-in-a-box.js.map +1 -1
- package/lib/layout/force/force.js +5 -1
- package/lib/layout/force/force.js.map +1 -1
- package/lib/layout/force/index.js +5 -1
- package/lib/layout/force/index.js.map +1 -1
- package/lib/layout/fruchterman.js.map +1 -1
- package/lib/layout/gForce.js +10 -2
- package/lib/layout/gForce.js.map +1 -1
- package/lib/layout/grid.js +2 -2
- package/lib/layout/grid.js.map +1 -1
- package/lib/layout/index.js +5 -1
- package/lib/layout/index.js.map +1 -1
- package/lib/layout/radial/index.js +5 -1
- package/lib/layout/radial/index.js.map +1 -1
- package/lib/registy/index.js +1 -1
- package/lib/registy/index.js.map +1 -1
- package/lib/util/index.js +5 -1
- package/lib/util/index.js.map +1 -1
- package/package.json +3 -2
- package/src/index.ts +7 -0
- package/src/layout/base.ts +54 -0
- package/src/layout/circular.ts +369 -0
- package/src/layout/comboCombined.ts +390 -0
- package/src/layout/comboForce.ts +873 -0
- package/src/layout/concentric.ts +289 -0
- package/src/layout/constants.ts +21 -0
- package/src/layout/dagre/graph.ts +104 -0
- package/src/layout/dagre/index.ts +31 -0
- package/src/layout/dagre/src/acyclic.ts +58 -0
- package/src/layout/dagre/src/add-border-segments.ts +47 -0
- package/src/layout/dagre/src/coordinate-system.ts +77 -0
- package/src/layout/dagre/src/data/list.ts +60 -0
- package/src/layout/dagre/src/debug.ts +30 -0
- package/src/layout/dagre/src/greedy-fas.ts +144 -0
- package/src/layout/dagre/src/layout.ts +580 -0
- package/src/layout/dagre/src/nesting-graph.ts +143 -0
- package/src/layout/dagre/src/normalize.ts +96 -0
- package/src/layout/dagre/src/order/add-subgraph-constraints.ts +29 -0
- package/src/layout/dagre/src/order/barycenter.ts +26 -0
- package/src/layout/dagre/src/order/build-layer-graph.ts +82 -0
- package/src/layout/dagre/src/order/cross-count.ts +77 -0
- package/src/layout/dagre/src/order/index.ts +105 -0
- package/src/layout/dagre/src/order/init-data-order.ts +27 -0
- package/src/layout/dagre/src/order/init-order.ts +56 -0
- package/src/layout/dagre/src/order/resolve-conflicts.ts +152 -0
- package/src/layout/dagre/src/order/sort-subgraph.ts +105 -0
- package/src/layout/dagre/src/order/sort.ts +76 -0
- package/src/layout/dagre/src/parent-dummy-chains.ts +102 -0
- package/src/layout/dagre/src/position/bk.ts +494 -0
- package/src/layout/dagre/src/position/index.ts +82 -0
- package/src/layout/dagre/src/rank/feasible-tree.ts +165 -0
- package/src/layout/dagre/src/rank/index.ts +54 -0
- package/src/layout/dagre/src/rank/network-simplex.ts +225 -0
- package/src/layout/dagre/src/rank/util.ts +157 -0
- package/src/layout/dagre/src/util.ts +308 -0
- package/src/layout/dagre.ts +423 -0
- package/src/layout/dagreCompound.ts +518 -0
- package/src/layout/er/core.ts +117 -0
- package/src/layout/er/forceGrid.ts +95 -0
- package/src/layout/er/grid.ts +185 -0
- package/src/layout/er/index.ts +68 -0
- package/src/layout/er/mysqlWorkbench.ts +345 -0
- package/src/layout/er/type.ts +39 -0
- package/src/layout/force/force-in-a-box.ts +400 -0
- package/src/layout/force/force.ts +391 -0
- package/src/layout/force/index.ts +1 -0
- package/src/layout/forceAtlas2/body.ts +115 -0
- package/src/layout/forceAtlas2/index.ts +556 -0
- package/src/layout/forceAtlas2/quad.ts +115 -0
- package/src/layout/forceAtlas2/quadTree.ts +107 -0
- package/src/layout/fruchterman.ts +361 -0
- package/src/layout/gForce.ts +487 -0
- package/src/layout/gpu/fruchterman.ts +314 -0
- package/src/layout/gpu/fruchtermanShader.ts +204 -0
- package/src/layout/gpu/gForce.ts +406 -0
- package/src/layout/gpu/gForceShader.ts +221 -0
- package/src/layout/grid.ts +391 -0
- package/src/layout/index.ts +45 -0
- package/src/layout/layout.ts +75 -0
- package/src/layout/mds.ts +140 -0
- package/src/layout/radial/index.ts +1 -0
- package/src/layout/radial/mds.ts +51 -0
- package/src/layout/radial/radial.ts +500 -0
- package/src/layout/radial/radialNonoverlapForce.ts +189 -0
- package/src/layout/random.ts +75 -0
- package/src/layout/types.ts +421 -0
- package/src/registy/index.ts +43 -0
- package/src/util/array.ts +1 -0
- package/src/util/function.ts +64 -0
- package/src/util/gpu.ts +254 -0
- package/src/util/index.ts +6 -0
- package/src/util/math.ts +158 -0
- package/src/util/number.ts +8 -0
- package/src/util/object.ts +28 -0
- package/src/util/string.ts +18 -0
- package/CHANGELOG.md +0 -78
- package/es/layout/dagre/src/graphlib.d.ts +0 -2
- package/es/layout/dagre/src/graphlib.js +0 -51
- package/es/layout/dagre/src/graphlib.js.map +0 -1
- package/lib/layout/dagre/src/graphlib.d.ts +0 -2
- package/lib/layout/dagre/src/graphlib.js +0 -56
- package/lib/layout/dagre/src/graphlib.js.map +0 -1
package/src/util/gpu.ts
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { OutNode, Edge, IndexMap } from '../layout/types';
|
|
2
|
+
import { isNumber } from './';
|
|
3
|
+
import { getEdgeTerminal } from './math';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 将 number | Function 类型的参数转换为 return number 的 Function
|
|
8
|
+
* @param {number | Function} value 需要被转换的值
|
|
9
|
+
* @param {number} defaultV 返回函数的默认返回值
|
|
10
|
+
* @return {Function} 转换后的函数
|
|
11
|
+
*/
|
|
12
|
+
export const proccessToFunc = (value: number | Function | undefined, defaultV?: number): ((d?: any) => number) => {
|
|
13
|
+
let func;
|
|
14
|
+
if (!value) {
|
|
15
|
+
func = () => {
|
|
16
|
+
return defaultV || 1;
|
|
17
|
+
};
|
|
18
|
+
} else if (isNumber(value)) {
|
|
19
|
+
func = () => {
|
|
20
|
+
return value;
|
|
21
|
+
};
|
|
22
|
+
} else {
|
|
23
|
+
func = value;
|
|
24
|
+
}
|
|
25
|
+
return func as ((d?: any) => number);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 将节点和边数据转换为 GPU 可读的数组。并返回 maxEdgePerVetex,每个节点上最多的边数
|
|
30
|
+
* @param {NodeConfig[]} nodes 需要被转换的值
|
|
31
|
+
* @param {EdgeConfig[]} edges 返回函数的默认返回值
|
|
32
|
+
* @return {Object} 转换后的数组及 maxEdgePerVetex 组成的对象
|
|
33
|
+
*/
|
|
34
|
+
export const buildTextureData = (nodes: OutNode[], edges: Edge[]): {
|
|
35
|
+
array: Float32Array,
|
|
36
|
+
maxEdgePerVetex: number
|
|
37
|
+
} => {
|
|
38
|
+
const dataArray = [];
|
|
39
|
+
const nodeDict: any = [];
|
|
40
|
+
const mapIdPos: IndexMap = {};
|
|
41
|
+
let i = 0;
|
|
42
|
+
for (i = 0; i < nodes.length; i++) {
|
|
43
|
+
const n = nodes[i];
|
|
44
|
+
mapIdPos[n.id] = i;
|
|
45
|
+
dataArray.push(n.x);
|
|
46
|
+
dataArray.push(n.y);
|
|
47
|
+
dataArray.push(0);
|
|
48
|
+
dataArray.push(0);
|
|
49
|
+
nodeDict.push([]);
|
|
50
|
+
}
|
|
51
|
+
for (i = 0; i < edges.length; i++) {
|
|
52
|
+
const e = edges[i];
|
|
53
|
+
const source = getEdgeTerminal(e, 'source');
|
|
54
|
+
const target = getEdgeTerminal(e, 'target');
|
|
55
|
+
nodeDict[mapIdPos[source]].push(mapIdPos[target]);
|
|
56
|
+
nodeDict[mapIdPos[target]].push(mapIdPos[source]);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let maxEdgePerVetex = 0;
|
|
60
|
+
for (i = 0; i < nodes.length; i++) {
|
|
61
|
+
const offset: number = dataArray.length;
|
|
62
|
+
const dests = nodeDict[i];
|
|
63
|
+
const len = dests.length;
|
|
64
|
+
dataArray[i * 4 + 2] = offset;
|
|
65
|
+
dataArray[i * 4 + 3] = dests.length;
|
|
66
|
+
maxEdgePerVetex = Math.max(maxEdgePerVetex, dests.length);
|
|
67
|
+
for (let j = 0; j < len; ++j) {
|
|
68
|
+
const dest = dests[j];
|
|
69
|
+
dataArray.push(+dest);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
while (dataArray.length % 4 !== 0) {
|
|
74
|
+
dataArray.push(0);
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
maxEdgePerVetex,
|
|
78
|
+
array: new Float32Array(dataArray),
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* 将节点和边数据转换为 GPU 可读的数组,每条边带有一个属性。并返回 maxEdgePerVetex,每个节点上最多的边数
|
|
84
|
+
* @param {NodeConfig[]} nodes 节点数组
|
|
85
|
+
* @param {EdgeConfig[]} edges 边数组
|
|
86
|
+
* @param {Function} attrs 读取边属性的函数
|
|
87
|
+
* @return {Object} 转换后的数组及 maxEdgePerVetex 组成的对象
|
|
88
|
+
*/
|
|
89
|
+
// export const buildTextureDataWithOneEdgeAttr = (nodes: OutNode[], edges: Edge[], attrs: Function): {
|
|
90
|
+
// array: Float32Array,
|
|
91
|
+
// maxEdgePerVetex: number
|
|
92
|
+
// } => {
|
|
93
|
+
// const dataArray = [];
|
|
94
|
+
// const nodeDict: any = [];
|
|
95
|
+
// const mapIdPos: IndexMap = {};
|
|
96
|
+
// let i = 0;
|
|
97
|
+
// for (i = 0; i < nodes.length; i++) {
|
|
98
|
+
// const n = nodes[i];
|
|
99
|
+
// mapIdPos[n.id] = i;
|
|
100
|
+
// dataArray.push(n.x);
|
|
101
|
+
// dataArray.push(n.y);
|
|
102
|
+
// dataArray.push(0);
|
|
103
|
+
// dataArray.push(0);
|
|
104
|
+
// nodeDict.push([]);
|
|
105
|
+
// }
|
|
106
|
+
// for (i = 0; i < edges.length; i++) {
|
|
107
|
+
// const e = edges[i];
|
|
108
|
+
// nodeDict[mapIdPos[e.source]].push(mapIdPos[e.target]);
|
|
109
|
+
// nodeDict[mapIdPos[e.source]].push(attrs(e)); // 理想边长,后续可以改成每条边不同
|
|
110
|
+
// nodeDict[mapIdPos[e.target]].push(mapIdPos[e.source]);
|
|
111
|
+
// nodeDict[mapIdPos[e.target]].push(attrs(e)); // 理想边长,后续可以改成每条边不同
|
|
112
|
+
// }
|
|
113
|
+
|
|
114
|
+
// let maxEdgePerVetex = 0;
|
|
115
|
+
// for (i = 0; i < nodes.length; i++) {
|
|
116
|
+
// const offset: number = dataArray.length;
|
|
117
|
+
// const dests = nodeDict[i]; // dest 中节点 id 与边长间隔存储,即一位节点 id,一位边长……
|
|
118
|
+
// const len = dests.length;
|
|
119
|
+
// dataArray[i * 4 + 2] = offset;
|
|
120
|
+
// dataArray[i * 4 + 3] = len / 2; // 第四位存储与该节点相关的所有节点个数
|
|
121
|
+
// maxEdgePerVetex = Math.max(maxEdgePerVetex, len / 2);
|
|
122
|
+
// for (let j = 0; j < len; ++j) {
|
|
123
|
+
// const dest = dests[j];
|
|
124
|
+
// dataArray.push(+dest);
|
|
125
|
+
// }
|
|
126
|
+
// }
|
|
127
|
+
|
|
128
|
+
// // 不是 4 的倍数,填充 0
|
|
129
|
+
// while (dataArray.length % 4 !== 0) {
|
|
130
|
+
// dataArray.push(0);
|
|
131
|
+
// }
|
|
132
|
+
// return {
|
|
133
|
+
// array: new Float32Array(dataArray),
|
|
134
|
+
// maxEdgePerVetex
|
|
135
|
+
// }
|
|
136
|
+
// }
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* 将节点和边数据转换为 GPU 可读的数组,每条边带有一个以上属性。并返回 maxEdgePerVetex,每个节点上最多的边数
|
|
140
|
+
* @param {NodeConfig[]} nodes 节点数组
|
|
141
|
+
* @param {EdgeConfig[]} edges 边数组
|
|
142
|
+
* @param {Function} attrs 读取边属性的函数
|
|
143
|
+
* @return {Object} 转换后的数组及 maxEdgePerVetex 组成的对象
|
|
144
|
+
*/
|
|
145
|
+
export const buildTextureDataWithTwoEdgeAttr = (nodes: OutNode[], edges: Edge[], attrs1: Function, attrs2: Function): {
|
|
146
|
+
array: Float32Array,
|
|
147
|
+
maxEdgePerVetex: number
|
|
148
|
+
} => {
|
|
149
|
+
const dataArray = [];
|
|
150
|
+
const nodeDict: any = [];
|
|
151
|
+
const mapIdPos: IndexMap = {};
|
|
152
|
+
let i = 0;
|
|
153
|
+
for (i = 0; i < nodes.length; i++) {
|
|
154
|
+
const n = nodes[i];
|
|
155
|
+
mapIdPos[n.id] = i;
|
|
156
|
+
dataArray.push(n.x);
|
|
157
|
+
dataArray.push(n.y);
|
|
158
|
+
dataArray.push(0);
|
|
159
|
+
dataArray.push(0);
|
|
160
|
+
nodeDict.push([]);
|
|
161
|
+
}
|
|
162
|
+
for (i = 0; i < edges.length; i++) {
|
|
163
|
+
const e = edges[i];
|
|
164
|
+
const source = getEdgeTerminal(e, 'source');
|
|
165
|
+
const target = getEdgeTerminal(e, 'target');
|
|
166
|
+
nodeDict[mapIdPos[source]].push(mapIdPos[target]);
|
|
167
|
+
nodeDict[mapIdPos[source]].push(attrs1(e));
|
|
168
|
+
nodeDict[mapIdPos[source]].push(attrs2(e));
|
|
169
|
+
nodeDict[mapIdPos[source]].push(0);
|
|
170
|
+
nodeDict[mapIdPos[target]].push(mapIdPos[source]);
|
|
171
|
+
nodeDict[mapIdPos[target]].push(attrs1(e));
|
|
172
|
+
nodeDict[mapIdPos[target]].push(attrs2(e));
|
|
173
|
+
nodeDict[mapIdPos[target]].push(0);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
let maxEdgePerVetex = 0;
|
|
177
|
+
for (i = 0; i < nodes.length; i++) {
|
|
178
|
+
const offset: number = dataArray.length;
|
|
179
|
+
const dests = nodeDict[i]; // dest 中节点 id 与边长间隔存储,即一位节点 id,一位边长……
|
|
180
|
+
const len = dests.length;
|
|
181
|
+
// dataArray[i * 4 + 2] = offset;
|
|
182
|
+
// dataArray[i * 4 + 3] = len / 4; // 第四位存储与该节点相关的所有节点个数
|
|
183
|
+
// pack offset & length into float32: offset 20bit, length 12bit
|
|
184
|
+
dataArray[i * 4 + 2] = offset + 1048576 * len / 4;
|
|
185
|
+
dataArray[i * 4 + 3] = 0; // 第四位存储与上一次的距离差值
|
|
186
|
+
maxEdgePerVetex = Math.max(maxEdgePerVetex, len / 4);
|
|
187
|
+
for (let j = 0; j < len; ++j) {
|
|
188
|
+
const dest = dests[j];
|
|
189
|
+
dataArray.push(+dest);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// 不是 4 的倍数,填充 0
|
|
194
|
+
while (dataArray.length % 4 !== 0) {
|
|
195
|
+
dataArray.push(0);
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
maxEdgePerVetex,
|
|
199
|
+
array: new Float32Array(dataArray),
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* transform the extended attributes of nodes or edges to a texture array
|
|
204
|
+
* @param {string[]} attributeNames attributes' name to be read from items and put into output array
|
|
205
|
+
* @param {ModelConfig[]} items the items to be read
|
|
206
|
+
* @return {Float32Array} the attributes' value array to be read by GPU
|
|
207
|
+
*/
|
|
208
|
+
export const attributesToTextureData = (attributeNames: string[], items: any[]): { array: Float32Array, count: number } => {
|
|
209
|
+
const dataArray: any[] = [];
|
|
210
|
+
const attributeNum = attributeNames.length;
|
|
211
|
+
const attributteStringMap: any = {};
|
|
212
|
+
items.forEach((item: any) => {
|
|
213
|
+
attributeNames.forEach((name: string, i) => {
|
|
214
|
+
if (attributteStringMap[item[name]] === undefined) {
|
|
215
|
+
attributteStringMap[item[name]] = Object.keys(attributteStringMap).length;
|
|
216
|
+
}
|
|
217
|
+
dataArray.push(attributteStringMap[item[name]]);
|
|
218
|
+
// insure each node's attributes take inter number of grids
|
|
219
|
+
if (i === attributeNum - 1) {
|
|
220
|
+
while (dataArray.length % 4 !== 0) {
|
|
221
|
+
dataArray.push(0);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
return {
|
|
227
|
+
array: new Float32Array(dataArray),
|
|
228
|
+
count: Object.keys(attributteStringMap).length
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* transform the number array format of extended attributes of nodes or edges to a texture array
|
|
234
|
+
* @param {string[]} attributeNames attributes' name to be read from items and put into output array
|
|
235
|
+
* @return {Float32Array} the attributes' value array to be read by GPU
|
|
236
|
+
*/
|
|
237
|
+
export const arrayToTextureData = (valueArrays: number[][]): Float32Array => {
|
|
238
|
+
const dataArray: any[] = [];
|
|
239
|
+
const attributeNum = valueArrays.length;
|
|
240
|
+
const itemNum = valueArrays[0].length;
|
|
241
|
+
for (let j = 0; j < itemNum; j++) {
|
|
242
|
+
valueArrays.forEach((valueArray, i) => {
|
|
243
|
+
dataArray.push(valueArray[j]);
|
|
244
|
+
// insure each node's attributes take inter number of grids
|
|
245
|
+
if (i === attributeNum - 1) {
|
|
246
|
+
while (dataArray.length % 4 !== 0) {
|
|
247
|
+
dataArray.push(0);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return new Float32Array(dataArray);
|
|
254
|
+
};
|
package/src/util/math.ts
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { Matrix, Model, IndexMap, Edge, OutNode } from '../layout/types';
|
|
2
|
+
import { isObject } from './object';
|
|
3
|
+
|
|
4
|
+
export const getEdgeTerminal = (edge: Edge, type: 'source' | 'target') => {
|
|
5
|
+
const terminal = edge[type];
|
|
6
|
+
if (isObject(terminal)) {
|
|
7
|
+
return terminal.cell;
|
|
8
|
+
}
|
|
9
|
+
return terminal;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const getDegree = (n: number, nodeIdxMap: IndexMap, edges: Edge[] | null) => {
|
|
13
|
+
const degrees: number[] = [];
|
|
14
|
+
for (let i = 0; i < n; i++) {
|
|
15
|
+
degrees[i] = 0;
|
|
16
|
+
}
|
|
17
|
+
if (!edges) return degrees;
|
|
18
|
+
edges.forEach((e) => {
|
|
19
|
+
const source = getEdgeTerminal(e, 'source');
|
|
20
|
+
const target = getEdgeTerminal(e, 'target');
|
|
21
|
+
if (source) {
|
|
22
|
+
degrees[nodeIdxMap[source]] += 1;
|
|
23
|
+
}
|
|
24
|
+
if (target) {
|
|
25
|
+
degrees[nodeIdxMap[target]] += 1;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return degrees;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const floydWarshall = (adjMatrix: Matrix[]): Matrix[] => {
|
|
32
|
+
// initialize
|
|
33
|
+
const dist: Matrix[] = [];
|
|
34
|
+
const size = adjMatrix.length;
|
|
35
|
+
for (let i = 0; i < size; i += 1) {
|
|
36
|
+
dist[i] = [];
|
|
37
|
+
for (let j = 0; j < size; j += 1) {
|
|
38
|
+
if (i === j) {
|
|
39
|
+
dist[i][j] = 0;
|
|
40
|
+
} else if (adjMatrix[i][j] === 0 || !adjMatrix[i][j]) {
|
|
41
|
+
dist[i][j] = Infinity;
|
|
42
|
+
} else {
|
|
43
|
+
dist[i][j] = adjMatrix[i][j];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// floyd
|
|
48
|
+
for (let k = 0; k < size; k += 1) {
|
|
49
|
+
for (let i = 0; i < size; i += 1) {
|
|
50
|
+
for (let j = 0; j < size; j += 1) {
|
|
51
|
+
if (dist[i][j] > dist[i][k] + dist[k][j]) {
|
|
52
|
+
dist[i][j] = dist[i][k] + dist[k][j];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return dist;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const getAdjMatrix = (data: Model, directed: boolean): Matrix[] => {
|
|
61
|
+
const {
|
|
62
|
+
nodes,
|
|
63
|
+
edges
|
|
64
|
+
} = data;
|
|
65
|
+
const matrix: Matrix[] = [];
|
|
66
|
+
// map node with index in data.nodes
|
|
67
|
+
const nodeMap: {
|
|
68
|
+
[key: string]: number;
|
|
69
|
+
} = {};
|
|
70
|
+
|
|
71
|
+
if (!nodes) {
|
|
72
|
+
throw new Error('invalid nodes data!');
|
|
73
|
+
}
|
|
74
|
+
if (nodes) {
|
|
75
|
+
nodes.forEach((node, i) => {
|
|
76
|
+
nodeMap[node.id] = i;
|
|
77
|
+
const row: number[] = [];
|
|
78
|
+
matrix.push(row);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (edges) {
|
|
83
|
+
edges.forEach((e) => {
|
|
84
|
+
const source = getEdgeTerminal(e, 'source');
|
|
85
|
+
const target = getEdgeTerminal(e, 'target');
|
|
86
|
+
const sIndex = nodeMap[source as string];
|
|
87
|
+
const tIndex = nodeMap[target as string];
|
|
88
|
+
matrix[sIndex][tIndex] = 1;
|
|
89
|
+
if (!directed) {
|
|
90
|
+
matrix[tIndex][sIndex] = 1;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return matrix;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* scale matrix
|
|
100
|
+
* @param matrix [ [], [], [] ]
|
|
101
|
+
* @param ratio
|
|
102
|
+
*/
|
|
103
|
+
export const scaleMatrix = (matrix: Matrix[], ratio: number) => {
|
|
104
|
+
const result: Matrix[] = [];
|
|
105
|
+
matrix.forEach((row) => {
|
|
106
|
+
const newRow: number[] = [];
|
|
107
|
+
row.forEach((v) => {
|
|
108
|
+
newRow.push(v * ratio);
|
|
109
|
+
});
|
|
110
|
+
result.push(newRow);
|
|
111
|
+
});
|
|
112
|
+
return result;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* depth first traverse, from leaves to root, children in inverse order
|
|
117
|
+
* if the fn returns false, terminate the traverse
|
|
118
|
+
*/
|
|
119
|
+
const traverseUp = <T extends { children?: T[] }>(data: T, fn: (param: T) => boolean) => {
|
|
120
|
+
if (data && data.children) {
|
|
121
|
+
for (let i = data.children.length - 1; i >= 0; i--) {
|
|
122
|
+
if (!traverseUp(data.children[i], fn)) return;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (!fn(data)) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
return true;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* depth first traverse, from leaves to root, children in inverse order
|
|
134
|
+
* if the fn returns false, terminate the traverse
|
|
135
|
+
*/
|
|
136
|
+
export const traverseTreeUp = <T extends { children?: T[] }>(
|
|
137
|
+
data: T,
|
|
138
|
+
fn: (param: T) => boolean,
|
|
139
|
+
) => {
|
|
140
|
+
if (typeof fn !== 'function') {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
traverseUp(data, fn);
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export const findMinMaxNodeXY = (nodes: OutNode[]) => {
|
|
147
|
+
let minX = Infinity;
|
|
148
|
+
let minY = Infinity;
|
|
149
|
+
let maxX = -Infinity;
|
|
150
|
+
let maxY = -Infinity;
|
|
151
|
+
nodes.forEach((node) => {
|
|
152
|
+
if (minX > node.x) minX = node.x;
|
|
153
|
+
if (minY > node.y) minY = node.y;
|
|
154
|
+
if (maxX < node.x) maxX = node.x;
|
|
155
|
+
if (maxY < node.y) maxY = node.y;
|
|
156
|
+
});
|
|
157
|
+
return { minX, minY, maxX, maxY };
|
|
158
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const isObject = (val: unknown): val is Record<any, any> =>
|
|
2
|
+
val !== null && typeof val === 'object';
|
|
3
|
+
|
|
4
|
+
export const clone = <T>(target: T): T => {
|
|
5
|
+
if (target === null) {
|
|
6
|
+
return target;
|
|
7
|
+
}
|
|
8
|
+
if (target instanceof Date) {
|
|
9
|
+
return new Date(target.getTime()) as any;
|
|
10
|
+
}
|
|
11
|
+
if (target instanceof Array) {
|
|
12
|
+
const cp = [] as any[]
|
|
13
|
+
;(target as any[]).forEach((v) => {
|
|
14
|
+
cp.push(v);
|
|
15
|
+
});
|
|
16
|
+
return cp.map((n: any) => clone<any>(n)) as any;
|
|
17
|
+
}
|
|
18
|
+
if (typeof target === 'object' && target !== {}) {
|
|
19
|
+
const cp = { ...(target as { [key: string]: any }) } as {
|
|
20
|
+
[key: string]: any
|
|
21
|
+
};
|
|
22
|
+
Object.keys(cp).forEach((k) => {
|
|
23
|
+
cp[k] = clone<any>(cp[k]);
|
|
24
|
+
});
|
|
25
|
+
return cp as T;
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const isString = (val: unknown): val is string => typeof val === 'string';
|
|
2
|
+
|
|
3
|
+
const cacheStringFunction = <T extends (str: string) => string>(fn: T): T => {
|
|
4
|
+
const cache: Record<string, string> = Object.create(null);
|
|
5
|
+
return ((str: string) => {
|
|
6
|
+
const hit = cache[str];
|
|
7
|
+
return hit || (cache[str] = fn(str));
|
|
8
|
+
}) as any;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const camelizeRE = /-(\w)/g;
|
|
12
|
+
export const camelize = cacheStringFunction((str: string): string => {
|
|
13
|
+
return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// export const capitalize = cacheStringFunction(
|
|
17
|
+
// (str: string) => str.charAt(0).toUpperCase() + str.slice(1),
|
|
18
|
+
// )
|
package/CHANGELOG.md
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# ChangeLog
|
|
2
|
-
|
|
3
|
-
#### 0.2.0
|
|
4
|
-
|
|
5
|
-
- chore: the beta features;
|
|
6
|
-
|
|
7
|
-
#### 0.2.0-beta.4
|
|
8
|
-
|
|
9
|
-
- feat: dagre layout support radial configuration;
|
|
10
|
-
|
|
11
|
-
#### 0.2.0-beta.3
|
|
12
|
-
|
|
13
|
-
- feat: dagreCompoud layout;
|
|
14
|
-
|
|
15
|
-
#### 0.2.0-beta.0
|
|
16
|
-
|
|
17
|
-
- feat: comboCombined layout;
|
|
18
|
-
- feat: add source and target node to the parameters of gForce linkDistance;
|
|
19
|
-
- feat: add hiddenNodes hiddenEdges hiddenCombos to the data of layout instance;
|
|
20
|
-
|
|
21
|
-
#### 0.1.31
|
|
22
|
-
|
|
23
|
-
- fix: dagre with sortByCombo error;
|
|
24
|
-
|
|
25
|
-
#### 0.1.30
|
|
26
|
-
|
|
27
|
-
- fix: flat problem;
|
|
28
|
-
|
|
29
|
-
#### 0.1.29
|
|
30
|
-
|
|
31
|
-
- fix: dagre error;
|
|
32
|
-
|
|
33
|
-
#### 0.1.28
|
|
34
|
-
|
|
35
|
-
- fix: dagre error;
|
|
36
|
-
|
|
37
|
-
#### 0.1.27
|
|
38
|
-
|
|
39
|
-
- fix: dagre error;
|
|
40
|
-
|
|
41
|
-
#### 0.1.26
|
|
42
|
-
|
|
43
|
-
- fix: dagre error;
|
|
44
|
-
|
|
45
|
-
#### 0.1.25
|
|
46
|
-
|
|
47
|
-
- fix: array flat and Infinite param problem;
|
|
48
|
-
- fix: dagre with NaN node rank;
|
|
49
|
-
- chore: lint;
|
|
50
|
-
|
|
51
|
-
#### 0.1.23
|
|
52
|
-
|
|
53
|
-
- fix: array flat compatibility;
|
|
54
|
-
|
|
55
|
-
#### 0.1.22
|
|
56
|
-
|
|
57
|
-
- fix: fruchterman without init clusterMap problem;
|
|
58
|
-
|
|
59
|
-
#### 0.1.21
|
|
60
|
-
|
|
61
|
-
- fix: comboForce with unnecessary positions for combos;
|
|
62
|
-
- fix: dagre bug;
|
|
63
|
-
|
|
64
|
-
#### 0.1.20
|
|
65
|
-
|
|
66
|
-
- chore: migrate dagre from https://github.com/brickmaker/dagre to @antv/layout and re-write in es6 standard;
|
|
67
|
-
- chore: fruchterman cluster re-computing problem;
|
|
68
|
-
- feat: dagre supports begin position for the layout;
|
|
69
|
-
|
|
70
|
-
#### 0.1.19
|
|
71
|
-
|
|
72
|
-
- feat: dagre supports assigning order and layer, import from https://github.com/brickmaker/dagre;
|
|
73
|
-
- feat: ER layout;
|
|
74
|
-
|
|
75
|
-
#### 0.1.18
|
|
76
|
-
|
|
77
|
-
- fix: add return value for grid layout;
|
|
78
|
-
- fix: force atlas 2 default prune and barnesHut;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
// @ts-ignore
|
|
2
|
-
import glib from '@dagrejs/graphlib';
|
|
3
|
-
let graphlib = glib;
|
|
4
|
-
if (!graphlib && typeof window !== "undefined") {
|
|
5
|
-
graphlib = window.graphlib;
|
|
6
|
-
}
|
|
7
|
-
if (!Array.prototype.flat) {
|
|
8
|
-
// @ts-ignore
|
|
9
|
-
Array.prototype.flat = function (count) {
|
|
10
|
-
let c = count || 1;
|
|
11
|
-
if (!isFinite(c))
|
|
12
|
-
return;
|
|
13
|
-
const len = this.length;
|
|
14
|
-
let ret = [];
|
|
15
|
-
if (this.length === 0)
|
|
16
|
-
return this;
|
|
17
|
-
while (c--) {
|
|
18
|
-
const arr = [];
|
|
19
|
-
let flag = false;
|
|
20
|
-
if (ret.length === 0) {
|
|
21
|
-
flag = true;
|
|
22
|
-
for (let i = 0; i < len; i++) {
|
|
23
|
-
if (this[i] instanceof Array) {
|
|
24
|
-
ret.push(...this[i]);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
ret.push(this[i]);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
for (let i = 0; i < ret.length; i++) {
|
|
33
|
-
if (ret[i] instanceof Array) {
|
|
34
|
-
flag = true;
|
|
35
|
-
arr.push(...ret[i]);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
arr.push(ret[i]);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
ret = arr;
|
|
42
|
-
}
|
|
43
|
-
if (!flag && c === Infinity) {
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return ret;
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
export default graphlib;
|
|
51
|
-
//# sourceMappingURL=graphlib.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graphlib.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/graphlib.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,IAAI,MAAM,mBAAmB,CAAC;AAErC,IAAI,QAAQ,GAAG,IAAI,CAAC;AAGpB,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC9C,QAAQ,GAAI,MAAc,CAAC,QAAQ,CAAC;CACrC;AAED,IAAI,CAAE,KAAa,CAAC,SAAS,CAAC,IAAI,EAAE;IAClC,aAAa;IACZ,KAAa,CAAC,SAAS,CAAC,IAAI,GAAG,UAAS,KAAK;QAC5C,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,CAAC,EAAE,EAAE;YACV,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,IAAI,GAAG,IAAI,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;wBAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACtB;yBAAM;wBACL,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACnB;iBACF;aACF;iBAAM;gBACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;wBAC3B,IAAI,GAAG,IAAI,CAAC;wBACZ,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;qBACrB;yBAAM;wBACL,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;qBAClB;iBACF;gBACD,GAAG,GAAG,GAAG,CAAC;aACX;YACD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,QAAQ,EAAE;gBAC3B,MAAM;aACP;SACF;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;CAEH;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
// @ts-ignore
|
|
7
|
-
var graphlib_1 = __importDefault(require("@dagrejs/graphlib"));
|
|
8
|
-
var graphlib = graphlib_1.default;
|
|
9
|
-
if (!graphlib && typeof window !== "undefined") {
|
|
10
|
-
graphlib = window.graphlib;
|
|
11
|
-
}
|
|
12
|
-
if (!Array.prototype.flat) {
|
|
13
|
-
// @ts-ignore
|
|
14
|
-
Array.prototype.flat = function (count) {
|
|
15
|
-
var c = count || 1;
|
|
16
|
-
if (!isFinite(c))
|
|
17
|
-
return;
|
|
18
|
-
var len = this.length;
|
|
19
|
-
var ret = [];
|
|
20
|
-
if (this.length === 0)
|
|
21
|
-
return this;
|
|
22
|
-
while (c--) {
|
|
23
|
-
var arr = [];
|
|
24
|
-
var flag = false;
|
|
25
|
-
if (ret.length === 0) {
|
|
26
|
-
flag = true;
|
|
27
|
-
for (var i = 0; i < len; i++) {
|
|
28
|
-
if (this[i] instanceof Array) {
|
|
29
|
-
ret.push.apply(ret, this[i]);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
ret.push(this[i]);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
for (var i = 0; i < ret.length; i++) {
|
|
38
|
-
if (ret[i] instanceof Array) {
|
|
39
|
-
flag = true;
|
|
40
|
-
arr.push.apply(arr, ret[i]);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
arr.push(ret[i]);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
ret = arr;
|
|
47
|
-
}
|
|
48
|
-
if (!flag && c === Infinity) {
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return ret;
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
exports.default = graphlib;
|
|
56
|
-
//# sourceMappingURL=graphlib.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graphlib.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/graphlib.ts"],"names":[],"mappings":";;;;;AAAA,aAAa;AACb,+DAAqC;AAErC,IAAI,QAAQ,GAAG,kBAAI,CAAC;AAGpB,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC9C,QAAQ,GAAI,MAAc,CAAC,QAAQ,CAAC;CACrC;AAED,IAAI,CAAE,KAAa,CAAC,SAAS,CAAC,IAAI,EAAE;IAClC,aAAa;IACZ,KAAa,CAAC,SAAS,CAAC,IAAI,GAAG,UAAS,KAAK;QAC5C,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO;QACzB,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,CAAC,EAAE,EAAE;YACV,IAAM,GAAG,GAAG,EAAE,CAAC;YACf,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,IAAI,GAAG,IAAI,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;wBAC5B,GAAG,CAAC,IAAI,OAAR,GAAG,EAAS,IAAI,CAAC,CAAC,CAAC,EAAE;qBACtB;yBAAM;wBACL,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACnB;iBACF;aACF;iBAAM;gBACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;wBAC3B,IAAI,GAAG,IAAI,CAAC;wBACZ,GAAG,CAAC,IAAI,OAAR,GAAG,EAAS,GAAG,CAAC,CAAC,CAAC,EAAE;qBACrB;yBAAM;wBACL,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;qBAClB;iBACF;gBACD,GAAG,GAAG,GAAG,CAAC;aACX;YACD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,QAAQ,EAAE;gBAC3B,MAAM;aACP;SACF;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;CAEH;AAED,kBAAe,QAAQ,CAAC"}
|