@graphty/layout 1.2.8 → 1.3.2
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/README.md +394 -404
- package/dist/layout.js +881 -821
- package/dist/layout.js.map +1 -1
- package/dist/src/algorithms/index.d.ts +2 -2
- package/dist/src/algorithms/index.js +2 -2
- package/dist/src/algorithms/index.js.map +1 -1
- package/dist/src/algorithms/optimization/index.d.ts +4 -4
- package/dist/src/algorithms/optimization/index.js +3 -3
- package/dist/src/algorithms/optimization/index.js.map +1 -1
- package/dist/src/algorithms/optimization/kamada-kawai-solver.d.ts +2 -5
- package/dist/src/algorithms/optimization/kamada-kawai-solver.js +6 -9
- package/dist/src/algorithms/optimization/kamada-kawai-solver.js.map +1 -1
- package/dist/src/algorithms/optimization/lbfgs.d.ts +0 -1
- package/dist/src/algorithms/optimization/lbfgs.js +3 -5
- package/dist/src/algorithms/optimization/lbfgs.js.map +1 -1
- package/dist/src/algorithms/optimization/line-search.d.ts +0 -1
- package/dist/src/algorithms/optimization/line-search.js +0 -1
- package/dist/src/algorithms/optimization/line-search.js.map +1 -1
- package/dist/src/algorithms/optimization/types.d.ts +1 -1
- package/dist/src/algorithms/planarity/check.d.ts +3 -3
- package/dist/src/algorithms/planarity/check.js +7 -7
- package/dist/src/algorithms/planarity/check.js.map +1 -1
- package/dist/src/algorithms/planarity/embedding.d.ts +3 -5
- package/dist/src/algorithms/planarity/embedding.js +20 -16
- package/dist/src/algorithms/planarity/embedding.js.map +1 -1
- package/dist/src/algorithms/planarity/index.d.ts +4 -4
- package/dist/src/algorithms/planarity/index.js +4 -4
- package/dist/src/algorithms/planarity/index.js.map +1 -1
- package/dist/src/algorithms/planarity/lr-test.d.ts +3 -3
- package/dist/src/algorithms/planarity/lr-test.js +5 -5
- package/dist/src/algorithms/planarity/lr-test.js.map +1 -1
- package/dist/src/algorithms/planarity/special-graphs.d.ts +1 -4
- package/dist/src/algorithms/planarity/special-graphs.js +18 -15
- package/dist/src/algorithms/planarity/special-graphs.js.map +1 -1
- package/dist/src/generators/basic.d.ts +1 -1
- package/dist/src/generators/basic.js +4 -4
- package/dist/src/generators/basic.js.map +1 -1
- package/dist/src/generators/bipartite.d.ts +1 -1
- package/dist/src/generators/bipartite.js +2 -2
- package/dist/src/generators/bipartite.js.map +1 -1
- package/dist/src/generators/grid.d.ts +1 -1
- package/dist/src/generators/grid.js +1 -1
- package/dist/src/generators/grid.js.map +1 -1
- package/dist/src/generators/index.d.ts +5 -5
- package/dist/src/generators/index.js +5 -5
- package/dist/src/generators/index.js.map +1 -1
- package/dist/src/generators/random.d.ts +1 -1
- package/dist/src/generators/random.js +2 -2
- package/dist/src/generators/random.js.map +1 -1
- package/dist/src/generators/scale-free.d.ts +1 -1
- package/dist/src/generators/scale-free.js +4 -4
- package/dist/src/generators/scale-free.js.map +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/layouts/basic/index.d.ts +1 -1
- package/dist/src/layouts/basic/index.js +1 -1
- package/dist/src/layouts/basic/random.d.ts +1 -2
- package/dist/src/layouts/basic/random.js +3 -4
- package/dist/src/layouts/basic/random.js.map +1 -1
- package/dist/src/layouts/force-directed/arf.d.ts +1 -2
- package/dist/src/layouts/force-directed/arf.js +13 -8
- package/dist/src/layouts/force-directed/arf.js.map +1 -1
- package/dist/src/layouts/force-directed/forceatlas2.d.ts +1 -2
- package/dist/src/layouts/force-directed/forceatlas2.js +58 -35
- package/dist/src/layouts/force-directed/forceatlas2.js.map +1 -1
- package/dist/src/layouts/force-directed/fruchterman-reingold.d.ts +11 -12
- package/dist/src/layouts/force-directed/fruchterman-reingold.js +17 -17
- package/dist/src/layouts/force-directed/fruchterman-reingold.js.map +1 -1
- package/dist/src/layouts/force-directed/index.d.ts +5 -5
- package/dist/src/layouts/force-directed/index.js +5 -5
- package/dist/src/layouts/force-directed/index.js.map +1 -1
- package/dist/src/layouts/force-directed/kamada-kawai.d.ts +2 -3
- package/dist/src/layouts/force-directed/kamada-kawai.js +12 -10
- package/dist/src/layouts/force-directed/kamada-kawai.js.map +1 -1
- package/dist/src/layouts/force-directed/spring.d.ts +11 -12
- package/dist/src/layouts/force-directed/spring.js +11 -12
- package/dist/src/layouts/force-directed/spring.js.map +1 -1
- package/dist/src/layouts/geometric/circular.d.ts +1 -2
- package/dist/src/layouts/geometric/circular.js +10 -9
- package/dist/src/layouts/geometric/circular.js.map +1 -1
- package/dist/src/layouts/geometric/index.d.ts +3 -3
- package/dist/src/layouts/geometric/index.js +3 -3
- package/dist/src/layouts/geometric/shell.d.ts +1 -2
- package/dist/src/layouts/geometric/shell.js +5 -5
- package/dist/src/layouts/geometric/shell.js.map +1 -1
- package/dist/src/layouts/geometric/spiral.d.ts +1 -2
- package/dist/src/layouts/geometric/spiral.js +5 -9
- package/dist/src/layouts/geometric/spiral.js.map +1 -1
- package/dist/src/layouts/hierarchical/bfs.d.ts +2 -3
- package/dist/src/layouts/hierarchical/bfs.js +5 -6
- package/dist/src/layouts/hierarchical/bfs.js.map +1 -1
- package/dist/src/layouts/hierarchical/bipartite.d.ts +2 -3
- package/dist/src/layouts/hierarchical/bipartite.js +8 -9
- package/dist/src/layouts/hierarchical/bipartite.js.map +1 -1
- package/dist/src/layouts/hierarchical/index.d.ts +3 -3
- package/dist/src/layouts/hierarchical/index.js +3 -3
- package/dist/src/layouts/hierarchical/index.js.map +1 -1
- package/dist/src/layouts/hierarchical/multipartite.d.ts +2 -3
- package/dist/src/layouts/hierarchical/multipartite.js +7 -8
- package/dist/src/layouts/hierarchical/multipartite.js.map +1 -1
- package/dist/src/layouts/index.d.ts +5 -5
- package/dist/src/layouts/index.js +5 -5
- package/dist/src/layouts/index.js.map +1 -1
- package/dist/src/layouts/specialized/index.d.ts +2 -2
- package/dist/src/layouts/specialized/index.js +2 -2
- package/dist/src/layouts/specialized/index.js.map +1 -1
- package/dist/src/layouts/specialized/planar.d.ts +3 -3
- package/dist/src/layouts/specialized/planar.js +8 -8
- package/dist/src/layouts/specialized/planar.js.map +1 -1
- package/dist/src/layouts/specialized/spectral.d.ts +1 -2
- package/dist/src/layouts/specialized/spectral.js +30 -20
- package/dist/src/layouts/specialized/spectral.js.map +1 -1
- package/dist/src/types/embedding.d.ts +1 -1
- package/dist/src/types/index.d.ts +3 -3
- package/dist/src/types/index.js +3 -3
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/layout.d.ts +1 -1
- package/dist/src/utils/graph.d.ts +1 -5
- package/dist/src/utils/graph.js +4 -6
- package/dist/src/utils/graph.js.map +1 -1
- package/dist/src/utils/index.d.ts +5 -5
- package/dist/src/utils/index.js +5 -5
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/numpy.js +22 -16
- package/dist/src/utils/numpy.js.map +1 -1
- package/dist/src/utils/params.d.ts +1 -2
- package/dist/src/utils/params.js +0 -1
- package/dist/src/utils/params.js.map +1 -1
- package/dist/src/utils/random.d.ts +17 -0
- package/dist/src/utils/random.js +18 -1
- package/dist/src/utils/random.js.map +1 -1
- package/dist/src/utils/rescale.d.ts +1 -3
- package/dist/src/utils/rescale.js +12 -10
- package/dist/src/utils/rescale.js.map +1 -1
- package/dist/vitest.config.js +14 -14
- package/dist/vitest.config.js.map +1 -1
- package/package.json +29 -24
- package/src/algorithms/index.ts +2 -2
- package/src/algorithms/optimization/index.ts +4 -8
- package/src/algorithms/optimization/kamada-kawai-solver.ts +170 -179
- package/src/algorithms/optimization/lbfgs.ts +41 -48
- package/src/algorithms/optimization/line-search.ts +27 -28
- package/src/algorithms/optimization/types.ts +2 -2
- package/src/algorithms/planarity/check.ts +22 -21
- package/src/algorithms/planarity/embedding.ts +159 -165
- package/src/algorithms/planarity/index.ts +4 -8
- package/src/algorithms/planarity/lr-test.ts +46 -45
- package/src/algorithms/planarity/special-graphs.ts +73 -83
- package/src/generators/basic.ts +57 -57
- package/src/generators/bipartite.ts +37 -31
- package/src/generators/grid.ts +28 -28
- package/src/generators/index.ts +5 -11
- package/src/generators/random.ts +26 -25
- package/src/generators/scale-free.ts +56 -55
- package/src/index.ts +5 -5
- package/src/layouts/basic/index.ts +1 -1
- package/src/layouts/basic/random.ts +20 -16
- package/src/layouts/force-directed/arf.ts +107 -105
- package/src/layouts/force-directed/forceatlas2.ts +365 -351
- package/src/layouts/force-directed/fruchterman-reingold.ts +133 -134
- package/src/layouts/force-directed/index.ts +5 -5
- package/src/layouts/force-directed/kamada-kawai.ts +78 -80
- package/src/layouts/force-directed/spring.ts +24 -25
- package/src/layouts/geometric/circular.ts +63 -57
- package/src/layouts/geometric/index.ts +3 -3
- package/src/layouts/geometric/shell.ts +58 -53
- package/src/layouts/geometric/spiral.ts +60 -64
- package/src/layouts/hierarchical/bfs.ts +58 -59
- package/src/layouts/hierarchical/bipartite.ts +62 -63
- package/src/layouts/hierarchical/index.ts +3 -3
- package/src/layouts/hierarchical/multipartite.ts +62 -63
- package/src/layouts/index.ts +5 -5
- package/src/layouts/specialized/index.ts +2 -2
- package/src/layouts/specialized/planar.ts +42 -41
- package/src/layouts/specialized/spectral.ts +110 -99
- package/src/types/embedding.ts +5 -5
- package/src/types/graph.ts +4 -4
- package/src/types/index.ts +3 -3
- package/src/types/layout.ts +2 -2
- package/src/utils/graph.ts +31 -35
- package/src/utils/index.ts +5 -5
- package/src/utils/numpy.ts +96 -92
- package/src/utils/params.ts +14 -11
- package/src/utils/random.ts +57 -40
- package/src/utils/rescale.ts +169 -174
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Special graph detection functions for planarity testing
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { Edge, Node } from "../../types";
|
|
5
5
|
/**
|
|
6
6
|
* Check if graph is K5 (complete graph with 5 nodes)
|
|
7
|
-
*
|
|
8
7
|
* @param nodes - List of nodes
|
|
9
8
|
* @param edges - List of edges
|
|
10
9
|
* @returns True if graph is K5
|
|
@@ -12,7 +11,6 @@ import { Node, Edge } from '../../types';
|
|
|
12
11
|
export declare function isK5(nodes: Node[], edges: Edge[]): boolean;
|
|
13
12
|
/**
|
|
14
13
|
* Check if graph is K3,3 (complete bipartite with 3,3 nodes)
|
|
15
|
-
*
|
|
16
14
|
* @param nodes - List of nodes
|
|
17
15
|
* @param edges - List of edges
|
|
18
16
|
* @returns True if graph is K3,3
|
|
@@ -20,7 +18,6 @@ export declare function isK5(nodes: Node[], edges: Edge[]): boolean;
|
|
|
20
18
|
export declare function isK33(nodes: Node[], edges: Edge[]): boolean;
|
|
21
19
|
/**
|
|
22
20
|
* Try to find a bipartite partition of the nodes
|
|
23
|
-
*
|
|
24
21
|
* @param nodes - List of nodes
|
|
25
22
|
* @param edges - List of edges
|
|
26
23
|
* @returns Array of two partitions, or null if not bipartite
|
|
@@ -3,63 +3,66 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* Check if graph is K5 (complete graph with 5 nodes)
|
|
6
|
-
*
|
|
7
6
|
* @param nodes - List of nodes
|
|
8
7
|
* @param edges - List of edges
|
|
9
8
|
* @returns True if graph is K5
|
|
10
9
|
*/
|
|
11
10
|
export function isK5(nodes, edges) {
|
|
12
|
-
if (nodes.length !== 5)
|
|
11
|
+
if (nodes.length !== 5) {
|
|
13
12
|
return false;
|
|
13
|
+
}
|
|
14
14
|
// K5 has exactly 10 edges
|
|
15
|
-
if (edges.length !== 10)
|
|
15
|
+
if (edges.length !== 10) {
|
|
16
16
|
return false;
|
|
17
|
+
}
|
|
17
18
|
// Check if every pair of distinct nodes is connected
|
|
18
19
|
for (let i = 0; i < nodes.length; i++) {
|
|
19
20
|
for (let j = i + 1; j < nodes.length; j++) {
|
|
20
|
-
const hasEdge = edges.some(e => (e[0] === nodes[i] && e[1] === nodes[j]) ||
|
|
21
|
-
|
|
22
|
-
if (!hasEdge)
|
|
21
|
+
const hasEdge = edges.some((e) => (e[0] === nodes[i] && e[1] === nodes[j]) || (e[0] === nodes[j] && e[1] === nodes[i]));
|
|
22
|
+
if (!hasEdge) {
|
|
23
23
|
return false;
|
|
24
|
+
}
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
return true;
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
29
30
|
* Check if graph is K3,3 (complete bipartite with 3,3 nodes)
|
|
30
|
-
*
|
|
31
31
|
* @param nodes - List of nodes
|
|
32
32
|
* @param edges - List of edges
|
|
33
33
|
* @returns True if graph is K3,3
|
|
34
34
|
*/
|
|
35
35
|
export function isK33(nodes, edges) {
|
|
36
|
-
if (nodes.length !== 6)
|
|
36
|
+
if (nodes.length !== 6) {
|
|
37
37
|
return false;
|
|
38
|
+
}
|
|
38
39
|
// K3,3 has exactly 9 edges
|
|
39
|
-
if (edges.length !== 9)
|
|
40
|
+
if (edges.length !== 9) {
|
|
40
41
|
return false;
|
|
42
|
+
}
|
|
41
43
|
// Try to find a bipartite partition
|
|
42
44
|
const nodePartitions = tryFindBipartitePartition(nodes, edges);
|
|
43
|
-
if (!nodePartitions)
|
|
45
|
+
if (!nodePartitions) {
|
|
44
46
|
return false;
|
|
47
|
+
}
|
|
45
48
|
const [part1, part2] = nodePartitions;
|
|
46
49
|
// Check if both partitions have size 3
|
|
47
|
-
if (part1.length !== 3 || part2.length !== 3)
|
|
50
|
+
if (part1.length !== 3 || part2.length !== 3) {
|
|
48
51
|
return false;
|
|
52
|
+
}
|
|
49
53
|
// Check if every node in part1 is connected to every node in part2
|
|
50
54
|
for (const n1 of part1) {
|
|
51
55
|
for (const n2 of part2) {
|
|
52
|
-
const hasEdge = edges.some(e => (e[0] === n1 && e[1] === n2) ||
|
|
53
|
-
|
|
54
|
-
if (!hasEdge)
|
|
56
|
+
const hasEdge = edges.some((e) => (e[0] === n1 && e[1] === n2) || (e[0] === n2 && e[1] === n1));
|
|
57
|
+
if (!hasEdge) {
|
|
55
58
|
return false;
|
|
59
|
+
}
|
|
56
60
|
}
|
|
57
61
|
}
|
|
58
62
|
return true;
|
|
59
63
|
}
|
|
60
64
|
/**
|
|
61
65
|
* Try to find a bipartite partition of the nodes
|
|
62
|
-
*
|
|
63
66
|
* @param nodes - List of nodes
|
|
64
67
|
* @param edges - List of edges
|
|
65
68
|
* @returns Array of two partitions, or null if not bipartite
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"special-graphs.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/special-graphs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH
|
|
1
|
+
{"version":3,"file":"special-graphs.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/special-graphs.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export function completeGraph(n) {
|
|
|
16
16
|
}
|
|
17
17
|
return {
|
|
18
18
|
nodes: () => nodes,
|
|
19
|
-
edges: () => edges
|
|
19
|
+
edges: () => edges,
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
@@ -32,7 +32,7 @@ export function cycleGraph(n) {
|
|
|
32
32
|
}
|
|
33
33
|
return {
|
|
34
34
|
nodes: () => nodes,
|
|
35
|
-
edges: () => edges
|
|
35
|
+
edges: () => edges,
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
@@ -49,7 +49,7 @@ export function starGraph(n) {
|
|
|
49
49
|
}
|
|
50
50
|
return {
|
|
51
51
|
nodes: () => nodes,
|
|
52
|
-
edges: () => edges
|
|
52
|
+
edges: () => edges,
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
@@ -73,7 +73,7 @@ export function wheelGraph(n) {
|
|
|
73
73
|
}
|
|
74
74
|
return {
|
|
75
75
|
nodes: () => nodes,
|
|
76
|
-
edges: () => edges
|
|
76
|
+
edges: () => edges,
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
79
|
//# sourceMappingURL=basic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../../src/generators/basic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;
|
|
1
|
+
{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../../src/generators/basic.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export function bipartiteGraph(n1, n2, p, seed) {
|
|
|
16
16
|
const edges = [];
|
|
17
17
|
// Simple deterministic pseudo-random if seed provided
|
|
18
18
|
let currentSeed = seed;
|
|
19
|
-
|
|
19
|
+
const random = seed !== undefined
|
|
20
20
|
? () => {
|
|
21
21
|
currentSeed = (currentSeed * 9301 + 49297) % 233280;
|
|
22
22
|
return currentSeed / 233280;
|
|
@@ -34,7 +34,7 @@ export function bipartiteGraph(n1, n2, p, seed) {
|
|
|
34
34
|
nodes: () => nodes,
|
|
35
35
|
edges: () => edges,
|
|
36
36
|
setA,
|
|
37
|
-
setB
|
|
37
|
+
setB,
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
40
|
//# sourceMappingURL=bipartite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bipartite.js","sourceRoot":"","sources":["../../../src/generators/bipartite.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,
|
|
1
|
+
{"version":3,"file":"bipartite.js","sourceRoot":"","sources":["../../../src/generators/bipartite.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC1B,EAAU,EACV,EAAU,EACV,CAAS,EACT,IAAa;IAEb,MAAM,IAAI,GAAW,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAW,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAW,EAAE,CAAC;IAEzB,sDAAsD;IACtD,IAAI,WAAW,GAAG,IAAI,CAAC;IACvB,MAAM,MAAM,GACR,IAAI,KAAK,SAAS;QACd,CAAC,CAAC,GAAG,EAAE;YACD,WAAW,GAAG,CAAC,WAAY,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;YACrD,OAAO,WAAW,GAAG,MAAM,CAAC;QAChC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAEtB,kCAAkC;IAClC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACnB,IAAI,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO;QACH,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;QAClB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;QAClB,IAAI;QACJ,IAAI;KACP,CAAC;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../../src/generators/grid.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY;
|
|
1
|
+
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../../src/generators/grid.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY;IAChD,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,KAAK,GAAW,EAAE,CAAC;IAEzB,eAAe;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,eAAe;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,4BAA4B;YAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,6BAA6B;YAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO;QACH,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;QAClB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;KACrB,CAAC;AACN,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Re-export all graph generation functions
|
|
3
3
|
*/
|
|
4
|
-
export { completeGraph, cycleGraph, starGraph, wheelGraph } from
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export { scaleFreeGraph } from
|
|
4
|
+
export { completeGraph, cycleGraph, starGraph, wheelGraph } from "./basic";
|
|
5
|
+
export { bipartiteGraph } from "./bipartite";
|
|
6
|
+
export { gridGraph } from "./grid";
|
|
7
|
+
export { randomGraph } from "./random";
|
|
8
|
+
export { scaleFreeGraph } from "./scale-free";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Re-export all graph generation functions
|
|
3
3
|
*/
|
|
4
|
-
export { completeGraph, cycleGraph, starGraph, wheelGraph } from
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export { scaleFreeGraph } from
|
|
4
|
+
export { completeGraph, cycleGraph, starGraph, wheelGraph } from "./basic";
|
|
5
|
+
export { bipartiteGraph } from "./bipartite";
|
|
6
|
+
export { gridGraph } from "./grid";
|
|
7
|
+
export { randomGraph } from "./random";
|
|
8
|
+
export { scaleFreeGraph } from "./scale-free";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -13,7 +13,7 @@ export function randomGraph(n, p, seed) {
|
|
|
13
13
|
const edges = [];
|
|
14
14
|
// Simple deterministic pseudo-random if seed provided
|
|
15
15
|
let currentSeed = seed;
|
|
16
|
-
|
|
16
|
+
const random = seed !== undefined
|
|
17
17
|
? () => {
|
|
18
18
|
currentSeed = (currentSeed * 9301 + 49297) % 233280;
|
|
19
19
|
return currentSeed / 233280;
|
|
@@ -28,7 +28,7 @@ export function randomGraph(n, p, seed) {
|
|
|
28
28
|
}
|
|
29
29
|
return {
|
|
30
30
|
nodes: () => nodes,
|
|
31
|
-
edges: () => edges
|
|
31
|
+
edges: () => edges,
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
//# sourceMappingURL=random.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../src/generators/random.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,IAAa;
|
|
1
|
+
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../src/generators/random.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,IAAa;IAC3D,MAAM,KAAK,GAAW,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAW,EAAE,CAAC;IAEzB,sDAAsD;IACtD,IAAI,WAAW,GAAG,IAAI,CAAC;IACvB,MAAM,MAAM,GACR,IAAI,KAAK,SAAS;QACd,CAAC,CAAC,GAAG,EAAE;YACD,WAAW,GAAG,CAAC,WAAY,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;YACrD,OAAO,WAAW,GAAG,MAAM,CAAC;QAChC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO;QACH,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;QAClB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;KACrB,CAAC;AACN,CAAC"}
|
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export function scaleFreeGraph(n, m, seed) {
|
|
12
12
|
if (m >= n) {
|
|
13
|
-
throw new Error(
|
|
13
|
+
throw new Error("m must be less than n");
|
|
14
14
|
}
|
|
15
15
|
const nodes = Array.from({ length: n }, (_, i) => i);
|
|
16
16
|
const edges = [];
|
|
17
17
|
const degrees = new Array(n).fill(0);
|
|
18
18
|
// Simple deterministic pseudo-random if seed provided
|
|
19
19
|
let currentSeed = seed;
|
|
20
|
-
|
|
20
|
+
const random = seed !== undefined
|
|
21
21
|
? () => {
|
|
22
22
|
currentSeed = (currentSeed * 9301 + 49297) % 233280;
|
|
23
23
|
return currentSeed / 233280;
|
|
@@ -37,7 +37,7 @@ export function scaleFreeGraph(n, m, seed) {
|
|
|
37
37
|
const totalDegree = degrees.reduce((sum, d) => sum + d, 0);
|
|
38
38
|
// Choose m targets based on preferential attachment
|
|
39
39
|
while (targets.size < m) {
|
|
40
|
-
|
|
40
|
+
const r = random() * totalDegree;
|
|
41
41
|
let cumSum = 0;
|
|
42
42
|
for (let j = 0; j < i; j++) {
|
|
43
43
|
cumSum += degrees[j];
|
|
@@ -56,7 +56,7 @@ export function scaleFreeGraph(n, m, seed) {
|
|
|
56
56
|
}
|
|
57
57
|
return {
|
|
58
58
|
nodes: () => nodes,
|
|
59
|
-
edges: () => edges
|
|
59
|
+
edges: () => edges,
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
//# sourceMappingURL=scale-free.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scale-free.js","sourceRoot":"","sources":["../../../src/generators/scale-free.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,IAAa;
|
|
1
|
+
{"version":3,"file":"scale-free.js","sourceRoot":"","sources":["../../../src/generators/scale-free.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,IAAa;IAC9D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAW,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAErC,sDAAsD;IACtD,IAAI,WAAW,GAAG,IAAI,CAAC;IACvB,MAAM,MAAM,GACR,IAAI,KAAK,SAAS;QACd,CAAC,CAAC,GAAG,EAAE;YACD,WAAW,GAAG,CAAC,WAAY,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;YACrD,OAAO,WAAW,GAAG,MAAM,CAAC;QAChC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAEtB,yCAAyC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3D,oDAAoD;QACpD,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC;YACjC,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACf,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,CAAC;IACL,CAAC;IAED,OAAO;QACH,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;QAClB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;KACrB,CAAC;AACN,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This file exports the complete public API, maintaining
|
|
5
5
|
* compatibility with the original layout.ts file.
|
|
6
6
|
*/
|
|
7
|
-
export * from
|
|
8
|
-
export { rescaleLayout, rescaleLayoutDict } from
|
|
9
|
-
export * from
|
|
10
|
-
export * from
|
|
7
|
+
export * from "./types";
|
|
8
|
+
export { rescaleLayout, rescaleLayoutDict } from "./utils/rescale";
|
|
9
|
+
export * from "./layouts";
|
|
10
|
+
export * from "./generators";
|
package/dist/src/index.js
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
* compatibility with the original layout.ts file.
|
|
6
6
|
*/
|
|
7
7
|
// Re-export all types
|
|
8
|
-
export * from
|
|
8
|
+
export * from "./types";
|
|
9
9
|
// Re-export utilities that are part of the public API
|
|
10
|
-
export { rescaleLayout, rescaleLayoutDict } from
|
|
10
|
+
export { rescaleLayout, rescaleLayoutDict } from "./utils/rescale";
|
|
11
11
|
// Re-export all layout algorithms
|
|
12
|
-
export * from
|
|
12
|
+
export * from "./layouts";
|
|
13
13
|
// Re-export all graph generation functions
|
|
14
|
-
export * from
|
|
14
|
+
export * from "./generators";
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Random layout algorithm
|
|
3
3
|
*/
|
|
4
|
-
import { Graph, Node, PositionMap } from
|
|
4
|
+
import { Graph, Node, PositionMap } from "../../types";
|
|
5
5
|
/**
|
|
6
6
|
* Position nodes uniformly at random in the unit square.
|
|
7
|
-
*
|
|
8
7
|
* @param G - Graph or list of nodes
|
|
9
8
|
* @param center - Coordinate pair around which to center the layout
|
|
10
9
|
* @param dim - Dimension of layout
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Random layout algorithm
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { RandomNumberGenerator } from
|
|
4
|
+
import { getNodesFromGraph } from "../../utils/graph";
|
|
5
|
+
import { _processParams } from "../../utils/params";
|
|
6
|
+
import { RandomNumberGenerator } from "../../utils/random";
|
|
7
7
|
/**
|
|
8
8
|
* Position nodes uniformly at random in the unit square.
|
|
9
|
-
*
|
|
10
9
|
* @param G - Graph or list of nodes
|
|
11
10
|
* @param center - Coordinate pair around which to center the layout
|
|
12
11
|
* @param dim - Dimension of layout
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../../src/layouts/basic/random.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../../src/layouts/basic/random.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CACxB,CAAiB,EACjB,SAA0B,IAAI,EAC9B,MAAc,CAAC,EACf,OAAsB,IAAI;IAE1B,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAE1B,MAAM,GAAG,GAAG,IAAI,qBAAqB,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;IACzD,MAAM,GAAG,GAAgB,EAAE,CAAC;IAE5B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAU,EAAE,EAAE;QACzB,GAAG,CAAC,IAAI,CAAC,GAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAc,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,CAAS,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { Graph, PositionMap } from
|
|
1
|
+
import type { Graph, PositionMap } from "../../types";
|
|
2
2
|
/**
|
|
3
3
|
* Layout algorithm with attractive and repulsive forces (ARF).
|
|
4
|
-
*
|
|
5
4
|
* @param G - Graph
|
|
6
5
|
* @param pos - Initial positions for nodes
|
|
7
6
|
* @param scaling - Scale factor for positions
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { RandomNumberGenerator } from
|
|
3
|
-
import { randomLayout } from
|
|
1
|
+
import { getEdgesFromGraph, getNodesFromGraph } from "../../utils/graph";
|
|
2
|
+
import { RandomNumberGenerator } from "../../utils/random";
|
|
3
|
+
import { randomLayout } from "../basic/random";
|
|
4
4
|
/**
|
|
5
5
|
* Layout algorithm with attractive and repulsive forces (ARF).
|
|
6
|
-
*
|
|
7
6
|
* @param G - Graph
|
|
8
7
|
* @param pos - Initial positions for nodes
|
|
9
8
|
* @param scaling - Scale factor for positions
|
|
@@ -45,15 +44,18 @@ export function arfLayout(G, pos = null, scaling = 1, a = 1.1, maxIter = 1000, s
|
|
|
45
44
|
const positions = nodes.map((node) => [...pos[node]]);
|
|
46
45
|
// Initialize spring constant matrix
|
|
47
46
|
const N = nodes.length;
|
|
48
|
-
const K = Array(N)
|
|
47
|
+
const K = Array(N)
|
|
48
|
+
.fill(0)
|
|
49
|
+
.map(() => Array(N).fill(1));
|
|
49
50
|
// Set diagonal to zero (no self-attraction)
|
|
50
51
|
for (let i = 0; i < N; i++) {
|
|
51
52
|
K[i][i] = 0;
|
|
52
53
|
}
|
|
53
54
|
// Set stronger attraction between connected nodes
|
|
54
55
|
for (const [source, target] of edges) {
|
|
55
|
-
if (source === target)
|
|
56
|
+
if (source === target) {
|
|
56
57
|
continue;
|
|
58
|
+
}
|
|
57
59
|
const i = nodeIndex[source];
|
|
58
60
|
const j = nodeIndex[target];
|
|
59
61
|
K[i][j] = a;
|
|
@@ -68,11 +70,14 @@ export function arfLayout(G, pos = null, scaling = 1, a = 1.1, maxIter = 1000, s
|
|
|
68
70
|
let nIter = 0;
|
|
69
71
|
while (error > etol && nIter < maxIter) {
|
|
70
72
|
// Calculate changes for each node
|
|
71
|
-
const change = Array(N)
|
|
73
|
+
const change = Array(N)
|
|
74
|
+
.fill(0)
|
|
75
|
+
.map(() => [0, 0]);
|
|
72
76
|
for (let i = 0; i < N; i++) {
|
|
73
77
|
for (let j = 0; j < N; j++) {
|
|
74
|
-
if (i === j)
|
|
78
|
+
if (i === j) {
|
|
75
79
|
continue;
|
|
80
|
+
}
|
|
76
81
|
// Calculate difference vector
|
|
77
82
|
const diff = positions[i].map((coord, dim) => coord - positions[j][dim]);
|
|
78
83
|
// Calculate distance (with minimum to avoid division by zero)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arf.js","sourceRoot":"","sources":["../../../../src/layouts/force-directed/arf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"arf.js","sourceRoot":"","sources":["../../../../src/layouts/force-directed/arf.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { Graph, Node, PositionMap } from
|
|
1
|
+
import type { Graph, Node, PositionMap } from "../../types";
|
|
2
2
|
/**
|
|
3
3
|
* Position nodes using the ForceAtlas2 force-directed algorithm.
|
|
4
|
-
*
|
|
5
4
|
* @param G - Graph
|
|
6
5
|
* @param pos - Initial positions for nodes
|
|
7
6
|
* @param maxIter - Maximum number of iterations
|