@flowmap.gl/layers 8.0.0-alpha.12 → 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 (47) hide show
  1. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.d.ts +76 -0
  2. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.d.ts.map +1 -0
  3. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayer.js +178 -0
  4. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.d.ts +3 -0
  5. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.d.ts.map +1 -0
  6. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerFragment.glsl.js +21 -0
  7. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.d.ts +3 -0
  8. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.d.ts.map +1 -0
  9. package/dist-es5/AnimatedFlowLinesLayer/AnimatedFlowLinesLayerVertex.glsl.js +21 -0
  10. package/dist-es5/AnimatedFlowLinesLayer/index.d.ts +3 -0
  11. package/dist-es5/AnimatedFlowLinesLayer/index.d.ts.map +1 -0
  12. package/dist-es5/AnimatedFlowLinesLayer/index.js +8 -0
  13. package/dist-es5/FlowCirclesLayer/FlowCirclesLayer.d.ts +59 -0
  14. package/dist-es5/FlowCirclesLayer/FlowCirclesLayer.d.ts.map +1 -0
  15. package/dist-es5/FlowCirclesLayer/FlowCirclesLayer.js +149 -0
  16. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts +3 -0
  17. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts.map +1 -0
  18. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.js +21 -0
  19. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts +3 -0
  20. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts.map +1 -0
  21. package/dist-es5/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.js +21 -0
  22. package/dist-es5/FlowCirclesLayer/index.d.ts +3 -0
  23. package/dist-es5/FlowCirclesLayer/index.d.ts.map +1 -0
  24. package/dist-es5/FlowCirclesLayer/index.js +8 -0
  25. package/dist-es5/FlowLinesLayer/FlowLinesLayer.d.ts +64 -0
  26. package/dist-es5/FlowLinesLayer/FlowLinesLayer.d.ts.map +1 -0
  27. package/dist-es5/FlowLinesLayer/FlowLinesLayer.js +217 -0
  28. package/dist-es5/FlowLinesLayer/FlowLinesLayerFragment.glsl.d.ts +3 -0
  29. package/dist-es5/FlowLinesLayer/FlowLinesLayerFragment.glsl.d.ts.map +1 -0
  30. package/dist-es5/FlowLinesLayer/FlowLinesLayerFragment.glsl.js +21 -0
  31. package/dist-es5/FlowLinesLayer/FlowLinesLayerVertex.glsl.d.ts +3 -0
  32. package/dist-es5/FlowLinesLayer/FlowLinesLayerVertex.glsl.d.ts.map +1 -0
  33. package/dist-es5/FlowLinesLayer/FlowLinesLayerVertex.glsl.js +21 -0
  34. package/dist-es5/FlowLinesLayer/index.d.ts +3 -0
  35. package/dist-es5/FlowLinesLayer/index.d.ts.map +1 -0
  36. package/dist-es5/FlowLinesLayer/index.js +8 -0
  37. package/dist-es5/FlowmapLayer.d.ts +79 -0
  38. package/dist-es5/FlowmapLayer.d.ts.map +1 -0
  39. package/dist-es5/FlowmapLayer.js +476 -0
  40. package/dist-es5/index.d.ts +7 -0
  41. package/dist-es5/index.d.ts.map +1 -0
  42. package/dist-es5/index.js +26 -0
  43. package/dist-es5/types.d.ts +36 -0
  44. package/dist-es5/types.d.ts.map +1 -0
  45. package/dist-es5/types.js +23 -0
  46. package/package.json +6 -4
  47. package/tsconfig.es5.json +11 -0
@@ -0,0 +1,476 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (_) try {
44
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ var __read = (this && this.__read) || function (o, n) {
65
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
66
+ if (!m) return o;
67
+ var i = m.call(o), r, ar = [], e;
68
+ try {
69
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
70
+ }
71
+ catch (error) { e = { error: error }; }
72
+ finally {
73
+ try {
74
+ if (r && !r.done && (m = i["return"])) m.call(i);
75
+ }
76
+ finally { if (e) throw e.error; }
77
+ }
78
+ return ar;
79
+ };
80
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
81
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
82
+ if (ar || !(i in from)) {
83
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
84
+ ar[i] = from[i];
85
+ }
86
+ }
87
+ return to.concat(ar || Array.prototype.slice.call(from));
88
+ };
89
+ var __importDefault = (this && this.__importDefault) || function (mod) {
90
+ return (mod && mod.__esModule) ? mod : { "default": mod };
91
+ };
92
+ Object.defineProperty(exports, "__esModule", { value: true });
93
+ /*
94
+ * Copyright 2022 FlowmapBlue
95
+ *
96
+ * Licensed under the Apache License, Version 2.0 (the "License");
97
+ * you may not use this file except in compliance with the License.
98
+ * You may obtain a copy of the License at
99
+ *
100
+ * http://www.apache.org/licenses/LICENSE-2.0
101
+ *
102
+ * Unless required by applicable law or agreed to in writing, software
103
+ * distributed under the License is distributed on an "AS IS" BASIS,
104
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
105
+ * See the License for the specific language governing permissions and
106
+ * limitations under the License.
107
+ *
108
+ */
109
+ var core_1 = require("@deck.gl/core");
110
+ var layers_1 = require("@deck.gl/layers");
111
+ var data_1 = require("@flowmap.gl/data");
112
+ var AnimatedFlowLinesLayer_1 = __importDefault(require("./AnimatedFlowLinesLayer"));
113
+ var FlowCirclesLayer_1 = __importDefault(require("./FlowCirclesLayer"));
114
+ var FlowLinesLayer_1 = __importDefault(require("./FlowLinesLayer"));
115
+ var types_1 = require("./types");
116
+ var HighlightType;
117
+ (function (HighlightType) {
118
+ HighlightType["LOCATION"] = "location";
119
+ HighlightType["FLOW"] = "flow";
120
+ })(HighlightType || (HighlightType = {}));
121
+ var FlowmapLayer = /** @class */ (function (_super) {
122
+ __extends(FlowmapLayer, _super);
123
+ function FlowmapLayer(props) {
124
+ var _this = _super.call(this, __assign(__assign({}, props), { dataProvider: {
125
+ // To avoid deck.gl props diffing on comlink worker proxy causing an exception
126
+ dataProvider: props.dataProvider,
127
+ }, onHover: function (info, event) {
128
+ // TODO: if (lastHoverEventStartTimeRef > startTime) {
129
+ // // Skipping, because this is not the latest hover event
130
+ // return;
131
+ // }
132
+ _this.setState({ highlightedObject: _this._getHighlightedObject(info) });
133
+ var onHover = props.onHover;
134
+ if (onHover) {
135
+ _this._getFlowmapLayerPickingInfo(info).then(function (info) {
136
+ _this.setState({ pickingInfo: info });
137
+ onHover(info, event);
138
+ });
139
+ }
140
+ }, onClick: function (info, event) {
141
+ var onClick = props.onClick;
142
+ if (onClick) {
143
+ _this._getFlowmapLayerPickingInfo(info).then(function (info) {
144
+ _this.setState({ pickingInfo: info });
145
+ if (info) {
146
+ onClick(info, event);
147
+ }
148
+ });
149
+ }
150
+ } })) || this;
151
+ return _this;
152
+ }
153
+ FlowmapLayer.prototype.initializeState = function () {
154
+ this.state = {
155
+ accessors: new data_1.FlowmapAggregateAccessors(this.props),
156
+ dataProvider: this._getOrMakeDataProvider(),
157
+ layersData: undefined,
158
+ highlightedObject: undefined,
159
+ pickingInfo: undefined,
160
+ };
161
+ };
162
+ FlowmapLayer.prototype.getPickingInfo = function (_a) {
163
+ var _b, _c;
164
+ var info = _a.info;
165
+ // This is for onHover event handlers set on the <DeckGL> component
166
+ if (!info.object) {
167
+ var object = (_c = (_b = this.state) === null || _b === void 0 ? void 0 : _b.pickingInfo) === null || _c === void 0 ? void 0 : _c.object;
168
+ if (object) {
169
+ return __assign(__assign({}, info), { object: object, picked: true });
170
+ }
171
+ }
172
+ return info;
173
+ };
174
+ FlowmapLayer.prototype._updateAccessors = function () {
175
+ var _a, _b;
176
+ (_b = (_a = this.state) === null || _a === void 0 ? void 0 : _a.dataProvider) === null || _b === void 0 ? void 0 : _b.setAccessors(this.props);
177
+ this.setState({ accessors: new data_1.FlowmapAggregateAccessors(this.props) });
178
+ };
179
+ FlowmapLayer.prototype._getOrMakeDataProvider = function () {
180
+ var _a = this.props, data = _a.data, dataProvider = _a.dataProvider;
181
+ if ((0, data_1.isFlowmapDataProvider)(dataProvider === null || dataProvider === void 0 ? void 0 : dataProvider.dataProvider)) {
182
+ return dataProvider.dataProvider;
183
+ }
184
+ else if ((0, data_1.isFlowmapData)(data)) {
185
+ var dataProvider_1 = new data_1.LocalFlowmapDataProvider(this.props);
186
+ dataProvider_1.setFlowmapData(data);
187
+ return dataProvider_1;
188
+ }
189
+ throw new Error('FlowmapLayer: data must be a FlowmapDataProvider or FlowmapData');
190
+ };
191
+ FlowmapLayer.prototype._updateDataProvider = function () {
192
+ this.setState({ dataProvider: this._getOrMakeDataProvider() });
193
+ };
194
+ FlowmapLayer.prototype.shouldUpdateState = function (params) {
195
+ var changeFlags = params.changeFlags;
196
+ // if (this._viewportChanged()) {
197
+ // return true;
198
+ // }
199
+ if (changeFlags.viewportChanged) {
200
+ return true;
201
+ }
202
+ return _super.prototype.shouldUpdateState.call(this, params);
203
+ // TODO: be smarter on when to update
204
+ // (e.g. ignore viewport changes when adaptiveScalesEnabled and clustering are false)
205
+ };
206
+ FlowmapLayer.prototype.updateState = function (_a) {
207
+ var _this = this;
208
+ var oldProps = _a.oldProps, props = _a.props, changeFlags = _a.changeFlags;
209
+ var _b = this.state || {}, dataProvider = _b.dataProvider, highlightedObject = _b.highlightedObject;
210
+ if (!dataProvider) {
211
+ return;
212
+ }
213
+ if (changeFlags.propsChanged) {
214
+ // this._updateAccessors();
215
+ }
216
+ if (changeFlags.dataChanged) {
217
+ this._updateDataProvider();
218
+ }
219
+ if (changeFlags.viewportChanged || changeFlags.dataChanged) {
220
+ this.setState({
221
+ highlightedObject: undefined,
222
+ });
223
+ }
224
+ if (changeFlags.viewportChanged ||
225
+ changeFlags.propsOrDataChanged // TODO can we ignore accessor props changes?
226
+ ) {
227
+ dataProvider.setFlowmapState(this._getFlowmapState());
228
+ (function () { return __awaiter(_this, void 0, void 0, function () {
229
+ var layersData;
230
+ return __generator(this, function (_a) {
231
+ switch (_a.label) {
232
+ case 0: return [4 /*yield*/, dataProvider.getLayersData()];
233
+ case 1:
234
+ layersData = _a.sent();
235
+ this.setState({ layersData: layersData });
236
+ return [2 /*return*/];
237
+ }
238
+ });
239
+ }); })();
240
+ }
241
+ };
242
+ FlowmapLayer.prototype._getSettingsState = function () {
243
+ var _a = this.props, locationTotalsEnabled = _a.locationTotalsEnabled, adaptiveScalesEnabled = _a.adaptiveScalesEnabled, animationEnabled = _a.animationEnabled, clusteringEnabled = _a.clusteringEnabled, clusteringLevel = _a.clusteringLevel, fadeEnabled = _a.fadeEnabled, fadeOpacityEnabled = _a.fadeOpacityEnabled, clusteringAuto = _a.clusteringAuto, darkMode = _a.darkMode, fadeAmount = _a.fadeAmount, colorScheme = _a.colorScheme, highlightColor = _a.highlightColor, maxTopFlowsDisplayNum = _a.maxTopFlowsDisplayNum;
244
+ return {
245
+ locationTotalsEnabled: locationTotalsEnabled,
246
+ adaptiveScalesEnabled: adaptiveScalesEnabled,
247
+ animationEnabled: animationEnabled,
248
+ clusteringEnabled: clusteringEnabled,
249
+ clusteringLevel: clusteringLevel,
250
+ fadeEnabled: fadeEnabled,
251
+ fadeOpacityEnabled: fadeOpacityEnabled,
252
+ clusteringAuto: clusteringAuto,
253
+ darkMode: darkMode,
254
+ fadeAmount: fadeAmount,
255
+ colorScheme: colorScheme,
256
+ highlightColor: highlightColor,
257
+ maxTopFlowsDisplayNum: maxTopFlowsDisplayNum,
258
+ };
259
+ };
260
+ FlowmapLayer.prototype._getFlowmapState = function () {
261
+ return {
262
+ viewport: pickViewportProps(this.context.viewport),
263
+ filterState: {
264
+ selectedLocations: undefined,
265
+ locationFilterMode: data_1.LocationFilterMode.ALL,
266
+ selectedTimeRange: undefined,
267
+ },
268
+ settingsState: this._getSettingsState(),
269
+ };
270
+ };
271
+ FlowmapLayer.prototype._getFlowmapLayerPickingInfo = function (info) {
272
+ var _a;
273
+ return __awaiter(this, void 0, void 0, function () {
274
+ var index, sourceLayer, _b, dataProvider, accessors, commonInfo, flow, _c, origin_1, dest, location_1, _d, id, name_1, totals, circleAttributes, circleRadius;
275
+ return __generator(this, function (_e) {
276
+ switch (_e.label) {
277
+ case 0:
278
+ index = info.index, sourceLayer = info.sourceLayer;
279
+ _b = this.state || {}, dataProvider = _b.dataProvider, accessors = _b.accessors;
280
+ if (!dataProvider || !accessors) {
281
+ return [2 /*return*/, undefined];
282
+ }
283
+ commonInfo = __assign(__assign({}, info), { picked: info.picked, layer: info.layer, index: info.index, x: info.x, y: info.y, coordinate: info.coordinate, event: info.event });
284
+ if (!(sourceLayer instanceof FlowLinesLayer_1.default ||
285
+ sourceLayer instanceof AnimatedFlowLinesLayer_1.default)) return [3 /*break*/, 7];
286
+ if (!(index === -1)) return [3 /*break*/, 1];
287
+ _c = undefined;
288
+ return [3 /*break*/, 3];
289
+ case 1: return [4 /*yield*/, dataProvider.getFlowByIndex(index)];
290
+ case 2:
291
+ _c = _e.sent();
292
+ _e.label = 3;
293
+ case 3:
294
+ flow = _c;
295
+ if (!flow) return [3 /*break*/, 6];
296
+ return [4 /*yield*/, dataProvider.getLocationById(accessors.getFlowOriginId(flow))];
297
+ case 4:
298
+ origin_1 = _e.sent();
299
+ return [4 /*yield*/, dataProvider.getLocationById(accessors.getFlowDestId(flow))];
300
+ case 5:
301
+ dest = _e.sent();
302
+ if (origin_1 && dest) {
303
+ return [2 /*return*/, __assign(__assign({}, commonInfo), { object: {
304
+ type: types_1.PickingType.FLOW,
305
+ flow: flow,
306
+ origin: origin_1,
307
+ dest: dest,
308
+ count: accessors.getFlowMagnitude(flow),
309
+ } })];
310
+ }
311
+ _e.label = 6;
312
+ case 6: return [3 /*break*/, 12];
313
+ case 7:
314
+ if (!(sourceLayer instanceof FlowCirclesLayer_1.default)) return [3 /*break*/, 12];
315
+ if (!(index === -1)) return [3 /*break*/, 8];
316
+ _d = undefined;
317
+ return [3 /*break*/, 10];
318
+ case 8: return [4 /*yield*/, dataProvider.getLocationByIndex(index)];
319
+ case 9:
320
+ _d = _e.sent();
321
+ _e.label = 10;
322
+ case 10:
323
+ location_1 = _d;
324
+ if (!location_1) return [3 /*break*/, 12];
325
+ id = accessors.getLocationId(location_1);
326
+ name_1 = accessors.getLocationName(location_1);
327
+ return [4 /*yield*/, dataProvider.getTotalsForLocation(id)];
328
+ case 11:
329
+ totals = _e.sent();
330
+ circleAttributes = (((_a = this.state) === null || _a === void 0 ? void 0 : _a.layersData) || {}).circleAttributes;
331
+ if (totals && circleAttributes) {
332
+ circleRadius = (0, data_1.getOuterCircleRadiusByIndex)(circleAttributes, info.index);
333
+ return [2 /*return*/, __assign(__assign({}, commonInfo), { object: {
334
+ type: types_1.PickingType.LOCATION,
335
+ location: location_1,
336
+ id: id,
337
+ name: name_1,
338
+ totals: totals,
339
+ circleRadius: circleRadius,
340
+ } })];
341
+ }
342
+ _e.label = 12;
343
+ case 12: return [2 /*return*/, undefined];
344
+ }
345
+ });
346
+ });
347
+ };
348
+ FlowmapLayer.prototype._getHighlightedObject = function (info) {
349
+ var _a, _b;
350
+ var index = info.index, sourceLayer = info.sourceLayer;
351
+ if (index < 0)
352
+ return undefined;
353
+ if (sourceLayer instanceof FlowLinesLayer_1.default ||
354
+ sourceLayer instanceof AnimatedFlowLinesLayer_1.default) {
355
+ var lineAttributes = (((_a = this.state) === null || _a === void 0 ? void 0 : _a.layersData) || {}).lineAttributes;
356
+ if (lineAttributes) {
357
+ var attrs = (0, data_1.getFlowLineAttributesByIndex)(lineAttributes, index);
358
+ if (this.props.fadeOpacityEnabled) {
359
+ attrs = __assign(__assign({}, attrs), { attributes: __assign(__assign({}, attrs.attributes), { getColor: __assign(__assign({}, attrs.attributes.getColor), { value: new Uint8Array(__spreadArray(__spreadArray([], __read(attrs.attributes.getColor.value.slice(0, 3)), false), [
360
+ 255, // the highlight color should be always opaque
361
+ ], false)) }) }) });
362
+ }
363
+ return {
364
+ type: HighlightType.FLOW,
365
+ lineAttributes: attrs,
366
+ };
367
+ }
368
+ }
369
+ else if (sourceLayer instanceof FlowCirclesLayer_1.default) {
370
+ var circleAttributes = (((_b = this.state) === null || _b === void 0 ? void 0 : _b.layersData) || {}).circleAttributes;
371
+ if (circleAttributes) {
372
+ return {
373
+ type: HighlightType.LOCATION,
374
+ coords: (0, data_1.getLocationCoordsByIndex)(circleAttributes, index),
375
+ radius: (0, data_1.getOuterCircleRadiusByIndex)(circleAttributes, index),
376
+ };
377
+ }
378
+ }
379
+ return undefined;
380
+ };
381
+ FlowmapLayer.prototype.renderLayers = function () {
382
+ var _a;
383
+ var layers = [];
384
+ if ((_a = this.state) === null || _a === void 0 ? void 0 : _a.layersData) {
385
+ var _b = this.state, layersData = _b.layersData, highlightedObject = _b.highlightedObject;
386
+ var _c = layersData || {}, circleAttributes = _c.circleAttributes, lineAttributes = _c.lineAttributes;
387
+ if (circleAttributes && lineAttributes) {
388
+ var flowmapColors = (0, data_1.getFlowmapColors)(this._getSettingsState());
389
+ var outlineColor = (0, data_1.colorAsRgba)(flowmapColors.outlineColor || (this.props.darkMode ? '#000' : '#fff'));
390
+ var commonLineLayerProps = {
391
+ data: lineAttributes,
392
+ parameters: __assign(__assign({}, this.props.parameters), {
393
+ // prevent z-fighting at non-zero bearing/pitch
394
+ depthTest: false }),
395
+ };
396
+ if (this.props.animationEnabled) {
397
+ layers.push(
398
+ // @ts-ignore
399
+ new AnimatedFlowLinesLayer_1.default(__assign({}, this.getSubLayerProps(__assign(__assign({}, commonLineLayerProps), { id: 'animated-flow-lines', drawOutline: false, thicknessUnit: 20 })))));
400
+ }
401
+ else {
402
+ layers.push(new FlowLinesLayer_1.default(__assign({}, this.getSubLayerProps(__assign(__assign({}, commonLineLayerProps), { id: 'flow-lines', drawOutline: true, outlineColor: outlineColor })))));
403
+ }
404
+ layers.push(new FlowCirclesLayer_1.default(this.getSubLayerProps({
405
+ id: 'circles',
406
+ data: circleAttributes,
407
+ emptyColor: this.props.darkMode
408
+ ? [0, 0, 0, 255]
409
+ : [255, 255, 255, 255],
410
+ outlineEmptyMix: 0.4,
411
+ })));
412
+ if (highlightedObject) {
413
+ switch (highlightedObject.type) {
414
+ case HighlightType.LOCATION:
415
+ layers.push(new layers_1.ScatterplotLayer(__assign({}, this.getSubLayerProps({
416
+ id: 'location-highlight',
417
+ data: [highlightedObject],
418
+ pickable: false,
419
+ antialiasing: true,
420
+ stroked: true,
421
+ filled: false,
422
+ lineWidthUnits: 'pixels',
423
+ getLineWidth: 2,
424
+ radiusUnits: 'pixels',
425
+ getRadius: function (d) { return d.radius; },
426
+ getLineColor: (0, data_1.colorAsRgba)(this.props.highlightColor),
427
+ getPosition: function (d) { return d.coords; },
428
+ }))));
429
+ break;
430
+ case HighlightType.FLOW:
431
+ layers.push(new FlowLinesLayer_1.default(__assign({}, this.getSubLayerProps({
432
+ id: 'flow-highlight',
433
+ data: highlightedObject.lineAttributes,
434
+ drawOutline: true,
435
+ pickable: false,
436
+ outlineColor: (0, data_1.colorAsRgba)(this.props.highlightColor),
437
+ outlineThickness: 1,
438
+ }))));
439
+ break;
440
+ }
441
+ }
442
+ }
443
+ }
444
+ return layers;
445
+ };
446
+ FlowmapLayer.defaultProps = {
447
+ darkMode: true,
448
+ fadeAmount: 50,
449
+ locationTotalsEnabled: true,
450
+ animationEnabled: false,
451
+ clusteringEnabled: true,
452
+ fadeEnabled: true,
453
+ fadeOpacityEnabled: false,
454
+ clusteringAuto: true,
455
+ clusteringLevel: undefined,
456
+ adaptiveScalesEnabled: true,
457
+ colorScheme: 'Teal',
458
+ highlightColor: 'orange',
459
+ maxTopFlowsDisplayNum: 5000,
460
+ };
461
+ return FlowmapLayer;
462
+ }(core_1.CompositeLayer));
463
+ exports.default = FlowmapLayer;
464
+ function pickViewportProps(viewport) {
465
+ var width = viewport.width, height = viewport.height, longitude = viewport.longitude, latitude = viewport.latitude, zoom = viewport.zoom, pitch = viewport.pitch, bearing = viewport.bearing;
466
+ return {
467
+ width: width,
468
+ height: height,
469
+ longitude: longitude,
470
+ latitude: latitude,
471
+ zoom: zoom,
472
+ pitch: pitch,
473
+ bearing: bearing,
474
+ };
475
+ }
476
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcExheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBMYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILHNDQUE2QztBQUM3QywwQ0FBaUQ7QUFDakQseUNBaUIwQjtBQUMxQixvRkFBOEQ7QUFDOUQsd0VBQWtEO0FBQ2xELG9FQUE4QztBQUM5QyxpQ0FLaUI7QUEwQmpCLElBQUssYUFHSjtBQUhELFdBQUssYUFBYTtJQUNoQixzQ0FBcUIsQ0FBQTtJQUNyQiw4QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhJLGFBQWEsS0FBYixhQUFhLFFBR2pCO0FBeUJEO0lBQWdELGdDQUFjO0lBa0I1RCxzQkFBbUIsS0FBOEI7UUFBakQsWUFDRSx3Q0FDSyxLQUFLLEtBQ1IsWUFBWSxFQUFFO2dCQUNaLDhFQUE4RTtnQkFDOUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2FBQ2pDLEVBQ0QsT0FBTyxFQUFFLFVBQUMsSUFBc0IsRUFBRSxLQUFrQjtnQkFDbEQsc0RBQXNEO2dCQUN0RCw0REFBNEQ7Z0JBQzVELFlBQVk7Z0JBQ1osSUFBSTtnQkFDSixLQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsaUJBQWlCLEVBQUUsS0FBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQztnQkFDOUQsSUFBQSxPQUFPLEdBQUksS0FBSyxRQUFULENBQVU7Z0JBQ3hCLElBQUksT0FBTyxFQUFFO29CQUNYLEtBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFJO3dCQUMvQyxLQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksRUFB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MUIscUJBQXFCLEVBQUUsSUFBSTtRQUMzQixXQUFXLEVBQUUsTUFBTTtRQUNuQixjQUFjLEVBQUUsUUFBUTtRQUN4QixxQkFBcUIsRUFBRSxJQUFJO0tBQzVCLENBQUM7SUF3WUosbUJBQUM7Q0FBQSxBQXZaRCxDQUFnRCxxQkFBYyxHQXVaN0Q7a0JBdlpvQixZQUFZO0FBeVpqQyxTQUFTLGlCQUFpQixDQUFDLFFBQTZCO0lBQy9DLElBQUEsS0FBSyxHQUF1RCxRQUFRLE1BQS9ELEVBQUUsTUFBTSxHQUErQyxRQUFRLE9BQXZELEVBQUUsU0FBUyxHQUFvQyxRQUFRLFVBQTVDLEVBQUUsUUFBUSxHQUEwQixRQUFRLFNBQWxDLEVBQUUsSUFBSSxHQUFvQixRQUFRLEtBQTVCLEVBQUUsS0FBSyxHQUFhLFFBQVEsTUFBckIsRUFBRSxPQUFPLEdBQUksUUFBUSxRQUFaLENBQWE7SUFDNUUsT0FBTztRQUNMLEtBQUssT0FBQTtRQUNMLE1BQU0sUUFBQTtRQUNOLFNBQVMsV0FBQTtRQUNULFFBQVEsVUFBQTtRQUNSLElBQUksTUFBQTtRQUNKLEtBQUssT0FBQTtRQUNMLE9BQU8sU0FBQTtLQUNSLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIyIEZsb3dtYXBCbHVlXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5pbXBvcnQge0NvbXBvc2l0ZUxheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7U2NhdHRlcnBsb3RMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGNvbG9yQXNSZ2JhLFxuICBGbG93TGluZXNMYXllckF0dHJpYnV0ZXMsXG4gIEZsb3dtYXBEYXRhLFxuICBGbG93bWFwRGF0YUFjY2Vzc29ycyxcbiAgRmxvd21hcERhdGFQcm92aWRlcixcbiAgZ2V0Rmxvd0xpbmVBdHRyaWJ1dGVzQnlJbmRleCxcbiAgZ2V0Rmxvd21hcENvbG9ycyxcbiAgZ2V0T3V0ZXJDaXJjbGVSYWRpdXNCeUluZGV4LFxuICBnZXRMb2NhdGlvbkNvb3Jkc0J5SW5kZXgsXG4gIGlzRmxvd21hcERhdGEsXG4gIGlzRmxvd21hcERhdGFQcm92aWRlcixcbiAgTGF5ZXJzRGF0YSxcbiAgTG9jYWxGbG93bWFwRGF0YVByb3ZpZGVyLFxuICBMb2NhdGlvbkZpbHRlck1vZGUsXG4gIFZpZXdwb3J0UHJvcHMsXG4gIEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnMsXG59IGZyb20gJ0BmbG93bWFwLmdsL2RhdGEnO1xuaW1wb3J0IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9BbmltYXRlZEZsb3dMaW5lc0xheWVyJztcbmltcG9ydCBGbG93Q2lyY2xlc0xheWVyIGZyb20gJy4vRmxvd0NpcmNsZXNMYXllcic7XG5pbXBvcnQgRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9GbG93TGluZXNMYXllcic7XG5pbXBvcnQge1xuICBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbyxcbiAgTGF5ZXJQcm9wcyxcbiAgUGlja2luZ0luZm8sXG4gIFBpY2tpbmdUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgRmxvd21hcExheWVyUHJvcHM8TCwgRj4gPSB7XG4gIGRhdGE/OiBGbG93bWFwRGF0YTxMLCBGPjtcbiAgZGF0YVByb3ZpZGVyPzogRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPjtcbiAgbG9jYXRpb25Ub3RhbHNFbmFibGVkPzogYm9vbGVhbjtcbiAgYWRhcHRpdmVTY2FsZXNFbmFibGVkPzogYm9vbGVhbjtcbiAgYW5pbWF0aW9uRW5hYmxlZD86IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgY2x1c3RlcmluZ0xldmVsPzogbnVtYmVyO1xuICBmYWRlRW5hYmxlZD86IGJvb2xlYW47XG4gIGZhZGVPcGFjaXR5RW5hYmxlZD86IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdBdXRvPzogYm9vbGVhbjtcbiAgZGFya01vZGU/OiBib29sZWFuO1xuICBmYWRlQW1vdW50PzogbnVtYmVyO1xuICBjb2xvclNjaGVtZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBoaWdobGlnaHRDb2xvcj86IHN0cmluZyB8IG51bWJlcltdO1xuICBtYXhUb3BGbG93c0Rpc3BsYXlOdW0/OiBudW1iZXI7XG4gIG9uSG92ZXI/OiAoXG4gICAgaW5mbzogRmxvd21hcExheWVyUGlja2luZ0luZm88TCwgRj4gfCB1bmRlZmluZWQsXG4gICAgZXZlbnQ6IFNvdXJjZUV2ZW50LFxuICApID0+IHZvaWQ7XG4gIG9uQ2xpY2s/OiAoaW5mbzogRmxvd21hcExheWVyUGlja2luZ0luZm88TCwgRj4sIGV2ZW50OiBTb3VyY2VFdmVudCkgPT4gdm9pZDtcbn0gJiBQYXJ0aWFsPEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+PiAmXG4gIExheWVyUHJvcHM7XG5cbmVudW0gSGlnaGxpZ2h0VHlwZSB7XG4gIExPQ0FUSU9OID0gJ2xvY2F0aW9uJyxcbiAgRkxPVyA9ICdmbG93Jyxcbn1cblxudHlwZSBIaWdobGlnaHRlZExvY2F0aW9uT2JqZWN0ID0ge1xuICB0eXBlOiBIaWdobGlnaHRUeXBlLkxPQ0FUSU9OO1xuICBjb29yZHM6IFtudW1iZXIsIG51bWJlcl07XG4gIHJhZGl1czogbnVtYmVyO1xufTtcblxudHlwZSBIaWdobGlnaHRlZEZsb3dPYmplY3QgPSB7XG4gIHR5cGU6IEhpZ2hsaWdodFR5cGUuRkxPVztcbiAgbGluZUF0dHJpYnV0ZXM6IEZsb3dMaW5lc0xheWVyQXR0cmlidXRlcztcbn07XG5cbnR5cGUgSGlnaGxpZ2h0ZWRPYmplY3QgPSBIaWdobGlnaHRlZExvY2F0aW9uT2JqZWN0IHwgSGlnaGxpZ2h0ZWRGbG93T2JqZWN0O1xuXG50eXBlIFN0YXRlPEwsIEY+ID0ge1xuICBhY2Nlc3NvcnM6IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnM8TCwgRj47XG4gIGRhdGFQcm92aWRlcjogRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPjtcbiAgbGF5ZXJzRGF0YTogTGF5ZXJzRGF0YSB8IHVuZGVmaW5lZDtcbiAgaGlnaGxpZ2h0ZWRPYmplY3Q6IEhpZ2hsaWdodGVkT2JqZWN0IHwgdW5kZWZpbmVkO1xuICBwaWNraW5nSW5mbzogRmxvd21hcExheWVyUGlja2luZ0luZm88TCwgRj4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBTb3VyY2VFdmVudCA9IHtzcmNFdmVudDogTW91c2VFdmVudH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3dtYXBMYXllcjxMLCBGPiBleHRlbmRzIENvbXBvc2l0ZUxheWVyIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkYXJrTW9kZTogdHJ1ZSxcbiAgICBmYWRlQW1vdW50OiA1MCxcbiAgICBsb2NhdGlvblRvdGFsc0VuYWJsZWQ6IHRydWUsXG4gICAgYW5pbWF0aW9uRW5hYmxlZDogZmFsc2UsXG4gICAgY2x1c3RlcmluZ0VuYWJsZWQ6IHRydWUsXG4gICAgZmFkZUVuYWJsZWQ6IHRydWUsXG4gICAgZmFkZU9wYWNpdHlFbmFibGVkOiBmYWxzZSxcbiAgICBjbHVzdGVyaW5nQXV0bzogdHJ1ZSxcbiAgICBjbHVzdGVyaW5nTGV2ZWw6IHVuZGVmaW5lZCxcbiAgICBhZGFwdGl2ZVNjYWxlc0VuYWJsZWQ6IHRydWUsXG4gICAgY29sb3JTY2hlbWU6ICdUZWFsJyxcbiAgICBoaWdobGlnaHRDb2xvcjogJ29yYW5nZScsXG4gICAgbWF4VG9wRmxvd3NEaXNwbGF5TnVtOiA1MDAwLFxuICB9O1xuICBzdGF0ZTogU3RhdGU8TCwgRj4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBGbG93bWFwTGF5ZXJQcm9wczxMLCBGPikge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGF0YVByb3ZpZGVyOiB7XG4gICAgICAgIC8vIFRvIGF2b2lkIGRlY2suZ2wgcHJvcHMgZGlmZmluZyBvbiBjb21saW5rIHdvcmtlciBwcm94eSBjYXVzaW5nIGFuIGV4Y2VwdGlvblxuICAgICAgICBkYXRhUHJvdmlkZXI6IHByb3BzLmRhdGFQcm92aWRlcixcbiAgICAgIH0sXG4gICAgICBvbkhvdmVyOiAoaW5mbzogUGlja2luZ0luZm88YW55PiwgZXZlbnQ6IFNvdXJjZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFRPRE86IGlmIChsYXN0SG92ZXJFdmVudFN0YXJ0VGltZVJlZiA+IHN0YXJ0VGltZSkge1xuICAgICAgICAvLyAgIC8vIFNraXBwaW5nLCBiZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBsYXRlc3QgaG92ZXIgZXZlbnRcbiAgICAgICAgLy8gICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aGlnaGxpZ2h0ZWRPYmplY3Q6IHRoaXMuX2dldEhpZ2hsaWdodGVkT2JqZWN0KGluZm8pfSk7XG4gICAgICAgIGNvbnN0IHtvbkhvdmVyfSA9IHByb3BzO1xuICAgICAgICBpZiAob25Ib3Zlcikge1xuICAgICAgICAgIHRoaXMuX2dldEZsb3dtYXBMYXllclBpY2tpbmdJbmZvKGluZm8pLnRoZW4oKGluZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3BpY2tpbmdJbmZvOiBpbmZvfSk7XG4gICAgICAgICAgICBvbkhvdmVyKGluZm8sIGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uQ2xpY2s6IChpbmZvOiBQaWNraW5nSW5mbzxhbnk+LCBldmVudDogU291cmNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qge29uQ2xpY2t9ID0gcHJvcHM7XG4gICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0Rmxvd21hcExheWVyUGlja2luZ0luZm8oaW5mbykudGhlbigoaW5mbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cGlja2luZ0luZm86IGluZm99KTtcbiAgICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICAgIG9uQ2xpY2soaW5mbywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhY2Nlc3NvcnM6IG5ldyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzPEwsIEY+KHRoaXMucHJvcHMpLFxuICAgICAgZGF0YVByb3ZpZGVyOiB0aGlzLl9nZXRPck1ha2VEYXRhUHJvdmlkZXIoKSxcbiAgICAgIGxheWVyc0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgIGhpZ2hsaWdodGVkT2JqZWN0OiB1bmRlZmluZWQsXG4gICAgICBwaWNraW5nSW5mbzogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBnZXRQaWNraW5nSW5mbyh7aW5mb306IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAvLyBUaGlzIGlzIGZvciBvbkhvdmVyIGV2ZW50IGhhbmRsZXJzIHNldCBvbiB0aGUgPERlY2tHTD4gY29tcG9uZW50XG4gICAgaWYgKCFpbmZvLm9iamVjdCkge1xuICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5zdGF0ZT8ucGlja2luZ0luZm8/Lm9iamVjdDtcbiAgICAgIGlmIChvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pbmZvLFxuICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmZvO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQWNjZXNzb3JzKCkge1xuICAgIHRoaXMuc3RhdGU/LmRhdGFQcm92aWRlcj8uc2V0QWNjZXNzb3JzKHRoaXMucHJvcHMpO1xuICAgIHRoaXMuc2V0U3RhdGUoe2FjY2Vzc29yczogbmV3IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnModGhpcy5wcm9wcyl9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE9yTWFrZURhdGFQcm92aWRlcigpIHtcbiAgICBjb25zdCB7ZGF0YSwgZGF0YVByb3ZpZGVyfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGlzRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPihkYXRhUHJvdmlkZXI/LmRhdGFQcm92aWRlcikpIHtcbiAgICAgIHJldHVybiBkYXRhUHJvdmlkZXIuZGF0YVByb3ZpZGVyO1xuICAgIH0gZWxzZSBpZiAoaXNGbG93bWFwRGF0YTxMLCBGPihkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IExvY2FsRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPih0aGlzLnByb3BzKTtcbiAgICAgIGRhdGFQcm92aWRlci5zZXRGbG93bWFwRGF0YShkYXRhKTtcbiAgICAgIHJldHVybiBkYXRhUHJvdmlkZXI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdGbG93bWFwTGF5ZXI6IGRhdGEgbXVzdCBiZSBhIEZsb3dtYXBEYXRhUHJvdmlkZXIgb3IgRmxvd21hcERhdGEnLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVEYXRhUHJvdmlkZXIoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZGF0YVByb3ZpZGVyOiB0aGlzLl9nZXRPck1ha2VEYXRhUHJvdmlkZXIoKX0pO1xuICB9XG5cbiAgc2hvdWxkVXBkYXRlU3RhdGUocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qge2NoYW5nZUZsYWdzfSA9IHBhcmFtcztcbiAgICAvLyBpZiAodGhpcy5fdmlld3BvcnRDaGFuZ2VkKCkpIHtcbiAgICAvLyAgIHJldHVybiB0cnVlO1xuICAgIC8vIH1cbiAgICBpZiAoY2hhbmdlRmxhZ3Mudmlld3BvcnRDaGFuZ2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNob3VsZFVwZGF0ZVN0YXRlKHBhcmFtcyk7XG4gICAgLy8gVE9ETzogYmUgc21hcnRlciBvbiB3aGVuIHRvIHVwZGF0ZVxuICAgIC8vIChlLmcuIGlnbm9yZSB2aWV3cG9ydCBjaGFuZ2VzIHdoZW4gYWRhcHRpdmVTY2FsZXNFbmFibGVkIGFuZCBjbHVzdGVyaW5nIGFyZSBmYWxzZSlcbiAgfVxuXG4gIHVwZGF0ZVN0YXRlKHtvbGRQcm9wcywgcHJvcHMsIGNoYW5nZUZsYWdzfTogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIGNvbnN0IHtkYXRhUHJvdmlkZXIsIGhpZ2hsaWdodGVkT2JqZWN0fSA9IHRoaXMuc3RhdGUgfHwge307XG4gICAgaWYgKCFkYXRhUHJvdmlkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlRmxhZ3MucHJvcHNDaGFuZ2VkKSB7XG4gICAgICAvLyB0aGlzLl91cGRhdGVBY2Nlc3NvcnMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZUZsYWdzLmRhdGFDaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVEYXRhUHJvdmlkZXIoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZUZsYWdzLnZpZXdwb3J0Q2hhbmdlZCB8fCBjaGFuZ2VGbGFncy5kYXRhQ2hhbmdlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhpZ2hsaWdodGVkT2JqZWN0OiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VGbGFncy52aWV3cG9ydENoYW5nZWQgfHxcbiAgICAgIGNoYW5nZUZsYWdzLnByb3BzT3JEYXRhQ2hhbmdlZCAvLyBUT0RPIGNhbiB3ZSBpZ25vcmUgYWNjZXNzb3IgcHJvcHMgY2hhbmdlcz9cbiAgICApIHtcbiAgICAgIGRhdGFQcm92aWRlci5zZXRGbG93bWFwU3RhdGUodGhpcy5fZ2V0Rmxvd21hcFN0YXRlKCkpO1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbGF5ZXJzRGF0YSA9IGF3YWl0IGRhdGFQcm92aWRlci5nZXRMYXllcnNEYXRhKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2xheWVyc0RhdGF9KTtcbiAgICAgIH0pKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2V0dGluZ3NTdGF0ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBsb2NhdGlvblRvdGFsc0VuYWJsZWQsXG4gICAgICBhZGFwdGl2ZVNjYWxlc0VuYWJsZWQsXG4gICAgICBhbmltYXRpb25FbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0VuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nTGV2ZWwsXG4gICAgICBmYWRlRW5hYmxlZCxcbiAgICAgIGZhZGVPcGFjaXR5RW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdBdXRvLFxuICAgICAgZGFya01vZGUsXG4gICAgICBmYWRlQW1vdW50LFxuICAgICAgY29sb3JTY2hlbWUsXG4gICAgICBoaWdobGlnaHRDb2xvcixcbiAgICAgIG1heFRvcEZsb3dzRGlzcGxheU51bSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgICAgYWRhcHRpdmVTY2FsZXNFbmFibGVkLFxuICAgICAgYW5pbWF0aW9uRW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0xldmVsLFxuICAgICAgZmFkZUVuYWJsZWQsXG4gICAgICBmYWRlT3BhY2l0eUVuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nQXV0byxcbiAgICAgIGRhcmtNb2RlLFxuICAgICAgZmFkZUFtb3VudCxcbiAgICAgIGNvbG9yU2NoZW1lLFxuICAgICAgaGlnaGxpZ2h0Q29sb3IsXG4gICAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEZsb3dtYXBTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlld3BvcnQ6IHBpY2tWaWV3cG9ydFByb3BzKHRoaXMuY29udGV4dC52aWV3cG9ydCksXG4gICAgICBmaWx0ZXJTdGF0ZToge1xuICAgICAgICBzZWxlY3RlZExvY2F0aW9uczogdW5kZWZpbmVkLFxuICAgICAgICBsb2NhdGlvbkZpbHRlck1vZGU6IExvY2F0aW9uRmlsdGVyTW9kZS5BTEwsXG4gICAgICAgIHNlbGVjdGVkVGltZVJhbmdlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgc2V0dGluZ3NTdGF0ZTogdGhpcy5fZ2V0U2V0dGluZ3NTdGF0ZSgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9nZXRGbG93bWFwTGF5ZXJQaWNraW5nSW5mbyhcbiAgICBpbmZvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApOiBQcm9taXNlPEZsb3dtYXBMYXllclBpY2tpbmdJbmZvPEwsIEY+IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qge2luZGV4LCBzb3VyY2VMYXllcn0gPSBpbmZvO1xuICAgIGNvbnN0IHtkYXRhUHJvdmlkZXIsIGFjY2Vzc29yc30gPSB0aGlzLnN0YXRlIHx8IHt9O1xuICAgIGlmICghZGF0YVByb3ZpZGVyIHx8ICFhY2Nlc3NvcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1vbkluZm8gPSB7XG4gICAgICAuLi5pbmZvLFxuICAgICAgcGlja2VkOiBpbmZvLnBpY2tlZCxcbiAgICAgIGxheWVyOiBpbmZvLmxheWVyLFxuICAgICAgaW5kZXg6IGluZm8uaW5kZXgsXG4gICAgICB4OiBpbmZvLngsXG4gICAgICB5OiBpbmZvLnksXG4gICAgICBjb29yZGluYXRlOiBpbmZvLmNvb3JkaW5hdGUsXG4gICAgICBldmVudDogaW5mby5ldmVudCxcbiAgICB9O1xuICAgIGlmIChcbiAgICAgIHNvdXJjZUxheWVyIGluc3RhbmNlb2YgRmxvd0xpbmVzTGF5ZXIgfHxcbiAgICAgIHNvdXJjZUxheWVyIGluc3RhbmNlb2YgQW5pbWF0ZWRGbG93TGluZXNMYXllclxuICAgICkge1xuICAgICAgY29uc3QgZmxvdyA9XG4gICAgICAgIGluZGV4ID09PSAtMSA/IHVuZGVmaW5lZCA6IGF3YWl0IGRhdGFQcm92aWRlci5nZXRGbG93QnlJbmRleChpbmRleCk7XG4gICAgICBpZiAoZmxvdykge1xuICAgICAgICBjb25zdCBvcmlnaW4gPSBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUlkKFxuICAgICAgICAgIGFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdyksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRlc3QgPSBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUlkKFxuICAgICAgICAgIGFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZsb3cpLFxuICAgICAgICApO1xuICAgICAgICBpZiAob3JpZ2luICYmIGRlc3QpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29tbW9uSW5mbyxcbiAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICB0eXBlOiBQaWNraW5nVHlwZS5GTE9XLFxuICAgICAgICAgICAgICBmbG93LFxuICAgICAgICAgICAgICBvcmlnaW46IG9yaWdpbixcbiAgICAgICAgICAgICAgZGVzdDogZGVzdCxcbiAgICAgICAgICAgICAgY291bnQ6IGFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGZsb3cpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb3VyY2VMYXllciBpbnN0YW5jZW9mIEZsb3dDaXJjbGVzTGF5ZXIpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID1cbiAgICAgICAgaW5kZXggPT09IC0xID8gdW5kZWZpbmVkIDogYXdhaXQgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJbmRleChpbmRleCk7XG5cbiAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICBjb25zdCBpZCA9IGFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGxvY2F0aW9uKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGFjY2Vzc29ycy5nZXRMb2NhdGlvbk5hbWUobG9jYXRpb24pO1xuICAgICAgICBjb25zdCB0b3RhbHMgPSBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0VG90YWxzRm9yTG9jYXRpb24oaWQpO1xuICAgICAgICBjb25zdCB7Y2lyY2xlQXR0cmlidXRlc30gPSB0aGlzLnN0YXRlPy5sYXllcnNEYXRhIHx8IHt9O1xuICAgICAgICBpZiAodG90YWxzICYmIGNpcmNsZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBjb25zdCBjaXJjbGVSYWRpdXMgPSBnZXRPdXRlckNpcmNsZVJhZGl1c0J5SW5kZXgoXG4gICAgICAgICAgICBjaXJjbGVBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgaW5mby5pbmRleCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb21tb25JbmZvLFxuICAgICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICAgIHR5cGU6IFBpY2tpbmdUeXBlLkxPQ0FUSU9OLFxuICAgICAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHRvdGFscyxcbiAgICAgICAgICAgICAgY2lyY2xlUmFkaXVzOiBjaXJjbGVSYWRpdXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SGlnaGxpZ2h0ZWRPYmplY3QoXG4gICAgaW5mbzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogSGlnaGxpZ2h0ZWRPYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHtpbmRleCwgc291cmNlTGF5ZXJ9ID0gaW5mbztcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIHNvdXJjZUxheWVyIGluc3RhbmNlb2YgRmxvd0xpbmVzTGF5ZXIgfHxcbiAgICAgIHNvdXJjZUxheWVyIGluc3RhbmNlb2YgQW5pbWF0ZWRGbG93TGluZXNMYXllclxuICAgICkge1xuICAgICAgY29uc3Qge2xpbmVBdHRyaWJ1dGVzfSA9IHRoaXMuc3RhdGU/LmxheWVyc0RhdGEgfHwge307XG4gICAgICBpZiAobGluZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbGV0IGF0dHJzID0gZ2V0Rmxvd0xpbmVBdHRyaWJ1dGVzQnlJbmRleChsaW5lQXR0cmlidXRlcywgaW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5mYWRlT3BhY2l0eUVuYWJsZWQpIHtcbiAgICAgICAgICBhdHRycyA9IHtcbiAgICAgICAgICAgIC4uLmF0dHJzLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAuLi5hdHRycy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICBnZXRDb2xvcjoge1xuICAgICAgICAgICAgICAgIC4uLmF0dHJzLmF0dHJpYnV0ZXMuZ2V0Q29sb3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgICAgICAgICAgICAgIC4uLmF0dHJzLmF0dHJpYnV0ZXMuZ2V0Q29sb3IudmFsdWUuc2xpY2UoMCwgMyksXG4gICAgICAgICAgICAgICAgICAyNTUsIC8vIHRoZSBoaWdobGlnaHQgY29sb3Igc2hvdWxkIGJlIGFsd2F5cyBvcGFxdWVcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IEhpZ2hsaWdodFR5cGUuRkxPVyxcbiAgICAgICAgICBsaW5lQXR0cmlidXRlczogYXR0cnMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb3VyY2VMYXllciBpbnN0YW5jZW9mIEZsb3dDaXJjbGVzTGF5ZXIpIHtcbiAgICAgIGNvbnN0IHtjaXJjbGVBdHRyaWJ1dGVzfSA9IHRoaXMuc3RhdGU/LmxheWVyc0RhdGEgfHwge307XG4gICAgICBpZiAoY2lyY2xlQXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IEhpZ2hsaWdodFR5cGUuTE9DQVRJT04sXG4gICAgICAgICAgY29vcmRzOiBnZXRMb2NhdGlvbkNvb3Jkc0J5SW5kZXgoY2lyY2xlQXR0cmlidXRlcywgaW5kZXgpLFxuICAgICAgICAgIHJhZGl1czogZ2V0T3V0ZXJDaXJjbGVSYWRpdXNCeUluZGV4KGNpcmNsZUF0dHJpYnV0ZXMsIGluZGV4KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbmRlckxheWVycygpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBsYXllcnMgPSBbXTtcbiAgICBpZiAodGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSkge1xuICAgICAgY29uc3Qge2xheWVyc0RhdGEsIGhpZ2hsaWdodGVkT2JqZWN0fSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCB7Y2lyY2xlQXR0cmlidXRlcywgbGluZUF0dHJpYnV0ZXN9ID0gbGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChjaXJjbGVBdHRyaWJ1dGVzICYmIGxpbmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnN0IGZsb3dtYXBDb2xvcnMgPSBnZXRGbG93bWFwQ29sb3JzKHRoaXMuX2dldFNldHRpbmdzU3RhdGUoKSk7XG4gICAgICAgIGNvbnN0IG91dGxpbmVDb2xvciA9IGNvbG9yQXNSZ2JhKFxuICAgICAgICAgIGZsb3dtYXBDb2xvcnMub3V0bGluZUNvbG9yIHx8ICh0aGlzLnByb3BzLmRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tbW9uTGluZUxheWVyUHJvcHMgPSB7XG4gICAgICAgICAgZGF0YTogbGluZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgLy8gcHJldmVudCB6LWZpZ2h0aW5nIGF0IG5vbi16ZXJvIGJlYXJpbmcvcGl0Y2hcbiAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuYW5pbWF0aW9uRW5hYmxlZCkge1xuICAgICAgICAgIGxheWVycy5wdXNoKFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkxpbmVMYXllclByb3BzLFxuICAgICAgICAgICAgICAgIGlkOiAnYW5pbWF0ZWQtZmxvdy1saW5lcycsXG4gICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRoaWNrbmVzc1VuaXQ6IDIwLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICBuZXcgRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkxpbmVMYXllclByb3BzLFxuICAgICAgICAgICAgICAgIGlkOiAnZmxvdy1saW5lcycsXG4gICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBvdXRsaW5lQ29sb3IsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBsYXllcnMucHVzaChcbiAgICAgICAgICBuZXcgRmxvd0NpcmNsZXNMYXllcihcbiAgICAgICAgICAgIHRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgIGlkOiAnY2lyY2xlcycsXG4gICAgICAgICAgICAgIGRhdGE6IGNpcmNsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIGVtcHR5Q29sb3I6IHRoaXMucHJvcHMuZGFya01vZGVcbiAgICAgICAgICAgICAgICA/IFswLCAwLCAwLCAyNTVdXG4gICAgICAgICAgICAgICAgOiBbMjU1LCAyNTUsIDI1NSwgMjU1XSxcbiAgICAgICAgICAgICAgb3V0bGluZUVtcHR5TWl4OiAwLjQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaGlnaGxpZ2h0ZWRPYmplY3QpIHtcbiAgICAgICAgICBzd2l0Y2ggKGhpZ2hsaWdodGVkT2JqZWN0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgSGlnaGxpZ2h0VHlwZS5MT0NBVElPTjpcbiAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFNjYXR0ZXJwbG90TGF5ZXIoe1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRTdWJMYXllclByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdsb2NhdGlvbi1oaWdobGlnaHQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBbaGlnaGxpZ2h0ZWRPYmplY3RdLFxuICAgICAgICAgICAgICAgICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFudGlhbGlhc2luZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZVdpZHRoVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICAgICAgICAgICAgICBnZXRMaW5lV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1c1VuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmFkaXVzOiAoZDogSGlnaGxpZ2h0ZWRMb2NhdGlvbk9iamVjdCkgPT4gZC5yYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgIGdldExpbmVDb2xvcjogY29sb3JBc1JnYmEodGhpcy5wcm9wcy5oaWdobGlnaHRDb2xvciksXG4gICAgICAgICAgICAgICAgICAgIGdldFBvc2l0aW9uOiAoZDogSGlnaGxpZ2h0ZWRMb2NhdGlvbk9iamVjdCkgPT4gZC5jb29yZHMsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEhpZ2hsaWdodFR5cGUuRkxPVzpcbiAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEZsb3dMaW5lc0xheWVyKHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnZmxvdy1oaWdobGlnaHQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBoaWdobGlnaHRlZE9iamVjdC5saW5lQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBjb2xvckFzUmdiYSh0aGlzLnByb3BzLmhpZ2hsaWdodENvbG9yKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZVRoaWNrbmVzczogMSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBpY2tWaWV3cG9ydFByb3BzKHZpZXdwb3J0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVmlld3BvcnRQcm9wcyB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tLCBwaXRjaCwgYmVhcmluZ30gPSB2aWV3cG9ydDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlLFxuICAgIHpvb20sXG4gICAgcGl0Y2gsXG4gICAgYmVhcmluZyxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export { default as AnimatedFlowLinesLayer } from './AnimatedFlowLinesLayer';
2
+ export { default as FlowLinesLayer } from './FlowLinesLayer';
3
+ export { default as FlowCirclesLayer } from './FlowCirclesLayer';
4
+ export { default as FlowmapLayer } from './FlowmapLayer';
5
+ export type { FlowmapLayerProps } from './FlowmapLayer';
6
+ export * from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAEtD,cAAc,SAAS,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.FlowmapLayer = exports.FlowCirclesLayer = exports.FlowLinesLayer = exports.AnimatedFlowLinesLayer = void 0;
17
+ var AnimatedFlowLinesLayer_1 = require("./AnimatedFlowLinesLayer");
18
+ Object.defineProperty(exports, "AnimatedFlowLinesLayer", { enumerable: true, get: function () { return __importDefault(AnimatedFlowLinesLayer_1).default; } });
19
+ var FlowLinesLayer_1 = require("./FlowLinesLayer");
20
+ Object.defineProperty(exports, "FlowLinesLayer", { enumerable: true, get: function () { return __importDefault(FlowLinesLayer_1).default; } });
21
+ var FlowCirclesLayer_1 = require("./FlowCirclesLayer");
22
+ Object.defineProperty(exports, "FlowCirclesLayer", { enumerable: true, get: function () { return __importDefault(FlowCirclesLayer_1).default; } });
23
+ var FlowmapLayer_1 = require("./FlowmapLayer");
24
+ Object.defineProperty(exports, "FlowmapLayer", { enumerable: true, get: function () { return __importDefault(FlowmapLayer_1).default; } });
25
+ __exportStar(require("./types"), exports);
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1FQUEyRTtBQUFuRSxpSkFBQSxPQUFPLE9BQTBCO0FBQ3pDLG1EQUEyRDtBQUFuRCxpSUFBQSxPQUFPLE9BQWtCO0FBQ2pDLHVEQUErRDtBQUF2RCxxSUFBQSxPQUFPLE9BQW9CO0FBQ25DLCtDQUF1RDtBQUEvQyw2SEFBQSxPQUFPLE9BQWdCO0FBRy9CLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBBbmltYXRlZEZsb3dMaW5lc0xheWVyfSBmcm9tICcuL0FuaW1hdGVkRmxvd0xpbmVzTGF5ZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIEZsb3dMaW5lc0xheWVyfSBmcm9tICcuL0Zsb3dMaW5lc0xheWVyJztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBGbG93Q2lyY2xlc0xheWVyfSBmcm9tICcuL0Zsb3dDaXJjbGVzTGF5ZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIEZsb3dtYXBMYXllcn0gZnJvbSAnLi9GbG93bWFwTGF5ZXInO1xuZXhwb3J0IHR5cGUge0Zsb3dtYXBMYXllclByb3BzfSBmcm9tICcuL0Zsb3dtYXBMYXllcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl19
@@ -0,0 +1,36 @@
1
+ import { AggregateFlow, ClusterNode, LocationTotals } from '@flowmap.gl/data';
2
+ export declare type LayerProps = Record<string, unknown>;
3
+ export declare enum PickingType {
4
+ LOCATION = "location",
5
+ FLOW = "flow"
6
+ }
7
+ export declare type DeckGLLayer = Record<string, any>;
8
+ export interface PickingInfo<T> {
9
+ layer: DeckGLLayer;
10
+ index: number;
11
+ picked: boolean;
12
+ object: T | undefined;
13
+ x: number;
14
+ y: number;
15
+ coordinate: [number, number];
16
+ event: MouseEvent | undefined;
17
+ }
18
+ export interface LocationPickingInfoObject<L> {
19
+ id: string;
20
+ type: PickingType.LOCATION;
21
+ location: L | ClusterNode;
22
+ name: string;
23
+ totals: LocationTotals;
24
+ circleRadius: number;
25
+ }
26
+ export declare type LocationPickingInfo<L> = PickingInfo<LocationPickingInfoObject<L>>;
27
+ export interface FlowPickingInfoObject<L, F> {
28
+ type: PickingType.FLOW;
29
+ flow: F | AggregateFlow;
30
+ origin: L | ClusterNode;
31
+ dest: L | ClusterNode;
32
+ count: number;
33
+ }
34
+ export declare type FlowPickingInfo<L, F> = PickingInfo<FlowPickingInfoObject<L, F>>;
35
+ export declare type FlowmapLayerPickingInfo<L, F> = LocationPickingInfo<L> | FlowPickingInfo<L, F>;
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,WAAW,EACX,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,oBAAY,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,oBAAY,WAAW;IACrB,QAAQ,aAAa;IACrB,IAAI,SAAS;CAEd;AAED,oBAAY,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE9C,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC3B,QAAQ,EAAE,CAAC,GAAG,WAAW,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,oBAAY,mBAAmB,CAAC,CAAC,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/E,MAAM,WAAW,qBAAqB,CAAC,CAAC,EAAE,CAAC;IACzC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;IACvB,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC;IACxB,MAAM,EAAE,CAAC,GAAG,WAAW,CAAC;IACxB,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oBAAY,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAO7E,oBAAY,uBAAuB,CAAC,CAAC,EAAE,CAAC,IACpC,mBAAmB,CAAC,CAAC,CAAC,GAEtB,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}