@deck.gl-community/timeline-layers 9.2.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/README.md +20 -0
- package/dist/index.cjs +538 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer-uniforms.d.ts +23 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer-uniforms.d.ts.map +1 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer-uniforms.js +33 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer-uniforms.js.map +1 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.d.ts +38 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.d.ts.map +1 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.fs.d.ts +3 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.fs.d.ts.map +1 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.fs.js +53 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.fs.js.map +1 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.js +138 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.js.map +1 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.vs.d.ts +3 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.vs.d.ts.map +1 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.vs.js +24 -0
- package/dist/layers/horizon-graph-layer/horizon-graph-layer.vs.js.map +1 -0
- package/dist/layers/horizon-graph-layer/multi-horizon-graph-layer.d.ts +23 -0
- package/dist/layers/horizon-graph-layer/multi-horizon-graph-layer.d.ts.map +1 -0
- package/dist/layers/horizon-graph-layer/multi-horizon-graph-layer.js +100 -0
- package/dist/layers/horizon-graph-layer/multi-horizon-graph-layer.js.map +1 -0
- package/dist/layers/time-axis-layer.d.ts +56 -0
- package/dist/layers/time-axis-layer.d.ts.map +1 -0
- package/dist/layers/time-axis-layer.js +78 -0
- package/dist/layers/time-axis-layer.js.map +1 -0
- package/dist/layers/vertical-grid-layer.d.ts +41 -0
- package/dist/layers/vertical-grid-layer.d.ts.map +1 -0
- package/dist/layers/vertical-grid-layer.js +43 -0
- package/dist/layers/vertical-grid-layer.js.map +1 -0
- package/dist/utils/format-utils.d.ts +7 -0
- package/dist/utils/format-utils.d.ts.map +1 -0
- package/dist/utils/format-utils.js +75 -0
- package/dist/utils/format-utils.js.map +1 -0
- package/dist/utils/tick-utils.d.ts +10 -0
- package/dist/utils/tick-utils.d.ts.map +1 -0
- package/dist/utils/tick-utils.js +32 -0
- package/dist/utils/tick-utils.js.map +1 -0
- package/package.json +48 -0
- package/src/index.ts +13 -0
- package/src/layers/horizon-graph-layer/horizon-graph-layer-uniforms.ts +47 -0
- package/src/layers/horizon-graph-layer/horizon-graph-layer.fs.ts +53 -0
- package/src/layers/horizon-graph-layer/horizon-graph-layer.ts +202 -0
- package/src/layers/horizon-graph-layer/horizon-graph-layer.vs.ts +24 -0
- package/src/layers/horizon-graph-layer/multi-horizon-graph-layer.ts +164 -0
- package/src/layers/time-axis-layer.ts +102 -0
- package/src/layers/vertical-grid-layer.ts +69 -0
- package/src/utils/format-utils.ts +80 -0
- package/src/utils/tick-utils.ts +41 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
export { HorizonGraphLayer } from "./layers/horizon-graph-layer/horizon-graph-layer.js";
|
|
5
|
+
export { MultiHorizonGraphLayer } from "./layers/horizon-graph-layer/multi-horizon-graph-layer.js";
|
|
6
|
+
export { TimeAxisLayer } from "./layers/time-axis-layer.js";
|
|
7
|
+
export { VerticalGridLayer } from "./layers/vertical-grid-layer.js";
|
|
8
|
+
export { formatTimeMs, formatTimeRangeMs } from "./utils/format-utils.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,iBAAiB,EAAC,4DAAyD;AAEnF,OAAO,EAAC,sBAAsB,EAAC,kEAA+D;AAE9F,OAAO,EAAC,aAAa,EAAC,oCAAiC;AAEvD,OAAO,EAAC,iBAAiB,EAAC,wCAAqC;AAC/D,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,gCAA6B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Texture } from '@luma.gl/core';
|
|
2
|
+
type HorizonLayerBindingProps = {
|
|
3
|
+
dataTexture: Texture;
|
|
4
|
+
};
|
|
5
|
+
type HorizonLayerUniformProps = {};
|
|
6
|
+
export type HorizonLayerProps = HorizonLayerBindingProps & HorizonLayerUniformProps;
|
|
7
|
+
export declare const horizonLayerUniforms: {
|
|
8
|
+
readonly name: "horizonLayer";
|
|
9
|
+
readonly vs: "layout(std140) uniform horizonLayerUniforms {\n float dataTextureSize; // width = height of the POT texture\n float dataTextureSizeInv;\n float dataTextureCount; // actual number of data points\n\n float bands;\n float bandsInv;\n float yAxisScaleInv;\n\n vec3 positiveColor;\n vec3 negativeColor;\n} horizonLayer;\n";
|
|
10
|
+
readonly fs: "layout(std140) uniform horizonLayerUniforms {\n float dataTextureSize; // width = height of the POT texture\n float dataTextureSizeInv;\n float dataTextureCount; // actual number of data points\n\n float bands;\n float bandsInv;\n float yAxisScaleInv;\n\n vec3 positiveColor;\n vec3 negativeColor;\n} horizonLayer;\n";
|
|
11
|
+
readonly uniformTypes: {
|
|
12
|
+
readonly dataTextureSize: "f32";
|
|
13
|
+
readonly dataTextureSizeInv: "f32";
|
|
14
|
+
readonly dataTextureCount: "f32";
|
|
15
|
+
readonly bands: "f32";
|
|
16
|
+
readonly bandsInv: "f32";
|
|
17
|
+
readonly yAxisScaleInv: "f32";
|
|
18
|
+
readonly positiveColor: "vec3<f32>";
|
|
19
|
+
readonly negativeColor: "vec3<f32>";
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=horizon-graph-layer-uniforms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"horizon-graph-layer-uniforms.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer-uniforms.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAiBtC,KAAK,wBAAwB,GAAG;IAC9B,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,KAAK,wBAAwB,GAAG,EAAE,CAAC;AAEnC,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,wBAAwB,CAAC;AAEpF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;CAgBmB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
const uniformBlock = `\
|
|
5
|
+
layout(std140) uniform horizonLayerUniforms {
|
|
6
|
+
float dataTextureSize; // width = height of the POT texture
|
|
7
|
+
float dataTextureSizeInv;
|
|
8
|
+
float dataTextureCount; // actual number of data points
|
|
9
|
+
|
|
10
|
+
float bands;
|
|
11
|
+
float bandsInv;
|
|
12
|
+
float yAxisScaleInv;
|
|
13
|
+
|
|
14
|
+
vec3 positiveColor;
|
|
15
|
+
vec3 negativeColor;
|
|
16
|
+
} horizonLayer;
|
|
17
|
+
`;
|
|
18
|
+
export const horizonLayerUniforms = {
|
|
19
|
+
name: 'horizonLayer',
|
|
20
|
+
vs: uniformBlock,
|
|
21
|
+
fs: uniformBlock,
|
|
22
|
+
uniformTypes: {
|
|
23
|
+
dataTextureSize: 'f32',
|
|
24
|
+
dataTextureSizeInv: 'f32',
|
|
25
|
+
dataTextureCount: 'f32',
|
|
26
|
+
bands: 'f32',
|
|
27
|
+
bandsInv: 'f32',
|
|
28
|
+
yAxisScaleInv: 'f32',
|
|
29
|
+
positiveColor: 'vec3<f32>',
|
|
30
|
+
negativeColor: 'vec3<f32>'
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=horizon-graph-layer-uniforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"horizon-graph-layer-uniforms.js","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer-uniforms.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,MAAM,YAAY,GAAG;;;;;;;;;;;;;CAapB,CAAC;AAUF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,cAAc;IACpB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;IAChB,YAAY,EAAE;QACZ,eAAe,EAAE,KAAK;QACtB,kBAAkB,EAAE,KAAK;QACzB,gBAAgB,EAAE,KAAK;QAEvB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,KAAK;QAEpB,aAAa,EAAE,WAAW;QAC1B,aAAa,EAAE,WAAW;KAC3B;CACiD,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { DefaultProps, LayerProps, Color, LayerContext, UpdateParameters } from '@deck.gl/core';
|
|
2
|
+
import { Layer } from '@deck.gl/core';
|
|
3
|
+
import { Model } from '@luma.gl/engine';
|
|
4
|
+
import { Texture } from '@luma.gl/core';
|
|
5
|
+
export type _HorizonGraphLayerProps = {
|
|
6
|
+
data: number[] | Float32Array;
|
|
7
|
+
yAxisScale?: number;
|
|
8
|
+
bands?: number;
|
|
9
|
+
positiveColor?: Color;
|
|
10
|
+
negativeColor?: Color;
|
|
11
|
+
x?: number;
|
|
12
|
+
y?: number;
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
15
|
+
};
|
|
16
|
+
export type HorizonGraphLayerProps = _HorizonGraphLayerProps & LayerProps;
|
|
17
|
+
export declare class HorizonGraphLayer<ExtraProps extends {} = {}> extends Layer<ExtraProps & Required<_HorizonGraphLayerProps>> {
|
|
18
|
+
static layerName: string;
|
|
19
|
+
static defaultProps: DefaultProps<HorizonGraphLayerProps>;
|
|
20
|
+
state: {
|
|
21
|
+
model?: Model;
|
|
22
|
+
dataTexture?: Texture;
|
|
23
|
+
dataTextureSize?: number;
|
|
24
|
+
dataTextureCount?: number;
|
|
25
|
+
};
|
|
26
|
+
initializeState(): void;
|
|
27
|
+
getShaders(): any;
|
|
28
|
+
_createDataTexture(seriesData: Float32Array | number[]): {
|
|
29
|
+
dataTexture: Texture;
|
|
30
|
+
dataTextureSize: number;
|
|
31
|
+
dataTextureCount: number;
|
|
32
|
+
};
|
|
33
|
+
_createModel(): Model;
|
|
34
|
+
updateState(params: UpdateParameters<Layer<ExtraProps & Required<_HorizonGraphLayerProps>>>): void;
|
|
35
|
+
draw(): void;
|
|
36
|
+
finalizeState(context: LayerContext): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=horizon-graph-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"horizon-graph-layer.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,EAAC,KAAK,EAAY,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,KAAK,EAAW,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAGtC,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;IAE9B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,aAAa,CAAC,EAAE,KAAK,CAAC;IAEtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG,UAAU,CAAC;AAgB1E,qBAAa,iBAAiB,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,KAAK,CACtE,UAAU,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAC/C;IACC,MAAM,CAAC,SAAS,SAAuB;IACvC,MAAM,CAAC,YAAY,uCAAgB;IAEnC,KAAK,EAAE;QACL,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAM;IAEP,eAAe;IAIf,UAAU;IAQV,kBAAkB,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG;QACvD,WAAW,EAAE,OAAO,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAkCD,YAAY;IAwCZ,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAgB3F,IAAI;IAiCJ,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;CAK3C"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const _default: "#version 300 es\n#define SHADER_NAME horizon-graph-layer-fragment-shader\n\nprecision highp float;\nprecision highp int;\n\n/******* UNIFORM *******/\n\nuniform sampler2D dataTexture;\n\n/******* IN *******/\n\nin vec2 v_uv;\n\n/******* OUT *******/\n\nout vec4 fragColor;\n\n\n/******* MAIN *******/\n\nvoid main(void) {\n // horizontal position to sample index\n float idx = v_uv.x * horizonLayer.dataTextureCount;\n // idx = clamp(idx, 0.0, horizonLayer.dataTextureCount - 1.0); // NEEDED???\n\n // fetch single data point & normalize (-1,+1)\n float fy = floor(idx * horizonLayer.dataTextureSizeInv);\n float fx = idx - fy * horizonLayer.dataTextureSize;\n float val = texelFetch(dataTexture, ivec2(int(fx), int(fy)), 0).r;\n val *= horizonLayer.yAxisScaleInv;\n\n // band layering\n float fband = abs(val) * horizonLayer.bands;\n float bandIdx = clamp(floor(fband), 0.0, horizonLayer.bands - 1.0);\n float bandFrac = fract(fband);\n\n // calc our position value and find out color (using mix+step instead of if...else)\n float positive = step(0.0, val); // 1 if pos, else 0\n vec3 baseCol = mix(horizonLayer.negativeColor, horizonLayer.positiveColor, positive);\n float curPos = mix(v_uv.y, 1.0 - v_uv.y, positive);\n float addOne = step(curPos, bandFrac);\n\n float band = bandIdx + addOne;\n float whiten = 1.0 - band * horizonLayer.bandsInv;\n\n fragColor = vec4(mix(baseCol, vec3(1.0), whiten), 1.0);\n}\n";
|
|
2
|
+
export default _default;
|
|
3
|
+
//# sourceMappingURL=horizon-graph-layer.fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"horizon-graph-layer.fs.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.fs.ts"],"names":[],"mappings":";AAIA,wBAgDE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
export default `#version 300 es
|
|
5
|
+
#define SHADER_NAME horizon-graph-layer-fragment-shader
|
|
6
|
+
|
|
7
|
+
precision highp float;
|
|
8
|
+
precision highp int;
|
|
9
|
+
|
|
10
|
+
/******* UNIFORM *******/
|
|
11
|
+
|
|
12
|
+
uniform sampler2D dataTexture;
|
|
13
|
+
|
|
14
|
+
/******* IN *******/
|
|
15
|
+
|
|
16
|
+
in vec2 v_uv;
|
|
17
|
+
|
|
18
|
+
/******* OUT *******/
|
|
19
|
+
|
|
20
|
+
out vec4 fragColor;
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
/******* MAIN *******/
|
|
24
|
+
|
|
25
|
+
void main(void) {
|
|
26
|
+
// horizontal position to sample index
|
|
27
|
+
float idx = v_uv.x * horizonLayer.dataTextureCount;
|
|
28
|
+
// idx = clamp(idx, 0.0, horizonLayer.dataTextureCount - 1.0); // NEEDED???
|
|
29
|
+
|
|
30
|
+
// fetch single data point & normalize (-1,+1)
|
|
31
|
+
float fy = floor(idx * horizonLayer.dataTextureSizeInv);
|
|
32
|
+
float fx = idx - fy * horizonLayer.dataTextureSize;
|
|
33
|
+
float val = texelFetch(dataTexture, ivec2(int(fx), int(fy)), 0).r;
|
|
34
|
+
val *= horizonLayer.yAxisScaleInv;
|
|
35
|
+
|
|
36
|
+
// band layering
|
|
37
|
+
float fband = abs(val) * horizonLayer.bands;
|
|
38
|
+
float bandIdx = clamp(floor(fband), 0.0, horizonLayer.bands - 1.0);
|
|
39
|
+
float bandFrac = fract(fband);
|
|
40
|
+
|
|
41
|
+
// calc our position value and find out color (using mix+step instead of if...else)
|
|
42
|
+
float positive = step(0.0, val); // 1 if pos, else 0
|
|
43
|
+
vec3 baseCol = mix(horizonLayer.negativeColor, horizonLayer.positiveColor, positive);
|
|
44
|
+
float curPos = mix(v_uv.y, 1.0 - v_uv.y, positive);
|
|
45
|
+
float addOne = step(curPos, bandFrac);
|
|
46
|
+
|
|
47
|
+
float band = bandIdx + addOne;
|
|
48
|
+
float whiten = 1.0 - band * horizonLayer.bandsInv;
|
|
49
|
+
|
|
50
|
+
fragColor = vec4(mix(baseCol, vec3(1.0), whiten), 1.0);
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
//# sourceMappingURL=horizon-graph-layer.fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"horizon-graph-layer.fs.js","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.fs.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDd,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { Layer, project32 } from '@deck.gl/core';
|
|
5
|
+
import { Model, Geometry } from '@luma.gl/engine';
|
|
6
|
+
import vs from './horizon-graph-layer.vs';
|
|
7
|
+
import fs from './horizon-graph-layer.fs';
|
|
8
|
+
import { horizonLayerUniforms } from "./horizon-graph-layer-uniforms.js";
|
|
9
|
+
const defaultProps = {
|
|
10
|
+
yAxisScale: { type: 'number', value: 1000 },
|
|
11
|
+
bands: { type: 'number', value: 2 },
|
|
12
|
+
positiveColor: { type: 'color', value: [0, 128, 0] },
|
|
13
|
+
negativeColor: { type: 'color', value: [0, 0, 255] },
|
|
14
|
+
x: { type: 'number', value: 0 },
|
|
15
|
+
y: { type: 'number', value: 0 },
|
|
16
|
+
width: { type: 'number', value: 800 },
|
|
17
|
+
height: { type: 'number', value: 300 }
|
|
18
|
+
};
|
|
19
|
+
export class HorizonGraphLayer extends Layer {
|
|
20
|
+
static layerName = 'HorizonGraphLayer';
|
|
21
|
+
static defaultProps = defaultProps;
|
|
22
|
+
state = {};
|
|
23
|
+
initializeState() {
|
|
24
|
+
this.state = {};
|
|
25
|
+
}
|
|
26
|
+
getShaders() {
|
|
27
|
+
return super.getShaders({
|
|
28
|
+
vs,
|
|
29
|
+
fs,
|
|
30
|
+
modules: [project32, horizonLayerUniforms]
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
_createDataTexture(seriesData) {
|
|
34
|
+
const _data = seriesData instanceof Float32Array ? seriesData : new Float32Array(seriesData);
|
|
35
|
+
const { device } = this.context;
|
|
36
|
+
const count = _data.length;
|
|
37
|
+
let dataTextureSize = 32;
|
|
38
|
+
while (count > dataTextureSize * dataTextureSize) {
|
|
39
|
+
dataTextureSize *= 2;
|
|
40
|
+
}
|
|
41
|
+
// TODO: use the right way to only submit the minimum amount of data
|
|
42
|
+
const data = new Float32Array(dataTextureSize * dataTextureSize);
|
|
43
|
+
data.set(_data, 0);
|
|
44
|
+
return {
|
|
45
|
+
dataTexture: device.createTexture({
|
|
46
|
+
data,
|
|
47
|
+
format: 'r32float',
|
|
48
|
+
dimension: '2d',
|
|
49
|
+
width: dataTextureSize,
|
|
50
|
+
height: dataTextureSize,
|
|
51
|
+
sampler: {
|
|
52
|
+
minFilter: 'nearest',
|
|
53
|
+
magFilter: 'nearest',
|
|
54
|
+
addressModeU: 'clamp-to-edge',
|
|
55
|
+
addressModeV: 'clamp-to-edge'
|
|
56
|
+
}
|
|
57
|
+
}),
|
|
58
|
+
dataTextureSize,
|
|
59
|
+
dataTextureCount: count
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
_createModel() {
|
|
63
|
+
const { x, y, width, height } = this.props;
|
|
64
|
+
// Create a rectangle using triangle strip (4 vertices)
|
|
65
|
+
// Order: bottom-left, bottom-right, top-left, top-right
|
|
66
|
+
const positions = [
|
|
67
|
+
x,
|
|
68
|
+
y,
|
|
69
|
+
0.0,
|
|
70
|
+
x + width,
|
|
71
|
+
y,
|
|
72
|
+
0.0,
|
|
73
|
+
x,
|
|
74
|
+
y + height,
|
|
75
|
+
0.0,
|
|
76
|
+
x + width,
|
|
77
|
+
y + height,
|
|
78
|
+
0.0
|
|
79
|
+
];
|
|
80
|
+
const uv = [0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0];
|
|
81
|
+
const geometry = new Geometry({
|
|
82
|
+
topology: 'triangle-strip',
|
|
83
|
+
attributes: {
|
|
84
|
+
positions: { value: new Float32Array(positions), size: 3 },
|
|
85
|
+
uv: { value: new Float32Array(uv), size: 2 }
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return new Model(this.context.device, {
|
|
89
|
+
...this.getShaders(),
|
|
90
|
+
geometry,
|
|
91
|
+
bufferLayout: this.getAttributeManager().getBufferLayouts()
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
updateState(params) {
|
|
95
|
+
super.updateState(params);
|
|
96
|
+
const { changeFlags } = params;
|
|
97
|
+
if (changeFlags.dataChanged) {
|
|
98
|
+
this.state.dataTexture?.destroy();
|
|
99
|
+
this.setState(this._createDataTexture(this.props.data));
|
|
100
|
+
}
|
|
101
|
+
if (changeFlags.extensionsChanged || changeFlags.propsChanged) {
|
|
102
|
+
this.state.model?.destroy();
|
|
103
|
+
this.setState({ model: this._createModel() });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
draw() {
|
|
107
|
+
const { model, dataTexture } = this.state;
|
|
108
|
+
if (!model) {
|
|
109
|
+
this.setState({ model: this._createModel() });
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (!dataTexture) {
|
|
113
|
+
this.setState(this._createDataTexture(this.props.data));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const { bands, yAxisScale, positiveColor, negativeColor } = this.props;
|
|
117
|
+
model.shaderInputs.setProps({
|
|
118
|
+
horizonLayer: {
|
|
119
|
+
dataTexture: this.state.dataTexture,
|
|
120
|
+
dataTextureSize: this.state.dataTextureSize,
|
|
121
|
+
dataTextureSizeInv: 1.0 / this.state.dataTextureSize,
|
|
122
|
+
dataTextureCount: this.state.dataTextureCount,
|
|
123
|
+
bands,
|
|
124
|
+
bandsInv: 1.0 / bands,
|
|
125
|
+
yAxisScaleInv: 1.0 / yAxisScale,
|
|
126
|
+
positiveColor: positiveColor.map((c) => c / 255),
|
|
127
|
+
negativeColor: negativeColor.map((c) => c / 255)
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
model.draw(this.context.renderPass);
|
|
131
|
+
}
|
|
132
|
+
finalizeState(context) {
|
|
133
|
+
this.state.model?.destroy();
|
|
134
|
+
this.state.dataTexture?.destroy();
|
|
135
|
+
super.finalizeState(context);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=horizon-graph-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"horizon-graph-layer.js","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,KAAK,EAAE,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC1C,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAE1C,OAAO,EAAC,oBAAoB,EAAC,0CAAuC;AAoBpE,MAAM,YAAY,GAAyC;IACzD,UAAU,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAC;IAEzC,KAAK,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAC;IAEjC,aAAa,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAC;IAClD,aAAa,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAC;IAElD,CAAC,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAC;IAC7B,CAAC,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAC;IAC7B,KAAK,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAC;IACnC,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAC;CACrC,CAAC;AAEF,MAAM,OAAO,iBAA8C,SAAQ,KAElE;IACC,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;IACvC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,KAAK,GAKD,EAAE,CAAC;IAEP,eAAe;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC,UAAU,CAAC;YACtB,EAAE;YACF,EAAE;YACF,OAAO,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,UAAmC;QAKpD,MAAM,KAAK,GAAG,UAAU,YAAY,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QAE7F,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QAE3B,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,OAAO,KAAK,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;YACjD,eAAe,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,oEAAoE;QACpE,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEnB,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;gBAChC,IAAI;gBACJ,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,eAAe;gBACtB,MAAM,EAAE,eAAe;gBACvB,OAAO,EAAE;oBACP,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,SAAS;oBACpB,YAAY,EAAE,eAAe;oBAC7B,YAAY,EAAE,eAAe;iBAC9B;aACF,CAAC;YACF,eAAe;YACf,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,YAAY;QACV,MAAM,EAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzC,uDAAuD;QACvD,wDAAwD;QACxD,MAAM,SAAS,GAAG;YAChB,CAAC;YACD,CAAC;YACD,GAAG;YAEH,CAAC,GAAG,KAAK;YACT,CAAC;YACD,GAAG;YAEH,CAAC;YACD,CAAC,GAAG,MAAM;YACV,GAAG;YAEH,CAAC,GAAG,KAAK;YACT,CAAC,GAAG,MAAM;YACV,GAAG;SACJ,CAAC;QAEF,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B,QAAQ,EAAE,gBAAgB;YAC1B,UAAU,EAAE;gBACV,SAAS,EAAE,EAAC,KAAK,EAAE,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC;gBACxD,EAAE,EAAE,EAAC,KAAK,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC;aAC3C;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACpC,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,QAAQ;YACR,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,gBAAgB,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,MAA+E;QACzF,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1B,MAAM,EAAC,WAAW,EAAC,GAAG,MAAM,CAAC;QAE7B,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,WAAW,CAAC,iBAAiB,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,EAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI;QACF,MAAM,EAAC,KAAK,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAExC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,EAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,EAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAErE,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC1B,YAAY,EAAE;gBACZ,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;gBACnC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;gBAC3C,kBAAkB,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe;gBACpD,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB;gBAE7C,KAAK;gBACL,QAAQ,EAAE,GAAG,GAAG,KAAK;gBACrB,aAAa,EAAE,GAAG,GAAG,UAAU;gBAE/B,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChD,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;aACjD;SACF,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,aAAa,CAAC,OAAqB;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QAClC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const _default: "#version 300 es\n#define SHADER_NAME horizon-graph-layer-vertex-shader\n\nin vec3 positions;\nin vec2 uv;\n\nout vec2 v_uv;\n\nvoid main(void) {\n geometry.worldPosition = positions;\n \n vec4 position_commonspace = project_position(vec4(positions.xy, 0.0, 1.0));\n gl_Position = project_common_position_to_clipspace(position_commonspace);\n geometry.position = position_commonspace;\n \n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n \n v_uv = uv;\n}\n";
|
|
2
|
+
export default _default;
|
|
3
|
+
//# sourceMappingURL=horizon-graph-layer.vs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"horizon-graph-layer.vs.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.vs.ts"],"names":[],"mappings":";AAIA,wBAmBE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
export default `#version 300 es
|
|
5
|
+
#define SHADER_NAME horizon-graph-layer-vertex-shader
|
|
6
|
+
|
|
7
|
+
in vec3 positions;
|
|
8
|
+
in vec2 uv;
|
|
9
|
+
|
|
10
|
+
out vec2 v_uv;
|
|
11
|
+
|
|
12
|
+
void main(void) {
|
|
13
|
+
geometry.worldPosition = positions;
|
|
14
|
+
|
|
15
|
+
vec4 position_commonspace = project_position(vec4(positions.xy, 0.0, 1.0));
|
|
16
|
+
gl_Position = project_common_position_to_clipspace(position_commonspace);
|
|
17
|
+
geometry.position = position_commonspace;
|
|
18
|
+
|
|
19
|
+
DECKGL_FILTER_GL_POSITION(gl_Position, geometry);
|
|
20
|
+
|
|
21
|
+
v_uv = uv;
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
//# sourceMappingURL=horizon-graph-layer.vs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"horizon-graph-layer.vs.js","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.vs.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,eAAe;;;;;;;;;;;;;;;;;;;CAmBd,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DefaultProps, LayerProps, Color, LayerDataSource, Accessor } from '@deck.gl/core';
|
|
2
|
+
import { CompositeLayer } from '@deck.gl/core';
|
|
3
|
+
export type _MultiHorizonGraphLayerProps<DataT> = {
|
|
4
|
+
data: LayerDataSource<DataT>;
|
|
5
|
+
getSeries: Accessor<DataT, number[] | Float32Array>;
|
|
6
|
+
getScale: Accessor<DataT, number>;
|
|
7
|
+
bands?: number;
|
|
8
|
+
positiveColor?: Color;
|
|
9
|
+
negativeColor?: Color;
|
|
10
|
+
dividerColor?: Color;
|
|
11
|
+
dividerWidth?: number;
|
|
12
|
+
x?: number;
|
|
13
|
+
y?: number;
|
|
14
|
+
width?: number;
|
|
15
|
+
height?: number;
|
|
16
|
+
};
|
|
17
|
+
export type MultiHorizonGraphLayerProps<DataT = unknown> = _MultiHorizonGraphLayerProps<DataT> & LayerProps;
|
|
18
|
+
export declare class MultiHorizonGraphLayer<DataT = any, ExtraProps extends {} = {}> extends CompositeLayer<ExtraProps & Required<_MultiHorizonGraphLayerProps<DataT>>> {
|
|
19
|
+
static layerName: string;
|
|
20
|
+
static defaultProps: DefaultProps<MultiHorizonGraphLayerProps<unknown>>;
|
|
21
|
+
renderLayers(): any[];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=multi-horizon-graph-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-horizon-graph-layer.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/multi-horizon-graph-layer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAI7C,MAAM,MAAM,4BAA4B,CAAC,KAAK,IAAI;IAChD,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC;IACpD,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAElC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,aAAa,CAAC,EAAE,KAAK,CAAC;IAEtB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,2BAA2B,CAAC,KAAK,GAAG,OAAO,IAAI,4BAA4B,CAAC,KAAK,CAAC,GAC5F,UAAU,CAAC;AAoBb,qBAAa,sBAAsB,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,cAAc,CACjG,UAAU,GAAG,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAC3D;IACC,MAAM,CAAC,SAAS,SAA4B;IAC5C,MAAM,CAAC,YAAY,qDAAgB;IAEnC,YAAY;CA4Gb"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { CompositeLayer } from '@deck.gl/core';
|
|
5
|
+
import { SolidPolygonLayer } from '@deck.gl/layers';
|
|
6
|
+
import { HorizonGraphLayer } from "./horizon-graph-layer.js";
|
|
7
|
+
const defaultProps = {
|
|
8
|
+
getSeries: { type: 'accessor', value: (series) => series.values },
|
|
9
|
+
getScale: { type: 'accessor', value: (series) => series.scale },
|
|
10
|
+
bands: { type: 'number', value: 2 },
|
|
11
|
+
positiveColor: { type: 'color', value: [0, 128, 0] },
|
|
12
|
+
negativeColor: { type: 'color', value: [0, 0, 255] },
|
|
13
|
+
dividerColor: { type: 'color', value: [0, 0, 0] },
|
|
14
|
+
dividerWidth: { type: 'number', value: 2 },
|
|
15
|
+
x: { type: 'number', value: 0 },
|
|
16
|
+
y: { type: 'number', value: 0 },
|
|
17
|
+
width: { type: 'number', value: 800 },
|
|
18
|
+
height: { type: 'number', value: 300 }
|
|
19
|
+
};
|
|
20
|
+
export class MultiHorizonGraphLayer extends CompositeLayer {
|
|
21
|
+
static layerName = 'MultiHorizonGraphLayer';
|
|
22
|
+
static defaultProps = defaultProps;
|
|
23
|
+
renderLayers() {
|
|
24
|
+
const { data, getSeries, getScale, bands, positiveColor, negativeColor, dividerColor, dividerWidth, x, y, width, height } = this.props;
|
|
25
|
+
const seriesCount = data.length;
|
|
26
|
+
if (!seriesCount) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
// Calculate layout dimensions
|
|
30
|
+
const totalDividerSpace = dividerWidth * (seriesCount + 1);
|
|
31
|
+
const availableHeight = height - totalDividerSpace;
|
|
32
|
+
const seriesHeight = availableHeight / seriesCount;
|
|
33
|
+
const layers = [];
|
|
34
|
+
// Create divider rectangles
|
|
35
|
+
if (dividerWidth > 0) {
|
|
36
|
+
const dividerData = [];
|
|
37
|
+
// Top divider
|
|
38
|
+
dividerData.push({
|
|
39
|
+
polygon: [
|
|
40
|
+
[x, y],
|
|
41
|
+
[x + width, y],
|
|
42
|
+
[x + width, y + dividerWidth],
|
|
43
|
+
[x, y + dividerWidth]
|
|
44
|
+
]
|
|
45
|
+
});
|
|
46
|
+
// Dividers between series
|
|
47
|
+
for (let i = 0; i < seriesCount - 1; i++) {
|
|
48
|
+
const dividerY = y + dividerWidth + (i + 1) * seriesHeight + i * dividerWidth;
|
|
49
|
+
dividerData.push({
|
|
50
|
+
polygon: [
|
|
51
|
+
[x, dividerY],
|
|
52
|
+
[x + width, dividerY],
|
|
53
|
+
[x + width, dividerY + dividerWidth],
|
|
54
|
+
[x, dividerY + dividerWidth]
|
|
55
|
+
]
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Bottom divider
|
|
59
|
+
const bottomDividerY = y + height - dividerWidth;
|
|
60
|
+
dividerData.push({
|
|
61
|
+
polygon: [
|
|
62
|
+
[x, bottomDividerY],
|
|
63
|
+
[x + width, bottomDividerY],
|
|
64
|
+
[x + width, y + height],
|
|
65
|
+
[x, y + height]
|
|
66
|
+
]
|
|
67
|
+
});
|
|
68
|
+
layers.push(new SolidPolygonLayer({
|
|
69
|
+
id: `${this.props.id}-dividers`,
|
|
70
|
+
data: dividerData,
|
|
71
|
+
getPolygon: (d) => d.polygon,
|
|
72
|
+
getFillColor: dividerColor,
|
|
73
|
+
pickable: false
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
// Create horizon graph layers for each series
|
|
77
|
+
data.forEach((series, index) => {
|
|
78
|
+
const seriesData = getSeries(series);
|
|
79
|
+
if (!seriesData || seriesData.length === 0) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const seriesY = y + dividerWidth + index * (seriesHeight + dividerWidth);
|
|
83
|
+
const yAxisScale = getScale(series);
|
|
84
|
+
layers.push(new HorizonGraphLayer({
|
|
85
|
+
id: `${this.props.id}-series-${index}`,
|
|
86
|
+
data: seriesData,
|
|
87
|
+
yAxisScale,
|
|
88
|
+
bands,
|
|
89
|
+
positiveColor,
|
|
90
|
+
negativeColor,
|
|
91
|
+
x,
|
|
92
|
+
y: seriesY,
|
|
93
|
+
width,
|
|
94
|
+
height: seriesHeight
|
|
95
|
+
}));
|
|
96
|
+
});
|
|
97
|
+
return layers;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=multi-horizon-graph-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-horizon-graph-layer.js","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/multi-horizon-graph-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { CompositeLayer, type CompositeLayerProps, type UpdateParameters } from '@deck.gl/core';
|
|
2
|
+
import { LineLayer, TextLayer } from '@deck.gl/layers';
|
|
3
|
+
export type TimeAxisLayerProps = CompositeLayerProps & {
|
|
4
|
+
unit: 'timestamp' | 'milliseconds';
|
|
5
|
+
/** Start time in milliseconds since epoch */
|
|
6
|
+
startTimeMs: number;
|
|
7
|
+
/** End time in milliseconds since epoch */
|
|
8
|
+
endTimeMs: number;
|
|
9
|
+
/** Optional: Number of tick marks (default: 5) */
|
|
10
|
+
tickCount?: number;
|
|
11
|
+
/** Optional: Y-coordinate for the axis line (default: 0) */
|
|
12
|
+
y?: number;
|
|
13
|
+
/** Optional: RGBA color for axis and ticks (default: [0, 0, 0, 255]) */
|
|
14
|
+
color?: [number, number, number, number];
|
|
15
|
+
/** Optional: Bounds for the axis line (default: viewport bounds) */
|
|
16
|
+
bounds?: [number, number, number, number];
|
|
17
|
+
};
|
|
18
|
+
export declare class TimeAxisLayer extends CompositeLayer<TimeAxisLayerProps> {
|
|
19
|
+
static layerName: string;
|
|
20
|
+
static defaultProps: Required<Omit<TimeAxisLayerProps, keyof CompositeLayerProps>>;
|
|
21
|
+
shouldUpdateState(params: UpdateParameters<TimeAxisLayer>): boolean;
|
|
22
|
+
renderLayers(): (LineLayer<any, {
|
|
23
|
+
id: "axis-line";
|
|
24
|
+
data: {
|
|
25
|
+
sourcePosition: number[];
|
|
26
|
+
targetPosition: number[];
|
|
27
|
+
}[];
|
|
28
|
+
getSourcePosition: (d: any) => any;
|
|
29
|
+
getTargetPosition: (d: any) => any;
|
|
30
|
+
getColor: [number, number, number, number];
|
|
31
|
+
getWidth: 2;
|
|
32
|
+
}> | LineLayer<any, {
|
|
33
|
+
id: "tick-marks";
|
|
34
|
+
data: {
|
|
35
|
+
sourcePosition: any[];
|
|
36
|
+
targetPosition: any[];
|
|
37
|
+
}[];
|
|
38
|
+
getSourcePosition: (d: any) => any;
|
|
39
|
+
getTargetPosition: (d: any) => any;
|
|
40
|
+
getColor: [number, number, number, number];
|
|
41
|
+
getWidth: 1;
|
|
42
|
+
}> | TextLayer<any, {
|
|
43
|
+
id: "tick-labels";
|
|
44
|
+
data: {
|
|
45
|
+
position: any[];
|
|
46
|
+
text: string;
|
|
47
|
+
}[];
|
|
48
|
+
getPosition: (d: any) => any;
|
|
49
|
+
getText: (d: any) => any;
|
|
50
|
+
getSize: 12;
|
|
51
|
+
getColor: [number, number, number, number];
|
|
52
|
+
getTextAnchor: "middle";
|
|
53
|
+
getAlignmentBaseline: "top";
|
|
54
|
+
}>)[];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=time-axis-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-axis-layer.d.ts","sourceRoot":"","sources":["../../src/layers/time-axis-layer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAKrD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG;IACrD,IAAI,EAAE,WAAW,GAAG,cAAc,CAAC;IACnC,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C,CAAC;AAEF,qBAAa,aAAc,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IACnE,OAAgB,SAAS,SAAmB;IAC5C,OAAgB,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,mBAAmB,CAAC,CAAC,CAQzF;IAGO,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,aAAa,CAAC,GAAG,OAAO;IAInE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DtB"}
|