@splunk/visualizations 27.4.0 → 28.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 (164) hide show
  1. package/Area.config.js +26 -21
  2. package/Area.config.js.map +3 -3
  3. package/Area.js +88 -36
  4. package/Area.js.map +3 -3
  5. package/Bar.config.js +25 -21
  6. package/Bar.config.js.map +3 -3
  7. package/Bar.js +83 -37
  8. package/Bar.js.map +3 -3
  9. package/Bubble.config.js +46 -44
  10. package/Bubble.config.js.map +4 -4
  11. package/Bubble.js +83 -54
  12. package/Bubble.js.map +4 -4
  13. package/CHANGELOG.external.md +54 -7
  14. package/ChoroplethSvg.config.js +47 -43
  15. package/ChoroplethSvg.config.js.map +4 -4
  16. package/ChoroplethSvg.js +72 -45
  17. package/ChoroplethSvg.js.map +4 -4
  18. package/Column.config.js +22 -20
  19. package/Column.config.js.map +3 -3
  20. package/Column.js +76 -33
  21. package/Column.js.map +3 -3
  22. package/Ellipse.config.js +16 -7
  23. package/Ellipse.config.js.map +2 -2
  24. package/Ellipse.js +104 -20
  25. package/Ellipse.js.map +4 -4
  26. package/Events.config.js +38 -27
  27. package/Events.config.js.map +4 -4
  28. package/Events.js +122 -101
  29. package/Events.js.map +4 -4
  30. package/FEATUREFLAGS.md +9 -7
  31. package/FillerGauge.config.js +20 -13
  32. package/FillerGauge.config.js.map +3 -3
  33. package/FillerGauge.js +76 -27
  34. package/FillerGauge.js.map +4 -4
  35. package/Image.config.js +5 -6
  36. package/Image.config.js.map +2 -2
  37. package/Image.js +29 -14
  38. package/Image.js.map +2 -2
  39. package/Line.config.js +22 -20
  40. package/Line.config.js.map +3 -3
  41. package/Line.js +84 -35
  42. package/Line.js.map +3 -3
  43. package/LinkGraph.config.js +39 -46
  44. package/LinkGraph.config.js.map +3 -3
  45. package/LinkGraph.js +70 -50
  46. package/LinkGraph.js.map +3 -3
  47. package/MIGRATION.md +169 -40
  48. package/Map.config.js +47 -13
  49. package/Map.config.js.map +4 -4
  50. package/Map.js +350 -159
  51. package/Map.js.map +4 -4
  52. package/Markdown.config.js +4 -5
  53. package/Markdown.config.js.map +2 -2
  54. package/Markdown.js +117 -72
  55. package/Markdown.js.map +3 -3
  56. package/MarkerGauge.config.js +14 -12
  57. package/MarkerGauge.config.js.map +3 -3
  58. package/MarkerGauge.js +107 -69
  59. package/MarkerGauge.js.map +4 -4
  60. package/ParallelCoordinates.config.js +14 -12
  61. package/ParallelCoordinates.config.js.map +3 -3
  62. package/ParallelCoordinates.js +113 -59
  63. package/ParallelCoordinates.js.map +3 -3
  64. package/Pie.config.js +51 -38
  65. package/Pie.config.js.map +4 -4
  66. package/Pie.js +116 -88
  67. package/Pie.js.map +4 -4
  68. package/Punchcard.config.js +36 -34
  69. package/Punchcard.config.js.map +4 -4
  70. package/Punchcard.js +153 -87
  71. package/Punchcard.js.map +4 -4
  72. package/README.internal.md +15 -15
  73. package/README.md +10 -10
  74. package/Rectangle.config.js +16 -7
  75. package/Rectangle.config.js.map +2 -2
  76. package/Rectangle.js +103 -20
  77. package/Rectangle.js.map +4 -4
  78. package/Sankey.config.js +69 -17
  79. package/Sankey.config.js.map +4 -4
  80. package/Sankey.js +212 -82
  81. package/Sankey.js.map +4 -4
  82. package/Scatter.config.js +44 -42
  83. package/Scatter.config.js.map +3 -3
  84. package/Scatter.js +84 -56
  85. package/Scatter.js.map +3 -3
  86. package/SingleValue.config.js +32 -18
  87. package/SingleValue.config.js.map +4 -4
  88. package/SingleValue.js +238 -94
  89. package/SingleValue.js.map +4 -4
  90. package/SingleValueBasic.js +1 -0
  91. package/SingleValueBasic.js.map +2 -2
  92. package/SingleValueIcon.config.js +22 -11
  93. package/SingleValueIcon.config.js.map +2 -2
  94. package/SingleValueIcon.js +85 -29
  95. package/SingleValueIcon.js.map +2 -2
  96. package/SingleValueRadial.config.js +34 -23
  97. package/SingleValueRadial.config.js.map +3 -3
  98. package/SingleValueRadial.js +90 -49
  99. package/SingleValueRadial.js.map +4 -4
  100. package/SparkLine.js +153 -49
  101. package/SparkLine.js.map +2 -2
  102. package/Table.config.js +71 -51
  103. package/Table.config.js.map +3 -3
  104. package/Table.js +282 -145
  105. package/Table.js.map +3 -3
  106. package/Timeline.config.js +36 -34
  107. package/Timeline.config.js.map +4 -4
  108. package/Timeline.js +67 -59
  109. package/Timeline.js.map +4 -4
  110. package/common/Charting.js +8 -3
  111. package/common/Charting.js.map +2 -2
  112. package/common/ChartingApi.js +1 -0
  113. package/common/ChartingApi.js.map +1 -1
  114. package/common/DocExampleWithVizSandbox.js +7 -2
  115. package/common/DocExampleWithVizSandbox.js.map +2 -2
  116. package/common/EventsDoc.js +31 -5
  117. package/common/EventsDoc.js.map +4 -4
  118. package/common/GaugeMajorTicks.js +4 -1
  119. package/common/GaugeMajorTicks.js.map +2 -2
  120. package/common/GaugeValueMarker.js +31 -3
  121. package/common/GaugeValueMarker.js.map +4 -4
  122. package/common/OptionsDoc.js +4 -1
  123. package/common/OptionsDoc.js.map +2 -2
  124. package/common/OverviewDoc.js +66 -50
  125. package/common/OverviewDoc.js.map +4 -4
  126. package/common/SplunkVisualization.js +1 -0
  127. package/common/SplunkVisualization.js.map +1 -1
  128. package/common/SplunkVisualizationApi.js +1 -0
  129. package/common/SplunkVisualizationApi.js.map +1 -1
  130. package/common/ThemedDefaults.js +67 -0
  131. package/common/ThemedDefaults.js.map +7 -0
  132. package/common/ThemesDoc.js +6 -9
  133. package/common/ThemesDoc.js.map +2 -2
  134. package/common/chartingUtils.js +12 -0
  135. package/common/chartingUtils.js.map +2 -2
  136. package/common/docUtils.js +6 -1
  137. package/common/docUtils.js.map +2 -2
  138. package/common/gaugeUtils.js +6 -1
  139. package/common/gaugeUtils.js.map +2 -2
  140. package/common/shapeUtils.js +87 -3
  141. package/common/shapeUtils.js.map +4 -4
  142. package/common/utils/configUtils.js +4 -5
  143. package/common/utils/configUtils.js.map +2 -2
  144. package/common/utils/dataUtils.js +1 -0
  145. package/common/utils/dataUtils.js.map +2 -2
  146. package/common/utils/featureFlagUtils.js +1 -0
  147. package/common/utils/featureFlagUtils.js.map +1 -1
  148. package/common/utils/hocUtils.js +1 -0
  149. package/common/utils/hocUtils.js.map +1 -1
  150. package/common/utils/mapUtils.js +174 -48
  151. package/common/utils/mapUtils.js.map +4 -4
  152. package/common/utils/singleValueUtils.js +9 -3
  153. package/common/utils/singleValueUtils.js.map +2 -2
  154. package/common/utils/styleUtils.js +1 -0
  155. package/common/utils/styleUtils.js.map +1 -1
  156. package/common/utils/testHelper.js +1 -0
  157. package/common/utils/testHelper.js.map +1 -1
  158. package/common/utils/trellisUtils.js +1 -0
  159. package/common/utils/trellisUtils.js.map +1 -1
  160. package/common/utils/urlUtils.js +1 -0
  161. package/common/utils/urlUtils.js.map +1 -1
  162. package/common/withDashboardViz.js +25 -8
  163. package/common/withDashboardViz.js.map +2 -2
  164. package/package.json +37 -35
package/Map.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /* Copyright © 2020 Splunk Inc.
2
2
  SPLUNK CONFIDENTIAL – Use or disclosure of this material in whole or
3
3
  in part without a valid written license from Splunk Inc. is PROHIBITED. */
4
+ "use strict";
4
5
  var __create = Object.create;
5
6
  var __defProp = Object.defineProperty;
6
7
  var __defProps = Object.defineProperties;
@@ -207,7 +208,9 @@ __reExport(maplibre_gl_exports2, require("maplibre-gl/dist/maplibre-gl.css"));
207
208
  var maplibre_gl_default2 = "default" in defaultImport15 ? defaultImport15.default : defaultImport15;
208
209
 
209
210
  // src/Map/PureMap/PureMapContainer.tsx
210
- var PureMapContainer = styled_components_default.div.attrs({ "data-test": "puremap-container" })`
211
+ var PureMapContainer = styled_components_default.div.attrs({
212
+ "data-test": "puremap-container"
213
+ })`
211
214
  ${maplibre_gl_default2}
212
215
  overflow: hidden;
213
216
  position: relative;
@@ -232,7 +235,9 @@ var PureMapContainer = styled_components_default.div.attrs({ "data-test": "purem
232
235
  border-radius: 4px;
233
236
  margin: 8px 0px;
234
237
  background-color: ${(props) => props.controlBackgroundColor};
235
- box-shadow: 0px 26px 103px rgba(0, 0, 0, 0.64), 0px 11px 18px rgba(0, 0, 0, 0.32),
238
+ box-shadow:
239
+ 0px 26px 103px rgba(0, 0, 0, 0.64),
240
+ 0px 11px 18px rgba(0, 0, 0, 0.32),
236
241
  0px 3px 6px rgba(0, 0, 0, 0.3);
237
242
  & button {
238
243
  width: 40px;
@@ -261,7 +266,9 @@ var PureMapContainer = styled_components_default.div.attrs({ "data-test": "purem
261
266
  border-radius: 4px;
262
267
  margin: 0;
263
268
  background-color: ${(props) => props.controlBackgroundColor};
264
- box-shadow: 0px 26px 103px rgba(0, 0, 0, 0.13), 0px 11px 18px rgba(0, 0, 0, 0.06),
269
+ box-shadow:
270
+ 0px 26px 103px rgba(0, 0, 0, 0.13),
271
+ 0px 11px 18px rgba(0, 0, 0, 0.06),
265
272
  0px 3px 6px rgba(0, 0, 0, 0.06);
266
273
  .maplibregl-ctrl-scale {
267
274
  background-color: ${(props) => props.controlBackgroundColor};
@@ -332,7 +339,11 @@ var getTilePreset = ({
332
339
  const tileConfigs = [].concat(defaultTileConfig).concat(customTileConfig);
333
340
  (0, lodash_exports.forEach)(tileConfigs, (tileConfig) => {
334
341
  const key = tileConfig == null ? void 0 : tileConfig.key;
335
- const updatedConfig = __spreadProps(__spreadValues({ theme: "all" }, tileConfig), { version: MAP_STYLE_VERSION_NUMBER });
342
+ const updatedConfig = __spreadProps(__spreadValues({
343
+ theme: "all"
344
+ }, tileConfig), {
345
+ version: MAP_STYLE_VERSION_NUMBER
346
+ });
336
347
  tilePreset[key] = updatedConfig;
337
348
  });
338
349
  if (defaultTileConfig.length > 0) {
@@ -629,14 +640,59 @@ var formatMetadata = (choroplethLayer, i) => {
629
640
  }, base);
630
641
  };
631
642
 
643
+ // esm-externals:@splunk/visualizations-shared/iconUtils
644
+ var iconUtils_exports = {};
645
+ __export(iconUtils_exports, {
646
+ default: () => iconUtils_default
647
+ });
648
+ var defaultImport19 = __toESM(require("@splunk/visualizations-shared/iconUtils"));
649
+ __reExport(iconUtils_exports, require("@splunk/visualizations-shared/iconUtils"));
650
+ var iconUtils_default = "default" in defaultImport19 ? defaultImport19.default : defaultImport19;
651
+
652
+ // esm-externals:@splunk/visualizations-shared/RemoteIcon
653
+ var RemoteIcon_exports = {};
654
+ __export(RemoteIcon_exports, {
655
+ default: () => RemoteIcon_default
656
+ });
657
+ var defaultImport20 = __toESM(require("@splunk/visualizations-shared/RemoteIcon"));
658
+ __reExport(RemoteIcon_exports, require("@splunk/visualizations-shared/RemoteIcon"));
659
+ var RemoteIcon_default = "default" in defaultImport20 ? defaultImport20.default : defaultImport20;
660
+
661
+ // esm-externals:@splunk/visualization-context/FeatureFlagContext
662
+ var FeatureFlagContext_exports = {};
663
+ __export(FeatureFlagContext_exports, {
664
+ default: () => FeatureFlagContext_default
665
+ });
666
+ var defaultImport21 = __toESM(require("@splunk/visualization-context/FeatureFlagContext"));
667
+ __reExport(FeatureFlagContext_exports, require("@splunk/visualization-context/FeatureFlagContext"));
668
+ var FeatureFlagContext_default = "default" in defaultImport21 ? defaultImport21.default : defaultImport21;
669
+
670
+ // esm-externals:@splunk/ui-utils/id
671
+ var id_exports = {};
672
+ __export(id_exports, {
673
+ default: () => id_default
674
+ });
675
+ var defaultImport22 = __toESM(require("@splunk/ui-utils/id"));
676
+ __reExport(id_exports, require("@splunk/ui-utils/id"));
677
+ var id_default = "default" in defaultImport22 ? defaultImport22.default : defaultImport22;
678
+
632
679
  // esm-externals:@splunk/react-ui/Popover
633
680
  var Popover_exports = {};
634
681
  __export(Popover_exports, {
635
682
  default: () => Popover_default
636
683
  });
637
- var defaultImport19 = __toESM(require("@splunk/react-ui/Popover"));
684
+ var defaultImport23 = __toESM(require("@splunk/react-ui/Popover"));
638
685
  __reExport(Popover_exports, require("@splunk/react-ui/Popover"));
639
- var Popover_default = "default" in defaultImport19 ? defaultImport19.default : defaultImport19;
686
+ var Popover_default = "default" in defaultImport23 ? defaultImport23.default : defaultImport23;
687
+
688
+ // esm-externals:@splunk/themes
689
+ var themes_exports = {};
690
+ __export(themes_exports, {
691
+ default: () => themes_default
692
+ });
693
+ var defaultImport24 = __toESM(require("@splunk/themes"));
694
+ __reExport(themes_exports, require("@splunk/themes"));
695
+ var themes_default = "default" in defaultImport24 ? defaultImport24.default : defaultImport24;
640
696
 
641
697
  // src/Map/PureMap/Tooltip.tsx
642
698
  var StyledPopover = styled_components_default(Popover_default)`
@@ -645,6 +701,7 @@ var StyledPopover = styled_components_default(Popover_default)`
645
701
  `;
646
702
  var StyledTable = styled_components_default.table`
647
703
  margin: 2px 6px 2px 6px;
704
+ table-layout: fixed;
648
705
  width: calc(100% - 12px);
649
706
  `;
650
707
  var StyledTitleColumn = styled_components_default.td`
@@ -662,6 +719,30 @@ var StyledColorBlock = styled_components_default.div`
662
719
  height: 11px;
663
720
  transform: translateY(1px);
664
721
  `;
722
+ var StyledFieldLabel = styled_components_default.span`
723
+ display: inline-block;
724
+ white-space: nowrap;
725
+ `;
726
+ var StyledIconWrapper = styled_components_default.span`
727
+ margin-left: 4px;
728
+ display: inline-block;
729
+ vertical-align: middle;
730
+ `;
731
+ var StyledTooltipHeader = styled_components_default.thead`
732
+ th {
733
+ height: 16px;
734
+ color: ${themes_exports.variables.contentColorActive};
735
+ padding: 0;
736
+ }
737
+
738
+ span {
739
+ display: block;
740
+ white-space: nowrap;
741
+ overflow: hidden;
742
+ text-overflow: ellipsis;
743
+ width: 100%;
744
+ }
745
+ `;
665
746
  var convertDegToDMS = (decimalDegree, type) => {
666
747
  const truncate = (n) => n > 0 ? Math.floor(n) : Math.ceil(n);
667
748
  const absoluteDegree = Math.abs(decimalDegree);
@@ -692,18 +773,25 @@ var Tooltip = ({
692
773
  areaId,
693
774
  areaValue,
694
775
  additionalFields = [],
695
- showCoordinates = true
696
- }) => /* @__PURE__ */ react_exports.createElement(
697
- StyledPopover,
698
- {
699
- open,
700
- animation: false,
701
- anchor,
702
- "data-test": "map-marker-tooltip",
703
- defaultPlacement: "above"
704
- },
705
- /* @__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)), 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 }, 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)))))
706
- );
776
+ showCoordinates = true,
777
+ tooltipHeader = null
778
+ }) => {
779
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
780
+ const isTooltipIconFlagEnabled = Boolean(
781
+ featureFlagContext && featureFlagContext.visualizations_enableTooltipIcon
782
+ );
783
+ return /* @__PURE__ */ react_exports.createElement(
784
+ StyledPopover,
785
+ {
786
+ open,
787
+ animation: false,
788
+ anchor,
789
+ "data-test": "map-marker-tooltip",
790
+ defaultPlacement: "above"
791
+ },
792
+ /* @__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 }) => /* @__PURE__ */ react_exports.createElement("tr", { key: (0, id_exports.createDOMID)() }, /* @__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)))))
793
+ );
794
+ };
707
795
  var Tooltip_default = Tooltip;
708
796
 
709
797
  // src/Map/PureMap/MarkerWrapper.tsx
@@ -714,6 +802,7 @@ var MarkerWrapper = (_a) => {
714
802
  areaId,
715
803
  areaValue,
716
804
  additionalFields = [],
805
+ tooltipHeader = null,
717
806
  map,
718
807
  isChoroplethTooltipOpen,
719
808
  children,
@@ -724,6 +813,7 @@ var MarkerWrapper = (_a) => {
724
813
  "areaId",
725
814
  "areaValue",
726
815
  "additionalFields",
816
+ "tooltipHeader",
727
817
  "map",
728
818
  "isChoroplethTooltipOpen",
729
819
  "children",
@@ -732,9 +822,10 @@ var MarkerWrapper = (_a) => {
732
822
  const container = react_exports.useRef();
733
823
  const marker = react_exports.useRef();
734
824
  const [isTooltipOpen, setTooltipOpenStatus] = react_exports.useState(false);
735
- const isChoroplethTooltip = react_exports.useCallback(() => isChoroplethTooltipOpen !== void 0, [
736
- isChoroplethTooltipOpen
737
- ]);
825
+ const isChoroplethTooltip = react_exports.useCallback(
826
+ () => isChoroplethTooltipOpen !== void 0,
827
+ [isChoroplethTooltipOpen]
828
+ );
738
829
  const openTooltip = react_exports.useCallback(() => setTooltipOpenStatus(true), []);
739
830
  const closeTooltip = react_exports.useCallback(() => setTooltipOpenStatus(false), []);
740
831
  const cleanupMarker = react_exports.useCallback(() => {
@@ -763,7 +854,9 @@ var MarkerWrapper = (_a) => {
763
854
  return /* @__PURE__ */ react_exports.createElement("div", { style: { visibility: isChoroplethTooltip() ? "hidden" : "visible" } }, /* @__PURE__ */ react_exports.createElement(
764
855
  "div",
765
856
  __spreadValues({
766
- style: { visibility: isChoroplethTooltip() ? "hidden" : "visible" },
857
+ style: {
858
+ visibility: isChoroplethTooltip() ? "hidden" : "visible"
859
+ },
767
860
  ref: container,
768
861
  "data-test": "map-marker",
769
862
  onMouseOver: openTooltip,
@@ -782,7 +875,8 @@ var MarkerWrapper = (_a) => {
782
875
  areaId,
783
876
  areaValue,
784
877
  additionalFields,
785
- showCoordinates
878
+ showCoordinates,
879
+ tooltipHeader
786
880
  }
787
881
  )));
788
882
  };
@@ -791,6 +885,7 @@ var MarkerWrapper_default = MarkerWrapper;
791
885
  // src/Map/PureMap/BubbleLayer.tsx
792
886
  var GEO_BOUND_PREFIX = "_geo_bounds_";
793
887
  var GEO_LAT_AND_LONG_FIELD = ["_geo_long_field", "_geo_lat_field"];
888
+ var ICON_DISPLAY_CUTOFF = 16;
794
889
  var PieSegment = react_exports.memo(
795
890
  ({
796
891
  start,
@@ -859,10 +954,16 @@ var Bubble = react_exports.memo(
859
954
  longitude,
860
955
  bubbleSize,
861
956
  additionalFields = [],
957
+ tooltipHeader = null,
862
958
  map,
863
959
  handleMapClick,
960
+ icon,
864
961
  showCoordinates
865
962
  }) => {
963
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
964
+ const isBubbleMapIconFlagEnabled = Boolean(
965
+ featureFlagContext && featureFlagContext.visualizations_enableBubbleMapIcon
966
+ );
866
967
  const onBubbleClick = react_exports.useCallback(
867
968
  (e, name, value) => {
868
969
  handleMapClick(e, name, value);
@@ -870,21 +971,20 @@ var Bubble = react_exports.memo(
870
971
  },
871
972
  [handleMapClick]
872
973
  );
974
+ const allZeros = originalValues.every((v) => v === 0);
975
+ const values = originalValues.map((v) => v > 0 ? v : 0);
976
+ const total = values.reduce((totalValue, v) => totalValue + v, 0);
977
+ const radius = matchBubbleSize(valueRange, total);
873
978
  const bubble = react_exports.useMemo(() => {
874
- const allZeros = originalValues.every((v) => v === 0);
875
- if (allZeros || !originalValues.length) {
876
- return null;
877
- }
878
- const values = originalValues.map((v) => v > 0 ? v : 0);
979
+ if (allZeros || !originalValues.length) return null;
879
980
  const offsets = [];
880
- let total = 0;
981
+ let runningTotal = 0;
881
982
  values.forEach((count) => {
882
- offsets.push(total);
883
- total += count;
983
+ offsets.push(runningTotal);
984
+ runningTotal += count;
884
985
  });
885
- const radius = matchBubbleSize(valueRange, total);
886
986
  const width = radius * 2;
887
- return /* @__PURE__ */ react_exports.createElement("svg", { width, height: width, viewBox: `-3 -3 ${width + 6} ${width + 6}` }, isPie ? /* @__PURE__ */ react_exports.createElement(
987
+ return /* @__PURE__ */ react_exports.createElement("svg", { width, height: width, viewBox: `-3 -3 ${width + 6} ${width + 6}` }, isPie && /* @__PURE__ */ react_exports.createElement(
888
988
  "circle",
889
989
  {
890
990
  cx: radius,
@@ -895,10 +995,10 @@ var Bubble = react_exports.memo(
895
995
  stroke: themeColor,
896
996
  strokeOpacity: 0.3
897
997
  }
898
- ) : null, values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
998
+ ), values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
899
999
  PieSegment,
900
1000
  {
901
- key: String(i),
1001
+ key: (0, id_exports.createDOMID)(),
902
1002
  start: offsets[i] / total,
903
1003
  end: (offsets[i] + v) / total,
904
1004
  radius,
@@ -908,7 +1008,18 @@ var Bubble = react_exports.memo(
908
1008
  handleBubbleClick: onBubbleClick
909
1009
  }
910
1010
  )));
911
- }, [bubbleSize, colors, isPie, onBubbleClick, originalValues, themeColor, valueRange]);
1011
+ }, [
1012
+ bubbleSize,
1013
+ colors,
1014
+ isPie,
1015
+ onBubbleClick,
1016
+ originalValues,
1017
+ themeColor,
1018
+ allZeros,
1019
+ radius,
1020
+ total,
1021
+ values
1022
+ ]);
912
1023
  if (!bubble) {
913
1024
  return null;
914
1025
  }
@@ -918,11 +1029,26 @@ var Bubble = react_exports.memo(
918
1029
  longitude,
919
1030
  latitude,
920
1031
  additionalFields: [...bubbleSize, ...additionalFields],
1032
+ tooltipHeader,
921
1033
  map,
922
1034
  "data-test-type": "bubble",
923
1035
  showCoordinates
924
1036
  },
925
- bubble
1037
+ bubble,
1038
+ isBubbleMapIconFlagEnabled && radius >= ICON_DISPLAY_CUTOFF && icon && ((0, iconUtils_exports.isRemoteIcon)(icon) || (0, iconUtils_exports.isDataURI)(icon)) && /* @__PURE__ */ react_exports.createElement(
1039
+ "div",
1040
+ {
1041
+ "data-test": "bubble-icon-wrapper",
1042
+ style: {
1043
+ position: "absolute",
1044
+ top: `${radius}px`,
1045
+ left: `${radius}px`,
1046
+ transform: "translate(-50%, -50%)",
1047
+ pointerEvents: "none"
1048
+ }
1049
+ },
1050
+ /* @__PURE__ */ react_exports.createElement(RemoteIcon_default, { iconURL: icon, width: radius * 0.8, height: radius * 0.8 })
1051
+ )
926
1052
  );
927
1053
  }
928
1054
  );
@@ -931,13 +1057,14 @@ var BubbleLayer = (props) => {
931
1057
  const { bubbleLayer, themeColorScheme, map, zoom, onMapClick, showCoordinates } = props;
932
1058
  bubbleLayer.seriesColors = bubbleLayer.seriesColors || DEFAULT_SERIES_COLORS;
933
1059
  bubbleLayer.bubbleSize = bubbleLayer.bubbleSize || [];
1060
+ bubbleLayer.icon = bubbleLayer.icon || [];
934
1061
  const bakedData = react_exports.useMemo(() => bakeBubbleData(bubbleLayer), [bubbleLayer]);
935
1062
  const staticColors = react_exports.useMemo(
936
1063
  () => getStaticColors(bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors),
937
1064
  [bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors]
938
1065
  );
939
1066
  const { data = [], dataRange = [], resultLimit, bubbleSizeFields, isPie } = bakedData != null ? bakedData : {};
940
- const { additionalTooltipFields = [] } = bubbleLayer;
1067
+ const { additionalTooltipFields = [], tooltipHeaderFieldName = null } = bubbleLayer;
941
1068
  const roundedZoom = Math.round(zoom);
942
1069
  const themeColor = themeColorScheme === "light" ? "#ffffff" : "#1a1c20";
943
1070
  const dynamicColors = bubbleLayer.dataColors;
@@ -978,10 +1105,15 @@ var BubbleLayer = (props) => {
978
1105
  value,
979
1106
  color: colors[index]
980
1107
  }));
981
- const additionalFields = bubbleLayer.metadata ? additionalTooltipFields.map((field) => ({
982
- name: field,
983
- value: datum.data.metadata[field]
984
- })) : [];
1108
+ const additionalFields = bubbleLayer.metadata ? additionalTooltipFields.map((field) => {
1109
+ var _a;
1110
+ return {
1111
+ name: field,
1112
+ value: datum.data.metadata[field],
1113
+ icon: (_a = bubbleLayer.tooltipFieldIcons) == null ? void 0 : _a[field]
1114
+ };
1115
+ }) : [];
1116
+ const tooltipHeaderField = bubbleLayer.metadata && datum.data.metadata[tooltipHeaderFieldName];
985
1117
  return /* @__PURE__ */ react_exports.createElement(
986
1118
  Bubble,
987
1119
  {
@@ -995,8 +1127,10 @@ var BubbleLayer = (props) => {
995
1127
  latitude,
996
1128
  bubbleSize,
997
1129
  additionalFields,
1130
+ tooltipHeader: tooltipHeaderField,
998
1131
  map,
999
1132
  handleMapClick: (e, name, value) => handleMapClick(e, name, value, i),
1133
+ icon: bubbleLayer.icon[datum.idx],
1000
1134
  showCoordinates
1001
1135
  }
1002
1136
  );
@@ -1038,7 +1172,8 @@ var Marker2 = react_exports.memo(
1038
1172
  map,
1039
1173
  additionalFields,
1040
1174
  handleLayerClick,
1041
- showCoordinates
1175
+ showCoordinates,
1176
+ tooltipHeader
1042
1177
  }) => {
1043
1178
  const icon = react_exports.useMemo(
1044
1179
  () => /* @__PURE__ */ react_exports.createElement(MarkerIcon, { color, theme: themeColorScheme, onClick: handleLayerClick }),
@@ -1052,7 +1187,8 @@ var Marker2 = react_exports.memo(
1052
1187
  map,
1053
1188
  additionalFields,
1054
1189
  "data-test-type": "marker",
1055
- showCoordinates
1190
+ showCoordinates,
1191
+ tooltipHeader
1056
1192
  },
1057
1193
  icon
1058
1194
  );
@@ -1064,7 +1200,8 @@ var StyledMarkerWrapper2 = styled_components_default(MarkerWrapper_default)`
1064
1200
  height: 28px;
1065
1201
  cursor: pointer;
1066
1202
  `;
1067
- var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop, showCoordinates) => {
1203
+ var generateMarkerWrapperProps = (markerLayer, showCoordinates, onMapClick = lodash_exports.noop) => {
1204
+ var _a;
1068
1205
  const latArray = markerLayer.latitude;
1069
1206
  const lonArray = markerLayer.longitude;
1070
1207
  const isStaticColor = !markerLayer.dataColors;
@@ -1078,13 +1215,14 @@ var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop,
1078
1215
  const staticColor = markerLayer.seriesColors && (0, colorUtils_exports.isColor)(markerLayer.seriesColors[0]) ? markerLayer.seriesColors[0] : DEFAULT_CLUSTER_COLOR;
1079
1216
  const dynamicColor = markerLayer.dataColors && (0, colorUtils_exports.isColor)(markerLayer.dataColors[i]) ? markerLayer.dataColors[i] : DEFAULT_CLUSTER_COLOR;
1080
1217
  const color = isStaticColor ? staticColor : dynamicColor;
1081
- const additionalFields = markerLayer.metadata ? markerLayer.additionalTooltipFields.map((field) => ({
1218
+ const tooltipHeader = markerLayer.tooltipHeaderField && markerLayer.tooltipHeaderField[i];
1219
+ const additionalFields = ((_a = markerLayer.metadata) == null ? void 0 : _a[i]) ? markerLayer.additionalTooltipFields.map((field) => ({
1082
1220
  name: field,
1083
1221
  value: markerLayer.metadata[i][field]
1084
1222
  })) : [];
1085
1223
  const handleLayerClick = (e) => {
1086
- var _a;
1087
- const metadata = (_a = markerLayer == null ? void 0 : markerLayer.metadata[i]) != null ? _a : {};
1224
+ var _a2;
1225
+ const metadata = (_a2 = markerLayer == null ? void 0 : markerLayer.metadata[i]) != null ? _a2 : {};
1088
1226
  const payload = Object.keys(metadata).reduce((acc, curr) => {
1089
1227
  const key = `row.${curr}.value`;
1090
1228
  const value = String(metadata[curr]);
@@ -1097,6 +1235,7 @@ var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop,
1097
1235
  longitude: lonArray[i],
1098
1236
  color,
1099
1237
  additionalFields,
1238
+ tooltipHeader,
1100
1239
  handleLayerClick,
1101
1240
  showCoordinates
1102
1241
  });
@@ -1107,7 +1246,7 @@ var MarkerLayer = (props) => {
1107
1246
  const { map, themeColorScheme, markerLayer, onMapClick, showCoordinates = true } = props;
1108
1247
  markerLayer.seriesColors = markerLayer.seriesColors || DEFAULT_SERIES_COLORS;
1109
1248
  const markerPropsList = react_exports.useMemo(
1110
- () => generateMarkerWrapperProps(markerLayer, onMapClick, showCoordinates),
1249
+ () => generateMarkerWrapperProps(markerLayer, showCoordinates, onMapClick),
1111
1250
  [markerLayer, onMapClick, showCoordinates]
1112
1251
  );
1113
1252
  return /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null, markerPropsList.map((markerProps, i) => /* @__PURE__ */ react_exports.createElement(
@@ -1175,7 +1314,7 @@ var compareGeom = (prev, next) => {
1175
1314
  return prev === null && next === null;
1176
1315
  };
1177
1316
  var compareChoropleth = (prevProps, nextProps) => {
1178
- return compareGeom(prevProps.geomData, nextProps.geomData) && prevProps.id === nextProps.id && prevProps.map === nextProps.map && prevProps.areaId === nextProps.areaId && prevProps.areaValue === nextProps.areaValue && prevProps.color === nextProps.color && prevProps.opacity === nextProps.opacity && prevProps.strokeColor === nextProps.strokeColor && prevProps.isThemeChanged === nextProps.isThemeChanged && (0, lodash_exports.isEqual)(prevProps.additionalFields, nextProps.additionalFields) && prevProps.handleMapClick.toString() === nextProps.handleMapClick.toString();
1317
+ return compareGeom(prevProps.geomData, nextProps.geomData) && prevProps.id === nextProps.id && prevProps.map === nextProps.map && prevProps.areaId === nextProps.areaId && prevProps.areaValue === nextProps.areaValue && prevProps.color === nextProps.color && prevProps.opacity === nextProps.opacity && prevProps.strokeColor === nextProps.strokeColor && prevProps.isThemeChanged === nextProps.isThemeChanged && (0, lodash_exports.isEqual)(prevProps.additionalFields, nextProps.additionalFields) && prevProps.tooltipHeader === nextProps.tooltipHeader && prevProps.handleMapClick.toString() === nextProps.handleMapClick.toString();
1179
1318
  };
1180
1319
  var cleanupChoropleth = (shapeId, sourceId, strokeId, map) => {
1181
1320
  var _a, _b, _c;
@@ -1211,6 +1350,7 @@ var Choropleth = react_exports.memo(
1211
1350
  strokeColor,
1212
1351
  isThemeChanged,
1213
1352
  additionalFields,
1353
+ tooltipHeader,
1214
1354
  handleMapClick
1215
1355
  }) => {
1216
1356
  const sourceId = getSourceId(id);
@@ -1218,7 +1358,8 @@ var Choropleth = react_exports.memo(
1218
1358
  const strokeId = getStrokeId(id);
1219
1359
  const formattedGeomData = {
1220
1360
  type: "Feature",
1221
- geometry: geomData
1361
+ geometry: geomData,
1362
+ properties: {}
1222
1363
  };
1223
1364
  const [isTooltipOpen, setTooltipOpenStatus] = react_exports.useState(false);
1224
1365
  const [mouseLat, setmouseLat] = react_exports.useState(0);
@@ -1284,6 +1425,7 @@ var Choropleth = react_exports.memo(
1284
1425
  {
1285
1426
  isChoroplethTooltipOpen: isTooltipOpen,
1286
1427
  additionalFields,
1428
+ tooltipHeader,
1287
1429
  latitude: mouseLat,
1288
1430
  longitude: mouseLng,
1289
1431
  map,
@@ -1316,12 +1458,13 @@ var ChoroplethLayer = (props) => {
1316
1458
  value: choroplethMetadata[field]
1317
1459
  }))
1318
1460
  ) : [];
1461
+ const tooltipHeaderField = (choroplethLayer == null ? void 0 : choroplethLayer.tooltipHeaderField) || null;
1319
1462
  const handleMapClick = (e, i) => {
1320
1463
  const payload = formatMetadata(choroplethLayer, i);
1321
1464
  onMapClick({ e, payload });
1322
1465
  };
1323
1466
  if (!map || !choroplethLayer || !choroplethLayer.geom) {
1324
- return /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null);
1467
+ return null;
1325
1468
  }
1326
1469
  if (isThemeChanged) {
1327
1470
  setIsThemeChanged(false);
@@ -1343,6 +1486,7 @@ var ChoroplethLayer = (props) => {
1343
1486
  areaId,
1344
1487
  areaValue,
1345
1488
  additionalFields: additionalFields[i],
1489
+ tooltipHeader: tooltipHeaderField && tooltipHeaderField[i],
1346
1490
  handleMapClick: (e) => handleMapClick(e, i)
1347
1491
  }
1348
1492
  );
@@ -1355,36 +1499,41 @@ var Message_exports = {};
1355
1499
  __export(Message_exports, {
1356
1500
  default: () => Message_default
1357
1501
  });
1358
- var defaultImport20 = __toESM(require("@splunk/visualizations-shared/Message"));
1502
+ var defaultImport25 = __toESM(require("@splunk/visualizations-shared/Message"));
1359
1503
  __reExport(Message_exports, require("@splunk/visualizations-shared/Message"));
1360
- var Message_default = "default" in defaultImport20 ? defaultImport20.default : defaultImport20;
1504
+ var Message_default = "default" in defaultImport25 ? defaultImport25.default : defaultImport25;
1361
1505
 
1362
1506
  // esm-externals:@splunk/visualization-context/GeoRegistry
1363
1507
  var GeoRegistry_exports = {};
1364
1508
  __export(GeoRegistry_exports, {
1365
1509
  default: () => GeoRegistry_default
1366
1510
  });
1367
- var defaultImport21 = __toESM(require("@splunk/visualization-context/GeoRegistry"));
1511
+ var defaultImport26 = __toESM(require("@splunk/visualization-context/GeoRegistry"));
1368
1512
  __reExport(GeoRegistry_exports, require("@splunk/visualization-context/GeoRegistry"));
1369
- var GeoRegistry_default = "default" in defaultImport21 ? defaultImport21.default : defaultImport21;
1513
+ var GeoRegistry_default = "default" in defaultImport26 ? defaultImport26.default : defaultImport26;
1370
1514
 
1371
1515
  // esm-externals:@splunk/visualization-context/GeoJsonProvider
1372
1516
  var GeoJsonProvider_exports = {};
1373
1517
  __export(GeoJsonProvider_exports, {
1374
1518
  default: () => GeoJsonProvider_default
1375
1519
  });
1376
- var defaultImport22 = __toESM(require("@splunk/visualization-context/GeoJsonProvider"));
1520
+ var defaultImport27 = __toESM(require("@splunk/visualization-context/GeoJsonProvider"));
1377
1521
  __reExport(GeoJsonProvider_exports, require("@splunk/visualization-context/GeoJsonProvider"));
1378
- var GeoJsonProvider_default = "default" in defaultImport22 ? defaultImport22.default : defaultImport22;
1522
+ var GeoJsonProvider_default = "default" in defaultImport27 ? defaultImport27.default : defaultImport27;
1379
1523
 
1380
1524
  // src/Map/PureMap/LocalChoroplethLayer.tsx
1381
1525
  var LocalChoroplethLayer = (props) => {
1382
1526
  var _a, _b;
1383
1527
  const { width, height, map, choroplethLayer, isThemeChanged, setIsThemeChanged, onMapClick } = props;
1384
1528
  const cfgOpacity = Math.min(Math.max(choroplethLayer == null ? void 0 : choroplethLayer.choroplethOpacity, 0), 1);
1385
- const [geoJson, setGeoJson] = react_exports.useState({ features: [{ properties: { name: "" }, geometry: [] }] });
1529
+ const [geoJson, setGeoJson] = react_exports.useState({
1530
+ features: [{ properties: { name: "" }, geometry: [] }]
1531
+ });
1386
1532
  const [validGeoJson, setValidGeoJson] = react_exports.useState(true);
1387
- const [geoJsonError, setGeoJsonError] = react_exports.useState({ level: "info", message: "" });
1533
+ const [geoJsonError, setGeoJsonError] = react_exports.useState({
1534
+ level: "info",
1535
+ message: ""
1536
+ });
1388
1537
  react_exports.useEffect(() => {
1389
1538
  let geoJsonData;
1390
1539
  const geoRegistry = GeoRegistry_default.create();
@@ -1486,7 +1635,8 @@ var LocalChoroplethLayer = (props) => {
1486
1635
  handleMapClick: (e) => handleMapClick(e, el.idx),
1487
1636
  isThemeChanged,
1488
1637
  geomData: geoJson.features[i].geometry,
1489
- additionalFields: additionalFields[el.idx]
1638
+ additionalFields: additionalFields[el.idx],
1639
+ tooltipHeader: choroplethLayer.tooltipHeaderField && choroplethLayer.tooltipHeaderField[el.idx]
1490
1640
  }
1491
1641
  );
1492
1642
  }));
@@ -1509,7 +1659,9 @@ var formatColor = (color) => {
1509
1659
  opacity: chromaColor.alpha()
1510
1660
  };
1511
1661
  };
1512
- var StyledFitToDataButton = styled_components_default(Button_default).attrs({ "data-test": "fit-to-data-button" })`
1662
+ var StyledFitToDataButton = styled_components_default(Button_default).attrs({
1663
+ "data-test": "fit-to-data-button"
1664
+ })`
1513
1665
  position: absolute;
1514
1666
  top: 115px;
1515
1667
  left: 16px;
@@ -1518,7 +1670,9 @@ var StyledFitToDataButton = styled_components_default(Button_default).attrs({ "d
1518
1670
  height: 40px;
1519
1671
  border-radius: 4px;
1520
1672
  border: none;
1521
- box-shadow: 0px 26px 103px rgba(0, 0, 0, 0.64), 0px 11px 18px rgba(0, 0, 0, 0.32),
1673
+ box-shadow:
1674
+ 0px 26px 103px rgba(0, 0, 0, 0.64),
1675
+ 0px 11px 18px rgba(0, 0, 0, 0.32),
1522
1676
  0px 3px 6px rgba(0, 0, 0, 0.3) !important;
1523
1677
  background-color: ${(props) => props.controlBackgroundColor} !important;
1524
1678
  background-repeat: no-repeat;
@@ -1621,15 +1775,19 @@ var PureMap = (props) => {
1621
1775
  (mapStyle) => {
1622
1776
  map.current = new maplibre_gl_exports.Map(__spreadValues({
1623
1777
  container: basemapContainer.current,
1624
- preserveDrawingBuffer: true,
1778
+ canvasContextAttributes: {
1779
+ preserveDrawingBuffer: true
1780
+ },
1625
1781
  style: mapStyle,
1626
1782
  center: lngLatCenter,
1627
1783
  zoom: zoomLevel,
1628
- cooperativeGestures: {
1629
- windowsHelpText: (0, i18n_exports._)("Use Ctrl + scroll to zoom map"),
1630
- macHelpText: (0, i18n_exports._)("Use \u2318 + scroll to zoom map"),
1631
- mobileHelpText: (0, i18n_exports._)("Use two fingers to move the map")
1632
- }
1784
+ cooperativeGestures: true,
1785
+ locale: {
1786
+ "CooperativeGesturesHandler.WindowsHelpText": (0, i18n_exports._)("Use Ctrl + scroll to zoom map"),
1787
+ "CooperativeGesturesHandler.MacHelpText": (0, i18n_exports._)("Use \u2318 + scroll to zoom map"),
1788
+ "CooperativeGesturesHandler.MobileHelpText": (0, i18n_exports._)("Use two fingers to move the map")
1789
+ },
1790
+ attributionControl: false
1633
1791
  }, getZoomConstraintsFromTileConfig(mapStyle, baseLayerTileServer)));
1634
1792
  map.current.on("load", () => {
1635
1793
  if ((layers == null ? void 0 : layers.length) > 0 && center === void 0 && zoom === void 0) {
@@ -1650,7 +1808,10 @@ var PureMap = (props) => {
1650
1808
  });
1651
1809
  map.current.on("dragend", () => {
1652
1810
  const newCenter = map.current.getCenter();
1653
- onOptionsChangeProxy({ center: [newCenter.lat, newCenter.lng], zoom: map.current.getZoom() });
1811
+ onOptionsChangeProxy({
1812
+ center: [newCenter.lat, newCenter.lng],
1813
+ zoom: map.current.getZoom()
1814
+ });
1654
1815
  });
1655
1816
  map.current.on("resize", () => {
1656
1817
  const mapZoomLevel = map.current.getZoom();
@@ -1877,6 +2038,7 @@ PureMap.propTypes = {
1877
2038
  dataColors: prop_types_exports.oneOfType([prop_types_exports.string, prop_types_exports.arrayOf(prop_types_exports.string)]),
1878
2039
  seriesColors: prop_types_exports.arrayOf(prop_types_exports.string),
1879
2040
  additionalTooltipFields: prop_types_exports.arrayOf(prop_types_exports.string),
2041
+ tooltipHeaderField: prop_types_exports.arrayOf(prop_types_exports.string),
1880
2042
  resultLimit: prop_types_exports.number,
1881
2043
  source: prop_types_exports.string,
1882
2044
  choroplethEmptyAreaColor: prop_types_exports.string
@@ -1911,59 +2073,48 @@ PureMap.defaultProps = {
1911
2073
  };
1912
2074
  var PureMap_default = PureMap;
1913
2075
 
1914
- // esm-externals:@splunk/themes
1915
- var themes_exports = {};
1916
- __export(themes_exports, {
1917
- default: () => themes_default
1918
- });
1919
- var defaultImport23 = __toESM(require("@splunk/themes"));
1920
- __reExport(themes_exports, require("@splunk/themes"));
1921
- var themes_default = "default" in defaultImport23 ? defaultImport23.default : defaultImport23;
1922
-
1923
2076
  // esm-externals:@splunk/visualization-color-palettes/editors/PresetPalettes
1924
2077
  var PresetPalettes_exports = {};
1925
2078
  __export(PresetPalettes_exports, {
1926
2079
  default: () => PresetPalettes_default
1927
2080
  });
1928
- var defaultImport24 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
2081
+ var defaultImport28 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
1929
2082
  __reExport(PresetPalettes_exports, require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
1930
- var PresetPalettes_default = "default" in defaultImport24 ? defaultImport24.default : defaultImport24;
2083
+ var PresetPalettes_default = "default" in defaultImport28 ? defaultImport28.default : defaultImport28;
1931
2084
 
1932
2085
  // esm-externals:@splunk/visualization-icons
1933
2086
  var visualization_icons_exports = {};
1934
2087
  __export(visualization_icons_exports, {
1935
2088
  default: () => visualization_icons_default
1936
2089
  });
1937
- var defaultImport25 = __toESM(require("@splunk/visualization-icons"));
2090
+ var defaultImport29 = __toESM(require("@splunk/visualization-icons"));
1938
2091
  __reExport(visualization_icons_exports, require("@splunk/visualization-icons"));
1939
- var visualization_icons_default = "default" in defaultImport25 ? defaultImport25.default : defaultImport25;
2092
+ var visualization_icons_default = "default" in defaultImport29 ? defaultImport29.default : defaultImport29;
1940
2093
 
1941
2094
  // esm-externals:@splunk/visualization-icons/placeholders
1942
2095
  var placeholders_exports = {};
1943
2096
  __export(placeholders_exports, {
1944
2097
  default: () => placeholders_default
1945
2098
  });
1946
- var defaultImport26 = __toESM(require("@splunk/visualization-icons/placeholders"));
2099
+ var defaultImport30 = __toESM(require("@splunk/visualization-icons/placeholders"));
1947
2100
  __reExport(placeholders_exports, require("@splunk/visualization-icons/placeholders"));
1948
- var placeholders_default = "default" in defaultImport26 ? defaultImport26.default : defaultImport26;
2101
+ var placeholders_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
1949
2102
 
1950
2103
  // esm-externals:@splunk/visualizations-shared/configUtils
1951
2104
  var configUtils_exports = {};
1952
2105
  __export(configUtils_exports, {
1953
2106
  default: () => configUtils_default
1954
2107
  });
1955
- var defaultImport27 = __toESM(require("@splunk/visualizations-shared/configUtils"));
2108
+ var defaultImport31 = __toESM(require("@splunk/visualizations-shared/configUtils"));
1956
2109
  __reExport(configUtils_exports, require("@splunk/visualizations-shared/configUtils"));
1957
- var configUtils_default = "default" in defaultImport27 ? defaultImport27.default : defaultImport27;
2110
+ var configUtils_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
1958
2111
 
1959
2112
  // src/common/utils/configUtils.ts
1960
2113
  function enhanceConfig(vizConfig) {
1961
2114
  const enhancedConfig = __spreadValues({}, vizConfig);
1962
- enhancedConfig.editorConfig = vizConfig.editorConfig.map(
1963
- (config2) => {
1964
- return __spreadProps(__spreadValues({}, config2), { open: config2.open || false });
1965
- }
1966
- );
2115
+ enhancedConfig.editorConfig = vizConfig.editorConfig.map((config2) => {
2116
+ return __spreadProps(__spreadValues({}, config2), { open: config2.open || false });
2117
+ });
1967
2118
  return enhancedConfig;
1968
2119
  }
1969
2120
 
@@ -1985,6 +2136,33 @@ var background = ({
1985
2136
  ];
1986
2137
  var BackgroundColor_default = background;
1987
2138
 
2139
+ // esm-externals:@splunk/themes/pick
2140
+ var pick_exports = {};
2141
+ __export(pick_exports, {
2142
+ default: () => pick_default
2143
+ });
2144
+ var defaultImport32 = __toESM(require("@splunk/themes/pick"));
2145
+ __reExport(pick_exports, require("@splunk/themes/pick"));
2146
+ var pick_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2147
+
2148
+ // esm-externals:@splunk/themes/variables
2149
+ var variables_exports = {};
2150
+ __export(variables_exports, {
2151
+ default: () => variables_default
2152
+ });
2153
+ var defaultImport33 = __toESM(require("@splunk/themes/variables"));
2154
+ __reExport(variables_exports, require("@splunk/themes/variables"));
2155
+ var variables_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2156
+
2157
+ // src/common/ThemedDefaults.tsx
2158
+ var defaultBackgroundColor = (props) => pick_default({
2159
+ enterprise: {
2160
+ dark: variables_default.black(props),
2161
+ light: variables_default.white(props)
2162
+ },
2163
+ prisma: variables_default.backgroundColorSection(props)
2164
+ })(props);
2165
+
1988
2166
  // src/Map/config.ts
1989
2167
  var defaultContext = {
1990
2168
  colorRangeConfig: [
@@ -2013,13 +2191,7 @@ var size = {
2013
2191
  initialHeight: 600
2014
2192
  };
2015
2193
  var themes = {
2016
- defaultBackgroundColor: (props) => (0, themes_exports.pick)({
2017
- enterprise: {
2018
- dark: themes_exports.variables.black(props),
2019
- light: themes_exports.variables.backgroundColor(props)
2020
- },
2021
- prisma: themes_exports.variables.backgroundColorSidebar(props)
2022
- })(props),
2194
+ defaultBackgroundColor,
2023
2195
  controlBackgroundColor: (props) => (0, themes_exports.pick)({
2024
2196
  enterprise: {
2025
2197
  dark: themes_exports.variables.gray22(props),
@@ -2071,7 +2243,10 @@ var editorConfig = [
2071
2243
  values: [
2072
2244
  { label: (0, i18n_exports._)("Bubble"), value: visualization_schemas_exports.LAYER_TYPE.Bubble },
2073
2245
  { label: (0, i18n_exports._)("Marker"), value: visualization_schemas_exports.LAYER_TYPE.Marker },
2074
- { label: (0, i18n_exports._)("Choropleth"), value: visualization_schemas_exports.LAYER_TYPE.Choropleth }
2246
+ {
2247
+ label: (0, i18n_exports._)("Choropleth"),
2248
+ value: visualization_schemas_exports.LAYER_TYPE.Choropleth
2249
+ }
2075
2250
  ]
2076
2251
  }
2077
2252
  }
@@ -2146,6 +2321,17 @@ var editorConfig = [
2146
2321
  editor: "editor.columnMultiSelectionByFieldNameEditor"
2147
2322
  }
2148
2323
  ],
2324
+ [
2325
+ {
2326
+ label: (0, i18n_exports._)("Tooltip header field"),
2327
+ option: "layers[0].tooltipHeaderField",
2328
+ editor: "editor.columnSelector",
2329
+ editorProps: {
2330
+ dataSourceKey: "primary",
2331
+ shouldShowInternalFields: false
2332
+ }
2333
+ }
2334
+ ],
2149
2335
  [
2150
2336
  {
2151
2337
  label: (0, i18n_exports._)("Result limit"),
@@ -2433,72 +2619,54 @@ var getSettingsFromThemedProps_exports = {};
2433
2619
  __export(getSettingsFromThemedProps_exports, {
2434
2620
  default: () => getSettingsFromThemedProps_default
2435
2621
  });
2436
- var defaultImport28 = __toESM(require("@splunk/themes/getSettingsFromThemedProps"));
2622
+ var defaultImport34 = __toESM(require("@splunk/themes/getSettingsFromThemedProps"));
2437
2623
  __reExport(getSettingsFromThemedProps_exports, require("@splunk/themes/getSettingsFromThemedProps"));
2438
- var getSettingsFromThemedProps_default = "default" in defaultImport28 ? defaultImport28.default : defaultImport28;
2624
+ var getSettingsFromThemedProps_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
2439
2625
 
2440
2626
  // esm-externals:@splunk/visualization-encoding/Options
2441
2627
  var Options_exports = {};
2442
2628
  __export(Options_exports, {
2443
2629
  default: () => Options_default
2444
2630
  });
2445
- var defaultImport29 = __toESM(require("@splunk/visualization-encoding/Options"));
2631
+ var defaultImport35 = __toESM(require("@splunk/visualization-encoding/Options"));
2446
2632
  __reExport(Options_exports, require("@splunk/visualization-encoding/Options"));
2447
- var Options_default = "default" in defaultImport29 ? defaultImport29.default : defaultImport29;
2633
+ var Options_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
2448
2634
 
2449
2635
  // esm-externals:@splunk/visualizations-shared/SanitizeProps
2450
2636
  var SanitizeProps_exports = {};
2451
2637
  __export(SanitizeProps_exports, {
2452
2638
  default: () => SanitizeProps_default
2453
2639
  });
2454
- var defaultImport30 = __toESM(require("@splunk/visualizations-shared/SanitizeProps"));
2640
+ var defaultImport36 = __toESM(require("@splunk/visualizations-shared/SanitizeProps"));
2455
2641
  __reExport(SanitizeProps_exports, require("@splunk/visualizations-shared/SanitizeProps"));
2456
- var SanitizeProps_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
2642
+ var SanitizeProps_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
2457
2643
 
2458
2644
  // esm-externals:@splunk/visualization-context/TimezoneContext
2459
2645
  var TimezoneContext_exports = {};
2460
2646
  __export(TimezoneContext_exports, {
2461
2647
  default: () => TimezoneContext_default
2462
2648
  });
2463
- var defaultImport31 = __toESM(require("@splunk/visualization-context/TimezoneContext"));
2649
+ var defaultImport37 = __toESM(require("@splunk/visualization-context/TimezoneContext"));
2464
2650
  __reExport(TimezoneContext_exports, require("@splunk/visualization-context/TimezoneContext"));
2465
- var TimezoneContext_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
2651
+ var TimezoneContext_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
2466
2652
 
2467
2653
  // esm-externals:@splunk/moment
2468
2654
  var moment_exports = {};
2469
2655
  __export(moment_exports, {
2470
2656
  default: () => moment_default
2471
2657
  });
2472
- var defaultImport32 = __toESM(require("@splunk/moment"));
2658
+ var defaultImport38 = __toESM(require("@splunk/moment"));
2473
2659
  __reExport(moment_exports, require("@splunk/moment"));
2474
- var moment_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2475
-
2476
- // esm-externals:@splunk/visualization-context/FeatureFlagContext
2477
- var FeatureFlagContext_exports = {};
2478
- __export(FeatureFlagContext_exports, {
2479
- default: () => FeatureFlagContext_default
2480
- });
2481
- var defaultImport33 = __toESM(require("@splunk/visualization-context/FeatureFlagContext"));
2482
- __reExport(FeatureFlagContext_exports, require("@splunk/visualization-context/FeatureFlagContext"));
2483
- var FeatureFlagContext_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2660
+ var moment_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
2484
2661
 
2485
2662
  // esm-externals:@splunk/async-dynamic-options-evaluator
2486
2663
  var async_dynamic_options_evaluator_exports = {};
2487
2664
  __export(async_dynamic_options_evaluator_exports, {
2488
2665
  default: () => async_dynamic_options_evaluator_default
2489
2666
  });
2490
- var defaultImport34 = __toESM(require("@splunk/async-dynamic-options-evaluator"));
2667
+ var defaultImport39 = __toESM(require("@splunk/async-dynamic-options-evaluator"));
2491
2668
  __reExport(async_dynamic_options_evaluator_exports, require("@splunk/async-dynamic-options-evaluator"));
2492
- var async_dynamic_options_evaluator_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
2493
-
2494
- // esm-externals:@splunk/ui-utils/id
2495
- var id_exports = {};
2496
- __export(id_exports, {
2497
- default: () => id_default
2498
- });
2499
- var defaultImport35 = __toESM(require("@splunk/ui-utils/id"));
2500
- __reExport(id_exports, require("@splunk/ui-utils/id"));
2501
- var id_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
2669
+ var async_dynamic_options_evaluator_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
2502
2670
 
2503
2671
  // src/common/interfaces/VizActionHandler.ts
2504
2672
  var DefaultVizActionHandler = class {
@@ -2706,9 +2874,9 @@ var SizeAwareWrapper_exports = {};
2706
2874
  __export(SizeAwareWrapper_exports, {
2707
2875
  default: () => SizeAwareWrapper_default
2708
2876
  });
2709
- var defaultImport36 = __toESM(require("@splunk/visualizations-shared/SizeAwareWrapper"));
2877
+ var defaultImport40 = __toESM(require("@splunk/visualizations-shared/SizeAwareWrapper"));
2710
2878
  __reExport(SizeAwareWrapper_exports, require("@splunk/visualizations-shared/SizeAwareWrapper"));
2711
- var SizeAwareWrapper_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
2879
+ var SizeAwareWrapper_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
2712
2880
 
2713
2881
  // src/common/hocs/FixedSizeContainer.tsx
2714
2882
  var Item = styled_components_default.div.attrs(({ width }) => ({
@@ -2719,9 +2887,14 @@ var Item = styled_components_default.div.attrs(({ width }) => ({
2719
2887
  position: relative;
2720
2888
  background-color: ${(props) => (0, colorUtils_exports.isColor)(props.backgroundColor) && props.backgroundColor || props.theme.defaultBackgroundColor}};
2721
2889
  `;
2722
- var FixSizeItem = styled_components_default.div.attrs(({ width, height }) => ({
2723
- style: __spreadValues(__spreadValues({}, width && { width: (0, style_exports.toPx)(width) }), height && { height: (0, style_exports.toPx)(height) })
2724
- }))`
2890
+ var FixSizeItem = styled_components_default.div.attrs(
2891
+ ({
2892
+ width,
2893
+ height
2894
+ }) => ({
2895
+ style: __spreadValues(__spreadValues({}, width && { width: (0, style_exports.toPx)(width) }), height && { height: (0, style_exports.toPx)(height) })
2896
+ })
2897
+ )`
2725
2898
  position: relative;
2726
2899
  flex-direction: column;
2727
2900
  flex: 1;
@@ -2755,7 +2928,7 @@ var withFixedSizeContainer = (Viz) => {
2755
2928
  FixSizeItem,
2756
2929
  {
2757
2930
  "data-test": "fix-size-item",
2758
- "data-splunk-visualization-version": "27.4.0 - 92ef39d5c",
2931
+ "data-splunk-visualization-version": "28.0.0 - 0c5f07712",
2759
2932
  width,
2760
2933
  height,
2761
2934
  backgroundColor
@@ -2821,7 +2994,7 @@ var Cover = styled_components_default.div`
2821
2994
  bottom: 0;
2822
2995
  `;
2823
2996
  var Blocker = styled_components_default.div.attrs({
2824
- "data-splunk-visualization-version": "27.4.0 - 92ef39d5c"
2997
+ "data-splunk-visualization-version": "28.0.0 - 0c5f07712"
2825
2998
  })`
2826
2999
  position: relative;
2827
3000
  width: 100%;
@@ -2838,15 +3011,6 @@ var withEditModeCover = (Visualization, disableEditModeCover) => {
2838
3011
  };
2839
3012
  var withEditModeCover_default = withEditModeCover;
2840
3013
 
2841
- // esm-externals:@splunk/themes/variables
2842
- var variables_exports = {};
2843
- __export(variables_exports, {
2844
- default: () => variables_default
2845
- });
2846
- var defaultImport37 = __toESM(require("@splunk/themes/variables"));
2847
- __reExport(variables_exports, require("@splunk/themes/variables"));
2848
- var variables_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
2849
-
2850
3014
  // src/common/components/IconPlaceholder.tsx
2851
3015
  var shouldShowIconPlaceholder = (dataSources, loading = false) => {
2852
3016
  const data = (0, lodash_exports.get)(dataSources, "primary.data.columns[0]", void 0);
@@ -2925,9 +3089,9 @@ var numberUtils_exports = {};
2925
3089
  __export(numberUtils_exports, {
2926
3090
  default: () => numberUtils_default
2927
3091
  });
2928
- var defaultImport38 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
3092
+ var defaultImport41 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
2929
3093
  __reExport(numberUtils_exports, require("@splunk/visualizations-shared/numberUtils"));
2930
- var numberUtils_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
3094
+ var numberUtils_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
2931
3095
 
2932
3096
  // src/common/utils/dataUtils.ts
2933
3097
  var convertToArrOfObjects = (columns, fields) => {
@@ -3216,7 +3380,12 @@ var useGetXAndYFields = ({
3216
3380
  y2Fields: options.y2 ? "> y2 | getField()" : void 0,
3217
3381
  fieldTypes: "> primary | getType()"
3218
3382
  };
3219
- const { xField = "", yFields = [], y2Fields = [], fieldTypes } = Options_exports.Options.evaluate(
3383
+ const {
3384
+ xField = "",
3385
+ yFields = [],
3386
+ y2Fields = [],
3387
+ fieldTypes
3388
+ } = Options_exports.Options.evaluate(
3220
3389
  { options: optionsToEvaluate, context },
3221
3390
  dataSourcesWithOnlyOnePoint,
3222
3391
  () => {
@@ -3319,9 +3488,9 @@ var FeatureFlags_exports = {};
3319
3488
  __export(FeatureFlags_exports, {
3320
3489
  default: () => FeatureFlags_default
3321
3490
  });
3322
- var defaultImport39 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
3491
+ var defaultImport42 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
3323
3492
  __reExport(FeatureFlags_exports, require("@splunk/visualization-context/FeatureFlags"));
3324
- var FeatureFlags_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
3493
+ var FeatureFlags_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
3325
3494
 
3326
3495
  // src/common/utils/featureFlagUtils.ts
3327
3496
  var getFeatureFlag = (context, flagName) => {
@@ -3339,9 +3508,9 @@ var trellisUtils_exports = {};
3339
3508
  __export(trellisUtils_exports, {
3340
3509
  default: () => trellisUtils_default
3341
3510
  });
3342
- var defaultImport40 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3511
+ var defaultImport43 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3343
3512
  __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
3344
- var trellisUtils_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
3513
+ var trellisUtils_default = "default" in defaultImport43 ? defaultImport43.default : defaultImport43;
3345
3514
 
3346
3515
  // src/common/utils/trellisUtils.ts
3347
3516
  var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
@@ -3497,7 +3666,9 @@ var withDashboardViz = (opts) => {
3497
3666
  return result;
3498
3667
  }
3499
3668
  } catch (e) {
3500
- console.error(`unexpected error evaluating options: ${e.message}`);
3669
+ if (e instanceof Error) {
3670
+ console.error(`unexpected error evaluating options: ${e.message}`);
3671
+ }
3501
3672
  return {};
3502
3673
  }
3503
3674
  return {};
@@ -3556,7 +3727,11 @@ var withDashboardViz = (opts) => {
3556
3727
  if (ev && ev.payload) {
3557
3728
  payload = ev.payload;
3558
3729
  }
3559
- return onEventTrigger({ originalEvent: ev, payload, type: eventName });
3730
+ return onEventTrigger({
3731
+ originalEvent: ev,
3732
+ payload,
3733
+ type: eventName
3734
+ });
3560
3735
  };
3561
3736
  if (parentKeys) {
3562
3737
  for (let i = parentKeys.length - 1; i >= 0; i -= 1) {
@@ -3622,9 +3797,9 @@ var dsl_exports = {};
3622
3797
  __export(dsl_exports, {
3623
3798
  default: () => dsl_default
3624
3799
  });
3625
- var defaultImport41 = __toESM(require("@splunk/visualization-encoding/utils/dsl"));
3800
+ var defaultImport44 = __toESM(require("@splunk/visualization-encoding/utils/dsl"));
3626
3801
  __reExport(dsl_exports, require("@splunk/visualization-encoding/utils/dsl"));
3627
- var dsl_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
3802
+ var dsl_default = "default" in defaultImport44 ? defaultImport44.default : defaultImport44;
3628
3803
 
3629
3804
  // src/common/utils/mapUtils.ts
3630
3805
  var columnsNullToZeros = (config2, dataSources, options) => {
@@ -3640,7 +3815,17 @@ var columnsNullToZeros = (config2, dataSources, options) => {
3640
3815
  if (((_b = (_a = mergedOptions.layers) == null ? void 0 : _a[0]) == null ? void 0 : _b.type) === "bubble") {
3641
3816
  const latitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].latitude, dataSources)[0] || "";
3642
3817
  const longitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].longitude, dataSources)[0] || "";
3643
- const excludedFields = [latitudeField, longitudeField, "geobin"].concat(GEO_LAT_AND_LONG_FIELD);
3818
+ const stringsFields = (0, dsl_exports.getFieldsFromDSL)("> primary | frameBySeriesTypes('string')", dataSources);
3819
+ const excludedFields = Array.from(
3820
+ /* @__PURE__ */ new Set([
3821
+ latitudeField,
3822
+ longitudeField,
3823
+ "geobin",
3824
+ "name",
3825
+ ...stringsFields,
3826
+ ...GEO_LAT_AND_LONG_FIELD
3827
+ ])
3828
+ );
3644
3829
  const indicesToEvaluate = new Set(
3645
3830
  fields.reduce((arr, e, i) => {
3646
3831
  const field = typeof e === "string" ? e : e.name.toString();
@@ -3703,7 +3888,12 @@ var computeVizProps = (props) => {
3703
3888
  (field) => typeof field === "string" ? field : field.name
3704
3889
  );
3705
3890
  layers == null ? void 0 : layers.forEach((l) => formatLayer(l, dataFields, dataSourceData, transformedData));
3706
- return __spreadProps(__spreadValues(__spreadProps(__spreadValues({}, themeColors), { themeColorScheme }), layers), { onOptionsChange, title });
3891
+ return __spreadProps(__spreadValues(__spreadProps(__spreadValues({}, themeColors), {
3892
+ themeColorScheme
3893
+ }), layers), {
3894
+ onOptionsChange,
3895
+ title
3896
+ });
3707
3897
  };
3708
3898
  var withTooltipFields = (Viz) => {
3709
3899
  const VizWithTooltipFields = (_a) => {
@@ -3721,6 +3911,7 @@ var withTooltipFields = (Viz) => {
3721
3911
  if (((_c = (_b2 = mergedOptions.layers) == null ? void 0 : _b2[0]) == null ? void 0 : _c.type) === "bubble") {
3722
3912
  mergedOptions.layers[0].bubbleSizeFields = "> bubbleSize | getField()";
3723
3913
  mergedOptions.layers[0].dataValuesField = "> dataValues | getField()";
3914
+ mergedOptions.layers[0].tooltipHeaderFieldName = "> tooltipHeaderField | getField()";
3724
3915
  }
3725
3916
  const { fields } = dataSources.primary.data;
3726
3917
  if (Array.isArray(mergedOptions.layers[0].additionalTooltipFields) && Array.isArray(fields) && fields.length) {