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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/FlowmapAggregateAccessors.d.ts +16 -0
  2. package/dist/FlowmapAggregateAccessors.d.ts.map +1 -0
  3. package/dist/FlowmapAggregateAccessors.js +46 -0
  4. package/dist/FlowmapSelectors.d.ts +188 -0
  5. package/dist/FlowmapSelectors.d.ts.map +1 -0
  6. package/dist/FlowmapSelectors.js +863 -0
  7. package/dist/FlowmapState.d.ts +27 -0
  8. package/dist/FlowmapState.d.ts.map +1 -0
  9. package/dist/FlowmapState.js +2 -0
  10. package/dist/cluster/cluster.d.ts.map +1 -1
  11. package/dist/cluster/cluster.js +8 -5
  12. package/dist/colors.d.ts +7 -7
  13. package/dist/colors.d.ts.map +1 -1
  14. package/dist/colors.js +55 -20
  15. package/dist/getViewStateForLocations.d.ts +18 -11
  16. package/dist/getViewStateForLocations.d.ts.map +1 -1
  17. package/dist/getViewStateForLocations.js +23 -20
  18. package/dist/index.d.ts +6 -6
  19. package/dist/index.js +6 -6
  20. package/dist/provider/FlowmapDataProvider.d.ts +16 -0
  21. package/dist/provider/FlowmapDataProvider.d.ts.map +1 -0
  22. package/dist/provider/FlowmapDataProvider.js +17 -0
  23. package/dist/provider/LocalFlowmapDataProvider.d.ts +20 -0
  24. package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
  25. package/dist/provider/LocalFlowmapDataProvider.js +98 -0
  26. package/dist/types.d.ts +6 -4
  27. package/dist/types.d.ts.map +1 -1
  28. package/dist/types.js +1 -1
  29. package/dist/util.d.ts +0 -1
  30. package/dist/util.d.ts.map +1 -1
  31. package/dist/util.js +1 -4
  32. package/dist-es5/FlowmapAggregateAccessors.d.ts +16 -0
  33. package/dist-es5/FlowmapAggregateAccessors.d.ts.map +1 -0
  34. package/dist-es5/FlowmapAggregateAccessors.js +57 -0
  35. package/{dist/FlowMapSelectors.d.ts → dist-es5/FlowmapSelectors.d.ts} +55 -49
  36. package/dist-es5/FlowmapSelectors.d.ts.map +1 -0
  37. package/dist-es5/FlowmapSelectors.js +1507 -0
  38. package/{dist/FlowMapState.d.ts → dist-es5/FlowmapState.d.ts} +6 -3
  39. package/dist-es5/FlowmapState.d.ts.map +1 -0
  40. package/dist-es5/FlowmapState.js +3 -0
  41. package/dist-es5/cluster/ClusterIndex.d.ts +42 -0
  42. package/dist-es5/cluster/ClusterIndex.d.ts.map +1 -0
  43. package/dist-es5/cluster/ClusterIndex.js +297 -0
  44. package/dist-es5/cluster/cluster.d.ts +31 -0
  45. package/dist-es5/cluster/cluster.d.ts.map +1 -0
  46. package/dist-es5/cluster/cluster.js +266 -0
  47. package/dist-es5/colors.d.ts +103 -0
  48. package/dist-es5/colors.d.ts.map +1 -0
  49. package/dist-es5/colors.js +510 -0
  50. package/dist-es5/getViewStateForLocations.d.ts +23 -0
  51. package/dist-es5/getViewStateForLocations.d.ts.map +1 -0
  52. package/dist-es5/getViewStateForLocations.js +64 -0
  53. package/dist-es5/index.d.ts +11 -0
  54. package/dist-es5/index.d.ts.map +1 -0
  55. package/dist-es5/index.js +28 -0
  56. package/dist-es5/provider/FlowmapDataProvider.d.ts +16 -0
  57. package/dist-es5/provider/FlowmapDataProvider.d.ts.map +1 -0
  58. package/dist-es5/provider/FlowmapDataProvider.js +22 -0
  59. package/dist-es5/provider/LocalFlowmapDataProvider.d.ts +20 -0
  60. package/dist-es5/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
  61. package/dist-es5/provider/LocalFlowmapDataProvider.js +154 -0
  62. package/dist-es5/time.d.ts +24 -0
  63. package/dist-es5/time.d.ts.map +1 -0
  64. package/dist-es5/time.js +168 -0
  65. package/dist-es5/types.d.ts +118 -0
  66. package/dist-es5/types.d.ts.map +1 -0
  67. package/dist-es5/types.js +29 -0
  68. package/dist-es5/util.d.ts +5 -0
  69. package/dist-es5/util.d.ts.map +1 -0
  70. package/dist-es5/util.js +14 -0
  71. package/package.json +7 -5
  72. package/src/{FlowMapAggregateAccessors.ts → FlowmapAggregateAccessors.ts} +14 -9
  73. package/src/{FlowMapSelectors.ts → FlowmapSelectors.ts} +213 -178
  74. package/src/{FlowMapState.ts → FlowmapState.ts} +5 -2
  75. package/src/cluster/cluster.ts +7 -4
  76. package/src/colors.ts +65 -21
  77. package/src/getViewStateForLocations.ts +41 -35
  78. package/src/index.ts +6 -6
  79. package/src/provider/{FlowMapDataProvider.ts → FlowmapDataProvider.ts} +14 -12
  80. package/src/provider/LocalFlowmapDataProvider.ts +122 -0
  81. package/src/types.ts +6 -4
  82. package/src/util.ts +0 -4
  83. package/tsconfig.es5.json +11 -0
  84. package/dist/FlowMapAggregateAccessors.d.ts +0 -15
  85. package/dist/FlowMapAggregateAccessors.d.ts.map +0 -1
  86. package/dist/FlowMapAggregateAccessors.js +0 -43
  87. package/dist/FlowMapSelectors.d.ts.map +0 -1
  88. package/dist/FlowMapSelectors.js +0 -834
  89. package/dist/FlowMapState.d.ts.map +0 -1
  90. package/dist/FlowMapState.js +0 -2
  91. package/dist/provider/FlowMapDataProvider.d.ts +0 -16
  92. package/dist/provider/FlowMapDataProvider.d.ts.map +0 -1
  93. package/dist/provider/FlowMapDataProvider.js +0 -17
  94. package/dist/provider/LocalFlowMapDataProvider.d.ts +0 -20
  95. package/dist/provider/LocalFlowMapDataProvider.d.ts.map +0 -1
  96. package/dist/provider/LocalFlowMapDataProvider.js +0 -87
  97. package/src/provider/LocalFlowMapDataProvider.ts +0 -105
@@ -0,0 +1,510 @@
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==
@@ -0,0 +1,23 @@
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
@@ -0,0 +1 @@
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"}