@splunk/visualizations 27.3.0 → 27.5.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 (81) hide show
  1. package/Area.config.js +24 -3
  2. package/Area.config.js.map +2 -2
  3. package/Area.js +53 -9
  4. package/Area.js.map +2 -2
  5. package/Bar.config.js +24 -3
  6. package/Bar.config.js.map +3 -3
  7. package/Bar.js +54 -11
  8. package/Bar.js.map +3 -3
  9. package/Bubble.config.js +8 -1
  10. package/Bubble.config.js.map +2 -2
  11. package/Bubble.js +17 -6
  12. package/Bubble.js.map +2 -2
  13. package/CHANGELOG.external.md +1629 -0
  14. package/ChoroplethSvg.js +2 -2
  15. package/Column.config.js +24 -3
  16. package/Column.config.js.map +3 -3
  17. package/Column.js +53 -9
  18. package/Column.js.map +3 -3
  19. package/Ellipse.js +65 -7
  20. package/Ellipse.js.map +4 -4
  21. package/Events.js +11 -6
  22. package/Events.js.map +2 -2
  23. package/FEATUREFLAGS.md +2 -0
  24. package/FillerGauge.config.js +8 -28
  25. package/FillerGauge.config.js.map +2 -2
  26. package/FillerGauge.js +10 -30
  27. package/FillerGauge.js.map +2 -2
  28. package/Image.js +2 -2
  29. package/Line.config.js +24 -3
  30. package/Line.config.js.map +3 -3
  31. package/Line.js +53 -9
  32. package/Line.js.map +3 -3
  33. package/LinkGraph.js +2 -2
  34. package/Map.config.js +22 -0
  35. package/Map.config.js.map +2 -2
  36. package/Map.js +284 -121
  37. package/Map.js.map +4 -4
  38. package/Markdown.js +2 -2
  39. package/MarkerGauge.config.js +8 -25
  40. package/MarkerGauge.config.js.map +2 -2
  41. package/MarkerGauge.js +10 -27
  42. package/MarkerGauge.js.map +2 -2
  43. package/ParallelCoordinates.js +2 -2
  44. package/ParallelCoordinates.js.map +1 -1
  45. package/Pie.config.js +123 -3
  46. package/Pie.config.js.map +3 -3
  47. package/Pie.js +743 -19
  48. package/Pie.js.map +4 -4
  49. package/Punchcard.js +2 -2
  50. package/Punchcard.js.map +1 -1
  51. package/Rectangle.js +64 -7
  52. package/Rectangle.js.map +4 -4
  53. package/Sankey.js +36 -35
  54. package/Sankey.js.map +3 -3
  55. package/Scatter.config.js +320 -113
  56. package/Scatter.config.js.map +4 -4
  57. package/Scatter.js +936 -128
  58. package/Scatter.js.map +4 -4
  59. package/SingleValue.js +3 -3
  60. package/SingleValue.js.map +2 -2
  61. package/SingleValueBasic.js.map +1 -1
  62. package/SingleValueIcon.js +3 -3
  63. package/SingleValueIcon.js.map +2 -2
  64. package/SingleValueRadial.js +3 -3
  65. package/SingleValueRadial.js.map +2 -2
  66. package/TRELLIS.md +12 -3
  67. package/Table.js +2 -2
  68. package/Timeline.js +81 -63
  69. package/Timeline.js.map +4 -4
  70. package/common/Charting.js +7 -3
  71. package/common/Charting.js.map +2 -2
  72. package/common/chartingUtils.js +11 -0
  73. package/common/chartingUtils.js.map +2 -2
  74. package/common/shapeUtils.js +85 -3
  75. package/common/shapeUtils.js.map +4 -4
  76. package/common/utils/mapUtils.js +169 -48
  77. package/common/utils/mapUtils.js.map +4 -4
  78. package/common/utils/singleValueUtils.js +1 -1
  79. package/common/utils/singleValueUtils.js.map +2 -2
  80. package/common/withDashboardViz.js +2 -2
  81. package/package.json +18 -18
@@ -129,50 +129,77 @@ var defaultImport7 = __toESM(require("lodash"));
129
129
  __reExport(lodash_exports, require("lodash"));
130
130
  var lodash_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
131
131
 
132
+ // esm-externals:@splunk/visualizations-shared/iconUtils
133
+ var iconUtils_exports = {};
134
+ __export(iconUtils_exports, {
135
+ default: () => iconUtils_default
136
+ });
137
+ var defaultImport8 = __toESM(require("@splunk/visualizations-shared/iconUtils"));
138
+ __reExport(iconUtils_exports, require("@splunk/visualizations-shared/iconUtils"));
139
+ var iconUtils_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
140
+
132
141
  // esm-externals:@splunk/visualizations-shared/colorUtils
133
142
  var colorUtils_exports = {};
134
143
  __export(colorUtils_exports, {
135
144
  default: () => colorUtils_default
136
145
  });
137
- var defaultImport8 = __toESM(require("@splunk/visualizations-shared/colorUtils"));
146
+ var defaultImport9 = __toESM(require("@splunk/visualizations-shared/colorUtils"));
138
147
  __reExport(colorUtils_exports, require("@splunk/visualizations-shared/colorUtils"));
139
- var colorUtils_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
148
+ var colorUtils_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
149
+
150
+ // esm-externals:@splunk/visualizations-shared/RemoteIcon
151
+ var RemoteIcon_exports = {};
152
+ __export(RemoteIcon_exports, {
153
+ default: () => RemoteIcon_default
154
+ });
155
+ var defaultImport10 = __toESM(require("@splunk/visualizations-shared/RemoteIcon"));
156
+ __reExport(RemoteIcon_exports, require("@splunk/visualizations-shared/RemoteIcon"));
157
+ var RemoteIcon_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
158
+
159
+ // esm-externals:@splunk/visualization-context/FeatureFlagContext
160
+ var FeatureFlagContext_exports = {};
161
+ __export(FeatureFlagContext_exports, {
162
+ default: () => FeatureFlagContext_default
163
+ });
164
+ var defaultImport11 = __toESM(require("@splunk/visualization-context/FeatureFlagContext"));
165
+ __reExport(FeatureFlagContext_exports, require("@splunk/visualization-context/FeatureFlagContext"));
166
+ var FeatureFlagContext_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
140
167
 
141
168
  // esm-externals:d3-scale
142
169
  var d3_scale_exports = {};
143
170
  __export(d3_scale_exports, {
144
171
  default: () => d3_scale_default
145
172
  });
146
- var defaultImport9 = __toESM(require("d3-scale"));
173
+ var defaultImport12 = __toESM(require("d3-scale"));
147
174
  __reExport(d3_scale_exports, require("d3-scale"));
148
- var d3_scale_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
175
+ var d3_scale_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
149
176
 
150
177
  // esm-externals:chroma-js
151
178
  var chroma_js_exports = {};
152
179
  __export(chroma_js_exports, {
153
180
  default: () => chroma_js_default
154
181
  });
155
- var defaultImport10 = __toESM(require("chroma-js"));
182
+ var defaultImport13 = __toESM(require("chroma-js"));
156
183
  __reExport(chroma_js_exports, require("chroma-js"));
157
- var chroma_js_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
184
+ var chroma_js_default = "default" in defaultImport13 ? defaultImport13.default : defaultImport13;
158
185
 
159
186
  // esm-externals:@splunk/visualization-color-palettes
160
187
  var visualization_color_palettes_exports = {};
161
188
  __export(visualization_color_palettes_exports, {
162
189
  default: () => visualization_color_palettes_default
163
190
  });
164
- var defaultImport11 = __toESM(require("@splunk/visualization-color-palettes"));
191
+ var defaultImport14 = __toESM(require("@splunk/visualization-color-palettes"));
165
192
  __reExport(visualization_color_palettes_exports, require("@splunk/visualization-color-palettes"));
166
- var visualization_color_palettes_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
193
+ var visualization_color_palettes_default = "default" in defaultImport14 ? defaultImport14.default : defaultImport14;
167
194
 
168
195
  // esm-externals:@splunk/visualization-schemas
169
196
  var visualization_schemas_exports = {};
170
197
  __export(visualization_schemas_exports, {
171
198
  default: () => visualization_schemas_default
172
199
  });
173
- var defaultImport12 = __toESM(require("@splunk/visualization-schemas"));
200
+ var defaultImport15 = __toESM(require("@splunk/visualization-schemas"));
174
201
  __reExport(visualization_schemas_exports, require("@splunk/visualization-schemas"));
175
- var visualization_schemas_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
202
+ var visualization_schemas_default = "default" in defaultImport15 ? defaultImport15.default : defaultImport15;
176
203
 
177
204
  // src/Map/PureMap/MapUtils.ts
178
205
  var MIN_BUBBLE_RADIUS = 7.11;
@@ -195,27 +222,36 @@ var maplibre_gl_exports = {};
195
222
  __export(maplibre_gl_exports, {
196
223
  default: () => maplibre_gl_default
197
224
  });
198
- var defaultImport13 = __toESM(require("maplibre-gl"));
225
+ var defaultImport16 = __toESM(require("maplibre-gl"));
199
226
  __reExport(maplibre_gl_exports, require("maplibre-gl"));
200
- var maplibre_gl_default = "default" in defaultImport13 ? defaultImport13.default : defaultImport13;
227
+ var maplibre_gl_default = "default" in defaultImport16 ? defaultImport16.default : defaultImport16;
201
228
 
202
229
  // esm-externals:@splunk/react-ui/Popover
203
230
  var Popover_exports = {};
204
231
  __export(Popover_exports, {
205
232
  default: () => Popover_default
206
233
  });
207
- var defaultImport14 = __toESM(require("@splunk/react-ui/Popover"));
234
+ var defaultImport17 = __toESM(require("@splunk/react-ui/Popover"));
208
235
  __reExport(Popover_exports, require("@splunk/react-ui/Popover"));
209
- var Popover_default = "default" in defaultImport14 ? defaultImport14.default : defaultImport14;
236
+ var Popover_default = "default" in defaultImport17 ? defaultImport17.default : defaultImport17;
210
237
 
211
238
  // esm-externals:@splunk/ui-utils/i18n
212
239
  var i18n_exports = {};
213
240
  __export(i18n_exports, {
214
241
  default: () => i18n_default
215
242
  });
216
- var defaultImport15 = __toESM(require("@splunk/ui-utils/i18n"));
243
+ var defaultImport18 = __toESM(require("@splunk/ui-utils/i18n"));
217
244
  __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
218
- var i18n_default = "default" in defaultImport15 ? defaultImport15.default : defaultImport15;
245
+ var i18n_default = "default" in defaultImport18 ? defaultImport18.default : defaultImport18;
246
+
247
+ // esm-externals:@splunk/themes
248
+ var themes_exports = {};
249
+ __export(themes_exports, {
250
+ default: () => themes_default
251
+ });
252
+ var defaultImport19 = __toESM(require("@splunk/themes"));
253
+ __reExport(themes_exports, require("@splunk/themes"));
254
+ var themes_default = "default" in defaultImport19 ? defaultImport19.default : defaultImport19;
219
255
 
220
256
  // src/Map/PureMap/Tooltip.tsx
221
257
  var StyledPopover = styled_components_default(Popover_default)`
@@ -224,6 +260,7 @@ var StyledPopover = styled_components_default(Popover_default)`
224
260
  `;
225
261
  var StyledTable = styled_components_default.table`
226
262
  margin: 2px 6px 2px 6px;
263
+ table-layout: fixed;
227
264
  width: calc(100% - 12px);
228
265
  `;
229
266
  var StyledTitleColumn = styled_components_default.td`
@@ -241,6 +278,30 @@ var StyledColorBlock = styled_components_default.div`
241
278
  height: 11px;
242
279
  transform: translateY(1px);
243
280
  `;
281
+ var StyledFieldLabel = styled_components_default.span`
282
+ display: inline-block;
283
+ white-space: nowrap;
284
+ `;
285
+ var StyledIconWrapper = styled_components_default.span`
286
+ margin-left: 4px;
287
+ display: inline-block;
288
+ vertical-align: middle;
289
+ `;
290
+ var StyledTooltipHeader = styled_components_default.thead`
291
+ th {
292
+ height: 16px;
293
+ color: ${themes_exports.variables.contentColorActive};
294
+ padding: 0;
295
+ }
296
+
297
+ span {
298
+ display: block;
299
+ white-space: nowrap;
300
+ overflow: hidden;
301
+ text-overflow: ellipsis;
302
+ width: 100%;
303
+ }
304
+ `;
244
305
  var convertDegToDMS = (decimalDegree, type) => {
245
306
  const truncate = (n) => n > 0 ? Math.floor(n) : Math.ceil(n);
246
307
  const absoluteDegree = Math.abs(decimalDegree);
@@ -270,18 +331,26 @@ var Tooltip = ({
270
331
  longitude,
271
332
  areaId,
272
333
  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
- );
334
+ additionalFields = [],
335
+ showCoordinates = true,
336
+ tooltipHeader = null
337
+ }) => {
338
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
339
+ const isTooltipIconFlagEnabled = Boolean(
340
+ featureFlagContext && featureFlagContext.visualizations_enableTooltipIcon
341
+ );
342
+ return /* @__PURE__ */ react_exports.createElement(
343
+ StyledPopover,
344
+ {
345
+ open,
346
+ animation: false,
347
+ anchor,
348
+ "data-test": "map-marker-tooltip",
349
+ defaultPlacement: "above"
350
+ },
351
+ /* @__PURE__ */ react_exports.createElement(StyledTable, null, tooltipHeader && /* @__PURE__ */ react_exports.createElement(StyledTooltipHeader, { "data-test": "tooltip-header" }, /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement("th", { colSpan: 2 }, /* @__PURE__ */ react_exports.createElement("span", { "data-test": "tooltip-header-value" }, tooltipHeader)))), /* @__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)), Boolean(showCoordinates && 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"))), Boolean(showCoordinates && 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, icon }, 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, /* @__PURE__ */ react_exports.createElement(StyledFieldLabel, null, name, isTooltipIconFlagEnabled && icon && ((0, iconUtils_exports.isRemoteIcon)(icon) || (0, iconUtils_exports.isDataURI)(icon)) ? /* @__PURE__ */ react_exports.createElement(StyledIconWrapper, { "data-test": "field-icon" }, /* @__PURE__ */ react_exports.createElement(RemoteIcon_default, { iconURL: icon, width: 16, height: 16 })) : null)), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "field-value" }, value)))))
352
+ );
353
+ };
285
354
  var Tooltip_default = Tooltip;
286
355
 
287
356
  // src/Map/PureMap/MarkerWrapper.tsx
@@ -292,18 +361,22 @@ var MarkerWrapper = (_a) => {
292
361
  areaId,
293
362
  areaValue,
294
363
  additionalFields = [],
364
+ tooltipHeader = null,
295
365
  map,
296
366
  isChoroplethTooltipOpen,
297
- children
367
+ children,
368
+ showCoordinates = true
298
369
  } = _b, otherProps = __objRest(_b, [
299
370
  "longitude",
300
371
  "latitude",
301
372
  "areaId",
302
373
  "areaValue",
303
374
  "additionalFields",
375
+ "tooltipHeader",
304
376
  "map",
305
377
  "isChoroplethTooltipOpen",
306
- "children"
378
+ "children",
379
+ "showCoordinates"
307
380
  ]);
308
381
  const container = react_exports.useRef();
309
382
  const marker = react_exports.useRef();
@@ -334,6 +407,8 @@ var MarkerWrapper = (_a) => {
334
407
  }
335
408
  }, [latitude, longitude, map]);
336
409
  react_exports.useEffect(() => cleanupMarker, []);
410
+ const filteredAdditionalFields = additionalFields.filter(({ value }) => value && String(value) !== "0");
411
+ const showTooltip = showCoordinates || filteredAdditionalFields.length || areaId && areaValue;
337
412
  return /* @__PURE__ */ react_exports.createElement("div", { style: { visibility: isChoroplethTooltip() ? "hidden" : "visible" } }, /* @__PURE__ */ react_exports.createElement(
338
413
  "div",
339
414
  __spreadValues({
@@ -346,7 +421,7 @@ var MarkerWrapper = (_a) => {
346
421
  onBlur: closeTooltip
347
422
  }, otherProps),
348
423
  children
349
- ), /* @__PURE__ */ react_exports.createElement("div", null, /* @__PURE__ */ react_exports.createElement(
424
+ ), /* @__PURE__ */ react_exports.createElement("div", null, showTooltip && /* @__PURE__ */ react_exports.createElement(
350
425
  Tooltip_default,
351
426
  {
352
427
  open: isChoroplethTooltip() ? isChoroplethTooltipOpen : isTooltipOpen,
@@ -355,7 +430,9 @@ var MarkerWrapper = (_a) => {
355
430
  longitude: isChoroplethTooltip() ? null : longitude,
356
431
  areaId,
357
432
  areaValue,
358
- additionalFields
433
+ additionalFields,
434
+ showCoordinates,
435
+ tooltipHeader
359
436
  }
360
437
  )));
361
438
  };
@@ -363,6 +440,7 @@ var MarkerWrapper_default = MarkerWrapper;
363
440
 
364
441
  // src/Map/PureMap/BubbleLayer.tsx
365
442
  var GEO_LAT_AND_LONG_FIELD = ["_geo_long_field", "_geo_lat_field"];
443
+ var ICON_DISPLAY_CUTOFF = 16;
366
444
  var PieSegment = react_exports.memo(
367
445
  ({
368
446
  start,
@@ -431,9 +509,16 @@ var Bubble = react_exports.memo(
431
509
  longitude,
432
510
  bubbleSize,
433
511
  additionalFields = [],
512
+ tooltipHeader = null,
434
513
  map,
435
- handleMapClick
514
+ handleMapClick,
515
+ icon,
516
+ showCoordinates
436
517
  }) => {
518
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
519
+ const isBubbleMapIconFlagEnabled = Boolean(
520
+ featureFlagContext && featureFlagContext.visualizations_enableBubbleMapIcon
521
+ );
437
522
  const onBubbleClick = react_exports.useCallback(
438
523
  (e, name, value) => {
439
524
  handleMapClick(e, name, value);
@@ -441,21 +526,20 @@ var Bubble = react_exports.memo(
441
526
  },
442
527
  [handleMapClick]
443
528
  );
529
+ const allZeros = originalValues.every((v) => v === 0);
530
+ const values = originalValues.map((v) => v > 0 ? v : 0);
531
+ const total = values.reduce((totalValue, v) => totalValue + v, 0);
532
+ const radius = matchBubbleSize(valueRange, total);
444
533
  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);
534
+ if (allZeros || !originalValues.length) return null;
450
535
  const offsets = [];
451
- let total = 0;
536
+ let runningTotal = 0;
452
537
  values.forEach((count) => {
453
- offsets.push(total);
454
- total += count;
538
+ offsets.push(runningTotal);
539
+ runningTotal += count;
455
540
  });
456
- const radius = matchBubbleSize(valueRange, total);
457
541
  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(
542
+ return /* @__PURE__ */ react_exports.createElement("svg", { width, height: width, viewBox: `-3 -3 ${width + 6} ${width + 6}` }, isPie && /* @__PURE__ */ react_exports.createElement(
459
543
  "circle",
460
544
  {
461
545
  cx: radius,
@@ -466,7 +550,7 @@ var Bubble = react_exports.memo(
466
550
  stroke: themeColor,
467
551
  strokeOpacity: 0.3
468
552
  }
469
- ) : null, values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
553
+ ), values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
470
554
  PieSegment,
471
555
  {
472
556
  key: String(i),
@@ -479,7 +563,18 @@ var Bubble = react_exports.memo(
479
563
  handleBubbleClick: onBubbleClick
480
564
  }
481
565
  )));
482
- }, [bubbleSize, colors, isPie, onBubbleClick, originalValues, themeColor, valueRange]);
566
+ }, [
567
+ bubbleSize,
568
+ colors,
569
+ isPie,
570
+ onBubbleClick,
571
+ originalValues,
572
+ themeColor,
573
+ allZeros,
574
+ radius,
575
+ total,
576
+ values
577
+ ]);
483
578
  if (!bubble) {
484
579
  return null;
485
580
  }
@@ -489,10 +584,26 @@ var Bubble = react_exports.memo(
489
584
  longitude,
490
585
  latitude,
491
586
  additionalFields: [...bubbleSize, ...additionalFields],
587
+ tooltipHeader,
492
588
  map,
493
- "data-test-type": "bubble"
589
+ "data-test-type": "bubble",
590
+ showCoordinates
494
591
  },
495
- bubble
592
+ bubble,
593
+ isBubbleMapIconFlagEnabled && radius >= ICON_DISPLAY_CUTOFF && icon && ((0, iconUtils_exports.isRemoteIcon)(icon) || (0, iconUtils_exports.isDataURI)(icon)) && /* @__PURE__ */ react_exports.createElement(
594
+ "div",
595
+ {
596
+ "data-test": "bubble-icon-wrapper",
597
+ style: {
598
+ position: "absolute",
599
+ top: `${radius}px`,
600
+ left: `${radius}px`,
601
+ transform: "translate(-50%, -50%)",
602
+ pointerEvents: "none"
603
+ }
604
+ },
605
+ /* @__PURE__ */ react_exports.createElement(RemoteIcon_default, { iconURL: icon, width: radius * 0.8, height: radius * 0.8 })
606
+ )
496
607
  );
497
608
  }
498
609
  );
@@ -512,7 +623,17 @@ var columnsNullToZeros = (config, dataSources, options) => {
512
623
  if (((_b = (_a = mergedOptions.layers) == null ? void 0 : _a[0]) == null ? void 0 : _b.type) === "bubble") {
513
624
  const latitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].latitude, dataSources)[0] || "";
514
625
  const longitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].longitude, dataSources)[0] || "";
515
- const excludedFields = [latitudeField, longitudeField, "geobin"].concat(GEO_LAT_AND_LONG_FIELD);
626
+ const stringsFields = (0, dsl_exports.getFieldsFromDSL)("> primary | frameBySeriesTypes('string')", dataSources);
627
+ const excludedFields = Array.from(
628
+ /* @__PURE__ */ new Set([
629
+ latitudeField,
630
+ longitudeField,
631
+ "geobin",
632
+ "name",
633
+ ...stringsFields,
634
+ ...GEO_LAT_AND_LONG_FIELD
635
+ ])
636
+ );
516
637
  const indicesToEvaluate = new Set(
517
638
  fields.reduce((arr, e, i) => {
518
639
  const field = typeof e === "string" ? e : e.name.toString();