@deck.gl-community/graph-layers 9.2.0-beta.2 → 9.2.0-beta.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/core/graph-engine.d.ts +63 -21
- package/dist/core/graph-engine.d.ts.map +1 -1
- package/dist/core/graph-engine.js +155 -75
- package/dist/core/graph-engine.js.map +1 -1
- package/dist/core/graph-layout.d.ts +22 -18
- package/dist/core/graph-layout.d.ts.map +1 -1
- package/dist/core/graph-layout.js +33 -18
- package/dist/core/graph-layout.js.map +1 -1
- package/dist/core/interaction-manager.d.ts +2 -2
- package/dist/core/interaction-manager.d.ts.map +1 -1
- package/dist/core/interaction-manager.js +7 -5
- package/dist/core/interaction-manager.js.map +1 -1
- package/dist/graph/arrow-graph.d.ts +69 -0
- package/dist/graph/arrow-graph.d.ts.map +1 -0
- package/dist/graph/arrow-graph.js +513 -0
- package/dist/graph/arrow-graph.js.map +1 -0
- package/dist/graph/classic-graph.d.ts +169 -0
- package/dist/graph/classic-graph.d.ts.map +1 -0
- package/dist/graph/classic-graph.js +390 -0
- package/dist/graph/classic-graph.js.map +1 -0
- package/dist/graph/edge.d.ts +6 -6
- package/dist/graph/edge.d.ts.map +1 -1
- package/dist/graph/edge.js.map +1 -1
- package/dist/graph/functions/arrow-utils.d.ts +6 -0
- package/dist/graph/functions/arrow-utils.d.ts.map +1 -0
- package/dist/graph/functions/arrow-utils.js +67 -0
- package/dist/graph/functions/arrow-utils.js.map +1 -0
- package/dist/graph/functions/create-graph-from-data.d.ts +3 -0
- package/dist/graph/functions/create-graph-from-data.d.ts.map +1 -0
- package/dist/graph/functions/create-graph-from-data.js +12 -0
- package/dist/graph/functions/create-graph-from-data.js.map +1 -0
- package/dist/graph/graph-normalization.d.ts +10 -0
- package/dist/graph/graph-normalization.d.ts.map +1 -0
- package/dist/graph/graph-normalization.js +65 -0
- package/dist/graph/graph-normalization.js.map +1 -0
- package/dist/graph/graph.d.ts +62 -155
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +11 -300
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/node.d.ts +6 -6
- package/dist/graph/node.d.ts.map +1 -1
- package/dist/graph/node.js +2 -2
- package/dist/graph/node.js.map +1 -1
- package/dist/graph-data/arrow-graph-data-builder.d.ts +21 -0
- package/dist/graph-data/arrow-graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/arrow-graph-data-builder.js +105 -0
- package/dist/graph-data/arrow-graph-data-builder.js.map +1 -0
- package/dist/graph-data/graph-data-builder.d.ts +6 -0
- package/dist/graph-data/graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/graph-data-builder.js +1 -0
- package/dist/graph-data/graph-data-builder.js.map +1 -0
- package/dist/graph-data/graph-data.d.ts +40 -0
- package/dist/graph-data/graph-data.d.ts.map +1 -0
- package/dist/graph-data/graph-data.js +11 -0
- package/dist/graph-data/graph-data.js.map +1 -0
- package/dist/graph-data/plain-graph-data-builder.d.ts +20 -0
- package/dist/graph-data/plain-graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/plain-graph-data-builder.js +105 -0
- package/dist/graph-data/plain-graph-data-builder.js.map +1 -0
- package/dist/graph-style-schema.cdn.js +1 -1
- package/dist/graph-style-schema.json +1 -1
- package/dist/index.cjs +6905 -4576
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +14 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -11
- package/dist/index.js.map +1 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts.map +1 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +1 -2
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js.map +1 -1
- package/dist/layers/common-layers/grid-layer/grid-layer.d.ts +83 -0
- package/dist/layers/common-layers/grid-layer/grid-layer.d.ts.map +1 -0
- package/dist/layers/common-layers/grid-layer/grid-layer.js +133 -0
- package/dist/layers/common-layers/grid-layer/grid-layer.js.map +1 -0
- package/dist/layers/edge-attachment-helper.d.ts.map +1 -1
- package/dist/layers/edge-attachment-helper.js +1 -2
- package/dist/layers/edge-attachment-helper.js.map +1 -1
- package/dist/layers/graph-layer.d.ts +68 -11
- package/dist/layers/graph-layer.d.ts.map +1 -1
- package/dist/layers/graph-layer.js +435 -50
- package/dist/layers/graph-layer.js.map +1 -1
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts +24 -0
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts.map +1 -0
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js +251 -0
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js.map +1 -0
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts +46 -61
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -1
- package/dist/layouts/d3-dag/d3-dag-layout.js +85 -270
- package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.d.ts +20 -8
- package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.js +39 -20
- package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts +19 -15
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/force-multi-graph-layout.js +47 -38
- package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.d.ts +18 -15
- package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.js +33 -34
- package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
- package/dist/layouts/experimental/radial-layout.d.ts +12 -7
- package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/radial-layout.js +31 -14
- package/dist/layouts/experimental/radial-layout.js.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts +11 -8
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.js +59 -56
- package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
- package/dist/layouts/simple-layout.d.ts +8 -25
- package/dist/layouts/simple-layout.d.ts.map +1 -1
- package/dist/layouts/simple-layout.js +13 -17
- package/dist/layouts/simple-layout.js.map +1 -1
- package/dist/loaders/dot-graph-loader.d.ts +25 -0
- package/dist/loaders/dot-graph-loader.d.ts.map +1 -0
- package/dist/loaders/dot-graph-loader.js +668 -0
- package/dist/loaders/dot-graph-loader.js.map +1 -0
- package/dist/loaders/json-graph-loader.d.ts +6 -0
- package/dist/loaders/json-graph-loader.d.ts.map +1 -0
- package/dist/loaders/json-graph-loader.js +31 -0
- package/dist/loaders/json-graph-loader.js.map +1 -0
- package/dist/loaders/{edge-parsers.d.ts → parsers/edge-parsers.d.ts} +1 -1
- package/dist/loaders/parsers/edge-parsers.d.ts.map +1 -0
- package/dist/loaders/{edge-parsers.js → parsers/edge-parsers.js} +1 -1
- package/dist/loaders/parsers/edge-parsers.js.map +1 -0
- package/dist/loaders/{node-parsers.d.ts → parsers/node-parsers.d.ts} +1 -1
- package/dist/loaders/parsers/node-parsers.d.ts.map +1 -0
- package/dist/loaders/{node-parsers.js → parsers/node-parsers.js} +1 -1
- package/dist/loaders/parsers/node-parsers.js.map +1 -0
- package/dist/loaders/parsers/parse-json-graph.d.ts +29 -0
- package/dist/loaders/parsers/parse-json-graph.d.ts.map +1 -0
- package/dist/loaders/parsers/parse-json-graph.js +78 -0
- package/dist/loaders/parsers/parse-json-graph.js.map +1 -0
- package/dist/style/graph-style-engine.d.ts +4 -2
- package/dist/style/graph-style-engine.d.ts.map +1 -1
- package/dist/style/graph-style-engine.js +3 -2
- package/dist/style/graph-style-engine.js.map +1 -1
- package/dist/style/{style-engine.d.ts → stylesheet-engine.d.ts} +3 -3
- package/dist/style/stylesheet-engine.d.ts.map +1 -0
- package/dist/style/{style-engine.js → stylesheet-engine.js} +1 -1
- package/dist/style/stylesheet-engine.js.map +1 -0
- package/dist/utils/collapsed-chains.d.ts +8 -8
- package/dist/utils/collapsed-chains.d.ts.map +1 -1
- package/dist/utils/collapsed-chains.js +1 -6
- package/dist/utils/collapsed-chains.js.map +1 -1
- package/dist/utils/rank-grid.d.ts +30 -0
- package/dist/utils/rank-grid.d.ts.map +1 -0
- package/dist/utils/rank-grid.js +306 -0
- package/dist/utils/rank-grid.js.map +1 -0
- package/package.json +4 -8
- package/src/_disabled/arrow-graph-data.ts.disabled +18 -0
- package/src/_disabled/columnar-graph-data-builder.ts.disabled +250 -0
- package/src/_disabled/graph-runtime-layout.ts.disabled +29 -0
- package/src/core/graph-engine.ts +201 -84
- package/src/core/graph-layout.ts +52 -29
- package/src/core/interaction-manager.ts +20 -20
- package/src/graph/arrow-graph.ts +648 -0
- package/src/graph/classic-graph.ts +447 -0
- package/src/graph/edge.ts +7 -7
- package/src/graph/functions/arrow-utils.ts +72 -0
- package/src/graph/functions/convert-arrow-graph-to-classic-graph.ts.disabled +47 -0
- package/src/graph/functions/convert-plain-graph-to-arrow-graph.ts.disabled +119 -0
- package/src/graph/functions/create-graph-from-data.ts +16 -0
- package/src/graph/functions/create-plain-graph-from-data.ts.disabled +176 -0
- package/src/graph/graph-normalization.ts +87 -0
- package/src/graph/graph.ts +68 -339
- package/src/graph/node.ts +9 -9
- package/src/graph/tabular-graph.ts.disabled +761 -0
- package/src/graph-data/arrow-graph-data-builder.ts +165 -0
- package/src/graph-data/graph-data-builder.ts +7 -0
- package/src/graph-data/graph-data.ts +57 -0
- package/src/graph-data/plain-graph-data-builder.ts +132 -0
- package/src/index.ts +53 -13
- package/src/layers/common-layers/flow-path-layer/flow-path-layer.ts +1 -2
- package/src/layers/common-layers/grid-layer/grid-layer.ts +237 -0
- package/src/layers/edge-attachment-helper.ts +22 -16
- package/src/layers/graph-layer.ts +642 -62
- package/src/layouts/d3-dag/collapsable-d3-dag-layout.ts +330 -0
- package/src/layouts/d3-dag/d3-dag-layout.ts +166 -396
- package/src/layouts/d3-force/d3-force-layout.ts +52 -30
- package/src/layouts/experimental/force-multi-graph-layout.ts +55 -49
- package/src/layouts/experimental/hive-plot-layout.ts +41 -42
- package/src/layouts/experimental/radial-layout.ts +39 -20
- package/src/layouts/gpu-force/gpu-force-layout.ts +72 -70
- package/src/layouts/simple-layout.ts +20 -44
- package/src/loaders/{create-graph.ts → deprecated/create-graph.ts.disabled} +6 -6
- package/src/loaders/deprecated/json-classic-graph-loader.ts.disabled +33 -0
- package/src/loaders/{simple-json-graph-loader.ts → deprecated/simple-json-graph-loader.ts.disabled} +3 -3
- package/src/loaders/{table-graph-loader.ts → deprecated/table-graph-loader.ts.disabled} +8 -8
- package/src/loaders/dot-graph-loader.ts +860 -0
- package/src/loaders/json-graph-loader.ts +48 -0
- package/src/loaders/parsers/create-graph-data.ts.disabled +45 -0
- package/src/loaders/{edge-parsers.ts → parsers/edge-parsers.ts} +2 -2
- package/src/loaders/{node-parsers.ts → parsers/node-parsers.ts} +2 -2
- package/src/loaders/parsers/parse-json-graph.ts +134 -0
- package/src/style/graph-style-engine.ts +5 -2
- package/src/style/{style-engine.ts → stylesheet-engine.ts} +3 -3
- package/src/utils/collapsed-chains.ts +11 -17
- package/src/utils/rank-grid.ts +426 -0
- package/dist/loaders/create-graph.d.ts +0 -12
- package/dist/loaders/create-graph.d.ts.map +0 -1
- package/dist/loaders/create-graph.js +0 -38
- package/dist/loaders/create-graph.js.map +0 -1
- package/dist/loaders/edge-parsers.d.ts.map +0 -1
- package/dist/loaders/edge-parsers.js.map +0 -1
- package/dist/loaders/json-loader.d.ts +0 -7
- package/dist/loaders/json-loader.d.ts.map +0 -1
- package/dist/loaders/json-loader.js +0 -16
- package/dist/loaders/json-loader.js.map +0 -1
- package/dist/loaders/node-parsers.d.ts.map +0 -1
- package/dist/loaders/node-parsers.js.map +0 -1
- package/dist/loaders/simple-json-graph-loader.d.ts +0 -11
- package/dist/loaders/simple-json-graph-loader.d.ts.map +0 -1
- package/dist/loaders/simple-json-graph-loader.js +0 -20
- package/dist/loaders/simple-json-graph-loader.js.map +0 -1
- package/dist/loaders/table-graph-loader.d.ts +0 -16
- package/dist/loaders/table-graph-loader.d.ts.map +0 -1
- package/dist/loaders/table-graph-loader.js +0 -91
- package/dist/loaders/table-graph-loader.js.map +0 -1
- package/dist/style/style-engine.d.ts.map +0 -1
- package/dist/style/style-engine.js.map +0 -1
- package/dist/widgets/long-press-button.d.ts +0 -12
- package/dist/widgets/long-press-button.d.ts.map +0 -1
- package/dist/widgets/long-press-button.js +0 -31
- package/dist/widgets/long-press-button.js.map +0 -1
- package/dist/widgets/view-control-widget.d.ts +0 -77
- package/dist/widgets/view-control-widget.d.ts.map +0 -1
- package/dist/widgets/view-control-widget.js +0 -197
- package/dist/widgets/view-control-widget.js.map +0 -1
- package/src/loaders/json-loader.ts +0 -19
- package/src/widgets/long-press-button.tsx +0 -50
- package/src/widgets/view-control-widget.tsx +0 -339
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
6
|
+
|
|
7
|
+
import type {PlainGraphData} from '../graph-data/graph-data';
|
|
8
|
+
// import {PlainGraphDataBuilder} from '../graph-data/plain-graph-data-builder';
|
|
9
|
+
|
|
10
|
+
// __VERSION__ is injected by babel-plugin-version-inline
|
|
11
|
+
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
12
|
+
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
13
|
+
|
|
14
|
+
export type JSONGraphLoaderOptions = LoaderOptions & {
|
|
15
|
+
jsongraph?: {
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type JSONGraphParserOptions = NonNullable<JSONGraphLoaderOptions['jsongraph']>;
|
|
20
|
+
|
|
21
|
+
export const JSONGraphLoader = {
|
|
22
|
+
dataType: null as unknown as PlainGraphData,
|
|
23
|
+
batchType: null as never,
|
|
24
|
+
|
|
25
|
+
name: 'DOT Graph',
|
|
26
|
+
id: 'dot-graph',
|
|
27
|
+
module: 'graph-layers',
|
|
28
|
+
version: VERSION,
|
|
29
|
+
worker: false,
|
|
30
|
+
extensions: ['json'],
|
|
31
|
+
mimeTypes: ['application/json'],
|
|
32
|
+
text: true,
|
|
33
|
+
options: {
|
|
34
|
+
'jsongraph': {
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: JSONGraphLoaderOptions) => {
|
|
39
|
+
const text = new TextDecoder().decode(arrayBuffer);
|
|
40
|
+
return Promise.resolve(JSONGraphLoader.parseTextSync(text, options));
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
parseTextSync: (text: string, options?: JSONGraphLoaderOptions) => {
|
|
44
|
+
// const parseOptions = {...JSONGraphLoader.options.jsongraph, ...options?.jsongraph};
|
|
45
|
+
throw new Error('JSONGraphLoader.parseTextSync not implemented');
|
|
46
|
+
// return loadSimpleJSONGraph(text, parseOptions);
|
|
47
|
+
}
|
|
48
|
+
} as const satisfies LoaderWithParser<PlainGraphData, never, JSONGraphLoaderOptions>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {PlainGraphDataBuilder} from '../graph-data/plain-graph-data-builder';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated Use `new ClassicGraph(name, nodes, edges)`
|
|
9
|
+
* Create a graph from a list of Nodes and edges
|
|
10
|
+
*/
|
|
11
|
+
export function createGraphData(props: {name; nodes; edges; nodeParser; edgeParser}): ClassicGraph {
|
|
12
|
+
const {name, nodes, edges, nodeParser, edgeParser} = props;
|
|
13
|
+
// create a new empty graph
|
|
14
|
+
|
|
15
|
+
const graphName = name || Date.now();
|
|
16
|
+
|
|
17
|
+
// add nodes
|
|
18
|
+
const glNodes = nodes.map((node) => {
|
|
19
|
+
const {id} = nodeParser(node);
|
|
20
|
+
return new Node({
|
|
21
|
+
id,
|
|
22
|
+
data: node
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
graph.batchAddNodes(glNodes);
|
|
26
|
+
|
|
27
|
+
const glEdges = edges.map((edge) => {
|
|
28
|
+
const {id, sourceId, targetId, directed} = edgeParser(edge);
|
|
29
|
+
return new Edge({
|
|
30
|
+
id,
|
|
31
|
+
sourceId,
|
|
32
|
+
targetId,
|
|
33
|
+
directed,
|
|
34
|
+
data: edge
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
shape: 'plain-graph-data',
|
|
40
|
+
nodes: glNodes,
|
|
41
|
+
edges: glEdges,
|
|
42
|
+
|
|
43
|
+
graphName
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type {EdgeOptions} from '
|
|
6
|
-
import {error} from '
|
|
5
|
+
import type {EdgeOptions} from '../../graph/edge';
|
|
6
|
+
import {error} from '../../utils/log';
|
|
7
7
|
|
|
8
8
|
export function basicEdgeParser(edge: any): Omit<EdgeOptions, 'data'> {
|
|
9
9
|
const {id, directed, sourceId, targetId} = edge;
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type {NodeOptions} from '
|
|
6
|
-
import {error} from '
|
|
5
|
+
import type {NodeOptions} from '../../graph/node';
|
|
6
|
+
import {error} from '../../utils/log';
|
|
7
7
|
|
|
8
8
|
export function basicNodeParser(node: any): Pick<NodeOptions, 'id'> {
|
|
9
9
|
if (node.id === undefined) {
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {NodeState, EdgeState} from '../../core/constants';
|
|
6
|
+
import type {PlainGraphData, GraphNodeData, GraphEdgeData} from '../../graph-data/graph-data';
|
|
7
|
+
import {PlainGraphDataBuilder} from '../../graph-data/plain-graph-data-builder';
|
|
8
|
+
import {basicNodeParser} from '../parsers/node-parsers';
|
|
9
|
+
import {basicEdgeParser} from '../parsers/edge-parsers';
|
|
10
|
+
import {error} from '../../utils/log';
|
|
11
|
+
|
|
12
|
+
type GraphJSON = {
|
|
13
|
+
version?: number;
|
|
14
|
+
nodes?: unknown[] | null;
|
|
15
|
+
edges?: unknown[] | null;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type ParseJSONGraphOptions = {
|
|
19
|
+
json: GraphJSON;
|
|
20
|
+
nodeParser?: (node: any) => {
|
|
21
|
+
id: string | number;
|
|
22
|
+
state?: NodeState;
|
|
23
|
+
selectable?: boolean;
|
|
24
|
+
highlightConnectedEdges?: boolean;
|
|
25
|
+
label?: string;
|
|
26
|
+
weight?: number;
|
|
27
|
+
} | null;
|
|
28
|
+
edgeParser?: (edge: any) => {
|
|
29
|
+
id: string | number;
|
|
30
|
+
directed?: boolean;
|
|
31
|
+
sourceId: string | number;
|
|
32
|
+
targetId: string | number;
|
|
33
|
+
state?: EdgeState;
|
|
34
|
+
label?: string;
|
|
35
|
+
weight?: number;
|
|
36
|
+
} | null;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export function parseJSONGraph({
|
|
40
|
+
json,
|
|
41
|
+
nodeParser = basicNodeParser,
|
|
42
|
+
edgeParser = basicEdgeParser
|
|
43
|
+
}: ParseJSONGraphOptions): PlainGraphData | null {
|
|
44
|
+
const nodes = json?.nodes ?? null;
|
|
45
|
+
const edges = json?.edges ?? null;
|
|
46
|
+
if (!Array.isArray(nodes)) {
|
|
47
|
+
error('Invalid graph: nodes is missing.');
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const normalizedNodes = parseNodes(nodes, nodeParser);
|
|
52
|
+
const normalizedEdges = parseEdges(Array.isArray(edges) ? edges : [], edgeParser);
|
|
53
|
+
|
|
54
|
+
const builder = new PlainGraphDataBuilder({
|
|
55
|
+
// @ts-expect-error TODO: fixme
|
|
56
|
+
nodeCapacity: normalizedNodes.length,
|
|
57
|
+
edgeCapacity: normalizedEdges.length,
|
|
58
|
+
version: json?.version
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
for (const node of normalizedNodes) {
|
|
62
|
+
builder.addNode(node);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
for (const edge of normalizedEdges) {
|
|
66
|
+
builder.addEdge(edge);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return builder.build();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function parseNodes(
|
|
73
|
+
nodes: unknown[],
|
|
74
|
+
nodeParser: ParseJSONGraphOptions['nodeParser']
|
|
75
|
+
): GraphNodeData[] {
|
|
76
|
+
const parsedNodes: GraphNodeData[] = [];
|
|
77
|
+
|
|
78
|
+
for (const node of nodes) {
|
|
79
|
+
const parsed = nodeParser?.(node);
|
|
80
|
+
if (parsed && typeof parsed.id !== 'undefined') {
|
|
81
|
+
const attributes = cloneRecord(node);
|
|
82
|
+
const nodeRecord: GraphNodeData = {
|
|
83
|
+
id: parsed.id,
|
|
84
|
+
state: parsed.state ?? (attributes.state as NodeState | undefined),
|
|
85
|
+
selectable: parsed.selectable ?? (attributes.selectable as boolean | undefined),
|
|
86
|
+
highlightConnectedEdges:
|
|
87
|
+
parsed.highlightConnectedEdges ?? (attributes.highlightConnectedEdges as boolean | undefined),
|
|
88
|
+
label: parsed.label ?? (attributes.label as string | undefined),
|
|
89
|
+
weight: parsed.weight ?? (attributes.weight as number | undefined),
|
|
90
|
+
attributes
|
|
91
|
+
};
|
|
92
|
+
parsedNodes.push(nodeRecord);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return parsedNodes;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function parseEdges(
|
|
100
|
+
edges: unknown[],
|
|
101
|
+
edgeParser: ParseJSONGraphOptions['edgeParser']
|
|
102
|
+
): GraphEdgeData[] {
|
|
103
|
+
const handles: GraphEdgeData[] = [];
|
|
104
|
+
|
|
105
|
+
for (const edge of edges) {
|
|
106
|
+
const parsed = edgeParser?.(edge);
|
|
107
|
+
if (
|
|
108
|
+
parsed &&
|
|
109
|
+
typeof parsed.sourceId !== 'undefined' &&
|
|
110
|
+
typeof parsed.targetId !== 'undefined'
|
|
111
|
+
) {
|
|
112
|
+
const attributes = cloneRecord(edge);
|
|
113
|
+
handles.push({
|
|
114
|
+
id: parsed.id,
|
|
115
|
+
directed: parsed.directed ?? (attributes.directed as boolean | undefined),
|
|
116
|
+
sourceId: parsed.sourceId,
|
|
117
|
+
targetId: parsed.targetId,
|
|
118
|
+
state: parsed.state ?? (attributes.state as EdgeState | undefined),
|
|
119
|
+
label: parsed.label ?? (attributes.label as string | undefined),
|
|
120
|
+
weight: parsed.weight ?? (attributes.weight as number | undefined),
|
|
121
|
+
attributes
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return handles;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function cloneRecord(value: unknown): Record<string, unknown> {
|
|
130
|
+
if (value && typeof value === 'object') {
|
|
131
|
+
return {...(value as Record<string, unknown>)};
|
|
132
|
+
}
|
|
133
|
+
return {};
|
|
134
|
+
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import {ZodError, type ZodIssue} from 'zod';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import {StylesheetEngine, type DeckGLUpdateTriggers} from './stylesheet-engine';
|
|
10
10
|
import {
|
|
11
11
|
GraphStylesheetSchema,
|
|
12
12
|
type GraphStylesheet,
|
|
@@ -39,7 +39,7 @@ function formatStylesheetError(error: ZodError) {
|
|
|
39
39
|
return `Invalid graph stylesheet:\n${details}`;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
export class
|
|
42
|
+
export class GraphStylesheetEngine extends StylesheetEngine {
|
|
43
43
|
constructor(style: GraphStylesheet, {stateUpdateTrigger}: {stateUpdateTrigger?: unknown} = {}) {
|
|
44
44
|
const result = GraphStylesheetSchema.safeParse(style);
|
|
45
45
|
const parsedStyle = result.success
|
|
@@ -54,6 +54,9 @@ export class GraphStyleEngine extends StyleEngine {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
export const GraphStyleEngine = GraphStylesheetEngine;
|
|
58
|
+
export type GraphStyleEngine = GraphStylesheetEngine;
|
|
59
|
+
|
|
57
60
|
export {
|
|
58
61
|
GraphStyleScaleTypeEnum,
|
|
59
62
|
GraphStyleScaleSchema,
|
|
@@ -16,7 +16,7 @@ export type StylePropertyConstructor<T extends StyleProperty = StyleProperty> =
|
|
|
16
16
|
|
|
17
17
|
export type DefaultStyleValueFn = (property: string) => unknown;
|
|
18
18
|
|
|
19
|
-
export type
|
|
19
|
+
export type StylesheetEngineOptions<T extends StyleProperty = StyleProperty> = {
|
|
20
20
|
deckglAccessorMap: DeckGLAccessorMap;
|
|
21
21
|
deckglUpdateTriggers?: DeckGLUpdateTriggers;
|
|
22
22
|
stateUpdateTrigger?: unknown;
|
|
@@ -26,7 +26,7 @@ export type StyleEngineOptions<T extends StyleProperty = StyleProperty> = {
|
|
|
26
26
|
|
|
27
27
|
const DEFAULT_UPDATE_TRIGGERS: DeckGLUpdateTriggers = {};
|
|
28
28
|
|
|
29
|
-
export class
|
|
29
|
+
export class StylesheetEngine<TStyleProperty extends StyleProperty = StyleProperty> {
|
|
30
30
|
type: string;
|
|
31
31
|
properties: Record<string, TStyleProperty>;
|
|
32
32
|
|
|
@@ -36,7 +36,7 @@ export class StyleEngine<TStyleProperty extends StyleProperty = StyleProperty> {
|
|
|
36
36
|
protected readonly StylePropertyClass: StylePropertyConstructor<TStyleProperty>;
|
|
37
37
|
protected readonly getDefaultStyleValue: DefaultStyleValueFn;
|
|
38
38
|
|
|
39
|
-
constructor(style: Record<string, any>, options:
|
|
39
|
+
constructor(style: Record<string, any>, options: StylesheetEngineOptions<TStyleProperty>) {
|
|
40
40
|
const {
|
|
41
41
|
deckglAccessorMap,
|
|
42
42
|
deckglUpdateTriggers = DEFAULT_UPDATE_TRIGGERS,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {GraphEngine} from '../core/graph-engine';
|
|
6
|
-
import type {
|
|
6
|
+
import type {NodeInterface} from '../graph/graph';
|
|
7
7
|
|
|
8
8
|
const OUTLINE_PADDING = 24;
|
|
9
9
|
const OUTLINE_CORNER_RADIUS = 16;
|
|
@@ -77,7 +77,7 @@ export function resolveChainInteractionSource(info: any): ChainInteractionSource
|
|
|
77
77
|
return 'node';
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
function isChainRepresentative(node:
|
|
80
|
+
function isChainRepresentative(node: NodeInterface): boolean {
|
|
81
81
|
const chainId = node.getPropertyValue('collapsedChainId');
|
|
82
82
|
const nodeIds = node.getPropertyValue('collapsedNodeIds');
|
|
83
83
|
const representativeId = node.getPropertyValue('collapsedChainRepresentativeId');
|
|
@@ -90,7 +90,7 @@ function isChainRepresentative(node: Node): boolean {
|
|
|
90
90
|
);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
export function getRepresentativeNodes(engine: GraphEngine | null | undefined):
|
|
93
|
+
export function getRepresentativeNodes(engine: GraphEngine | null | undefined): NodeInterface[] {
|
|
94
94
|
if (!engine) {
|
|
95
95
|
return [];
|
|
96
96
|
}
|
|
@@ -98,18 +98,17 @@ export function getRepresentativeNodes(engine: GraphEngine | null | undefined):
|
|
|
98
98
|
return engine.getNodes().filter((node) => isChainRepresentative(node));
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
export type ChainOutlineGetter = (node:
|
|
101
|
+
export type ChainOutlineGetter = (node: NodeInterface) => [number, number][] | null;
|
|
102
102
|
|
|
103
103
|
export function createChainOutlineGetter(engine: GraphEngine | null | undefined): ChainOutlineGetter {
|
|
104
104
|
if (!engine) {
|
|
105
105
|
return () => null;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
const graph = engine.props.graph;
|
|
109
108
|
const cache = new Map<string, [number, number][] | null>();
|
|
110
109
|
|
|
111
110
|
// eslint-disable-next-line max-statements, complexity
|
|
112
|
-
return (node:
|
|
111
|
+
return (node: NodeInterface): [number, number][] | null => {
|
|
113
112
|
const chainId = node.getPropertyValue('collapsedChainId');
|
|
114
113
|
if (!chainId) {
|
|
115
114
|
return null;
|
|
@@ -120,11 +119,6 @@ export function createChainOutlineGetter(engine: GraphEngine | null | undefined)
|
|
|
120
119
|
return cache.get(cacheKey) ?? null;
|
|
121
120
|
}
|
|
122
121
|
|
|
123
|
-
if (!graph) {
|
|
124
|
-
cache.set(cacheKey, null);
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
122
|
const collapsedNodeIds = node.getPropertyValue('collapsedNodeIds');
|
|
129
123
|
if (!Array.isArray(collapsedNodeIds) || collapsedNodeIds.length === 0) {
|
|
130
124
|
cache.set(cacheKey, null);
|
|
@@ -137,7 +131,7 @@ export function createChainOutlineGetter(engine: GraphEngine | null | undefined)
|
|
|
137
131
|
let maxY = Number.NEGATIVE_INFINITY;
|
|
138
132
|
|
|
139
133
|
for (const nodeId of collapsedNodeIds) {
|
|
140
|
-
const chainNode =
|
|
134
|
+
const chainNode = engine.findNode(nodeId);
|
|
141
135
|
if (chainNode) {
|
|
142
136
|
const position = engine.getNodePosition(chainNode);
|
|
143
137
|
if (position) {
|
|
@@ -217,11 +211,11 @@ export function createChainOutlineGetter(engine: GraphEngine | null | undefined)
|
|
|
217
211
|
}
|
|
218
212
|
|
|
219
213
|
export interface CollapsedChainLayerData {
|
|
220
|
-
representativeNodes:
|
|
221
|
-
collapsedNodes:
|
|
222
|
-
collapsedOutlineNodes:
|
|
223
|
-
expandedNodes:
|
|
224
|
-
expandedOutlineNodes:
|
|
214
|
+
representativeNodes: NodeInterface[];
|
|
215
|
+
collapsedNodes: NodeInterface[];
|
|
216
|
+
collapsedOutlineNodes: NodeInterface[];
|
|
217
|
+
expandedNodes: NodeInterface[];
|
|
218
|
+
expandedOutlineNodes: NodeInterface[];
|
|
225
219
|
getChainOutlinePolygon: ChainOutlineGetter;
|
|
226
220
|
outlineUpdateTrigger: string;
|
|
227
221
|
}
|