@graphty/layout 1.2.7 → 1.2.9
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 +1 -1
- package/dist/layout.d.ts +17 -0
- package/dist/layout.js +15 -14
- package/dist/layout.js.map +1 -1
- package/dist/src/algorithms/index.d.ts +5 -0
- package/dist/src/algorithms/index.js +6 -0
- package/dist/src/algorithms/index.js.map +1 -0
- package/dist/src/algorithms/optimization/index.d.ts +7 -0
- package/dist/src/algorithms/optimization/index.js +7 -0
- package/dist/src/algorithms/optimization/index.js.map +1 -0
- package/dist/src/algorithms/optimization/kamada-kawai-solver.d.ts +32 -0
- package/dist/src/algorithms/optimization/kamada-kawai-solver.js +176 -0
- package/dist/src/algorithms/optimization/kamada-kawai-solver.js.map +1 -0
- package/dist/src/algorithms/optimization/lbfgs.d.ts +13 -0
- package/dist/src/algorithms/optimization/lbfgs.js +56 -0
- package/dist/src/algorithms/optimization/lbfgs.js.map +1 -0
- package/dist/src/algorithms/optimization/line-search.d.ts +15 -0
- package/dist/src/algorithms/optimization/line-search.js +37 -0
- package/dist/src/algorithms/optimization/line-search.js.map +1 -0
- package/dist/src/algorithms/optimization/types.d.ts +5 -0
- package/dist/src/algorithms/optimization/types.js +5 -0
- package/dist/src/algorithms/optimization/types.js.map +1 -0
- package/dist/src/algorithms/planarity/check.d.ts +17 -0
- package/dist/src/algorithms/planarity/check.js +30 -0
- package/dist/src/algorithms/planarity/check.js.map +1 -0
- package/dist/src/algorithms/planarity/embedding.d.ts +29 -0
- package/dist/src/algorithms/planarity/embedding.js +182 -0
- package/dist/src/algorithms/planarity/embedding.js.map +1 -0
- package/dist/src/algorithms/planarity/index.d.ts +7 -0
- package/dist/src/algorithms/planarity/index.js +8 -0
- package/dist/src/algorithms/planarity/index.js.map +1 -0
- package/dist/src/algorithms/planarity/lr-test.d.ts +15 -0
- package/dist/src/algorithms/planarity/lr-test.js +54 -0
- package/dist/src/algorithms/planarity/lr-test.js.map +1 -0
- package/dist/src/algorithms/planarity/special-graphs.d.ts +28 -0
- package/dist/src/algorithms/planarity/special-graphs.js +108 -0
- package/dist/src/algorithms/planarity/special-graphs.js.map +1 -0
- package/dist/src/generators/basic.d.ts +28 -0
- package/dist/src/generators/basic.js +79 -0
- package/dist/src/generators/basic.js.map +1 -0
- package/dist/src/generators/bipartite.d.ts +16 -0
- package/dist/src/generators/bipartite.js +40 -0
- package/dist/src/generators/bipartite.js.map +1 -0
- package/dist/src/generators/grid.d.ts +11 -0
- package/dist/src/generators/grid.js +37 -0
- package/dist/src/generators/grid.js.map +1 -0
- package/dist/src/generators/index.d.ts +8 -0
- package/dist/src/generators/index.js +9 -0
- package/dist/src/generators/index.js.map +1 -0
- package/dist/src/generators/random.d.ts +12 -0
- package/dist/src/generators/random.js +34 -0
- package/dist/src/generators/random.js.map +1 -0
- package/dist/src/generators/scale-free.d.ts +12 -0
- package/dist/src/generators/scale-free.js +62 -0
- package/dist/src/generators/scale-free.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/layouts/basic/index.d.ts +4 -0
- package/dist/src/layouts/basic/index.js +5 -0
- package/dist/src/layouts/basic/index.js.map +1 -0
- package/dist/src/layouts/basic/random.d.ts +14 -0
- package/dist/src/layouts/basic/random.js +27 -0
- package/dist/src/layouts/basic/random.js.map +1 -0
- package/dist/src/layouts/force-directed/arf.d.ts +13 -0
- package/dist/src/layouts/force-directed/arf.js +103 -0
- package/dist/src/layouts/force-directed/arf.js.map +1 -0
- package/dist/src/layouts/force-directed/forceatlas2.d.ts +22 -0
- package/dist/src/layouts/force-directed/forceatlas2.js +340 -0
- package/dist/src/layouts/force-directed/forceatlas2.js.map +1 -0
- package/dist/src/layouts/force-directed/fruchterman-reingold.d.ts +19 -0
- package/dist/src/layouts/force-directed/fruchterman-reingold.js +131 -0
- package/dist/src/layouts/force-directed/fruchterman-reingold.js.map +1 -0
- package/dist/src/layouts/force-directed/index.d.ts +8 -0
- package/dist/src/layouts/force-directed/index.js +9 -0
- package/dist/src/layouts/force-directed/index.js.map +1 -0
- package/dist/src/layouts/force-directed/kamada-kawai.d.ts +15 -0
- package/dist/src/layouts/force-directed/kamada-kawai.js +87 -0
- package/dist/src/layouts/force-directed/kamada-kawai.js.map +1 -0
- package/dist/src/layouts/force-directed/spring.d.ts +19 -0
- package/dist/src/layouts/force-directed/spring.js +23 -0
- package/dist/src/layouts/force-directed/spring.js.map +1 -0
- package/dist/src/layouts/geometric/circular.d.ts +14 -0
- package/dist/src/layouts/geometric/circular.js +67 -0
- package/dist/src/layouts/geometric/circular.js.map +1 -0
- package/dist/src/layouts/geometric/index.d.ts +6 -0
- package/dist/src/layouts/geometric/index.js +7 -0
- package/dist/src/layouts/geometric/index.js.map +1 -0
- package/dist/src/layouts/geometric/shell.d.ts +15 -0
- package/dist/src/layouts/geometric/shell.js +67 -0
- package/dist/src/layouts/geometric/shell.js.map +1 -0
- package/dist/src/layouts/geometric/spiral.d.ts +16 -0
- package/dist/src/layouts/geometric/spiral.js +73 -0
- package/dist/src/layouts/geometric/spiral.js.map +1 -0
- package/dist/src/layouts/hierarchical/bfs.d.ts +12 -0
- package/dist/src/layouts/hierarchical/bfs.js +62 -0
- package/dist/src/layouts/hierarchical/bfs.js.map +1 -0
- package/dist/src/layouts/hierarchical/bipartite.d.ts +16 -0
- package/dist/src/layouts/hierarchical/bipartite.js +72 -0
- package/dist/src/layouts/hierarchical/bipartite.js.map +1 -0
- package/dist/src/layouts/hierarchical/index.d.ts +6 -0
- package/dist/src/layouts/hierarchical/index.js +7 -0
- package/dist/src/layouts/hierarchical/index.js.map +1 -0
- package/dist/src/layouts/hierarchical/multipartite.d.ts +12 -0
- package/dist/src/layouts/hierarchical/multipartite.js +73 -0
- package/dist/src/layouts/hierarchical/multipartite.js.map +1 -0
- package/dist/src/layouts/index.d.ts +8 -0
- package/dist/src/layouts/index.js +9 -0
- package/dist/src/layouts/index.js.map +1 -0
- package/dist/src/layouts/specialized/index.d.ts +5 -0
- package/dist/src/layouts/specialized/index.js +6 -0
- package/dist/src/layouts/specialized/index.js.map +1 -0
- package/dist/src/layouts/specialized/planar.d.ts +15 -0
- package/dist/src/layouts/specialized/planar.js +48 -0
- package/dist/src/layouts/specialized/planar.js.map +1 -0
- package/dist/src/layouts/specialized/spectral.d.ts +14 -0
- package/dist/src/layouts/specialized/spectral.js +106 -0
- package/dist/src/layouts/specialized/spectral.js.map +1 -0
- package/dist/src/types/embedding.d.ts +9 -0
- package/dist/src/types/embedding.js +5 -0
- package/dist/src/types/embedding.js.map +1 -0
- package/dist/src/types/graph.d.ts +10 -0
- package/dist/src/types/graph.js +5 -0
- package/dist/src/types/graph.js.map +1 -0
- package/dist/src/types/index.d.ts +6 -0
- package/dist/src/types/index.js +7 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/layout.d.ts +6 -0
- package/dist/src/types/layout.js +5 -0
- package/dist/src/types/layout.js.map +1 -0
- package/dist/src/utils/graph.d.ts +34 -0
- package/dist/src/utils/graph.js +69 -0
- package/dist/src/utils/graph.js.map +1 -0
- package/dist/src/utils/index.d.ts +8 -0
- package/dist/src/utils/index.js +9 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/numpy.d.ts +17 -0
- package/dist/src/utils/numpy.js +101 -0
- package/dist/src/utils/numpy.js.map +1 -0
- package/dist/src/utils/params.d.ts +17 -0
- package/dist/src/utils/params.js +22 -0
- package/dist/src/utils/params.js.map +1 -0
- package/dist/src/utils/random.d.ts +14 -0
- package/dist/src/utils/random.js +42 -0
- package/dist/src/utils/random.js.map +1 -0
- package/dist/src/utils/rescale.d.ts +21 -0
- package/dist/src/utils/rescale.js +194 -0
- package/dist/src/utils/rescale.js.map +1 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +30 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +3 -3
- package/src/algorithms/planarity/check.ts +4 -3
- package/src/algorithms/planarity/embedding.ts +11 -6
- package/src/algorithms/planarity/lr-test.ts +4 -3
- package/src/layouts/specialized/planar.ts +4 -2
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://coveralls.io/github/graphty-org/layout?branch=main)
|
|
5
5
|
[](https://badge.fury.io/js/%40graphty%2Flayout)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
|
-
[](https://graphty-org.github.io/layout/examples/index.html)
|
|
8
8
|
|
|
9
9
|
**[View Interactive Examples →](https://graphty-org.github.io/layout/examples/index.html)**
|
|
10
10
|
|
package/dist/layout.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript declarations for @graphty/layout
|
|
3
|
+
*
|
|
4
|
+
* This file provides type information for the bundled dist/layout.js module.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Re-export all types
|
|
8
|
+
export * from './src/types/index';
|
|
9
|
+
|
|
10
|
+
// Re-export utilities that are part of the public API
|
|
11
|
+
export { rescaleLayout, rescaleLayoutDict } from './src/utils/rescale';
|
|
12
|
+
|
|
13
|
+
// Re-export all layout algorithms
|
|
14
|
+
export * from './src/layouts/index';
|
|
15
|
+
|
|
16
|
+
// Re-export all graph generation functions
|
|
17
|
+
export * from './src/generators/index';
|
package/dist/layout.js
CHANGED
|
@@ -1374,7 +1374,8 @@ function tryFindBipartitePartition(nodes, edges) {
|
|
|
1374
1374
|
}
|
|
1375
1375
|
return [part0, part1];
|
|
1376
1376
|
}
|
|
1377
|
-
function createTriangulationEmbedding(nodes, edges) {
|
|
1377
|
+
function createTriangulationEmbedding(nodes, edges, seed = null) {
|
|
1378
|
+
const rng = new RandomNumberGenerator(seed ?? void 0);
|
|
1378
1379
|
const embedding = {
|
|
1379
1380
|
nodeOrder: [...nodes],
|
|
1380
1381
|
faceList: [],
|
|
@@ -1410,14 +1411,14 @@ function createTriangulationEmbedding(nodes, edges) {
|
|
|
1410
1411
|
}
|
|
1411
1412
|
}
|
|
1412
1413
|
if (count > 0) {
|
|
1413
|
-
const jitter = 0.1 *
|
|
1414
|
+
const jitter = 0.1 * rng.rand();
|
|
1414
1415
|
embedding.nodePositions[node] = [
|
|
1415
|
-
xSum / count + jitter * (
|
|
1416
|
-
ySum / count + jitter * (
|
|
1416
|
+
xSum / count + jitter * (rng.rand() - 0.5),
|
|
1417
|
+
ySum / count + jitter * (rng.rand() - 0.5)
|
|
1417
1418
|
];
|
|
1418
1419
|
} else {
|
|
1419
|
-
const r = 0.5 *
|
|
1420
|
-
const angle = 2 * Math.PI *
|
|
1420
|
+
const r = 0.5 * rng.rand();
|
|
1421
|
+
const angle = 2 * Math.PI * rng.rand();
|
|
1421
1422
|
embedding.nodePositions[node] = [r * Math.cos(angle), r * Math.sin(angle)];
|
|
1422
1423
|
}
|
|
1423
1424
|
}
|
|
@@ -1504,7 +1505,7 @@ function combinatorialEmbeddingToPos(embedding, nodes) {
|
|
|
1504
1505
|
}
|
|
1505
1506
|
return pos;
|
|
1506
1507
|
}
|
|
1507
|
-
function lrPlanarityTest(nodes, edges) {
|
|
1508
|
+
function lrPlanarityTest(nodes, edges, seed = null) {
|
|
1508
1509
|
const adjList = {};
|
|
1509
1510
|
for (const node of nodes) {
|
|
1510
1511
|
adjList[node] = [];
|
|
@@ -1526,25 +1527,25 @@ function lrPlanarityTest(nodes, edges) {
|
|
|
1526
1527
|
}
|
|
1527
1528
|
dfs(nodes[0]);
|
|
1528
1529
|
if (ordering.length < nodes.length) {
|
|
1529
|
-
return { isPlanar: true, embedding: createTriangulationEmbedding(nodes, edges) };
|
|
1530
|
+
return { isPlanar: true, embedding: createTriangulationEmbedding(nodes, edges, seed) };
|
|
1530
1531
|
}
|
|
1531
1532
|
if (edges.length > 3 * nodes.length - 6) {
|
|
1532
1533
|
return { isPlanar: false, embedding: null };
|
|
1533
1534
|
}
|
|
1534
|
-
const embedding = createTriangulationEmbedding(nodes, edges);
|
|
1535
|
+
const embedding = createTriangulationEmbedding(nodes, edges, seed);
|
|
1535
1536
|
return { isPlanar: true, embedding };
|
|
1536
1537
|
}
|
|
1537
|
-
function checkPlanarity(G, nodes, edges) {
|
|
1538
|
+
function checkPlanarity(G, nodes, edges, seed = null) {
|
|
1538
1539
|
if (nodes.length <= 4) {
|
|
1539
|
-
return { isPlanar: true, embedding: createTriangulationEmbedding(nodes, edges) };
|
|
1540
|
+
return { isPlanar: true, embedding: createTriangulationEmbedding(nodes, edges, seed) };
|
|
1540
1541
|
}
|
|
1541
1542
|
if (isK5(nodes, edges) || isK33(nodes, edges)) {
|
|
1542
1543
|
return { isPlanar: false, embedding: null };
|
|
1543
1544
|
}
|
|
1544
|
-
const result = lrPlanarityTest(nodes, edges);
|
|
1545
|
+
const result = lrPlanarityTest(nodes, edges, seed);
|
|
1545
1546
|
return result;
|
|
1546
1547
|
}
|
|
1547
|
-
function planarLayout(G, scale = 1, center = null, dim = 2) {
|
|
1548
|
+
function planarLayout(G, scale = 1, center = null, dim = 2, seed = null) {
|
|
1548
1549
|
if (dim !== 2) {
|
|
1549
1550
|
throw new Error("can only handle 2 dimensions");
|
|
1550
1551
|
}
|
|
@@ -1559,7 +1560,7 @@ function planarLayout(G, scale = 1, center = null, dim = 2) {
|
|
|
1559
1560
|
if (nodes.length === 0) {
|
|
1560
1561
|
return {};
|
|
1561
1562
|
}
|
|
1562
|
-
const { isPlanar, embedding } = checkPlanarity(graph, nodes, edges);
|
|
1563
|
+
const { isPlanar, embedding } = checkPlanarity(graph, nodes, edges, seed);
|
|
1563
1564
|
if (!isPlanar) {
|
|
1564
1565
|
throw new Error("G is not planar.");
|
|
1565
1566
|
}
|