@flowmap.gl/layers 8.0.0-alpha.1 → 8.0.0-alpha.13

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 (71) hide show
  1. package/dist/FlowCirclesLayer/FlowCirclesLayer.d.ts +3 -3
  2. package/dist/FlowCirclesLayer/FlowCirclesLayer.d.ts.map +1 -1
  3. package/dist/FlowCirclesLayer/FlowCirclesLayer.js +5 -5
  4. package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts +1 -1
  5. package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts.map +1 -1
  6. package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.js +13 -10
  7. package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts +1 -1
  8. package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.js +2 -2
  9. package/dist/FlowmapLayer.d.ts +79 -0
  10. package/dist/FlowmapLayer.d.ts.map +1 -0
  11. package/dist/FlowmapLayer.js +351 -0
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +2 -2
  14. package/dist/types.d.ts +10 -5
  15. package/dist/types.d.ts.map +1 -1
  16. package/dist/types.js +1 -1
  17. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.d.ts +76 -0
  18. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.d.ts.map +1 -0
  19. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.js +178 -0
  20. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.d.ts +3 -0
  21. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.d.ts.map +1 -0
  22. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.js +21 -0
  23. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.d.ts +3 -0
  24. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.d.ts.map +1 -0
  25. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.js +21 -0
  26. package/dist-es5/AnimatedFlowLinesLayer/index.d.ts +3 -0
  27. package/dist-es5/AnimatedFlowLinesLayer/index.d.ts.map +1 -0
  28. package/dist-es5/AnimatedFlowLinesLayer/index.js +8 -0
  29. package/dist-es5/FlowCirclesLayer/FlowCirclesLayer.d.ts +59 -0
  30. package/dist-es5/FlowCirclesLayer/FlowCirclesLayer.d.ts.map +1 -0
  31. package/dist-es5/FlowCirclesLayer/FlowCirclesLayer.js +149 -0
  32. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts +3 -0
  33. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts.map +1 -0
  34. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.js +21 -0
  35. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts +3 -0
  36. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts.map +1 -0
  37. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.js +21 -0
  38. package/dist-es5/FlowCirclesLayer/index.d.ts +3 -0
  39. package/dist-es5/FlowCirclesLayer/index.d.ts.map +1 -0
  40. package/dist-es5/FlowCirclesLayer/index.js +8 -0
  41. package/dist-es5/FlowLinesLayer/FlowLinesLayer.d.ts +64 -0
  42. package/dist-es5/FlowLinesLayer/FlowLinesLayer.d.ts.map +1 -0
  43. package/dist-es5/FlowLinesLayer/FlowLinesLayer.js +217 -0
  44. package/dist-es5/FlowLinesLayer/FlowLinesLayerFragment.glsl.d.ts +3 -0
  45. package/dist-es5/FlowLinesLayer/FlowLinesLayerFragment.glsl.d.ts.map +1 -0
  46. package/dist-es5/FlowLinesLayer/FlowLinesLayerFragment.glsl.js +21 -0
  47. package/dist-es5/FlowLinesLayer/FlowLinesLayerVertex.glsl.d.ts +3 -0
  48. package/dist-es5/FlowLinesLayer/FlowLinesLayerVertex.glsl.d.ts.map +1 -0
  49. package/dist-es5/FlowLinesLayer/FlowLinesLayerVertex.glsl.js +21 -0
  50. package/dist-es5/FlowLinesLayer/index.d.ts +3 -0
  51. package/dist-es5/FlowLinesLayer/index.d.ts.map +1 -0
  52. package/dist-es5/FlowLinesLayer/index.js +8 -0
  53. package/{dist/FlowMapLayer.d.ts → dist-es5/FlowmapLayer.d.ts} +26 -17
  54. package/dist-es5/FlowmapLayer.d.ts.map +1 -0
  55. package/dist-es5/FlowmapLayer.js +476 -0
  56. package/dist-es5/index.d.ts +7 -0
  57. package/dist-es5/index.d.ts.map +1 -0
  58. package/dist-es5/index.js +26 -0
  59. package/dist-es5/types.d.ts +36 -0
  60. package/dist-es5/types.d.ts.map +1 -0
  61. package/dist-es5/types.js +23 -0
  62. package/package.json +6 -4
  63. package/src/FlowCirclesLayer/FlowCirclesLayer.ts +5 -5
  64. package/src/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.ts +12 -9
  65. package/src/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.ts +1 -1
  66. package/src/{FlowMapLayer.ts → FlowmapLayer.ts} +148 -82
  67. package/src/index.ts +2 -2
  68. package/src/types.ts +12 -5
  69. package/tsconfig.es5.json +11 -0
  70. package/dist/FlowMapLayer.d.ts.map +0 -1
  71. package/dist/FlowMapLayer.js +0 -308
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/FlowCirclesLayer/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var FlowCirclesLayer_1 = __importDefault(require("./FlowCirclesLayer"));
7
+ exports.default = FlowCirclesLayer_1.default;
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRmxvd0NpcmNsZXNMYXllci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdFQUFrRDtBQUVsRCxrQkFBZSwwQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGbG93Q2lyY2xlc0xheWVyIGZyb20gJy4vRmxvd0NpcmNsZXNMYXllcic7XG5cbmV4cG9ydCBkZWZhdWx0IEZsb3dDaXJjbGVzTGF5ZXI7XG4iXX0=
@@ -0,0 +1,64 @@
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
+ thicknessUnit?: number;
16
+ getSourcePosition?: (d: F) => [number, number];
17
+ getTargetPosition?: (d: F) => [number, number];
18
+ getColor?: (d: F) => RGBA;
19
+ getThickness?: (d: F) => number;
20
+ getPickable?: (d: F, { index }: {
21
+ index: number;
22
+ }) => number;
23
+ getEndpointOffsets?: (d: F) => [number, number];
24
+ }
25
+ declare class FlowLinesLayer<F> extends Layer {
26
+ static layerName: string;
27
+ static defaultProps: {
28
+ getSourcePosition: {
29
+ type: string;
30
+ value: (d: any) => number[];
31
+ };
32
+ getTargetPosition: {
33
+ type: string;
34
+ value: (d: any) => number[];
35
+ };
36
+ getColor: {
37
+ type: string;
38
+ value: RGBA;
39
+ };
40
+ getThickness: {
41
+ type: string;
42
+ value: (d: any) => any;
43
+ };
44
+ getPickable: {
45
+ type: string;
46
+ value: (d: any) => number;
47
+ };
48
+ drawOutline: boolean;
49
+ thicknessUnit: number;
50
+ outlineThickness: number;
51
+ outlineColor: number[];
52
+ parameters: {
53
+ depthTest: boolean;
54
+ };
55
+ };
56
+ constructor(props: Props<F>);
57
+ getShaders(): Record<string, unknown>;
58
+ initializeState(): void;
59
+ updateState({ props, oldProps, changeFlags }: Record<string, any>): void;
60
+ draw({ uniforms }: Record<string, any>): void;
61
+ _getModel(gl: WebGLRenderingContext): Record<string, any>;
62
+ }
63
+ export default FlowLinesLayer;
64
+ //# sourceMappingURL=FlowLinesLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowLinesLayer.d.ts","sourceRoot":"","sources":["../../src/FlowLinesLayer/FlowLinesLayer.ts"],"names":[],"mappings":"AAkBA,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;AAEpC,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,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,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,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC,KAAK,EAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,KAAK,MAAM,CAAC;IACzD,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAKD,cAAM,cAAc,CAAC,CAAC,CAAE,SAAQ,KAAK;IACnC,MAAM,CAAC,SAAS,SAAoB;IACpC,MAAM,CAAC,YAAY;;;uBACgC,GAAG;;;;uBACH,GAAG;;;;;;;;uBAER,GAAG;;;;uBACJ,GAAG;;;;;;;;;MAQ9C;gBAGU,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAI3B,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASrC,eAAe,IAAI,IAAI;IAwCvB,WAAW,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAatE,IAAI,CAAC,EAAC,QAAQ,EAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAc3C,SAAS,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CA0F1D;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2022 FlowmapBlue
4
+ * Copyright 2018-2020 Teralytics, modified by FlowmapBlue
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ *
18
+ */
19
+ var __extends = (this && this.__extends) || (function () {
20
+ var extendStatics = function (d, b) {
21
+ extendStatics = Object.setPrototypeOf ||
22
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
24
+ return extendStatics(d, b);
25
+ };
26
+ return function (d, b) {
27
+ if (typeof b !== "function" && b !== null)
28
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
29
+ extendStatics(d, b);
30
+ function __() { this.constructor = d; }
31
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
32
+ };
33
+ })();
34
+ var __assign = (this && this.__assign) || function () {
35
+ __assign = Object.assign || function(t) {
36
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
37
+ s = arguments[i];
38
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
39
+ t[p] = s[p];
40
+ }
41
+ return t;
42
+ };
43
+ return __assign.apply(this, arguments);
44
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ var core_1 = require("@deck.gl/core");
50
+ var constants_1 = __importDefault(require("@luma.gl/constants"));
51
+ var core_2 = require("@luma.gl/core");
52
+ var FlowLinesLayerFragment_glsl_1 = __importDefault(require("./FlowLinesLayerFragment.glsl"));
53
+ var FlowLinesLayerVertex_glsl_1 = __importDefault(require("./FlowLinesLayerVertex.glsl"));
54
+ var DEFAULT_COLOR = [0, 132, 193, 255];
55
+ var INNER_SIDE_OUTLINE_THICKNESS = 1;
56
+ var FlowLinesLayer = /** @class */ (function (_super) {
57
+ __extends(FlowLinesLayer, _super);
58
+ // props!: Props;
59
+ function FlowLinesLayer(props) {
60
+ return _super.call(this, props) || this;
61
+ }
62
+ FlowLinesLayer.prototype.getShaders = function () {
63
+ return _super.prototype.getShaders.call(this, {
64
+ vs: FlowLinesLayerVertex_glsl_1.default,
65
+ fs: FlowLinesLayerFragment_glsl_1.default,
66
+ modules: [core_1.project32, core_1.picking],
67
+ shaderCache: this.context.shaderCache,
68
+ });
69
+ };
70
+ FlowLinesLayer.prototype.initializeState = function () {
71
+ var attributeManager = this.state.attributeManager;
72
+ attributeManager.addInstanced({
73
+ instanceSourcePositions: {
74
+ accessor: 'getSourcePosition',
75
+ size: 3,
76
+ transition: false,
77
+ type: constants_1.default.DOUBLE,
78
+ },
79
+ instanceTargetPositions: {
80
+ accessor: 'getTargetPosition',
81
+ size: 3,
82
+ transition: false,
83
+ type: constants_1.default.DOUBLE,
84
+ },
85
+ instanceThickness: {
86
+ accessor: 'getThickness',
87
+ size: 1,
88
+ transition: false,
89
+ },
90
+ instanceEndpointOffsets: {
91
+ accessor: 'getEndpointOffsets',
92
+ size: 2,
93
+ transition: false,
94
+ },
95
+ instanceColors: {
96
+ accessor: 'getColor',
97
+ size: 4,
98
+ type: constants_1.default.UNSIGNED_BYTE,
99
+ transition: false,
100
+ },
101
+ instancePickable: {
102
+ accessor: 'getPickable',
103
+ size: 1,
104
+ transition: false,
105
+ },
106
+ });
107
+ };
108
+ FlowLinesLayer.prototype.updateState = function (_a) {
109
+ var props = _a.props, oldProps = _a.oldProps, changeFlags = _a.changeFlags;
110
+ _super.prototype.updateState.call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
111
+ if (changeFlags.extensionsChanged) {
112
+ var gl = this.context.gl;
113
+ if (this.state.model) {
114
+ this.state.model.delete();
115
+ }
116
+ this.setState({ model: this._getModel(gl) });
117
+ this.getAttributeManager().invalidateAll();
118
+ }
119
+ };
120
+ FlowLinesLayer.prototype.draw = function (_a) {
121
+ var uniforms = _a.uniforms;
122
+ var gl = this.context.gl;
123
+ var _b = this.props, outlineColor = _b.outlineColor, thicknessUnit = _b.thicknessUnit;
124
+ gl.lineWidth(1);
125
+ this.state.model
126
+ .setUniforms(__assign(__assign({}, uniforms), { outlineColor: outlineColor.map(function (x) { return x / 255; }), thicknessUnit: thicknessUnit * 2.0, gap: 0.5 }))
127
+ .draw();
128
+ };
129
+ FlowLinesLayer.prototype._getModel = function (gl) {
130
+ var positions = [];
131
+ var pixelOffsets = [];
132
+ var _a = this.props, drawOutline = _a.drawOutline, outlineThickness = _a.outlineThickness;
133
+ if (drawOutline) {
134
+ // source_target_mix, perpendicular_offset_in_thickness_units, direction_of_travel_offset_in_thickness_units
135
+ // prettier-ignore
136
+ positions = positions.concat([
137
+ // Outline
138
+ 0, 0, 0,
139
+ 0, 1, 0,
140
+ 1, 0, 0,
141
+ 0, 1, 0,
142
+ 1, 0, -3,
143
+ 1, 1, -3,
144
+ 1, 0, 0,
145
+ 1, 2, -3,
146
+ 1, 0, -3,
147
+ ]);
148
+ var tout = outlineThickness;
149
+ var tin = INNER_SIDE_OUTLINE_THICKNESS; // the outline shouldn't cover the opposite arrow
150
+ // perpendicular_offset_in_pixels, direction_of_travel_offset_in_pixels, fill_outline_color_mix
151
+ // prettier-ignore
152
+ pixelOffsets = pixelOffsets.concat([
153
+ // Outline
154
+ -tin, -tout, 1,
155
+ tout, -tout, 1,
156
+ -tin, tout, 1,
157
+ tout, -tout, 1,
158
+ -tin, 0, 1,
159
+ tout, 0, 1,
160
+ -tin, 3 * tout, 1,
161
+ 2 * tout, -tout, 1,
162
+ -tin, -tout, 1,
163
+ ]);
164
+ }
165
+ // prettier-ignore
166
+ positions = positions.concat([
167
+ // Fill
168
+ 0, 0, 0,
169
+ 0, 1, 0,
170
+ 1, 0, 0,
171
+ 0, 1, 0,
172
+ 1, 0, -3,
173
+ 1, 1, -3,
174
+ 1, 0, 0,
175
+ 1, 2, -3,
176
+ 1, 0, -3,
177
+ ]);
178
+ // prettier-ignore
179
+ pixelOffsets = pixelOffsets.concat([
180
+ // Fill
181
+ 0, 0, 0,
182
+ 0, 0, 0,
183
+ 0, 0, 0,
184
+ 0, 0, 0,
185
+ 0, 0, 0,
186
+ 0, 0, 0,
187
+ 0, 0, 0,
188
+ 0, 0, 0,
189
+ 0, 0, 0,
190
+ ]);
191
+ return new core_2.Model(gl, __assign(__assign({ id: this.props.id }, this.getShaders()), { geometry: new core_2.Geometry({
192
+ drawType: constants_1.default.TRIANGLES,
193
+ attributes: {
194
+ positions: new Float32Array(positions),
195
+ normals: new Float32Array(pixelOffsets),
196
+ },
197
+ }), isInstanced: true, shaderCache: this.context.shaderCache }));
198
+ };
199
+ FlowLinesLayer.layerName = 'FlowLinesLayer';
200
+ FlowLinesLayer.defaultProps = {
201
+ getSourcePosition: { type: 'accessor', value: function (d) { return [0, 0]; } },
202
+ getTargetPosition: { type: 'accessor', value: function (d) { return [0, 0]; } },
203
+ getColor: { type: 'accessor', value: DEFAULT_COLOR },
204
+ getThickness: { type: 'accessor', value: function (d) { return d.count; } },
205
+ getPickable: { type: 'accessor', value: function (d) { return 1.0; } },
206
+ drawOutline: true,
207
+ thicknessUnit: 12,
208
+ outlineThickness: 1,
209
+ outlineColor: [255, 255, 255, 255],
210
+ parameters: {
211
+ depthTest: false,
212
+ },
213
+ };
214
+ return FlowLinesLayer;
215
+ }(core_1.Layer));
216
+ exports.default = FlowLinesLayer;
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0xpbmVzTGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRmxvd0xpbmVzTGF5ZXIvRmxvd0xpbmVzTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsc0NBQXdEO0FBQ3hELGlFQUFvQztBQUNwQyxzQ0FBOEM7QUFDOUMsOEZBQTJEO0FBQzNELDBGQUF1RDtBQXNCdkQsSUFBTSxhQUFhLEdBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQyxJQUFNLDRCQUE0QixHQUFHLENBQUMsQ0FBQztBQUV2QztJQUFnQyxrQ0FBSztJQWdCbkMsaUJBQWlCO0lBRWpCLHdCQUFZLEtBQWU7ZUFDekIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELG1DQUFVLEdBQVY7UUFDRSxPQUFPLGlCQUFNLFVBQVUsWUFBQztZQUN0QixFQUFFLEVBQUUsbUNBQVk7WUFDaEIsRUFBRSxFQUFFLHFDQUFjO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLGdCQUFTLEVBQUUsY0FBTyxDQUFDO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdDQUFlLEdBQWY7UUFDUyxJQUFBLGdCQUFnQixHQUFJLElBQUksQ0FBQyxLQUFLLGlCQUFkLENBQWU7UUFFdEMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO1lBQzVCLHVCQUF1QixFQUFFO2dCQUN2QixRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixJQUFJLEVBQUUsQ0FBQztnQkFDUCxVQUFVLEVBQUUsS0FBSztnQkFDakIsSUFBSSxFQUFFLG1CQUFFLENBQUMsTUFBTTthQUNoQjtZQUNELHVCQUF1QixFQUFFO2dCQUN2QixRQUFRLEVBQUUsbUJBQW1CO2dCQUM3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O1FBQ3BCLGlCQUFpQixFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBQyxDQUFNLElBQUssT0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBTixDQUFNLEVBQUM7UUFDaEUsaUJBQWlCLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFDLENBQU0sSUFBSyxPQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFOLENBQU0sRUFBQztRQUNoRSxRQUFRLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUM7UUFDbEQsWUFBWSxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBQyxDQUFNLElBQUssT0FBQSxDQUFDLENBQUMsS0FBSyxFQUFQLENBQU8sRUFBQztRQUM1RCxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFDLENBQU0sSUFBSyxPQUFBLEdBQUcsRUFBSCxDQUFHLEVBQUM7UUFDdkQsV0FBVyxFQUFFLElBQUk7UUFDakIsYUFBYSxFQUFFLEVBQUU7UUFDakIsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQixZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEMsVUFBVSxFQUFFO1lBQ1YsU0FBUyxFQUFFLEtBQUs7U0FDakI7S0FDRixDQUFDO0lBNktKLHFCQUFDO0NBQUEsQUE1TEQsQ0FBZ0MsWUFBSyxHQTRMcEM7QUFFRCxrQkFBZSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHtMYXllciwgcGlja2luZywgcHJvamVjdDMyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtHZW9tZXRyeSwgTW9kZWx9IGZyb20gJ0BsdW1hLmdsL2NvcmUnO1xuaW1wb3J0IEZyYWdtZW50U2hhZGVyIGZyb20gJy4vRmxvd0xpbmVzTGF5ZXJGcmFnbWVudC5nbHNsJztcbmltcG9ydCBWZXJ0ZXhTaGFkZXIgZnJvbSAnLi9GbG93TGluZXNMYXllclZlcnRleC5nbHNsJztcbmltcG9ydCB7Rmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzLCBSR0JBfSBmcm9tICdAZmxvd21hcC5nbC9kYXRhJztcbmltcG9ydCB7TGF5ZXJQcm9wc30gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BzPEY+IGV4dGVuZHMgTGF5ZXJQcm9wcyB7XG4gIGlkOiBzdHJpbmc7XG4gIG9wYWNpdHk/OiBudW1iZXI7XG4gIHBpY2thYmxlPzogYm9vbGVhbjtcbiAgdXBkYXRlVHJpZ2dlcnM/OiB7W2tleTogc3RyaW5nXTogUmVjb3JkPHN0cmluZywgdW5rbm93bj59O1xuICBkYXRhOiBGW10gfCBGbG93TGluZXNMYXllckF0dHJpYnV0ZXM7XG4gIGRyYXdPdXRsaW5lOiBib29sZWFuO1xuICBvdXRsaW5lQ29sb3I/OiBSR0JBO1xuICBvdXRsaW5lVGhpY2tuZXNzPzogbnVtYmVyO1xuICB0aGlja25lc3NVbml0PzogbnVtYmVyO1xuICBnZXRTb3VyY2VQb3NpdGlvbj86IChkOiBGKSA9PiBbbnVtYmVyLCBudW1iZXJdO1xuICBnZXRUYXJnZXRQb3NpdGlvbj86IChkOiBGKSA9PiBbbnVtYmVyLCBudW1iZXJdO1xuICBnZXRDb2xvcj86IChkOiBGKSA9PiBSR0JBO1xuICBnZXRUaGlja25lc3M/OiAoZDogRikgPT4gbnVtYmVyO1xuICBnZXRQaWNrYWJsZT86IChkOiBGLCB7aW5kZXh9OiB7aW5kZXg6IG51bWJlcn0pID0+IG51bWJlcjsgLy8gPj0gMS4wIC0+IHRydWVcbiAgZ2V0RW5kcG9pbnRPZmZzZXRzPzogKGQ6IEYpID0+IFtudW1iZXIsIG51bWJlcl07XG59XG5cbmNvbnN0IERFRkFVTFRfQ09MT1I6IFJHQkEgPSBbMCwgMTMyLCAxOTMsIDI1NV07XG5jb25zdCBJTk5FUl9TSURFX09VVExJTkVfVEhJQ0tORVNTID0gMTtcblxuY2xhc3MgRmxvd0xpbmVzTGF5ZXI8Rj4gZXh0ZW5kcyBMYXllciB7XG4gIHN0YXRpYyBsYXllck5hbWUgPSAnRmxvd0xpbmVzTGF5ZXInO1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGdldFNvdXJjZVBvc2l0aW9uOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IChkOiBhbnkpID0+IFswLCAwXX0sXG4gICAgZ2V0VGFyZ2V0UG9zaXRpb246IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogKGQ6IGFueSkgPT4gWzAsIDBdfSxcbiAgICBnZXRDb2xvcjoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBERUZBVUxUX0NPTE9SfSxcbiAgICBnZXRUaGlja25lc3M6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogKGQ6IGFueSkgPT4gZC5jb3VudH0sIC8vIDAuLjAuNVxuICAgIGdldFBpY2thYmxlOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IChkOiBhbnkpID0+IDEuMH0sXG4gICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgdGhpY2tuZXNzVW5pdDogMTIsXG4gICAgb3V0bGluZVRoaWNrbmVzczogMSxcbiAgICBvdXRsaW5lQ29sb3I6IFsyNTUsIDI1NSwgMjU1LCAyNTVdLFxuICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgIGRlcHRoVGVzdDogZmFsc2UsXG4gICAgfSxcbiAgfTtcbiAgLy8gcHJvcHMhOiBQcm9wcztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHM8Rj4pIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBnZXRTaGFkZXJzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0U2hhZGVycyh7XG4gICAgICB2czogVmVydGV4U2hhZGVyLFxuICAgICAgZnM6IEZyYWdtZW50U2hhZGVyLFxuICAgICAgbW9kdWxlczogW3Byb2plY3QzMiwgcGlja2luZ10sXG4gICAgICBzaGFkZXJDYWNoZTogdGhpcy5jb250ZXh0LnNoYWRlckNhY2hlLFxuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHthdHRyaWJ1dGVNYW5hZ2VyfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICBpbnN0YW5jZVNvdXJjZVBvc2l0aW9uczoge1xuICAgICAgICBhY2Nlc3NvcjogJ2dldFNvdXJjZVBvc2l0aW9uJyxcbiAgICAgICAgc2l6ZTogMyxcbiAgICAgICAgdHJhbnNpdGlvbjogZmFsc2UsXG4gICAgICAgIHR5cGU6IEdMLkRPVUJMRSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVRhcmdldFBvc2l0aW9uczoge1xuICAgICAgICBhY2Nlc3NvcjogJ2dldFRhcmdldFBvc2l0aW9uJyxcbiAgICAgICAgc2l6ZTogMyxcbiAgICAgICAgdHJhbnNpdGlvbjogZmFsc2UsXG4gICAgICAgIHR5cGU6IEdMLkRPVUJMRSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVRoaWNrbmVzczoge1xuICAgICAgICBhY2Nlc3NvcjogJ2dldFRoaWNrbmVzcycsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHRyYW5zaXRpb246IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGluc3RhbmNlRW5kcG9pbnRPZmZzZXRzOiB7XG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RW5kcG9pbnRPZmZzZXRzJyxcbiAgICAgICAgc2l6ZTogMixcbiAgICAgICAgdHJhbnNpdGlvbjogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VDb2xvcnM6IHtcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRDb2xvcicsXG4gICAgICAgIHNpemU6IDQsXG4gICAgICAgIHR5cGU6IEdMLlVOU0lHTkVEX0JZVEUsXG4gICAgICAgIHRyYW5zaXRpb246IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGluc3RhbmNlUGlja2FibGU6IHtcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRQaWNrYWJsZScsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHRyYW5zaXRpb246IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVN0YXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzfTogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIHN1cGVyLnVwZGF0ZVN0YXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzfSk7XG5cbiAgICBpZiAoY2hhbmdlRmxhZ3MuZXh0ZW5zaW9uc0NoYW5nZWQpIHtcbiAgICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5tb2RlbCkge1xuICAgICAgICB0aGlzLnN0YXRlLm1vZGVsLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kZWw6IHRoaXMuX2dldE1vZGVsKGdsKX0pO1xuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCkuaW52YWxpZGF0ZUFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIGRyYXcoe3VuaWZvcm1zfTogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3Qge291dGxpbmVDb2xvciwgdGhpY2tuZXNzVW5pdH0gPSB0aGlzLnByb3BzO1xuICAgIGdsLmxpbmVXaWR0aCgxKTtcbiAgICB0aGlzLnN0YXRlLm1vZGVsXG4gICAgICAuc2V0VW5pZm9ybXMoe1xuICAgICAgICAuLi51bmlmb3JtcyxcbiAgICAgICAgb3V0bGluZUNvbG9yOiBvdXRsaW5lQ29sb3IubWFwKCh4OiBudW1iZXIpID0+IHggLyAyNTUpLFxuICAgICAgICB0aGlja25lc3NVbml0OiB0aGlja25lc3NVbml0ICogMi4wLFxuICAgICAgICBnYXA6IDAuNSxcbiAgICAgIH0pXG4gICAgICAuZHJhdygpO1xuICB9XG5cbiAgX2dldE1vZGVsKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBsZXQgcG9zaXRpb25zOiBudW1iZXJbXSA9IFtdO1xuICAgIGxldCBwaXhlbE9mZnNldHM6IG51bWJlcltdID0gW107XG5cbiAgICBjb25zdCB7ZHJhd091dGxpbmUsIG91dGxpbmVUaGlja25lc3N9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZHJhd091dGxpbmUpIHtcbiAgICAgIC8vIHNvdXJjZV90YXJnZXRfbWl4LCBwZXJwZW5kaWN1bGFyX29mZnNldF9pbl90aGlja25lc3NfdW5pdHMsIGRpcmVjdGlvbl9vZl90cmF2ZWxfb2Zmc2V0X2luX3RoaWNrbmVzc191bml0c1xuICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICBwb3NpdGlvbnMgPSBwb3NpdGlvbnMuY29uY2F0KFtcbiAgICAgICAgICAvLyBPdXRsaW5lXG4gICAgICAgICAgMCwgMCwgMCxcbiAgICAgICAgICAwLCAxLCAwLFxuICAgICAgICAgIDEsIDAsIDAsXG5cbiAgICAgICAgICAwLCAxLCAwLFxuICAgICAgICAgIDEsIDAsIC0zLFxuICAgICAgICAgIDEsIDEsIC0zLFxuXG4gICAgICAgICAgMSwgMCwgMCxcbiAgICAgICAgICAxLCAyLCAtMyxcbiAgICAgICAgICAxLCAwLCAtMyxcbiAgICAgICAgXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRvdXQgPSBvdXRsaW5lVGhpY2tuZXNzO1xuICAgICAgY29uc3QgdGluID0gSU5ORVJfU0lERV9PVVRMSU5FX1RISUNLTkVTUzsgLy8gdGhlIG91dGxpbmUgc2hvdWxkbid0IGNvdmVyIHRoZSBvcHBvc2l0ZSBhcnJvd1xuICAgICAgLy8gcGVycGVuZGljdWxhcl9vZmZzZXRfaW5fcGl4ZWxzLCBkaXJlY3Rpb25fb2ZfdHJhdmVsX29mZnNldF9pbl9waXhlbHMsIGZpbGxfb3V0bGluZV9jb2xvcl9taXhcbiAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgcGl4ZWxPZmZzZXRzID0gcGl4ZWxPZmZzZXRzLmNvbmNhdChbXG4gICAgICAgIC8vIE91dGxpbmVcbiAgICAgICAgLXRpbiwgLXRvdXQsIDEsXG4gICAgICAgIHRvdXQsIC10b3V0LCAxLFxuICAgICAgICAtdGluLCB0b3V0LCAxLFxuXG4gICAgICAgIHRvdXQsIC10b3V0LCAxLFxuICAgICAgICAtdGluLCAwLCAxLFxuICAgICAgICB0b3V0LCAwLCAxLFxuXG4gICAgICAgIC10aW4sIDMgKiB0b3V0LCAxLFxuICAgICAgICAyICogdG91dCwgLXRvdXQsIDEsXG4gICAgICAgIC10aW4sIC10b3V0LCAxLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChbXG4gICAgICAvLyBGaWxsXG4gICAgICAwLCAwLCAwLFxuICAgICAgMCwgMSwgMCxcbiAgICAgIDEsIDAsIDAsXG5cbiAgICAgIDAsIDEsIDAsXG4gICAgICAxLCAwLCAtMyxcbiAgICAgIDEsIDEsIC0zLFxuXG4gICAgICAxLCAwLCAwLFxuICAgICAgMSwgMiwgLTMsXG4gICAgICAxLCAwLCAtMyxcbiAgICBdKTtcblxuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHBpeGVsT2Zmc2V0cyA9IHBpeGVsT2Zmc2V0cy5jb25jYXQoW1xuICAgICAgLy8gRmlsbFxuICAgICAgMCwgMCwgMCxcbiAgICAgIDAsIDAsIDAsXG4gICAgICAwLCAwLCAwLFxuXG4gICAgICAwLCAwLCAwLFxuICAgICAgMCwgMCwgMCxcbiAgICAgIDAsIDAsIDAsXG5cbiAgICAgIDAsIDAsIDAsXG4gICAgICAwLCAwLCAwLFxuICAgICAgMCwgMCwgMCxcbiAgICBdKTtcblxuICAgIHJldHVybiBuZXcgTW9kZWwoZ2wsIHtcbiAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgLi4udGhpcy5nZXRTaGFkZXJzKCksXG4gICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcbiAgICAgICAgZHJhd1R5cGU6IEdMLlRSSUFOR0xFUyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIHBvc2l0aW9uczogbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMpLFxuICAgICAgICAgIG5vcm1hbHM6IG5ldyBGbG9hdDMyQXJyYXkocGl4ZWxPZmZzZXRzKSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgaXNJbnN0YW5jZWQ6IHRydWUsXG4gICAgICBzaGFkZXJDYWNoZTogdGhpcy5jb250ZXh0LnNoYWRlckNhY2hlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZsb3dMaW5lc0xheWVyO1xuIl19
@@ -0,0 +1,3 @@
1
+ declare const _default: "#define SHADER_NAME flow-line-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 uv;\n\nvoid main(void) {\n if (vColor.a == 0.0) {\n discard;\n }\n\n geometry.uv = uv;\n gl_FragColor = vColor;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n";
2
+ export default _default;
3
+ //# sourceMappingURL=FlowLinesLayerFragment.glsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowLinesLayerFragment.glsl.d.ts","sourceRoot":"","sources":["../../src/FlowLinesLayer/FlowLinesLayerFragment.glsl.ts"],"names":[],"mappings":";AAiBA,wBAiBE"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /*
4
+ * Copyright 2022 FlowmapBlue
5
+ * Copyright 2018-2020 Teralytics, modified by FlowmapBlue
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ *
19
+ */
20
+ exports.default = "#define SHADER_NAME flow-line-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 uv;\n\nvoid main(void) {\n if (vColor.a == 0.0) {\n discard;\n }\n\n geometry.uv = uv;\n gl_FragColor = vColor;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n";
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0xpbmVzTGF5ZXJGcmFnbWVudC5nbHNsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0Zsb3dMaW5lc0xheWVyL0Zsb3dMaW5lc0xheWVyRnJhZ21lbnQuZ2xzbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsa0JBQWUsaVNBaUJkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGBcXFxuI2RlZmluZSBTSEFERVJfTkFNRSBmbG93LWxpbmUtbGF5ZXItZnJhZ21lbnQtc2hhZGVyXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxudmFyeWluZyB2ZWM0IHZDb2xvcjtcbnZhcnlpbmcgdmVjMiB1djtcblxudm9pZCBtYWluKHZvaWQpIHtcbiAgaWYgKHZDb2xvci5hID09IDAuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cblxuICBnZW9tZXRyeS51diA9IHV2O1xuICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7XG4gIERFQ0tHTF9GSUxURVJfQ09MT1IoZ2xfRnJhZ0NvbG9yLCBnZW9tZXRyeSk7XG59XG5gO1xuIl19
@@ -0,0 +1,3 @@
1
+ declare const _default: "#define SHADER_NAME flow-line-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 normals;\nattribute vec4 instanceColors;\nattribute float instanceThickness; // 0..0.5\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec3 instanceSourcePositions64Low;\nattribute vec3 instanceTargetPositions64Low;\nattribute vec3 instancePickingColors;\nattribute vec2 instanceEndpointOffsets;\nattribute float instancePickable;\n\nuniform vec4 outlineColor;\nuniform float thicknessUnit;\nuniform float gap;\nuniform float opacity;\n\nvarying vec4 vColor;\nvarying vec2 uv;\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 // linear interpolation of source & target to pick right coord\n float sourceOrTarget = positions.x;\n geometry.position = mix(source_commonspace, target_commonspace, sourceOrTarget);\n uv = positions.xy;\n geometry.uv = uv;\n if (instancePickable > 0.5) {\n geometry.pickingColor = instancePickingColors;\n }\n \n // set the clamp limits in pixel size \n float lengthCommon = length(target_commonspace - source_commonspace); \n vec2 offsetDistances = project_pixel_size(positions.yz) * thicknessUnit;\n \n vec2 limitedOffsetDistances = clamp( \n project_pixel_size(positions.yz) * thicknessUnit,\n -lengthCommon*.8, lengthCommon*.8\n );\n float startOffsetCommon = project_pixel_size(instanceEndpointOffsets[0]);\n float endOffsetCommon = project_pixel_size(instanceEndpointOffsets[1]);\n float endpointOffset = mix(\n clamp(startOffsetCommon, 0.0, lengthCommon*.2),\n -clamp(endOffsetCommon, 0.0, lengthCommon*.2),\n positions.x\n );\n\n vec2 flowlineDir = normalize(target_commonspace.xy - source_commonspace.xy);\n vec2 perpendicularDir = vec2(-flowlineDir.y, flowlineDir.x);\n vec2 normalsCommon = project_pixel_size(normals.xy);\n float gapCommon = project_pixel_size(gap);\n vec3 offsetCommon = vec3(\n flowlineDir * (instanceThickness * limitedOffsetDistances[1] + normalsCommon.y + endpointOffset * 1.05) -\n perpendicularDir * (instanceThickness * limitedOffsetDistances[0] + gapCommon + normalsCommon.x),\n 0.0\n );\n \n DECKGL_FILTER_SIZE(offsetCommon, geometry);\n vec4 position_commonspace = mix(source_commonspace, target_commonspace, sourceOrTarget);\n vec4 offset_commonspace = vec4(offsetCommon, 0.0);\n gl_Position = project_common_position_to_clipspace(position_commonspace + offset_commonspace);\n \n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n \n vec4 fillColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n if (instancePickable <= 0.5) {\n vColor = mix(fillColor, vec4(outlineColor.xyz, instanceThickness), normals.z);\n } else {\n vColor = mix(fillColor, vec4(outlineColor.xyz, outlineColor.w * fillColor.w), normals.z);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
2
+ export default _default;
3
+ //# sourceMappingURL=FlowLinesLayerVertex.glsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowLinesLayerVertex.glsl.d.ts","sourceRoot":"","sources":["../../src/FlowLinesLayer/FlowLinesLayerVertex.glsl.ts"],"names":[],"mappings":";AAiBA,wBAmFE"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /*
4
+ * Copyright 2022 FlowmapBlue
5
+ * Copyright 2018-2020 Teralytics, modified by FlowmapBlue
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ *
19
+ */
20
+ exports.default = "#define SHADER_NAME flow-line-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 normals;\nattribute vec4 instanceColors;\nattribute float instanceThickness; // 0..0.5\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec3 instanceSourcePositions64Low;\nattribute vec3 instanceTargetPositions64Low;\nattribute vec3 instancePickingColors;\nattribute vec2 instanceEndpointOffsets;\nattribute float instancePickable;\n\nuniform vec4 outlineColor;\nuniform float thicknessUnit;\nuniform float gap;\nuniform float opacity;\n\nvarying vec4 vColor;\nvarying vec2 uv;\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 // linear interpolation of source & target to pick right coord\n float sourceOrTarget = positions.x;\n geometry.position = mix(source_commonspace, target_commonspace, sourceOrTarget);\n uv = positions.xy;\n geometry.uv = uv;\n if (instancePickable > 0.5) {\n geometry.pickingColor = instancePickingColors;\n }\n \n // set the clamp limits in pixel size \n float lengthCommon = length(target_commonspace - source_commonspace); \n vec2 offsetDistances = project_pixel_size(positions.yz) * thicknessUnit;\n \n vec2 limitedOffsetDistances = clamp( \n project_pixel_size(positions.yz) * thicknessUnit,\n -lengthCommon*.8, lengthCommon*.8\n );\n float startOffsetCommon = project_pixel_size(instanceEndpointOffsets[0]);\n float endOffsetCommon = project_pixel_size(instanceEndpointOffsets[1]);\n float endpointOffset = mix(\n clamp(startOffsetCommon, 0.0, lengthCommon*.2),\n -clamp(endOffsetCommon, 0.0, lengthCommon*.2),\n positions.x\n );\n\n vec2 flowlineDir = normalize(target_commonspace.xy - source_commonspace.xy);\n vec2 perpendicularDir = vec2(-flowlineDir.y, flowlineDir.x);\n vec2 normalsCommon = project_pixel_size(normals.xy);\n float gapCommon = project_pixel_size(gap);\n vec3 offsetCommon = vec3(\n flowlineDir * (instanceThickness * limitedOffsetDistances[1] + normalsCommon.y + endpointOffset * 1.05) -\n perpendicularDir * (instanceThickness * limitedOffsetDistances[0] + gapCommon + normalsCommon.x),\n 0.0\n );\n \n DECKGL_FILTER_SIZE(offsetCommon, geometry);\n vec4 position_commonspace = mix(source_commonspace, target_commonspace, sourceOrTarget);\n vec4 offset_commonspace = vec4(offsetCommon, 0.0);\n gl_Position = project_common_position_to_clipspace(position_commonspace + offset_commonspace);\n \n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n \n vec4 fillColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n if (instancePickable <= 0.5) {\n vColor = mix(fillColor, vec4(outlineColor.xyz, instanceThickness), normals.z);\n } else {\n vColor = mix(fillColor, vec4(outlineColor.xyz, outlineColor.w * fillColor.w), normals.z);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0xpbmVzTGF5ZXJWZXJ0ZXguZ2xzbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9GbG93TGluZXNMYXllci9GbG93TGluZXNMYXllclZlcnRleC5nbHNsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxrQkFBZSxxdUdBbUZkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGBcXFxuI2RlZmluZSBTSEFERVJfTkFNRSBmbG93LWxpbmUtbGF5ZXItdmVydGV4LXNoYWRlclxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbnM7XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWxzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VUaGlja25lc3M7ICAgIC8vIDAuLjAuNVxuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnM7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztcbmF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlU291cmNlUG9zaXRpb25zNjRMb3c7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVRhcmdldFBvc2l0aW9uczY0TG93O1xuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuYXR0cmlidXRlIHZlYzIgaW5zdGFuY2VFbmRwb2ludE9mZnNldHM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VQaWNrYWJsZTtcblxudW5pZm9ybSB2ZWM0IG91dGxpbmVDb2xvcjtcbnVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzVW5pdDtcbnVuaWZvcm0gZmxvYXQgZ2FwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xudmFyeWluZyB2ZWMyIHV2O1xuXG52b2lkIG1haW4odm9pZCkge1xuICBnZW9tZXRyeS53b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnM7XG4gIGdlb21ldHJ5LndvcmxkUG9zaXRpb25BbHQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztcbiAgXG4gIC8vIFBvc2l0aW9uXG4gIHZlYzQgc291cmNlX2NvbW1vbnNwYWNlOyAgICBcbiAgdmVjNCB0YXJnZXRfY29tbW9uc3BhY2U7XG4gIHZlYzQgc291cmNlID0gcHJvamVjdF9wb3NpdGlvbl90b19jbGlwc3BhY2UoaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnMsIGluc3RhbmNlU291cmNlUG9zaXRpb25zNjRMb3csIHZlYzMoMC4pLCBzb3VyY2VfY29tbW9uc3BhY2UpO1xuICB2ZWM0IHRhcmdldCA9IHByb2plY3RfcG9zaXRpb25fdG9fY2xpcHNwYWNlKGluc3RhbmNlVGFyZ2V0UG9zaXRpb25zLCBpbnN0YW5jZVRhcmdldFBvc2l0aW9uczY0TG93LCB2ZWMzKDAuKSwgdGFyZ2V0X2NvbW1vbnNwYWNlKTtcblxuICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBvZiBzb3VyY2UgJiB0YXJnZXQgdG8gcGljayByaWdodCBjb29yZFxuICBmbG9hdCBzb3VyY2VPclRhcmdldCA9IHBvc2l0aW9ucy54O1xuICBnZW9tZXRyeS5wb3NpdGlvbiA9IG1peChzb3VyY2VfY29tbW9uc3BhY2UsIHRhcmdldF9jb21tb25zcGFjZSwgc291cmNlT3JUYXJnZXQpO1xuICB1diA9IHBvc2l0aW9ucy54eTtcbiAgZ2VvbWV0cnkudXYgPSB1djtcbiAgaWYgKGluc3RhbmNlUGlja2FibGUgPiAwLjUpIHtcbiAgICBnZW9tZXRyeS5waWNraW5nQ29sb3IgPSBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG4gIH1cbiAgXG4gIC8vIHNldCB0aGUgY2xhbXAgbGltaXRzIGluIHBpeGVsIHNpemUgXG4gIGZsb2F0IGxlbmd0aENvbW1vbiA9IGxlbmd0aCh0YXJnZXRfY29tbW9uc3BhY2UgLSBzb3VyY2VfY29tbW9uc3BhY2UpOyAgICBcbiAgdmVjMiBvZmZzZXREaXN0YW5jZXMgPSBwcm9qZWN0X3BpeGVsX3NpemUocG9zaXRpb25zLnl6KSAqIHRoaWNrbmVzc1VuaXQ7XG4gIFxuICB2ZWMyIGxpbWl0ZWRPZmZzZXREaXN0YW5jZXMgPSBjbGFtcCggICBcbiAgICBwcm9qZWN0X3BpeGVsX3NpemUocG9zaXRpb25zLnl6KSAqIHRoaWNrbmVzc1VuaXQsXG4gICAgLWxlbmd0aENvbW1vbiouOCwgbGVuZ3RoQ29tbW9uKi44XG4gICk7XG4gIGZsb2F0IHN0YXJ0T2Zmc2V0Q29tbW9uID0gcHJvamVjdF9waXhlbF9zaXplKGluc3RhbmNlRW5kcG9pbnRPZmZzZXRzWzBdKTtcbiAgZmxvYXQgZW5kT2Zmc2V0Q29tbW9uID0gcHJvamVjdF9waXhlbF9zaXplKGluc3RhbmNlRW5kcG9pbnRPZmZzZXRzWzFdKTtcbiAgZmxvYXQgZW5kcG9pbnRPZmZzZXQgPSBtaXgoXG4gICAgY2xhbXAoc3RhcnRPZmZzZXRDb21tb24sIDAuMCwgbGVuZ3RoQ29tbW9uKi4yKSxcbiAgICAtY2xhbXAoZW5kT2Zmc2V0Q29tbW9uLCAwLjAsIGxlbmd0aENvbW1vbiouMiksXG4gICAgcG9zaXRpb25zLnhcbiAgKTtcblxuICB2ZWMyIGZsb3dsaW5lRGlyID0gbm9ybWFsaXplKHRhcmdldF9jb21tb25zcGFjZS54eSAtIHNvdXJjZV9jb21tb25zcGFjZS54eSk7XG4gIHZlYzIgcGVycGVuZGljdWxhckRpciA9IHZlYzIoLWZsb3dsaW5lRGlyLnksIGZsb3dsaW5lRGlyLngpO1xuICB2ZWMyIG5vcm1hbHNDb21tb24gPSBwcm9qZWN0X3BpeGVsX3NpemUobm9ybWFscy54eSk7XG4gIGZsb2F0IGdhcENvbW1vbiA9IHByb2plY3RfcGl4ZWxfc2l6ZShnYXApO1xuICB2ZWMzIG9mZnNldENvbW1vbiA9IHZlYzMoXG4gICAgZmxvd2xpbmVEaXIgKiAoaW5zdGFuY2VUaGlja25lc3MgKiBsaW1pdGVkT2Zmc2V0RGlzdGFuY2VzWzFdICsgbm9ybWFsc0NvbW1vbi55ICsgZW5kcG9pbnRPZmZzZXQgKiAxLjA1KSAtXG4gICAgcGVycGVuZGljdWxhckRpciAqIChpbnN0YW5jZVRoaWNrbmVzcyAqIGxpbWl0ZWRPZmZzZXREaXN0YW5jZXNbMF0gKyBnYXBDb21tb24gKyBub3JtYWxzQ29tbW9uLngpLFxuICAgIDAuMFxuICApO1xuICBcbiAgREVDS0dMX0ZJTFRFUl9TSVpFKG9mZnNldENvbW1vbiwgZ2VvbWV0cnkpO1xuICB2ZWM0IHBvc2l0aW9uX2NvbW1vbnNwYWNlID0gbWl4KHNvdXJjZV9jb21tb25zcGFjZSwgdGFyZ2V0X2NvbW1vbnNwYWNlLCBzb3VyY2VPclRhcmdldCk7XG4gIHZlYzQgb2Zmc2V0X2NvbW1vbnNwYWNlID0gdmVjNChvZmZzZXRDb21tb24sIDAuMCk7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdF9jb21tb25fcG9zaXRpb25fdG9fY2xpcHNwYWNlKHBvc2l0aW9uX2NvbW1vbnNwYWNlICsgb2Zmc2V0X2NvbW1vbnNwYWNlKTtcbiAgICAgIFxuICBERUNLR0xfRklMVEVSX0dMX1BPU0lUSU9OKGdsX1Bvc2l0aW9uLCBnZW9tZXRyeSk7XG4gIFxuICB2ZWM0IGZpbGxDb2xvciA9IHZlYzQoaW5zdGFuY2VDb2xvcnMucmdiLCBpbnN0YW5jZUNvbG9ycy5hICogb3BhY2l0eSkgLyAyNTUuO1xuICBpZiAoaW5zdGFuY2VQaWNrYWJsZSA8PSAwLjUpIHtcbiAgICB2Q29sb3IgPSBtaXgoZmlsbENvbG9yLCB2ZWM0KG91dGxpbmVDb2xvci54eXosIGluc3RhbmNlVGhpY2tuZXNzKSwgbm9ybWFscy56KTtcbiAgfSBlbHNlIHtcbiAgICB2Q29sb3IgPSBtaXgoZmlsbENvbG9yLCB2ZWM0KG91dGxpbmVDb2xvci54eXosIG91dGxpbmVDb2xvci53ICogZmlsbENvbG9yLncpLCBub3JtYWxzLnopO1xuICB9XG4gIERFQ0tHTF9GSUxURVJfQ09MT1IodkNvbG9yLCBnZW9tZXRyeSk7XG59XG5gO1xuIl19
@@ -0,0 +1,3 @@
1
+ import FlowLinesLayer from './FlowLinesLayer';
2
+ export default FlowLinesLayer;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/FlowLinesLayer/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,eAAe,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var FlowLinesLayer_1 = __importDefault(require("./FlowLinesLayer"));
7
+ exports.default = FlowLinesLayer_1.default;
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRmxvd0xpbmVzTGF5ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvRUFBOEM7QUFFOUMsa0JBQWUsd0JBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGbG93TGluZXNMYXllciBmcm9tICcuL0Zsb3dMaW5lc0xheWVyJztcblxuZXhwb3J0IGRlZmF1bHQgRmxvd0xpbmVzTGF5ZXI7XG4iXX0=
@@ -1,28 +1,32 @@
1
1
  import { CompositeLayer } from '@deck.gl/core';
2
- import { FlowLinesLayerAttributes, FlowMapData, FlowMapDataAccessors, FlowMapDataProvider, LayersData, FlowMapAggregateAccessors } from '@flowmap.gl/data';
3
- import { FlowLayerPickingInfo, LayerProps } from './types';
4
- export declare type FlowMapLayerProps<L, F> = {
5
- data: FlowMapData<L, F> | FlowMapDataProvider<L, F>;
2
+ import { FlowLinesLayerAttributes, FlowmapData, FlowmapDataAccessors, FlowmapDataProvider, LayersData, FlowmapAggregateAccessors } from '@flowmap.gl/data';
3
+ import { FlowmapLayerPickingInfo, LayerProps } from './types';
4
+ export declare type FlowmapLayerProps<L, F> = {
5
+ data?: FlowmapData<L, F>;
6
+ dataProvider?: FlowmapDataProvider<L, F>;
6
7
  locationTotalsEnabled?: boolean;
7
8
  adaptiveScalesEnabled?: boolean;
8
9
  animationEnabled?: boolean;
9
10
  clusteringEnabled?: boolean;
10
11
  clusteringLevel?: number;
11
12
  fadeEnabled?: boolean;
13
+ fadeOpacityEnabled?: boolean;
12
14
  clusteringAuto?: boolean;
13
15
  darkMode?: boolean;
14
16
  fadeAmount?: number;
15
- colorScheme?: string;
16
- onHover?: (info: FlowLayerPickingInfo<L, F> | undefined, event: SourceEvent) => void;
17
- onClick?: (info: FlowLayerPickingInfo<L, F>, event: SourceEvent) => void;
18
- } & Partial<FlowMapDataAccessors<L, F>> & LayerProps;
17
+ colorScheme?: string | string[];
18
+ highlightColor?: string | number[];
19
+ maxTopFlowsDisplayNum?: number;
20
+ onHover?: (info: FlowmapLayerPickingInfo<L, F> | undefined, event: SourceEvent) => void;
21
+ onClick?: (info: FlowmapLayerPickingInfo<L, F>, event: SourceEvent) => void;
22
+ } & Partial<FlowmapDataAccessors<L, F>> & LayerProps;
19
23
  declare enum HighlightType {
20
24
  LOCATION = "location",
21
25
  FLOW = "flow"
22
26
  }
23
27
  declare type HighlightedLocationObject = {
24
28
  type: HighlightType.LOCATION;
25
- centroid: [number, number];
29
+ coords: [number, number];
26
30
  radius: number;
27
31
  };
28
32
  declare type HighlightedFlowObject = {
@@ -31,15 +35,16 @@ declare type HighlightedFlowObject = {
31
35
  };
32
36
  declare type HighlightedObject = HighlightedLocationObject | HighlightedFlowObject;
33
37
  declare type State<L, F> = {
34
- accessors: FlowMapAggregateAccessors<L, F>;
35
- dataProvider: FlowMapDataProvider<L, F>;
38
+ accessors: FlowmapAggregateAccessors<L, F>;
39
+ dataProvider: FlowmapDataProvider<L, F>;
36
40
  layersData: LayersData | undefined;
37
41
  highlightedObject: HighlightedObject | undefined;
42
+ pickingInfo: FlowmapLayerPickingInfo<L, F> | undefined;
38
43
  };
39
44
  export declare type SourceEvent = {
40
45
  srcEvent: MouseEvent;
41
46
  };
42
- export default class FlowMapLayer<L, F> extends CompositeLayer {
47
+ export default class FlowmapLayer<L, F> extends CompositeLayer {
43
48
  static defaultProps: {
44
49
  darkMode: boolean;
45
50
  fadeAmount: number;
@@ -47,24 +52,28 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
47
52
  animationEnabled: boolean;
48
53
  clusteringEnabled: boolean;
49
54
  fadeEnabled: boolean;
55
+ fadeOpacityEnabled: boolean;
50
56
  clusteringAuto: boolean;
51
57
  clusteringLevel: undefined;
52
58
  adaptiveScalesEnabled: boolean;
53
59
  colorScheme: string;
60
+ highlightColor: string;
61
+ maxTopFlowsDisplayNum: number;
54
62
  };
55
63
  state: State<L, F> | undefined;
56
- constructor(props: FlowMapLayerProps<L, F>);
64
+ constructor(props: FlowmapLayerProps<L, F>);
57
65
  initializeState(): void;
66
+ getPickingInfo({ info }: Record<string, any>): any;
58
67
  private _updateAccessors;
59
- private _makeDataProvider;
68
+ private _getOrMakeDataProvider;
60
69
  private _updateDataProvider;
61
70
  shouldUpdateState(params: Record<string, any>): boolean;
62
71
  updateState({ oldProps, props, changeFlags }: Record<string, any>): void;
63
72
  private _getSettingsState;
64
- private _getFlowMapState;
65
- private _getFlowLayerPickingInfo;
73
+ private _getFlowmapState;
74
+ private _getFlowmapLayerPickingInfo;
66
75
  private _getHighlightedObject;
67
76
  renderLayers(): Array<any>;
68
77
  }
69
78
  export {};
70
- //# sourceMappingURL=FlowMapLayer.d.ts.map
79
+ //# sourceMappingURL=FlowmapLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowmapLayer.d.ts","sourceRoot":"","sources":["../src/FlowmapLayer.ts"],"names":[],"mappings":"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"}