@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
|
@@ -3,28 +3,32 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { COORDINATE_SYSTEM, CompositeLayer } from '@deck.gl/core';
|
|
5
5
|
import { PolygonLayer } from '@deck.gl/layers';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { warn } from '../utils/log';
|
|
12
|
-
import { DEFAULT_GRAPH_LAYER_STYLESHEET, normalizeGraphLayerStylesheet } from '../style/graph-layer-stylesheet';
|
|
6
|
+
import { ClassicGraph } from "../graph/classic-graph.js";
|
|
7
|
+
import { GraphLayout } from "../core/graph-layout.js";
|
|
8
|
+
import { GraphEngine } from "../core/graph-engine.js";
|
|
9
|
+
import { GraphStylesheetEngine } from "../style/graph-style-engine.js";
|
|
10
|
+
import { DEFAULT_GRAPH_LAYER_STYLESHEET, normalizeGraphLayerStylesheet } from "../style/graph-layer-stylesheet.js";
|
|
13
11
|
// node layers
|
|
14
|
-
import { CircleLayer } from
|
|
15
|
-
import { ImageLayer } from
|
|
16
|
-
import { LabelLayer } from
|
|
17
|
-
import { RectangleLayer } from
|
|
18
|
-
import { RoundedRectangleLayer } from
|
|
19
|
-
import { PathBasedRoundedRectangleLayer } from
|
|
20
|
-
import { ZoomableMarkerLayer } from
|
|
12
|
+
import { CircleLayer } from "./node-layers/circle-layer.js";
|
|
13
|
+
import { ImageLayer } from "./node-layers/image-layer.js";
|
|
14
|
+
import { LabelLayer } from "./node-layers/label-layer.js";
|
|
15
|
+
import { RectangleLayer } from "./node-layers/rectangle-layer.js";
|
|
16
|
+
import { RoundedRectangleLayer } from "./node-layers/rounded-rectangle-layer.js";
|
|
17
|
+
import { PathBasedRoundedRectangleLayer } from "./node-layers/path-rounded-rectangle-layer.js";
|
|
18
|
+
import { ZoomableMarkerLayer } from "./node-layers/zoomable-marker-layer.js";
|
|
21
19
|
// edge layers
|
|
22
|
-
import { EdgeLayer } from
|
|
23
|
-
import { EdgeLabelLayer } from
|
|
24
|
-
import { FlowLayer } from
|
|
25
|
-
import { EdgeArrowLayer } from
|
|
26
|
-
import { EdgeAttachmentHelper } from
|
|
27
|
-
import {
|
|
20
|
+
import { EdgeLayer } from "./edge-layer.js";
|
|
21
|
+
import { EdgeLabelLayer } from "./edge-layers/edge-label-layer.js";
|
|
22
|
+
import { FlowLayer } from "./edge-layers/flow-layer.js";
|
|
23
|
+
import { EdgeArrowLayer } from "./edge-layers/edge-arrow-layer.js";
|
|
24
|
+
import { EdgeAttachmentHelper } from "./edge-attachment-helper.js";
|
|
25
|
+
import { GridLayer } from "./common-layers/grid-layer/grid-layer.js";
|
|
26
|
+
import { JSONGraphLoader } from "../loaders/json-graph-loader.js";
|
|
27
|
+
import { mixedGetPosition } from "../utils/layer-utils.js";
|
|
28
|
+
import { InteractionManager } from "../core/interaction-manager.js";
|
|
29
|
+
import { buildCollapsedChainLayers } from "../utils/collapsed-chains.js";
|
|
30
|
+
import { mapRanksToYPositions, selectRankLines } from "../utils/rank-grid.js";
|
|
31
|
+
import { warn } from "../utils/log.js";
|
|
28
32
|
const NODE_LAYER_MAP = {
|
|
29
33
|
'rectangle': RectangleLayer,
|
|
30
34
|
'rounded-rectangle': RoundedRectangleLayer,
|
|
@@ -47,8 +51,12 @@ const SHARED_LAYER_PROPS = {
|
|
|
47
51
|
};
|
|
48
52
|
const NODE_STYLE_DEPRECATION_MESSAGE = 'GraphLayer: `nodeStyle` has been replaced by `stylesheet.nodes` and will be removed in a future release.';
|
|
49
53
|
const EDGE_STYLE_DEPRECATION_MESSAGE = 'GraphLayer: `edgeStyle` has been replaced by `stylesheet.edges` and will be removed in a future release.';
|
|
54
|
+
const GRAPH_PROP_DEPRECATION_MESSAGE = 'GraphLayer: `graph` prop is deprecated. Pass graphs via the `data` prop instead.';
|
|
55
|
+
const LAYOUT_REQUIRED_MESSAGE = 'GraphLayer: `layout` must be provided when supplying raw graph data.';
|
|
50
56
|
let NODE_STYLE_DEPRECATION_WARNED = false;
|
|
51
57
|
let EDGE_STYLE_DEPRECATION_WARNED = false;
|
|
58
|
+
let GRAPH_PROP_DEPRECATION_WARNED = false;
|
|
59
|
+
let LAYOUT_REQUIRED_WARNED = false;
|
|
52
60
|
/** Composite layer that renders graph nodes, edges, and decorators. */
|
|
53
61
|
export class GraphLayer extends CompositeLayer {
|
|
54
62
|
static layerName = 'GraphLayer';
|
|
@@ -56,8 +64,9 @@ export class GraphLayer extends CompositeLayer {
|
|
|
56
64
|
// Composite layer props
|
|
57
65
|
// @ts-expect-error composite layer props
|
|
58
66
|
pickable: true,
|
|
67
|
+
data: { type: 'object', value: null, async: true },
|
|
59
68
|
// Graph props
|
|
60
|
-
graphLoader:
|
|
69
|
+
graphLoader: JSONGraphLoader,
|
|
61
70
|
stylesheet: DEFAULT_GRAPH_LAYER_STYLESHEET,
|
|
62
71
|
nodeStyle: undefined,
|
|
63
72
|
nodeEvents: {
|
|
@@ -72,56 +81,74 @@ export class GraphLayer extends CompositeLayer {
|
|
|
72
81
|
onClick: () => { },
|
|
73
82
|
onHover: () => { }
|
|
74
83
|
},
|
|
75
|
-
enableDragging: false
|
|
84
|
+
enableDragging: false,
|
|
85
|
+
rankGrid: false,
|
|
86
|
+
resumeLayoutAfterDragging: true
|
|
76
87
|
};
|
|
77
88
|
// @ts-expect-error Some typescript confusion due to override of base class state
|
|
78
89
|
state;
|
|
79
90
|
_edgeAttachmentHelper = new EdgeAttachmentHelper();
|
|
91
|
+
_suppressNextDeckDataChange = false;
|
|
80
92
|
forceUpdate = () => {
|
|
81
|
-
if (this.
|
|
82
|
-
|
|
83
|
-
this.setChangeFlags({ dataChanged: true }); // TODO
|
|
93
|
+
if (!this.state) {
|
|
94
|
+
return;
|
|
84
95
|
}
|
|
96
|
+
this.setNeedsRedraw();
|
|
97
|
+
this.setState({ interactionVersion: this.state.interactionVersion + 1 });
|
|
85
98
|
};
|
|
86
99
|
constructor(props) {
|
|
87
100
|
super(props);
|
|
88
101
|
}
|
|
89
102
|
initializeState() {
|
|
103
|
+
const interactionManager = new InteractionManager({
|
|
104
|
+
nodeEvents: this.props.nodeEvents,
|
|
105
|
+
edgeEvents: this.props.edgeEvents,
|
|
106
|
+
engine: undefined,
|
|
107
|
+
enableDragging: Boolean(this.props.enableDragging),
|
|
108
|
+
resumeLayoutAfterDragging: Boolean(this.props.resumeLayoutAfterDragging ?? GraphLayer.defaultProps.resumeLayoutAfterDragging)
|
|
109
|
+
}, () => this.forceUpdate());
|
|
90
110
|
this.state = {
|
|
91
|
-
interactionManager
|
|
111
|
+
interactionManager,
|
|
112
|
+
graphEngine: null,
|
|
113
|
+
layoutVersion: 0,
|
|
114
|
+
layoutState: undefined,
|
|
115
|
+
interactionVersion: 0
|
|
92
116
|
};
|
|
93
|
-
|
|
94
|
-
this.
|
|
117
|
+
this._syncInteractionManager(this.props, null);
|
|
118
|
+
this._refreshEngineFromProps(this.props, { force: true });
|
|
95
119
|
}
|
|
96
120
|
shouldUpdateState({ changeFlags }) {
|
|
97
|
-
return changeFlags.dataChanged || changeFlags.propsChanged;
|
|
121
|
+
return changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.stateChanged;
|
|
98
122
|
}
|
|
99
123
|
updateState({ props, oldProps, changeFlags }) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
this.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
const propsDataChanged = props.data !== oldProps.data;
|
|
125
|
+
const deckDataChanged = changeFlags.dataChanged && !(this._suppressNextDeckDataChange && !propsDataChanged);
|
|
126
|
+
const dataChanged = deckDataChanged || propsDataChanged;
|
|
127
|
+
const layoutChanged = props.layout !== oldProps.layout;
|
|
128
|
+
const graphChanged = props.graph !== oldProps.graph;
|
|
129
|
+
const engineChanged = props.engine !== oldProps.engine;
|
|
130
|
+
const loaderChanged = props.graphLoader !== oldProps.graphLoader;
|
|
131
|
+
const engineRefreshed = this._refreshEngineFromProps(props, {
|
|
132
|
+
dataChanged,
|
|
133
|
+
layoutChanged,
|
|
134
|
+
graphChanged,
|
|
135
|
+
engineChanged,
|
|
136
|
+
loaderChanged
|
|
137
|
+
});
|
|
138
|
+
if (!engineRefreshed && changeFlags.propsChanged) {
|
|
139
|
+
const engine = this.state.graphEngine;
|
|
140
|
+
if (engine) {
|
|
141
|
+
this._applyGraphEngineCallbacks(engine);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (!engineRefreshed && (changeFlags.propsChanged || changeFlags.stateChanged)) {
|
|
145
|
+
this._syncInteractionManager(props, this.state.graphEngine ?? null);
|
|
121
146
|
}
|
|
147
|
+
this._suppressNextDeckDataChange = false;
|
|
122
148
|
}
|
|
123
149
|
finalize() {
|
|
124
150
|
this._removeGraphEngine();
|
|
151
|
+
this._syncInteractionManager(this.props, null);
|
|
125
152
|
}
|
|
126
153
|
_getResolvedStylesheet() {
|
|
127
154
|
const { stylesheet, nodeStyle, edgeStyle } = this.props;
|
|
@@ -141,9 +168,9 @@ export class GraphLayer extends CompositeLayer {
|
|
|
141
168
|
edgeStyle: usingEdgeStyle ? edgeStyle : undefined
|
|
142
169
|
});
|
|
143
170
|
}
|
|
144
|
-
|
|
171
|
+
_createStylesheetEngine(style, context) {
|
|
145
172
|
try {
|
|
146
|
-
return new
|
|
173
|
+
return new GraphStylesheetEngine(style, {
|
|
147
174
|
stateUpdateTrigger: this.state.interactionManager.getLastInteraction()
|
|
148
175
|
});
|
|
149
176
|
}
|
|
@@ -153,25 +180,362 @@ export class GraphLayer extends CompositeLayer {
|
|
|
153
180
|
return null;
|
|
154
181
|
}
|
|
155
182
|
}
|
|
183
|
+
_refreshEngineFromProps(props, { force = false, dataChanged = false, layoutChanged = false, graphChanged = false, engineChanged = false, loaderChanged = false }) {
|
|
184
|
+
const { engine: nextEngine, shouldReplace } = this._resolveEngineCandidate(props, {
|
|
185
|
+
force,
|
|
186
|
+
dataChanged,
|
|
187
|
+
layoutChanged,
|
|
188
|
+
graphChanged,
|
|
189
|
+
engineChanged,
|
|
190
|
+
loaderChanged
|
|
191
|
+
});
|
|
192
|
+
if (nextEngine === undefined) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
const currentEngine = this.state.graphEngine ?? null;
|
|
196
|
+
if (!shouldReplace && nextEngine === currentEngine) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
this._setGraphEngine(nextEngine);
|
|
200
|
+
this._syncInteractionManager(props, nextEngine);
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
_resolveEngineCandidate(props, flags) {
|
|
204
|
+
const dataResult = this._getEngineFromData(props, flags);
|
|
205
|
+
if (dataResult) {
|
|
206
|
+
return dataResult;
|
|
207
|
+
}
|
|
208
|
+
const engineResult = this._getEngineFromEngineProp(props, flags);
|
|
209
|
+
if (engineResult) {
|
|
210
|
+
return engineResult;
|
|
211
|
+
}
|
|
212
|
+
const graphResult = this._getEngineFromGraphProp(props, flags);
|
|
213
|
+
if (graphResult) {
|
|
214
|
+
return graphResult;
|
|
215
|
+
}
|
|
216
|
+
if (props.data === null || props.graph === null || props.engine === null || flags.force) {
|
|
217
|
+
return { engine: null, shouldReplace: true };
|
|
218
|
+
}
|
|
219
|
+
return { engine: undefined, shouldReplace: flags.force };
|
|
220
|
+
}
|
|
221
|
+
_getEngineFromData(props, { force, dataChanged, layoutChanged, loaderChanged }) {
|
|
222
|
+
const dataValue = props.data;
|
|
223
|
+
if (dataValue === null || typeof dataValue === 'undefined') {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
const shouldRebuild = force || dataChanged || layoutChanged || loaderChanged;
|
|
227
|
+
if (!shouldRebuild) {
|
|
228
|
+
return { engine: undefined, shouldReplace: false };
|
|
229
|
+
}
|
|
230
|
+
const engine = this._deriveEngineFromData(dataValue, props);
|
|
231
|
+
if (typeof engine === 'undefined') {
|
|
232
|
+
return { engine: undefined, shouldReplace: false };
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
engine,
|
|
236
|
+
shouldReplace: true
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
_getEngineFromEngineProp(props, { force, engineChanged }) {
|
|
240
|
+
if (typeof props.engine === 'undefined') {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
if (props.engine === null) {
|
|
244
|
+
return { engine: null, shouldReplace: true };
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
engine: props.engine,
|
|
248
|
+
shouldReplace: force || engineChanged
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
_getEngineFromGraphProp(props, { force, graphChanged, layoutChanged }) {
|
|
252
|
+
if (typeof props.graph === 'undefined') {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
if (props.graph === null) {
|
|
256
|
+
return { engine: null, shouldReplace: true };
|
|
257
|
+
}
|
|
258
|
+
this._warnGraphProp();
|
|
259
|
+
return {
|
|
260
|
+
engine: this._buildEngineFromGraph(props.graph, props.layout),
|
|
261
|
+
shouldReplace: force || graphChanged || layoutChanged
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
_deriveEngineFromData(data, props) {
|
|
265
|
+
if (data === null || typeof data === 'undefined') {
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
if (typeof data?.then === 'function') {
|
|
269
|
+
return undefined;
|
|
270
|
+
}
|
|
271
|
+
if (data instanceof GraphEngine) {
|
|
272
|
+
return data;
|
|
273
|
+
}
|
|
274
|
+
const graphCandidate = this._coerceGraph(data);
|
|
275
|
+
if (graphCandidate) {
|
|
276
|
+
return this._buildEngineFromGraph(graphCandidate, props.layout);
|
|
277
|
+
}
|
|
278
|
+
if (typeof data === 'string') {
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
if (Array.isArray(data) || isPlainObject(data)) {
|
|
282
|
+
const loader = props.graphLoader ?? JSONGraphLoader;
|
|
283
|
+
const graph = loader({ json: data });
|
|
284
|
+
if (!graph) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
return this._buildEngineFromGraph(graph, props.layout);
|
|
288
|
+
}
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
_buildEngineFromGraph(graph, layout) {
|
|
292
|
+
if (!graph) {
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
if (!layout) {
|
|
296
|
+
this._warnLayoutRequired();
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
if (graph instanceof ClassicGraph && layout instanceof GraphLayout) {
|
|
300
|
+
return new GraphEngine({ graph, layout });
|
|
301
|
+
}
|
|
302
|
+
if (layout instanceof GraphLayout && !(graph instanceof ClassicGraph)) {
|
|
303
|
+
const legacyGraph = this._convertToClassicGraph(graph);
|
|
304
|
+
if (legacyGraph) {
|
|
305
|
+
return new GraphEngine({ graph: legacyGraph, layout });
|
|
306
|
+
}
|
|
307
|
+
this._warnLayoutRequired();
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
if (layout) {
|
|
311
|
+
return new GraphEngine({ graph, layout });
|
|
312
|
+
}
|
|
313
|
+
this._warnLayoutRequired();
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
316
|
+
_syncInteractionManager(props, engine) {
|
|
317
|
+
const resumeLayoutAfterDragging = props.resumeLayoutAfterDragging ?? GraphLayer.defaultProps.resumeLayoutAfterDragging;
|
|
318
|
+
this.state.interactionManager.updateProps({
|
|
319
|
+
nodeEvents: props.nodeEvents ?? GraphLayer.defaultProps.nodeEvents,
|
|
320
|
+
edgeEvents: props.edgeEvents ?? GraphLayer.defaultProps.edgeEvents,
|
|
321
|
+
engine: (engine ?? props.engine ?? null),
|
|
322
|
+
enableDragging: Boolean(props.enableDragging),
|
|
323
|
+
resumeLayoutAfterDragging: Boolean(resumeLayoutAfterDragging)
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
_warnGraphProp() {
|
|
327
|
+
if (!GRAPH_PROP_DEPRECATION_WARNED) {
|
|
328
|
+
warn(GRAPH_PROP_DEPRECATION_MESSAGE);
|
|
329
|
+
GRAPH_PROP_DEPRECATION_WARNED = true;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
_warnLayoutRequired() {
|
|
333
|
+
if (!LAYOUT_REQUIRED_WARNED) {
|
|
334
|
+
warn(LAYOUT_REQUIRED_MESSAGE);
|
|
335
|
+
LAYOUT_REQUIRED_WARNED = true;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
_isGraph(value) {
|
|
339
|
+
if (!value || typeof value !== 'object') {
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
342
|
+
const candidate = value;
|
|
343
|
+
return (typeof candidate.getNodes === 'function' && typeof candidate.getEdges === 'function');
|
|
344
|
+
}
|
|
345
|
+
_coerceGraph(value) {
|
|
346
|
+
if (value instanceof ClassicGraph) {
|
|
347
|
+
return value;
|
|
348
|
+
}
|
|
349
|
+
if (this._isGraph(value)) {
|
|
350
|
+
return value;
|
|
351
|
+
}
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
_convertToClassicGraph(graph) {
|
|
355
|
+
if (graph instanceof ClassicGraph) {
|
|
356
|
+
return graph;
|
|
357
|
+
}
|
|
358
|
+
const candidate = graph;
|
|
359
|
+
if (typeof candidate.toClassicGraph === 'function') {
|
|
360
|
+
try {
|
|
361
|
+
return candidate.toClassicGraph() ?? null;
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
warn('GraphLayer: failed to convert graph to ClassicGraph for layout compatibility.', error);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
_updateLayoutSnapshot(engine) {
|
|
370
|
+
const activeEngine = engine ?? this.state.graphEngine ?? null;
|
|
371
|
+
if (!activeEngine) {
|
|
372
|
+
if (this.state.layoutVersion !== 0 || typeof this.state.layoutState !== 'undefined') {
|
|
373
|
+
this._suppressNextDeckDataChange = true;
|
|
374
|
+
this.setState({ layoutVersion: 0, layoutState: undefined });
|
|
375
|
+
}
|
|
376
|
+
this.setNeedsRedraw();
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
const nextVersion = activeEngine.getLayoutLastUpdate();
|
|
380
|
+
const nextState = activeEngine.getLayoutState();
|
|
381
|
+
if (this.state.layoutVersion !== nextVersion || this.state.layoutState !== nextState) {
|
|
382
|
+
this._suppressNextDeckDataChange = true;
|
|
383
|
+
this.setState({ layoutVersion: nextVersion, layoutState: nextState });
|
|
384
|
+
}
|
|
385
|
+
this.setNeedsRedraw();
|
|
386
|
+
}
|
|
387
|
+
_handleLayoutEvent = () => {
|
|
388
|
+
this._updateLayoutSnapshot();
|
|
389
|
+
};
|
|
156
390
|
_setGraphEngine(graphEngine) {
|
|
157
391
|
if (graphEngine === this.state.graphEngine) {
|
|
392
|
+
if (graphEngine) {
|
|
393
|
+
this._applyGraphEngineCallbacks(graphEngine);
|
|
394
|
+
}
|
|
395
|
+
this._updateLayoutSnapshot(graphEngine);
|
|
158
396
|
return;
|
|
159
397
|
}
|
|
160
398
|
this._removeGraphEngine();
|
|
161
399
|
if (graphEngine) {
|
|
162
400
|
this.state.graphEngine = graphEngine;
|
|
163
|
-
this.
|
|
164
|
-
|
|
165
|
-
this.
|
|
401
|
+
this._applyGraphEngineCallbacks(graphEngine);
|
|
402
|
+
graphEngine.run();
|
|
403
|
+
this._updateLayoutSnapshot(graphEngine);
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
this.state.graphEngine = null;
|
|
407
|
+
this._updateLayoutSnapshot(null);
|
|
166
408
|
}
|
|
167
409
|
}
|
|
168
410
|
_removeGraphEngine() {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
411
|
+
const engine = this.state.graphEngine;
|
|
412
|
+
if (engine) {
|
|
413
|
+
engine.setProps({
|
|
414
|
+
onLayoutStart: undefined,
|
|
415
|
+
onLayoutChange: undefined,
|
|
416
|
+
onLayoutDone: undefined,
|
|
417
|
+
onLayoutError: undefined
|
|
418
|
+
});
|
|
419
|
+
engine.clear();
|
|
172
420
|
this.state.graphEngine = null;
|
|
421
|
+
this._updateLayoutSnapshot(null);
|
|
173
422
|
}
|
|
174
423
|
}
|
|
424
|
+
_applyGraphEngineCallbacks(engine) {
|
|
425
|
+
engine.setProps({
|
|
426
|
+
onLayoutStart: (detail) => {
|
|
427
|
+
this._handleLayoutEvent();
|
|
428
|
+
this.props.onLayoutStart?.(detail);
|
|
429
|
+
},
|
|
430
|
+
onLayoutChange: (detail) => {
|
|
431
|
+
this._handleLayoutEvent();
|
|
432
|
+
this.props.onLayoutChange?.(detail);
|
|
433
|
+
},
|
|
434
|
+
onLayoutDone: (detail) => {
|
|
435
|
+
this._handleLayoutEvent();
|
|
436
|
+
this.props.onLayoutDone?.(detail);
|
|
437
|
+
},
|
|
438
|
+
onLayoutError: (error) => {
|
|
439
|
+
this._handleLayoutEvent();
|
|
440
|
+
this.props.onLayoutError?.(error);
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
_createRankGridLayer() {
|
|
445
|
+
const engine = this.state.graphEngine;
|
|
446
|
+
if (!engine) {
|
|
447
|
+
return null;
|
|
448
|
+
}
|
|
449
|
+
const { enabled, config } = this._normalizeRankGridConfig(this.props.rankGrid);
|
|
450
|
+
if (!enabled) {
|
|
451
|
+
return null;
|
|
452
|
+
}
|
|
453
|
+
const bounds = this._resolveRankGridBounds(engine);
|
|
454
|
+
if (!bounds) {
|
|
455
|
+
return null;
|
|
456
|
+
}
|
|
457
|
+
const data = this._buildRankGridData(engine, config, bounds);
|
|
458
|
+
if (!data) {
|
|
459
|
+
return null;
|
|
460
|
+
}
|
|
461
|
+
const direction = config?.direction ?? 'horizontal';
|
|
462
|
+
const gridProps = config?.gridProps ?? {};
|
|
463
|
+
return new GridLayer({
|
|
464
|
+
id: `${this.props.id}-rank-grid`,
|
|
465
|
+
data,
|
|
466
|
+
direction,
|
|
467
|
+
xMin: bounds.xMin,
|
|
468
|
+
xMax: bounds.xMax,
|
|
469
|
+
yMin: bounds.yMin,
|
|
470
|
+
yMax: bounds.yMax,
|
|
471
|
+
pickable: false,
|
|
472
|
+
...gridProps
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
_normalizeRankGridConfig(value) {
|
|
476
|
+
if (typeof value === 'boolean') {
|
|
477
|
+
return { enabled: value };
|
|
478
|
+
}
|
|
479
|
+
if (value && typeof value === 'object') {
|
|
480
|
+
return { enabled: value.enabled ?? true, config: value };
|
|
481
|
+
}
|
|
482
|
+
return { enabled: false };
|
|
483
|
+
}
|
|
484
|
+
_resolveRankGridBounds(engine) {
|
|
485
|
+
const bounds = engine.getLayoutBounds();
|
|
486
|
+
if (!bounds) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
const [[minXRaw, minYRaw], [maxXRaw, maxYRaw]] = bounds;
|
|
490
|
+
const values = [minXRaw, minYRaw, maxXRaw, maxYRaw];
|
|
491
|
+
if (!values.every((value) => typeof value === 'number' && Number.isFinite(value))) {
|
|
492
|
+
return null;
|
|
493
|
+
}
|
|
494
|
+
return {
|
|
495
|
+
xMin: Math.min(minXRaw, maxXRaw),
|
|
496
|
+
xMax: Math.max(minXRaw, maxXRaw),
|
|
497
|
+
yMin: Math.min(minYRaw, maxYRaw),
|
|
498
|
+
yMax: Math.max(minYRaw, maxYRaw)
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
_buildRankGridData(engine, config, bounds) {
|
|
502
|
+
const rankLabelPrefix = this._resolveRankFieldLabel(config?.rankAccessor);
|
|
503
|
+
// @ts-ignore iterator type
|
|
504
|
+
const rankPositions = mapRanksToYPositions(engine.getNodes(), engine.getNodePosition, {
|
|
505
|
+
rankAccessor: config?.rankAccessor,
|
|
506
|
+
labelAccessor: config?.labelAccessor,
|
|
507
|
+
yRange: { min: bounds.yMin, max: bounds.yMax }
|
|
508
|
+
});
|
|
509
|
+
if (rankPositions.length === 0) {
|
|
510
|
+
return null;
|
|
511
|
+
}
|
|
512
|
+
const selectedRanks = selectRankLines(rankPositions, {
|
|
513
|
+
yMin: bounds.yMin,
|
|
514
|
+
yMax: bounds.yMax,
|
|
515
|
+
maxCount: config?.maxLines ?? 8
|
|
516
|
+
});
|
|
517
|
+
if (selectedRanks.length === 0) {
|
|
518
|
+
return null;
|
|
519
|
+
}
|
|
520
|
+
return selectedRanks.map(({ rank, label, yPosition }) => ({
|
|
521
|
+
label: `${rankLabelPrefix} ${rank}`,
|
|
522
|
+
rank,
|
|
523
|
+
originalLabel: label === undefined ? undefined : label,
|
|
524
|
+
yPosition
|
|
525
|
+
}));
|
|
526
|
+
}
|
|
527
|
+
_resolveRankFieldLabel(rankAccessor) {
|
|
528
|
+
if (!rankAccessor) {
|
|
529
|
+
return 'srank';
|
|
530
|
+
}
|
|
531
|
+
if (typeof rankAccessor === 'string' && rankAccessor.length > 0) {
|
|
532
|
+
return rankAccessor;
|
|
533
|
+
}
|
|
534
|
+
if (typeof rankAccessor === 'function' && rankAccessor.name) {
|
|
535
|
+
return rankAccessor.name;
|
|
536
|
+
}
|
|
537
|
+
return 'rank';
|
|
538
|
+
}
|
|
175
539
|
createNodeLayers() {
|
|
176
540
|
const engine = this.state.graphEngine;
|
|
177
541
|
const { nodes: nodeStyles } = this._getResolvedStylesheet();
|
|
@@ -187,7 +551,7 @@ export class GraphLayer extends CompositeLayer {
|
|
|
187
551
|
warn(`GraphLayer: Invalid node type "${style.type}".`);
|
|
188
552
|
return null;
|
|
189
553
|
}
|
|
190
|
-
const stylesheet = this.
|
|
554
|
+
const stylesheet = this._createStylesheetEngine(restStyle, `node stylesheet "${style.type}"`);
|
|
191
555
|
if (!stylesheet) {
|
|
192
556
|
return null;
|
|
193
557
|
}
|
|
@@ -230,7 +594,7 @@ export class GraphLayer extends CompositeLayer {
|
|
|
230
594
|
.filter(Boolean)
|
|
231
595
|
.flatMap((style, idx) => {
|
|
232
596
|
const { decorators, data = (edges) => edges, visible = true, ...restEdgeStyle } = style;
|
|
233
|
-
const stylesheet = this.
|
|
597
|
+
const stylesheet = this._createStylesheetEngine({
|
|
234
598
|
type: 'edge',
|
|
235
599
|
...restEdgeStyle
|
|
236
600
|
}, 'edge stylesheet');
|
|
@@ -252,13 +616,14 @@ export class GraphLayer extends CompositeLayer {
|
|
|
252
616
|
}
|
|
253
617
|
const decoratorLayers = decorators
|
|
254
618
|
.filter(Boolean)
|
|
619
|
+
// @ts-ignore eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
255
620
|
.map((decoratorStyle, idx2) => {
|
|
256
621
|
const DecoratorLayer = EDGE_DECORATOR_LAYER_MAP[decoratorStyle.type];
|
|
257
622
|
if (!DecoratorLayer) {
|
|
258
623
|
warn(`GraphLayer: Invalid edge decorator type "${decoratorStyle.type}".`);
|
|
259
624
|
return null;
|
|
260
625
|
}
|
|
261
|
-
const decoratorStylesheet = this.
|
|
626
|
+
const decoratorStylesheet = this._createStylesheetEngine(decoratorStyle, `edge decorator stylesheet "${decoratorStyle.type}"`);
|
|
262
627
|
if (!decoratorStylesheet) {
|
|
263
628
|
return null;
|
|
264
629
|
}
|
|
@@ -292,7 +657,20 @@ export class GraphLayer extends CompositeLayer {
|
|
|
292
657
|
this.state.interactionManager.onDragEnd(info, event);
|
|
293
658
|
}
|
|
294
659
|
renderLayers() {
|
|
295
|
-
|
|
660
|
+
const layers = [];
|
|
661
|
+
const gridLayer = this._createRankGridLayer();
|
|
662
|
+
if (gridLayer) {
|
|
663
|
+
layers.push(gridLayer);
|
|
664
|
+
}
|
|
665
|
+
const edgeLayers = this.createEdgeLayers();
|
|
666
|
+
if (Array.isArray(edgeLayers) && edgeLayers.length > 0) {
|
|
667
|
+
layers.push(...edgeLayers);
|
|
668
|
+
}
|
|
669
|
+
const nodeLayers = this.createNodeLayers();
|
|
670
|
+
if (Array.isArray(nodeLayers) && nodeLayers.length > 0) {
|
|
671
|
+
layers.push(...nodeLayers);
|
|
672
|
+
}
|
|
673
|
+
return layers;
|
|
296
674
|
}
|
|
297
675
|
_createChainOverlayLayers(engine) {
|
|
298
676
|
const chainData = buildCollapsedChainLayers(engine);
|
|
@@ -319,7 +697,7 @@ export class GraphLayer extends CompositeLayer {
|
|
|
319
697
|
}
|
|
320
698
|
}));
|
|
321
699
|
}
|
|
322
|
-
const collapsedMarkerStylesheet = this.
|
|
700
|
+
const collapsedMarkerStylesheet = this._createStylesheetEngine({
|
|
323
701
|
type: 'marker',
|
|
324
702
|
fill: [64, 96, 192, 255],
|
|
325
703
|
size: 32,
|
|
@@ -362,7 +740,7 @@ export class GraphLayer extends CompositeLayer {
|
|
|
362
740
|
}
|
|
363
741
|
}));
|
|
364
742
|
}
|
|
365
|
-
const expandedMarkerStylesheet = this.
|
|
743
|
+
const expandedMarkerStylesheet = this._createStylesheetEngine({
|
|
366
744
|
type: 'marker',
|
|
367
745
|
fill: [64, 96, 192, 255],
|
|
368
746
|
size: 32,
|
|
@@ -390,3 +768,11 @@ export class GraphLayer extends CompositeLayer {
|
|
|
390
768
|
return layers;
|
|
391
769
|
}
|
|
392
770
|
}
|
|
771
|
+
function isPlainObject(value) {
|
|
772
|
+
if (!value || typeof value !== 'object') {
|
|
773
|
+
return false;
|
|
774
|
+
}
|
|
775
|
+
const prototype = Object.getPrototypeOf(value);
|
|
776
|
+
return prototype === Object.prototype || prototype === null;
|
|
777
|
+
}
|
|
778
|
+
//# sourceMappingURL=graph-layer.js.map
|