@splunk/visualizations 26.0.0 → 26.1.0

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 (150) hide show
  1. package/Area.config.js +102 -18
  2. package/Area.config.js.map +1 -1
  3. package/Area.js +618 -221
  4. package/Area.js.map +1 -1
  5. package/Bar.config.js +104 -20
  6. package/Bar.config.js.map +1 -1
  7. package/Bar.js +624 -219
  8. package/Bar.js.map +1 -1
  9. package/Bubble.config.js +94 -20
  10. package/Bubble.config.js.map +1 -1
  11. package/Bubble.js +606 -211
  12. package/Bubble.js.map +1 -1
  13. package/ChoroplethSvg.config.js +65 -14
  14. package/ChoroplethSvg.config.js.map +1 -1
  15. package/ChoroplethSvg.js +550 -183
  16. package/ChoroplethSvg.js.map +1 -1
  17. package/Column.config.js +103 -18
  18. package/Column.config.js.map +1 -1
  19. package/Column.js +637 -221
  20. package/Column.js.map +1 -1
  21. package/Ellipse.config.js +82 -17
  22. package/Ellipse.config.js.map +1 -1
  23. package/Ellipse.js +425 -148
  24. package/Ellipse.js.map +1 -1
  25. package/Events.config.js +100 -18
  26. package/Events.config.js.map +1 -1
  27. package/Events.js +752 -293
  28. package/Events.js.map +1 -1
  29. package/FillerGauge.config.js +96 -27
  30. package/FillerGauge.config.js.map +1 -1
  31. package/FillerGauge.js +759 -374
  32. package/FillerGauge.js.map +1 -1
  33. package/Image.config.js +62 -18
  34. package/Image.config.js.map +1 -1
  35. package/Image.js +419 -154
  36. package/Image.js.map +1 -1
  37. package/Line.config.js +106 -22
  38. package/Line.config.js.map +1 -1
  39. package/Line.js +631 -223
  40. package/Line.js.map +1 -1
  41. package/LinkGraph.config.js +72 -22
  42. package/LinkGraph.config.js.map +1 -1
  43. package/LinkGraph.js +632 -219
  44. package/LinkGraph.js.map +1 -1
  45. package/MIGRATION.md +1082 -0
  46. package/Map.config.js +241 -97
  47. package/Map.config.js.map +1 -1
  48. package/Map.js +1195 -595
  49. package/Map.js.map +1 -1
  50. package/Markdown.config.js +70 -20
  51. package/Markdown.config.js.map +1 -1
  52. package/Markdown.js +460 -195
  53. package/Markdown.js.map +1 -1
  54. package/MarkerGauge.config.js +79 -21
  55. package/MarkerGauge.config.js.map +1 -1
  56. package/MarkerGauge.js +802 -411
  57. package/MarkerGauge.js.map +1 -1
  58. package/ParallelCoordinates.config.js +72 -18
  59. package/ParallelCoordinates.config.js.map +1 -1
  60. package/ParallelCoordinates.js +853 -484
  61. package/ParallelCoordinates.js.map +1 -1
  62. package/Pie.config.js +75 -22
  63. package/Pie.config.js.map +1 -1
  64. package/Pie.js +612 -212
  65. package/Pie.js.map +1 -1
  66. package/Punchcard.config.js +81 -29
  67. package/Punchcard.config.js.map +1 -1
  68. package/Punchcard.js +844 -379
  69. package/Punchcard.js.map +1 -1
  70. package/Rectangle.config.js +85 -19
  71. package/Rectangle.config.js.map +1 -1
  72. package/Rectangle.js +432 -152
  73. package/Rectangle.js.map +1 -1
  74. package/Sankey.config.js +84 -22
  75. package/Sankey.config.js.map +1 -1
  76. package/Sankey.js +878 -342
  77. package/Sankey.js.map +1 -1
  78. package/Scatter.config.js +96 -22
  79. package/Scatter.config.js.map +1 -1
  80. package/Scatter.js +607 -212
  81. package/Scatter.js.map +1 -1
  82. package/SingleValue.config.js +94 -24
  83. package/SingleValue.config.js.map +1 -1
  84. package/SingleValue.js +1182 -650
  85. package/SingleValue.js.map +1 -1
  86. package/SingleValueBasic.js +286 -225
  87. package/SingleValueBasic.js.map +1 -1
  88. package/SingleValueIcon.config.js +92 -22
  89. package/SingleValueIcon.config.js.map +1 -1
  90. package/SingleValueIcon.js +965 -506
  91. package/SingleValueIcon.js.map +1 -1
  92. package/SingleValueRadial.config.js +99 -26
  93. package/SingleValueRadial.config.js.map +1 -1
  94. package/SingleValueRadial.js +1167 -616
  95. package/SingleValueRadial.js.map +1 -1
  96. package/SparkLine.js +126 -67
  97. package/SparkLine.js.map +1 -1
  98. package/Table.config.js +73 -20
  99. package/Table.config.js.map +1 -1
  100. package/Table.js +810 -322
  101. package/Table.js.map +1 -1
  102. package/common/Charting.js +107 -35
  103. package/common/Charting.js.map +1 -1
  104. package/common/ChartingApi.js +18 -7
  105. package/common/ChartingApi.js.map +1 -1
  106. package/common/EventsDoc.js +76 -22
  107. package/common/EventsDoc.js.map +1 -1
  108. package/common/GaugeMajorTicks.js +68 -58
  109. package/common/GaugeMajorTicks.js.map +1 -1
  110. package/common/GaugeValueMarker.js +43 -34
  111. package/common/GaugeValueMarker.js.map +1 -1
  112. package/common/OptionsDoc.js +156 -65
  113. package/common/OptionsDoc.js.map +1 -1
  114. package/common/OverviewDoc.js +33 -5
  115. package/common/OverviewDoc.js.map +1 -1
  116. package/common/SplunkVisualization.js +31 -4
  117. package/common/SplunkVisualization.js.map +1 -1
  118. package/common/SplunkVisualizationApi.js +8 -2
  119. package/common/SplunkVisualizationApi.js.map +1 -1
  120. package/common/ThemesDoc.js +27 -14
  121. package/common/ThemesDoc.js.map +1 -1
  122. package/common/chartingUtils.js +44 -12
  123. package/common/chartingUtils.js.map +1 -1
  124. package/common/docUtils.js +11 -1
  125. package/common/docUtils.js.map +1 -1
  126. package/common/gaugeUtils.js +173 -90
  127. package/common/gaugeUtils.js.map +1 -1
  128. package/common/shapeUtils.js +14 -2
  129. package/common/shapeUtils.js.map +1 -1
  130. package/common/utils/configUtils.js +49 -14
  131. package/common/utils/configUtils.js.map +1 -1
  132. package/common/utils/dataUtils.js +7 -2
  133. package/common/utils/dataUtils.js.map +1 -1
  134. package/common/utils/hocUtils.js +3 -1
  135. package/common/utils/hocUtils.js.map +1 -1
  136. package/common/utils/layoutUtils.js +1 -0
  137. package/common/utils/layoutUtils.js.map +1 -1
  138. package/common/utils/mapUtils.js +287 -127
  139. package/common/utils/mapUtils.js.map +1 -1
  140. package/common/utils/singleValueUtils.js +241 -196
  141. package/common/utils/singleValueUtils.js.map +1 -1
  142. package/common/utils/testHelper.js +9 -0
  143. package/common/utils/testHelper.js.map +1 -1
  144. package/common/utils/trellisUtils.js +61 -0
  145. package/common/utils/trellisUtils.js.map +1 -1
  146. package/common/utils/urlUtils.js +2 -0
  147. package/common/utils/urlUtils.js.map +1 -1
  148. package/common/withDashboardViz.js +274 -95
  149. package/common/withDashboardViz.js.map +1 -1
  150. package/package.json +16 -18
@@ -165,28 +165,38 @@ Object.defineProperty(exports, "__esModule", {
165
165
  value: true
166
166
  });
167
167
  exports.columnsNullToZeros = void 0;
168
+
168
169
  var types_1 = __webpack_require__(9);
170
+
169
171
  var dsl_1 = __webpack_require__(20);
172
+
170
173
  var hocUtils_1 = __webpack_require__(21);
174
+
171
175
  var JSONSchemaUtils_1 = __webpack_require__(22);
176
+
172
177
  var BubbleLayer_1 = __webpack_require__(23);
178
+
173
179
  var columnsNullToZeros = function columnsNullToZeros(config, dataSources, options) {
174
180
  var _a, _b;
181
+
175
182
  var primary = dataSources.primary;
176
183
  var _primary$data = primary.data,
177
- columns = _primary$data.columns,
178
- fields = _primary$data.fields;
184
+ columns = _primary$data.columns,
185
+ fields = _primary$data.fields;
179
186
  var newColumns = columns;
180
187
  var mergedOptions = (0, hocUtils_1.deepMergeWithArrayPrimitiveOverrides)({}, options, (0, JSONSchemaUtils_1.pickFieldFromJSONSchema)(config.optionsSchema, 'default'));
188
+
181
189
  if (((_b = (_a = mergedOptions.layers) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.type) === 'bubble') {
182
190
  var latitudeField = (0, dsl_1.getFieldsFromDSL)(mergedOptions.layers[0].latitude, dataSources)[0] || '';
183
191
  var longitudeField = (0, dsl_1.getFieldsFromDSL)(mergedOptions.layers[0].longitude, dataSources)[0] || '';
184
192
  var excludedFields = [latitudeField, longitudeField, 'geobin'].concat(BubbleLayer_1.GEO_LAT_AND_LONG_FIELD);
185
193
  var indicesToEvaluate = new Set(fields.reduce(function (arr, e, i) {
186
194
  var field = typeof e === 'string' ? e : e.name.toString();
195
+
187
196
  if (!excludedFields.includes(field)) {
188
197
  arr.push(i);
189
198
  }
199
+
190
200
  return arr;
191
201
  }, []));
192
202
  newColumns = columns.map(function (column, i) {
@@ -196,9 +206,11 @@ var columnsNullToZeros = function columnsNullToZeros(config, dataSources, option
196
206
  return !value || !(0, types_1.isNumber)(value) ? 0 : +value;
197
207
  });
198
208
  }
209
+
199
210
  return column;
200
211
  });
201
212
  }
213
+
202
214
  var modifiedDatasources = Object.assign(Object.assign({}, dataSources), {
203
215
  primary: Object.assign(Object.assign({}, primary), {
204
216
  data: Object.assign(Object.assign({}, primary.data), {
@@ -208,6 +220,7 @@ var columnsNullToZeros = function columnsNullToZeros(config, dataSources, option
208
220
  });
209
221
  return modifiedDatasources;
210
222
  };
223
+
211
224
  exports.columnsNullToZeros = columnsNullToZeros;
212
225
 
213
226
  /***/ }),
@@ -236,36 +249,51 @@ module.exports = require("@splunk/visualizations-shared/JSONSchemaUtils");
236
249
 
237
250
 
238
251
  var _slicedToArray = __webpack_require__(7);
252
+
239
253
  var _defineProperty = __webpack_require__(1);
254
+
240
255
  var _toConsumableArray = __webpack_require__(2);
256
+
241
257
  var _taggedTemplateLiteral = __webpack_require__(10);
258
+
242
259
  var _templateObject;
260
+
243
261
  Object.defineProperty(exports, "__esModule", {
244
262
  value: true
245
263
  });
246
264
  exports.Bubble = exports.PieSegment = exports.GEO_LAT_AND_LONG_FIELD = exports.GEO_BOUND_PREFIX = void 0;
265
+
247
266
  var React = __webpack_require__(3);
267
+
248
268
  var styled_components_1 = __webpack_require__(11);
269
+
249
270
  var lodash_1 = __webpack_require__(0);
271
+
250
272
  var colorUtils_1 = __webpack_require__(12);
273
+
251
274
  var MapUtils_1 = __webpack_require__(24);
275
+
252
276
  var MarkerWrapper_1 = __webpack_require__(28);
277
+
253
278
  exports.GEO_BOUND_PREFIX = '_geo_bounds_';
254
279
  exports.GEO_LAT_AND_LONG_FIELD = ['_geo_long_field', '_geo_lat_field'];
255
280
  exports.PieSegment = React.memo(function (_ref) {
256
281
  var start = _ref.start,
257
- end = _ref.end,
258
- radius = _ref.radius,
259
- color = _ref.color,
260
- themeColor = _ref.themeColor,
261
- segmentMetadata = _ref.segmentMetadata,
262
- handleBubbleClick = _ref.handleBubbleClick;
282
+ end = _ref.end,
283
+ radius = _ref.radius,
284
+ color = _ref.color,
285
+ themeColor = _ref.themeColor,
286
+ segmentMetadata = _ref.segmentMetadata,
287
+ handleBubbleClick = _ref.handleBubbleClick;
288
+
263
289
  var _ref2 = segmentMetadata !== null && segmentMetadata !== void 0 ? segmentMetadata : {},
264
- name = _ref2.name,
265
- value = _ref2.value;
290
+ name = _ref2.name,
291
+ value = _ref2.value;
292
+
266
293
  var handleSegmentClick = React.useCallback(function (e) {
267
294
  handleBubbleClick(e, name, value);
268
295
  }, [name, value, handleBubbleClick]);
296
+
269
297
  if (end - start === 1) {
270
298
  return React.createElement("circle", {
271
299
  onClick: handleSegmentClick,
@@ -278,6 +306,7 @@ exports.PieSegment = React.memo(function (_ref) {
278
306
  stroke: color
279
307
  });
280
308
  }
309
+
281
310
  var a0 = 2 * Math.PI * (start - 0.25);
282
311
  var a1 = 2 * Math.PI * (end - 0.25);
283
312
  var x0 = Math.cos(a0);
@@ -299,17 +328,17 @@ exports.PieSegment.displayName = 'MapBubblePieSegment';
299
328
  var StyledMarkerWrapper = (0, styled_components_1.default)(MarkerWrapper_1.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n cursor: pointer;\n"])));
300
329
  exports.Bubble = React.memo(function (_ref3) {
301
330
  var originalValues = _ref3.originalValues,
302
- valueRange = _ref3.valueRange,
303
- colors = _ref3.colors,
304
- themeColor = _ref3.themeColor,
305
- isPie = _ref3.isPie,
306
- latitude = _ref3.latitude,
307
- longitude = _ref3.longitude,
308
- bubbleSize = _ref3.bubbleSize,
309
- _ref3$additionalField = _ref3.additionalFields,
310
- additionalFields = _ref3$additionalField === void 0 ? [] : _ref3$additionalField,
311
- map = _ref3.map,
312
- handleMapClick = _ref3.handleMapClick;
331
+ valueRange = _ref3.valueRange,
332
+ colors = _ref3.colors,
333
+ themeColor = _ref3.themeColor,
334
+ isPie = _ref3.isPie,
335
+ latitude = _ref3.latitude,
336
+ longitude = _ref3.longitude,
337
+ bubbleSize = _ref3.bubbleSize,
338
+ _ref3$additionalField = _ref3.additionalFields,
339
+ additionalFields = _ref3$additionalField === void 0 ? [] : _ref3$additionalField,
340
+ map = _ref3.map,
341
+ handleMapClick = _ref3.handleMapClick;
313
342
  var onBubbleClick = React.useCallback(function (e, name, value) {
314
343
  handleMapClick(e, name, value);
315
344
  e.stopPropagation();
@@ -318,14 +347,16 @@ exports.Bubble = React.memo(function (_ref3) {
318
347
  var allZeros = originalValues.every(function (v) {
319
348
  return v === 0;
320
349
  });
350
+
321
351
  if (allZeros || !originalValues.length) {
322
352
  return null;
323
- }
324
- // sanitize values
353
+ } // sanitize values
354
+
355
+
325
356
  var values = originalValues.map(function (v) {
326
357
  return v > 0 ? v : 0;
327
- });
328
- // compute offsets for pie segments
358
+ }); // compute offsets for pie segments
359
+
329
360
  var offsets = [];
330
361
  var total = 0;
331
362
  values.forEach(function (count) {
@@ -359,9 +390,11 @@ exports.Bubble = React.memo(function (_ref3) {
359
390
  });
360
391
  }));
361
392
  }, [bubbleSize, colors, isPie, onBubbleClick, originalValues, themeColor, valueRange]);
393
+
362
394
  if (!bubble) {
363
395
  return null;
364
396
  }
397
+
365
398
  return React.createElement(StyledMarkerWrapper, {
366
399
  longitude: longitude,
367
400
  latitude: latitude,
@@ -371,12 +404,13 @@ exports.Bubble = React.memo(function (_ref3) {
371
404
  }, bubble);
372
405
  });
373
406
  exports.Bubble.displayName = 'MapBubble';
407
+
374
408
  var BubbleLayer = function BubbleLayer(props) {
375
409
  var bubbleLayer = props.bubbleLayer,
376
- themeColorScheme = props.themeColorScheme,
377
- map = props.map,
378
- zoom = props.zoom,
379
- onMapClick = props.onMapClick;
410
+ themeColorScheme = props.themeColorScheme,
411
+ map = props.map,
412
+ zoom = props.zoom,
413
+ onMapClick = props.onMapClick;
380
414
  bubbleLayer.seriesColors = bubbleLayer.seriesColors || MapUtils_1.DEFAULT_SERIES_COLORS;
381
415
  bubbleLayer.bubbleSize = bubbleLayer.bubbleSize || [];
382
416
  var bakedData = React.useMemo(function () {
@@ -385,20 +419,22 @@ var BubbleLayer = function BubbleLayer(props) {
385
419
  var staticColors = React.useMemo(function () {
386
420
  return (0, MapUtils_1.getStaticColors)(bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors);
387
421
  }, [bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors]);
422
+
388
423
  var _ref4 = bakedData !== null && bakedData !== void 0 ? bakedData : {},
389
- _ref4$data = _ref4.data,
390
- data = _ref4$data === void 0 ? [] : _ref4$data,
391
- _ref4$dataRange = _ref4.dataRange,
392
- dataRange = _ref4$dataRange === void 0 ? [] : _ref4$dataRange,
393
- resultLimit = _ref4.resultLimit,
394
- bubbleSizeFields = _ref4.bubbleSizeFields,
395
- isPie = _ref4.isPie;
424
+ _ref4$data = _ref4.data,
425
+ data = _ref4$data === void 0 ? [] : _ref4$data,
426
+ _ref4$dataRange = _ref4.dataRange,
427
+ dataRange = _ref4$dataRange === void 0 ? [] : _ref4$dataRange,
428
+ resultLimit = _ref4.resultLimit,
429
+ bubbleSizeFields = _ref4.bubbleSizeFields,
430
+ isPie = _ref4.isPie;
431
+
396
432
  var _bubbleLayer$addition = bubbleLayer.additionalTooltipFields,
397
- additionalTooltipFields = _bubbleLayer$addition === void 0 ? [] : _bubbleLayer$addition;
433
+ additionalTooltipFields = _bubbleLayer$addition === void 0 ? [] : _bubbleLayer$addition;
398
434
  var roundedZoom = Math.round(zoom);
399
435
  var themeColor = themeColorScheme === 'light' ? '#ffffff' : '#1a1c20';
400
- var dynamicColors = bubbleLayer.dataColors;
401
- // filter data for the current zoom level and sort base on values
436
+ var dynamicColors = bubbleLayer.dataColors; // filter data for the current zoom level and sort base on values
437
+
402
438
  var dataToRender = React.useMemo(function () {
403
439
  return data.reduce(function (acc, datum, i) {
404
440
  if (datum.zoom === roundedZoom) {
@@ -407,14 +443,17 @@ var BubbleLayer = function BubbleLayer(props) {
407
443
  idx: i
408
444
  });
409
445
  }
446
+
410
447
  return acc;
411
448
  }, []).slice(0, resultLimit || MapUtils_1.DEFAULT_RESULT_LIMIT).sort(function (a, b) {
412
449
  return (0, lodash_1.sum)(b.data.values) - (0, lodash_1.sum)(a.data.values);
413
450
  });
414
451
  }, [data, resultLimit, roundedZoom]);
452
+
415
453
  var _handleMapClick = React.useCallback(function (e, name, value, i) {
416
- var _a, _b, _c;
417
- // retrieve metadata from the appropriate datum, indexed by i
454
+ var _a, _b, _c; // retrieve metadata from the appropriate datum, indexed by i
455
+
456
+
418
457
  var metadata = (_c = (_b = (_a = dataToRender[i]) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.metadata) !== null && _c !== void 0 ? _c : {};
419
458
  var payload = Object.keys(metadata).reduce(function (acc, curr) {
420
459
  var key = "row.".concat(curr, ".value");
@@ -429,13 +468,16 @@ var BubbleLayer = function BubbleLayer(props) {
429
468
  payload: payload
430
469
  });
431
470
  }, [dataToRender, onMapClick]);
471
+
432
472
  return React.createElement(React.Fragment, null, dataToRender.map(function (datum, i) {
433
473
  var colors = dynamicColors ? [dataToRender.map(function (obj) {
434
474
  return (0, colorUtils_1.isColor)(dynamicColors[obj.idx]) ? dynamicColors[obj.idx] : MapUtils_1.DEFAULT_CLUSTER_COLOR;
435
475
  })[i]] : staticColors;
476
+
436
477
  var _datum$data$coordinat = _slicedToArray(datum.data.coordinates, 2),
437
- longitude = _datum$data$coordinat[0],
438
- latitude = _datum$data$coordinat[1];
478
+ longitude = _datum$data$coordinat[0],
479
+ latitude = _datum$data$coordinat[1];
480
+
439
481
  var bubbleSize = datum.data.values.map(function (value, index) {
440
482
  return {
441
483
  name: bubbleSizeFields[index],
@@ -467,6 +509,7 @@ var BubbleLayer = function BubbleLayer(props) {
467
509
  });
468
510
  }));
469
511
  };
512
+
470
513
  exports.default = BubbleLayer;
471
514
 
472
515
  /***/ }),
@@ -477,35 +520,48 @@ exports.default = BubbleLayer;
477
520
 
478
521
 
479
522
  var _defineProperty = __webpack_require__(1);
523
+
480
524
  var _slicedToArray = __webpack_require__(7);
525
+
481
526
  var _toConsumableArray = __webpack_require__(2);
527
+
482
528
  Object.defineProperty(exports, "__esModule", {
483
529
  value: true
484
530
  });
485
531
  exports.formatMetadata = exports.compareBaseStyles = exports.getScaledOpacities = exports.getGlobalLayerBoundaries = exports.isValidLatLon = exports.bakeBubbleData = exports.sanitizeValues = exports.transposeArray = exports.matchBubbleSize = exports.getStaticColors = exports.getZoomLevelFromGeobin = exports.getZoomConstraintsFromTileConfig = exports.getMapStyle = exports.getTilePreset = exports.LAYER_TYPE = exports.DEFAULT_OPACITY = exports.MAX_BUBBLE_RADIUS = exports.MIN_BUBBLE_RADIUS = exports.MAP_STYLE_VERSION_NUMBER = exports.DEFAULT_SERIES_COLORS = exports.DEFAULT_CLUSTER_COLOR = exports.DEFAULT_RESULT_LIMIT = exports.MIN_LONGITUDE = exports.MAX_LONGITUDE = exports.MIN_LATITUDE = exports.MAX_LATITUDE = void 0;
532
+
486
533
  var lodash_1 = __webpack_require__(0);
534
+
487
535
  var d3_scale_1 = __webpack_require__(25);
536
+
488
537
  var chroma = __webpack_require__(26);
538
+
489
539
  var colorUtils_1 = __webpack_require__(12);
540
+
490
541
  var visualization_color_palettes_1 = __webpack_require__(27);
542
+
491
543
  var types_1 = __webpack_require__(9);
544
+
492
545
  exports.MAX_LATITUDE = 90;
493
546
  exports.MIN_LATITUDE = -90;
494
547
  exports.MAX_LONGITUDE = 180;
495
548
  exports.MIN_LONGITUDE = -180;
496
549
  exports.DEFAULT_RESULT_LIMIT = 1000;
497
550
  exports.DEFAULT_CLUSTER_COLOR = '#909090';
498
- exports.DEFAULT_SERIES_COLORS = visualization_color_palettes_1.VIZ_CATEGORICAL;
499
- // MapLibre requires a map style specification number which is always 8
500
- exports.MAP_STYLE_VERSION_NUMBER = 8;
501
- // currently using one [min, max] value set for bubbles across all zoom levels
551
+ exports.DEFAULT_SERIES_COLORS = visualization_color_palettes_1.VIZ_CATEGORICAL; // MapLibre requires a map style specification number which is always 8
552
+
553
+ exports.MAP_STYLE_VERSION_NUMBER = 8; // currently using one [min, max] value set for bubbles across all zoom levels
502
554
  // TODO: design choices on [min, max] bubble size for different zoom levels
555
+
503
556
  exports.MIN_BUBBLE_RADIUS = 7.11; // 10px
557
+
504
558
  exports.MAX_BUBBLE_RADIUS = 45.26; // 85px
559
+
505
560
  exports.DEFAULT_OPACITY = 0.8;
506
561
  var LONGITUDE = 'longitude';
507
562
  var LATITUDE = 'latitude';
508
563
  var LAYER_TYPE;
564
+
509
565
  (function (LAYER_TYPE) {
510
566
  LAYER_TYPE["Marker"] = "marker";
511
567
  LAYER_TYPE["Bubble"] = "bubble";
@@ -519,12 +575,16 @@ var LAYER_TYPE;
519
575
  * @param {BaseTileConfig[]} args.customTileConfig
520
576
  * @returns {Object} tile preset
521
577
  */
578
+
579
+
522
580
  var getTilePreset = function getTilePreset(_ref) {
523
581
  var _ref$defaultTileConfi = _ref.defaultTileConfig,
524
- defaultTileConfig = _ref$defaultTileConfi === void 0 ? [] : _ref$defaultTileConfi,
525
- _ref$customTileConfig = _ref.customTileConfig,
526
- customTileConfig = _ref$customTileConfig === void 0 ? [] : _ref$customTileConfig;
582
+ defaultTileConfig = _ref$defaultTileConfi === void 0 ? [] : _ref$defaultTileConfi,
583
+ _ref$customTileConfig = _ref.customTileConfig,
584
+ customTileConfig = _ref$customTileConfig === void 0 ? [] : _ref$customTileConfig;
585
+
527
586
  var _a, _b;
587
+
528
588
  var tilePreset = {};
529
589
  var defaultTileLight = {};
530
590
  var defaultTileDark = {};
@@ -538,6 +598,7 @@ var getTilePreset = function getTilePreset(_ref) {
538
598
  });
539
599
  tilePreset[key] = updatedConfig;
540
600
  });
601
+
541
602
  if (defaultTileConfig.length > 0) {
542
603
  defaultTileLight = (_a = defaultTileConfig.find(function (config) {
543
604
  return config.theme === 'light';
@@ -550,12 +611,14 @@ var getTilePreset = function getTilePreset(_ref) {
550
611
  return config.theme === undefined;
551
612
  });
552
613
  }
614
+
553
615
  return {
554
616
  tilePreset: tilePreset,
555
617
  defaultTileLight: defaultTileLight,
556
618
  defaultTileDark: defaultTileDark
557
619
  };
558
620
  };
621
+
559
622
  exports.getTilePreset = getTilePreset;
560
623
  /**
561
624
  * Check if baseLayerTileServer is in tilePreset and config matches current theme, if yes, return.
@@ -570,20 +633,22 @@ exports.getTilePreset = getTilePreset;
570
633
  * @param {BaseTileConfig} args.defaultTileLight
571
634
  * @returns {BaseTileConfig} mapStyle
572
635
  */
636
+
573
637
  var getMapStyle = function getMapStyle(_ref2) {
574
638
  var showBaseLayer = _ref2.showBaseLayer,
575
- _ref2$baseLayerTileSe = _ref2.baseLayerTileServer,
576
- baseLayerTileServer = _ref2$baseLayerTileSe === void 0 ? '' : _ref2$baseLayerTileSe,
577
- _ref2$baseLayerTileSe2 = _ref2.baseLayerTileServerType,
578
- baseLayerTileServerType = _ref2$baseLayerTileSe2 === void 0 ? '' : _ref2$baseLayerTileSe2,
579
- _ref2$tilePreset = _ref2.tilePreset,
580
- tilePreset = _ref2$tilePreset === void 0 ? {} : _ref2$tilePreset,
581
- _ref2$colorScheme = _ref2.colorScheme,
582
- colorScheme = _ref2$colorScheme === void 0 ? 'light' : _ref2$colorScheme,
583
- _ref2$defaultTileLigh = _ref2.defaultTileLight,
584
- defaultTileLight = _ref2$defaultTileLigh === void 0 ? {} : _ref2$defaultTileLigh,
585
- _ref2$defaultTileDark = _ref2.defaultTileDark,
586
- defaultTileDark = _ref2$defaultTileDark === void 0 ? {} : _ref2$defaultTileDark;
639
+ _ref2$baseLayerTileSe = _ref2.baseLayerTileServer,
640
+ baseLayerTileServer = _ref2$baseLayerTileSe === void 0 ? '' : _ref2$baseLayerTileSe,
641
+ _ref2$baseLayerTileSe2 = _ref2.baseLayerTileServerType,
642
+ baseLayerTileServerType = _ref2$baseLayerTileSe2 === void 0 ? '' : _ref2$baseLayerTileSe2,
643
+ _ref2$tilePreset = _ref2.tilePreset,
644
+ tilePreset = _ref2$tilePreset === void 0 ? {} : _ref2$tilePreset,
645
+ _ref2$colorScheme = _ref2.colorScheme,
646
+ colorScheme = _ref2$colorScheme === void 0 ? 'light' : _ref2$colorScheme,
647
+ _ref2$defaultTileLigh = _ref2.defaultTileLight,
648
+ defaultTileLight = _ref2$defaultTileLigh === void 0 ? {} : _ref2$defaultTileLigh,
649
+ _ref2$defaultTileDark = _ref2.defaultTileDark,
650
+ defaultTileDark = _ref2$defaultTileDark === void 0 ? {} : _ref2$defaultTileDark;
651
+
587
652
  if (!showBaseLayer) {
588
653
  return {
589
654
  version: exports.MAP_STYLE_VERSION_NUMBER,
@@ -603,9 +668,11 @@ var getMapStyle = function getMapStyle(_ref2) {
603
668
  }]
604
669
  };
605
670
  }
671
+
606
672
  if (baseLayerTileServer && tilePreset[baseLayerTileServer] && (tilePreset[baseLayerTileServer].theme === colorScheme || tilePreset[baseLayerTileServer].theme === 'all')) {
607
673
  return tilePreset[baseLayerTileServer];
608
674
  }
675
+
609
676
  if (baseLayerTileServer && baseLayerTileServerType) {
610
677
  var tiles = [];
611
678
  /**
@@ -613,6 +680,7 @@ var getMapStyle = function getMapStyle(_ref2) {
613
680
  * Subdomains are used to help with browser parallel requests per domain limitation. These subdomains are typically single letters 'a', 'b' and 'c'
614
681
  * Refer to https://leafletjs.com/SlavaUkraini/reference.html#tilelayer and https://wiki.openstreetmap.org/wiki/Tile_servers
615
682
  */
683
+
616
684
  if (baseLayerTileServer.match(/^(https?):\/\/{(s|S)}\../)) {
617
685
  /**
618
686
  * sXML (Leaflet) allows users to define their own tile server URLs + list of available subdomains
@@ -623,8 +691,9 @@ var getMapStyle = function getMapStyle(_ref2) {
623
691
  tiles = [baseLayerTileServer.replace(/{(s|S)}/, 'a'), baseLayerTileServer.replace(/{(s|S)}/, 'b'), baseLayerTileServer.replace(/{(s|S)}/, 'c')];
624
692
  } else {
625
693
  tiles = [baseLayerTileServer];
626
- }
627
- // TODO: remove hardcoded style when we allow users to pass in layer style through Viz options
694
+ } // TODO: remove hardcoded style when we allow users to pass in layer style through Viz options
695
+
696
+
628
697
  var mapStyle = {
629
698
  version: exports.MAP_STYLE_VERSION_NUMBER,
630
699
  sources: {
@@ -640,134 +709,164 @@ var getMapStyle = function getMapStyle(_ref2) {
640
709
  source: 'base-tiles',
641
710
  minzoom: 0,
642
711
  maxzoom: 24 // https://maplibre.org/maplibre-gl-js-docs/api/map/
712
+
643
713
  }]
644
714
  };
645
-
646
715
  return mapStyle;
647
- }
648
- // if tile server is not present in the preset AND we can't construct a mapStyle, fall back on defaults
716
+ } // if tile server is not present in the preset AND we can't construct a mapStyle, fall back on defaults
717
+
718
+
649
719
  return colorScheme === 'light' ? defaultTileLight : defaultTileDark;
650
720
  };
721
+
651
722
  exports.getMapStyle = getMapStyle;
723
+
652
724
  var getZoomConstraintsFromTileConfig = function getZoomConstraintsFromTileConfig(tileConfig, baseLayerTileServer) {
653
725
  var sources = tileConfig.sources,
654
- layers = tileConfig.layers;
655
- var matchedBaseLayerTileServer = false;
656
- // check sources for minzoom maxzoom first
726
+ layers = tileConfig.layers;
727
+ var matchedBaseLayerTileServer = false; // check sources for minzoom maxzoom first
728
+
657
729
  var sourceKeys = Object.keys(sources);
730
+
658
731
  for (var i = 0; i < sourceKeys.length; i += 1) {
659
732
  var _sources$sourceKeys$i = sources[sourceKeys[i]],
660
- minzoom = _sources$sourceKeys$i.minzoom,
661
- maxzoom = _sources$sourceKeys$i.maxzoom;
733
+ minzoom = _sources$sourceKeys$i.minzoom,
734
+ maxzoom = _sources$sourceKeys$i.maxzoom;
735
+
662
736
  if (baseLayerTileServer && sources[sourceKeys[i]].tiles.indexOf(baseLayerTileServer) !== -1) {
663
737
  matchedBaseLayerTileServer = true;
664
738
  }
739
+
665
740
  if ((baseLayerTileServer && matchedBaseLayerTileServer || !baseLayerTileServer) && (0, lodash_1.isNumber)(minzoom) && (0, lodash_1.isNumber)(maxzoom)) {
666
741
  return {
667
742
  minZoom: minzoom,
668
743
  maxZoom: maxzoom
669
744
  };
670
745
  }
671
- }
672
- // then check layers
746
+ } // then check layers
747
+
748
+
673
749
  for (var _i = 0; _i < layers.length; _i += 1) {
674
750
  var _layers$_i = layers[_i],
675
- _minzoom = _layers$_i.minzoom,
676
- _maxzoom = _layers$_i.maxzoom;
751
+ _minzoom = _layers$_i.minzoom,
752
+ _maxzoom = _layers$_i.maxzoom;
753
+
677
754
  if ((baseLayerTileServer && matchedBaseLayerTileServer || !baseLayerTileServer) && (0, lodash_1.isNumber)(_minzoom) && (0, lodash_1.isNumber)(_maxzoom)) {
678
755
  return {
679
756
  minZoom: _minzoom,
680
757
  maxZoom: _maxzoom
681
758
  };
682
759
  }
683
- }
684
- // Maplibre default - would reset previous min/maxZoom https://maplibre.org/maplibre-gl-js-docs/api/map/
760
+ } // Maplibre default - would reset previous min/maxZoom https://maplibre.org/maplibre-gl-js-docs/api/map/
761
+
762
+
685
763
  return {
686
764
  minZoom: 0,
687
765
  maxZoom: 24
688
766
  };
689
767
  };
768
+
690
769
  exports.getZoomConstraintsFromTileConfig = getZoomConstraintsFromTileConfig;
770
+
691
771
  var getZoomLevelFromGeobin = function getZoomLevelFromGeobin(geobinStr) {
692
772
  var _a;
773
+
693
774
  if (!geobinStr) {
694
775
  return null;
695
- }
696
- // geostats cmds return geobin with zoom level 0-18, 0-99 in the geobinPattern covers the range
776
+ } // geostats cmds return geobin with zoom level 0-18, 0-99 in the geobinPattern covers the range
777
+
778
+
697
779
  var geobinPattern = /bin_id_zl_([0-9]{0,2})?_y_/g;
698
780
  var match = geobinPattern.exec(geobinStr);
699
781
  return (_a = (match === null || match === void 0 ? void 0 : match.length) && parseInt(match[1], 10)) !== null && _a !== void 0 ? _a : null;
700
782
  };
701
- exports.getZoomLevelFromGeobin = getZoomLevelFromGeobin;
702
- // Bubble colors - static
783
+
784
+ exports.getZoomLevelFromGeobin = getZoomLevelFromGeobin; // Bubble colors - static
785
+
703
786
  var getStaticColors = function getStaticColors(colorCount, colorArray) {
704
787
  if (colorCount < 0 || !colorCount) {
705
788
  return [exports.DEFAULT_CLUSTER_COLOR];
706
789
  }
790
+
707
791
  if (!colorArray || !colorArray.length) {
708
792
  return _toConsumableArray(Array(colorCount).keys()).map(function (i) {
709
793
  return exports.DEFAULT_SERIES_COLORS[i];
710
794
  });
711
- }
712
- // loop through colorArray to pick the first $colorCount colors
795
+ } // loop through colorArray to pick the first $colorCount colors
713
796
  // start from begining again if colorCount > colorArray.length
797
+
798
+
714
799
  return _toConsumableArray(Array(colorCount).keys()).map(function (i) {
715
800
  return (0, colorUtils_1.isColor)(colorArray[i % colorArray.length]) ? colorArray[i % colorArray.length] : exports.DEFAULT_CLUSTER_COLOR;
716
801
  });
717
802
  };
718
- exports.getStaticColors = getStaticColors;
719
- // Bubble size
803
+
804
+ exports.getStaticColors = getStaticColors; // Bubble size
805
+
720
806
  var matchBubbleSize = function matchBubbleSize(dataRange, data) {
721
807
  var size = (0, d3_scale_1.scalePow)().exponent(0.2).domain(dataRange).range([exports.MIN_BUBBLE_RADIUS, exports.MAX_BUBBLE_RADIUS])(data);
808
+
722
809
  if (size > exports.MAX_BUBBLE_RADIUS) {
723
810
  return exports.MAX_BUBBLE_RADIUS;
724
811
  }
812
+
725
813
  if (size < exports.MIN_BUBBLE_RADIUS) {
726
814
  return exports.MIN_BUBBLE_RADIUS;
727
815
  }
816
+
728
817
  return size;
729
818
  };
819
+
730
820
  exports.matchBubbleSize = matchBubbleSize;
821
+
731
822
  var transposeArray = function transposeArray(array) {
732
823
  if (!array || !array.length || !array[0] || !array[0].length) {
733
824
  return [];
734
825
  }
826
+
735
827
  return array[0].map(function (_, i) {
736
828
  return array.map(function (row) {
737
829
  return row[i];
738
830
  });
739
831
  });
740
832
  };
741
- exports.transposeArray = transposeArray;
742
- // sanitize values: update all null, undefined, or negative values to 0
833
+
834
+ exports.transposeArray = transposeArray; // sanitize values: update all null, undefined, or negative values to 0
835
+
743
836
  var sanitizeValues = function sanitizeValues(values) {
744
837
  // null / undefined
745
838
  if (!values) {
746
839
  return 0;
747
- }
748
- // number
840
+ } // number
841
+
842
+
749
843
  if (!Array.isArray(values)) {
750
844
  return values > 0 ? values : 0;
751
- }
752
- // array
845
+ } // array
846
+
847
+
753
848
  return values.map(function (arr) {
754
849
  return (0, exports.sanitizeValues)(arr);
755
850
  });
756
851
  };
852
+
757
853
  exports.sanitizeValues = sanitizeValues;
854
+
758
855
  var bakeBubbleData = function bakeBubbleData(layer) {
759
856
  var _a;
857
+
760
858
  if (!layer || !((_a = layer.bubbleSize) === null || _a === void 0 ? void 0 : _a.length) || !layer.geobin || !layer.geobin.length || !layer.latitude || !layer.latitude.length || !layer.longitude || !layer.longitude.length) {
761
859
  return null;
762
- }
763
- // if bubbleSize is passed as an array of single number array (data series)
860
+ } // if bubbleSize is passed as an array of single number array (data series)
764
861
  // e.g. [value0, value1, ...]
765
862
  // format each value as an array to unify data operations for data series and frames
863
+
864
+
766
865
  var sanitizedBubbleSize = (0, exports.sanitizeValues)(layer.bubbleSize);
767
866
  var transposedBubbleSize;
768
867
  var transposedSanitizedBubbleSize;
769
- var isPie = false;
770
- // format array if bubbleSize is passed as an array of array (data frame)
868
+ var isPie = false; // format array if bubbleSize is passed as an array of array (data frame)
869
+
771
870
  if (Array.isArray(layer.bubbleSize[0])) {
772
871
  // one-time array transpose,
773
872
  // e.g. from [column0data, column0data] (multi series)
@@ -777,8 +876,8 @@ var bakeBubbleData = function bakeBubbleData(layer) {
777
876
  // for easy access of values at each geo location,
778
877
  // and min max pie size computation
779
878
  transposedBubbleSize = (0, exports.transposeArray)(layer.bubbleSize);
780
- transposedSanitizedBubbleSize = (0, exports.transposeArray)(sanitizedBubbleSize);
781
- // if multiple series in the dataframe, set isPie to true
879
+ transposedSanitizedBubbleSize = (0, exports.transposeArray)(sanitizedBubbleSize); // if multiple series in the dataframe, set isPie to true
880
+
782
881
  if (layer.bubbleSize.length > 1) {
783
882
  isPie = true;
784
883
  }
@@ -790,9 +889,11 @@ var bakeBubbleData = function bakeBubbleData(layer) {
790
889
  return [n];
791
890
  });
792
891
  }
892
+
793
893
  if (!transposedBubbleSize || !transposedBubbleSize.length) {
794
894
  return null;
795
895
  }
896
+
796
897
  var data = layer.latitude.map(function (lat, i) {
797
898
  return {
798
899
  zoom: (0, exports.getZoomLevelFromGeobin)(layer.geobin[i]),
@@ -803,8 +904,8 @@ var bakeBubbleData = function bakeBubbleData(layer) {
803
904
  };
804
905
  }).filter(function (d) {
805
906
  return Boolean(d.values);
806
- });
807
- // compute the min/max value to encode min/max pie or bubble size
907
+ }); // compute the min/max value to encode min/max pie or bubble size
908
+
808
909
  var min = (0, lodash_1.sum)(transposedSanitizedBubbleSize[0]);
809
910
  var max = (0, lodash_1.sum)(transposedSanitizedBubbleSize[1]);
810
911
  transposedSanitizedBubbleSize.forEach(function (row) {
@@ -820,22 +921,29 @@ var bakeBubbleData = function bakeBubbleData(layer) {
820
921
  bubbleSizeFields: layer.bubbleSizeFields
821
922
  };
822
923
  };
924
+
823
925
  exports.bakeBubbleData = bakeBubbleData;
926
+
824
927
  var isValidLatLon = function isValidLatLon(latlon) {
825
928
  if (!latlon || !Array.isArray(latlon) || latlon.length !== 2) {
826
929
  return false;
827
930
  }
931
+
828
932
  var _latlon = _slicedToArray(latlon, 2),
829
- lat = _latlon[0],
830
- lon = _latlon[1];
933
+ lat = _latlon[0],
934
+ lon = _latlon[1];
935
+
831
936
  if (!(0, types_1.isNumber)(lat) || !(lat >= exports.MIN_LATITUDE && lat <= exports.MAX_LATITUDE)) {
832
937
  return false;
833
938
  }
939
+
834
940
  if (!(0, types_1.isNumber)(lon) || !(lon >= exports.MIN_LONGITUDE && lon <= exports.MAX_LONGITUDE)) {
835
941
  return false;
836
942
  }
943
+
837
944
  return true;
838
945
  };
946
+
839
947
  exports.isValidLatLon = isValidLatLon;
840
948
  /**
841
949
  * Returns a list of all lat or lon coordinates used in a specified layer
@@ -843,10 +951,12 @@ exports.isValidLatLon = isValidLatLon;
843
951
  * @param {string} field
844
952
  * @returns {number[]} list of lat coordinates or lon coordinates
845
953
  */
954
+
846
955
  var getLatOrLonCoordinates = function getLatOrLonCoordinates(layer, field) {
847
956
  var getClusterValues = function getClusterValues(clusterLayer) {
848
957
  return (0, lodash_1.get)(clusterLayer, field, []).slice(0, clusterLayer.type === LAYER_TYPE.Marker && clusterLayer.resultLimit ? clusterLayer.resultLimit : exports.DEFAULT_RESULT_LIMIT);
849
958
  };
959
+
850
960
  var getChoroplethValues = function getChoroplethValues(choroplethLayer) {
851
961
  var slicedGeomList = choroplethLayer.geom.slice(0, choroplethLayer.resultLimit);
852
962
  var flatCoordinates = slicedGeomList.flatMap(function (geomObject) {
@@ -856,6 +966,7 @@ var getLatOrLonCoordinates = function getLatOrLonCoordinates(layer, field) {
856
966
  return coord[field === LONGITUDE ? 0 : 1];
857
967
  });
858
968
  };
969
+
859
970
  return layer.type === LAYER_TYPE.Choropleth ? getChoroplethValues(layer) : getClusterValues(layer);
860
971
  };
861
972
  /**
@@ -863,25 +974,32 @@ var getLatOrLonCoordinates = function getLatOrLonCoordinates(layer, field) {
863
974
  * @param {LayerType[]} layers
864
975
  * @returns {LngLatBoundsLike}
865
976
  */
977
+
978
+
866
979
  var getGlobalLayerBoundaries = function getGlobalLayerBoundaries(layers) {
867
980
  var isLayerValid = function isLayerValid(field) {
868
981
  return layers.every(function (layer) {
869
982
  return layer[field] || layer.geom;
870
983
  });
871
984
  };
985
+
872
986
  var getDefaultMax = function getDefaultMax(field) {
873
987
  return field === LONGITUDE ? exports.MAX_LONGITUDE : exports.MAX_LATITUDE;
874
988
  };
989
+
875
990
  var getDefaultMin = function getDefaultMin(field) {
876
991
  return field === LONGITUDE ? exports.MIN_LONGITUDE : exports.MIN_LATITUDE;
877
992
  };
993
+
878
994
  if (!layers || !Array.isArray(layers) || !layers.length) {
879
995
  return null;
880
996
  }
997
+
881
998
  var getMin = function getMin(field) {
882
999
  if (!isLayerValid(field)) {
883
1000
  return getDefaultMin(field);
884
1001
  }
1002
+
885
1003
  return layers.reduce(function (prevVal, layer) {
886
1004
  var coordinatesNumArr = getLatOrLonCoordinates(layer, field).map(function (x) {
887
1005
  return +x;
@@ -889,32 +1007,41 @@ var getGlobalLayerBoundaries = function getGlobalLayerBoundaries(layers) {
889
1007
  return (0, lodash_1.min)([prevVal].concat(_toConsumableArray(coordinatesNumArr)));
890
1008
  }, getDefaultMax(field));
891
1009
  };
1010
+
892
1011
  var getMax = function getMax(field) {
893
1012
  if (!isLayerValid(field)) {
894
1013
  return getDefaultMax(field);
895
1014
  }
1015
+
896
1016
  return layers.reduce(function (prevVal, layer) {
897
1017
  var coordinatesNumArr = getLatOrLonCoordinates(layer, field).map(Number);
898
1018
  return (0, lodash_1.max)([prevVal].concat(_toConsumableArray(coordinatesNumArr)));
899
1019
  }, getDefaultMin(field));
900
1020
  };
1021
+
901
1022
  return [[getMin(LONGITUDE), getMin(LATITUDE)], [getMax(LONGITUDE), getMax(LATITUDE)]];
902
1023
  };
1024
+
903
1025
  exports.getGlobalLayerBoundaries = getGlobalLayerBoundaries;
1026
+
904
1027
  var getScaledOpacities = function getScaledOpacities(colors, cfgOpacity) {
905
1028
  // extract opacity information from 8 digit hex codes
906
1029
  var opacities = colors === null || colors === void 0 ? void 0 : colors.map(function (color) {
907
1030
  var _a;
1031
+
908
1032
  return (color === null || color === void 0 ? void 0 : color.length) === 9 ? (_a = chroma(color).alpha()) !== null && _a !== void 0 ? _a : 1 : 1;
909
- });
910
- // opacity cannot be greater than configured opacity
1033
+ }); // opacity cannot be greater than configured opacity
1034
+
911
1035
  return opacities === null || opacities === void 0 ? void 0 : opacities.map(function (opacity) {
912
1036
  return opacity * cfgOpacity;
913
1037
  });
914
1038
  };
1039
+
915
1040
  exports.getScaledOpacities = getScaledOpacities;
1041
+
916
1042
  var compareBaseStyles = function compareBaseStyles(curr, next) {
917
1043
  var _a, _b, _c, _d;
1044
+
918
1045
  var currBaseLayer = (_a = curr === null || curr === void 0 ? void 0 : curr.layers) === null || _a === void 0 ? void 0 : _a.find(function (layer) {
919
1046
  return (layer === null || layer === void 0 ? void 0 : layer.id) === 'base-layer';
920
1047
  });
@@ -923,12 +1050,16 @@ var compareBaseStyles = function compareBaseStyles(curr, next) {
923
1050
  });
924
1051
  var currBaseSource = (0, lodash_1.get)(curr === null || curr === void 0 ? void 0 : curr.sources, (_c = currBaseLayer === null || currBaseLayer === void 0 ? void 0 : currBaseLayer.source) !== null && _c !== void 0 ? _c : '');
925
1052
  var nextBaseSource = (0, lodash_1.get)(next === null || next === void 0 ? void 0 : next.sources, (_d = nextBaseLayer === null || nextBaseLayer === void 0 ? void 0 : nextBaseLayer.source) !== null && _d !== void 0 ? _d : '');
1053
+
926
1054
  if (!currBaseLayer || !nextBaseLayer || !currBaseSource || !nextBaseSource) {
927
1055
  return false;
928
1056
  }
1057
+
929
1058
  return (0, lodash_1.isEqual)(currBaseLayer, nextBaseLayer) && (0, lodash_1.isEqual)(currBaseSource, nextBaseSource);
930
1059
  };
1060
+
931
1061
  exports.compareBaseStyles = compareBaseStyles;
1062
+
932
1063
  var formatMetadata = function formatMetadata(choroplethLayer, i) {
933
1064
  if (!choroplethLayer || !choroplethLayer.areaIds || !choroplethLayer.areaValues) return {};
934
1065
  if (i >= choroplethLayer.areaIds.length) return {};
@@ -945,6 +1076,7 @@ var formatMetadata = function formatMetadata(choroplethLayer, i) {
945
1076
  return Object.assign(Object.assign({}, result), _defineProperty({}, key, val));
946
1077
  }, base);
947
1078
  };
1079
+
948
1080
  exports.formatMetadata = formatMetadata;
949
1081
 
950
1082
  /***/ }),
@@ -973,39 +1105,50 @@ module.exports = require("@splunk/visualization-color-palettes");
973
1105
 
974
1106
 
975
1107
  var _slicedToArray = __webpack_require__(7);
1108
+
976
1109
  var __rest = this && this.__rest || function (s, e) {
977
1110
  var t = {};
1111
+
978
1112
  for (var p in s) {
979
1113
  if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
980
1114
  }
1115
+
981
1116
  if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
982
1117
  if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
983
1118
  }
984
1119
  return t;
985
1120
  };
1121
+
986
1122
  Object.defineProperty(exports, "__esModule", {
987
1123
  value: true
988
1124
  });
1125
+
989
1126
  var maplibre_gl_1 = __webpack_require__(29);
1127
+
990
1128
  var React = __webpack_require__(3);
1129
+
991
1130
  var Tooltip_1 = __webpack_require__(30);
1131
+
992
1132
  var MarkerWrapper = function MarkerWrapper(_a) {
993
1133
  var longitude = _a.longitude,
994
- latitude = _a.latitude,
995
- areaId = _a.areaId,
996
- areaValue = _a.areaValue,
997
- _a$additionalFields = _a.additionalFields,
998
- additionalFields = _a$additionalFields === void 0 ? [] : _a$additionalFields,
999
- map = _a.map,
1000
- isChoroplethTooltipOpen = _a.isChoroplethTooltipOpen,
1001
- children = _a.children,
1002
- otherProps = __rest(_a, ["longitude", "latitude", "areaId", "areaValue", "additionalFields", "map", "isChoroplethTooltipOpen", "children"]);
1134
+ latitude = _a.latitude,
1135
+ areaId = _a.areaId,
1136
+ areaValue = _a.areaValue,
1137
+ _a$additionalFields = _a.additionalFields,
1138
+ additionalFields = _a$additionalFields === void 0 ? [] : _a$additionalFields,
1139
+ map = _a.map,
1140
+ isChoroplethTooltipOpen = _a.isChoroplethTooltipOpen,
1141
+ children = _a.children,
1142
+ otherProps = __rest(_a, ["longitude", "latitude", "areaId", "areaValue", "additionalFields", "map", "isChoroplethTooltipOpen", "children"]);
1143
+
1003
1144
  var container = React.useRef();
1004
1145
  var marker = React.useRef();
1146
+
1005
1147
  var _React$useState = React.useState(false),
1006
- _React$useState2 = _slicedToArray(_React$useState, 2),
1007
- isTooltipOpen = _React$useState2[0],
1008
- setTooltipOpenStatus = _React$useState2[1];
1148
+ _React$useState2 = _slicedToArray(_React$useState, 2),
1149
+ isTooltipOpen = _React$useState2[0],
1150
+ setTooltipOpenStatus = _React$useState2[1];
1151
+
1009
1152
  var isChoroplethTooltip = React.useCallback(function () {
1010
1153
  return isChoroplethTooltipOpen !== undefined;
1011
1154
  }, [isChoroplethTooltipOpen]);
@@ -1064,6 +1207,7 @@ var MarkerWrapper = function MarkerWrapper(_a) {
1064
1207
  additionalFields: additionalFields
1065
1208
  })));
1066
1209
  };
1210
+
1067
1211
  exports.default = MarkerWrapper;
1068
1212
 
1069
1213
  /***/ }),
@@ -1080,15 +1224,22 @@ module.exports = require("maplibre-gl");
1080
1224
 
1081
1225
 
1082
1226
  var _taggedTemplateLiteral = __webpack_require__(10);
1227
+
1083
1228
  var _templateObject;
1229
+
1084
1230
  Object.defineProperty(exports, "__esModule", {
1085
1231
  value: true
1086
1232
  });
1087
1233
  exports.convertDegToDMS = void 0;
1234
+
1088
1235
  var React = __webpack_require__(3);
1236
+
1089
1237
  var styled_components_1 = __webpack_require__(11);
1238
+
1090
1239
  var Popover_1 = __webpack_require__(31);
1240
+
1091
1241
  var i18n_1 = __webpack_require__(32);
1242
+
1092
1243
  var StyledPopover = (0, styled_components_1.default)(Popover_1.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: 250px;\n font-size: 12px;\n"])));
1093
1244
  var StyledTable = styled_components_1.default.table.withConfig({
1094
1245
  displayName: "Tooltip__StyledTable",
@@ -1108,42 +1259,50 @@ var StyledColorBlock = styled_components_1.default.div.withConfig({
1108
1259
  })(["background-color:", ";display:inline-block;margin-right:4px;border-radius:2px;width:6px;height:11px;transform:translateY(1px);"], function (props) {
1109
1260
  return props.color;
1110
1261
  });
1262
+
1111
1263
  var convertDegToDMS = function convertDegToDMS(decimalDegree, type) {
1112
1264
  var truncate = function truncate(n) {
1113
1265
  return n > 0 ? Math.floor(n) : Math.ceil(n);
1114
1266
  };
1267
+
1115
1268
  var absoluteDegree = Math.abs(decimalDegree);
1116
1269
  var degrees = truncate(absoluteDegree);
1117
1270
  var minutes = truncate((absoluteDegree - degrees) * 60);
1118
1271
  var seconds = Math.round((absoluteDegree - degrees - minutes / 60) * 3600);
1272
+
1119
1273
  if (seconds === 60) {
1120
1274
  minutes += 1;
1121
1275
  seconds = 0;
1122
1276
  }
1277
+
1123
1278
  if (minutes === 60) {
1124
1279
  degrees += 1;
1125
1280
  minutes = 0;
1126
1281
  }
1282
+
1127
1283
  var direction;
1284
+
1128
1285
  if (type === 'longitude') {
1129
1286
  direction = decimalDegree < 0 ? 'W' : 'E';
1130
1287
  } else if (type === 'latitude') {
1131
1288
  direction = decimalDegree < 0 ? 'S' : 'N';
1132
1289
  }
1290
+
1133
1291
  return "".concat(degrees, "\xB0 ").concat(minutes, "' ").concat(seconds, "\" ").concat(direction);
1134
1292
  };
1135
- exports.convertDegToDMS = convertDegToDMS;
1136
- // only want latitude/longitude for marker and bubble
1293
+
1294
+ exports.convertDegToDMS = convertDegToDMS; // only want latitude/longitude for marker and bubble
1137
1295
  // omit for choropleth, and put areaid, areavalue instead
1296
+
1138
1297
  var Tooltip = function Tooltip(_ref) {
1139
1298
  var open = _ref.open,
1140
- anchor = _ref.anchor,
1141
- latitude = _ref.latitude,
1142
- longitude = _ref.longitude,
1143
- areaId = _ref.areaId,
1144
- areaValue = _ref.areaValue,
1145
- _ref$additionalFields = _ref.additionalFields,
1146
- additionalFields = _ref$additionalFields === void 0 ? [] : _ref$additionalFields;
1299
+ anchor = _ref.anchor,
1300
+ latitude = _ref.latitude,
1301
+ longitude = _ref.longitude,
1302
+ areaId = _ref.areaId,
1303
+ areaValue = _ref.areaValue,
1304
+ _ref$additionalFields = _ref.additionalFields,
1305
+ additionalFields = _ref$additionalFields === void 0 ? [] : _ref$additionalFields;
1147
1306
  return React.createElement(StyledPopover, {
1148
1307
  open: open,
1149
1308
  animation: false,
@@ -1163,8 +1322,8 @@ var Tooltip = function Tooltip(_ref) {
1163
1322
  return value && String(value) !== '0';
1164
1323
  }).map(function (_ref3, index) {
1165
1324
  var name = _ref3.name,
1166
- value = _ref3.value,
1167
- color = _ref3.color;
1325
+ value = _ref3.value,
1326
+ color = _ref3.color;
1168
1327
  return React.createElement("tr", {
1169
1328
  key: String(index)
1170
1329
  }, React.createElement(StyledTitleColumn, {
@@ -1177,6 +1336,7 @@ var Tooltip = function Tooltip(_ref) {
1177
1336
  }, value));
1178
1337
  }))));
1179
1338
  };
1339
+
1180
1340
  exports.default = Tooltip;
1181
1341
 
1182
1342
  /***/ }),