@deck.gl-community/graph-layers 9.1.0-beta.8 → 9.2.0-beta.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/LICENSE +1 -1
- package/dist/_deprecated/old-constants.d.ts +107 -0
- package/dist/_deprecated/old-constants.d.ts.map +1 -0
- package/dist/_deprecated/old-constants.js +111 -0
- package/dist/_deprecated/old-constants.js.map +1 -0
- package/dist/core/cache.d.ts +0 -1
- package/dist/core/cache.js +0 -1
- package/dist/core/constants.d.ts +12 -100
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +3 -44
- package/dist/core/constants.js.map +1 -1
- package/dist/core/graph-engine.d.ts +12 -11
- package/dist/core/graph-engine.d.ts.map +1 -1
- package/dist/core/graph-engine.js +22 -11
- package/dist/core/graph-engine.js.map +1 -1
- package/dist/core/graph-layout.d.ts +48 -21
- package/dist/core/graph-layout.d.ts.map +1 -1
- package/dist/core/graph-layout.js +91 -24
- package/dist/core/graph-layout.js.map +1 -1
- package/dist/core/interaction-manager.d.ts +6 -4
- package/dist/core/interaction-manager.d.ts.map +1 -1
- package/dist/core/interaction-manager.js +59 -17
- package/dist/core/interaction-manager.js.map +1 -1
- package/dist/graph/edge.d.ts +7 -7
- package/dist/graph/edge.d.ts.map +1 -1
- package/dist/graph/edge.js +3 -6
- package/dist/graph/edge.js.map +1 -1
- package/dist/graph/graph.d.ts +2 -3
- package/dist/graph/graph.js +8 -9
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/node.d.ts +7 -8
- package/dist/graph/node.d.ts.map +1 -1
- package/dist/graph/node.js +3 -5
- package/dist/graph/node.js.map +1 -1
- package/dist/graph-style-schema.cdn.d.ts +2 -0
- package/dist/graph-style-schema.cdn.js +2 -0
- package/dist/graph-style-schema.json +12 -0
- package/dist/index.cjs +2821 -549
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +28 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -21
- package/dist/index.js.map +1 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +0 -1
- package/dist/layers/common-layers/marker-layer/atlas-data-url.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/atlas-data-url.js +0 -1
- package/dist/layers/common-layers/marker-layer/marker-layer.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/marker-layer.js +2 -3
- package/dist/layers/common-layers/marker-layer/marker-list.d.ts +2 -63
- package/dist/layers/common-layers/marker-layer/marker-list.d.ts.map +1 -1
- package/dist/layers/common-layers/marker-layer/marker-list.js +1 -65
- package/dist/layers/common-layers/marker-layer/marker-list.js.map +1 -1
- package/dist/layers/common-layers/marker-layer/marker-mapping.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/marker-mapping.js +0 -1
- package/dist/layers/common-layers/spline-layer/spline-layer.d.ts +0 -1
- package/dist/layers/common-layers/spline-layer/spline-layer.js +0 -1
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.d.ts +0 -1
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +0 -1
- package/dist/layers/edge-attachment-helper.d.ts +15 -0
- package/dist/layers/edge-attachment-helper.d.ts.map +1 -0
- package/dist/layers/edge-attachment-helper.js +230 -0
- package/dist/layers/edge-attachment-helper.js.map +1 -0
- package/dist/layers/edge-layer.d.ts +1 -5
- package/dist/layers/edge-layer.d.ts.map +1 -1
- package/dist/layers/edge-layer.js +9 -11
- package/dist/layers/edge-layer.js.map +1 -1
- package/dist/layers/edge-layers/arrow-2d-geometry.d.ts +4 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.d.ts.map +1 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.js +42 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.js.map +1 -0
- package/dist/layers/edge-layers/curved-edge-layer.d.ts +1 -2
- package/dist/layers/edge-layers/curved-edge-layer.js +1 -2
- package/dist/layers/edge-layers/edge-arrow-layer.d.ts +21 -0
- package/dist/layers/edge-layers/edge-arrow-layer.d.ts.map +1 -0
- package/dist/layers/edge-layers/edge-arrow-layer.js +131 -0
- package/dist/layers/edge-layers/edge-arrow-layer.js.map +1 -0
- package/dist/layers/edge-layers/edge-label-layer.d.ts +1 -2
- package/dist/layers/edge-layers/edge-label-layer.js +1 -2
- package/dist/layers/edge-layers/flow-layer.d.ts +1 -2
- package/dist/layers/edge-layers/flow-layer.js +1 -2
- package/dist/layers/edge-layers/path-edge-layer.d.ts +0 -1
- package/dist/layers/edge-layers/path-edge-layer.js +0 -1
- package/dist/layers/edge-layers/straight-line-edge-layer.d.ts +0 -1
- package/dist/layers/edge-layers/straight-line-edge-layer.js +0 -1
- package/dist/layers/graph-layer.d.ts +22 -23
- package/dist/layers/graph-layer.d.ts.map +1 -1
- package/dist/layers/graph-layer.js +218 -62
- package/dist/layers/graph-layer.js.map +1 -1
- package/dist/layers/node-layers/circle-layer.d.ts +0 -1
- package/dist/layers/node-layers/circle-layer.js +0 -1
- package/dist/layers/node-layers/image-layer.d.ts +0 -1
- package/dist/layers/node-layers/image-layer.js +0 -1
- package/dist/layers/node-layers/label-layer.d.ts +1 -2
- package/dist/layers/node-layers/label-layer.js +1 -2
- package/dist/layers/node-layers/path-rounded-rectangle-layer.d.ts +0 -1
- package/dist/layers/node-layers/path-rounded-rectangle-layer.js +1 -2
- package/dist/layers/node-layers/rectangle-layer.d.ts +0 -1
- package/dist/layers/node-layers/rectangle-layer.js +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.d.ts +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer.d.ts +1 -2
- package/dist/layers/node-layers/rounded-rectangle-layer.js +2 -3
- package/dist/layers/node-layers/zoomable-marker-layer.d.ts +1 -2
- package/dist/layers/node-layers/zoomable-marker-layer.js +1 -2
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts +117 -0
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -0
- package/dist/layouts/d3-dag/d3-dag-layout.js +716 -0
- package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -0
- package/dist/layouts/d3-force/d3-force-layout.d.ts +4 -4
- package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.js +25 -10
- package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
- package/dist/layouts/d3-force/worker.d.ts +0 -1
- package/dist/layouts/d3-force/worker.js +0 -1
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts +9 -8
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/force-multi-graph-layout.js +15 -11
- package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.d.ts +11 -8
- package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.js +12 -7
- package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
- package/dist/layouts/experimental/radial-layout.d.ts +10 -7
- package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/radial-layout.js +11 -6
- package/dist/layouts/experimental/radial-layout.js.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts +4 -4
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.js +18 -9
- package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
- package/dist/layouts/gpu-force/worker.d.ts +0 -1
- package/dist/layouts/gpu-force/worker.js +0 -1
- package/dist/layouts/simple-layout.d.ts +19 -12
- package/dist/layouts/simple-layout.d.ts.map +1 -1
- package/dist/layouts/simple-layout.js +26 -15
- package/dist/layouts/simple-layout.js.map +1 -1
- package/dist/loaders/create-graph.d.ts +1 -2
- package/dist/loaders/create-graph.js +3 -4
- package/dist/loaders/edge-parsers.d.ts +1 -2
- package/dist/loaders/edge-parsers.js +2 -3
- package/dist/loaders/edge-parsers.js.map +1 -1
- package/dist/loaders/json-loader.d.ts +2 -3
- package/dist/loaders/json-loader.d.ts.map +1 -1
- package/dist/loaders/json-loader.js +5 -6
- package/dist/loaders/json-loader.js.map +1 -1
- package/dist/loaders/node-parsers.d.ts +1 -2
- package/dist/loaders/node-parsers.js +2 -3
- package/dist/loaders/node-parsers.js.map +1 -1
- package/dist/loaders/simple-json-graph-loader.d.ts +0 -1
- package/dist/loaders/simple-json-graph-loader.d.ts.map +1 -1
- package/dist/loaders/simple-json-graph-loader.js +5 -6
- package/dist/loaders/simple-json-graph-loader.js.map +1 -1
- package/dist/loaders/table-graph-loader.d.ts +3 -4
- package/dist/loaders/table-graph-loader.js +5 -6
- package/dist/loaders/table-graph-loader.js.map +1 -1
- package/dist/style/graph-layer-stylesheet.d.ts +34 -0
- package/dist/style/graph-layer-stylesheet.d.ts.map +1 -0
- package/dist/style/graph-layer-stylesheet.js +39 -0
- package/dist/style/graph-layer-stylesheet.js.map +1 -0
- package/dist/style/graph-style-accessor-map.d.ts +93 -0
- package/dist/style/graph-style-accessor-map.d.ts.map +1 -0
- package/dist/style/graph-style-accessor-map.js +93 -0
- package/dist/style/graph-style-accessor-map.js.map +1 -0
- package/dist/style/graph-style-engine.d.ts +10 -0
- package/dist/style/graph-style-engine.d.ts.map +1 -0
- package/dist/style/graph-style-engine.js +163 -0
- package/dist/style/graph-style-engine.js.map +1 -0
- package/dist/style/graph-stylesheet.schema.d.ts +310 -0
- package/dist/style/graph-stylesheet.schema.d.ts.map +1 -0
- package/dist/style/graph-stylesheet.schema.js +237 -0
- package/dist/style/graph-stylesheet.schema.js.map +1 -0
- package/dist/style/style-engine.d.ts +33 -0
- package/dist/style/style-engine.d.ts.map +1 -0
- package/dist/style/style-engine.js +121 -0
- package/dist/style/style-engine.js.map +1 -0
- package/dist/style/style-property.d.ts +2 -3
- package/dist/style/style-property.d.ts.map +1 -1
- package/dist/style/style-property.js +224 -48
- package/dist/style/style-property.js.map +1 -1
- package/dist/utils/collapsed-chains.d.ts +17 -0
- package/dist/utils/collapsed-chains.d.ts.map +1 -0
- package/dist/utils/collapsed-chains.js +197 -0
- package/dist/utils/collapsed-chains.js.map +1 -0
- package/dist/utils/layer-utils.d.ts +0 -1
- package/dist/utils/layer-utils.d.ts.map +1 -1
- package/dist/utils/layer-utils.js +0 -1
- package/dist/utils/log.d.ts +2 -1
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/log.js +12 -2
- package/dist/utils/log.js.map +1 -1
- package/dist/utils/node-boundary.d.ts +10 -0
- package/dist/utils/node-boundary.d.ts.map +1 -0
- package/dist/utils/node-boundary.js +130 -0
- package/dist/utils/node-boundary.js.map +1 -0
- package/dist/utils/polygon-calculations.d.ts +0 -1
- package/dist/utils/polygon-calculations.js +0 -1
- package/dist/widgets/long-press-button.d.ts +0 -1
- package/dist/widgets/long-press-button.js +0 -1
- package/dist/widgets/view-control-widget.d.ts +4 -5
- package/dist/widgets/view-control-widget.d.ts.map +1 -1
- package/dist/widgets/view-control-widget.js +10 -8
- package/dist/widgets/view-control-widget.js.map +1 -1
- package/package.json +23 -7
- package/src/_deprecated/old-constants.ts +122 -0
- package/src/core/constants.ts +21 -43
- package/src/core/graph-engine.ts +24 -9
- package/src/core/graph-layout.ts +133 -28
- package/src/core/interaction-manager.ts +80 -20
- package/src/graph/edge.ts +6 -6
- package/src/graph/graph.ts +7 -7
- package/src/graph/node.ts +6 -6
- package/src/index.ts +31 -6
- package/src/layers/common-layers/marker-layer/marker-list.ts +62 -64
- package/src/layers/edge-attachment-helper.ts +355 -0
- package/src/layers/edge-layer.ts +6 -7
- package/src/layers/edge-layers/arrow-2d-geometry.ts +51 -0
- package/src/layers/edge-layers/edge-arrow-layer.ts +171 -0
- package/src/layers/graph-layer.ts +304 -86
- package/src/layouts/d3-dag/d3-dag-layout.ts +969 -0
- package/src/layouts/d3-force/d3-force-layout.ts +33 -11
- package/src/layouts/experimental/force-multi-graph-layout.ts +22 -13
- package/src/layouts/experimental/hive-plot-layout.ts +22 -10
- package/src/layouts/experimental/radial-layout.ts +20 -8
- package/src/layouts/gpu-force/gpu-force-layout.ts +22 -10
- package/src/layouts/simple-layout.ts +48 -25
- package/src/loaders/edge-parsers.ts +2 -2
- package/src/loaders/json-loader.ts +2 -2
- package/src/loaders/node-parsers.ts +2 -2
- package/src/loaders/simple-json-graph-loader.ts +2 -2
- package/src/loaders/table-graph-loader.ts +2 -2
- package/src/style/graph-layer-stylesheet.ts +99 -0
- package/src/style/graph-style-accessor-map.ts +103 -0
- package/src/style/graph-style-engine.ts +229 -0
- package/src/style/graph-stylesheet.schema.ts +344 -0
- package/src/style/style-engine.ts +168 -0
- package/src/style/style-property.ts +314 -51
- package/src/utils/collapsed-chains.ts +261 -0
- package/src/utils/log.ts +15 -1
- package/src/utils/node-boundary.ts +238 -0
- package/src/widgets/view-control-widget.tsx +15 -13
- package/dist/style/style-sheet.d.ts +0 -11
- package/dist/style/style-sheet.d.ts.map +0 -1
- package/dist/style/style-sheet.js +0 -253
- package/dist/style/style-sheet.js.map +0 -1
- package/src/style/style-sheet.ts +0 -277
|
@@ -2,19 +2,32 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
+
/* eslint-disable no-continue */
|
|
6
|
+
|
|
5
7
|
import type {CompositeLayerProps} from '@deck.gl/core';
|
|
6
8
|
import {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';
|
|
9
|
+
import {PolygonLayer} from '@deck.gl/layers';
|
|
7
10
|
|
|
8
|
-
import {NODE_TYPE, EDGE_DECORATOR_TYPE} from '../core/constants';
|
|
9
11
|
import {Graph} from '../graph/graph';
|
|
12
|
+
import type {Node} from '../graph/node';
|
|
10
13
|
import {GraphLayout} from '../core/graph-layout';
|
|
11
14
|
import {GraphEngine} from '../core/graph-engine';
|
|
12
15
|
|
|
13
|
-
import {
|
|
16
|
+
import {GraphStyleEngine, type GraphStylesheet} from '../style/graph-style-engine';
|
|
14
17
|
import {mixedGetPosition} from '../utils/layer-utils';
|
|
15
18
|
import {InteractionManager} from '../core/interaction-manager';
|
|
19
|
+
import {buildCollapsedChainLayers} from '../utils/collapsed-chains';
|
|
20
|
+
|
|
21
|
+
import {warn} from '../utils/log';
|
|
16
22
|
|
|
17
|
-
import {
|
|
23
|
+
import {
|
|
24
|
+
DEFAULT_GRAPH_LAYER_STYLESHEET,
|
|
25
|
+
normalizeGraphLayerStylesheet,
|
|
26
|
+
type GraphLayerEdgeStyle,
|
|
27
|
+
type GraphLayerNodeStyle,
|
|
28
|
+
type GraphLayerStylesheet,
|
|
29
|
+
type NormalizedGraphLayerStylesheet
|
|
30
|
+
} from '../style/graph-layer-stylesheet';
|
|
18
31
|
|
|
19
32
|
// node layers
|
|
20
33
|
import {CircleLayer} from './node-layers/circle-layer';
|
|
@@ -29,22 +42,25 @@ import {ZoomableMarkerLayer} from './node-layers/zoomable-marker-layer';
|
|
|
29
42
|
import {EdgeLayer} from './edge-layer';
|
|
30
43
|
import {EdgeLabelLayer} from './edge-layers/edge-label-layer';
|
|
31
44
|
import {FlowLayer} from './edge-layers/flow-layer';
|
|
45
|
+
import {EdgeArrowLayer} from './edge-layers/edge-arrow-layer';
|
|
46
|
+
import {EdgeAttachmentHelper} from './edge-attachment-helper';
|
|
32
47
|
|
|
33
48
|
import {JSONLoader} from '../loaders/json-loader';
|
|
34
49
|
|
|
35
50
|
const NODE_LAYER_MAP = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
51
|
+
'rectangle': RectangleLayer,
|
|
52
|
+
'rounded-rectangle': RoundedRectangleLayer,
|
|
53
|
+
'path-rounded-rectangle': PathBasedRoundedRectangleLayer,
|
|
54
|
+
'icon': ImageLayer,
|
|
55
|
+
'circle': CircleLayer,
|
|
56
|
+
'label': LabelLayer,
|
|
57
|
+
'marker': ZoomableMarkerLayer
|
|
43
58
|
};
|
|
44
59
|
|
|
45
60
|
const EDGE_DECORATOR_LAYER_MAP = {
|
|
46
|
-
|
|
47
|
-
|
|
61
|
+
'edge-label': EdgeLabelLayer,
|
|
62
|
+
'flow': FlowLayer,
|
|
63
|
+
'arrow': EdgeArrowLayer
|
|
48
64
|
};
|
|
49
65
|
|
|
50
66
|
const SHARED_LAYER_PROPS = {
|
|
@@ -54,6 +70,14 @@ const SHARED_LAYER_PROPS = {
|
|
|
54
70
|
}
|
|
55
71
|
};
|
|
56
72
|
|
|
73
|
+
const NODE_STYLE_DEPRECATION_MESSAGE =
|
|
74
|
+
'GraphLayer: `nodeStyle` has been replaced by `stylesheet.nodes` and will be removed in a future release.';
|
|
75
|
+
const EDGE_STYLE_DEPRECATION_MESSAGE =
|
|
76
|
+
'GraphLayer: `edgeStyle` has been replaced by `stylesheet.edges` and will be removed in a future release.';
|
|
77
|
+
|
|
78
|
+
let NODE_STYLE_DEPRECATION_WARNED = false;
|
|
79
|
+
let EDGE_STYLE_DEPRECATION_WARNED = false;
|
|
80
|
+
|
|
57
81
|
export type GraphLayerProps = CompositeLayerProps & _GraphLayerProps;
|
|
58
82
|
|
|
59
83
|
export type _GraphLayerProps = {
|
|
@@ -62,14 +86,11 @@ export type _GraphLayerProps = {
|
|
|
62
86
|
graphLoader?: (opts: {json: any}) => Graph;
|
|
63
87
|
engine?: GraphEngine;
|
|
64
88
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
/** an array of styles for layers */
|
|
71
|
-
decorators?: any[];
|
|
72
|
-
};
|
|
89
|
+
stylesheet?: GraphLayerStylesheet;
|
|
90
|
+
/** @deprecated Use `stylesheet.nodes`. */
|
|
91
|
+
nodeStyle?: GraphLayerNodeStyle[];
|
|
92
|
+
/** @deprecated Use `stylesheet.edges`. */
|
|
93
|
+
edgeStyle?: GraphLayerEdgeStyle | GraphLayerEdgeStyle[];
|
|
73
94
|
nodeEvents?: {
|
|
74
95
|
onMouseLeave?: () => void;
|
|
75
96
|
onHover?: () => void;
|
|
@@ -84,6 +105,7 @@ export type _GraphLayerProps = {
|
|
|
84
105
|
enableDragging?: boolean;
|
|
85
106
|
};
|
|
86
107
|
|
|
108
|
+
/** Composite layer that renders graph nodes, edges, and decorators. */
|
|
87
109
|
export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
88
110
|
static layerName = 'GraphLayer';
|
|
89
111
|
|
|
@@ -95,7 +117,8 @@ export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
|
95
117
|
// Graph props
|
|
96
118
|
graphLoader: JSONLoader,
|
|
97
119
|
|
|
98
|
-
|
|
120
|
+
stylesheet: DEFAULT_GRAPH_LAYER_STYLESHEET,
|
|
121
|
+
nodeStyle: undefined as unknown as GraphLayerNodeStyle[],
|
|
99
122
|
nodeEvents: {
|
|
100
123
|
onMouseLeave: () => {},
|
|
101
124
|
onHover: () => {},
|
|
@@ -103,12 +126,7 @@ export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
|
103
126
|
onClick: () => {},
|
|
104
127
|
onDrag: () => {}
|
|
105
128
|
},
|
|
106
|
-
edgeStyle:
|
|
107
|
-
stroke: 'black',
|
|
108
|
-
strokeWidth: 1,
|
|
109
|
-
// an array of styles for layers
|
|
110
|
-
decorators: []
|
|
111
|
-
},
|
|
129
|
+
edgeStyle: undefined as unknown as GraphLayerEdgeStyle | GraphLayerEdgeStyle[],
|
|
112
130
|
edgeEvents: {
|
|
113
131
|
onClick: () => {},
|
|
114
132
|
onHover: () => {}
|
|
@@ -122,6 +140,8 @@ export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
|
122
140
|
graphEngine?: GraphEngine;
|
|
123
141
|
};
|
|
124
142
|
|
|
143
|
+
private readonly _edgeAttachmentHelper = new EdgeAttachmentHelper();
|
|
144
|
+
|
|
125
145
|
forceUpdate = () => {
|
|
126
146
|
if (this.context && this.context.layerManager) {
|
|
127
147
|
this.setNeedsUpdate();
|
|
@@ -163,6 +183,10 @@ export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
|
163
183
|
this._setGraphEngine(graphEngine);
|
|
164
184
|
this.state.interactionManager.updateProps(props);
|
|
165
185
|
this.forceUpdate();
|
|
186
|
+
} else if (changeFlags.propsChanged && props.engine !== oldProps.engine) {
|
|
187
|
+
this._setGraphEngine(props.engine);
|
|
188
|
+
this.state.interactionManager.updateProps(props);
|
|
189
|
+
this.forceUpdate();
|
|
166
190
|
}
|
|
167
191
|
}
|
|
168
192
|
|
|
@@ -170,6 +194,40 @@ export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
|
170
194
|
this._removeGraphEngine();
|
|
171
195
|
}
|
|
172
196
|
|
|
197
|
+
private _getResolvedStylesheet(): NormalizedGraphLayerStylesheet {
|
|
198
|
+
const {stylesheet, nodeStyle, edgeStyle} = this.props;
|
|
199
|
+
|
|
200
|
+
const usingNodeStyle = typeof nodeStyle !== 'undefined';
|
|
201
|
+
if (usingNodeStyle && !NODE_STYLE_DEPRECATION_WARNED) {
|
|
202
|
+
warn(NODE_STYLE_DEPRECATION_MESSAGE);
|
|
203
|
+
NODE_STYLE_DEPRECATION_WARNED = true;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const usingEdgeStyle = typeof edgeStyle !== 'undefined';
|
|
207
|
+
if (usingEdgeStyle && !EDGE_STYLE_DEPRECATION_WARNED) {
|
|
208
|
+
warn(EDGE_STYLE_DEPRECATION_MESSAGE);
|
|
209
|
+
EDGE_STYLE_DEPRECATION_WARNED = true;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return normalizeGraphLayerStylesheet({
|
|
213
|
+
stylesheet,
|
|
214
|
+
nodeStyle: usingNodeStyle ? nodeStyle : undefined,
|
|
215
|
+
edgeStyle: usingEdgeStyle ? edgeStyle : undefined
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
private _createStyleEngine(style: GraphStylesheet, context: string): GraphStyleEngine | null {
|
|
220
|
+
try {
|
|
221
|
+
return new GraphStyleEngine(style, {
|
|
222
|
+
stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()
|
|
223
|
+
});
|
|
224
|
+
} catch (error) {
|
|
225
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
226
|
+
warn(`GraphLayer: Failed to apply ${context}: ${message}`);
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
173
231
|
_setGraphEngine(graphEngine: GraphEngine) {
|
|
174
232
|
if (graphEngine === this.state.graphEngine) {
|
|
175
233
|
return;
|
|
@@ -194,66 +252,91 @@ export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
|
194
252
|
|
|
195
253
|
createNodeLayers() {
|
|
196
254
|
const engine = this.state.graphEngine;
|
|
197
|
-
const {
|
|
198
|
-
|
|
255
|
+
const {nodes: nodeStyles} = this._getResolvedStylesheet();
|
|
256
|
+
|
|
257
|
+
if (!engine || !Array.isArray(nodeStyles) || nodeStyles.length === 0) {
|
|
199
258
|
return [];
|
|
200
259
|
}
|
|
201
260
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
261
|
+
const baseLayers = nodeStyles
|
|
262
|
+
.filter(Boolean)
|
|
263
|
+
.map((style, idx) => {
|
|
264
|
+
const {pickable = true, visible = true, data = (nodes) => nodes, ...restStyle} = style;
|
|
265
|
+
const LayerType = NODE_LAYER_MAP[style.type];
|
|
266
|
+
if (!LayerType) {
|
|
267
|
+
warn(`GraphLayer: Invalid node type "${style.type}".`);
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
const stylesheet = this._createStyleEngine(
|
|
271
|
+
restStyle as unknown as GraphStylesheet,
|
|
272
|
+
`node stylesheet "${style.type}"`
|
|
273
|
+
);
|
|
274
|
+
if (!stylesheet) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
const getOffset = stylesheet.getDeckGLAccessor('getOffset');
|
|
278
|
+
return new LayerType({
|
|
279
|
+
...SHARED_LAYER_PROPS,
|
|
280
|
+
id: `node-rule-${idx}`,
|
|
281
|
+
data: data(engine.getNodes()),
|
|
282
|
+
getPosition: mixedGetPosition(engine.getNodePosition, getOffset),
|
|
283
|
+
pickable,
|
|
284
|
+
positionUpdateTrigger: [
|
|
285
|
+
engine.getLayoutLastUpdate(),
|
|
286
|
+
engine.getLayoutState(),
|
|
287
|
+
stylesheet.getDeckGLAccessorUpdateTrigger('getOffset')
|
|
288
|
+
].join(),
|
|
289
|
+
stylesheet,
|
|
290
|
+
visible
|
|
291
|
+
} as any);
|
|
292
|
+
})
|
|
293
|
+
.filter(Boolean) as any[];
|
|
294
|
+
|
|
295
|
+
const chainLayers = this._createChainOverlayLayers(engine);
|
|
296
|
+
|
|
297
|
+
return [...baseLayers, ...chainLayers];
|
|
228
298
|
}
|
|
229
299
|
|
|
230
300
|
createEdgeLayers() {
|
|
231
301
|
const engine = this.state.graphEngine;
|
|
232
|
-
const {
|
|
302
|
+
const {edges: edgeStyles, nodes: nodeStyles} = this._getResolvedStylesheet();
|
|
233
303
|
|
|
234
|
-
if (!engine || !
|
|
304
|
+
if (!engine || !edgeStyles) {
|
|
235
305
|
return [];
|
|
236
306
|
}
|
|
237
307
|
|
|
238
|
-
|
|
308
|
+
const edgeStyleArray = Array.isArray(edgeStyles) ? edgeStyles : [edgeStyles];
|
|
309
|
+
|
|
310
|
+
if (edgeStyleArray.length === 0) {
|
|
311
|
+
return [];
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
const getLayoutInfo = this._edgeAttachmentHelper.getLayoutAccessor({
|
|
315
|
+
engine,
|
|
316
|
+
interactionManager: this.state.interactionManager,
|
|
317
|
+
nodeStyle: nodeStyles
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
return edgeStyleArray
|
|
239
321
|
.filter(Boolean)
|
|
240
322
|
.flatMap((style, idx) => {
|
|
241
323
|
const {decorators, data = (edges) => edges, visible = true, ...restEdgeStyle} = style;
|
|
242
|
-
const stylesheet =
|
|
324
|
+
const stylesheet = this._createStyleEngine(
|
|
243
325
|
{
|
|
244
|
-
type: '
|
|
326
|
+
type: 'edge',
|
|
245
327
|
...restEdgeStyle
|
|
246
|
-
},
|
|
247
|
-
|
|
248
|
-
stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()
|
|
249
|
-
}
|
|
328
|
+
} as GraphStylesheet,
|
|
329
|
+
'edge stylesheet'
|
|
250
330
|
);
|
|
331
|
+
if (!stylesheet) {
|
|
332
|
+
return [];
|
|
333
|
+
}
|
|
251
334
|
|
|
252
335
|
const edgeLayer = new EdgeLayer({
|
|
253
336
|
...SHARED_LAYER_PROPS,
|
|
254
337
|
id: `edge-layer-${idx}`,
|
|
255
338
|
data: data(engine.getEdges()),
|
|
256
|
-
getLayoutInfo
|
|
339
|
+
getLayoutInfo,
|
|
257
340
|
pickable: true,
|
|
258
341
|
positionUpdateTrigger: [engine.getLayoutLastUpdate(), engine.getLayoutState()].join(),
|
|
259
342
|
stylesheet,
|
|
@@ -261,28 +344,37 @@ export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
|
261
344
|
} as any);
|
|
262
345
|
|
|
263
346
|
if (!decorators || !Array.isArray(decorators) || decorators.length === 0) {
|
|
264
|
-
return edgeLayer;
|
|
347
|
+
return [edgeLayer];
|
|
265
348
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
349
|
+
|
|
350
|
+
const decoratorLayers = decorators
|
|
351
|
+
.filter(Boolean)
|
|
352
|
+
.map((decoratorStyle, idx2) => {
|
|
353
|
+
const DecoratorLayer = EDGE_DECORATOR_LAYER_MAP[decoratorStyle.type];
|
|
354
|
+
if (!DecoratorLayer) {
|
|
355
|
+
warn(`GraphLayer: Invalid edge decorator type "${decoratorStyle.type}".`);
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
const decoratorStylesheet = this._createStyleEngine(
|
|
359
|
+
decoratorStyle as unknown as GraphStylesheet,
|
|
360
|
+
`edge decorator stylesheet "${decoratorStyle.type}"`
|
|
361
|
+
);
|
|
362
|
+
if (!decoratorStylesheet) {
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
return new DecoratorLayer({
|
|
366
|
+
...SHARED_LAYER_PROPS,
|
|
367
|
+
id: `edge-decorator-${idx2}`,
|
|
368
|
+
data: data(engine.getEdges()),
|
|
369
|
+
getLayoutInfo,
|
|
370
|
+
pickable: true,
|
|
371
|
+
positionUpdateTrigger: [engine.getLayoutLastUpdate(), engine.getLayoutState()].join(),
|
|
372
|
+
stylesheet: decoratorStylesheet
|
|
373
|
+
} as any);
|
|
374
|
+
})
|
|
375
|
+
.filter(Boolean);
|
|
376
|
+
|
|
377
|
+
return [edgeLayer, ...decoratorLayers];
|
|
286
378
|
});
|
|
287
379
|
}
|
|
288
380
|
|
|
@@ -309,4 +401,130 @@ export class GraphLayer extends CompositeLayer<GraphLayerProps> {
|
|
|
309
401
|
renderLayers() {
|
|
310
402
|
return [this.createEdgeLayers(), this.createNodeLayers()];
|
|
311
403
|
}
|
|
404
|
+
|
|
405
|
+
private _createChainOverlayLayers(engine: GraphEngine) {
|
|
406
|
+
const chainData = buildCollapsedChainLayers(engine);
|
|
407
|
+
if (!chainData) {
|
|
408
|
+
return [];
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
const {
|
|
412
|
+
collapsedNodes,
|
|
413
|
+
collapsedOutlineNodes,
|
|
414
|
+
expandedNodes,
|
|
415
|
+
expandedOutlineNodes,
|
|
416
|
+
getChainOutlinePolygon,
|
|
417
|
+
outlineUpdateTrigger
|
|
418
|
+
} = chainData;
|
|
419
|
+
|
|
420
|
+
const layers: any[] = [];
|
|
421
|
+
|
|
422
|
+
if (collapsedOutlineNodes.length > 0) {
|
|
423
|
+
layers.push(
|
|
424
|
+
new PolygonLayer({
|
|
425
|
+
...SHARED_LAYER_PROPS,
|
|
426
|
+
id: 'collapsed-chain-outlines',
|
|
427
|
+
data: collapsedOutlineNodes,
|
|
428
|
+
getPolygon: (node: Node) => getChainOutlinePolygon(node),
|
|
429
|
+
stroked: true,
|
|
430
|
+
filled: false,
|
|
431
|
+
getLineColor: [220, 64, 64, 220],
|
|
432
|
+
getLineWidth: 2,
|
|
433
|
+
lineWidthUnits: 'pixels',
|
|
434
|
+
lineWidthMinPixels: 2,
|
|
435
|
+
pickable: true,
|
|
436
|
+
updateTriggers: {
|
|
437
|
+
getPolygon: [outlineUpdateTrigger]
|
|
438
|
+
}
|
|
439
|
+
})
|
|
440
|
+
);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
const collapsedMarkerStylesheet = this._createStyleEngine(
|
|
444
|
+
{
|
|
445
|
+
type: 'marker',
|
|
446
|
+
fill: [64, 96, 192, 255],
|
|
447
|
+
size: 32,
|
|
448
|
+
marker: 'circle-plus-filled',
|
|
449
|
+
offset: [24, -24],
|
|
450
|
+
scaleWithZoom: false
|
|
451
|
+
} as GraphStylesheet<'marker'>,
|
|
452
|
+
'collapsed chain marker stylesheet'
|
|
453
|
+
);
|
|
454
|
+
|
|
455
|
+
if (collapsedMarkerStylesheet && collapsedNodes.length > 0) {
|
|
456
|
+
const getOffset = collapsedMarkerStylesheet.getDeckGLAccessor('getOffset');
|
|
457
|
+
layers.push(
|
|
458
|
+
new ZoomableMarkerLayer({
|
|
459
|
+
...SHARED_LAYER_PROPS,
|
|
460
|
+
id: 'collapsed-chain-markers',
|
|
461
|
+
data: collapsedNodes,
|
|
462
|
+
getPosition: mixedGetPosition(engine.getNodePosition, getOffset),
|
|
463
|
+
pickable: true,
|
|
464
|
+
positionUpdateTrigger: [
|
|
465
|
+
engine.getLayoutLastUpdate(),
|
|
466
|
+
engine.getLayoutState(),
|
|
467
|
+
collapsedMarkerStylesheet.getDeckGLAccessorUpdateTrigger('getOffset')
|
|
468
|
+
].join(),
|
|
469
|
+
stylesheet: collapsedMarkerStylesheet,
|
|
470
|
+
visible: true
|
|
471
|
+
} as any)
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (expandedOutlineNodes.length > 0) {
|
|
476
|
+
layers.push(
|
|
477
|
+
new PolygonLayer({
|
|
478
|
+
...SHARED_LAYER_PROPS,
|
|
479
|
+
id: 'expanded-chain-outlines',
|
|
480
|
+
data: expandedOutlineNodes,
|
|
481
|
+
getPolygon: (node: Node) => getChainOutlinePolygon(node),
|
|
482
|
+
stroked: true,
|
|
483
|
+
filled: false,
|
|
484
|
+
getLineColor: [64, 96, 192, 200],
|
|
485
|
+
getLineWidth: 2,
|
|
486
|
+
lineWidthUnits: 'pixels',
|
|
487
|
+
lineWidthMinPixels: 2,
|
|
488
|
+
pickable: true,
|
|
489
|
+
updateTriggers: {
|
|
490
|
+
getPolygon: [outlineUpdateTrigger]
|
|
491
|
+
}
|
|
492
|
+
})
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const expandedMarkerStylesheet = this._createStyleEngine(
|
|
497
|
+
{
|
|
498
|
+
type: 'marker',
|
|
499
|
+
fill: [64, 96, 192, 255],
|
|
500
|
+
size: 32,
|
|
501
|
+
marker: 'circle-minus-filled',
|
|
502
|
+
offset: [24, -24],
|
|
503
|
+
scaleWithZoom: false
|
|
504
|
+
} as GraphStylesheet<'marker'>,
|
|
505
|
+
'expanded chain marker stylesheet'
|
|
506
|
+
);
|
|
507
|
+
|
|
508
|
+
if (expandedMarkerStylesheet && expandedNodes.length > 0) {
|
|
509
|
+
const getOffset = expandedMarkerStylesheet.getDeckGLAccessor('getOffset');
|
|
510
|
+
layers.push(
|
|
511
|
+
new ZoomableMarkerLayer({
|
|
512
|
+
...SHARED_LAYER_PROPS,
|
|
513
|
+
id: 'expanded-chain-markers',
|
|
514
|
+
data: expandedNodes,
|
|
515
|
+
getPosition: mixedGetPosition(engine.getNodePosition, getOffset),
|
|
516
|
+
pickable: true,
|
|
517
|
+
positionUpdateTrigger: [
|
|
518
|
+
engine.getLayoutLastUpdate(),
|
|
519
|
+
engine.getLayoutState(),
|
|
520
|
+
expandedMarkerStylesheet.getDeckGLAccessorUpdateTrigger('getOffset')
|
|
521
|
+
].join(),
|
|
522
|
+
stylesheet: expandedMarkerStylesheet,
|
|
523
|
+
visible: true
|
|
524
|
+
} as any)
|
|
525
|
+
);
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
return layers;
|
|
529
|
+
}
|
|
312
530
|
}
|