@deck.gl-community/graph-layers 9.2.0-beta.2 → 9.2.0-beta.4
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/_deprecated/old-constants.d.ts +1 -0
- package/dist/_deprecated/old-constants.js +1 -0
- package/dist/core/cache.d.ts +1 -0
- package/dist/core/cache.js +1 -0
- package/dist/core/constants.d.ts +2 -1
- package/dist/core/constants.js +1 -0
- package/dist/core/graph-engine.d.ts +64 -21
- package/dist/core/graph-engine.d.ts.map +1 -1
- package/dist/core/graph-engine.js +158 -77
- package/dist/core/graph-engine.js.map +1 -1
- package/dist/core/graph-layout.d.ts +23 -18
- package/dist/core/graph-layout.d.ts.map +1 -1
- package/dist/core/graph-layout.js +35 -19
- package/dist/core/graph-layout.js.map +1 -1
- package/dist/core/interaction-manager.d.ts +5 -4
- package/dist/core/interaction-manager.d.ts.map +1 -1
- package/dist/core/interaction-manager.js +10 -7
- package/dist/core/interaction-manager.js.map +1 -1
- package/dist/graph/arrow-graph.d.ts +70 -0
- package/dist/graph/arrow-graph.d.ts.map +1 -0
- package/dist/graph/arrow-graph.js +514 -0
- package/dist/graph/arrow-graph.js.map +1 -0
- package/dist/graph/classic-graph.d.ts +170 -0
- package/dist/graph/classic-graph.d.ts.map +1 -0
- package/dist/graph/classic-graph.js +391 -0
- package/dist/graph/classic-graph.js.map +1 -0
- package/dist/graph/edge.d.ts +8 -7
- package/dist/graph/edge.d.ts.map +1 -1
- package/dist/graph/edge.js +1 -0
- package/dist/graph/edge.js.map +1 -1
- package/dist/graph/functions/arrow-utils.d.ts +7 -0
- package/dist/graph/functions/arrow-utils.d.ts.map +1 -0
- package/dist/graph/functions/arrow-utils.js +68 -0
- package/dist/graph/functions/arrow-utils.js.map +1 -0
- package/dist/graph/functions/create-graph-from-data.d.ts +4 -0
- package/dist/graph/functions/create-graph-from-data.d.ts.map +1 -0
- package/dist/graph/functions/create-graph-from-data.js +13 -0
- package/dist/graph/functions/create-graph-from-data.js.map +1 -0
- package/dist/graph/graph-normalization.d.ts +11 -0
- package/dist/graph/graph-normalization.d.ts.map +1 -0
- package/dist/graph/graph-normalization.js +66 -0
- package/dist/graph/graph-normalization.js.map +1 -0
- package/dist/graph/graph.d.ts +63 -155
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +12 -300
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/node.d.ts +8 -7
- package/dist/graph/node.d.ts.map +1 -1
- package/dist/graph/node.js +3 -2
- package/dist/graph/node.js.map +1 -1
- package/dist/graph-data/arrow-graph-data-builder.d.ts +22 -0
- package/dist/graph-data/arrow-graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/arrow-graph-data-builder.js +106 -0
- package/dist/graph-data/arrow-graph-data-builder.js.map +1 -0
- package/dist/graph-data/graph-data-builder.d.ts +7 -0
- package/dist/graph-data/graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/graph-data-builder.js +2 -0
- package/dist/graph-data/graph-data-builder.js.map +1 -0
- package/dist/graph-data/graph-data.d.ts +41 -0
- package/dist/graph-data/graph-data.d.ts.map +1 -0
- package/dist/graph-data/graph-data.js +12 -0
- package/dist/graph-data/graph-data.js.map +1 -0
- package/dist/graph-data/plain-graph-data-builder.d.ts +21 -0
- package/dist/graph-data/plain-graph-data-builder.d.ts.map +1 -0
- package/dist/graph-data/plain-graph-data-builder.js +106 -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 +36 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -29
- package/dist/index.js.map +1 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.d.ts +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.d.ts +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.d.ts +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts +1 -0
- 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 +2 -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 +84 -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 +134 -0
- package/dist/layers/common-layers/grid-layer/grid-layer.js.map +1 -0
- package/dist/layers/common-layers/marker-layer/atlas-data-url.d.ts +1 -0
- package/dist/layers/common-layers/marker-layer/atlas-data-url.js +1 -0
- package/dist/layers/common-layers/marker-layer/marker-layer.d.ts +1 -0
- package/dist/layers/common-layers/marker-layer/marker-layer.js +3 -2
- package/dist/layers/common-layers/marker-layer/marker-list.d.ts +1 -0
- package/dist/layers/common-layers/marker-layer/marker-list.js +1 -0
- package/dist/layers/common-layers/marker-layer/marker-mapping.d.ts +1 -0
- package/dist/layers/common-layers/marker-layer/marker-mapping.js +1 -0
- package/dist/layers/common-layers/spline-layer/spline-layer.d.ts +1 -0
- package/dist/layers/common-layers/spline-layer/spline-layer.js +1 -0
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.d.ts +1 -0
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +1 -0
- package/dist/layers/edge-attachment-helper.d.ts +4 -3
- package/dist/layers/edge-attachment-helper.d.ts.map +1 -1
- package/dist/layers/edge-attachment-helper.js +4 -4
- package/dist/layers/edge-attachment-helper.js.map +1 -1
- package/dist/layers/edge-layer.d.ts +1 -0
- package/dist/layers/edge-layer.js +4 -3
- package/dist/layers/edge-layers/arrow-2d-geometry.d.ts +1 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.js +1 -0
- package/dist/layers/edge-layers/curved-edge-layer.d.ts +2 -1
- package/dist/layers/edge-layers/curved-edge-layer.js +2 -1
- package/dist/layers/edge-layers/edge-arrow-layer.d.ts +1 -0
- package/dist/layers/edge-layers/edge-arrow-layer.js +2 -1
- package/dist/layers/edge-layers/edge-label-layer.d.ts +2 -1
- package/dist/layers/edge-layers/edge-label-layer.js +2 -1
- package/dist/layers/edge-layers/flow-layer.d.ts +2 -1
- package/dist/layers/edge-layers/flow-layer.js +2 -1
- package/dist/layers/edge-layers/path-edge-layer.d.ts +1 -0
- package/dist/layers/edge-layers/path-edge-layer.js +1 -0
- package/dist/layers/edge-layers/straight-line-edge-layer.d.ts +1 -0
- package/dist/layers/edge-layers/straight-line-edge-layer.js +1 -0
- package/dist/layers/graph-layer.d.ts +75 -17
- package/dist/layers/graph-layer.d.ts.map +1 -1
- package/dist/layers/graph-layer.js +450 -64
- package/dist/layers/graph-layer.js.map +1 -1
- package/dist/layers/node-layers/circle-layer.d.ts +1 -0
- package/dist/layers/node-layers/circle-layer.js +1 -0
- package/dist/layers/node-layers/image-layer.d.ts +1 -0
- package/dist/layers/node-layers/image-layer.js +1 -0
- package/dist/layers/node-layers/label-layer.d.ts +2 -1
- package/dist/layers/node-layers/label-layer.js +2 -1
- package/dist/layers/node-layers/path-rounded-rectangle-layer.d.ts +1 -0
- package/dist/layers/node-layers/path-rounded-rectangle-layer.js +2 -1
- package/dist/layers/node-layers/rectangle-layer.d.ts +1 -0
- package/dist/layers/node-layers/rectangle-layer.js +1 -0
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.d.ts +1 -0
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +1 -0
- package/dist/layers/node-layers/rounded-rectangle-layer.d.ts +2 -1
- package/dist/layers/node-layers/rounded-rectangle-layer.js +3 -2
- package/dist/layers/node-layers/zoomable-marker-layer.d.ts +2 -1
- package/dist/layers/node-layers/zoomable-marker-layer.js +2 -1
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts +25 -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 +252 -0
- package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js.map +1 -0
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts +48 -62
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -1
- package/dist/layouts/d3-dag/d3-dag-layout.js +89 -273
- package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.d.ts +22 -9
- package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.js +42 -22
- package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
- package/dist/layouts/d3-force/worker.d.ts +1 -0
- package/dist/layouts/d3-force/worker.js +1 -0
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts +21 -16
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/force-multi-graph-layout.js +49 -39
- package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.d.ts +20 -16
- package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.js +35 -35
- package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
- package/dist/layouts/experimental/radial-layout.d.ts +14 -8
- package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/radial-layout.js +33 -15
- package/dist/layouts/experimental/radial-layout.js.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts +13 -9
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.js +61 -57
- package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
- package/dist/layouts/gpu-force/worker.d.ts +1 -0
- package/dist/layouts/gpu-force/worker.js +1 -0
- package/dist/layouts/simple-layout.d.ts +10 -26
- package/dist/layouts/simple-layout.d.ts.map +1 -1
- package/dist/layouts/simple-layout.js +15 -18
- package/dist/layouts/simple-layout.js.map +1 -1
- package/dist/loaders/dot-graph-loader.d.ts +26 -0
- package/dist/loaders/dot-graph-loader.d.ts.map +1 -0
- package/dist/loaders/dot-graph-loader.js +669 -0
- package/dist/loaders/dot-graph-loader.js.map +1 -0
- package/dist/loaders/json-graph-loader.d.ts +7 -0
- package/dist/loaders/json-graph-loader.d.ts.map +1 -0
- package/dist/loaders/json-graph-loader.js +32 -0
- package/dist/loaders/json-graph-loader.js.map +1 -0
- package/dist/loaders/parsers/edge-parsers.d.ts +3 -0
- package/dist/loaders/parsers/edge-parsers.d.ts.map +1 -0
- package/dist/loaders/{edge-parsers.js → parsers/edge-parsers.js} +2 -1
- package/dist/loaders/parsers/edge-parsers.js.map +1 -0
- package/dist/loaders/parsers/node-parsers.d.ts +3 -0
- package/dist/loaders/parsers/node-parsers.d.ts.map +1 -0
- package/dist/loaders/{node-parsers.js → parsers/node-parsers.js} +2 -1
- package/dist/loaders/parsers/node-parsers.js.map +1 -0
- package/dist/loaders/parsers/parse-json-graph.d.ts +30 -0
- package/dist/loaders/parsers/parse-json-graph.d.ts.map +1 -0
- package/dist/loaders/parsers/parse-json-graph.js +79 -0
- package/dist/loaders/parsers/parse-json-graph.js.map +1 -0
- package/dist/style/graph-layer-stylesheet.d.ts +3 -2
- package/dist/style/graph-layer-stylesheet.js +1 -0
- package/dist/style/graph-style-accessor-map.d.ts +1 -0
- package/dist/style/graph-style-accessor-map.js +1 -0
- package/dist/style/graph-style-engine.d.ts +6 -3
- package/dist/style/graph-style-engine.d.ts.map +1 -1
- package/dist/style/graph-style-engine.js +7 -5
- package/dist/style/graph-style-engine.js.map +1 -1
- package/dist/style/graph-stylesheet.schema.d.ts +1 -0
- package/dist/style/graph-stylesheet.schema.js +1 -0
- package/dist/style/style-property.d.ts +1 -0
- package/dist/style/style-property.js +2 -1
- package/dist/style/{style-engine.d.ts → stylesheet-engine.d.ts} +5 -4
- package/dist/style/stylesheet-engine.d.ts.map +1 -0
- package/dist/style/{style-engine.js → stylesheet-engine.js} +4 -3
- package/dist/style/stylesheet-engine.js.map +1 -0
- package/dist/utils/collapsed-chains.d.ts +10 -9
- package/dist/utils/collapsed-chains.d.ts.map +1 -1
- package/dist/utils/collapsed-chains.js +2 -6
- package/dist/utils/collapsed-chains.js.map +1 -1
- package/dist/utils/layer-utils.d.ts +1 -0
- package/dist/utils/layer-utils.js +1 -0
- package/dist/utils/log.d.ts +1 -0
- package/dist/utils/log.js +1 -0
- package/dist/utils/node-boundary.d.ts +1 -0
- package/dist/utils/node-boundary.js +1 -0
- package/dist/utils/polygon-calculations.d.ts +1 -0
- package/dist/utils/polygon-calculations.js +1 -0
- package/dist/utils/rank-grid.d.ts +31 -0
- package/dist/utils/rank-grid.d.ts.map +1 -0
- package/dist/utils/rank-grid.js +307 -0
- package/dist/utils/rank-grid.js.map +1 -0
- package/package.json +7 -11
- 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 +0 -2
- 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 +0 -2
- 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
package/src/core/graph-layout.ts
CHANGED
|
@@ -4,9 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import type {Bounds2D} from '@math.gl/types';
|
|
6
6
|
|
|
7
|
-
import type {Graph} from '../graph/graph';
|
|
8
|
-
import type {Node} from '../graph/node';
|
|
9
|
-
import type {Edge} from '../graph/edge';
|
|
7
|
+
import type {Graph, NodeInterface, EdgeInterface} from '../graph/graph';
|
|
10
8
|
|
|
11
9
|
import isEqual from 'lodash.isequal';
|
|
12
10
|
import {log} from '../utils/log';
|
|
@@ -18,16 +16,30 @@ export type GraphLayoutEventDetail = {
|
|
|
18
16
|
bounds: Bounds2D | null;
|
|
19
17
|
};
|
|
20
18
|
|
|
21
|
-
export type GraphLayoutProps = {
|
|
19
|
+
export type GraphLayoutProps = {
|
|
20
|
+
onLayoutStart?: (detail?: GraphLayoutEventDetail) => void;
|
|
21
|
+
onLayoutChange?: (detail?: GraphLayoutEventDetail) => void;
|
|
22
|
+
onLayoutDone?: (detail?: GraphLayoutEventDetail) => void;
|
|
23
|
+
onLayoutError?: (error?: unknown) => void;
|
|
24
|
+
};
|
|
25
|
+
|
|
22
26
|
|
|
23
|
-
/** All the layout classes are extended from this base layout class. */
|
|
24
27
|
export abstract class GraphLayout<
|
|
25
|
-
|
|
26
|
-
>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
PropsT extends GraphLayoutProps = GraphLayoutProps
|
|
29
|
+
> {
|
|
30
|
+
static defaultProps: Readonly<Required<GraphLayoutProps>> = {
|
|
31
|
+
onLayoutStart: undefined,
|
|
32
|
+
onLayoutChange: undefined,
|
|
33
|
+
onLayoutDone: undefined,
|
|
34
|
+
onLayoutError: undefined
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
get [Symbol.toStringTag](): string {
|
|
38
|
+
return 'GraphLayout';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Extra configuration props of the layout. */
|
|
42
|
+
protected props: Required<PropsT>;
|
|
31
43
|
|
|
32
44
|
/**
|
|
33
45
|
* Last computed layout bounds in local layout coordinates.
|
|
@@ -42,11 +54,22 @@ export abstract class GraphLayout<
|
|
|
42
54
|
|
|
43
55
|
/**
|
|
44
56
|
* Constructor of GraphLayout
|
|
45
|
-
* @param
|
|
57
|
+
* @param props extra configuration props of the layout
|
|
46
58
|
*/
|
|
47
|
-
constructor(
|
|
48
|
-
|
|
49
|
-
|
|
59
|
+
constructor(props: PropsT, defaultProps?: Required<PropsT>) {
|
|
60
|
+
this.props = {
|
|
61
|
+
...GraphLayout.defaultProps,
|
|
62
|
+
...defaultProps,
|
|
63
|
+
...props
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
getProps(): PropsT {
|
|
68
|
+
return {...this.props};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
setProps(props: Partial<PropsT>): void {
|
|
72
|
+
this.props = {...this.props, ...props};
|
|
50
73
|
}
|
|
51
74
|
|
|
52
75
|
/**
|
|
@@ -58,18 +81,18 @@ export abstract class GraphLayout<
|
|
|
58
81
|
if (!layout || !(layout instanceof GraphLayout)) {
|
|
59
82
|
return false;
|
|
60
83
|
}
|
|
61
|
-
return this
|
|
84
|
+
return this instanceof layout.constructor && isEqual(this.props, layout.props);
|
|
62
85
|
}
|
|
63
86
|
|
|
64
87
|
// Accessors
|
|
65
88
|
|
|
66
89
|
/** access the position of the node in the layout */
|
|
67
|
-
getNodePosition(node:
|
|
90
|
+
getNodePosition(node: NodeInterface): [number, number] {
|
|
68
91
|
return [0, 0];
|
|
69
92
|
}
|
|
70
93
|
|
|
71
94
|
/** access the layout information of the edge */
|
|
72
|
-
getEdgePosition(edge:
|
|
95
|
+
getEdgePosition(edge: EdgeInterface) {
|
|
73
96
|
return {
|
|
74
97
|
type: 'line',
|
|
75
98
|
sourcePosition: [0, 0],
|
|
@@ -84,13 +107,13 @@ export abstract class GraphLayout<
|
|
|
84
107
|
* @param x x coordinate
|
|
85
108
|
* @param y y coordinate
|
|
86
109
|
*/
|
|
87
|
-
lockNodePosition(node:
|
|
110
|
+
lockNodePosition(node: NodeInterface, x: number, y: number) {}
|
|
88
111
|
|
|
89
112
|
/**
|
|
90
113
|
* Unlock the node, the node will be able to move freely.
|
|
91
114
|
* @param {Object} node Node to be unlocked
|
|
92
115
|
*/
|
|
93
|
-
unlockNodePosition(node:
|
|
116
|
+
unlockNodePosition(node: NodeInterface) {}
|
|
94
117
|
|
|
95
118
|
/** Returns the last computed layout bounds, if available. */
|
|
96
119
|
getBounds(): Bounds2D | null {
|
|
@@ -100,9 +123,9 @@ export abstract class GraphLayout<
|
|
|
100
123
|
/** virtual functions: will be implemented in the child class */
|
|
101
124
|
|
|
102
125
|
/** first time to pass the graph data into this layout */
|
|
103
|
-
abstract initializeGraph(graph: Graph);
|
|
126
|
+
abstract initializeGraph(graph: Graph): void;
|
|
104
127
|
/** update the existing graph */
|
|
105
|
-
abstract updateGraph(graph: Graph);
|
|
128
|
+
abstract updateGraph(graph: Graph): void;
|
|
106
129
|
/** start the layout calculation */
|
|
107
130
|
abstract start();
|
|
108
131
|
/** update the layout calculation */
|
|
@@ -194,7 +217,7 @@ export abstract class GraphLayout<
|
|
|
194
217
|
|
|
195
218
|
/** @fires GraphLayout#onLayoutStart */
|
|
196
219
|
protected _onLayoutStart = (): void => {
|
|
197
|
-
log.log(0, `GraphLayout(${this
|
|
220
|
+
log.log(0, `GraphLayout(${this}): start`)();
|
|
198
221
|
this._updateBounds();
|
|
199
222
|
this._updateState('calculating');
|
|
200
223
|
|
|
@@ -204,12 +227,12 @@ export abstract class GraphLayout<
|
|
|
204
227
|
* @type {CustomEvent}
|
|
205
228
|
*/
|
|
206
229
|
const detail: GraphLayoutEventDetail = {bounds: this._bounds};
|
|
207
|
-
this.
|
|
230
|
+
this.props.onLayoutStart?.(detail);
|
|
208
231
|
};
|
|
209
232
|
|
|
210
233
|
/** @fires GraphLayout#onLayoutChange */
|
|
211
234
|
protected _onLayoutChange = (): void => {
|
|
212
|
-
log.log(0, `GraphLayout(${this
|
|
235
|
+
log.log(0, `GraphLayout(${this}): update`)();
|
|
213
236
|
this._updateBounds();
|
|
214
237
|
this._updateState('calculating');
|
|
215
238
|
|
|
@@ -219,12 +242,12 @@ export abstract class GraphLayout<
|
|
|
219
242
|
* @type {CustomEvent}
|
|
220
243
|
*/
|
|
221
244
|
const detail: GraphLayoutEventDetail = {bounds: this._bounds};
|
|
222
|
-
this.
|
|
245
|
+
this.props.onLayoutChange?.(detail);
|
|
223
246
|
};
|
|
224
247
|
|
|
225
248
|
/** @fires GraphLayout#onLayoutDone */
|
|
226
249
|
protected _onLayoutDone = (): void => {
|
|
227
|
-
log.log(0, `GraphLayout(${this
|
|
250
|
+
log.log(0, `GraphLayout(${this}): end`)();
|
|
228
251
|
this._updateBounds();
|
|
229
252
|
this._updateState('done');
|
|
230
253
|
|
|
@@ -234,7 +257,7 @@ export abstract class GraphLayout<
|
|
|
234
257
|
* @type {CustomEvent}
|
|
235
258
|
*/
|
|
236
259
|
const detail: GraphLayoutEventDetail = {bounds: this._bounds};
|
|
237
|
-
this.
|
|
260
|
+
this.props.onLayoutDone?.(detail);
|
|
238
261
|
};
|
|
239
262
|
|
|
240
263
|
/** @fires GraphLayout#onLayoutError */
|
|
@@ -246,6 +269,6 @@ export abstract class GraphLayout<
|
|
|
246
269
|
* @event GraphLayout#onLayoutError
|
|
247
270
|
* @type {CustomEvent}
|
|
248
271
|
*/
|
|
249
|
-
this.
|
|
272
|
+
this.props.onLayoutError?.();
|
|
250
273
|
};
|
|
251
274
|
}
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {EdgeState, NodeState} from './constants';
|
|
6
|
-
import {Edge} from '../graph/edge';
|
|
7
|
-
import {Node} from '../graph/node';
|
|
8
6
|
import {GraphEngine} from './graph-engine';
|
|
7
|
+
import type {EdgeInterface, NodeInterface} from '../graph/graph';
|
|
9
8
|
import {log} from '../utils/log';
|
|
10
9
|
import {
|
|
11
10
|
resolveChainInteractionSource,
|
|
@@ -32,13 +31,13 @@ const NODE_TO_EDGE_STATE_MAP: Record<NodeState, EdgeState> = {
|
|
|
32
31
|
selected: 'selected'
|
|
33
32
|
};
|
|
34
33
|
|
|
35
|
-
function shouldEdgeBeSelected(edge:
|
|
34
|
+
function shouldEdgeBeSelected(edge: EdgeInterface): boolean {
|
|
36
35
|
return edge
|
|
37
36
|
.getConnectedNodes()
|
|
38
37
|
.some((node) => node.getState() === 'selected' && node.shouldHighlightConnectedEdges());
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
function setNodeState(node:
|
|
40
|
+
function setNodeState(node: NodeInterface, state: NodeState) {
|
|
42
41
|
node.setState(state);
|
|
43
42
|
if (node.shouldHighlightConnectedEdges()) {
|
|
44
43
|
node.getConnectedEdges().forEach((edge) => {
|
|
@@ -55,7 +54,7 @@ interface EventMap {
|
|
|
55
54
|
onClick?: (info: unknown, event: Event) => void;
|
|
56
55
|
onHover?: (info: unknown) => void;
|
|
57
56
|
onMouseEnter?: (info: unknown) => void;
|
|
58
|
-
onMouseLeave?: (node:
|
|
57
|
+
onMouseLeave?: (node: NodeInterface) => void;
|
|
59
58
|
onDragStart?: (info: unknown) => void;
|
|
60
59
|
onDrag?: (info: unknown) => void;
|
|
61
60
|
onDragEnd?: (info: unknown) => void;
|
|
@@ -72,8 +71,8 @@ export interface InteractionManagerProps {
|
|
|
72
71
|
export class InteractionManager {
|
|
73
72
|
public notifyCallback: Function;
|
|
74
73
|
private _lastInteraction = 0;
|
|
75
|
-
private _lastHoveredNode:
|
|
76
|
-
private _lastSelectedNode:
|
|
74
|
+
private _lastHoveredNode: NodeInterface | null = null;
|
|
75
|
+
private _lastSelectedNode: NodeInterface | null = null;
|
|
77
76
|
|
|
78
77
|
public nodeEvents: EventMap = undefined!;
|
|
79
78
|
public edgeEvents: EventMap = undefined!;
|
|
@@ -118,7 +117,7 @@ export class InteractionManager {
|
|
|
118
117
|
}
|
|
119
118
|
|
|
120
119
|
if (object.isNode) {
|
|
121
|
-
const node = object as
|
|
120
|
+
const node = object as NodeInterface;
|
|
122
121
|
const chainId = node.getPropertyValue('collapsedChainId');
|
|
123
122
|
const collapsedNodeIds = node.getPropertyValue('collapsedNodeIds');
|
|
124
123
|
const representativeId = node.getPropertyValue('collapsedChainRepresentativeId');
|
|
@@ -161,7 +160,7 @@ export class InteractionManager {
|
|
|
161
160
|
}
|
|
162
161
|
}
|
|
163
162
|
|
|
164
|
-
if (
|
|
163
|
+
if (node.isSelectable()) {
|
|
165
164
|
if (this._lastSelectedNode) {
|
|
166
165
|
setNodeState(this._lastSelectedNode, 'default');
|
|
167
166
|
}
|
|
@@ -176,7 +175,7 @@ export class InteractionManager {
|
|
|
176
175
|
}
|
|
177
176
|
}
|
|
178
177
|
|
|
179
|
-
if (object.isEdge && this.edgeEvents.onClick) {
|
|
178
|
+
if ((object as EdgeInterface).isEdge && this.edgeEvents.onClick) {
|
|
180
179
|
this.edgeEvents.onClick(info, event);
|
|
181
180
|
}
|
|
182
181
|
}
|
|
@@ -186,10 +185,9 @@ export class InteractionManager {
|
|
|
186
185
|
|
|
187
186
|
if (!(lastHoveredNode.isSelectable() && lastHoveredNode.getState() === 'selected')) {
|
|
188
187
|
// reset the last hovered node's state
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
: 'default';
|
|
188
|
+
const lastSelectedId = this._lastSelectedNode?.getId();
|
|
189
|
+
const lastHoveredId = this._lastHoveredNode?.getId();
|
|
190
|
+
const newState = lastSelectedId !== undefined && lastSelectedId === lastHoveredId ? 'selected' : 'default';
|
|
193
191
|
setNodeState(lastHoveredNode, newState);
|
|
194
192
|
}
|
|
195
193
|
// trigger the callback if exists
|
|
@@ -200,7 +198,7 @@ export class InteractionManager {
|
|
|
200
198
|
|
|
201
199
|
_mouseEnterNode(info): void {
|
|
202
200
|
// set the node's state to hover
|
|
203
|
-
setNodeState(info.object as
|
|
201
|
+
setNodeState(info.object as NodeInterface, 'hover');
|
|
204
202
|
// trigger the callback if exists
|
|
205
203
|
if (this.nodeEvents.onMouseEnter) {
|
|
206
204
|
this.nodeEvents.onMouseEnter(info);
|
|
@@ -223,7 +221,9 @@ export class InteractionManager {
|
|
|
223
221
|
|
|
224
222
|
// hover over on a node
|
|
225
223
|
if (info.object.isNode) {
|
|
226
|
-
const
|
|
224
|
+
const lastHoveredId = this._lastHoveredNode?.getId();
|
|
225
|
+
const currentId = (info.object as NodeInterface).getId();
|
|
226
|
+
const isSameNode = lastHoveredId !== undefined && lastHoveredId === currentId;
|
|
227
227
|
// stay in the same node
|
|
228
228
|
if (isSameNode) {
|
|
229
229
|
return;
|
|
@@ -262,9 +262,9 @@ export class InteractionManager {
|
|
|
262
262
|
const bounds = info.layer.context.viewport.getBounds(); // [minX, minY, maxX, maxY]
|
|
263
263
|
const x = Math.min(Math.max(coordinates[0], bounds[0]), bounds[2]);
|
|
264
264
|
const y = Math.min(Math.max(coordinates[1], bounds[1]), bounds[3]);
|
|
265
|
-
this.engine.lockNodePosition(info.object, x, y);
|
|
265
|
+
this.engine.lockNodePosition(info.object as NodeInterface, x, y);
|
|
266
266
|
|
|
267
|
-
setNodeState(info.object, 'dragging');
|
|
267
|
+
setNodeState(info.object as NodeInterface, 'dragging');
|
|
268
268
|
this._lastInteraction = Date.now();
|
|
269
269
|
this.notifyCallback();
|
|
270
270
|
if (this.nodeEvents.onDrag) {
|
|
@@ -279,7 +279,7 @@ export class InteractionManager {
|
|
|
279
279
|
if (this.resumeLayoutAfterDragging) {
|
|
280
280
|
this.engine.resume();
|
|
281
281
|
}
|
|
282
|
-
setNodeState(info.object, 'default');
|
|
283
|
-
this.engine.unlockNodePosition(info.object);
|
|
282
|
+
setNodeState(info.object as NodeInterface, 'default');
|
|
283
|
+
this.engine.unlockNodePosition(info.object as NodeInterface);
|
|
284
284
|
}
|
|
285
285
|
}
|