@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
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {CompositeLayer, type CompositeLayerProps, type UpdateParameters} from '@deck.gl/core';
|
|
6
|
+
import {LineLayer, TextLayer} from '@deck.gl/layers';
|
|
7
|
+
|
|
8
|
+
export type GridLineDatum = {
|
|
9
|
+
/** Optional label associated with the grid line. */
|
|
10
|
+
label?: string | number;
|
|
11
|
+
/** Horizontal grid lines use the yPosition value. */
|
|
12
|
+
yPosition?: number | null;
|
|
13
|
+
/** Vertical grid lines use the xPosition value. */
|
|
14
|
+
xPosition?: number | null;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type GridLayerProps<DatumT extends GridLineDatum = GridLineDatum> = CompositeLayerProps & {
|
|
18
|
+
/** Collection of grid line definitions. */
|
|
19
|
+
data: readonly DatumT[];
|
|
20
|
+
/** Direction in which to draw grid lines. */
|
|
21
|
+
direction?: 'horizontal' | 'vertical';
|
|
22
|
+
/** Minimum X coordinate for grid lines. */
|
|
23
|
+
xMin?: number;
|
|
24
|
+
/** Maximum X coordinate for grid lines. */
|
|
25
|
+
xMax?: number;
|
|
26
|
+
/** Minimum Y coordinate for grid lines. */
|
|
27
|
+
yMin?: number;
|
|
28
|
+
/** Maximum Y coordinate for grid lines. */
|
|
29
|
+
yMax?: number;
|
|
30
|
+
/** Width of the grid lines in screen pixels. */
|
|
31
|
+
width?: number;
|
|
32
|
+
/** RGBA color for grid lines. */
|
|
33
|
+
color?: [number, number, number, number];
|
|
34
|
+
/** Optional accessor for line labels. */
|
|
35
|
+
getLabel?: (d: DatumT) => string | number | null | undefined;
|
|
36
|
+
/** Optional accessor for per-datum colors. */
|
|
37
|
+
getColor?: (d: DatumT) => [number, number, number, number] | null | undefined;
|
|
38
|
+
/** Optional accessor for per-datum widths. */
|
|
39
|
+
getWidth?: (d: DatumT) => number | null | undefined;
|
|
40
|
+
/** Whether to render labels alongside the grid lines. */
|
|
41
|
+
showLabels?: boolean;
|
|
42
|
+
/** Pixel offset applied to rendered labels. */
|
|
43
|
+
labelOffset?: [number, number];
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const DEFAULT_COLOR: [number, number, number, number] = [200, 200, 200, 255];
|
|
47
|
+
const DEFAULT_WIDTH = 1;
|
|
48
|
+
const DEFAULT_OFFSET: [number, number] = [8, 0];
|
|
49
|
+
const DEFAULT_MIN = -1e6;
|
|
50
|
+
const DEFAULT_MAX = 1e6;
|
|
51
|
+
|
|
52
|
+
export class GridLayer<DatumT extends GridLineDatum = GridLineDatum> extends CompositeLayer<GridLayerProps<DatumT>> {
|
|
53
|
+
static override layerName = 'GridLayer';
|
|
54
|
+
|
|
55
|
+
static override defaultProps: Required<Pick<GridLayerProps<GridLineDatum>, 'direction' | 'width' | 'color' | 'xMin' | 'xMax' | 'yMin' | 'yMax' | 'showLabels' | 'labelOffset'>> = {
|
|
56
|
+
direction: 'horizontal',
|
|
57
|
+
width: DEFAULT_WIDTH,
|
|
58
|
+
color: DEFAULT_COLOR,
|
|
59
|
+
xMin: DEFAULT_MIN,
|
|
60
|
+
xMax: DEFAULT_MAX,
|
|
61
|
+
yMin: DEFAULT_MIN,
|
|
62
|
+
yMax: DEFAULT_MAX,
|
|
63
|
+
showLabels: true,
|
|
64
|
+
labelOffset: DEFAULT_OFFSET
|
|
65
|
+
} as const;
|
|
66
|
+
|
|
67
|
+
override shouldUpdateState(params: UpdateParameters<this>): boolean {
|
|
68
|
+
const {changeFlags} = params;
|
|
69
|
+
return Boolean(changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.viewportChanged);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
override renderLayers() {
|
|
73
|
+
const {
|
|
74
|
+
data,
|
|
75
|
+
direction = 'horizontal',
|
|
76
|
+
xMin = DEFAULT_MIN,
|
|
77
|
+
xMax = DEFAULT_MAX,
|
|
78
|
+
yMin = DEFAULT_MIN,
|
|
79
|
+
yMax = DEFAULT_MAX,
|
|
80
|
+
color = DEFAULT_COLOR,
|
|
81
|
+
width = DEFAULT_WIDTH,
|
|
82
|
+
getLabel,
|
|
83
|
+
getColor,
|
|
84
|
+
getWidth,
|
|
85
|
+
showLabels = true,
|
|
86
|
+
labelOffset = DEFAULT_OFFSET
|
|
87
|
+
} = this.props;
|
|
88
|
+
|
|
89
|
+
const bounds = this._resolveViewportBounds({xMin, xMax, yMin, yMax});
|
|
90
|
+
const lines = this._createLineSegments(data, direction, bounds);
|
|
91
|
+
|
|
92
|
+
if (!lines.length) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const lineLayer = new LineLayer({
|
|
97
|
+
id: `${this.props.id}-lines`,
|
|
98
|
+
data: lines,
|
|
99
|
+
getSourcePosition: (d) => d.sourcePosition,
|
|
100
|
+
getTargetPosition: (d) => d.targetPosition,
|
|
101
|
+
getColor: getColor ? (d) => getColor(d.datum) ?? color : () => color,
|
|
102
|
+
getWidth: getWidth ? (d) => getWidth(d.datum) ?? width : () => width,
|
|
103
|
+
widthUnits: 'pixels',
|
|
104
|
+
parameters: {
|
|
105
|
+
depthTest: false
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
if (!showLabels) {
|
|
110
|
+
return [lineLayer];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const textData = this._createLabelData(lines, direction, bounds, getLabel);
|
|
114
|
+
|
|
115
|
+
if (!textData.length) {
|
|
116
|
+
return [lineLayer];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const textLayer = new TextLayer({
|
|
120
|
+
id: `${this.props.id}-labels`,
|
|
121
|
+
data: textData,
|
|
122
|
+
getPosition: (d) => d.position,
|
|
123
|
+
getText: (d) => d.text,
|
|
124
|
+
getColor: getColor ? (d) => getColor(d.datum) ?? color : () => color,
|
|
125
|
+
getSize: 12,
|
|
126
|
+
sizeUnits: 'pixels',
|
|
127
|
+
getPixelOffset: labelOffset,
|
|
128
|
+
getTextAnchor: () => 'start',
|
|
129
|
+
getAlignmentBaseline: () => 'center',
|
|
130
|
+
background: true,
|
|
131
|
+
backgroundPadding: [4, 2],
|
|
132
|
+
backgroundColor: [255, 255, 255, 200],
|
|
133
|
+
parameters: {
|
|
134
|
+
depthTest: false
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
return [lineLayer, textLayer];
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private _resolveViewportBounds(bounds: {
|
|
142
|
+
xMin: number;
|
|
143
|
+
xMax: number;
|
|
144
|
+
yMin: number;
|
|
145
|
+
yMax: number;
|
|
146
|
+
}): {minX: number; maxX: number; minY: number; maxY: number} {
|
|
147
|
+
const viewportBounds = this.context?.viewport?.getBounds?.();
|
|
148
|
+
if (!Array.isArray(viewportBounds) || viewportBounds.length !== 4) {
|
|
149
|
+
return {minX: bounds.xMin, maxX: bounds.xMax, minY: bounds.yMin, maxY: bounds.yMax};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const [bxMin, byMin, bxMax, byMax] = viewportBounds;
|
|
153
|
+
const minX =
|
|
154
|
+
Number.isFinite(bxMin) && Number.isFinite(bxMax)
|
|
155
|
+
? Math.min(bounds.xMin, bxMin)
|
|
156
|
+
: bounds.xMin;
|
|
157
|
+
const maxX =
|
|
158
|
+
Number.isFinite(bxMin) && Number.isFinite(bxMax)
|
|
159
|
+
? Math.max(bounds.xMax, bxMax)
|
|
160
|
+
: bounds.xMax;
|
|
161
|
+
const minY =
|
|
162
|
+
Number.isFinite(byMin) && Number.isFinite(byMax)
|
|
163
|
+
? Math.min(bounds.yMin, byMin)
|
|
164
|
+
: bounds.yMin;
|
|
165
|
+
const maxY =
|
|
166
|
+
Number.isFinite(byMin) && Number.isFinite(byMax)
|
|
167
|
+
? Math.max(bounds.yMax, byMax)
|
|
168
|
+
: bounds.yMax;
|
|
169
|
+
|
|
170
|
+
return {minX, maxX, minY, maxY};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private _createLineSegments(
|
|
174
|
+
data: readonly DatumT[],
|
|
175
|
+
direction: 'horizontal' | 'vertical',
|
|
176
|
+
bounds: {minX: number; maxX: number; minY: number; maxY: number}
|
|
177
|
+
): Array<{
|
|
178
|
+
sourcePosition: [number, number];
|
|
179
|
+
targetPosition: [number, number];
|
|
180
|
+
datum: DatumT;
|
|
181
|
+
}> {
|
|
182
|
+
const segments: Array<{
|
|
183
|
+
sourcePosition: [number, number];
|
|
184
|
+
targetPosition: [number, number];
|
|
185
|
+
datum: DatumT;
|
|
186
|
+
}> = [];
|
|
187
|
+
|
|
188
|
+
const isHorizontal = direction === 'horizontal';
|
|
189
|
+
for (const datum of data) {
|
|
190
|
+
const position = isHorizontal ? datum.yPosition : datum.xPosition;
|
|
191
|
+
if (typeof position === 'number' && Number.isFinite(position)) {
|
|
192
|
+
if (isHorizontal) {
|
|
193
|
+
segments.push({
|
|
194
|
+
sourcePosition: [bounds.minX, position],
|
|
195
|
+
targetPosition: [bounds.maxX, position],
|
|
196
|
+
datum
|
|
197
|
+
});
|
|
198
|
+
} else {
|
|
199
|
+
segments.push({
|
|
200
|
+
sourcePosition: [position, bounds.minY],
|
|
201
|
+
targetPosition: [position, bounds.maxY],
|
|
202
|
+
datum
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return segments;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
private _createLabelData(
|
|
212
|
+
lines: Array<{
|
|
213
|
+
sourcePosition: [number, number];
|
|
214
|
+
targetPosition: [number, number];
|
|
215
|
+
datum: DatumT;
|
|
216
|
+
}>,
|
|
217
|
+
direction: 'horizontal' | 'vertical',
|
|
218
|
+
bounds: {minX: number; maxX: number; minY: number; maxY: number},
|
|
219
|
+
getLabel?: (datum: DatumT) => string | number | null | undefined
|
|
220
|
+
): Array<{position: [number, number]; text: string; datum: DatumT}> {
|
|
221
|
+
const labels: Array<{position: [number, number]; text: string; datum: DatumT}> = [];
|
|
222
|
+
const isHorizontal = direction === 'horizontal';
|
|
223
|
+
|
|
224
|
+
for (const {datum, sourcePosition} of lines) {
|
|
225
|
+
const rawLabel = getLabel ? getLabel(datum) : datum.label ?? null;
|
|
226
|
+
if (rawLabel !== null && rawLabel !== undefined && rawLabel !== '') {
|
|
227
|
+
const [sx, sy] = sourcePosition;
|
|
228
|
+
const position: [number, number] = isHorizontal
|
|
229
|
+
? [bounds.minX, sy]
|
|
230
|
+
: [sx, bounds.minY];
|
|
231
|
+
labels.push({position, text: String(rawLabel), datum});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return labels;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -4,16 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
import type {InteractionManager} from '../core/interaction-manager';
|
|
6
6
|
import type {GraphEngine} from '../core/graph-engine';
|
|
7
|
-
import type {
|
|
7
|
+
import type {NodeInterface} from '../graph/graph';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
GraphStylesheetEngine,
|
|
11
|
+
type GraphStylesheet
|
|
12
|
+
} from '../style/graph-style-engine';
|
|
10
13
|
import type {GraphLayerNodeStyle} from '../style/graph-layer-stylesheet';
|
|
11
14
|
import {getNodeBoundaryIntersection, type GeometryNodeType, type NodeGeometry} from '../utils/node-boundary';
|
|
12
15
|
import {warn} from '../utils/log';
|
|
13
16
|
|
|
14
|
-
type NumericAccessor = ((node:
|
|
17
|
+
type NumericAccessor = ((node: NodeInterface) => number) | number | null | undefined;
|
|
15
18
|
type OffsetAccessor =
|
|
16
|
-
| ((node:
|
|
19
|
+
| ((node: NodeInterface) => [number, number])
|
|
17
20
|
| [number, number]
|
|
18
21
|
| null
|
|
19
22
|
| undefined;
|
|
@@ -36,7 +39,7 @@ const GEOMETRY_NODE_TYPES: GeometryNodeType[] = [
|
|
|
36
39
|
'marker'
|
|
37
40
|
];
|
|
38
41
|
|
|
39
|
-
function evaluateNumericAccessor(accessor: NumericAccessor, node:
|
|
42
|
+
function evaluateNumericAccessor(accessor: NumericAccessor, node: NodeInterface): number | undefined {
|
|
40
43
|
if (typeof accessor === 'function') {
|
|
41
44
|
const value = accessor(node);
|
|
42
45
|
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
@@ -47,7 +50,7 @@ function evaluateNumericAccessor(accessor: NumericAccessor, node: Node): number
|
|
|
47
50
|
return undefined;
|
|
48
51
|
}
|
|
49
52
|
|
|
50
|
-
function evaluateOffsetAccessor(accessor: OffsetAccessor, node:
|
|
53
|
+
function evaluateOffsetAccessor(accessor: OffsetAccessor, node: NodeInterface): [number, number] {
|
|
51
54
|
if (!accessor) {
|
|
52
55
|
return [0, 0];
|
|
53
56
|
}
|
|
@@ -85,7 +88,7 @@ function normalizePosition(value: any): [number, number] | null {
|
|
|
85
88
|
return null;
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
function resolveAccessorValue(accessor: NumericAccessor | undefined, node:
|
|
91
|
+
function resolveAccessorValue(accessor: NumericAccessor | undefined, node: NodeInterface) {
|
|
89
92
|
if (!accessor) {
|
|
90
93
|
return undefined;
|
|
91
94
|
}
|
|
@@ -103,7 +106,7 @@ function assignDimension(
|
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
function assignRectangleDimensions(
|
|
106
|
-
node:
|
|
109
|
+
node: NodeInterface,
|
|
107
110
|
accessors: NodeStyleAccessors,
|
|
108
111
|
geometry: NodeGeometry
|
|
109
112
|
) {
|
|
@@ -113,7 +116,7 @@ function assignRectangleDimensions(
|
|
|
113
116
|
|
|
114
117
|
const GEOMETRY_APPLIERS: Record<
|
|
115
118
|
GeometryNodeType,
|
|
116
|
-
(node:
|
|
119
|
+
(node: NodeInterface, accessors: NodeStyleAccessors, geometry: NodeGeometry) => void
|
|
117
120
|
> = {
|
|
118
121
|
circle: (node, accessors, geometry) => {
|
|
119
122
|
assignDimension(geometry, 'radius', resolveAccessorValue(accessors.getRadius, node));
|
|
@@ -158,7 +161,10 @@ export class EdgeAttachmentHelper {
|
|
|
158
161
|
|
|
159
162
|
const nodeMap = engine
|
|
160
163
|
.getNodes()
|
|
161
|
-
.reduce(
|
|
164
|
+
.reduce(
|
|
165
|
+
(acc, node) => acc.set(node.getId(), node),
|
|
166
|
+
new Map<string | number, NodeInterface>()
|
|
167
|
+
);
|
|
162
168
|
|
|
163
169
|
return (edge: any) =>
|
|
164
170
|
this._getAdjustedEdgeLayout(engine, nodeAccessorMap, nodeMap, edge);
|
|
@@ -191,9 +197,9 @@ export class EdgeAttachmentHelper {
|
|
|
191
197
|
return;
|
|
192
198
|
}
|
|
193
199
|
|
|
194
|
-
let stylesheet:
|
|
200
|
+
let stylesheet: GraphStylesheetEngine | null = null;
|
|
195
201
|
try {
|
|
196
|
-
stylesheet =
|
|
202
|
+
stylesheet = engine.createStylesheetEngine(restStyle as GraphStylesheet, {
|
|
197
203
|
stateUpdateTrigger: (interactionManager as any).getLastInteraction()
|
|
198
204
|
});
|
|
199
205
|
} catch (error) {
|
|
@@ -213,7 +219,7 @@ export class EdgeAttachmentHelper {
|
|
|
213
219
|
const geometryType = type as GeometryNodeType;
|
|
214
220
|
const accessors = this._createAccessorsForType(geometryType, stylesheet);
|
|
215
221
|
|
|
216
|
-
nodes.forEach((node:
|
|
222
|
+
nodes.forEach((node: NodeInterface) => {
|
|
217
223
|
const id = node.getId();
|
|
218
224
|
if (!nodeAccessorMap.has(id)) {
|
|
219
225
|
nodeAccessorMap.set(id, accessors);
|
|
@@ -227,7 +233,7 @@ export class EdgeAttachmentHelper {
|
|
|
227
233
|
private _getAdjustedEdgeLayout(
|
|
228
234
|
engine: GraphEngine,
|
|
229
235
|
nodeAccessorMap: Map<string | number, NodeStyleAccessors>,
|
|
230
|
-
nodeMap: Map<string | number,
|
|
236
|
+
nodeMap: Map<string | number, NodeInterface>,
|
|
231
237
|
edge: any
|
|
232
238
|
) {
|
|
233
239
|
const layoutInfo = engine.getEdgePosition(edge);
|
|
@@ -287,7 +293,7 @@ export class EdgeAttachmentHelper {
|
|
|
287
293
|
|
|
288
294
|
private _createAccessorsForType(
|
|
289
295
|
geometryType: GeometryNodeType,
|
|
290
|
-
stylesheet:
|
|
296
|
+
stylesheet: GraphStylesheetEngine
|
|
291
297
|
): NodeStyleAccessors {
|
|
292
298
|
const base: NodeStyleAccessors = {
|
|
293
299
|
type: geometryType,
|
|
@@ -325,7 +331,7 @@ export class EdgeAttachmentHelper {
|
|
|
325
331
|
|
|
326
332
|
private _computeNodeGeometry(
|
|
327
333
|
engine: GraphEngine,
|
|
328
|
-
node:
|
|
334
|
+
node: NodeInterface,
|
|
329
335
|
accessors?: NodeStyleAccessors
|
|
330
336
|
): NodeGeometry | null {
|
|
331
337
|
const basePosition = engine.getNodePosition(node);
|