@fscharter/flowmap-layers 8.0.2-fsc.1

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.
Files changed (63) hide show
  1. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.d.ts +76 -0
  2. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.d.ts.map +1 -0
  3. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.js +133 -0
  4. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.d.ts +3 -0
  5. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.d.ts.map +1 -0
  6. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.js +25 -0
  7. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.d.ts +3 -0
  8. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.d.ts.map +1 -0
  9. package/dist/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.js +79 -0
  10. package/dist/AnimatedFlowLinesLayer/index.d.ts +3 -0
  11. package/dist/AnimatedFlowLinesLayer/index.d.ts.map +1 -0
  12. package/dist/AnimatedFlowLinesLayer/index.js +8 -0
  13. package/dist/FlowCirclesLayer/FlowCirclesLayer.d.ts +59 -0
  14. package/dist/FlowCirclesLayer/FlowCirclesLayer.d.ts.map +1 -0
  15. package/dist/FlowCirclesLayer/FlowCirclesLayer.js +106 -0
  16. package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts +3 -0
  17. package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts.map +1 -0
  18. package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.js +65 -0
  19. package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts +3 -0
  20. package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts.map +1 -0
  21. package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.js +51 -0
  22. package/dist/FlowCirclesLayer/index.d.ts +3 -0
  23. package/dist/FlowCirclesLayer/index.d.ts.map +1 -0
  24. package/dist/FlowCirclesLayer/index.js +8 -0
  25. package/dist/FlowLinesLayer/FlowLinesLayer.d.ts +64 -0
  26. package/dist/FlowLinesLayer/FlowLinesLayer.d.ts.map +1 -0
  27. package/dist/FlowLinesLayer/FlowLinesLayer.js +188 -0
  28. package/dist/FlowLinesLayer/FlowLinesLayerFragment.glsl.d.ts +3 -0
  29. package/dist/FlowLinesLayer/FlowLinesLayerFragment.glsl.d.ts.map +1 -0
  30. package/dist/FlowLinesLayer/FlowLinesLayerFragment.glsl.js +24 -0
  31. package/dist/FlowLinesLayer/FlowLinesLayerVertex.glsl.d.ts +3 -0
  32. package/dist/FlowLinesLayer/FlowLinesLayerVertex.glsl.d.ts.map +1 -0
  33. package/dist/FlowLinesLayer/FlowLinesLayerVertex.glsl.js +86 -0
  34. package/dist/FlowLinesLayer/index.d.ts +3 -0
  35. package/dist/FlowLinesLayer/index.d.ts.map +1 -0
  36. package/dist/FlowLinesLayer/index.js +8 -0
  37. package/dist/FlowmapLayer.d.ts +87 -0
  38. package/dist/FlowmapLayer.d.ts.map +1 -0
  39. package/dist/FlowmapLayer.js +434 -0
  40. package/dist/index.d.ts +7 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +11 -0
  43. package/dist/types.d.ts +36 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +25 -0
  46. package/package.json +29 -0
  47. package/src/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.ts +177 -0
  48. package/src/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.ts +25 -0
  49. package/src/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.ts +78 -0
  50. package/src/AnimatedFlowLinesLayer/index.ts +9 -0
  51. package/src/FlowCirclesLayer/FlowCirclesLayer.ts +138 -0
  52. package/src/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.ts +64 -0
  53. package/src/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.ts +50 -0
  54. package/src/FlowCirclesLayer/index.ts +9 -0
  55. package/src/FlowLinesLayer/FlowLinesLayer.ts +232 -0
  56. package/src/FlowLinesLayer/FlowLinesLayerFragment.glsl.ts +23 -0
  57. package/src/FlowLinesLayer/FlowLinesLayerVertex.glsl.ts +85 -0
  58. package/src/FlowLinesLayer/index.ts +9 -0
  59. package/src/FlowmapLayer.ts +587 -0
  60. package/src/index.ts +13 -0
  61. package/src/types.ts +80 -0
  62. package/tsconfig.json +11 -0
  63. package/typings.d.ts +4 -0
@@ -0,0 +1,76 @@
1
+ import { Layer } from '@deck.gl/core';
2
+ import { FlowLinesLayerAttributes, RGBA } from '@flowmap.gl/data';
3
+ import { LayerProps } from '../types';
4
+ export interface Props<F> extends LayerProps {
5
+ id: string;
6
+ opacity?: number;
7
+ pickable?: boolean;
8
+ updateTriggers?: {
9
+ [key: string]: Record<string, unknown>;
10
+ };
11
+ data: F[] | FlowLinesLayerAttributes;
12
+ drawOutline: boolean;
13
+ outlineColor?: RGBA;
14
+ outlineThickness?: number;
15
+ currentTime?: number;
16
+ thicknessUnit?: number;
17
+ animationTailLength?: number;
18
+ getSourcePosition?: (d: F) => [number, number];
19
+ getTargetPosition?: (d: F) => [number, number];
20
+ getStaggering?: (d: F, info: AccessorObjectInfo) => number;
21
+ getPickable?: (d: F, { index }: {
22
+ index: number;
23
+ }) => number;
24
+ getColor?: (d: F) => RGBA;
25
+ getThickness?: (d: F) => number;
26
+ getEndpointOffsets?: (d: F) => [number, number];
27
+ }
28
+ export interface AccessorObjectInfo {
29
+ index: number;
30
+ data: any;
31
+ target: any;
32
+ }
33
+ export default class AnimatedFlowLinesLayer<F> extends Layer {
34
+ static defaultProps: {
35
+ currentTime: number;
36
+ animationTailLength: number;
37
+ getSourcePosition: {
38
+ type: string;
39
+ value: (d: any) => number[];
40
+ };
41
+ getTargetPosition: {
42
+ type: string;
43
+ value: (d: any) => number[];
44
+ };
45
+ getPickable: {
46
+ type: string;
47
+ value: (d: any) => number;
48
+ };
49
+ getStaggering: {
50
+ type: string;
51
+ value: (d: any, { index }: {
52
+ index: number;
53
+ }) => number;
54
+ };
55
+ getColor: {
56
+ type: string;
57
+ value: RGBA;
58
+ };
59
+ getThickness: {
60
+ type: string;
61
+ value: number;
62
+ };
63
+ thicknessUnit: number;
64
+ parameters: {
65
+ depthTest: boolean;
66
+ };
67
+ };
68
+ constructor(props: Props<F>);
69
+ getShaders(): Record<string, unknown>;
70
+ initializeState(): void;
71
+ getNeedsRedraw(): boolean;
72
+ updateState({ props, oldProps, changeFlags }: Record<string, any>): void;
73
+ draw({ uniforms }: Record<string, any>): void;
74
+ _getModel(gl: WebGLRenderingContext): Record<string, unknown>;
75
+ }
76
+ //# sourceMappingURL=AnimatedFlowLinesLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimatedFlowLinesLayer.d.ts","sourceRoot":"","sources":["../../src/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,KAAK,EAAqB,MAAM,eAAe,CAAC;AAKxD,OAAO,EAAC,wBAAwB,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,MAAM,WAAW,KAAK,CAAC,CAAC,CAAE,SAAQ,UAAU;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,EAAE,GAAG,wBAAwB,CAAC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,KAAK,MAAM,CAAC;IAC3D,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC,KAAK,EAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,KAAK,MAAM,CAAC;IACzD,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAGD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,GAAG,CAAC;CACb;AAOD,MAAM,CAAC,OAAO,OAAO,sBAAsB,CAAC,CAAC,CAAE,SAAQ,KAAK;IAC1D,MAAM,CAAC,YAAY;;;;;uBAGgC,GAAG;;;;uBACH,GAAG;;;;uBACT,GAAG;;;;uBAGjC,GAAG,aAAW;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAC;;;;;;;;;;;;;;MAQ1C;gBAEU,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAI3B,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASrC,eAAe,IAAI,IAAI;IA4CvB,cAAc,IAAI,OAAO;IAIzB,WAAW,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAWtE,IAAI,CAAC,EAAC,QAAQ,EAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAe3C,SAAS,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAwB9D"}
@@ -0,0 +1,133 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Layer, picking, project32 } from '@deck.gl/core';
7
+ import GL from '@luma.gl/constants';
8
+ import { Geometry, Model } from '@luma.gl/core';
9
+ import FragmentShader from './AnimatedFlowLinesLayerFragment.glsl';
10
+ import VertexShader from './AnimatedFlowLinesLayerVertex.glsl';
11
+ const DEFAULT_COLOR = [0, 132, 193, 255];
12
+ const loopLength = 1800;
13
+ const animationSpeed = 20;
14
+ const loopTime = loopLength / animationSpeed;
15
+ class AnimatedFlowLinesLayer extends Layer {
16
+ constructor(props) {
17
+ super(props);
18
+ }
19
+ getShaders() {
20
+ return super.getShaders({
21
+ vs: VertexShader,
22
+ fs: FragmentShader,
23
+ modules: [project32, picking],
24
+ shaderCache: this.context.shaderCache,
25
+ });
26
+ }
27
+ initializeState() {
28
+ const attributeManager = this.getAttributeManager();
29
+ /* eslint-disable max-len */
30
+ attributeManager.addInstanced({
31
+ instanceSourcePositions: {
32
+ size: 3,
33
+ type: GL.DOUBLE,
34
+ transition: true,
35
+ accessor: 'getSourcePosition',
36
+ },
37
+ instanceTargetPositions: {
38
+ size: 3,
39
+ type: GL.DOUBLE,
40
+ transition: true,
41
+ accessor: 'getTargetPosition',
42
+ },
43
+ instanceColors: {
44
+ size: 4,
45
+ type: GL.UNSIGNED_BYTE,
46
+ transition: true,
47
+ accessor: 'getColor',
48
+ defaultValue: [0, 0, 0, 255],
49
+ },
50
+ instanceWidths: {
51
+ size: 1,
52
+ transition: true,
53
+ accessor: 'getThickness',
54
+ defaultValue: 1,
55
+ },
56
+ instanceStaggering: {
57
+ accessor: 'getStaggering',
58
+ size: 1,
59
+ transition: false,
60
+ },
61
+ instancePickable: {
62
+ accessor: 'getPickable',
63
+ size: 1,
64
+ transition: false,
65
+ },
66
+ });
67
+ /* eslint-enable max-len */
68
+ }
69
+ getNeedsRedraw() {
70
+ return true;
71
+ }
72
+ updateState({ props, oldProps, changeFlags }) {
73
+ super.updateState({ props, oldProps, changeFlags });
74
+ if (changeFlags.extensionsChanged) {
75
+ const { gl } = this.context;
76
+ this.state.model?.delete();
77
+ this.state.model = this._getModel(gl);
78
+ this.getAttributeManager().invalidateAll();
79
+ }
80
+ }
81
+ draw({ uniforms }) {
82
+ const { thicknessUnit, animationTailLength } = this.props;
83
+ const timestamp = Date.now() / 1000;
84
+ const animationTime = ((timestamp % loopTime) / loopTime) * loopLength;
85
+ this.state.model
86
+ .setUniforms({
87
+ ...uniforms,
88
+ thicknessUnit: thicknessUnit * 4,
89
+ animationTailLength,
90
+ currentTime: animationTime,
91
+ })
92
+ .draw();
93
+ }
94
+ _getModel(gl) {
95
+ /*
96
+ * (0, -1)-------------_(1, -1)
97
+ * | _,-" |
98
+ * o _,-" o
99
+ * | _,-" |
100
+ * (0, 1)"-------------(1, 1)
101
+ */
102
+ const positions = [0, -1, 0, 0, 1, 0, 1, -1, 0, 1, 1, 0];
103
+ return new Model(gl, Object.assign({}, this.getShaders(), {
104
+ id: this.props.id,
105
+ geometry: new Geometry({
106
+ drawMode: GL.TRIANGLE_STRIP,
107
+ attributes: {
108
+ positions: new Float32Array(positions),
109
+ },
110
+ }),
111
+ isInstanced: true,
112
+ }));
113
+ }
114
+ }
115
+ AnimatedFlowLinesLayer.defaultProps = {
116
+ currentTime: 0,
117
+ animationTailLength: 0.7,
118
+ getSourcePosition: { type: 'accessor', value: (d) => [0, 0] },
119
+ getTargetPosition: { type: 'accessor', value: (d) => [0, 0] },
120
+ getPickable: { type: 'accessor', value: (d) => 1.0 },
121
+ getStaggering: {
122
+ type: 'accessor',
123
+ value: (d, { index }) => Math.random(),
124
+ },
125
+ getColor: { type: 'accessor', value: DEFAULT_COLOR },
126
+ getThickness: { type: 'accessor', value: 1 },
127
+ thicknessUnit: 15 * 2,
128
+ parameters: {
129
+ depthTest: false,
130
+ },
131
+ };
132
+ export default AnimatedFlowLinesLayer;
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0ZWRGbG93TGluZXNMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BbmltYXRlZEZsb3dMaW5lc0xheWVyL0FuaW1hdGVkRmxvd0xpbmVzTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwQyxPQUFPLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLGNBQWMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLFlBQVksTUFBTSxxQ0FBcUMsQ0FBQztBQStCL0QsTUFBTSxhQUFhLEdBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sUUFBUSxHQUFHLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFFN0MsTUFBcUIsc0JBQTBCLFNBQVEsS0FBSztJQW1CMUQsWUFBWSxLQUFlO1FBQ3pCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3RCLEVBQUUsRUFBRSxZQUFZO1lBQ2hCLEVBQUUsRUFBRSxjQUFjO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7WUFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztTQUN0QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFcEQs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QUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDO0lBQzFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNyQixVQUFVLEVBQUU7UUFDVixTQUFTLEVBQUUsS0FBSztLQUNqQjtDQUNGLENBQUM7ZUFqQmlCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIEZsb3dtYXAuZ2wgY29udHJpYnV0b3JzXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBUZXJhbHl0aWNzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7TGF5ZXIsIHBpY2tpbmcsIHByb2plY3QzMn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQgR0wgZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7R2VvbWV0cnksIE1vZGVsfSBmcm9tICdAbHVtYS5nbC9jb3JlJztcbmltcG9ydCBGcmFnbWVudFNoYWRlciBmcm9tICcuL0FuaW1hdGVkRmxvd0xpbmVzTGF5ZXJGcmFnbWVudC5nbHNsJztcbmltcG9ydCBWZXJ0ZXhTaGFkZXIgZnJvbSAnLi9BbmltYXRlZEZsb3dMaW5lc0xheWVyVmVydGV4Lmdsc2wnO1xuaW1wb3J0IHtGbG93TGluZXNMYXllckF0dHJpYnV0ZXMsIFJHQkF9IGZyb20gJ0BmbG93bWFwLmdsL2RhdGEnO1xuaW1wb3J0IHtMYXllclByb3BzfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIFByb3BzPEY+IGV4dGVuZHMgTGF5ZXJQcm9wcyB7XG4gIGlkOiBzdHJpbmc7XG4gIG9wYWNpdHk/OiBudW1iZXI7XG4gIHBpY2thYmxlPzogYm9vbGVhbjtcbiAgdXBkYXRlVHJpZ2dlcnM/OiB7W2tleTogc3RyaW5nXTogUmVjb3JkPHN0cmluZywgdW5rbm93bj59O1xuICBkYXRhOiBGW10gfCBGbG93TGluZXNMYXllckF0dHJpYnV0ZXM7XG4gIGRyYXdPdXRsaW5lOiBib29sZWFuO1xuICBvdXRsaW5lQ29sb3I/OiBSR0JBO1xuICBvdXRsaW5lVGhpY2tuZXNzPzogbnVtYmVyO1xuICBjdXJyZW50VGltZT86IG51bWJlcjtcbiAgdGhpY2tuZXNzVW5pdD86IG51bWJlcjtcbiAgYW5pbWF0aW9uVGFpbExlbmd0aD86IG51bWJlcjtcbiAgZ2V0U291cmNlUG9zaXRpb24/OiAoZDogRikgPT4gW251bWJlciwgbnVtYmVyXTtcbiAgZ2V0VGFyZ2V0UG9zaXRpb24/OiAoZDogRikgPT4gW251bWJlciwgbnVtYmVyXTtcbiAgZ2V0U3RhZ2dlcmluZz86IChkOiBGLCBpbmZvOiBBY2Nlc3Nvck9iamVjdEluZm8pID0+IG51bWJlcjtcbiAgZ2V0UGlja2FibGU/OiAoZDogRiwge2luZGV4fToge2luZGV4OiBudW1iZXJ9KSA9PiBudW1iZXI7IC8vID49IDEuMCAtPiB0cnVlXG4gIGdldENvbG9yPzogKGQ6IEYpID0+IFJHQkE7XG4gIGdldFRoaWNrbmVzcz86IChkOiBGKSA9PiBudW1iZXI7XG4gIGdldEVuZHBvaW50T2Zmc2V0cz86IChkOiBGKSA9PiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vLyBodHRwczovL2RlY2suZ2wvIy9kb2N1bWVudGF0aW9uL2RldmVsb3Blci1ndWlkZS91c2luZy1sYXllcnM/c2VjdGlvbj1hY2Nlc3NvcnNcbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzb3JPYmplY3RJbmZvIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgZGF0YTogYW55O1xuICB0YXJnZXQ6IGFueTtcbn1cblxuY29uc3QgREVGQVVMVF9DT0xPUjogUkdCQSA9IFswLCAxMzIsIDE5MywgMjU1XTtcbmNvbnN0IGxvb3BMZW5ndGggPSAxODAwO1xuY29uc3QgYW5pbWF0aW9uU3BlZWQgPSAyMDtcbmNvbnN0IGxvb3BUaW1lID0gbG9vcExlbmd0aCAvIGFuaW1hdGlvblNwZWVkO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmltYXRlZEZsb3dMaW5lc0xheWVyPEY+IGV4dGVuZHMgTGF5ZXIge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgIGFuaW1hdGlvblRhaWxMZW5ndGg6IDAuNyxcbiAgICBnZXRTb3VyY2VQb3NpdGlvbjoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiAoZDogYW55KSA9PiBbMCwgMF19LFxuICAgIGdldFRhcmdldFBvc2l0aW9uOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IChkOiBhbnkpID0+IFswLCAwXX0sXG4gICAgZ2V0UGlja2FibGU6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogKGQ6IGFueSkgPT4gMS4wfSxcbiAgICBnZXRTdGFnZ2VyaW5nOiB7XG4gICAgICB0eXBlOiAnYWNjZXNzb3InLFxuICAgICAgdmFsdWU6IChkOiBhbnksIHtpbmRleH06IHtpbmRleDogbnVtYmVyfSkgPT4gTWF0aC5yYW5kb20oKSxcbiAgICB9LFxuICAgIGdldENvbG9yOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IERFRkFVTFRfQ09MT1J9LFxuICAgIGdldFRoaWNrbmVzczoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiAxfSxcbiAgICB0aGlja25lc3NVbml0OiAxNSAqIDIsXG4gICAgcGFyYW1ldGVyczoge1xuICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxGPikge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiBzdXBlci5nZXRTaGFkZXJzKHtcbiAgICAgIHZzOiBWZXJ0ZXhTaGFkZXIsXG4gICAgICBmczogRnJhZ21lbnRTaGFkZXIsXG4gICAgICBtb2R1bGVzOiBbcHJvamVjdDMyLCBwaWNraW5nXSxcbiAgICAgIHNoYWRlckNhY2hlOiB0aGlzLmNvbnRleHQuc2hhZGVyQ2FjaGUsXG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpO1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuICAgIGF0dHJpYnV0ZU1hbmFnZXIuYWRkSW5zdGFuY2VkKHtcbiAgICAgIGluc3RhbmNlU291cmNlUG9zaXRpb25zOiB7XG4gICAgICAgIHNpemU6IDMsXG4gICAgICAgIHR5cGU6IEdMLkRPVUJMRSxcbiAgICAgICAgdHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRTb3VyY2VQb3NpdGlvbicsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VUYXJnZXRQb3NpdGlvbnM6IHtcbiAgICAgICAgc2l6ZTogMyxcbiAgICAgICAgdHlwZTogR0wuRE9VQkxFLFxuICAgICAgICB0cmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFRhcmdldFBvc2l0aW9uJyxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZUNvbG9yczoge1xuICAgICAgICBzaXplOiA0LFxuICAgICAgICB0eXBlOiBHTC5VTlNJR05FRF9CWVRFLFxuICAgICAgICB0cmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldENvbG9yJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMCwgMCwgMCwgMjU1XSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVdpZHRoczoge1xuICAgICAgICBzaXplOiAxLFxuICAgICAgICB0cmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFRoaWNrbmVzcycsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVN0YWdnZXJpbmc6IHtcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRTdGFnZ2VyaW5nJyxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgdHJhbnNpdGlvbjogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VQaWNrYWJsZToge1xuICAgICAgICBhY2Nlc3NvcjogJ2dldFBpY2thYmxlJyxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgdHJhbnNpdGlvbjogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuICB9XG5cbiAgZ2V0TmVlZHNSZWRyYXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc306IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVTdGF0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30pO1xuXG4gICAgaWYgKGNoYW5nZUZsYWdzLmV4dGVuc2lvbnNDaGFuZ2VkKSB7XG4gICAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgdGhpcy5zdGF0ZS5tb2RlbD8uZGVsZXRlKCk7XG4gICAgICB0aGlzLnN0YXRlLm1vZGVsID0gdGhpcy5fZ2V0TW9kZWwoZ2wpO1xuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCkuaW52YWxpZGF0ZUFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIGRyYXcoe3VuaWZvcm1zfTogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIGNvbnN0IHt0aGlja25lc3NVbml0LCBhbmltYXRpb25UYWlsTGVuZ3RofSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgY29uc3QgYW5pbWF0aW9uVGltZSA9ICgodGltZXN0YW1wICUgbG9vcFRpbWUpIC8gbG9vcFRpbWUpICogbG9vcExlbmd0aDtcblxuICAgIHRoaXMuc3RhdGUubW9kZWxcbiAgICAgIC5zZXRVbmlmb3Jtcyh7XG4gICAgICAgIC4uLnVuaWZvcm1zLFxuICAgICAgICB0aGlja25lc3NVbml0OiB0aGlja25lc3NVbml0ICogNCxcbiAgICAgICAgYW5pbWF0aW9uVGFpbExlbmd0aCxcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvblRpbWUsXG4gICAgICB9KVxuICAgICAgLmRyYXcoKTtcbiAgfVxuXG4gIF9nZXRNb2RlbChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIC8qXG4gICAgICogICgwLCAtMSktLS0tLS0tLS0tLS0tXygxLCAtMSlcbiAgICAgKiAgICAgICB8ICAgICAgICAgIF8sLVwiICB8XG4gICAgICogICAgICAgbyAgICAgIF8sLVwiICAgICAgb1xuICAgICAqICAgICAgIHwgIF8sLVwiICAgICAgICAgIHxcbiAgICAgKiAgICgwLCAxKVwiLS0tLS0tLS0tLS0tLSgxLCAxKVxuICAgICAqL1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFswLCAtMSwgMCwgMCwgMSwgMCwgMSwgLTEsIDAsIDEsIDEsIDBdO1xuXG4gICAgcmV0dXJuIG5ldyBNb2RlbChcbiAgICAgIGdsLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRTaGFkZXJzKCksIHtcbiAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgR2VvbWV0cnkoe1xuICAgICAgICAgIGRyYXdNb2RlOiBHTC5UUklBTkdMRV9TVFJJUCxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBwb3NpdGlvbnM6IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25zKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgaXNJbnN0YW5jZWQ6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ declare const _default: "#define SHADER_NAME animated-flow-lines-layer-fragment-shader\n\nprecision highp float;\n\nuniform float animationTailLength;\n\nvarying vec4 vColor;\nvarying float sourceToTarget;\nvarying vec2 uv;\n \nvoid main(void) {\n geometry.uv = uv;\n\n gl_FragColor = vec4(vColor.xyz, vColor.w * smoothstep(1.0 - animationTailLength, 1.0, fract(sourceToTarget)));\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n";
2
+ export default _default;
3
+ //# sourceMappingURL=AnimatedFlowLinesLayerFragment.glsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimatedFlowLinesLayerFragment.glsl.d.ts","sourceRoot":"","sources":["../../src/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.ts"],"names":[],"mappings":";AAMA,wBAkBE"}
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export default `\
7
+ #define SHADER_NAME animated-flow-lines-layer-fragment-shader
8
+
9
+ precision highp float;
10
+
11
+ uniform float animationTailLength;
12
+
13
+ varying vec4 vColor;
14
+ varying float sourceToTarget;
15
+ varying vec2 uv;
16
+
17
+ void main(void) {
18
+ geometry.uv = uv;
19
+
20
+ gl_FragColor = vec4(vColor.xyz, vColor.w * smoothstep(1.0 - animationTailLength, 1.0, fract(sourceToTarget)));
21
+
22
+ DECKGL_FILTER_COLOR(gl_FragColor, geometry);
23
+ }
24
+ `;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0ZWRGbG93TGluZXNMYXllckZyYWdtZW50Lmdsc2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQW5pbWF0ZWRGbG93TGluZXNMYXllci9BbmltYXRlZEZsb3dMaW5lc0xheWVyRnJhZ21lbnQuZ2xzbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsZUFBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSBGbG93bWFwLmdsIGNvbnRyaWJ1dG9yc1xuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAgVGVyYWx5dGljc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgYW5pbWF0ZWQtZmxvdy1saW5lcy1sYXllci1mcmFnbWVudC1zaGFkZXJcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG51bmlmb3JtIGZsb2F0IGFuaW1hdGlvblRhaWxMZW5ndGg7XG5cbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG52YXJ5aW5nIGZsb2F0IHNvdXJjZVRvVGFyZ2V0O1xudmFyeWluZyB2ZWMyIHV2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbnZvaWQgbWFpbih2b2lkKSB7XG4gIGdlb21ldHJ5LnV2ID0gdXY7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2Q29sb3IueHl6LCB2Q29sb3IudyAqIHNtb290aHN0ZXAoMS4wIC0gYW5pbWF0aW9uVGFpbExlbmd0aCwgMS4wLCBmcmFjdChzb3VyY2VUb1RhcmdldCkpKTtcblxuICBERUNLR0xfRklMVEVSX0NPTE9SKGdsX0ZyYWdDb2xvciwgZ2VvbWV0cnkpO1xufVxuYDtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ declare const _default: "#define SHADER_NAME animated-flow-lines-layer-vertex-shader\n#define SPEED 0.015\n#define NUM_PARTS 5.0\n\nattribute vec3 positions;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec3 instanceSourcePositions64Low;\nattribute vec3 instanceTargetPositions64Low;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute float instanceWidths;\nattribute float instancePickable;\nattribute float instanceStaggering;\n\nuniform float opacity;\nuniform float currentTime;\nuniform float thicknessUnit;\n \nvarying vec4 vColor;\nvarying float sourceToTarget;\nvarying vec2 uv;\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n return dir_screenspace * offset_direction * width / 2.0;\n}\n\nvoid main(void) {\n geometry.worldPosition = instanceSourcePositions;\n geometry.worldPositionAlt = instanceTargetPositions;\n\n // Position\n vec4 source_commonspace;\n vec4 target_commonspace;\n vec4 source = project_position_to_clipspace(instanceSourcePositions, instanceSourcePositions64Low, vec3(0.), source_commonspace);\n vec4 target = project_position_to_clipspace(instanceTargetPositions, instanceTargetPositions64Low, vec3(0.), target_commonspace);\n\n float widthPixels = instanceWidths * thicknessUnit;\n \n \n // linear interpolation of source & target to pick right coord\n float segmentIndex = positions.x;\n vec4 p = mix(source, target, segmentIndex);\n geometry.position = mix(source_commonspace, target_commonspace, segmentIndex);\n uv = positions.xy;\n geometry.uv = uv;\n if (instancePickable > 0.5) {\n geometry.pickingColor = instancePickingColors;\n }\n \n // extrude\n vec3 offset = vec3(\n getExtrusionOffset(target.xy - source.xy, positions.y, widthPixels),\n 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = p + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Color\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n DECKGL_FILTER_COLOR(vColor, geometry);\n\n sourceToTarget = positions.x * length(source - target) * NUM_PARTS - currentTime * SPEED + instanceStaggering; \n}\n";
2
+ export default _default;
3
+ //# sourceMappingURL=AnimatedFlowLinesLayerVertex.glsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimatedFlowLinesLayerVertex.glsl.d.ts","sourceRoot":"","sources":["../../src/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.ts"],"names":[],"mappings":";AAKA,wBAwEE"}
@@ -0,0 +1,79 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export default `\
7
+ #define SHADER_NAME animated-flow-lines-layer-vertex-shader
8
+ #define SPEED 0.015
9
+ #define NUM_PARTS 5.0
10
+
11
+ attribute vec3 positions;
12
+ attribute vec3 instanceSourcePositions;
13
+ attribute vec3 instanceTargetPositions;
14
+ attribute vec3 instanceSourcePositions64Low;
15
+ attribute vec3 instanceTargetPositions64Low;
16
+ attribute vec4 instanceColors;
17
+ attribute vec3 instancePickingColors;
18
+ attribute float instanceWidths;
19
+ attribute float instancePickable;
20
+ attribute float instanceStaggering;
21
+
22
+ uniform float opacity;
23
+ uniform float currentTime;
24
+ uniform float thicknessUnit;
25
+
26
+ varying vec4 vColor;
27
+ varying float sourceToTarget;
28
+ varying vec2 uv;
29
+
30
+ // offset vector by strokeWidth pixels
31
+ // offset_direction is -1 (left) or 1 (right)
32
+ vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {
33
+ // normalized direction of the line
34
+ vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);
35
+ // rotate by 90 degrees
36
+ dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
37
+
38
+ return dir_screenspace * offset_direction * width / 2.0;
39
+ }
40
+
41
+ void main(void) {
42
+ geometry.worldPosition = instanceSourcePositions;
43
+ geometry.worldPositionAlt = instanceTargetPositions;
44
+
45
+ // Position
46
+ vec4 source_commonspace;
47
+ vec4 target_commonspace;
48
+ vec4 source = project_position_to_clipspace(instanceSourcePositions, instanceSourcePositions64Low, vec3(0.), source_commonspace);
49
+ vec4 target = project_position_to_clipspace(instanceTargetPositions, instanceTargetPositions64Low, vec3(0.), target_commonspace);
50
+
51
+ float widthPixels = instanceWidths * thicknessUnit;
52
+
53
+
54
+ // linear interpolation of source & target to pick right coord
55
+ float segmentIndex = positions.x;
56
+ vec4 p = mix(source, target, segmentIndex);
57
+ geometry.position = mix(source_commonspace, target_commonspace, segmentIndex);
58
+ uv = positions.xy;
59
+ geometry.uv = uv;
60
+ if (instancePickable > 0.5) {
61
+ geometry.pickingColor = instancePickingColors;
62
+ }
63
+
64
+ // extrude
65
+ vec3 offset = vec3(
66
+ getExtrusionOffset(target.xy - source.xy, positions.y, widthPixels),
67
+ 0.0);
68
+ DECKGL_FILTER_SIZE(offset, geometry);
69
+ gl_Position = p + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);
70
+ DECKGL_FILTER_GL_POSITION(gl_Position, geometry);
71
+
72
+ // Color
73
+ vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;
74
+ DECKGL_FILTER_COLOR(vColor, geometry);
75
+
76
+ sourceToTarget = positions.x * length(source - target) * NUM_PARTS - currentTime * SPEED + instanceStaggering;
77
+ }
78
+ `;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0ZWRGbG93TGluZXNMYXllclZlcnRleC5nbHNsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0FuaW1hdGVkRmxvd0xpbmVzTGF5ZXIvQW5pbWF0ZWRGbG93TGluZXNMYXllclZlcnRleC5nbHNsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxlQUFlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3RWQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIEZsb3dtYXAuZ2wgY29udHJpYnV0b3JzXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBUZXJhbHl0aWNzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgYW5pbWF0ZWQtZmxvdy1saW5lcy1sYXllci12ZXJ0ZXgtc2hhZGVyXG4jZGVmaW5lIFNQRUVEIDAuMDE1XG4jZGVmaW5lIE5VTV9QQVJUUyA1LjBcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb25zO1xuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnM7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztcbmF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlU291cmNlUG9zaXRpb25zNjRMb3c7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVRhcmdldFBvc2l0aW9uczY0TG93O1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VXaWR0aHM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VQaWNrYWJsZTtcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZVN0YWdnZXJpbmc7XG5cbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgY3VycmVudFRpbWU7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzc1VuaXQ7XG4gICAgXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xudmFyeWluZyBmbG9hdCBzb3VyY2VUb1RhcmdldDtcbnZhcnlpbmcgdmVjMiB1djtcblxuLy8gb2Zmc2V0IHZlY3RvciBieSBzdHJva2VXaWR0aCBwaXhlbHNcbi8vIG9mZnNldF9kaXJlY3Rpb24gaXMgLTEgKGxlZnQpIG9yIDEgKHJpZ2h0KVxudmVjMiBnZXRFeHRydXNpb25PZmZzZXQodmVjMiBsaW5lX2NsaXBzcGFjZSwgZmxvYXQgb2Zmc2V0X2RpcmVjdGlvbiwgZmxvYXQgd2lkdGgpIHtcbiAgLy8gbm9ybWFsaXplZCBkaXJlY3Rpb24gb2YgdGhlIGxpbmVcbiAgdmVjMiBkaXJfc2NyZWVuc3BhY2UgPSBub3JtYWxpemUobGluZV9jbGlwc3BhY2UgKiBwcm9qZWN0X3VWaWV3cG9ydFNpemUpO1xuICAvLyByb3RhdGUgYnkgOTAgZGVncmVlc1xuICBkaXJfc2NyZWVuc3BhY2UgPSB2ZWMyKC1kaXJfc2NyZWVuc3BhY2UueSwgZGlyX3NjcmVlbnNwYWNlLngpO1xuXG4gIHJldHVybiBkaXJfc2NyZWVuc3BhY2UgKiBvZmZzZXRfZGlyZWN0aW9uICogd2lkdGggLyAyLjA7XG59XG5cbnZvaWQgbWFpbih2b2lkKSB7XG4gIGdlb21ldHJ5LndvcmxkUG9zaXRpb24gPSBpbnN0YW5jZVNvdXJjZVBvc2l0aW9ucztcbiAgZ2VvbWV0cnkud29ybGRQb3NpdGlvbkFsdCA9IGluc3RhbmNlVGFyZ2V0UG9zaXRpb25zO1xuXG4gIC8vIFBvc2l0aW9uXG4gIHZlYzQgc291cmNlX2NvbW1vbnNwYWNlO1xuICB2ZWM0IHRhcmdldF9jb21tb25zcGFjZTtcbiAgdmVjNCBzb3VyY2UgPSBwcm9qZWN0X3Bvc2l0aW9uX3RvX2NsaXBzcGFjZShpbnN0YW5jZVNvdXJjZVBvc2l0aW9ucywgaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnM2NExvdywgdmVjMygwLiksIHNvdXJjZV9jb21tb25zcGFjZSk7XG4gIHZlYzQgdGFyZ2V0ID0gcHJvamVjdF9wb3NpdGlvbl90b19jbGlwc3BhY2UoaW5zdGFuY2VUYXJnZXRQb3NpdGlvbnMsIGluc3RhbmNlVGFyZ2V0UG9zaXRpb25zNjRMb3csIHZlYzMoMC4pLCB0YXJnZXRfY29tbW9uc3BhY2UpO1xuXG4gIGZsb2F0IHdpZHRoUGl4ZWxzID0gaW5zdGFuY2VXaWR0aHMgKiB0aGlja25lc3NVbml0O1xuICBcbiAgXG4gIC8vIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHNvdXJjZSAmIHRhcmdldCB0byBwaWNrIHJpZ2h0IGNvb3JkXG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IHBvc2l0aW9ucy54O1xuICB2ZWM0IHAgPSBtaXgoc291cmNlLCB0YXJnZXQsIHNlZ21lbnRJbmRleCk7XG4gIGdlb21ldHJ5LnBvc2l0aW9uID0gbWl4KHNvdXJjZV9jb21tb25zcGFjZSwgdGFyZ2V0X2NvbW1vbnNwYWNlLCBzZWdtZW50SW5kZXgpO1xuICB1diA9IHBvc2l0aW9ucy54eTtcbiAgZ2VvbWV0cnkudXYgPSB1djtcbiAgaWYgKGluc3RhbmNlUGlja2FibGUgPiAwLjUpIHtcbiAgICBnZW9tZXRyeS5waWNraW5nQ29sb3IgPSBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG4gIH1cbiAgXG4gIC8vIGV4dHJ1ZGVcbiAgdmVjMyBvZmZzZXQgPSB2ZWMzKFxuICAgIGdldEV4dHJ1c2lvbk9mZnNldCh0YXJnZXQueHkgLSBzb3VyY2UueHksIHBvc2l0aW9ucy55LCB3aWR0aFBpeGVscyksXG4gICAgMC4wKTtcbiAgREVDS0dMX0ZJTFRFUl9TSVpFKG9mZnNldCwgZ2VvbWV0cnkpO1xuICBnbF9Qb3NpdGlvbiA9IHAgKyB2ZWM0KHByb2plY3RfcGl4ZWxfc2l6ZV90b19jbGlwc3BhY2Uob2Zmc2V0Lnh5KSwgMC4wLCAwLjApO1xuICBERUNLR0xfRklMVEVSX0dMX1BPU0lUSU9OKGdsX1Bvc2l0aW9uLCBnZW9tZXRyeSk7XG5cbiAgLy8gQ29sb3JcbiAgdkNvbG9yID0gdmVjNChpbnN0YW5jZUNvbG9ycy5yZ2IsIGluc3RhbmNlQ29sb3JzLmEgKiBvcGFjaXR5KSAvIDI1NS47XG4gIERFQ0tHTF9GSUxURVJfQ09MT1IodkNvbG9yLCBnZW9tZXRyeSk7XG5cbiAgc291cmNlVG9UYXJnZXQgPSBwb3NpdGlvbnMueCAqIGxlbmd0aChzb3VyY2UgLSB0YXJnZXQpICogTlVNX1BBUlRTIC0gY3VycmVudFRpbWUgKiBTUEVFRCArIGluc3RhbmNlU3RhZ2dlcmluZzsgXG59XG5gO1xuIl19
@@ -0,0 +1,3 @@
1
+ import AnimatedFlowLinesLayer from './AnimatedFlowLinesLayer';
2
+ export default AnimatedFlowLinesLayer;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AnimatedFlowLinesLayer/index.ts"],"names":[],"mappings":"AAMA,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import AnimatedFlowLinesLayer from './AnimatedFlowLinesLayer';
7
+ export default AnimatedFlowLinesLayer;
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQW5pbWF0ZWRGbG93TGluZXNMYXllci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxzQkFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxlQUFlLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgRmxvd21hcC5nbCBjb250cmlidXRvcnNcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFRlcmFseXRpY3NcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9BbmltYXRlZEZsb3dMaW5lc0xheWVyJztcblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0ZWRGbG93TGluZXNMYXllcjtcbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { Layer } from '@deck.gl/core';
2
+ import { FlowCirclesLayerAttributes, RGBA } from '@flowmap.gl/data';
3
+ import { LayerProps } from '../types';
4
+ export type FlowCirclesDatum = Record<string, unknown>;
5
+ export interface Props extends LayerProps {
6
+ id: string;
7
+ opacity?: number;
8
+ pickable?: boolean;
9
+ emptyColor?: RGBA;
10
+ outlineEmptyMix?: number;
11
+ getColor?: (d: FlowCirclesDatum) => RGBA;
12
+ getPosition?: (d: FlowCirclesDatum) => [number, number];
13
+ getInRadius?: (d: FlowCirclesDatum) => number;
14
+ getOutRadius?: (d: FlowCirclesDatum) => number;
15
+ data: FlowCirclesDatum[] | FlowCirclesLayerAttributes;
16
+ updateTriggers?: {
17
+ [key: string]: Record<string, unknown>;
18
+ };
19
+ }
20
+ declare class FlowCirclesLayer extends Layer {
21
+ static layerName: string;
22
+ static defaultProps: {
23
+ getColor: {
24
+ type: string;
25
+ value: number[];
26
+ };
27
+ emptyColor: {
28
+ type: string;
29
+ value: number[];
30
+ };
31
+ outlineEmptyMix: {
32
+ type: string;
33
+ value: number;
34
+ };
35
+ getPosition: {
36
+ type: string;
37
+ value: (d: FlowCirclesDatum) => unknown;
38
+ };
39
+ getInRadius: {
40
+ type: string;
41
+ value: number;
42
+ };
43
+ getOutRadius: {
44
+ type: string;
45
+ value: number;
46
+ };
47
+ parameters: {
48
+ depthTest: boolean;
49
+ };
50
+ };
51
+ constructor(props: Props);
52
+ getShaders(): any;
53
+ initializeState(): void;
54
+ updateState({ props, oldProps, changeFlags }: any): void;
55
+ draw({ uniforms }: any): void;
56
+ _getModel(gl: WebGLRenderingContext): any;
57
+ }
58
+ export default FlowCirclesLayer;
59
+ //# sourceMappingURL=FlowCirclesLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowCirclesLayer.d.ts","sourceRoot":"","sources":["../../src/FlowCirclesLayer/FlowCirclesLayer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,KAAK,EAAqB,MAAM,eAAe,CAAC;AAKxD,OAAO,EAAC,0BAA0B,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvD,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC/C,IAAI,EAAE,gBAAgB,EAAE,GAAG,0BAA0B,CAAC;IACtD,cAAc,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC,CAAC;CAC3D;AAMD,cAAM,gBAAiB,SAAQ,KAAK;IAClC,MAAM,CAAC,SAAS,SAAsB;IAEtC,MAAM,CAAC,YAAY;;;;;;;;;;;;;;;uBAI0B,gBAAgB;;;;;;;;;;;;;MAM3D;gBAGU,KAAK,EAAE,KAAK;IAIxB,UAAU;IAQV,eAAe;IA+Bf,WAAW,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAC,EAAE,GAAG;IAY/C,IAAI,CAAC,EAAC,QAAQ,EAAC,EAAE,GAAG;IAWpB,SAAS,CAAC,EAAE,EAAE,qBAAqB;CAmBpC;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,106 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Layer, picking, project32 } from '@deck.gl/core';
7
+ import GL from '@luma.gl/constants';
8
+ import { Geometry, Model } from '@luma.gl/core';
9
+ import FragmentShader from './FlowCirclesLayerFragment.glsl';
10
+ import VertexShader from './FlowCirclesLayerVertex.glsl';
11
+ const DEFAULT_COLOR = [0, 0, 0, 255];
12
+ const DEFAULT_EMPTY_COLOR = [255, 255, 255, 255];
13
+ const DEFAULT_OUTLINE_EMPTY_MIX = 0.4;
14
+ class FlowCirclesLayer extends Layer {
15
+ // props!: Props;
16
+ constructor(props) {
17
+ super(props);
18
+ }
19
+ getShaders() {
20
+ return super.getShaders({
21
+ vs: VertexShader,
22
+ fs: FragmentShader,
23
+ modules: [project32, picking],
24
+ });
25
+ }
26
+ initializeState() {
27
+ this.getAttributeManager().addInstanced({
28
+ instancePositions: {
29
+ size: 3,
30
+ type: GL.DOUBLE,
31
+ fp64: this.use64bitPositions(),
32
+ transition: true,
33
+ accessor: 'getPosition',
34
+ },
35
+ instanceInRadius: {
36
+ size: 1,
37
+ transition: true,
38
+ accessor: 'getInRadius',
39
+ defaultValue: 1,
40
+ },
41
+ instanceOutRadius: {
42
+ size: 1,
43
+ transition: true,
44
+ accessor: 'getOutRadius',
45
+ defaultValue: 1,
46
+ },
47
+ instanceColors: {
48
+ size: 4,
49
+ transition: true,
50
+ type: GL.UNSIGNED_BYTE,
51
+ accessor: 'getColor',
52
+ defaultValue: DEFAULT_COLOR,
53
+ },
54
+ });
55
+ }
56
+ updateState({ props, oldProps, changeFlags }) {
57
+ super.updateState({ props, oldProps, changeFlags });
58
+ if (changeFlags.extensionsChanged) {
59
+ const { gl } = this.context;
60
+ if (this.state.model) {
61
+ this.state.model.delete();
62
+ }
63
+ this.setState({ model: this._getModel(gl) });
64
+ this.getAttributeManager().invalidateAll();
65
+ }
66
+ }
67
+ draw({ uniforms }) {
68
+ const { emptyColor, outlineEmptyMix } = this.props;
69
+ this.state.model
70
+ .setUniforms({
71
+ ...uniforms,
72
+ emptyColor,
73
+ outlineEmptyMix,
74
+ })
75
+ .draw();
76
+ }
77
+ _getModel(gl) {
78
+ // a square that minimally cover the unit circle
79
+ const positions = [-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0];
80
+ return new Model(gl, Object.assign(this.getShaders(), {
81
+ id: this.props.id,
82
+ geometry: new Geometry({
83
+ drawMode: GL.TRIANGLE_FAN,
84
+ vertexCount: 4,
85
+ attributes: {
86
+ positions: { size: 3, value: new Float32Array(positions) },
87
+ },
88
+ }),
89
+ isInstanced: true,
90
+ }));
91
+ }
92
+ }
93
+ FlowCirclesLayer.layerName = 'FlowCirclesLayer';
94
+ FlowCirclesLayer.defaultProps = {
95
+ getColor: { type: 'accessor', value: DEFAULT_COLOR },
96
+ emptyColor: { type: 'accessor', value: DEFAULT_EMPTY_COLOR },
97
+ outlineEmptyMix: { type: 'accessor', value: DEFAULT_OUTLINE_EMPTY_MIX },
98
+ getPosition: { type: 'accessor', value: (d) => d.position },
99
+ getInRadius: { type: 'accessor', value: 1 },
100
+ getOutRadius: { type: 'accessor', value: 1 },
101
+ parameters: {
102
+ depthTest: false,
103
+ },
104
+ };
105
+ export default FlowCirclesLayer;
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NpcmNsZXNMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9GbG93Q2lyY2xlc0xheWVyL0Zsb3dDaXJjbGVzTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwQyxPQUFPLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLGNBQWMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLFlBQVksTUFBTSwrQkFBK0IsQ0FBQztBQW9CekQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakQsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFFdEMsTUFBTSxnQkFBaUIsU0FBUSxLQUFLO0lBY2xDLGlCQUFpQjtJQUVqQixZQUFZLEtBQVk7UUFDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDdEIsRUFBRSxFQUFFLFlBQVk7WUFDaEIsRUFBRSxFQUFFLGNBQWM7WUFDbEIsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFlBQVksQ0FBQztZQUN0QyxpQkFBaUIsRUFBRTtnQkFDakIsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLEVB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LFFBQVEsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBQztJQUNsRCxVQUFVLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBQztJQUMxRCxlQUFlLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSx5QkFBeUIsRUFBQztJQUNyRSxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUM7SUFDM0UsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDO0lBQ3pDLFlBQVksRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBQztJQUMxQyxVQUFVLEVBQUU7UUFDVixTQUFTLEVBQUUsS0FBSztLQUNqQjtDQUNGLENBQUM7QUEwRkosZUFBZSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIEZsb3dtYXAuZ2wgY29udHJpYnV0b3JzXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBUZXJhbHl0aWNzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7TGF5ZXIsIHBpY2tpbmcsIHByb2plY3QzMn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQgR0wgZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7R2VvbWV0cnksIE1vZGVsfSBmcm9tICdAbHVtYS5nbC9jb3JlJztcbmltcG9ydCBGcmFnbWVudFNoYWRlciBmcm9tICcuL0Zsb3dDaXJjbGVzTGF5ZXJGcmFnbWVudC5nbHNsJztcbmltcG9ydCBWZXJ0ZXhTaGFkZXIgZnJvbSAnLi9GbG93Q2lyY2xlc0xheWVyVmVydGV4Lmdsc2wnO1xuaW1wb3J0IHtGbG93Q2lyY2xlc0xheWVyQXR0cmlidXRlcywgUkdCQX0gZnJvbSAnQGZsb3dtYXAuZ2wvZGF0YSc7XG5pbXBvcnQge0xheWVyUHJvcHN9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgRmxvd0NpcmNsZXNEYXR1bSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgTGF5ZXJQcm9wcyB7XG4gIGlkOiBzdHJpbmc7XG4gIG9wYWNpdHk/OiBudW1iZXI7XG4gIHBpY2thYmxlPzogYm9vbGVhbjtcbiAgZW1wdHlDb2xvcj86IFJHQkE7XG4gIG91dGxpbmVFbXB0eU1peD86IG51bWJlcjtcbiAgZ2V0Q29sb3I/OiAoZDogRmxvd0NpcmNsZXNEYXR1bSkgPT4gUkdCQTtcbiAgZ2V0UG9zaXRpb24/OiAoZDogRmxvd0NpcmNsZXNEYXR1bSkgPT4gW251bWJlciwgbnVtYmVyXTtcbiAgZ2V0SW5SYWRpdXM/OiAoZDogRmxvd0NpcmNsZXNEYXR1bSkgPT4gbnVtYmVyO1xuICBnZXRPdXRSYWRpdXM/OiAoZDogRmxvd0NpcmNsZXNEYXR1bSkgPT4gbnVtYmVyO1xuICBkYXRhOiBGbG93Q2lyY2xlc0RhdHVtW10gfCBGbG93Q2lyY2xlc0xheWVyQXR0cmlidXRlcztcbiAgdXBkYXRlVHJpZ2dlcnM/OiB7W2tleTogc3RyaW5nXTogUmVjb3JkPHN0cmluZywgdW5rbm93bj59O1xufVxuXG5jb25zdCBERUZBVUxUX0NPTE9SID0gWzAsIDAsIDAsIDI1NV07XG5jb25zdCBERUZBVUxUX0VNUFRZX0NPTE9SID0gWzI1NSwgMjU1LCAyNTUsIDI1NV07XG5jb25zdCBERUZBVUxUX09VVExJTkVfRU1QVFlfTUlYID0gMC40O1xuXG5jbGFzcyBGbG93Q2lyY2xlc0xheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBzdGF0aWMgbGF5ZXJOYW1lID0gJ0Zsb3dDaXJjbGVzTGF5ZXInO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZ2V0Q29sb3I6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogREVGQVVMVF9DT0xPUn0sXG4gICAgZW1wdHlDb2xvcjoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBERUZBVUxUX0VNUFRZX0NPTE9SfSxcbiAgICBvdXRsaW5lRW1wdHlNaXg6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogREVGQVVMVF9PVVRMSU5FX0VNUFRZX01JWH0sXG4gICAgZ2V0UG9zaXRpb246IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogKGQ6IEZsb3dDaXJjbGVzRGF0dW0pID0+IGQucG9zaXRpb259LFxuICAgIGdldEluUmFkaXVzOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IDF9LFxuICAgIGdldE91dFJhZGl1czoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiAxfSxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBkZXB0aFRlc3Q6IGZhbHNlLFxuICAgIH0sXG4gIH07XG4gIC8vIHByb3BzITogUHJvcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgZ2V0U2hhZGVycygpIHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0U2hhZGVycyh7XG4gICAgICB2czogVmVydGV4U2hhZGVyLFxuICAgICAgZnM6IEZyYWdtZW50U2hhZGVyLFxuICAgICAgbW9kdWxlczogW3Byb2plY3QzMiwgcGlja2luZ10sXG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCkuYWRkSW5zdGFuY2VkKHtcbiAgICAgIGluc3RhbmNlUG9zaXRpb25zOiB7XG4gICAgICAgIHNpemU6IDMsXG4gICAgICAgIHR5cGU6IEdMLkRPVUJMRSxcbiAgICAgICAgZnA2NDogdGhpcy51c2U2NGJpdFBvc2l0aW9ucygpLFxuICAgICAgICB0cmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFBvc2l0aW9uJyxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZUluUmFkaXVzOiB7XG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHRyYW5zaXRpb246IHRydWUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0SW5SYWRpdXMnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VPdXRSYWRpdXM6IHtcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgdHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRPdXRSYWRpdXMnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VDb2xvcnM6IHtcbiAgICAgICAgc2l6ZTogNCxcbiAgICAgICAgdHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgdHlwZTogR0wuVU5TSUdORURfQllURSxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRDb2xvcicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9DT0xPUixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc306IGFueSkge1xuICAgIHN1cGVyLnVwZGF0ZVN0YXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzfSk7XG4gICAgaWYgKGNoYW5nZUZsYWdzLmV4dGVuc2lvbnNDaGFuZ2VkKSB7XG4gICAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgaWYgKHRoaXMuc3RhdGUubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5kZWxldGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe21vZGVsOiB0aGlzLl9nZXRNb2RlbChnbCl9KTtcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpLmludmFsaWRhdGVBbGwoKTtcbiAgICB9XG4gIH1cblxuICBkcmF3KHt1bmlmb3Jtc306IGFueSkge1xuICAgIGNvbnN0IHtlbXB0eUNvbG9yLCBvdXRsaW5lRW1wdHlNaXh9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnN0YXRlLm1vZGVsXG4gICAgICAuc2V0VW5pZm9ybXMoe1xuICAgICAgICAuLi51bmlmb3JtcyxcbiAgICAgICAgZW1wdHlDb2xvcixcbiAgICAgICAgb3V0bGluZUVtcHR5TWl4LFxuICAgICAgfSlcbiAgICAgIC5kcmF3KCk7XG4gIH1cblxuICBfZ2V0TW9kZWwoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCkge1xuICAgIC8vIGEgc3F1YXJlIHRoYXQgbWluaW1hbGx5IGNvdmVyIHRoZSB1bml0IGNpcmNsZVxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFstMSwgLTEsIDAsIDEsIC0xLCAwLCAxLCAxLCAwLCAtMSwgMSwgMF07XG5cbiAgICByZXR1cm4gbmV3IE1vZGVsKFxuICAgICAgZ2wsXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZ2V0U2hhZGVycygpLCB7XG4gICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcbiAgICAgICAgICBkcmF3TW9kZTogR0wuVFJJQU5HTEVfRkFOLFxuICAgICAgICAgIHZlcnRleENvdW50OiA0LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uczoge3NpemU6IDMsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucyl9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBpc0luc3RhbmNlZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvd0NpcmNsZXNMYXllcjtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ declare const _default: "#define SHADER_NAME flow-circles-layer-fragment-shader\n#define SOFT_OUTLINE 0.05\n#define EPS 0.05\nprecision highp float;\n\nuniform vec4 emptyColor;\nuniform float outlineEmptyMix;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\nvarying float unitInRadius;\nvarying float unitOutRadius;\n\nfloat when_gt(float x, float y) {\n return max(sign(x - y), 0.0);\n}\n\nvoid main(void) {\n geometry.uv = unitPosition;\n float distToCenter = length(unitPosition);\n if (distToCenter > 1.0) {\n discard;\n }\n\n // See https://stackoverflow.com/questions/47285778\n vec4 ringColor = mix(\n emptyColor / 255., vColor,\n when_gt(unitInRadius, unitOutRadius)\n );\n vec4 outlineColor = mix(\n mix(vColor, emptyColor / 255., outlineEmptyMix),\n vColor,\n when_gt(unitInRadius, unitOutRadius)\n );\n \n float innerR = min(unitInRadius, unitOutRadius) * (1.0 - SOFT_OUTLINE);\n \n // Inner circle\n float step2 = innerR - 2.0 * EPS; \n float step3 = innerR - EPS;\n \n // Ring\n float step4 = innerR;\n // float step5 = 1.0 - SOFT_OUTLINE - EPS;\n // float step6 = 1.0 - SOFT_OUTLINE;\n float step5 = 1.0 - 5.0 * EPS;\n float step6 = 1.0;\n \n gl_FragColor = vColor;\n gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step2, step3, distToCenter));\n gl_FragColor = mix(gl_FragColor, ringColor, smoothstep(step3, step4, distToCenter));\n gl_FragColor = mix(gl_FragColor, outlineColor, smoothstep(step5, step6, distToCenter));\n // gl_FragColor = mix(gl_FragColor, emptyColor / 255., smoothstep(step6, 1.0, distToCenter));\n gl_FragColor.a = vColor.a;\n gl_FragColor.a *= smoothstep(0.0, SOFT_OUTLINE, 1.0 - distToCenter);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n";
2
+ export default _default;
3
+ //# sourceMappingURL=FlowCirclesLayerFragment.glsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowCirclesLayerFragment.glsl.d.ts","sourceRoot":"","sources":["../../src/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.ts"],"names":[],"mappings":";AAKA,wBA0DE"}