@splunk/visualizations 26.4.0 → 27.0.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 (152) hide show
  1. package/Area.config.js +1262 -1600
  2. package/Area.config.js.map +7 -1
  3. package/Area.js +3002 -4920
  4. package/Area.js.map +7 -1
  5. package/Bar.config.js +1247 -1574
  6. package/Bar.config.js.map +7 -1
  7. package/Bar.js +2924 -4836
  8. package/Bar.js.map +7 -1
  9. package/Bubble.config.js +896 -1213
  10. package/Bubble.config.js.map +7 -1
  11. package/Bubble.js +2520 -4476
  12. package/Bubble.js.map +7 -1
  13. package/ChoroplethSvg.config.js +282 -582
  14. package/ChoroplethSvg.config.js.map +7 -1
  15. package/ChoroplethSvg.js +2004 -3810
  16. package/ChoroplethSvg.js.map +7 -1
  17. package/Column.config.js +1208 -1541
  18. package/Column.config.js.map +7 -1
  19. package/Column.js +2933 -4879
  20. package/Column.js.map +7 -1
  21. package/Ellipse.config.js +443 -774
  22. package/Ellipse.config.js.map +7 -1
  23. package/Ellipse.js +1651 -3341
  24. package/Ellipse.js.map +7 -1
  25. package/Events.config.js +207 -492
  26. package/Events.config.js.map +7 -1
  27. package/Events.js +2615 -4649
  28. package/Events.js.map +7 -1
  29. package/FillerGauge.config.js +420 -775
  30. package/FillerGauge.config.js.map +7 -1
  31. package/FillerGauge.js +2137 -4578
  32. package/FillerGauge.js.map +7 -1
  33. package/Image.config.js +144 -411
  34. package/Image.config.js.map +7 -1
  35. package/Image.js +1395 -3048
  36. package/Image.js.map +7 -1
  37. package/Line.config.js +1278 -1625
  38. package/Line.config.js.map +7 -1
  39. package/Line.js +2957 -4919
  40. package/Line.js.map +7 -1
  41. package/LinkGraph.config.js +390 -632
  42. package/LinkGraph.config.js.map +7 -1
  43. package/LinkGraph.js +5243 -6190
  44. package/LinkGraph.js.map +7 -1
  45. package/MIGRATION.md +12 -0
  46. package/Map.config.js +501 -801
  47. package/Map.config.js.map +7 -1
  48. package/Map.js +3369 -5676
  49. package/Map.js.map +7 -1
  50. package/Markdown.config.js +232 -528
  51. package/Markdown.config.js.map +7 -1
  52. package/Markdown.js +1645 -3216
  53. package/Markdown.js.map +7 -1
  54. package/MarkerGauge.config.js +308 -613
  55. package/MarkerGauge.config.js.map +7 -1
  56. package/MarkerGauge.js +2189 -4535
  57. package/MarkerGauge.js.map +7 -1
  58. package/ParallelCoordinates.config.js +282 -581
  59. package/ParallelCoordinates.config.js.map +7 -1
  60. package/ParallelCoordinates.js +2023 -4720
  61. package/ParallelCoordinates.js.map +7 -1
  62. package/Pie.config.js +278 -547
  63. package/Pie.config.js.map +7 -1
  64. package/Pie.js +1998 -3982
  65. package/Pie.js.map +7 -1
  66. package/Punchcard.config.js +291 -578
  67. package/Punchcard.config.js.map +7 -1
  68. package/Punchcard.js +2709 -5042
  69. package/Punchcard.js.map +7 -1
  70. package/Rectangle.config.js +455 -770
  71. package/Rectangle.config.js.map +7 -1
  72. package/Rectangle.js +1638 -3262
  73. package/Rectangle.js.map +7 -1
  74. package/Sankey.config.js +291 -626
  75. package/Sankey.config.js.map +7 -1
  76. package/Sankey.js +2737 -4909
  77. package/Sankey.js.map +7 -1
  78. package/Scatter.config.js +876 -1194
  79. package/Scatter.config.js.map +7 -1
  80. package/Scatter.js +2532 -4470
  81. package/Scatter.js.map +7 -1
  82. package/SingleValue.config.js +819 -1251
  83. package/SingleValue.config.js.map +7 -1
  84. package/SingleValue.js +4203 -7413
  85. package/SingleValue.js.map +7 -1
  86. package/SingleValueBasic.js +382 -1527
  87. package/SingleValueBasic.js.map +7 -1
  88. package/SingleValueIcon.config.js +781 -1207
  89. package/SingleValueIcon.config.js.map +7 -1
  90. package/SingleValueIcon.js +3350 -6285
  91. package/SingleValueIcon.js.map +7 -1
  92. package/SingleValueRadial.config.js +708 -1119
  93. package/SingleValueRadial.config.js.map +7 -1
  94. package/SingleValueRadial.js +3808 -6965
  95. package/SingleValueRadial.js.map +7 -1
  96. package/SparkLine.js +439 -746
  97. package/SparkLine.js.map +7 -1
  98. package/Table.config.js +565 -887
  99. package/Table.config.js.map +7 -1
  100. package/Table.js +3277 -5386
  101. package/Table.js.map +7 -1
  102. package/common/Charting.js +484 -1462
  103. package/common/Charting.js.map +7 -1
  104. package/common/ChartingApi.js +46 -170
  105. package/common/ChartingApi.js.map +7 -1
  106. package/common/DocExampleWithVizSandbox.js +270 -473
  107. package/common/DocExampleWithVizSandbox.js.map +7 -1
  108. package/common/EventsDoc.js +172 -464
  109. package/common/EventsDoc.js.map +7 -1
  110. package/common/GaugeMajorTicks.js +249 -347
  111. package/common/GaugeMajorTicks.js.map +7 -1
  112. package/common/GaugeValueMarker.js +201 -311
  113. package/common/GaugeValueMarker.js.map +7 -1
  114. package/common/OptionsDoc.js +347 -912
  115. package/common/OptionsDoc.js.map +7 -1
  116. package/common/OverviewDoc.js +435 -769
  117. package/common/OverviewDoc.js.map +7 -1
  118. package/common/SplunkVisualization.js +116 -259
  119. package/common/SplunkVisualization.js.map +7 -1
  120. package/common/SplunkVisualizationApi.js +40 -156
  121. package/common/SplunkVisualizationApi.js.map +7 -1
  122. package/common/ThemesDoc.js +271 -420
  123. package/common/ThemesDoc.js.map +7 -1
  124. package/common/chartingUtils.js +140 -312
  125. package/common/chartingUtils.js.map +7 -1
  126. package/common/docUtils.js +148 -266
  127. package/common/docUtils.js.map +7 -1
  128. package/common/gaugeUtils.js +280 -808
  129. package/common/gaugeUtils.js.map +7 -1
  130. package/common/shapeUtils.js +106 -211
  131. package/common/shapeUtils.js.map +7 -1
  132. package/common/utils/configUtils.js +126 -252
  133. package/common/utils/configUtils.js.map +7 -1
  134. package/common/utils/dataUtils.js +217 -812
  135. package/common/utils/dataUtils.js.map +7 -1
  136. package/common/utils/featureFlagUtils.js +53 -133
  137. package/common/utils/featureFlagUtils.js.map +7 -1
  138. package/common/utils/hocUtils.js +32 -122
  139. package/common/utils/hocUtils.js.map +7 -1
  140. package/common/utils/mapUtils.js +502 -1337
  141. package/common/utils/mapUtils.js.map +7 -1
  142. package/common/utils/singleValueUtils.js +462 -1010
  143. package/common/utils/singleValueUtils.js.map +7 -1
  144. package/common/utils/testHelper.js +92 -146
  145. package/common/utils/testHelper.js.map +7 -1
  146. package/common/utils/trellisUtils.js +237 -489
  147. package/common/utils/trellisUtils.js.map +7 -1
  148. package/common/utils/urlUtils.js +28 -112
  149. package/common/utils/urlUtils.js.map +7 -1
  150. package/common/withDashboardViz.js +1168 -2438
  151. package/common/withDashboardViz.js.map +7 -1
  152. package/package.json +52 -43
@@ -1,1197 +1,330 @@
1
- /*!
2
- * Copyright © 2024 Splunk Inc.
3
- * SPLUNK CONFIDENTIAL – Use or disclosure of this material in whole or
4
- * in part without a valid written license from Splunk Inc. is PROHIBITED.
5
- */
6
- module.exports =
7
- /******/ (function(modules) { // webpackBootstrap
8
- /******/ // The module cache
9
- /******/ var installedModules = {};
10
- /******/
11
- /******/ // The require function
12
- /******/ function __webpack_require__(moduleId) {
13
- /******/
14
- /******/ // Check if module is in cache
15
- /******/ if(installedModules[moduleId]) {
16
- /******/ return installedModules[moduleId].exports;
17
- /******/ }
18
- /******/ // Create a new module (and put it into the cache)
19
- /******/ var module = installedModules[moduleId] = {
20
- /******/ i: moduleId,
21
- /******/ l: false,
22
- /******/ exports: {}
23
- /******/ };
24
- /******/
25
- /******/ // Execute the module function
26
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
27
- /******/
28
- /******/ // Flag the module as loaded
29
- /******/ module.l = true;
30
- /******/
31
- /******/ // Return the exports of the module
32
- /******/ return module.exports;
33
- /******/ }
34
- /******/
35
- /******/
36
- /******/ // expose the modules object (__webpack_modules__)
37
- /******/ __webpack_require__.m = modules;
38
- /******/
39
- /******/ // expose the module cache
40
- /******/ __webpack_require__.c = installedModules;
41
- /******/
42
- /******/ // define getter function for harmony exports
43
- /******/ __webpack_require__.d = function(exports, name, getter) {
44
- /******/ if(!__webpack_require__.o(exports, name)) {
45
- /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
46
- /******/ }
47
- /******/ };
48
- /******/
49
- /******/ // define __esModule on exports
50
- /******/ __webpack_require__.r = function(exports) {
51
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
52
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
53
- /******/ }
54
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
55
- /******/ };
56
- /******/
57
- /******/ // create a fake namespace object
58
- /******/ // mode & 1: value is a module id, require it
59
- /******/ // mode & 2: merge all properties of value into the ns
60
- /******/ // mode & 4: return value when already ns object
61
- /******/ // mode & 8|1: behave like require
62
- /******/ __webpack_require__.t = function(value, mode) {
63
- /******/ if(mode & 1) value = __webpack_require__(value);
64
- /******/ if(mode & 8) return value;
65
- /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
66
- /******/ var ns = Object.create(null);
67
- /******/ __webpack_require__.r(ns);
68
- /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
69
- /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
70
- /******/ return ns;
71
- /******/ };
72
- /******/
73
- /******/ // getDefaultExport function for compatibility with non-harmony modules
74
- /******/ __webpack_require__.n = function(module) {
75
- /******/ var getter = module && module.__esModule ?
76
- /******/ function getDefault() { return module['default']; } :
77
- /******/ function getModuleExports() { return module; };
78
- /******/ __webpack_require__.d(getter, 'a', getter);
79
- /******/ return getter;
80
- /******/ };
81
- /******/
82
- /******/ // Object.prototype.hasOwnProperty.call
83
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
84
- /******/
85
- /******/ // __webpack_public_path__
86
- /******/ __webpack_require__.p = "";
87
- /******/
88
- /******/
89
- /******/ // Load entry module and return exports
90
- /******/ return __webpack_require__(__webpack_require__.s = 40);
91
- /******/ })
92
- /************************************************************************/
93
- /******/ ([
94
- /* 0 */
95
- /***/ (function(module, exports) {
96
-
97
- module.exports = require("lodash");
98
-
99
- /***/ }),
100
- /* 1 */,
101
- /* 2 */
102
- /***/ (function(module, exports) {
103
-
104
- module.exports = require("@babel/runtime/helpers/toConsumableArray");
105
-
106
- /***/ }),
107
- /* 3 */
108
- /***/ (function(module, exports) {
109
-
110
- module.exports = require("@babel/runtime/helpers/defineProperty");
111
-
112
- /***/ }),
113
- /* 4 */
114
- /***/ (function(module, exports) {
115
-
116
- module.exports = require("react");
117
-
118
- /***/ }),
119
- /* 5 */,
120
- /* 6 */,
121
- /* 7 */
122
- /***/ (function(module, exports) {
123
-
124
- module.exports = require("@splunk/visualization-schemas");
125
-
126
- /***/ }),
127
- /* 8 */
128
- /***/ (function(module, exports) {
129
-
130
- module.exports = require("@babel/runtime/helpers/slicedToArray");
131
-
132
- /***/ }),
133
- /* 9 */,
134
- /* 10 */
135
- /***/ (function(module, exports) {
136
-
137
- module.exports = require("@splunk/visualization-encoding/utils/types");
138
-
139
- /***/ }),
140
- /* 11 */
141
- /***/ (function(module, exports) {
142
-
143
- module.exports = require("@babel/runtime/helpers/taggedTemplateLiteral");
144
-
145
- /***/ }),
146
- /* 12 */
147
- /***/ (function(module, exports) {
148
-
149
- module.exports = require("styled-components");
150
-
151
- /***/ }),
152
- /* 13 */
153
- /***/ (function(module, exports) {
154
-
155
- module.exports = require("@splunk/visualizations-shared/colorUtils");
156
-
157
- /***/ }),
158
- /* 14 */,
159
- /* 15 */,
160
- /* 16 */,
161
- /* 17 */,
162
- /* 18 */,
163
- /* 19 */,
164
- /* 20 */,
165
- /* 21 */,
166
- /* 22 */,
167
- /* 23 */,
168
- /* 24 */,
169
- /* 25 */,
170
- /* 26 */,
171
- /* 27 */,
172
- /* 28 */,
173
- /* 29 */,
174
- /* 30 */,
175
- /* 31 */,
176
- /* 32 */,
177
- /* 33 */,
178
- /* 34 */,
179
- /* 35 */,
180
- /* 36 */,
181
- /* 37 */,
182
- /* 38 */,
183
- /* 39 */,
184
- /* 40 */
185
- /***/ (function(module, exports, __webpack_require__) {
186
-
187
- "use strict";
188
-
189
-
190
- Object.defineProperty(exports, "__esModule", {
191
- value: true
192
- });
193
- exports.columnsNullToZeros = void 0;
194
-
195
- var types_1 = __webpack_require__(10);
196
-
197
- var dsl_1 = __webpack_require__(41);
198
-
199
- var hocUtils_1 = __webpack_require__(42);
200
-
201
- var JSONSchemaUtils_1 = __webpack_require__(43);
202
-
203
- var BubbleLayer_1 = __webpack_require__(44);
204
-
205
- var columnsNullToZeros = function columnsNullToZeros(config, dataSources, options) {
206
- var _a, _b;
207
-
208
- var primary = dataSources.primary;
209
- var _primary$data = primary.data,
210
- columns = _primary$data.columns,
211
- fields = _primary$data.fields;
212
- var newColumns = columns;
213
- var mergedOptions = (0, hocUtils_1.deepMergeWithArrayPrimitiveOverrides)({}, options, (0, JSONSchemaUtils_1.pickFieldFromJSONSchema)(config.optionsSchema, 'default'));
214
-
215
- if (((_b = (_a = mergedOptions.layers) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.type) === 'bubble') {
216
- var latitudeField = (0, dsl_1.getFieldsFromDSL)(mergedOptions.layers[0].latitude, dataSources)[0] || '';
217
- var longitudeField = (0, dsl_1.getFieldsFromDSL)(mergedOptions.layers[0].longitude, dataSources)[0] || '';
218
- var excludedFields = [latitudeField, longitudeField, 'geobin'].concat(BubbleLayer_1.GEO_LAT_AND_LONG_FIELD);
219
- var indicesToEvaluate = new Set(fields.reduce(function (arr, e, i) {
220
- var field = typeof e === 'string' ? e : e.name.toString();
221
-
222
- if (!excludedFields.includes(field)) {
223
- arr.push(i);
224
- }
225
-
226
- return arr;
227
- }, []));
228
- newColumns = columns.map(function (column, i) {
229
- if (indicesToEvaluate.has(i)) {
230
- // sanitize value and convert string to numeric numbers
231
- return column.map(function (value) {
232
- return !value || !(0, types_1.isNumber)(value) ? 0 : +value;
233
- });
234
- }
235
-
236
- return column;
237
- });
238
- }
239
-
240
- var modifiedDatasources = Object.assign(Object.assign({}, dataSources), {
241
- primary: Object.assign(Object.assign({}, primary), {
242
- data: Object.assign(Object.assign({}, primary.data), {
243
- columns: newColumns
244
- })
245
- })
246
- });
247
- return modifiedDatasources;
248
- };
249
-
250
- exports.columnsNullToZeros = columnsNullToZeros;
251
-
252
- /***/ }),
253
- /* 41 */
254
- /***/ (function(module, exports) {
255
-
256
- module.exports = require("@splunk/visualization-encoding/utils/dsl");
257
-
258
- /***/ }),
259
- /* 42 */
260
- /***/ (function(module, exports) {
261
-
262
- module.exports = require("@splunk/visualizations-shared/hocUtils");
263
-
264
- /***/ }),
265
- /* 43 */
266
- /***/ (function(module, exports) {
267
-
268
- module.exports = require("@splunk/visualizations-shared/JSONSchemaUtils");
269
-
270
- /***/ }),
271
- /* 44 */
272
- /***/ (function(module, exports, __webpack_require__) {
273
-
274
- "use strict";
275
-
276
-
277
- var _slicedToArray = __webpack_require__(8);
278
-
279
- var _defineProperty = __webpack_require__(3);
280
-
281
- var _toConsumableArray = __webpack_require__(2);
282
-
283
- var _taggedTemplateLiteral = __webpack_require__(11);
284
-
285
- var _templateObject;
286
-
287
- Object.defineProperty(exports, "__esModule", {
288
- value: true
289
- });
290
- exports.Bubble = exports.PieSegment = exports.GEO_LAT_AND_LONG_FIELD = exports.GEO_BOUND_PREFIX = void 0;
291
-
292
- var React = __webpack_require__(4);
293
-
294
- var styled_components_1 = __webpack_require__(12);
295
-
296
- var lodash_1 = __webpack_require__(0);
297
-
298
- var colorUtils_1 = __webpack_require__(13);
299
-
300
- var MapUtils_1 = __webpack_require__(45);
301
-
302
- var MarkerWrapper_1 = __webpack_require__(49);
303
-
304
- exports.GEO_BOUND_PREFIX = '_geo_bounds_';
305
- exports.GEO_LAT_AND_LONG_FIELD = ['_geo_long_field', '_geo_lat_field'];
306
- exports.PieSegment = React.memo(function (_ref) {
307
- var start = _ref.start,
308
- end = _ref.end,
309
- radius = _ref.radius,
310
- color = _ref.color,
311
- themeColor = _ref.themeColor,
312
- segmentMetadata = _ref.segmentMetadata,
313
- handleBubbleClick = _ref.handleBubbleClick;
314
-
315
- var _ref2 = segmentMetadata !== null && segmentMetadata !== void 0 ? segmentMetadata : {},
316
- name = _ref2.name,
317
- value = _ref2.value;
318
-
319
- var handleSegmentClick = React.useCallback(function (e) {
320
- handleBubbleClick(e, name, value);
321
- }, [name, value, handleBubbleClick]);
322
-
323
- if (end - start === 1) {
324
- return React.createElement("circle", {
325
- onClick: handleSegmentClick,
326
- cx: radius,
327
- cy: radius,
328
- r: radius,
329
- fill: color,
330
- fillOpacity: 0.5,
331
- strokeWidth: 1.5,
332
- stroke: color
333
- });
334
- }
335
-
336
- var a0 = 2 * Math.PI * (start - 0.25);
337
- var a1 = 2 * Math.PI * (end - 0.25);
338
- var x0 = Math.cos(a0);
339
- var y0 = Math.sin(a0);
340
- var x1 = Math.cos(a1);
341
- var y1 = Math.sin(a1);
342
- var arc = end - start > 0.5 ? 1 : 0;
343
- return React.createElement("path", {
344
- onClick: handleSegmentClick,
345
- d: "M ".concat(radius, " ").concat(radius, " L ").concat(radius + radius * x0, " ").concat(radius + radius * y0, " A ").concat(radius, " ").concat(radius, " 0 ").concat(arc, " 1 ").concat(radius + radius * x1, " ").concat(radius + radius * y1, " L ").concat(radius, " ").concat(radius, " A 0 0 0 ").concat(arc, " 0 ").concat(radius, " ").concat(radius),
346
- fill: color,
347
- fillOpacity: 0.8,
348
- stroke: themeColor,
349
- strokeWidth: 2,
350
- strokeOpacity: 0.3
351
- });
352
- });
353
- exports.PieSegment.displayName = 'MapBubblePieSegment';
354
- var StyledMarkerWrapper = (0, styled_components_1.default)(MarkerWrapper_1.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n cursor: pointer;\n"])));
355
- exports.Bubble = React.memo(function (_ref3) {
356
- var originalValues = _ref3.originalValues,
357
- valueRange = _ref3.valueRange,
358
- colors = _ref3.colors,
359
- themeColor = _ref3.themeColor,
360
- isPie = _ref3.isPie,
361
- latitude = _ref3.latitude,
362
- longitude = _ref3.longitude,
363
- bubbleSize = _ref3.bubbleSize,
364
- _ref3$additionalField = _ref3.additionalFields,
365
- additionalFields = _ref3$additionalField === void 0 ? [] : _ref3$additionalField,
366
- map = _ref3.map,
367
- handleMapClick = _ref3.handleMapClick;
368
- var onBubbleClick = React.useCallback(function (e, name, value) {
369
- handleMapClick(e, name, value);
370
- e.stopPropagation();
371
- }, [handleMapClick]);
372
- var bubble = React.useMemo(function () {
373
- var allZeros = originalValues.every(function (v) {
374
- return v === 0;
375
- });
376
-
377
- if (allZeros || !originalValues.length) {
378
- return null;
379
- } // sanitize values
380
-
381
-
382
- var values = originalValues.map(function (v) {
383
- return v > 0 ? v : 0;
384
- }); // compute offsets for pie segments
385
-
386
- var offsets = [];
387
- var total = 0;
388
- values.forEach(function (count) {
389
- offsets.push(total);
390
- total += count;
391
- });
392
- var radius = (0, MapUtils_1.matchBubbleSize)(valueRange, total);
393
- var width = radius * 2;
394
- return React.createElement("svg", {
395
- width: width,
396
- height: width,
397
- viewBox: "-3 -3 ".concat(width + 6, " ").concat(width + 6)
398
- }, isPie ? React.createElement("circle", {
399
- cx: radius,
400
- cy: radius,
401
- r: radius,
402
- fill: "none",
403
- strokeWidth: 2,
404
- stroke: themeColor,
405
- strokeOpacity: 0.3
406
- }) : null, values.map(function (v, i) {
407
- return React.createElement(exports.PieSegment, {
408
- key: String(i),
409
- start: offsets[i] / total,
410
- end: (offsets[i] + v) / total,
411
- radius: radius,
412
- color: colors[i],
413
- themeColor: themeColor,
414
- segmentMetadata: bubbleSize[i],
415
- handleBubbleClick: onBubbleClick
416
- });
417
- }));
418
- }, [bubbleSize, colors, isPie, onBubbleClick, originalValues, themeColor, valueRange]);
419
-
420
- if (!bubble) {
421
- return null;
422
- }
423
-
424
- return React.createElement(StyledMarkerWrapper, {
425
- longitude: longitude,
426
- latitude: latitude,
427
- additionalFields: [].concat(_toConsumableArray(bubbleSize), _toConsumableArray(additionalFields)),
428
- map: map,
429
- "data-test-type": "bubble"
430
- }, bubble);
431
- });
432
- exports.Bubble.displayName = 'MapBubble';
433
-
434
- var BubbleLayer = function BubbleLayer(props) {
435
- var bubbleLayer = props.bubbleLayer,
436
- themeColorScheme = props.themeColorScheme,
437
- map = props.map,
438
- zoom = props.zoom,
439
- onMapClick = props.onMapClick;
440
- bubbleLayer.seriesColors = bubbleLayer.seriesColors || MapUtils_1.DEFAULT_SERIES_COLORS;
441
- bubbleLayer.bubbleSize = bubbleLayer.bubbleSize || [];
442
- var bakedData = React.useMemo(function () {
443
- return (0, MapUtils_1.bakeBubbleData)(bubbleLayer);
444
- }, [bubbleLayer]);
445
- var staticColors = React.useMemo(function () {
446
- return (0, MapUtils_1.getStaticColors)(bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors);
447
- }, [bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors]);
448
-
449
- var _ref4 = bakedData !== null && bakedData !== void 0 ? bakedData : {},
450
- _ref4$data = _ref4.data,
451
- data = _ref4$data === void 0 ? [] : _ref4$data,
452
- _ref4$dataRange = _ref4.dataRange,
453
- dataRange = _ref4$dataRange === void 0 ? [] : _ref4$dataRange,
454
- resultLimit = _ref4.resultLimit,
455
- bubbleSizeFields = _ref4.bubbleSizeFields,
456
- isPie = _ref4.isPie;
457
-
458
- var _bubbleLayer$addition = bubbleLayer.additionalTooltipFields,
459
- additionalTooltipFields = _bubbleLayer$addition === void 0 ? [] : _bubbleLayer$addition;
460
- var roundedZoom = Math.round(zoom);
461
- var themeColor = themeColorScheme === 'light' ? '#ffffff' : '#1a1c20';
462
- var dynamicColors = bubbleLayer.dataColors; // filter data for the current zoom level and sort base on values
463
-
464
- var dataToRender = React.useMemo(function () {
465
- return data.reduce(function (acc, datum, i) {
466
- if (datum.zoom === roundedZoom) {
467
- acc.push({
468
- data: datum,
469
- idx: i
470
- });
471
- }
472
-
473
- return acc;
474
- }, []).slice(0, resultLimit || MapUtils_1.DEFAULT_RESULT_LIMIT).sort(function (a, b) {
475
- return (0, lodash_1.sum)(b.data.values) - (0, lodash_1.sum)(a.data.values);
476
- });
477
- }, [data, resultLimit, roundedZoom]);
478
-
479
- var _handleMapClick = React.useCallback(function (e, name, value, i) {
480
- var _a, _b, _c; // retrieve metadata from the appropriate datum, indexed by i
481
-
482
-
483
- 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 : {};
484
- var payload = Object.keys(metadata).reduce(function (acc, curr) {
485
- var key = "row.".concat(curr, ".value");
486
- var val = String(metadata[curr]);
487
- return Object.assign(Object.assign({}, acc), _defineProperty({}, key, val));
488
- }, {
489
- name: name,
490
- value: String(value)
491
- });
492
- onMapClick({
493
- e: e,
494
- payload: payload
495
- });
496
- }, [dataToRender, onMapClick]);
497
-
498
- return React.createElement(React.Fragment, null, dataToRender.map(function (datum, i) {
499
- var colors = dynamicColors ? [dataToRender.map(function (obj) {
500
- return (0, colorUtils_1.isColor)(dynamicColors[obj.idx]) ? dynamicColors[obj.idx] : MapUtils_1.DEFAULT_CLUSTER_COLOR;
501
- })[i]] : staticColors;
502
-
503
- var _datum$data$coordinat = _slicedToArray(datum.data.coordinates, 2),
504
- longitude = _datum$data$coordinat[0],
505
- latitude = _datum$data$coordinat[1];
506
-
507
- var bubbleSize = datum.data.values.map(function (value, index) {
508
- return {
509
- name: bubbleSizeFields[index],
510
- value: value,
511
- color: colors[index]
512
- };
513
- });
514
- var additionalFields = bubbleLayer.metadata ? additionalTooltipFields.map(function (field) {
515
- return {
516
- name: field,
517
- value: datum.data.metadata[field]
518
- };
519
- }) : [];
520
- return React.createElement(exports.Bubble, {
521
- key: String(i),
522
- originalValues: datum.data.values,
523
- valueRange: dataRange,
524
- colors: colors,
525
- themeColor: themeColor,
526
- isPie: isPie,
527
- longitude: longitude,
528
- latitude: latitude,
529
- bubbleSize: bubbleSize,
530
- additionalFields: additionalFields,
531
- map: map,
532
- handleMapClick: function handleMapClick(e, name, value) {
533
- return _handleMapClick(e, name, value, i);
534
- }
535
- });
536
- }));
537
- };
538
-
539
- exports.default = BubbleLayer;
540
-
541
- /***/ }),
542
- /* 45 */
543
- /***/ (function(module, exports, __webpack_require__) {
544
-
545
- "use strict";
546
-
547
-
548
- var _defineProperty = __webpack_require__(3);
549
-
550
- var _slicedToArray = __webpack_require__(8);
551
-
552
- var _toConsumableArray = __webpack_require__(2);
553
-
554
- Object.defineProperty(exports, "__esModule", {
555
- value: true
556
- });
557
- 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.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;
558
-
559
- var lodash_1 = __webpack_require__(0);
560
-
561
- var d3_scale_1 = __webpack_require__(46);
562
-
563
- var chroma = __webpack_require__(47);
564
-
565
- var colorUtils_1 = __webpack_require__(13);
566
-
567
- var visualization_color_palettes_1 = __webpack_require__(48);
568
-
569
- var types_1 = __webpack_require__(10);
570
-
571
- var visualization_schemas_1 = __webpack_require__(7);
572
-
573
- exports.MAX_LATITUDE = 90;
574
- exports.MIN_LATITUDE = -90;
575
- exports.MAX_LONGITUDE = 180;
576
- exports.MIN_LONGITUDE = -180;
577
- exports.DEFAULT_RESULT_LIMIT = 1000;
578
- exports.DEFAULT_CLUSTER_COLOR = '#909090';
579
- exports.DEFAULT_SERIES_COLORS = visualization_color_palettes_1.VIZ_CATEGORICAL; // MapLibre requires a map style specification number which is always 8
580
-
581
- exports.MAP_STYLE_VERSION_NUMBER = 8; // currently using one [min, max] value set for bubbles across all zoom levels
582
- // TODO: design choices on [min, max] bubble size for different zoom levels
583
-
584
- exports.MIN_BUBBLE_RADIUS = 7.11; // 10px
585
-
586
- exports.MAX_BUBBLE_RADIUS = 45.26; // 85px
587
-
588
- exports.DEFAULT_OPACITY = 0.8;
589
- var LONGITUDE = 'longitude';
590
- var LATITUDE = 'latitude';
591
- /**
592
- * Construct a tile preset {key: config} by combining the default + custom tile configs
593
- * Also returns the default tile config for each theme - light/dark
594
- * @param {MapContextInterface} args
595
- * @param {BaseTileConfig[]} args.defaultTileConfig
596
- * @param {BaseTileConfig[]} args.customTileConfig
597
- * @returns {Object} tile preset
598
- */
599
-
600
- var getTilePreset = function getTilePreset(_ref) {
601
- var _ref$defaultTileConfi = _ref.defaultTileConfig,
602
- defaultTileConfig = _ref$defaultTileConfi === void 0 ? [] : _ref$defaultTileConfi,
603
- _ref$customTileConfig = _ref.customTileConfig,
604
- customTileConfig = _ref$customTileConfig === void 0 ? [] : _ref$customTileConfig;
605
-
606
- var _a, _b;
607
-
608
- var tilePreset = {};
609
- var defaultTileLight = {};
610
- var defaultTileDark = {};
611
- var tileConfigs = [].concat(defaultTileConfig).concat(customTileConfig);
612
- (0, lodash_1.forEach)(tileConfigs, function (tileConfig) {
613
- var key = tileConfig === null || tileConfig === void 0 ? void 0 : tileConfig.key;
614
- var updatedConfig = Object.assign(Object.assign({
615
- theme: 'all'
616
- }, tileConfig), {
617
- version: exports.MAP_STYLE_VERSION_NUMBER
618
- });
619
- tilePreset[key] = updatedConfig;
620
- });
621
-
622
- if (defaultTileConfig.length > 0) {
623
- defaultTileLight = (_a = defaultTileConfig.find(function (config) {
624
- return config.theme === 'light';
625
- })) !== null && _a !== void 0 ? _a : defaultTileConfig.find(function (config) {
626
- return config.theme === undefined;
627
- });
628
- defaultTileDark = (_b = defaultTileConfig.find(function (config) {
629
- return config.theme === 'dark';
630
- })) !== null && _b !== void 0 ? _b : defaultTileConfig.find(function (config) {
631
- return config.theme === undefined;
632
- });
633
- }
634
-
635
- return {
636
- tilePreset: tilePreset,
637
- defaultTileLight: defaultTileLight,
638
- defaultTileDark: defaultTileDark
639
- };
640
- };
641
-
642
- exports.getTilePreset = getTilePreset;
643
- /**
644
- * Check if baseLayerTileServer is in tilePreset and config matches current theme, if yes, return.
645
- * If no, construct a mapStyle with baseLayerTilerServer and baseLayerTileServerType
646
- * Else return default tile config based on current theme
647
- * @param {Object} args
648
- * @param {BaseTileConfig[]} args.tilePreset
649
- * @param {String} args.baseLayerTilerServer
650
- * @param {String} args.baseLayerTileServerType
651
- * @param {String} args.colorScheme
652
- * @param {BaseTileConfig} args.defaultTileDark
653
- * @param {BaseTileConfig} args.defaultTileLight
654
- * @returns {BaseTileConfig} mapStyle
655
- */
656
-
657
- var getMapStyle = function getMapStyle(_ref2) {
658
- var showBaseLayer = _ref2.showBaseLayer,
659
- _ref2$baseLayerTileSe = _ref2.baseLayerTileServer,
660
- baseLayerTileServer = _ref2$baseLayerTileSe === void 0 ? '' : _ref2$baseLayerTileSe,
661
- _ref2$baseLayerTileSe2 = _ref2.baseLayerTileServerType,
662
- baseLayerTileServerType = _ref2$baseLayerTileSe2 === void 0 ? '' : _ref2$baseLayerTileSe2,
663
- _ref2$tilePreset = _ref2.tilePreset,
664
- tilePreset = _ref2$tilePreset === void 0 ? {} : _ref2$tilePreset,
665
- _ref2$colorScheme = _ref2.colorScheme,
666
- colorScheme = _ref2$colorScheme === void 0 ? 'light' : _ref2$colorScheme,
667
- _ref2$defaultTileLigh = _ref2.defaultTileLight,
668
- defaultTileLight = _ref2$defaultTileLigh === void 0 ? {} : _ref2$defaultTileLigh,
669
- _ref2$defaultTileDark = _ref2.defaultTileDark,
670
- defaultTileDark = _ref2$defaultTileDark === void 0 ? {} : _ref2$defaultTileDark;
671
-
672
- if (!showBaseLayer) {
673
- return {
674
- version: exports.MAP_STYLE_VERSION_NUMBER,
675
- sources: {
676
- 'base-tiles': {
677
- type: 'raster',
678
- tiles: ['data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='],
679
- tileSize: 256
680
- }
681
- },
682
- layers: [{
683
- id: 'base-layer',
684
- type: 'raster',
685
- source: 'base-tiles',
686
- minzoom: 0,
687
- maxzoom: 22
688
- }]
689
- };
690
- }
691
-
692
- if (baseLayerTileServer && tilePreset[baseLayerTileServer] && (tilePreset[baseLayerTileServer].theme === colorScheme || tilePreset[baseLayerTileServer].theme === 'all')) {
693
- return tilePreset[baseLayerTileServer];
694
- }
695
-
696
- if (baseLayerTileServer && baseLayerTileServerType) {
697
- var tiles = [];
698
- /**
699
- * Tile Server URLs (eg: http://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png) can specify the variable {s} which refers to a subdomain
700
- * Subdomains are used to help with browser parallel requests per domain limitation. These subdomains are typically single letters 'a', 'b' and 'c'
701
- * Refer to https://leafletjs.com/SlavaUkraini/reference.html#tilelayer and https://wiki.openstreetmap.org/wiki/Tile_servers
702
- */
703
-
704
- if (baseLayerTileServer.match(/^(https?):\/\/{(s|S)}\../)) {
705
- /**
706
- * sXML (Leaflet) allows users to define their own tile server URLs + list of available subdomains
707
- * In order to preserve this behavior during conversion to splunk.map,
708
- * if the variable {s} or {S} is detected, replace it with 'a', 'b' and 'c' - default values for subdomains
709
- * TODO: in the future, add an additional prop - baseLayerTileServerSubdomains: ['x', 'y', 'z'], default being ['a', 'b', 'c']
710
- */
711
- tiles = [baseLayerTileServer.replace(/{(s|S)}/, 'a'), baseLayerTileServer.replace(/{(s|S)}/, 'b'), baseLayerTileServer.replace(/{(s|S)}/, 'c')];
712
- } else {
713
- tiles = [baseLayerTileServer];
714
- } // TODO: remove hardcoded style when we allow users to pass in layer style through Viz options
715
-
716
-
717
- var mapStyle = {
718
- version: exports.MAP_STYLE_VERSION_NUMBER,
719
- sources: {
720
- 'base-tiles': {
721
- type: baseLayerTileServerType,
722
- tiles: tiles,
723
- tileSize: 256
724
- }
725
- },
726
- layers: [{
727
- id: 'base-layer',
728
- type: 'raster',
729
- source: 'base-tiles',
730
- minzoom: 0,
731
- maxzoom: 24 // https://maplibre.org/maplibre-gl-js-docs/api/map/
732
-
733
- }]
734
- };
735
- return mapStyle;
736
- } // if tile server is not present in the preset AND we can't construct a mapStyle, fall back on defaults
737
-
738
-
739
- return colorScheme === 'light' ? defaultTileLight : defaultTileDark;
740
- };
741
-
742
- exports.getMapStyle = getMapStyle;
743
-
744
- var getZoomConstraintsFromTileConfig = function getZoomConstraintsFromTileConfig(tileConfig, baseLayerTileServer) {
745
- var sources = tileConfig.sources,
746
- layers = tileConfig.layers;
747
- var matchedBaseLayerTileServer = false; // check sources for minzoom maxzoom first
748
-
749
- var sourceKeys = Object.keys(sources);
750
-
751
- for (var i = 0; i < sourceKeys.length; i += 1) {
752
- var _sources$sourceKeys$i = sources[sourceKeys[i]],
753
- minzoom = _sources$sourceKeys$i.minzoom,
754
- maxzoom = _sources$sourceKeys$i.maxzoom;
755
-
756
- if (baseLayerTileServer && sources[sourceKeys[i]].tiles.indexOf(baseLayerTileServer) !== -1) {
757
- matchedBaseLayerTileServer = true;
758
- }
759
-
760
- if ((baseLayerTileServer && matchedBaseLayerTileServer || !baseLayerTileServer) && (0, lodash_1.isNumber)(minzoom) && (0, lodash_1.isNumber)(maxzoom)) {
761
- return {
762
- minZoom: minzoom,
763
- maxZoom: maxzoom
764
- };
1
+ /* Copyright © 2020 Splunk Inc.
2
+ SPLUNK CONFIDENTIAL – Use or disclosure of this material in whole or
3
+ in part without a valid written license from Splunk Inc. is PROHIBITED. */
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __defProps = Object.defineProperties;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
11
+ var __getProtoOf = Object.getPrototypeOf;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
14
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
15
+ var __spreadValues = (a, b) => {
16
+ for (var prop in b || (b = {}))
17
+ if (__hasOwnProp.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ if (__getOwnPropSymbols)
20
+ for (var prop of __getOwnPropSymbols(b)) {
21
+ if (__propIsEnum.call(b, prop))
22
+ __defNormalProp(a, prop, b[prop]);
765
23
  }
766
- } // then check layers
767
-
768
-
769
- for (var _i = 0; _i < layers.length; _i += 1) {
770
- var _layers$_i = layers[_i],
771
- _minzoom = _layers$_i.minzoom,
772
- _maxzoom = _layers$_i.maxzoom;
773
-
774
- if ((baseLayerTileServer && matchedBaseLayerTileServer || !baseLayerTileServer) && (0, lodash_1.isNumber)(_minzoom) && (0, lodash_1.isNumber)(_maxzoom)) {
775
- return {
776
- minZoom: _minzoom,
777
- maxZoom: _maxzoom
778
- };
24
+ return a;
25
+ };
26
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
27
+ var __objRest = (source, exclude) => {
28
+ var target = {};
29
+ for (var prop in source)
30
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
31
+ target[prop] = source[prop];
32
+ if (source != null && __getOwnPropSymbols)
33
+ for (var prop of __getOwnPropSymbols(source)) {
34
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
35
+ target[prop] = source[prop];
779
36
  }
780
- } // Maplibre default - would reset previous min/maxZoom https://maplibre.org/maplibre-gl-js-docs/api/map/
781
-
782
-
783
- return {
784
- minZoom: 0,
785
- maxZoom: 24
786
- };
37
+ return target;
787
38
  };
788
-
789
- exports.getZoomConstraintsFromTileConfig = getZoomConstraintsFromTileConfig;
790
-
791
- var getZoomLevelFromGeobin = function getZoomLevelFromGeobin(geobinStr) {
792
- var _a;
793
-
794
- if (!geobinStr) {
795
- return null;
796
- } // geostats cmds return geobin with zoom level 0-18, 0-99 in the geobinPattern covers the range
797
-
798
-
799
- var geobinPattern = /bin_id_zl_([0-9]{0,2})?_y_/g;
800
- var match = geobinPattern.exec(geobinStr);
801
- return (_a = (match === null || match === void 0 ? void 0 : match.length) && parseInt(match[1], 10)) !== null && _a !== void 0 ? _a : null;
39
+ var __export = (target, all) => {
40
+ for (var name in all)
41
+ __defProp(target, name, { get: all[name], enumerable: true });
802
42
  };
803
-
804
- exports.getZoomLevelFromGeobin = getZoomLevelFromGeobin; // Bubble colors - static
805
-
806
- var getStaticColors = function getStaticColors(colorCount, colorArray) {
807
- if (colorCount < 0 || !colorCount) {
808
- return [exports.DEFAULT_CLUSTER_COLOR];
43
+ var __copyProps = (to, from, except, desc) => {
44
+ if (from && typeof from === "object" || typeof from === "function") {
45
+ for (let key of __getOwnPropNames(from))
46
+ if (!__hasOwnProp.call(to, key) && key !== except)
47
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
809
48
  }
810
-
811
- if (!colorArray || !colorArray.length) {
812
- return _toConsumableArray(Array(colorCount).keys()).map(function (i) {
813
- return exports.DEFAULT_SERIES_COLORS[i];
814
- });
815
- } // loop through colorArray to pick the first $colorCount colors
816
- // start from begining again if colorCount > colorArray.length
817
-
818
-
819
- return _toConsumableArray(Array(colorCount).keys()).map(function (i) {
820
- return (0, colorUtils_1.isColor)(colorArray[i % colorArray.length]) ? colorArray[i % colorArray.length] : exports.DEFAULT_CLUSTER_COLOR;
821
- });
49
+ return to;
822
50
  };
51
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
52
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
53
+ // If the importer is in node compatibility mode or this is not an ESM
54
+ // file that has been converted to a CommonJS file using a Babel-
55
+ // compatible transform (i.e. "__esModule" has not been set), then set
56
+ // "default" to the CommonJS "module.exports" for node compatibility.
57
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
58
+ mod
59
+ ));
60
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
61
+
62
+ // src/common/utils/mapUtils.ts
63
+ var mapUtils_exports = {};
64
+ __export(mapUtils_exports, {
65
+ columnsNullToZeros: () => columnsNullToZeros
66
+ });
67
+ module.exports = __toCommonJS(mapUtils_exports);
823
68
 
824
- exports.getStaticColors = getStaticColors; // Bubble size
825
-
826
- var matchBubbleSize = function matchBubbleSize(dataRange, data) {
827
- var size = (0, d3_scale_1.scalePow)().exponent(0.2).domain(dataRange).range([exports.MIN_BUBBLE_RADIUS, exports.MAX_BUBBLE_RADIUS])(data);
828
-
829
- if (size > exports.MAX_BUBBLE_RADIUS) {
830
- return exports.MAX_BUBBLE_RADIUS;
69
+ // esm-externals:@splunk/visualization-encoding/utils/types
70
+ var types_exports = {};
71
+ __export(types_exports, {
72
+ default: () => types_default
73
+ });
74
+ var defaultImport = __toESM(require("@splunk/visualization-encoding/utils/types"));
75
+ __reExport(types_exports, require("@splunk/visualization-encoding/utils/types"));
76
+ var types_default = "default" in defaultImport ? defaultImport.default : defaultImport;
77
+
78
+ // esm-externals:@splunk/visualization-encoding/utils/dsl
79
+ var dsl_exports = {};
80
+ __export(dsl_exports, {
81
+ default: () => dsl_default
82
+ });
83
+ var defaultImport2 = __toESM(require("@splunk/visualization-encoding/utils/dsl"));
84
+ __reExport(dsl_exports, require("@splunk/visualization-encoding/utils/dsl"));
85
+ var dsl_default = "default" in defaultImport2 ? defaultImport2.default : defaultImport2;
86
+
87
+ // esm-externals:@splunk/visualizations-shared/hocUtils
88
+ var hocUtils_exports = {};
89
+ __export(hocUtils_exports, {
90
+ default: () => hocUtils_default
91
+ });
92
+ var defaultImport3 = __toESM(require("@splunk/visualizations-shared/hocUtils"));
93
+ __reExport(hocUtils_exports, require("@splunk/visualizations-shared/hocUtils"));
94
+ var hocUtils_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
95
+
96
+ // esm-externals:@splunk/visualizations-shared/JSONSchemaUtils
97
+ var JSONSchemaUtils_exports = {};
98
+ __export(JSONSchemaUtils_exports, {
99
+ default: () => JSONSchemaUtils_default
100
+ });
101
+ var defaultImport4 = __toESM(require("@splunk/visualizations-shared/JSONSchemaUtils"));
102
+ __reExport(JSONSchemaUtils_exports, require("@splunk/visualizations-shared/JSONSchemaUtils"));
103
+ var JSONSchemaUtils_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
104
+
105
+ // esm-externals:react
106
+ var react_exports = {};
107
+ __export(react_exports, {
108
+ default: () => react_default
109
+ });
110
+ var defaultImport5 = __toESM(require("react"));
111
+ __reExport(react_exports, require("react"));
112
+ var react_default = "default" in defaultImport5 ? defaultImport5.default : defaultImport5;
113
+
114
+ // esm-externals:styled-components
115
+ var styled_components_exports = {};
116
+ __export(styled_components_exports, {
117
+ default: () => styled_components_default
118
+ });
119
+ var defaultImport6 = __toESM(require("styled-components"));
120
+ __reExport(styled_components_exports, require("styled-components"));
121
+ var styled_components_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
122
+
123
+ // esm-externals:lodash
124
+ var lodash_exports = {};
125
+ __export(lodash_exports, {
126
+ default: () => lodash_default
127
+ });
128
+ var defaultImport7 = __toESM(require("lodash"));
129
+ __reExport(lodash_exports, require("lodash"));
130
+ var lodash_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
131
+
132
+ // esm-externals:@splunk/visualizations-shared/colorUtils
133
+ var colorUtils_exports = {};
134
+ __export(colorUtils_exports, {
135
+ default: () => colorUtils_default
136
+ });
137
+ var defaultImport8 = __toESM(require("@splunk/visualizations-shared/colorUtils"));
138
+ __reExport(colorUtils_exports, require("@splunk/visualizations-shared/colorUtils"));
139
+ var colorUtils_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
140
+
141
+ // esm-externals:d3-scale
142
+ var d3_scale_exports = {};
143
+ __export(d3_scale_exports, {
144
+ default: () => d3_scale_default
145
+ });
146
+ var defaultImport9 = __toESM(require("d3-scale"));
147
+ __reExport(d3_scale_exports, require("d3-scale"));
148
+ var d3_scale_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
149
+
150
+ // esm-externals:chroma-js
151
+ var chroma_js_exports = {};
152
+ __export(chroma_js_exports, {
153
+ default: () => chroma_js_default
154
+ });
155
+ var defaultImport10 = __toESM(require("chroma-js"));
156
+ __reExport(chroma_js_exports, require("chroma-js"));
157
+ var chroma_js_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
158
+
159
+ // esm-externals:@splunk/visualization-color-palettes
160
+ var visualization_color_palettes_exports = {};
161
+ __export(visualization_color_palettes_exports, {
162
+ default: () => visualization_color_palettes_default
163
+ });
164
+ var defaultImport11 = __toESM(require("@splunk/visualization-color-palettes"));
165
+ __reExport(visualization_color_palettes_exports, require("@splunk/visualization-color-palettes"));
166
+ var visualization_color_palettes_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
167
+
168
+ // esm-externals:@splunk/visualization-schemas
169
+ var visualization_schemas_exports = {};
170
+ __export(visualization_schemas_exports, {
171
+ default: () => visualization_schemas_default
172
+ });
173
+ var defaultImport12 = __toESM(require("@splunk/visualization-schemas"));
174
+ __reExport(visualization_schemas_exports, require("@splunk/visualization-schemas"));
175
+ var visualization_schemas_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
176
+
177
+ // src/Map/PureMap/MapUtils.ts
178
+ var MIN_BUBBLE_RADIUS = 7.11;
179
+ var MAX_BUBBLE_RADIUS = 45.26;
180
+ var matchBubbleSize = (dataRange, data) => {
181
+ const size = (0, d3_scale_exports.scalePow)().exponent(0.2).domain(dataRange).range([MIN_BUBBLE_RADIUS, MAX_BUBBLE_RADIUS])(
182
+ data
183
+ );
184
+ if (size > MAX_BUBBLE_RADIUS) {
185
+ return MAX_BUBBLE_RADIUS;
831
186
  }
832
-
833
- if (size < exports.MIN_BUBBLE_RADIUS) {
834
- return exports.MIN_BUBBLE_RADIUS;
187
+ if (size < MIN_BUBBLE_RADIUS) {
188
+ return MIN_BUBBLE_RADIUS;
835
189
  }
836
-
837
190
  return size;
838
191
  };
839
192
 
840
- exports.matchBubbleSize = matchBubbleSize;
841
-
842
- var transposeArray = function transposeArray(array) {
843
- if (!array || !array.length || !array[0] || !array[0].length) {
844
- return [];
845
- }
846
-
847
- return array[0].map(function (_, i) {
848
- return array.map(function (row) {
849
- return row[i];
850
- });
851
- });
852
- };
853
-
854
- exports.transposeArray = transposeArray; // sanitize values: update all null, undefined, or negative values to 0
855
-
856
- var sanitizeValues = function sanitizeValues(values) {
857
- // null / undefined
858
- if (!values) {
859
- return 0;
860
- } // number
861
-
862
-
863
- if (!Array.isArray(values)) {
864
- return values > 0 ? values : 0;
865
- } // array
866
-
867
-
868
- return values.map(function (arr) {
869
- return (0, exports.sanitizeValues)(arr);
870
- });
871
- };
872
-
873
- exports.sanitizeValues = sanitizeValues;
874
-
875
- var bakeBubbleData = function bakeBubbleData(layer) {
876
- var _a;
877
-
878
- 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) {
879
- return null;
880
- } // if bubbleSize is passed as an array of single number array (data series)
881
- // e.g. [value0, value1, ...]
882
- // format each value as an array to unify data operations for data series and frames
883
-
884
-
885
- var sanitizedBubbleSize = (0, exports.sanitizeValues)(layer.bubbleSize);
886
- var transposedBubbleSize;
887
- var transposedSanitizedBubbleSize;
888
- var isPie = false; // format array if bubbleSize is passed as an array of array (data frame)
889
-
890
- if (Array.isArray(layer.bubbleSize[0])) {
891
- // one-time array transpose,
892
- // e.g. from [column0data, column0data] (multi series)
893
- // to [[column0datum0, column1datum0], [column0datum1, column1data1], ...]
894
- // or e.g. from [column0data] (single series)
895
- // to [[column0data]]
896
- // for easy access of values at each geo location,
897
- // and min max pie size computation
898
- transposedBubbleSize = (0, exports.transposeArray)(layer.bubbleSize);
899
- transposedSanitizedBubbleSize = (0, exports.transposeArray)(sanitizedBubbleSize); // if multiple series in the dataframe, set isPie to true
900
-
901
- if (layer.bubbleSize.length > 1) {
902
- isPie = true;
903
- }
904
- } else {
905
- transposedBubbleSize = layer.bubbleSize.map(function (n) {
906
- return [n];
907
- });
908
- transposedSanitizedBubbleSize = sanitizedBubbleSize.map(function (n) {
909
- return [n];
910
- });
911
- }
912
-
913
- if (!transposedBubbleSize || !transposedBubbleSize.length) {
914
- return null;
915
- }
916
-
917
- var data = layer.latitude.map(function (lat, i) {
918
- return {
919
- zoom: (0, exports.getZoomLevelFromGeobin)(layer.geobin[i]),
920
- values: transposedBubbleSize[i],
921
- sanitizedValues: transposedSanitizedBubbleSize[i],
922
- coordinates: [layer.longitude[i], lat],
923
- metadata: layer.metadata ? layer.metadata[i] : {}
924
- };
925
- }).filter(function (d) {
926
- return Boolean(d.values);
927
- }); // compute the min/max value to encode min/max pie or bubble size
928
-
929
- var min = (0, lodash_1.sum)(transposedSanitizedBubbleSize[0]);
930
- var max = (0, lodash_1.sum)(transposedSanitizedBubbleSize[1]);
931
- transposedSanitizedBubbleSize.forEach(function (row) {
932
- var bubbleSize = (0, lodash_1.sum)(row);
933
- max = bubbleSize > max ? bubbleSize : max;
934
- min = bubbleSize < min ? bubbleSize : min;
935
- });
936
- return {
937
- data: data,
938
- dataRange: [min, max],
939
- isPie: isPie,
940
- resultLimit: layer.resultLimit,
941
- bubbleSizeFields: layer.bubbleSizeFields
942
- };
943
- };
944
-
945
- exports.bakeBubbleData = bakeBubbleData;
946
-
947
- var isValidLatLon = function isValidLatLon(latlon) {
948
- if (!latlon || !Array.isArray(latlon) || latlon.length !== 2) {
949
- return false;
950
- }
951
-
952
- var _latlon = _slicedToArray(latlon, 2),
953
- lat = _latlon[0],
954
- lon = _latlon[1];
955
-
956
- if (!(0, types_1.isNumber)(lat) || !(lat >= exports.MIN_LATITUDE && lat <= exports.MAX_LATITUDE)) {
957
- return false;
958
- }
959
-
960
- if (!(0, types_1.isNumber)(lon) || !(lon >= exports.MIN_LONGITUDE && lon <= exports.MAX_LONGITUDE)) {
961
- return false;
962
- }
963
-
964
- return true;
965
- };
966
-
967
- exports.isValidLatLon = isValidLatLon;
968
- /**
969
- * Returns a list of all lat or lon coordinates used in a specified layer
970
- * @param {LayerType[]} layer
971
- * @param {string} field
972
- * @returns {number[]} list of lat coordinates or lon coordinates
973
- */
974
-
975
- var getLatOrLonCoordinates = function getLatOrLonCoordinates(layer, field) {
976
- var getClusterValues = function getClusterValues(clusterLayer) {
977
- return (0, lodash_1.get)(clusterLayer, field, []).slice(0, clusterLayer.type === visualization_schemas_1.LAYER_TYPE.Marker && clusterLayer.resultLimit ? clusterLayer.resultLimit : exports.DEFAULT_RESULT_LIMIT);
978
- };
979
-
980
- var getChoroplethValues = function getChoroplethValues(choroplethLayer) {
981
- var slicedGeomList = choroplethLayer.geom.slice(0, choroplethLayer.resultLimit);
982
- var flatCoordinates = slicedGeomList.flatMap(function (geomObject) {
983
- return geomObject.coordinates.flat(2);
984
- });
985
- return flatCoordinates.map(function (coord) {
986
- return coord[field === LONGITUDE ? 0 : 1];
987
- });
988
- };
989
-
990
- return layer.type === visualization_schemas_1.LAYER_TYPE.Choropleth ? getChoroplethValues(layer) : getClusterValues(layer);
991
- };
992
- /**
993
- * Returns the min and max LongLat pairs to determine the layer boundaries to fit all markers/bubbles
994
- * @param {LayerType[]} layers
995
- * @returns {LngLatBoundsLike}
996
- */
997
-
998
-
999
- var getGlobalLayerBoundaries = function getGlobalLayerBoundaries(layers) {
1000
- var isLayerValid = function isLayerValid(field) {
1001
- return layers.every(function (layer) {
1002
- return layer[field] || layer.geom;
1003
- });
1004
- };
1005
-
1006
- var getDefaultMax = function getDefaultMax(field) {
1007
- return field === LONGITUDE ? exports.MAX_LONGITUDE : exports.MAX_LATITUDE;
1008
- };
1009
-
1010
- var getDefaultMin = function getDefaultMin(field) {
1011
- return field === LONGITUDE ? exports.MIN_LONGITUDE : exports.MIN_LATITUDE;
1012
- };
1013
-
1014
- if (!layers || !Array.isArray(layers) || !layers.length) {
1015
- return null;
1016
- }
1017
-
1018
- var getMin = function getMin(field) {
1019
- if (!isLayerValid(field)) {
1020
- return getDefaultMin(field);
1021
- }
1022
-
1023
- return layers.reduce(function (prevVal, layer) {
1024
- var coordinatesNumArr = getLatOrLonCoordinates(layer, field).map(function (x) {
1025
- return +x;
1026
- });
1027
- return (0, lodash_1.min)([prevVal].concat(_toConsumableArray(coordinatesNumArr)));
1028
- }, getDefaultMax(field));
1029
- };
1030
-
1031
- var getMax = function getMax(field) {
1032
- if (!isLayerValid(field)) {
1033
- return getDefaultMax(field);
1034
- }
1035
-
1036
- return layers.reduce(function (prevVal, layer) {
1037
- var coordinatesNumArr = getLatOrLonCoordinates(layer, field).map(Number);
1038
- return (0, lodash_1.max)([prevVal].concat(_toConsumableArray(coordinatesNumArr)));
1039
- }, getDefaultMin(field));
1040
- };
1041
-
1042
- return [[getMin(LONGITUDE), getMin(LATITUDE)], [getMax(LONGITUDE), getMax(LATITUDE)]];
1043
- };
1044
-
1045
- exports.getGlobalLayerBoundaries = getGlobalLayerBoundaries;
1046
-
1047
- var getScaledOpacities = function getScaledOpacities(colors, cfgOpacity) {
1048
- // extract opacity information from 8 digit hex codes
1049
- var opacities = colors === null || colors === void 0 ? void 0 : colors.map(function (color) {
1050
- var _a;
1051
-
1052
- return (color === null || color === void 0 ? void 0 : color.length) === 9 ? (_a = chroma(color).alpha()) !== null && _a !== void 0 ? _a : 1 : 1;
1053
- }); // opacity cannot be greater than configured opacity
1054
-
1055
- return opacities === null || opacities === void 0 ? void 0 : opacities.map(function (opacity) {
1056
- return opacity * cfgOpacity;
1057
- });
1058
- };
1059
-
1060
- exports.getScaledOpacities = getScaledOpacities;
1061
-
1062
- var compareBaseStyles = function compareBaseStyles(curr, next) {
1063
- var _a, _b, _c, _d;
1064
-
1065
- var currBaseLayer = (_a = curr === null || curr === void 0 ? void 0 : curr.layers) === null || _a === void 0 ? void 0 : _a.find(function (layer) {
1066
- return (layer === null || layer === void 0 ? void 0 : layer.id) === 'base-layer';
1067
- });
1068
- var nextBaseLayer = (_b = next === null || next === void 0 ? void 0 : next.layers) === null || _b === void 0 ? void 0 : _b.find(function (layer) {
1069
- return (layer === null || layer === void 0 ? void 0 : layer.id) === 'base-layer';
1070
- });
1071
- 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 : '');
1072
- 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 : '');
1073
-
1074
- if (!currBaseLayer || !nextBaseLayer || !currBaseSource || !nextBaseSource) {
1075
- return false;
193
+ // esm-externals:maplibre-gl
194
+ var maplibre_gl_exports = {};
195
+ __export(maplibre_gl_exports, {
196
+ default: () => maplibre_gl_default
197
+ });
198
+ var defaultImport13 = __toESM(require("maplibre-gl"));
199
+ __reExport(maplibre_gl_exports, require("maplibre-gl"));
200
+ var maplibre_gl_default = "default" in defaultImport13 ? defaultImport13.default : defaultImport13;
201
+
202
+ // esm-externals:@splunk/react-ui/Popover
203
+ var Popover_exports = {};
204
+ __export(Popover_exports, {
205
+ default: () => Popover_default
206
+ });
207
+ var defaultImport14 = __toESM(require("@splunk/react-ui/Popover"));
208
+ __reExport(Popover_exports, require("@splunk/react-ui/Popover"));
209
+ var Popover_default = "default" in defaultImport14 ? defaultImport14.default : defaultImport14;
210
+
211
+ // esm-externals:@splunk/ui-utils/i18n
212
+ var i18n_exports = {};
213
+ __export(i18n_exports, {
214
+ default: () => i18n_default
215
+ });
216
+ var defaultImport15 = __toESM(require("@splunk/ui-utils/i18n"));
217
+ __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
218
+ var i18n_default = "default" in defaultImport15 ? defaultImport15.default : defaultImport15;
219
+
220
+ // src/Map/PureMap/Tooltip.tsx
221
+ var StyledPopover = styled_components_default(Popover_default)`
222
+ width: 250px;
223
+ font-size: 12px;
224
+ `;
225
+ var StyledTable = styled_components_default.table`
226
+ margin: 2px 6px 2px 6px;
227
+ width: calc(100% - 12px);
228
+ `;
229
+ var StyledTitleColumn = styled_components_default.td`
230
+ opacity: 0.85;
231
+ `;
232
+ var StyledValueColumn = styled_components_default.td`
233
+ text-align: right;
234
+ `;
235
+ var StyledColorBlock = styled_components_default.div`
236
+ background-color: ${(props) => props.color};
237
+ display: inline-block;
238
+ margin-right: 4px;
239
+ border-radius: 2px;
240
+ width: 6px;
241
+ height: 11px;
242
+ transform: translateY(1px);
243
+ `;
244
+ var convertDegToDMS = (decimalDegree, type) => {
245
+ const truncate = (n) => n > 0 ? Math.floor(n) : Math.ceil(n);
246
+ const absoluteDegree = Math.abs(decimalDegree);
247
+ let degrees = truncate(absoluteDegree);
248
+ let minutes = truncate((absoluteDegree - degrees) * 60);
249
+ let seconds = Math.round((absoluteDegree - degrees - minutes / 60) * 3600);
250
+ if (seconds === 60) {
251
+ minutes += 1;
252
+ seconds = 0;
1076
253
  }
1077
-
1078
- return (0, lodash_1.isEqual)(currBaseLayer, nextBaseLayer) && (0, lodash_1.isEqual)(currBaseSource, nextBaseSource);
1079
- };
1080
-
1081
- exports.compareBaseStyles = compareBaseStyles;
1082
-
1083
- var formatMetadata = function formatMetadata(choroplethLayer, i) {
1084
- if (!choroplethLayer || !choroplethLayer.areaIds || !choroplethLayer.areaValues) return {};
1085
- if (i >= choroplethLayer.areaIds.length) return {};
1086
- var metadata = choroplethLayer.metadata ? choroplethLayer.metadata[i] : {};
1087
- var name = choroplethLayer.areaIds[i];
1088
- var value = choroplethLayer.areaValues[i];
1089
- var base = {
1090
- name: name,
1091
- value: String(value)
1092
- };
1093
- return Object.keys(metadata).reduce(function (result, curr) {
1094
- var key = "row.".concat(curr, ".value");
1095
- var val = (0, lodash_1.isObject)(metadata[curr]) ? JSON.stringify(metadata[curr]) : String(metadata[curr]);
1096
- return Object.assign(Object.assign({}, result), _defineProperty({}, key, val));
1097
- }, base);
1098
- };
1099
-
1100
- exports.formatMetadata = formatMetadata;
1101
-
1102
- /***/ }),
1103
- /* 46 */
1104
- /***/ (function(module, exports) {
1105
-
1106
- module.exports = require("d3-scale");
1107
-
1108
- /***/ }),
1109
- /* 47 */
1110
- /***/ (function(module, exports) {
1111
-
1112
- module.exports = require("chroma-js");
1113
-
1114
- /***/ }),
1115
- /* 48 */
1116
- /***/ (function(module, exports) {
1117
-
1118
- module.exports = require("@splunk/visualization-color-palettes");
1119
-
1120
- /***/ }),
1121
- /* 49 */
1122
- /***/ (function(module, exports, __webpack_require__) {
1123
-
1124
- "use strict";
1125
-
1126
-
1127
- var _slicedToArray = __webpack_require__(8);
1128
-
1129
- var __rest = this && this.__rest || function (s, e) {
1130
- var t = {};
1131
-
1132
- for (var p in s) {
1133
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
254
+ if (minutes === 60) {
255
+ degrees += 1;
256
+ minutes = 0;
1134
257
  }
1135
-
1136
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
1137
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
258
+ let direction;
259
+ if (type === "longitude") {
260
+ direction = decimalDegree < 0 ? "W" : "E";
261
+ } else if (type === "latitude") {
262
+ direction = decimalDegree < 0 ? "S" : "N";
1138
263
  }
1139
- return t;
264
+ return `${degrees}\xB0 ${minutes}' ${seconds}" ${direction}`;
1140
265
  };
1141
-
1142
- Object.defineProperty(exports, "__esModule", {
1143
- value: true
1144
- });
1145
-
1146
- var maplibre_gl_1 = __webpack_require__(50);
1147
-
1148
- var React = __webpack_require__(4);
1149
-
1150
- var Tooltip_1 = __webpack_require__(51);
1151
-
1152
- var MarkerWrapper = function MarkerWrapper(_a) {
1153
- var longitude = _a.longitude,
1154
- latitude = _a.latitude,
1155
- areaId = _a.areaId,
1156
- areaValue = _a.areaValue,
1157
- _a$additionalFields = _a.additionalFields,
1158
- additionalFields = _a$additionalFields === void 0 ? [] : _a$additionalFields,
1159
- map = _a.map,
1160
- isChoroplethTooltipOpen = _a.isChoroplethTooltipOpen,
1161
- children = _a.children,
1162
- otherProps = __rest(_a, ["longitude", "latitude", "areaId", "areaValue", "additionalFields", "map", "isChoroplethTooltipOpen", "children"]);
1163
-
1164
- var container = React.useRef();
1165
- var marker = React.useRef();
1166
-
1167
- var _React$useState = React.useState(false),
1168
- _React$useState2 = _slicedToArray(_React$useState, 2),
1169
- isTooltipOpen = _React$useState2[0],
1170
- setTooltipOpenStatus = _React$useState2[1];
1171
-
1172
- var isChoroplethTooltip = React.useCallback(function () {
1173
- return isChoroplethTooltipOpen !== undefined;
1174
- }, [isChoroplethTooltipOpen]);
1175
- var openTooltip = React.useCallback(function () {
1176
- return setTooltipOpenStatus(true);
1177
- }, []);
1178
- var closeTooltip = React.useCallback(function () {
1179
- return setTooltipOpenStatus(false);
1180
- }, []);
1181
- var cleanupMarker = React.useCallback(function () {
266
+ var Tooltip = ({
267
+ open,
268
+ anchor,
269
+ latitude,
270
+ longitude,
271
+ areaId,
272
+ areaValue,
273
+ additionalFields = []
274
+ }) => /* @__PURE__ */ react_exports.createElement(
275
+ StyledPopover,
276
+ {
277
+ open,
278
+ animation: false,
279
+ anchor,
280
+ "data-test": "map-marker-tooltip",
281
+ defaultPlacement: "above"
282
+ },
283
+ /* @__PURE__ */ react_exports.createElement(StyledTable, null, /* @__PURE__ */ react_exports.createElement("tbody", null, areaId && areaValue && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, { "data-test": "area-id" }, areaId), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "area-value" }, areaValue)), latitude && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, null, (0, i18n_exports._)("Latitude")), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "latitude" }, convertDegToDMS(latitude, "latitude"))), longitude && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, null, (0, i18n_exports._)("Longitude")), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "longitude" }, convertDegToDMS(longitude, "longitude"))), additionalFields.filter(({ value }) => value && String(value) !== "0").map(({ name, value, color }, index) => /* @__PURE__ */ react_exports.createElement("tr", { key: String(index) }, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, { "data-test": "field-title" }, color ? /* @__PURE__ */ react_exports.createElement(StyledColorBlock, { "data-test": "field-color", color }) : null, name), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "field-value" }, value)))))
284
+ );
285
+ var Tooltip_default = Tooltip;
286
+
287
+ // src/Map/PureMap/MarkerWrapper.tsx
288
+ var MarkerWrapper = (_a) => {
289
+ var _b = _a, {
290
+ longitude,
291
+ latitude,
292
+ areaId,
293
+ areaValue,
294
+ additionalFields = [],
295
+ map,
296
+ isChoroplethTooltipOpen,
297
+ children
298
+ } = _b, otherProps = __objRest(_b, [
299
+ "longitude",
300
+ "latitude",
301
+ "areaId",
302
+ "areaValue",
303
+ "additionalFields",
304
+ "map",
305
+ "isChoroplethTooltipOpen",
306
+ "children"
307
+ ]);
308
+ const container = react_exports.useRef();
309
+ const marker = react_exports.useRef();
310
+ const [isTooltipOpen, setTooltipOpenStatus] = react_exports.useState(false);
311
+ const isChoroplethTooltip = react_exports.useCallback(() => isChoroplethTooltipOpen !== void 0, [
312
+ isChoroplethTooltipOpen
313
+ ]);
314
+ const openTooltip = react_exports.useCallback(() => setTooltipOpenStatus(true), []);
315
+ const closeTooltip = react_exports.useCallback(() => setTooltipOpenStatus(false), []);
316
+ const cleanupMarker = react_exports.useCallback(() => {
1182
317
  if (marker.current) {
1183
318
  marker.current.remove();
1184
- marker.current = undefined;
319
+ marker.current = void 0;
1185
320
  }
1186
321
  }, []);
1187
- React.useEffect(function () {
322
+ react_exports.useEffect(() => {
1188
323
  try {
1189
324
  if (marker.current) {
1190
325
  marker.current.setLngLat([longitude, latitude]);
1191
326
  } else {
1192
- marker.current = new maplibre_gl_1.Marker({
1193
- element: container.current
1194
- });
327
+ marker.current = new maplibre_gl_exports.Marker({ element: container.current });
1195
328
  marker.current.setLngLat([longitude, latitude]);
1196
329
  marker.current.addTo(map.current);
1197
330
  }
@@ -1200,177 +333,209 @@ var MarkerWrapper = function MarkerWrapper(_a) {
1200
333
  cleanupMarker();
1201
334
  }
1202
335
  }, [latitude, longitude, map]);
1203
- React.useEffect(function () {
1204
- return cleanupMarker;
1205
- }, []);
1206
- return React.createElement("div", {
1207
- style: {
1208
- visibility: isChoroplethTooltip() ? 'hidden' : 'visible'
336
+ react_exports.useEffect(() => cleanupMarker, []);
337
+ return /* @__PURE__ */ react_exports.createElement("div", { style: { visibility: isChoroplethTooltip() ? "hidden" : "visible" } }, /* @__PURE__ */ react_exports.createElement(
338
+ "div",
339
+ __spreadValues({
340
+ style: { visibility: isChoroplethTooltip() ? "hidden" : "visible" },
341
+ ref: container,
342
+ "data-test": "map-marker",
343
+ onMouseOver: openTooltip,
344
+ onMouseLeave: closeTooltip,
345
+ onFocus: openTooltip,
346
+ onBlur: closeTooltip
347
+ }, otherProps),
348
+ children
349
+ ), /* @__PURE__ */ react_exports.createElement("div", null, /* @__PURE__ */ react_exports.createElement(
350
+ Tooltip_default,
351
+ {
352
+ open: isChoroplethTooltip() ? isChoroplethTooltipOpen : isTooltipOpen,
353
+ anchor: container.current,
354
+ latitude: isChoroplethTooltip() ? null : latitude,
355
+ longitude: isChoroplethTooltip() ? null : longitude,
356
+ areaId,
357
+ areaValue,
358
+ additionalFields
1209
359
  }
1210
- }, React.createElement("div", Object.assign({
1211
- style: {
1212
- visibility: isChoroplethTooltip() ? 'hidden' : 'visible'
1213
- },
1214
- ref: container,
1215
- "data-test": "map-marker",
1216
- onMouseOver: openTooltip,
1217
- onMouseLeave: closeTooltip,
1218
- onFocus: openTooltip,
1219
- onBlur: closeTooltip
1220
- }, otherProps), children), React.createElement("div", null, React.createElement(Tooltip_1.default, {
1221
- open: isChoroplethTooltip() ? isChoroplethTooltipOpen : isTooltipOpen,
1222
- anchor: container.current,
1223
- latitude: isChoroplethTooltip() ? null : latitude,
1224
- longitude: isChoroplethTooltip() ? null : longitude,
1225
- areaId: areaId,
1226
- areaValue: areaValue,
1227
- additionalFields: additionalFields
1228
- })));
360
+ )));
1229
361
  };
1230
-
1231
- exports.default = MarkerWrapper;
1232
-
1233
- /***/ }),
1234
- /* 50 */
1235
- /***/ (function(module, exports) {
1236
-
1237
- module.exports = require("maplibre-gl");
1238
-
1239
- /***/ }),
1240
- /* 51 */
1241
- /***/ (function(module, exports, __webpack_require__) {
1242
-
1243
- "use strict";
1244
-
1245
-
1246
- var _taggedTemplateLiteral = __webpack_require__(11);
1247
-
1248
- var _templateObject;
1249
-
1250
- Object.defineProperty(exports, "__esModule", {
1251
- value: true
1252
- });
1253
- exports.convertDegToDMS = void 0;
1254
-
1255
- var React = __webpack_require__(4);
1256
-
1257
- var styled_components_1 = __webpack_require__(12);
1258
-
1259
- var Popover_1 = __webpack_require__(52);
1260
-
1261
- var i18n_1 = __webpack_require__(53);
1262
-
1263
- var StyledPopover = (0, styled_components_1.default)(Popover_1.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: 250px;\n font-size: 12px;\n"])));
1264
- var StyledTable = styled_components_1.default.table.withConfig({
1265
- displayName: "Tooltip__StyledTable",
1266
- componentId: "sc-xwewsa-0"
1267
- })(["margin:2px 6px 2px 6px;width:calc(100% - 12px);"]);
1268
- var StyledTitleColumn = styled_components_1.default.td.withConfig({
1269
- displayName: "Tooltip__StyledTitleColumn",
1270
- componentId: "sc-xwewsa-1"
1271
- })(["opacity:0.85;"]);
1272
- var StyledValueColumn = styled_components_1.default.td.withConfig({
1273
- displayName: "Tooltip__StyledValueColumn",
1274
- componentId: "sc-xwewsa-2"
1275
- })(["text-align:right;"]);
1276
- var StyledColorBlock = styled_components_1.default.div.withConfig({
1277
- displayName: "Tooltip__StyledColorBlock",
1278
- componentId: "sc-xwewsa-3"
1279
- })(["background-color:", ";display:inline-block;margin-right:4px;border-radius:2px;width:6px;height:11px;transform:translateY(1px);"], function (props) {
1280
- return props.color;
1281
- });
1282
-
1283
- var convertDegToDMS = function convertDegToDMS(decimalDegree, type) {
1284
- var truncate = function truncate(n) {
1285
- return n > 0 ? Math.floor(n) : Math.ceil(n);
1286
- };
1287
-
1288
- var absoluteDegree = Math.abs(decimalDegree);
1289
- var degrees = truncate(absoluteDegree);
1290
- var minutes = truncate((absoluteDegree - degrees) * 60);
1291
- var seconds = Math.round((absoluteDegree - degrees - minutes / 60) * 3600);
1292
-
1293
- if (seconds === 60) {
1294
- minutes += 1;
1295
- seconds = 0;
362
+ var MarkerWrapper_default = MarkerWrapper;
363
+
364
+ // src/Map/PureMap/BubbleLayer.tsx
365
+ var GEO_LAT_AND_LONG_FIELD = ["_geo_long_field", "_geo_lat_field"];
366
+ var PieSegment = react_exports.memo(
367
+ ({
368
+ start,
369
+ end,
370
+ radius,
371
+ color,
372
+ themeColor,
373
+ segmentMetadata,
374
+ handleBubbleClick
375
+ }) => {
376
+ const { name, value } = segmentMetadata != null ? segmentMetadata : {};
377
+ const handleSegmentClick = react_exports.useCallback(
378
+ (e) => {
379
+ handleBubbleClick(e, name, value);
380
+ },
381
+ [name, value, handleBubbleClick]
382
+ );
383
+ if (end - start === 1) {
384
+ return /* @__PURE__ */ react_exports.createElement(
385
+ "circle",
386
+ {
387
+ onClick: handleSegmentClick,
388
+ cx: radius,
389
+ cy: radius,
390
+ r: radius,
391
+ fill: color,
392
+ fillOpacity: 0.5,
393
+ strokeWidth: 1.5,
394
+ stroke: color
395
+ }
396
+ );
397
+ }
398
+ const a0 = 2 * Math.PI * (start - 0.25);
399
+ const a1 = 2 * Math.PI * (end - 0.25);
400
+ const x0 = Math.cos(a0);
401
+ const y0 = Math.sin(a0);
402
+ const x1 = Math.cos(a1);
403
+ const y1 = Math.sin(a1);
404
+ const arc = end - start > 0.5 ? 1 : 0;
405
+ return /* @__PURE__ */ react_exports.createElement(
406
+ "path",
407
+ {
408
+ onClick: handleSegmentClick,
409
+ d: `M ${radius} ${radius} L ${radius + radius * x0} ${radius + radius * y0} A ${radius} ${radius} 0 ${arc} 1 ${radius + radius * x1} ${radius + radius * y1} L ${radius} ${radius} A 0 0 0 ${arc} 0 ${radius} ${radius}`,
410
+ fill: color,
411
+ fillOpacity: 0.8,
412
+ stroke: themeColor,
413
+ strokeWidth: 2,
414
+ strokeOpacity: 0.3
415
+ }
416
+ );
1296
417
  }
1297
-
1298
- if (minutes === 60) {
1299
- degrees += 1;
1300
- minutes = 0;
418
+ );
419
+ PieSegment.displayName = "MapBubblePieSegment";
420
+ var StyledMarkerWrapper = styled_components_default(MarkerWrapper_default)`
421
+ cursor: pointer;
422
+ `;
423
+ var Bubble = react_exports.memo(
424
+ ({
425
+ originalValues,
426
+ valueRange,
427
+ colors,
428
+ themeColor,
429
+ isPie,
430
+ latitude,
431
+ longitude,
432
+ bubbleSize,
433
+ additionalFields = [],
434
+ map,
435
+ handleMapClick
436
+ }) => {
437
+ const onBubbleClick = react_exports.useCallback(
438
+ (e, name, value) => {
439
+ handleMapClick(e, name, value);
440
+ e.stopPropagation();
441
+ },
442
+ [handleMapClick]
443
+ );
444
+ const bubble = react_exports.useMemo(() => {
445
+ const allZeros = originalValues.every((v) => v === 0);
446
+ if (allZeros || !originalValues.length) {
447
+ return null;
448
+ }
449
+ const values = originalValues.map((v) => v > 0 ? v : 0);
450
+ const offsets = [];
451
+ let total = 0;
452
+ values.forEach((count) => {
453
+ offsets.push(total);
454
+ total += count;
455
+ });
456
+ const radius = matchBubbleSize(valueRange, total);
457
+ const width = radius * 2;
458
+ return /* @__PURE__ */ react_exports.createElement("svg", { width, height: width, viewBox: `-3 -3 ${width + 6} ${width + 6}` }, isPie ? /* @__PURE__ */ react_exports.createElement(
459
+ "circle",
460
+ {
461
+ cx: radius,
462
+ cy: radius,
463
+ r: radius,
464
+ fill: "none",
465
+ strokeWidth: 2,
466
+ stroke: themeColor,
467
+ strokeOpacity: 0.3
468
+ }
469
+ ) : null, values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
470
+ PieSegment,
471
+ {
472
+ key: String(i),
473
+ start: offsets[i] / total,
474
+ end: (offsets[i] + v) / total,
475
+ radius,
476
+ color: colors[i],
477
+ themeColor,
478
+ segmentMetadata: bubbleSize[i],
479
+ handleBubbleClick: onBubbleClick
480
+ }
481
+ )));
482
+ }, [bubbleSize, colors, isPie, onBubbleClick, originalValues, themeColor, valueRange]);
483
+ if (!bubble) {
484
+ return null;
485
+ }
486
+ return /* @__PURE__ */ react_exports.createElement(
487
+ StyledMarkerWrapper,
488
+ {
489
+ longitude,
490
+ latitude,
491
+ additionalFields: [...bubbleSize, ...additionalFields],
492
+ map,
493
+ "data-test-type": "bubble"
494
+ },
495
+ bubble
496
+ );
1301
497
  }
498
+ );
499
+ Bubble.displayName = "MapBubble";
1302
500
 
1303
- var direction;
1304
-
1305
- if (type === 'longitude') {
1306
- direction = decimalDegree < 0 ? 'W' : 'E';
1307
- } else if (type === 'latitude') {
1308
- direction = decimalDegree < 0 ? 'S' : 'N';
501
+ // src/common/utils/mapUtils.ts
502
+ var columnsNullToZeros = (config, dataSources, options) => {
503
+ var _a, _b;
504
+ const { primary } = dataSources;
505
+ const { columns, fields } = primary.data;
506
+ let newColumns = columns;
507
+ const mergedOptions = (0, hocUtils_exports.deepMergeWithArrayPrimitiveOverrides)(
508
+ {},
509
+ options,
510
+ (0, JSONSchemaUtils_exports.pickFieldFromJSONSchema)(config.optionsSchema, "default")
511
+ );
512
+ if (((_b = (_a = mergedOptions.layers) == null ? void 0 : _a[0]) == null ? void 0 : _b.type) === "bubble") {
513
+ const latitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].latitude, dataSources)[0] || "";
514
+ const longitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].longitude, dataSources)[0] || "";
515
+ const excludedFields = [latitudeField, longitudeField, "geobin"].concat(GEO_LAT_AND_LONG_FIELD);
516
+ const indicesToEvaluate = new Set(
517
+ fields.reduce((arr, e, i) => {
518
+ const field = typeof e === "string" ? e : e.name.toString();
519
+ if (!excludedFields.includes(field)) {
520
+ arr.push(i);
521
+ }
522
+ return arr;
523
+ }, [])
524
+ );
525
+ newColumns = columns.map((column, i) => {
526
+ if (indicesToEvaluate.has(i)) {
527
+ return column.map((value) => !value || !(0, types_exports.isNumber)(value) ? 0 : +value);
528
+ }
529
+ return column;
530
+ });
1309
531
  }
1310
-
1311
- return "".concat(degrees, "\xB0 ").concat(minutes, "' ").concat(seconds, "\" ").concat(direction);
1312
- };
1313
-
1314
- exports.convertDegToDMS = convertDegToDMS; // only want latitude/longitude for marker and bubble
1315
- // omit for choropleth, and put areaid, areavalue instead
1316
-
1317
- var Tooltip = function Tooltip(_ref) {
1318
- var open = _ref.open,
1319
- anchor = _ref.anchor,
1320
- latitude = _ref.latitude,
1321
- longitude = _ref.longitude,
1322
- areaId = _ref.areaId,
1323
- areaValue = _ref.areaValue,
1324
- _ref$additionalFields = _ref.additionalFields,
1325
- additionalFields = _ref$additionalFields === void 0 ? [] : _ref$additionalFields;
1326
- return React.createElement(StyledPopover, {
1327
- open: open,
1328
- animation: false,
1329
- anchor: anchor,
1330
- "data-test": "map-marker-tooltip",
1331
- defaultPlacement: "above"
1332
- }, React.createElement(StyledTable, null, React.createElement("tbody", null, areaId && areaValue && React.createElement("tr", null, React.createElement(StyledTitleColumn, {
1333
- "data-test": "area-id"
1334
- }, areaId), React.createElement(StyledValueColumn, {
1335
- "data-test": "area-value"
1336
- }, areaValue)), latitude && React.createElement("tr", null, React.createElement(StyledTitleColumn, null, (0, i18n_1._)('Latitude')), React.createElement(StyledValueColumn, {
1337
- "data-test": "latitude"
1338
- }, (0, exports.convertDegToDMS)(latitude, 'latitude'))), longitude && React.createElement("tr", null, React.createElement(StyledTitleColumn, null, (0, i18n_1._)('Longitude')), React.createElement(StyledValueColumn, {
1339
- "data-test": "longitude"
1340
- }, (0, exports.convertDegToDMS)(longitude, 'longitude'))), additionalFields.filter(function (_ref2) {
1341
- var value = _ref2.value;
1342
- return value && String(value) !== '0';
1343
- }).map(function (_ref3, index) {
1344
- var name = _ref3.name,
1345
- value = _ref3.value,
1346
- color = _ref3.color;
1347
- return React.createElement("tr", {
1348
- key: String(index)
1349
- }, React.createElement(StyledTitleColumn, {
1350
- "data-test": "field-title"
1351
- }, color ? React.createElement(StyledColorBlock, {
1352
- "data-test": "field-color",
1353
- color: color
1354
- }) : null, name), React.createElement(StyledValueColumn, {
1355
- "data-test": "field-value"
1356
- }, value));
1357
- }))));
532
+ const modifiedDatasources = __spreadProps(__spreadValues({}, dataSources), {
533
+ primary: __spreadProps(__spreadValues({}, primary), {
534
+ data: __spreadProps(__spreadValues({}, primary.data), {
535
+ columns: newColumns
536
+ })
537
+ })
538
+ });
539
+ return modifiedDatasources;
1358
540
  };
1359
-
1360
- exports.default = Tooltip;
1361
-
1362
- /***/ }),
1363
- /* 52 */
1364
- /***/ (function(module, exports) {
1365
-
1366
- module.exports = require("@splunk/react-ui/Popover");
1367
-
1368
- /***/ }),
1369
- /* 53 */
1370
- /***/ (function(module, exports) {
1371
-
1372
- module.exports = require("@splunk/ui-utils/i18n");
1373
-
1374
- /***/ })
1375
- /******/ ]);
1376
- //# sourceMappingURL=mapUtils.js.map
541
+ //# sourceMappingURL=mapUtils.js.map