@flowmap.gl/data 8.0.0-alpha.13 → 8.0.0-alpha.14

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 (60) hide show
  1. package/dist/FlowmapSelectors.d.ts +21 -21
  2. package/dist/FlowmapSelectors.d.ts.map +1 -1
  3. package/dist/FlowmapSelectors.js +50 -21
  4. package/dist/cluster/cluster.d.ts +6 -5
  5. package/dist/cluster/cluster.d.ts.map +1 -1
  6. package/dist/cluster/cluster.js +11 -9
  7. package/dist/getViewStateForLocations.d.ts +1 -1
  8. package/dist/getViewStateForLocations.d.ts.map +1 -1
  9. package/dist/getViewStateForLocations.js +16 -5
  10. package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -1
  11. package/dist/provider/LocalFlowmapDataProvider.js +2 -1
  12. package/dist/types.d.ts +2 -2
  13. package/dist/types.d.ts.map +1 -1
  14. package/dist/types.js +1 -1
  15. package/package.json +5 -7
  16. package/src/FlowmapSelectors.ts +67 -49
  17. package/src/cluster/cluster.ts +23 -20
  18. package/src/getViewStateForLocations.ts +17 -7
  19. package/src/provider/LocalFlowmapDataProvider.ts +1 -0
  20. package/src/types.ts +2 -2
  21. package/dist-es5/FlowmapAggregateAccessors.d.ts +0 -16
  22. package/dist-es5/FlowmapAggregateAccessors.d.ts.map +0 -1
  23. package/dist-es5/FlowmapAggregateAccessors.js +0 -57
  24. package/dist-es5/FlowmapSelectors.d.ts +0 -188
  25. package/dist-es5/FlowmapSelectors.d.ts.map +0 -1
  26. package/dist-es5/FlowmapSelectors.js +0 -1507
  27. package/dist-es5/FlowmapState.d.ts +0 -27
  28. package/dist-es5/FlowmapState.d.ts.map +0 -1
  29. package/dist-es5/FlowmapState.js +0 -3
  30. package/dist-es5/cluster/ClusterIndex.d.ts +0 -42
  31. package/dist-es5/cluster/ClusterIndex.d.ts.map +0 -1
  32. package/dist-es5/cluster/ClusterIndex.js +0 -297
  33. package/dist-es5/cluster/cluster.d.ts +0 -31
  34. package/dist-es5/cluster/cluster.d.ts.map +0 -1
  35. package/dist-es5/cluster/cluster.js +0 -266
  36. package/dist-es5/colors.d.ts +0 -103
  37. package/dist-es5/colors.d.ts.map +0 -1
  38. package/dist-es5/colors.js +0 -510
  39. package/dist-es5/getViewStateForLocations.d.ts +0 -23
  40. package/dist-es5/getViewStateForLocations.d.ts.map +0 -1
  41. package/dist-es5/getViewStateForLocations.js +0 -64
  42. package/dist-es5/index.d.ts +0 -11
  43. package/dist-es5/index.d.ts.map +0 -1
  44. package/dist-es5/index.js +0 -28
  45. package/dist-es5/provider/FlowmapDataProvider.d.ts +0 -16
  46. package/dist-es5/provider/FlowmapDataProvider.d.ts.map +0 -1
  47. package/dist-es5/provider/FlowmapDataProvider.js +0 -22
  48. package/dist-es5/provider/LocalFlowmapDataProvider.d.ts +0 -20
  49. package/dist-es5/provider/LocalFlowmapDataProvider.d.ts.map +0 -1
  50. package/dist-es5/provider/LocalFlowmapDataProvider.js +0 -154
  51. package/dist-es5/time.d.ts +0 -24
  52. package/dist-es5/time.d.ts.map +0 -1
  53. package/dist-es5/time.js +0 -168
  54. package/dist-es5/types.d.ts +0 -118
  55. package/dist-es5/types.d.ts.map +0 -1
  56. package/dist-es5/types.js +0 -29
  57. package/dist-es5/util.d.ts +0 -5
  58. package/dist-es5/util.d.ts.map +0 -1
  59. package/dist-es5/util.js +0 -14
  60. package/tsconfig.es5.json +0 -11
@@ -1,510 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.mixColorsRGBA = exports.midpoint = exports.rgbaAsString = exports.getDiffColorsRGBA = exports.getColorsRGBA = exports.isDiffColorsRGBA = exports.isDiffColors = exports.getFlowColorScale = exports.createFlowColorScale = exports.getColors = exports.getFlowmapColors = exports.COLOR_SCHEME_KEYS = exports.COLOR_SCHEMES = exports.DEFAULT_COLOR_SCHEME = exports.schemeTeal = exports.GRAYISH = exports.ColorScheme = exports.colorAsRgba = exports.opacifyHex = exports.opacityFloatToInteger = void 0;
15
- var d3_scale_chromatic_1 = require("d3-scale-chromatic");
16
- var d3_array_1 = require("d3-array");
17
- var d3_scale_1 = require("d3-scale");
18
- var d3_interpolate_1 = require("d3-interpolate");
19
- var d3_color_1 = require("d3-color");
20
- var DEFAULT_OUTLINE_COLOR = '#fff';
21
- var DEFAULT_DIMMED_OPACITY = 0.4;
22
- var DEFAULT_FLOW_MIN_COLOR = 'rgba(240,240,240,0.5)';
23
- var DEFAULT_FLOW_COLOR_SCHEME = [DEFAULT_FLOW_MIN_COLOR, '#137CBD'];
24
- var DEFAULT_LOCATION_AREA_COLOR = 'rgba(220,220,220,0.5)';
25
- var DEFAULT_FLOW_COLOR_SCHEME_POSITIVE = [DEFAULT_FLOW_MIN_COLOR, '#f6654e'];
26
- var DEFAULT_FLOW_COLOR_SCHEME_NEGATIVE = [DEFAULT_FLOW_MIN_COLOR, '#00a9cc'];
27
- var FALLBACK_COLOR_RGBA = [255, 255, 255, 255];
28
- function opacityFloatToInteger(opacity) {
29
- return Math.round(opacity * 255);
30
- }
31
- exports.opacityFloatToInteger = opacityFloatToInteger;
32
- function opacifyHex(hexCode, opacity) {
33
- var c = (0, d3_color_1.color)(hexCode);
34
- if (!c) {
35
- console.warn('Invalid color: ', hexCode);
36
- return "rgba(255, 255, 255, ".concat(opacity, ")");
37
- }
38
- var col = c.rgb();
39
- return "rgba(".concat(col.r, ", ").concat(col.g, ", ").concat(col.b, ", ").concat(opacity, ")");
40
- }
41
- exports.opacifyHex = opacifyHex;
42
- function colorAsRgba(color) {
43
- if (Array.isArray(color)) {
44
- return color;
45
- }
46
- var col = (0, d3_color_1.color)(color);
47
- if (!col) {
48
- console.warn('Invalid color: ', color);
49
- return FALLBACK_COLOR_RGBA;
50
- }
51
- var rgbColor = col.rgb();
52
- return [
53
- Math.floor(rgbColor.r),
54
- Math.floor(rgbColor.g),
55
- Math.floor(rgbColor.b),
56
- opacityFloatToInteger(col.opacity),
57
- ];
58
- }
59
- exports.colorAsRgba = colorAsRgba;
60
- function colorAsRgbaOr(color, defaultColor) {
61
- if (color) {
62
- return colorAsRgba(color);
63
- }
64
- if (typeof defaultColor === 'string') {
65
- return colorAsRgba(defaultColor);
66
- }
67
- return defaultColor;
68
- }
69
- var asScheme = function (scheme) {
70
- return scheme[scheme.length - 1];
71
- };
72
- var ColorScheme;
73
- (function (ColorScheme) {
74
- ColorScheme["primary"] = "#162d3c";
75
- })(ColorScheme = exports.ColorScheme || (exports.ColorScheme = {}));
76
- var SCALE_NUM_STEPS = 20;
77
- var getColorSteps = function (interpolate) {
78
- return (0, d3_array_1.range)(0, SCALE_NUM_STEPS + 1)
79
- .map(function (i) { return interpolate(i / SCALE_NUM_STEPS); })
80
- .reverse();
81
- };
82
- var FLOW_MIN_COLOR = 'rgba(240,240,240,0.5)';
83
- exports.GRAYISH = [FLOW_MIN_COLOR, ColorScheme.primary];
84
- var schemeBluYl = [
85
- '#f7feae',
86
- '#b7e6a5',
87
- '#7ccba2',
88
- '#46aea0',
89
- '#089099',
90
- '#00718b',
91
- '#045275',
92
- ];
93
- var schemeEmrld = [
94
- '#d3f2a3',
95
- '#97e196',
96
- '#6cc08b',
97
- '#4c9b82',
98
- '#217a79',
99
- '#105965',
100
- '#074050',
101
- ];
102
- exports.schemeTeal = [
103
- '#d1eeea',
104
- '#a8dbd9',
105
- '#85c4c9',
106
- '#68abb8',
107
- '#4f90a6',
108
- '#3b738f',
109
- '#2a5674',
110
- ];
111
- exports.DEFAULT_COLOR_SCHEME = exports.schemeTeal;
112
- exports.COLOR_SCHEMES = {
113
- Blues: asScheme(d3_scale_chromatic_1.schemeBlues),
114
- BluGrn: [
115
- '#c4e6c3',
116
- '#96d2a4',
117
- '#6dbc90',
118
- '#4da284',
119
- '#36877a',
120
- '#266b6e',
121
- '#1d4f60',
122
- ],
123
- BluYl: schemeBluYl,
124
- BrwnYl: [
125
- '#ede5cf',
126
- '#e0c2a2',
127
- '#d39c83',
128
- '#c1766f',
129
- '#a65461',
130
- '#813753',
131
- '#541f3f',
132
- ],
133
- BuGn: asScheme(d3_scale_chromatic_1.schemeBuGn),
134
- BuPu: asScheme(d3_scale_chromatic_1.schemeBuPu),
135
- Burg: [
136
- '#ffc6c4',
137
- '#f4a3a8',
138
- '#e38191',
139
- '#cc607d',
140
- '#ad466c',
141
- '#8b3058',
142
- '#672044',
143
- ],
144
- BurgYl: [
145
- '#fbe6c5',
146
- '#f5ba98',
147
- '#ee8a82',
148
- '#dc7176',
149
- '#c8586c',
150
- '#9c3f5d',
151
- '#70284a',
152
- ],
153
- Cool: getColorSteps(d3_scale_chromatic_1.interpolateCool),
154
- DarkMint: [
155
- '#d2fbd4',
156
- '#a5dbc2',
157
- '#7bbcb0',
158
- '#559c9e',
159
- '#3a7c89',
160
- '#235d72',
161
- '#123f5a',
162
- ],
163
- Emrld: schemeEmrld,
164
- GnBu: asScheme(d3_scale_chromatic_1.schemeGnBu),
165
- Grayish: exports.GRAYISH,
166
- Greens: asScheme(d3_scale_chromatic_1.schemeGreens),
167
- Greys: asScheme(d3_scale_chromatic_1.schemeGreys),
168
- Inferno: getColorSteps(d3_scale_chromatic_1.interpolateInferno),
169
- Magenta: [
170
- '#f3cbd3',
171
- '#eaa9bd',
172
- '#dd88ac',
173
- '#ca699d',
174
- '#b14d8e',
175
- '#91357d',
176
- '#6c2167',
177
- ],
178
- Magma: getColorSteps(d3_scale_chromatic_1.interpolateMagma),
179
- Mint: [
180
- '#e4f1e1',
181
- '#b4d9cc',
182
- '#89c0b6',
183
- '#63a6a0',
184
- '#448c8a',
185
- '#287274',
186
- '#0d585f',
187
- ],
188
- Oranges: asScheme(d3_scale_chromatic_1.schemeOranges),
189
- OrRd: asScheme(d3_scale_chromatic_1.schemeOrRd),
190
- OrYel: [
191
- '#ecda9a',
192
- '#efc47e',
193
- '#f3ad6a',
194
- '#f7945d',
195
- '#f97b57',
196
- '#f66356',
197
- '#ee4d5a',
198
- ],
199
- Peach: [
200
- '#fde0c5',
201
- '#facba6',
202
- '#f8b58b',
203
- '#f59e72',
204
- '#f2855d',
205
- '#ef6a4c',
206
- '#eb4a40',
207
- ],
208
- Plasma: getColorSteps(d3_scale_chromatic_1.interpolatePlasma),
209
- PinkYl: [
210
- '#fef6b5',
211
- '#ffdd9a',
212
- '#ffc285',
213
- '#ffa679',
214
- '#fa8a76',
215
- '#f16d7a',
216
- '#e15383',
217
- ],
218
- PuBu: asScheme(d3_scale_chromatic_1.schemePuBu),
219
- PuBuGn: asScheme(d3_scale_chromatic_1.schemePuBuGn),
220
- PuRd: asScheme(d3_scale_chromatic_1.schemePuRd),
221
- Purp: [
222
- '#f3e0f7',
223
- '#e4c7f1',
224
- '#d1afe8',
225
- '#b998dd',
226
- '#9f82ce',
227
- '#826dba',
228
- '#63589f',
229
- ],
230
- Purples: asScheme(d3_scale_chromatic_1.schemePurples),
231
- PurpOr: [
232
- '#f9ddda',
233
- '#f2b9c4',
234
- '#e597b9',
235
- '#ce78b3',
236
- '#ad5fad',
237
- '#834ba0',
238
- '#573b88',
239
- ],
240
- RdPu: asScheme(d3_scale_chromatic_1.schemeRdPu),
241
- RedOr: [
242
- '#f6d2a9',
243
- '#f5b78e',
244
- '#f19c7c',
245
- '#ea8171',
246
- '#dd686c',
247
- '#ca5268',
248
- '#b13f64',
249
- ],
250
- Reds: asScheme(d3_scale_chromatic_1.schemeReds),
251
- Sunset: [
252
- '#f3e79b',
253
- '#fac484',
254
- '#f8a07e',
255
- '#eb7f86',
256
- '#ce6693',
257
- '#a059a0',
258
- '#5c53a5',
259
- ],
260
- SunsetDark: [
261
- '#fcde9c',
262
- '#faa476',
263
- '#f0746e',
264
- '#e34f6f',
265
- '#dc3977',
266
- '#b9257a',
267
- '#7c1d6f',
268
- ],
269
- Teal: exports.schemeTeal,
270
- TealGrn: [
271
- '#b0f2bc',
272
- '#89e8ac',
273
- '#67dba5',
274
- '#4cc8a3',
275
- '#38b2a3',
276
- '#2c98a0',
277
- '#257d98',
278
- ],
279
- Viridis: getColorSteps(d3_scale_chromatic_1.interpolateViridis),
280
- Warm: getColorSteps(d3_scale_chromatic_1.interpolateWarm),
281
- YlGn: asScheme(d3_scale_chromatic_1.schemeYlGn),
282
- YlGnBu: asScheme(d3_scale_chromatic_1.schemeYlGnBu),
283
- YlOrBr: asScheme(d3_scale_chromatic_1.schemeYlOrBr),
284
- YlOrRd: asScheme(d3_scale_chromatic_1.schemeYlOrRd),
285
- };
286
- exports.COLOR_SCHEME_KEYS = Object.keys(exports.COLOR_SCHEMES);
287
- var complementary = '#f52020';
288
- var baseDiffColor = '#17a5be';
289
- var diffColors = {
290
- negative: {
291
- flows: {
292
- scheme: [FLOW_MIN_COLOR, baseDiffColor],
293
- },
294
- },
295
- positive: {
296
- flows: {
297
- scheme: [FLOW_MIN_COLOR, complementary],
298
- },
299
- },
300
- locationAreas: {
301
- outline: 'rgba(92,112,128,0.5)',
302
- normal: 'rgba(220,220,220,0.5)',
303
- },
304
- outlineColor: 'rgb(230,233,237)',
305
- };
306
- function getFlowmapColors(settingsState) {
307
- return getColors(false, // TODO: diffMode
308
- settingsState.colorScheme, settingsState.darkMode, settingsState.fadeEnabled, settingsState.fadeOpacityEnabled, settingsState.fadeAmount, settingsState.animationEnabled);
309
- }
310
- exports.getFlowmapColors = getFlowmapColors;
311
- function getColors(diffMode, colorScheme, darkMode, fadeEnabled, fadeOpacityEnabled, fadeAmount, animate) {
312
- if (diffMode) {
313
- return diffColors;
314
- }
315
- var scheme;
316
- if (Array.isArray(colorScheme)) {
317
- scheme = colorScheme;
318
- }
319
- else {
320
- scheme =
321
- (colorScheme && exports.COLOR_SCHEMES[colorScheme]) || exports.DEFAULT_COLOR_SCHEME;
322
- if (darkMode) {
323
- scheme = scheme.slice().reverse();
324
- }
325
- }
326
- // if (animate)
327
- // if (fadeAmount > 0)
328
- {
329
- var indices = (0, d3_array_1.range)(0, Math.max(10, scheme.length));
330
- var N = indices.length - 1;
331
- var colorScale_1 = (0, d3_scale_1.scaleSequential)((0, d3_interpolate_1.interpolateRgbBasis)(scheme)).domain([
332
- 0,
333
- N,
334
- ]);
335
- if (!fadeEnabled || fadeAmount === 0) {
336
- scheme = indices.map(function (c, i) { return colorScale_1(i); });
337
- }
338
- else {
339
- var amount_1 = (0, d3_scale_1.scalePow)()
340
- // .exponent(animate ? 1 : 1/2.5)
341
- // .exponent(animate ? 100 : 50)
342
- // .exponent(animate ? 20 : 5)
343
- // .exponent(1/2.5)
344
- .exponent(1.5)
345
- .domain([N, 0])
346
- // .range([fadeAmount/100*(animate?2:1), 0])
347
- // .range([0, fadeAmount/100*(animate?2:1)])
348
- // .range(darkMode ? [1-fadeAmount/100, 1] : [1, 1 - fadeAmount/100])
349
- // .range(darkMode ? [1 - fadeAmount/100, 1] : [fadeAmount/100, 0])
350
- // .range([1 - fadeAmount/100, 1])
351
- .range([0, (2 * fadeAmount) / 100]);
352
- scheme = indices.map(function (c, i) {
353
- var color = colorScale_1(i);
354
- var a = amount_1(i);
355
- if (color == null || a == null)
356
- return '#000';
357
- var col = (0, d3_color_1.hcl)(color);
358
- col.l = darkMode ? col.l - col.l * a : col.l + (100 - col.l) * a;
359
- col.c = col.c - col.c * (a / 4);
360
- if (fadeOpacityEnabled) {
361
- col.opacity = col.opacity * (1.0 - a);
362
- }
363
- return col.toString();
364
- });
365
- }
366
- }
367
- return {
368
- darkMode: darkMode,
369
- flows: {
370
- scheme: scheme,
371
- },
372
- locationCircles: {
373
- outgoing: darkMode ? '#000' : '#fff',
374
- },
375
- outlineColor: darkMode ? '#000' : 'rgba(255, 255, 255, 0.5)',
376
- };
377
- }
378
- exports.getColors = getColors;
379
- function interpolateRgbaBasis(colors) {
380
- var spline = d3_interpolate_1.interpolateBasis;
381
- var n = colors.length;
382
- var r = new Array(n), g = new Array(n), b = new Array(n), opacity = new Array(n), i, color;
383
- for (i = 0; i < n; ++i) {
384
- color = (0, d3_color_1.rgb)(colors[i]);
385
- r[i] = color.r || 0;
386
- g[i] = color.g || 0;
387
- b[i] = color.b || 0;
388
- opacity[i] = color.opacity || 0;
389
- }
390
- r = spline(r);
391
- g = spline(g);
392
- b = spline(b);
393
- opacity = spline(opacity);
394
- // color.opacity = 1;
395
- return function (t) {
396
- color.r = r(t);
397
- color.g = g(t);
398
- color.b = b(t);
399
- color.opacity = opacity(t);
400
- return color + '';
401
- };
402
- }
403
- function createFlowColorScale(domain, scheme, animate) {
404
- var scale = (0, d3_scale_1.scaleSequentialPow)(interpolateRgbaBasis(scheme))
405
- // @ts-ignore
406
- .exponent(animate ? 1 / 2 : 1 / 3)
407
- .domain(domain);
408
- return function (value) { return colorAsRgba(scale(value)); };
409
- }
410
- exports.createFlowColorScale = createFlowColorScale;
411
- function getFlowColorScale(colors, magnitudeExtent, animate) {
412
- var minMagnitude = magnitudeExtent ? magnitudeExtent[0] : 0;
413
- var maxMagnitude = magnitudeExtent ? magnitudeExtent[1] : 0;
414
- if (isDiffColorsRGBA(colors)) {
415
- var posScale_1 = createFlowColorScale([0, maxMagnitude], colors.positive.flows.scheme, animate);
416
- var negScale_1 = createFlowColorScale([0, minMagnitude], colors.negative.flows.scheme, animate);
417
- return function (magnitude) {
418
- return magnitude >= 0 ? posScale_1(magnitude) : negScale_1(magnitude);
419
- };
420
- }
421
- var scale = createFlowColorScale([0, maxMagnitude || 0], colors.flows.scheme, animate);
422
- return function (magnitude) { return scale(magnitude); };
423
- }
424
- exports.getFlowColorScale = getFlowColorScale;
425
- function isDiffColors(colors) {
426
- return colors.positive !== undefined;
427
- }
428
- exports.isDiffColors = isDiffColors;
429
- function isDiffColorsRGBA(colors) {
430
- return colors.positive !== undefined;
431
- }
432
- exports.isDiffColorsRGBA = isDiffColorsRGBA;
433
- function getLocationAreaColorsRGBA(colors, darkMode) {
434
- var normalColor = (colors && colors.normal) || DEFAULT_LOCATION_AREA_COLOR;
435
- var normalColorHcl = (0, d3_color_1.hcl)(normalColor);
436
- var locationAreasNormal = colorAsRgba(normalColor);
437
- return {
438
- normal: locationAreasNormal,
439
- connected: colorAsRgbaOr(colors && colors.connected, locationAreasNormal),
440
- highlighted: colorAsRgbaOr(colors && colors.highlighted, opacifyHex(normalColorHcl[darkMode ? 'brighter' : 'darker'](1).toString(), 0.5)),
441
- selected: colorAsRgbaOr(colors && colors.selected, opacifyHex(normalColorHcl[darkMode ? 'brighter' : 'darker'](2).toString(), 0.8)),
442
- outline: colorAsRgbaOr(colors && colors.outline, colorAsRgba(normalColorHcl[darkMode ? 'brighter' : 'darker'](4).toString())),
443
- };
444
- }
445
- function getFlowAndCircleColors(inputColors, defaultFlowColorScheme, darkMode) {
446
- var _a, _b, _c;
447
- var flowColorScheme = (inputColors && inputColors.flows && inputColors.flows.scheme) ||
448
- defaultFlowColorScheme;
449
- var maxFlowColorHcl = (0, d3_color_1.hcl)(flowColorScheme[flowColorScheme.length - 1]);
450
- var flowColorHighlighted = colorAsRgbaOr(inputColors && inputColors.flows && inputColors.flows.highlighted, colorAsRgba(maxFlowColorHcl[darkMode ? 'brighter' : 'darker'](0.7).toString()));
451
- var emptyColor = colorAsRgbaOr((_a = inputColors === null || inputColors === void 0 ? void 0 : inputColors.locationCircles) === null || _a === void 0 ? void 0 : _a.empty, darkMode ? '#000' : '#fff');
452
- var innerColor = colorAsRgbaOr(inputColors &&
453
- inputColors.locationCircles &&
454
- inputColors.locationCircles.inner, maxFlowColorHcl.toString());
455
- return {
456
- flows: {
457
- scheme: flowColorScheme,
458
- highlighted: flowColorHighlighted,
459
- },
460
- locationCircles: {
461
- inner: innerColor,
462
- outgoing: colorAsRgbaOr(inputColors &&
463
- inputColors.locationCircles &&
464
- inputColors.locationCircles.outgoing, darkMode ? '#000' : '#fff'),
465
- incoming: colorAsRgbaOr(inputColors &&
466
- inputColors.locationCircles &&
467
- inputColors.locationCircles.incoming, maxFlowColorHcl[darkMode ? 'brighter' : 'darker'](1.25).toString()),
468
- highlighted: colorAsRgbaOr(inputColors &&
469
- inputColors.locationCircles &&
470
- inputColors.locationCircles.highlighted, flowColorHighlighted),
471
- empty: emptyColor,
472
- outlineEmptyMix: (_c = (_b = inputColors === null || inputColors === void 0 ? void 0 : inputColors.locationCircles) === null || _b === void 0 ? void 0 : _b.outlineEmptyMix) !== null && _c !== void 0 ? _c : 0.4,
473
- },
474
- };
475
- }
476
- function getBaseColorsRGBA(colors) {
477
- var darkMode = colors && colors.darkMode ? true : false;
478
- return {
479
- darkMode: darkMode,
480
- locationAreas: getLocationAreaColorsRGBA(colors && colors.locationAreas, darkMode),
481
- outlineColor: colorAsRgba((colors && colors.outlineColor) || DEFAULT_OUTLINE_COLOR),
482
- dimmedOpacity: colors && colors.dimmedOpacity != null
483
- ? colors.dimmedOpacity
484
- : DEFAULT_DIMMED_OPACITY,
485
- };
486
- }
487
- function getColorsRGBA(colors) {
488
- var baseColorsRGBA = getBaseColorsRGBA(colors);
489
- return __assign(__assign({}, baseColorsRGBA), getFlowAndCircleColors(colors, DEFAULT_FLOW_COLOR_SCHEME, baseColorsRGBA.darkMode));
490
- }
491
- exports.getColorsRGBA = getColorsRGBA;
492
- function getDiffColorsRGBA(colors) {
493
- var baseColorsRGBA = getBaseColorsRGBA(colors);
494
- return __assign(__assign({}, baseColorsRGBA), { positive: getFlowAndCircleColors(colors && colors.positive, DEFAULT_FLOW_COLOR_SCHEME_POSITIVE, baseColorsRGBA.darkMode), negative: getFlowAndCircleColors(colors && colors.negative, DEFAULT_FLOW_COLOR_SCHEME_NEGATIVE, baseColorsRGBA.darkMode) });
495
- }
496
- exports.getDiffColorsRGBA = getDiffColorsRGBA;
497
- function rgbaAsString(color) {
498
- return "rgba(".concat(color.join(','), ")");
499
- }
500
- exports.rgbaAsString = rgbaAsString;
501
- function midpoint(a, b, zeroToOne) {
502
- return a + (b - a) * zeroToOne;
503
- }
504
- exports.midpoint = midpoint;
505
- function mixColorsRGBA(color1, color2, zeroToOne) {
506
- return color1.map(function (v, i) { return midpoint(v, color2[i], zeroToOne); });
507
- }
508
- exports.mixColorsRGBA = mixColorsRGBA;
509
- exports.default = getColors;
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLHlEQXlCNEI7QUFDNUIscUNBQStCO0FBQy9CLHFDQUF1RTtBQUN2RSxpREFBcUU7QUFDckUscUNBQWdFO0FBR2hFLElBQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLElBQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLElBQU0sc0JBQXNCLEdBQUcsdUJBQXVCLENBQUM7QUFDdkQsSUFBTSx5QkFBeUIsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RFLElBQU0sMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7QUFFNUQsSUFBTSxrQ0FBa0MsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9FLElBQU0sa0NBQWtDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUsvRSxJQUFNLG1CQUFtQixHQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFdkQsU0FBZ0IscUJBQXFCLENBQUMsT0FBZTtJQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFGRCxzREFFQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxPQUFlLEVBQUUsT0FBZTtJQUN6RCxJQUFNLENBQUMsR0FBRyxJQUFBLGdCQUFPLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekMsT0FBTyw4QkFBdUIsT0FBTyxNQUFHLENBQUM7S0FDMUM7SUFDRCxJQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FB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QUN4QixJQUNEO0FBQ0osQ0FBQztBQWpCRCw4Q0FpQkM7QUFFRCxTQUFnQixZQUFZLENBQUMsS0FBVztJQUN0QyxPQUFPLGVBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBRyxDQUFDO0FBQ3BDLENBQUM7QUFGRCxvQ0FFQztBQUVELFNBQWdCLFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLFNBQWlCO0lBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqQyxDQUFDO0FBRkQsNEJBRUM7QUFFRCxTQUFnQixhQUFhLENBQzNCLE1BQVksRUFDWixNQUFZLEVBQ1osU0FBaUI7SUFFakIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFqQyxDQUFpQyxDQUFTLENBQUM7QUFDekUsQ0FBQztBQU5ELHNDQU1DO0FBRUQsa0JBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaW50ZXJwb2xhdGVDb29sLFxuICBpbnRlcnBvbGF0ZUluZmVybm8sXG4gIGludGVycG9sYXRlTWFnbWEsXG4gIGludGVycG9sYXRlUGxhc21hLFxuICBpbnRlcnBvbGF0ZVZpcmlkaXMsXG4gIGludGVycG9sYXRlV2FybSxcbiAgc2NoZW1lQmx1ZXMsXG4gIHNjaGVtZUJ1R24sXG4gIHNjaGVtZUJ1UHUsXG4gIHNjaGVtZUduQnUsXG4gIHNjaGVtZUdyZWVucyxcbiAgc2NoZW1lR3JleXMsXG4gIHNjaGVtZU9yYW5nZXMsXG4gIHNjaGVtZU9yUmQsXG4gIHNjaGVtZVB1QnUsXG4gIHNjaGVtZVB1QnVHbixcbiAgc2NoZW1lUHVSZCxcbiAgc2NoZW1lUHVycGxlcyxcbiAgc2NoZW1lUmRQdSxcbiAgc2NoZW1lUmVkcyxcbiAgc2NoZW1lWWxHbixcbiAgc2NoZW1lWWxHbkJ1LFxuICBzY2hlbWVZbE9yQnIsXG4gIHNjaGVtZVlsT3JSZCxcbn0gZnJvbSAnZDMtc2NhbGUtY2hyb21hdGljJztcbmltcG9ydCB7cmFuZ2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7c2NhbGVQb3csIHNjYWxlU2VxdWVudGlhbCwgc2NhbGVTZXF1ZW50aWFsUG93fSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge2ludGVycG9sYXRlQmFzaXMsIGludGVycG9sYXRlUmdiQmFzaXN9IGZyb20gJ2QzLWludGVycG9sYXRlJztcbmltcG9ydCB7Y29sb3IgYXMgZDNjb2xvciwgaGNsLCByZ2IgYXMgY29sb3JSZ2J9IGZyb20gJ2QzLWNvbG9yJztcbmltcG9ydCB7U2V0dGluZ3NTdGF0ZX0gZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuXG5jb25zdCBERUZBVUxUX09VVExJTkVfQ09MT1IgPSAnI2ZmZic7XG5jb25zdCBERUZBVUxUX0RJTU1FRF9PUEFDSVRZID0gMC40O1xuY29uc3QgREVGQVVMVF9GTE9XX01JTl9DT0xPUiA9ICdyZ2JhKDI0MCwyNDAsMjQwLDAuNSknO1xuY29uc3QgREVGQVVMVF9GTE9XX0NPTE9SX1NDSEVNRSA9IFtERUZBVUxUX0ZMT1dfTUlOX0NPTE9SLCAnIzEzN0NCRCddO1xuY29uc3QgREVGQVVMVF9MT0NBVElPTl9BUkVBX0NPTE9SID0gJ3JnYmEoMjIwLDIyMCwyMjAsMC41KSc7XG5cbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfUE9TSVRJVkUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyNmNjY1NGUnXTtcbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfTkVHQVRJVkUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyMwMGE5Y2MnXTtcblxuZXhwb3J0IHR5cGUgQ29sb3JTY2FsZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBSR0JBO1xuZXhwb3J0IHR5cGUgUkdCQSA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBGQUxMQkFDS19DT0xPUl9SR0JBOiBSR0JBID0gWzI1NSwgMjU1LCAyNTUsIDI1NV07XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGFjaXR5RmxvYXRUb0ludGVnZXIob3BhY2l0eTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQob3BhY2l0eSAqIDI1NSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGFjaWZ5SGV4KGhleENvZGU6IHN0cmluZywgb3BhY2l0eTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IGQzY29sb3IoaGV4Q29kZSk7XG4gIGlmICghYykge1xuICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2xvcjogJywgaGV4Q29kZSk7XG4gICAgcmV0dXJuIGByZ2JhKDI1NSwgMjU1LCAyNTUsICR7b3BhY2l0eX0pYDtcbiAgfVxuICBjb25zdCBjb2wgPSBjLnJnYigpO1xuICByZXR1cm4gYHJnYmEoJHtjb2wucn0sICR7Y29sLmd9LCAke2NvbC5ifSwgJHtvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JBc1JnYmEoY29sb3I6IHN0cmluZyB8IG51bWJlcltdKTogUkdCQSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgIHJldHVybiBjb2xvciBhcyBSR0JBO1xuICB9XG4gIGNvbnN0IGNvbCA9IGQzY29sb3IoY29sb3IpO1xuICBpZiAoIWNvbCkge1xuICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2xvcjogJywgY29sb3IpO1xuICAgIHJldHVybiBGQUxMQkFDS19DT0xPUl9SR0JBO1xuICB9XG4gIGNvbnN0IHJnYkNvbG9yID0gY29sLnJnYigpO1xuICByZXR1cm4gW1xuICAgIE1hdGguZmxvb3IocmdiQ29sb3IuciksXG4gICAgTWF0aC5mbG9vcihyZ2JDb2xvci5nKSxcbiAgICBNYXRoLmZsb29yKHJnYkNvbG9yLmIpLFxuICAgIG9wYWNpdHlGbG9hdFRvSW50ZWdlcihjb2wub3BhY2l0eSksXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNvbG9yQXNSZ2JhT3IoXG4gIGNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRDb2xvcjogUkdCQSB8IHN0cmluZyxcbik6IFJHQkEge1xuICBpZiAoY29sb3IpIHtcbiAgICByZXR1cm4gY29sb3JBc1JnYmEoY29sb3IpO1xuICB9XG4gIGlmICh0eXBlb2YgZGVmYXVsdENvbG9yID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBjb2xvckFzUmdiYShkZWZhdWx0Q29sb3IpO1xuICB9XG4gIHJldHVybiBkZWZhdWx0Q29sb3I7XG59XG5cbmNvbnN0IGFzU2NoZW1lID0gKHNjaGVtZTogUmVhZG9ubHlBcnJheTxSZWFkb25seUFycmF5PHN0cmluZz4+KSA9PlxuICBzY2hlbWVbc2NoZW1lLmxlbmd0aCAtIDFdIGFzIHN0cmluZ1tdO1xuXG5leHBvcnQgZW51bSBDb2xvclNjaGVtZSB7XG4gIHByaW1hcnkgPSAnIzE2MmQzYycsXG59XG5cbmNvbnN0IFNDQUxFX05VTV9TVEVQUyA9IDIwO1xuY29uc3QgZ2V0Q29sb3JTdGVwcyA9IChpbnRlcnBvbGF0ZTogKHg6IG51bWJlcikgPT4gc3RyaW5nKSA9PlxuICByYW5nZSgwLCBTQ0FMRV9OVU1fU1RFUFMgKyAxKVxuICAgIC5tYXAoKGkpID0+IGludGVycG9sYXRlKGkgLyBTQ0FMRV9OVU1fU1RFUFMpKVxuICAgIC5yZXZlcnNlKCk7XG5cbmNvbnN0IEZMT1dfTUlOX0NPTE9SID0gJ3JnYmEoMjQwLDI0MCwyNDAsMC41KSc7XG5leHBvcnQgY29uc3QgR1JBWUlTSCA9IFtGTE9XX01JTl9DT0xPUiwgQ29sb3JTY2hlbWUucHJpbWFyeV07XG5jb25zdCBzY2hlbWVCbHVZbCA9IFtcbiAgJyNmN2ZlYWUnLFxuICAnI2I3ZTZhNScsXG4gICcjN2NjYmEyJyxcbiAgJyM0NmFlYTAnLFxuICAnIzA4OTA5OScsXG4gICcjMDA3MThiJyxcbiAgJyMwNDUyNzUnLFxuXTtcblxuY29uc3Qgc2NoZW1lRW1ybGQgPSBbXG4gICcjZDNmMmEzJyxcbiAgJyM5N2UxOTYnLFxuICAnIzZjYzA4YicsXG4gICcjNGM5YjgyJyxcbiAgJyMyMTdhNzknLFxuICAnIzEwNTk2NScsXG4gICcjMDc0MDUwJyxcbl07XG5cbmV4cG9ydCBjb25zdCBzY2hlbWVUZWFsID0gW1xuICAnI2QxZWVlYScsXG4gICcjYThkYmQ5JyxcbiAgJyM4NWM0YzknLFxuICAnIzY4YWJiOCcsXG4gICcjNGY5MGE2JyxcbiAgJyMzYjczOGYnLFxuICAnIzJhNTY3NCcsXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT0xPUl9TQ0hFTUUgPSBzY2hlbWVUZWFsO1xuZXhwb3J0IGNvbnN0IENPTE9SX1NDSEVNRVM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmdbXX0gPSB7XG4gIEJsdWVzOiBhc1NjaGVtZShzY2hlbWVCbHVlcyksXG4gIEJsdUdybjogW1xuICAgICcjYzRlNmMzJyxcbiAgICAnIzk2ZDJhNCcsXG4gICAgJyM2ZGJjOTAnLFxuICAgICcjNGRhMjg0JyxcbiAgICAnIzM2ODc3YScsXG4gICAgJyMyNjZiNmUnLFxuICAgICcjMWQ0ZjYwJyxcbiAgXSxcbiAgQmx1WWw6IHNjaGVtZUJsdVlsLFxuICBCcnduWWw6IFtcbiAgICAnI2VkZTVjZicsXG4gICAgJyNlMGMyYTInLFxuICAgICcjZDM5YzgzJyxcbiAgICAnI2MxNzY2ZicsXG4gICAgJyNhNjU0NjEnLFxuICAgICcjODEzNzUzJyxcbiAgICAnIzU0MWYzZicsXG4gIF0sXG4gIEJ1R246IGFzU2NoZW1lKHNjaGVtZUJ1R24pLFxuICBCdVB1OiBhc1NjaGVtZShzY2hlbWVCdVB1KSxcbiAgQnVyZzogW1xuICAgICcjZmZjNmM0JyxcbiAgICAnI2Y0YTNhOCcsXG4gICAgJyNlMzgxOTEnLFxuICAgICcjY2M2MDdkJyxcbiAgICAnI2FkNDY2YycsXG4gICAgJyM4YjMwNTgnLFxuICAgICcjNjcyMDQ0JyxcbiAgXSxcbiAgQnVyZ1lsOiBbXG4gICAgJyNmYmU2YzUnLFxuICAgICcjZjViYTk4JyxcbiAgICAnI2VlOGE4MicsXG4gICAgJyNkYzcxNzYnLFxuICAgICcjYzg1ODZjJyxcbiAgICAnIzljM2Y1ZCcsXG4gICAgJyM3MDI4NGEnLFxuICBdLFxuICBDb29sOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlQ29vbCksXG4gIERhcmtNaW50OiBbXG4gICAgJyNkMmZiZDQnLFxuICAgICcjYTVkYmMyJyxcbiAgICAnIzdiYmNiMCcsXG4gICAgJyM1NTljOWUnLFxuICAgICcjM2E3Yzg5JyxcbiAgICAnIzIzNWQ3MicsXG4gICAgJyMxMjNmNWEnLFxuICBdLFxuICBFbXJsZDogc2NoZW1lRW1ybGQsXG4gIEduQnU6IGFzU2NoZW1lKHNjaGVtZUduQnUpLFxuICBHcmF5aXNoOiBHUkFZSVNILFxuICBHcmVlbnM6IGFzU2NoZW1lKHNjaGVtZUdyZWVucyksXG4gIEdyZXlzOiBhc1NjaGVtZShzY2hlbWVHcmV5cyksXG4gIEluZmVybm86IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVJbmZlcm5vKSxcbiAgTWFnZW50YTogW1xuICAgICcjZjNjYmQzJyxcbiAgICAnI2VhYTliZCcsXG4gICAgJyNkZDg4YWMnLFxuICAgICcjY2E2OTlkJyxcbiAgICAnI2IxNGQ4ZScsXG4gICAgJyM5MTM1N2QnLFxuICAgICcjNmMyMTY3JyxcbiAgXSxcbiAgTWFnbWE6IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVNYWdtYSksXG4gIE1pbnQ6IFtcbiAgICAnI2U0ZjFlMScsXG4gICAgJyNiNGQ5Y2MnLFxuICAgICcjODljMGI2JyxcbiAgICAnIzYzYTZhMCcsXG4gICAgJyM0NDhjOGEnLFxuICAgICcjMjg3Mjc0JyxcbiAgICAnIzBkNTg1ZicsXG4gIF0sXG4gIE9yYW5nZXM6IGFzU2NoZW1lKHNjaGVtZU9yYW5nZXMpLFxuICBPclJkOiBhc1NjaGVtZShzY2hlbWVPclJkKSxcbiAgT3JZZWw6IFtcbiAgICAnI2VjZGE5YScsXG4gICAgJyNlZmM0N2UnLFxuICAgICcjZjNhZDZhJyxcbiAgICAnI2Y3OTQ1ZCcsXG4gICAgJyNmOTdiNTcnLFxuICAgICcjZjY2MzU2JyxcbiAgICAnI2VlNGQ1YScsXG4gIF0sXG4gIFBlYWNoOiBbXG4gICAgJyNmZGUwYzUnLFxuICAgICcjZmFjYmE2JyxcbiAgICAnI2Y4YjU4YicsXG4gICAgJyNmNTllNzInLFxuICAgICcjZjI4NTVkJyxcbiAgICAnI2VmNmE0YycsXG4gICAgJyNlYjRhNDAnLFxuICBdLFxuICBQbGFzbWE6IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVQbGFzbWEpLFxuICBQaW5rWWw6IFtcbiAgICAnI2ZlZjZiNScsXG4gICAgJyNmZmRkOWEnLFxuICAgICcjZmZjMjg1JyxcbiAgICAnI2ZmYTY3OScsXG4gICAgJyNmYThhNzYnLFxuICAgICcjZjE2ZDdhJyxcbiAgICAnI2UxNTM4MycsXG4gIF0sXG4gIFB1QnU6IGFzU2NoZW1lKHNjaGVtZVB1QnUpLFxuICBQdUJ1R246IGFzU2NoZW1lKHNjaGVtZVB1QnVHbiksXG4gIFB1UmQ6IGFzU2NoZW1lKHNjaGVtZVB1UmQpLFxuICBQdXJwOiBbXG4gICAgJyNmM2UwZjcnLFxuICAgICcjZTRjN2YxJyxcbiAgICAnI2QxYWZlOCcsXG4gICAgJyNiOTk4ZGQnLFxuICAgICcjOWY4MmNlJyxcbiAgICAnIzgyNmRiYScsXG4gICAgJyM2MzU4OWYnLFxuICBdLFxuICBQdXJwbGVzOiBhc1NjaGVtZShzY2hlbWVQdXJwbGVzKSxcbiAgUHVycE9yOiBbXG4gICAgJyNmOWRkZGEnLFxuICAgICcjZjJiOWM0JyxcbiAgICAnI2U1OTdiOScsXG4gICAgJyNjZTc4YjMnLFxuICAgICcjYWQ1ZmFkJyxcbiAgICAnIzgzNGJhMCcsXG4gICAgJyM1NzNiODgnLFxuICBdLFxuICBSZFB1OiBhc1NjaGVtZShzY2hlbWVSZFB1KSxcbiAgUmVkT3I6IFtcbiAgICAnI2Y2ZDJhOScsXG4gICAgJyNmNWI3OGUnLFxuICAgICcjZjE5YzdjJyxcbiAgICAnI2VhODE3MScsXG4gICAgJyNkZDY4NmMnLFxuICAgICcjY2E1MjY4JyxcbiAgICAnI2IxM2Y2NCcsXG4gIF0sXG4gIFJlZHM6IGFzU2NoZW1lKHNjaGVtZVJlZHMpLFxuICBTdW5zZXQ6IFtcbiAgICAnI2YzZTc5YicsXG4gICAgJyNmYWM0ODQnLFxuICAgICcjZjhhMDdlJyxcbiAgICAnI2ViN2Y4NicsXG4gICAgJyNjZTY2OTMnLFxuICAgICcjYTA1OWEwJyxcbiAgICAnIzVjNTNhNScsXG4gIF0sXG4gIFN1bnNldERhcms6IFtcbiAgICAnI2ZjZGU5YycsXG4gICAgJyNmYWE0NzYnLFxuICAgICcjZjA3NDZlJyxcbiAgICAnI2UzNGY2ZicsXG4gICAgJyNkYzM5NzcnLFxuICAgICcjYjkyNTdhJyxcbiAgICAnIzdjMWQ2ZicsXG4gIF0sXG4gIFRlYWw6IHNjaGVtZVRlYWwsXG4gIFRlYWxHcm46IFtcbiAgICAnI2IwZjJiYycsXG4gICAgJyM4OWU4YWMnLFxuICAgICcjNjdkYmE1JyxcbiAgICAnIzRjYzhhMycsXG4gICAgJyMzOGIyYTMnLFxuICAgICcjMmM5OGEwJyxcbiAgICAnIzI1N2Q5OCcsXG4gIF0sXG4gIFZpcmlkaXM6IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVWaXJpZGlzKSxcbiAgV2FybTogZ2V0Q29sb3JTdGVwcyhpbnRlcnBvbGF0ZVdhcm0pLFxuICBZbEduOiBhc1NjaGVtZShzY2hlbWVZbEduKSxcbiAgWWxHbkJ1OiBhc1NjaGVtZShzY2hlbWVZbEduQnUpLFxuICBZbE9yQnI6IGFzU2NoZW1lKHNjaGVtZVlsT3JCciksXG4gIFlsT3JSZDogYXNTY2hlbWUoc2NoZW1lWWxPclJkKSxcbn07XG5cbmV4cG9ydCBjb25zdCBDT0xPUl9TQ0hFTUVfS0VZUyA9IE9iamVjdC5rZXlzKENPTE9SX1NDSEVNRVMpO1xuXG5jb25zdCBjb21wbGVtZW50YXJ5ID0gJyNmNTIwMjAnO1xuY29uc3QgYmFzZURpZmZDb2xvciA9ICcjMTdhNWJlJztcblxuY29uc3QgZGlmZkNvbG9yczogRGlmZkNvbG9ycyA9IHtcbiAgbmVnYXRpdmU6IHtcbiAgICBmbG93czoge1xuICAgICAgc2NoZW1lOiBbRkxPV19NSU5fQ09MT1IsIGJhc2VEaWZmQ29sb3JdLFxuICAgIH0sXG4gIH0sXG4gIHBvc2l0aXZlOiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogW0ZMT1dfTUlOX0NPTE9SLCBjb21wbGVtZW50YXJ5XSxcbiAgICB9LFxuICB9LFxuICBsb2NhdGlvbkFyZWFzOiB7XG4gICAgb3V0bGluZTogJ3JnYmEoOTIsMTEyLDEyOCwwLjUpJyxcbiAgICBub3JtYWw6ICdyZ2JhKDIyMCwyMjAsMjIwLDAuNSknLFxuICB9LFxuICBvdXRsaW5lQ29sb3I6ICdyZ2IoMjMwLDIzMywyMzcpJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93bWFwQ29sb3JzKFxuICBzZXR0aW5nc1N0YXRlOiBTZXR0aW5nc1N0YXRlLFxuKTogQ29sb3JzIHwgRGlmZkNvbG9ycyB7XG4gIHJldHVybiBnZXRDb2xvcnMoXG4gICAgZmFsc2UsIC8vIFRPRE86IGRpZmZNb2RlXG4gICAgc2V0dGluZ3NTdGF0ZS5jb2xvclNjaGVtZSxcbiAgICBzZXR0aW5nc1N0YXRlLmRhcmtNb2RlLFxuICAgIHNldHRpbmdzU3RhdGUuZmFkZUVuYWJsZWQsXG4gICAgc2V0dGluZ3NTdGF0ZS5mYWRlT3BhY2l0eUVuYWJsZWQsXG4gICAgc2V0dGluZ3NTdGF0ZS5mYWRlQW1vdW50LFxuICAgIHNldHRpbmdzU3RhdGUuYW5pbWF0aW9uRW5hYmxlZCxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9ycyhcbiAgZGlmZk1vZGU6IGJvb2xlYW4sXG4gIGNvbG9yU2NoZW1lOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgZGFya01vZGU6IGJvb2xlYW4sXG4gIGZhZGVFbmFibGVkOiBib29sZWFuLFxuICBmYWRlT3BhY2l0eUVuYWJsZWQ6IGJvb2xlYW4sXG4gIGZhZGVBbW91bnQ6IG51bWJlcixcbiAgYW5pbWF0ZTogYm9vbGVhbixcbik6IENvbG9ycyB8IERpZmZDb2xvcnMge1xuICBpZiAoZGlmZk1vZGUpIHtcbiAgICByZXR1cm4gZGlmZkNvbG9ycztcbiAgfVxuXG4gIGxldCBzY2hlbWU7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JTY2hlbWUpKSB7XG4gICAgc2NoZW1lID0gY29sb3JTY2hlbWU7XG4gIH0gZWxzZSB7XG4gICAgc2NoZW1lID1cbiAgICAgIChjb2xvclNjaGVtZSAmJiBDT0xPUl9TQ0hFTUVTW2NvbG9yU2NoZW1lXSkgfHwgREVGQVVMVF9DT0xPUl9TQ0hFTUU7XG4gICAgaWYgKGRhcmtNb2RlKSB7XG4gICAgICBzY2hlbWUgPSBzY2hlbWUuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgKGFuaW1hdGUpXG4gIC8vIGlmIChmYWRlQW1vdW50ID4gMClcbiAge1xuICAgIGNvbnN0IGluZGljZXMgPSByYW5nZSgwLCBNYXRoLm1heCgxMCwgc2NoZW1lLmxlbmd0aCkpO1xuICAgIGNvbnN0IE4gPSBpbmRpY2VzLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgY29sb3JTY2FsZSA9IHNjYWxlU2VxdWVudGlhbChpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZSkpLmRvbWFpbihbXG4gICAgICAwLFxuICAgICAgTixcbiAgICBdKTtcblxuICAgIGlmICghZmFkZUVuYWJsZWQgfHwgZmFkZUFtb3VudCA9PT0gMCkge1xuICAgICAgc2NoZW1lID0gaW5kaWNlcy5tYXAoKGMsIGkpID0+IGNvbG9yU2NhbGUoaSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhbW91bnQgPSBzY2FsZVBvdygpXG4gICAgICAgIC8vIC5leHBvbmVudChhbmltYXRlID8gMSA6IDEvMi41KVxuICAgICAgICAvLyAuZXhwb25lbnQoYW5pbWF0ZSA/IDEwMCA6IDUwKVxuICAgICAgICAvLyAuZXhwb25lbnQoYW5pbWF0ZSA/IDIwIDogNSlcbiAgICAgICAgLy8gLmV4cG9uZW50KDEvMi41KVxuICAgICAgICAuZXhwb25lbnQoMS41KVxuICAgICAgICAuZG9tYWluKFtOLCAwXSlcbiAgICAgICAgLy8gLnJhbmdlKFtmYWRlQW1vdW50LzEwMCooYW5pbWF0ZT8yOjEpLCAwXSlcbiAgICAgICAgLy8gLnJhbmdlKFswLCBmYWRlQW1vdW50LzEwMCooYW5pbWF0ZT8yOjEpXSlcbiAgICAgICAgLy8gLnJhbmdlKGRhcmtNb2RlID8gWzEtZmFkZUFtb3VudC8xMDAsIDFdIDogWzEsIDEgLSBmYWRlQW1vdW50LzEwMF0pXG4gICAgICAgIC8vIC5yYW5nZShkYXJrTW9kZSA/IFsxIC0gZmFkZUFtb3VudC8xMDAsIDFdIDogW2ZhZGVBbW91bnQvMTAwLCAwXSlcbiAgICAgICAgLy8gLnJhbmdlKFsxIC0gZmFkZUFtb3VudC8xMDAsIDFdKVxuICAgICAgICAucmFuZ2UoWzAsICgyICogZmFkZUFtb3VudCkgLyAxMDBdKTtcblxuICAgICAgc2NoZW1lID0gaW5kaWNlcy5tYXAoXG4gICAgICAgIChjLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSBjb2xvclNjYWxlKGkpO1xuICAgICAgICAgIGNvbnN0IGEgPSBhbW91bnQoaSk7XG4gICAgICAgICAgaWYgKGNvbG9yID09IG51bGwgfHwgYSA9PSBudWxsKSByZXR1cm4gJyMwMDAnO1xuICAgICAgICAgIGNvbnN0IGNvbCA9IGhjbChjb2xvcik7XG4gICAgICAgICAgY29sLmwgPSBkYXJrTW9kZSA/IGNvbC5sIC0gY29sLmwgKiBhIDogY29sLmwgKyAoMTAwIC0gY29sLmwpICogYTtcbiAgICAgICAgICBjb2wuYyA9IGNvbC5jIC0gY29sLmMgKiAoYSAvIDQpO1xuICAgICAgICAgIGlmIChmYWRlT3BhY2l0eUVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbC5vcGFjaXR5ID0gY29sLm9wYWNpdHkgKiAoMS4wIC0gYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2wudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVSZ2JCYXNpcyhbY29sb3JTY2FsZShpKSwgZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZiddKShhbW91bnQoaSkpXG4gICAgICAgIC8vIGludGVycG9sYXRlSHNsKGNvbG9yU2NhbGUoaSksIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnKShhbW91bnQoaSkpLnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXJrTW9kZSxcbiAgICBmbG93czoge1xuICAgICAgc2NoZW1lLFxuICAgIH0sXG4gICAgbG9jYXRpb25DaXJjbGVzOiB7XG4gICAgICBvdXRnb2luZzogZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZicsXG4gICAgfSxcbiAgICBvdXRsaW5lQ29sb3I6IGRhcmtNb2RlID8gJyMwMDAnIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlUmdiYUJhc2lzKGNvbG9yczogc3RyaW5nW10pIHtcbiAgY29uc3Qgc3BsaW5lID0gaW50ZXJwb2xhdGVCYXNpcztcbiAgY29uc3QgbiA9IGNvbG9ycy5sZW5ndGg7XG4gIGxldCByOiBhbnkgPSBuZXcgQXJyYXkobiksXG4gICAgZzogYW55ID0gbmV3IEFycmF5KG4pLFxuICAgIGI6IGFueSA9IG5ldyBBcnJheShuKSxcbiAgICBvcGFjaXR5OiBhbnkgPSBuZXcgQXJyYXkobiksXG4gICAgaSxcbiAgICBjb2xvcjogYW55O1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgY29sb3IgPSBjb2xvclJnYihjb2xvcnNbaV0pO1xuICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICBiW2ldID0gY29sb3IuYiB8fCAwO1xuICAgIG9wYWNpdHlbaV0gPSBjb2xvci5vcGFjaXR5IHx8IDA7XG4gIH1cbiAgciA9IHNwbGluZShyKTtcbiAgZyA9IHNwbGluZShnKTtcbiAgYiA9IHNwbGluZShiKTtcbiAgb3BhY2l0eSA9IHNwbGluZShvcGFjaXR5KTtcbiAgLy8gY29sb3Iub3BhY2l0eSA9IDE7XG4gIHJldHVybiBmdW5jdGlvbiAodDogbnVtYmVyKSB7XG4gICAgY29sb3IuciA9IHIodCk7XG4gICAgY29sb3IuZyA9IGcodCk7XG4gICAgY29sb3IuYiA9IGIodCk7XG4gICAgY29sb3Iub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgcmV0dXJuIGNvbG9yICsgJyc7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBzY2hlbWU6IHN0cmluZ1tdLFxuICBhbmltYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogQ29sb3JTY2FsZSB7XG4gIGNvbnN0IHNjYWxlID0gc2NhbGVTZXF1ZW50aWFsUG93KGludGVycG9sYXRlUmdiYUJhc2lzKHNjaGVtZSkpXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIC5leHBvbmVudChhbmltYXRlID8gMSAvIDIgOiAxIC8gMylcbiAgICAuZG9tYWluKGRvbWFpbik7XG5cbiAgcmV0dXJuICh2YWx1ZTogbnVtYmVyKSA9PiBjb2xvckFzUmdiYShzY2FsZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd0NvbG9yU2NhbGUoXG4gIGNvbG9yczogQ29sb3JzUkdCQSB8IERpZmZDb2xvcnNSR0JBLFxuICBtYWduaXR1ZGVFeHRlbnQ6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsXG4gIGFuaW1hdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiAobWFnbml0dWRlOiBudW1iZXIpID0+IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgbWluTWFnbml0dWRlID0gbWFnbml0dWRlRXh0ZW50ID8gbWFnbml0dWRlRXh0ZW50WzBdIDogMDtcbiAgY29uc3QgbWF4TWFnbml0dWRlID0gbWFnbml0dWRlRXh0ZW50ID8gbWFnbml0dWRlRXh0ZW50WzFdIDogMDtcbiAgaWYgKGlzRGlmZkNvbG9yc1JHQkEoY29sb3JzKSkge1xuICAgIGNvbnN0IHBvc1NjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgICBbMCwgbWF4TWFnbml0dWRlXSxcbiAgICAgIGNvbG9ycy5wb3NpdGl2ZS5mbG93cy5zY2hlbWUsXG4gICAgICBhbmltYXRlLFxuICAgICk7XG4gICAgY29uc3QgbmVnU2NhbGUgPSBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgICAgIFswLCBtaW5NYWduaXR1ZGVdLFxuICAgICAgY29sb3JzLm5lZ2F0aXZlLmZsb3dzLnNjaGVtZSxcbiAgICAgIGFuaW1hdGUsXG4gICAgKTtcblxuICAgIHJldHVybiAobWFnbml0dWRlOiBudW1iZXIpID0+XG4gICAgICBtYWduaXR1ZGUgPj0gMCA/IHBvc1NjYWxlKG1hZ25pdHVkZSkgOiBuZWdTY2FsZShtYWduaXR1ZGUpO1xuICB9XG5cbiAgY29uc3Qgc2NhbGUgPSBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgICBbMCwgbWF4TWFnbml0dWRlIHx8IDBdLFxuICAgIGNvbG9ycy5mbG93cy5zY2hlbWUsXG4gICAgYW5pbWF0ZSxcbiAgKTtcbiAgcmV0dXJuIChtYWduaXR1ZGU6IG51bWJlcikgPT4gc2NhbGUobWFnbml0dWRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZkNvbG9ycyhcbiAgY29sb3JzOiBEaWZmQ29sb3JzIHwgQ29sb3JzLFxuKTogY29sb3JzIGlzIERpZmZDb2xvcnMge1xuICByZXR1cm4gKGNvbG9ycyBhcyBEaWZmQ29sb3JzKS5wb3NpdGl2ZSAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWZmQ29sb3JzUkdCQShcbiAgY29sb3JzOiBEaWZmQ29sb3JzUkdCQSB8IENvbG9yc1JHQkEsXG4pOiBjb2xvcnMgaXMgRGlmZkNvbG9yc1JHQkEge1xuICByZXR1cm4gKGNvbG9ycyBhcyBEaWZmQ29sb3JzUkdCQSkucG9zaXRpdmUgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYXRpb25BcmVhQ29sb3JzUkdCQShcbiAgY29sb3JzOiBMb2NhdGlvbkFyZWFDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRhcmtNb2RlOiBib29sZWFuLFxuKTogTG9jYXRpb25BcmVhQ29sb3JzUkdCQSB7XG4gIGNvbnN0IG5vcm1hbENvbG9yID0gKGNvbG9ycyAmJiBjb2xvcnMubm9ybWFsKSB8fCBERUZBVUxUX0xPQ0FUSU9OX0FSRUFfQ09MT1I7XG4gIGNvbnN0IG5vcm1hbENvbG9ySGNsID0gaGNsKG5vcm1hbENvbG9yKTtcbiAgY29uc3QgbG9jYXRpb25BcmVhc05vcm1hbCA9IGNvbG9yQXNSZ2JhKG5vcm1hbENvbG9yKTtcbiAgcmV0dXJuIHtcbiAgICBub3JtYWw6IGxvY2F0aW9uQXJlYXNOb3JtYWwsXG4gICAgY29ubmVjdGVkOiBjb2xvckFzUmdiYU9yKGNvbG9ycyAmJiBjb2xvcnMuY29ubmVjdGVkLCBsb2NhdGlvbkFyZWFzTm9ybWFsKSxcbiAgICBoaWdobGlnaHRlZDogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuaGlnaGxpZ2h0ZWQsXG4gICAgICBvcGFjaWZ5SGV4KFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oMSkudG9TdHJpbmcoKSxcbiAgICAgICAgMC41LFxuICAgICAgKSxcbiAgICApLFxuICAgIHNlbGVjdGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5zZWxlY3RlZCxcbiAgICAgIG9wYWNpZnlIZXgoXG4gICAgICAgIG5vcm1hbENvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgyKS50b1N0cmluZygpLFxuICAgICAgICAwLjgsXG4gICAgICApLFxuICAgICksXG4gICAgb3V0bGluZTogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMub3V0bGluZSxcbiAgICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oNCkudG9TdHJpbmcoKSxcbiAgICAgICksXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29sb3JzIHtcbiAgc2NoZW1lPzogc3RyaW5nW107XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQ2lyY2xlQ29sb3JzIHtcbiAgaW5uZXI/OiBzdHJpbmc7XG4gIG91dGdvaW5nPzogc3RyaW5nO1xuICBpbmNvbWluZz86IHN0cmluZztcbiAgaGlnaGxpZ2h0ZWQ/OiBzdHJpbmc7XG4gIGVtcHR5Pzogc3RyaW5nO1xuICBvdXRsaW5lRW1wdHlNaXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25BcmVhQ29sb3JzIHtcbiAgb3V0bGluZT86IHN0cmluZztcbiAgbm9ybWFsPzogc3RyaW5nO1xuICBzZWxlY3RlZD86IHN0cmluZztcbiAgaGlnaGxpZ2h0ZWQ/OiBzdHJpbmc7XG4gIGNvbm5lY3RlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29sb3JzIHtcbiAgZGFya01vZGU/OiBib29sZWFuO1xuICBsb2NhdGlvbkFyZWFzPzogTG9jYXRpb25BcmVhQ29sb3JzO1xuICBkaW1tZWRPcGFjaXR5PzogbnVtYmVyO1xuICBvdXRsaW5lQ29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JzIGV4dGVuZHMgQmFzZUNvbG9ycyB7XG4gIGZsb3dzPzogRmxvd0NvbG9ycztcbiAgbG9jYXRpb25DaXJjbGVzPzogTG9jYXRpb25DaXJjbGVDb2xvcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9ycyB7XG4gIGZsb3dzPzogRmxvd0NvbG9ycztcbiAgbG9jYXRpb25DaXJjbGVzPzogTG9jYXRpb25DaXJjbGVDb2xvcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbG9ycyBleHRlbmRzIEJhc2VDb2xvcnMge1xuICBwb3NpdGl2ZT86IEZsb3dBbmRDaXJjbGVDb2xvcnM7XG4gIG5lZ2F0aXZlPzogRmxvd0FuZENpcmNsZUNvbG9ycztcbn1cblxuLy8gVGhlIHh4eENvbG9yc1JHQkEgb2JqZWN0cyBhcmUgbWlycm9yaW5nIHRoZSBpbnB1dCBjb2xvcnMnIG9iamVjdHMsXG4vLyBidXQgY29udmVydGVkIHRvIFJHQkEgYW5kIHdpdGggYWxsIHRoZSBvbWl0dGVkIG9uZXMgc2V0IHRvIGRlZmF1bHRzXG4vLyBvciBkZXJpdmVkLlxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29sb3JzUkdCQSB7XG4gIHNjaGVtZTogc3RyaW5nW107XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQ2lyY2xlQ29sb3JzUkdCQSB7XG4gIGlubmVyOiBSR0JBO1xuICBvdXRnb2luZzogUkdCQTtcbiAgaW5jb21pbmc6IFJHQkE7XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xuICBlbXB0eTogUkdCQTtcbiAgb3V0bGluZUVtcHR5TWl4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25BcmVhQ29sb3JzUkdCQSB7XG4gIG91dGxpbmU6IFJHQkE7XG4gIG5vcm1hbDogUkdCQTtcbiAgc2VsZWN0ZWQ6IFJHQkE7XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xuICBjb25uZWN0ZWQ6IFJHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbG9yc1JHQkEge1xuICBkYXJrTW9kZTogYm9vbGVhbjtcbiAgbG9jYXRpb25BcmVhczogTG9jYXRpb25BcmVhQ29sb3JzUkdCQTtcbiAgZGltbWVkT3BhY2l0eTogbnVtYmVyO1xuICBvdXRsaW5lQ29sb3I6IFJHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JzUkdCQSBleHRlbmRzIEJhc2VDb2xvcnNSR0JBIHtcbiAgZmxvd3M6IEZsb3dDb2xvcnNSR0JBO1xuICBsb2NhdGlvbkNpcmNsZXM6IExvY2F0aW9uQ2lyY2xlQ29sb3JzUkdCQTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQSB7XG4gIGZsb3dzOiBGbG93Q29sb3JzUkdCQTtcbiAgbG9jYXRpb25DaXJjbGVzOiBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbG9yc1JHQkEgZXh0ZW5kcyBCYXNlQ29sb3JzUkdCQSB7XG4gIHBvc2l0aXZlOiBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQTtcbiAgbmVnYXRpdmU6IEZsb3dBbmRDaXJjbGVDb2xvcnNSR0JBO1xufVxuXG5mdW5jdGlvbiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICBpbnB1dENvbG9yczogRmxvd0FuZENpcmNsZUNvbG9ycyB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdEZsb3dDb2xvclNjaGVtZTogc3RyaW5nW10sXG4gIGRhcmtNb2RlOiBib29sZWFuLFxuKTogRmxvd0FuZENpcmNsZUNvbG9yc1JHQkEge1xuICBjb25zdCBmbG93Q29sb3JTY2hlbWUgPVxuICAgIChpbnB1dENvbG9ycyAmJiBpbnB1dENvbG9ycy5mbG93cyAmJiBpbnB1dENvbG9ycy5mbG93cy5zY2hlbWUpIHx8XG4gICAgZGVmYXVsdEZsb3dDb2xvclNjaGVtZTtcbiAgY29uc3QgbWF4Rmxvd0NvbG9ySGNsID0gaGNsKGZsb3dDb2xvclNjaGVtZVtmbG93Q29sb3JTY2hlbWUubGVuZ3RoIC0gMV0pO1xuICBjb25zdCBmbG93Q29sb3JIaWdobGlnaHRlZCA9IGNvbG9yQXNSZ2JhT3IoXG4gICAgaW5wdXRDb2xvcnMgJiYgaW5wdXRDb2xvcnMuZmxvd3MgJiYgaW5wdXRDb2xvcnMuZmxvd3MuaGlnaGxpZ2h0ZWQsXG4gICAgY29sb3JBc1JnYmEoXG4gICAgICBtYXhGbG93Q29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDAuNykudG9TdHJpbmcoKSxcbiAgICApLFxuICApO1xuXG4gIGNvbnN0IGVtcHR5Q29sb3IgPSBjb2xvckFzUmdiYU9yKFxuICAgIGlucHV0Q29sb3JzPy5sb2NhdGlvbkNpcmNsZXM/LmVtcHR5LFxuICAgIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICApO1xuICBjb25zdCBpbm5lckNvbG9yID0gY29sb3JBc1JnYmFPcihcbiAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzICYmXG4gICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMuaW5uZXIsXG4gICAgbWF4Rmxvd0NvbG9ySGNsLnRvU3RyaW5nKCksXG4gICk7XG4gIHJldHVybiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogZmxvd0NvbG9yU2NoZW1lLFxuICAgICAgaGlnaGxpZ2h0ZWQ6IGZsb3dDb2xvckhpZ2hsaWdodGVkLFxuICAgIH0sXG4gICAgbG9jYXRpb25DaXJjbGVzOiB7XG4gICAgICBpbm5lcjogaW5uZXJDb2xvcixcbiAgICAgIG91dGdvaW5nOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5vdXRnb2luZyxcbiAgICAgICAgZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZicsXG4gICAgICApLFxuICAgICAgaW5jb21pbmc6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICAgIGlucHV0Q29sb3JzICYmXG4gICAgICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzICYmXG4gICAgICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmluY29taW5nLFxuICAgICAgICBtYXhGbG93Q29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDEuMjUpLnRvU3RyaW5nKCksXG4gICAgICApLFxuICAgICAgaGlnaGxpZ2h0ZWQ6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICAgIGlucHV0Q29sb3JzICYmXG4gICAgICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzICYmXG4gICAgICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmhpZ2hsaWdodGVkLFxuICAgICAgICBmbG93Q29sb3JIaWdobGlnaHRlZCxcbiAgICAgICksXG4gICAgICBlbXB0eTogZW1wdHlDb2xvcixcbiAgICAgIG91dGxpbmVFbXB0eU1peDogaW5wdXRDb2xvcnM/LmxvY2F0aW9uQ2lyY2xlcz8ub3V0bGluZUVtcHR5TWl4ID8/IDAuNCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCYXNlQ29sb3JzUkdCQShcbiAgY29sb3JzOiBDb2xvcnMgfCBEaWZmQ29sb3JzIHwgdW5kZWZpbmVkLFxuKTogQmFzZUNvbG9yc1JHQkEge1xuICBjb25zdCBkYXJrTW9kZSA9IGNvbG9ycyAmJiBjb2xvcnMuZGFya01vZGUgPyB0cnVlIDogZmFsc2U7XG4gIHJldHVybiB7XG4gICAgZGFya01vZGUsXG4gICAgbG9jYXRpb25BcmVhczogZ2V0TG9jYXRpb25BcmVhQ29sb3JzUkdCQShcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMubG9jYXRpb25BcmVhcyxcbiAgICAgIGRhcmtNb2RlLFxuICAgICksXG4gICAgb3V0bGluZUNvbG9yOiBjb2xvckFzUmdiYShcbiAgICAgIChjb2xvcnMgJiYgY29sb3JzLm91dGxpbmVDb2xvcikgfHwgREVGQVVMVF9PVVRMSU5FX0NPTE9SLFxuICAgICksXG4gICAgZGltbWVkT3BhY2l0eTpcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuZGltbWVkT3BhY2l0eSAhPSBudWxsXG4gICAgICAgID8gY29sb3JzLmRpbW1lZE9wYWNpdHlcbiAgICAgICAgOiBERUZBVUxUX0RJTU1FRF9PUEFDSVRZLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3JzUkdCQShjb2xvcnM6IENvbG9ycyB8IHVuZGVmaW5lZCk6IENvbG9yc1JHQkEge1xuICBjb25zdCBiYXNlQ29sb3JzUkdCQSA9IGdldEJhc2VDb2xvcnNSR0JBKGNvbG9ycyk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbG9yc1JHQkEsXG4gICAgLi4uZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlmZkNvbG9yc1JHQkEoXG4gIGNvbG9yczogRGlmZkNvbG9ycyB8IHVuZGVmaW5lZCxcbik6IERpZmZDb2xvcnNSR0JBIHtcbiAgY29uc3QgYmFzZUNvbG9yc1JHQkEgPSBnZXRCYXNlQ29sb3JzUkdCQShjb2xvcnMpO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb2xvcnNSR0JBLFxuICAgIHBvc2l0aXZlOiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5wb3NpdGl2ZSxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfUE9TSVRJVkUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICAgIG5lZ2F0aXZlOiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5uZWdhdGl2ZSxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfTkVHQVRJVkUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiYUFzU3RyaW5nKGNvbG9yOiBSR0JBKTogc3RyaW5nIHtcbiAgcmV0dXJuIGByZ2JhKCR7Y29sb3Iuam9pbignLCcpfSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWlkcG9pbnQoYTogbnVtYmVyLCBiOiBudW1iZXIsIHplcm9Ub09uZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEgKyAoYiAtIGEpICogemVyb1RvT25lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWl4Q29sb3JzUkdCQShcbiAgY29sb3IxOiBSR0JBLFxuICBjb2xvcjI6IFJHQkEsXG4gIHplcm9Ub09uZTogbnVtYmVyLFxuKTogUkdCQSB7XG4gIHJldHVybiBjb2xvcjEubWFwKCh2LCBpKSA9PiBtaWRwb2ludCh2LCBjb2xvcjJbaV0sIHplcm9Ub09uZSkpIGFzIFJHQkE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENvbG9ycztcbiJdfQ==
@@ -1,23 +0,0 @@
1
- import type { FeatureCollection, GeometryCollection, GeometryObject } from 'geojson';
2
- import type { ViewState } from './types';
3
- export declare type LocationProperties = any;
4
- export declare type GetViewStateOptions = {
5
- pad?: number;
6
- padding?: {
7
- top: number;
8
- bottom: number;
9
- left: number;
10
- right: number;
11
- };
12
- tileSize?: number;
13
- maxZoom?: number;
14
- };
15
- export declare function getViewStateForFeatures(featureCollection: FeatureCollection<GeometryObject, LocationProperties> | GeometryCollection, size: [number, number], opts?: GetViewStateOptions): ViewState & {
16
- width: number;
17
- height: number;
18
- };
19
- export declare function getViewStateForLocations(locations: any[], getLocationCoords: (location: any) => [number, number], size: [number, number], opts?: GetViewStateOptions): ViewState & {
20
- width: number;
21
- height: number;
22
- };
23
- //# sourceMappingURL=getViewStateForLocations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getViewStateForLocations.d.ts","sourceRoot":"","sources":["../src/getViewStateForLocations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAEvC,oBAAY,kBAAkB,GAAG,GAAG,CAAC;AAErC,oBAAY,mBAAmB,GAAG;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,iBAAiB,EACb,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,CAAC,GACrD,kBAAkB,EACtB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,IAAI,CAAC,EAAE,mBAAmB,GACzB,SAAS,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAyB7C;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,GAAG,EAAE,EAChB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EACtD,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,IAAI,CAAC,EAAE,mBAAmB,GACzB,SAAS,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAY7C"}