@splunk/visualizations 27.4.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 (71) hide show
  1. package/Area.config.js +7 -0
  2. package/Area.config.js.map +2 -2
  3. package/Area.js +36 -6
  4. package/Area.js.map +2 -2
  5. package/Bar.config.js +7 -0
  6. package/Bar.config.js.map +2 -2
  7. package/Bar.js +37 -8
  8. package/Bar.js.map +2 -2
  9. package/Bubble.config.js +7 -0
  10. package/Bubble.config.js.map +2 -2
  11. package/Bubble.js +16 -5
  12. package/Bubble.js.map +2 -2
  13. package/CHANGELOG.external.md +20 -1
  14. package/ChoroplethSvg.js +2 -2
  15. package/Column.config.js +7 -0
  16. package/Column.config.js.map +2 -2
  17. package/Column.js +36 -6
  18. package/Column.js.map +2 -2
  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.js +2 -2
  25. package/Image.js +2 -2
  26. package/Line.config.js +7 -0
  27. package/Line.config.js.map +2 -2
  28. package/Line.js +36 -6
  29. package/Line.js.map +2 -2
  30. package/LinkGraph.js +2 -2
  31. package/Map.config.js +11 -0
  32. package/Map.config.js.map +2 -2
  33. package/Map.js +227 -101
  34. package/Map.js.map +4 -4
  35. package/Markdown.js +2 -2
  36. package/MarkerGauge.js +2 -2
  37. package/ParallelCoordinates.js +2 -2
  38. package/ParallelCoordinates.js.map +1 -1
  39. package/Pie.js +9 -5
  40. package/Pie.js.map +2 -2
  41. package/Punchcard.js +2 -2
  42. package/Punchcard.js.map +1 -1
  43. package/Rectangle.js +64 -7
  44. package/Rectangle.js.map +4 -4
  45. package/Sankey.js +36 -35
  46. package/Sankey.js.map +3 -3
  47. package/Scatter.config.js +7 -0
  48. package/Scatter.config.js.map +2 -2
  49. package/Scatter.js +16 -5
  50. package/Scatter.js.map +2 -2
  51. package/SingleValue.js +3 -3
  52. package/SingleValue.js.map +2 -2
  53. package/SingleValueBasic.js.map +1 -1
  54. package/SingleValueIcon.js +3 -3
  55. package/SingleValueIcon.js.map +2 -2
  56. package/SingleValueRadial.js +3 -3
  57. package/SingleValueRadial.js.map +2 -2
  58. package/Table.js +2 -2
  59. package/Timeline.js +2 -2
  60. package/common/Charting.js +7 -3
  61. package/common/Charting.js.map +2 -2
  62. package/common/chartingUtils.js +11 -0
  63. package/common/chartingUtils.js.map +2 -2
  64. package/common/shapeUtils.js +85 -3
  65. package/common/shapeUtils.js.map +4 -4
  66. package/common/utils/mapUtils.js +156 -43
  67. package/common/utils/mapUtils.js.map +4 -4
  68. package/common/utils/singleValueUtils.js +1 -1
  69. package/common/utils/singleValueUtils.js.map +2 -2
  70. package/common/withDashboardViz.js +2 -2
  71. package/package.json +15 -15
package/Map.js CHANGED
@@ -629,14 +629,50 @@ var formatMetadata = (choroplethLayer, i) => {
629
629
  }, base);
630
630
  };
631
631
 
632
+ // esm-externals:@splunk/visualizations-shared/iconUtils
633
+ var iconUtils_exports = {};
634
+ __export(iconUtils_exports, {
635
+ default: () => iconUtils_default
636
+ });
637
+ var defaultImport19 = __toESM(require("@splunk/visualizations-shared/iconUtils"));
638
+ __reExport(iconUtils_exports, require("@splunk/visualizations-shared/iconUtils"));
639
+ var iconUtils_default = "default" in defaultImport19 ? defaultImport19.default : defaultImport19;
640
+
641
+ // esm-externals:@splunk/visualizations-shared/RemoteIcon
642
+ var RemoteIcon_exports = {};
643
+ __export(RemoteIcon_exports, {
644
+ default: () => RemoteIcon_default
645
+ });
646
+ var defaultImport20 = __toESM(require("@splunk/visualizations-shared/RemoteIcon"));
647
+ __reExport(RemoteIcon_exports, require("@splunk/visualizations-shared/RemoteIcon"));
648
+ var RemoteIcon_default = "default" in defaultImport20 ? defaultImport20.default : defaultImport20;
649
+
650
+ // esm-externals:@splunk/visualization-context/FeatureFlagContext
651
+ var FeatureFlagContext_exports = {};
652
+ __export(FeatureFlagContext_exports, {
653
+ default: () => FeatureFlagContext_default
654
+ });
655
+ var defaultImport21 = __toESM(require("@splunk/visualization-context/FeatureFlagContext"));
656
+ __reExport(FeatureFlagContext_exports, require("@splunk/visualization-context/FeatureFlagContext"));
657
+ var FeatureFlagContext_default = "default" in defaultImport21 ? defaultImport21.default : defaultImport21;
658
+
632
659
  // esm-externals:@splunk/react-ui/Popover
633
660
  var Popover_exports = {};
634
661
  __export(Popover_exports, {
635
662
  default: () => Popover_default
636
663
  });
637
- var defaultImport19 = __toESM(require("@splunk/react-ui/Popover"));
664
+ var defaultImport22 = __toESM(require("@splunk/react-ui/Popover"));
638
665
  __reExport(Popover_exports, require("@splunk/react-ui/Popover"));
639
- var Popover_default = "default" in defaultImport19 ? defaultImport19.default : defaultImport19;
666
+ var Popover_default = "default" in defaultImport22 ? defaultImport22.default : defaultImport22;
667
+
668
+ // esm-externals:@splunk/themes
669
+ var themes_exports = {};
670
+ __export(themes_exports, {
671
+ default: () => themes_default
672
+ });
673
+ var defaultImport23 = __toESM(require("@splunk/themes"));
674
+ __reExport(themes_exports, require("@splunk/themes"));
675
+ var themes_default = "default" in defaultImport23 ? defaultImport23.default : defaultImport23;
640
676
 
641
677
  // src/Map/PureMap/Tooltip.tsx
642
678
  var StyledPopover = styled_components_default(Popover_default)`
@@ -645,6 +681,7 @@ var StyledPopover = styled_components_default(Popover_default)`
645
681
  `;
646
682
  var StyledTable = styled_components_default.table`
647
683
  margin: 2px 6px 2px 6px;
684
+ table-layout: fixed;
648
685
  width: calc(100% - 12px);
649
686
  `;
650
687
  var StyledTitleColumn = styled_components_default.td`
@@ -662,6 +699,30 @@ var StyledColorBlock = styled_components_default.div`
662
699
  height: 11px;
663
700
  transform: translateY(1px);
664
701
  `;
702
+ var StyledFieldLabel = styled_components_default.span`
703
+ display: inline-block;
704
+ white-space: nowrap;
705
+ `;
706
+ var StyledIconWrapper = styled_components_default.span`
707
+ margin-left: 4px;
708
+ display: inline-block;
709
+ vertical-align: middle;
710
+ `;
711
+ var StyledTooltipHeader = styled_components_default.thead`
712
+ th {
713
+ height: 16px;
714
+ color: ${themes_exports.variables.contentColorActive};
715
+ padding: 0;
716
+ }
717
+
718
+ span {
719
+ display: block;
720
+ white-space: nowrap;
721
+ overflow: hidden;
722
+ text-overflow: ellipsis;
723
+ width: 100%;
724
+ }
725
+ `;
665
726
  var convertDegToDMS = (decimalDegree, type) => {
666
727
  const truncate = (n) => n > 0 ? Math.floor(n) : Math.ceil(n);
667
728
  const absoluteDegree = Math.abs(decimalDegree);
@@ -692,18 +753,25 @@ var Tooltip = ({
692
753
  areaId,
693
754
  areaValue,
694
755
  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
- );
756
+ showCoordinates = true,
757
+ tooltipHeader = null
758
+ }) => {
759
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
760
+ const isTooltipIconFlagEnabled = Boolean(
761
+ featureFlagContext && featureFlagContext.visualizations_enableTooltipIcon
762
+ );
763
+ return /* @__PURE__ */ react_exports.createElement(
764
+ StyledPopover,
765
+ {
766
+ open,
767
+ animation: false,
768
+ anchor,
769
+ "data-test": "map-marker-tooltip",
770
+ defaultPlacement: "above"
771
+ },
772
+ /* @__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)))))
773
+ );
774
+ };
707
775
  var Tooltip_default = Tooltip;
708
776
 
709
777
  // src/Map/PureMap/MarkerWrapper.tsx
@@ -714,6 +782,7 @@ var MarkerWrapper = (_a) => {
714
782
  areaId,
715
783
  areaValue,
716
784
  additionalFields = [],
785
+ tooltipHeader = null,
717
786
  map,
718
787
  isChoroplethTooltipOpen,
719
788
  children,
@@ -724,6 +793,7 @@ var MarkerWrapper = (_a) => {
724
793
  "areaId",
725
794
  "areaValue",
726
795
  "additionalFields",
796
+ "tooltipHeader",
727
797
  "map",
728
798
  "isChoroplethTooltipOpen",
729
799
  "children",
@@ -782,7 +852,8 @@ var MarkerWrapper = (_a) => {
782
852
  areaId,
783
853
  areaValue,
784
854
  additionalFields,
785
- showCoordinates
855
+ showCoordinates,
856
+ tooltipHeader
786
857
  }
787
858
  )));
788
859
  };
@@ -791,6 +862,7 @@ var MarkerWrapper_default = MarkerWrapper;
791
862
  // src/Map/PureMap/BubbleLayer.tsx
792
863
  var GEO_BOUND_PREFIX = "_geo_bounds_";
793
864
  var GEO_LAT_AND_LONG_FIELD = ["_geo_long_field", "_geo_lat_field"];
865
+ var ICON_DISPLAY_CUTOFF = 16;
794
866
  var PieSegment = react_exports.memo(
795
867
  ({
796
868
  start,
@@ -859,10 +931,16 @@ var Bubble = react_exports.memo(
859
931
  longitude,
860
932
  bubbleSize,
861
933
  additionalFields = [],
934
+ tooltipHeader = null,
862
935
  map,
863
936
  handleMapClick,
937
+ icon,
864
938
  showCoordinates
865
939
  }) => {
940
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
941
+ const isBubbleMapIconFlagEnabled = Boolean(
942
+ featureFlagContext && featureFlagContext.visualizations_enableBubbleMapIcon
943
+ );
866
944
  const onBubbleClick = react_exports.useCallback(
867
945
  (e, name, value) => {
868
946
  handleMapClick(e, name, value);
@@ -870,21 +948,20 @@ var Bubble = react_exports.memo(
870
948
  },
871
949
  [handleMapClick]
872
950
  );
951
+ const allZeros = originalValues.every((v) => v === 0);
952
+ const values = originalValues.map((v) => v > 0 ? v : 0);
953
+ const total = values.reduce((totalValue, v) => totalValue + v, 0);
954
+ const radius = matchBubbleSize(valueRange, total);
873
955
  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);
956
+ if (allZeros || !originalValues.length) return null;
879
957
  const offsets = [];
880
- let total = 0;
958
+ let runningTotal = 0;
881
959
  values.forEach((count) => {
882
- offsets.push(total);
883
- total += count;
960
+ offsets.push(runningTotal);
961
+ runningTotal += count;
884
962
  });
885
- const radius = matchBubbleSize(valueRange, total);
886
963
  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(
964
+ return /* @__PURE__ */ react_exports.createElement("svg", { width, height: width, viewBox: `-3 -3 ${width + 6} ${width + 6}` }, isPie && /* @__PURE__ */ react_exports.createElement(
888
965
  "circle",
889
966
  {
890
967
  cx: radius,
@@ -895,7 +972,7 @@ var Bubble = react_exports.memo(
895
972
  stroke: themeColor,
896
973
  strokeOpacity: 0.3
897
974
  }
898
- ) : null, values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
975
+ ), values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
899
976
  PieSegment,
900
977
  {
901
978
  key: String(i),
@@ -908,7 +985,18 @@ var Bubble = react_exports.memo(
908
985
  handleBubbleClick: onBubbleClick
909
986
  }
910
987
  )));
911
- }, [bubbleSize, colors, isPie, onBubbleClick, originalValues, themeColor, valueRange]);
988
+ }, [
989
+ bubbleSize,
990
+ colors,
991
+ isPie,
992
+ onBubbleClick,
993
+ originalValues,
994
+ themeColor,
995
+ allZeros,
996
+ radius,
997
+ total,
998
+ values
999
+ ]);
912
1000
  if (!bubble) {
913
1001
  return null;
914
1002
  }
@@ -918,11 +1006,26 @@ var Bubble = react_exports.memo(
918
1006
  longitude,
919
1007
  latitude,
920
1008
  additionalFields: [...bubbleSize, ...additionalFields],
1009
+ tooltipHeader,
921
1010
  map,
922
1011
  "data-test-type": "bubble",
923
1012
  showCoordinates
924
1013
  },
925
- bubble
1014
+ bubble,
1015
+ isBubbleMapIconFlagEnabled && radius >= ICON_DISPLAY_CUTOFF && icon && ((0, iconUtils_exports.isRemoteIcon)(icon) || (0, iconUtils_exports.isDataURI)(icon)) && /* @__PURE__ */ react_exports.createElement(
1016
+ "div",
1017
+ {
1018
+ "data-test": "bubble-icon-wrapper",
1019
+ style: {
1020
+ position: "absolute",
1021
+ top: `${radius}px`,
1022
+ left: `${radius}px`,
1023
+ transform: "translate(-50%, -50%)",
1024
+ pointerEvents: "none"
1025
+ }
1026
+ },
1027
+ /* @__PURE__ */ react_exports.createElement(RemoteIcon_default, { iconURL: icon, width: radius * 0.8, height: radius * 0.8 })
1028
+ )
926
1029
  );
927
1030
  }
928
1031
  );
@@ -931,13 +1034,14 @@ var BubbleLayer = (props) => {
931
1034
  const { bubbleLayer, themeColorScheme, map, zoom, onMapClick, showCoordinates } = props;
932
1035
  bubbleLayer.seriesColors = bubbleLayer.seriesColors || DEFAULT_SERIES_COLORS;
933
1036
  bubbleLayer.bubbleSize = bubbleLayer.bubbleSize || [];
1037
+ bubbleLayer.icon = bubbleLayer.icon || [];
934
1038
  const bakedData = react_exports.useMemo(() => bakeBubbleData(bubbleLayer), [bubbleLayer]);
935
1039
  const staticColors = react_exports.useMemo(
936
1040
  () => getStaticColors(bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors),
937
1041
  [bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors]
938
1042
  );
939
1043
  const { data = [], dataRange = [], resultLimit, bubbleSizeFields, isPie } = bakedData != null ? bakedData : {};
940
- const { additionalTooltipFields = [] } = bubbleLayer;
1044
+ const { additionalTooltipFields = [], tooltipHeaderFieldName = null } = bubbleLayer;
941
1045
  const roundedZoom = Math.round(zoom);
942
1046
  const themeColor = themeColorScheme === "light" ? "#ffffff" : "#1a1c20";
943
1047
  const dynamicColors = bubbleLayer.dataColors;
@@ -978,10 +1082,15 @@ var BubbleLayer = (props) => {
978
1082
  value,
979
1083
  color: colors[index]
980
1084
  }));
981
- const additionalFields = bubbleLayer.metadata ? additionalTooltipFields.map((field) => ({
982
- name: field,
983
- value: datum.data.metadata[field]
984
- })) : [];
1085
+ const additionalFields = bubbleLayer.metadata ? additionalTooltipFields.map((field) => {
1086
+ var _a;
1087
+ return {
1088
+ name: field,
1089
+ value: datum.data.metadata[field],
1090
+ icon: (_a = bubbleLayer.tooltipFieldIcons) == null ? void 0 : _a[field]
1091
+ };
1092
+ }) : [];
1093
+ const tooltipHeaderField = bubbleLayer.metadata && datum.data.metadata[tooltipHeaderFieldName];
985
1094
  return /* @__PURE__ */ react_exports.createElement(
986
1095
  Bubble,
987
1096
  {
@@ -995,8 +1104,10 @@ var BubbleLayer = (props) => {
995
1104
  latitude,
996
1105
  bubbleSize,
997
1106
  additionalFields,
1107
+ tooltipHeader: tooltipHeaderField,
998
1108
  map,
999
1109
  handleMapClick: (e, name, value) => handleMapClick(e, name, value, i),
1110
+ icon: bubbleLayer.icon[datum.idx],
1000
1111
  showCoordinates
1001
1112
  }
1002
1113
  );
@@ -1038,7 +1149,8 @@ var Marker2 = react_exports.memo(
1038
1149
  map,
1039
1150
  additionalFields,
1040
1151
  handleLayerClick,
1041
- showCoordinates
1152
+ showCoordinates,
1153
+ tooltipHeader
1042
1154
  }) => {
1043
1155
  const icon = react_exports.useMemo(
1044
1156
  () => /* @__PURE__ */ react_exports.createElement(MarkerIcon, { color, theme: themeColorScheme, onClick: handleLayerClick }),
@@ -1052,7 +1164,8 @@ var Marker2 = react_exports.memo(
1052
1164
  map,
1053
1165
  additionalFields,
1054
1166
  "data-test-type": "marker",
1055
- showCoordinates
1167
+ showCoordinates,
1168
+ tooltipHeader
1056
1169
  },
1057
1170
  icon
1058
1171
  );
@@ -1065,6 +1178,7 @@ var StyledMarkerWrapper2 = styled_components_default(MarkerWrapper_default)`
1065
1178
  cursor: pointer;
1066
1179
  `;
1067
1180
  var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop, showCoordinates) => {
1181
+ var _a;
1068
1182
  const latArray = markerLayer.latitude;
1069
1183
  const lonArray = markerLayer.longitude;
1070
1184
  const isStaticColor = !markerLayer.dataColors;
@@ -1078,13 +1192,14 @@ var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop,
1078
1192
  const staticColor = markerLayer.seriesColors && (0, colorUtils_exports.isColor)(markerLayer.seriesColors[0]) ? markerLayer.seriesColors[0] : DEFAULT_CLUSTER_COLOR;
1079
1193
  const dynamicColor = markerLayer.dataColors && (0, colorUtils_exports.isColor)(markerLayer.dataColors[i]) ? markerLayer.dataColors[i] : DEFAULT_CLUSTER_COLOR;
1080
1194
  const color = isStaticColor ? staticColor : dynamicColor;
1081
- const additionalFields = markerLayer.metadata ? markerLayer.additionalTooltipFields.map((field) => ({
1195
+ const tooltipHeader = markerLayer.tooltipHeaderField && markerLayer.tooltipHeaderField[i];
1196
+ const additionalFields = ((_a = markerLayer.metadata) == null ? void 0 : _a[i]) ? markerLayer.additionalTooltipFields.map((field) => ({
1082
1197
  name: field,
1083
1198
  value: markerLayer.metadata[i][field]
1084
1199
  })) : [];
1085
1200
  const handleLayerClick = (e) => {
1086
- var _a;
1087
- const metadata = (_a = markerLayer == null ? void 0 : markerLayer.metadata[i]) != null ? _a : {};
1201
+ var _a2;
1202
+ const metadata = (_a2 = markerLayer == null ? void 0 : markerLayer.metadata[i]) != null ? _a2 : {};
1088
1203
  const payload = Object.keys(metadata).reduce((acc, curr) => {
1089
1204
  const key = `row.${curr}.value`;
1090
1205
  const value = String(metadata[curr]);
@@ -1097,6 +1212,7 @@ var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop,
1097
1212
  longitude: lonArray[i],
1098
1213
  color,
1099
1214
  additionalFields,
1215
+ tooltipHeader,
1100
1216
  handleLayerClick,
1101
1217
  showCoordinates
1102
1218
  });
@@ -1175,7 +1291,7 @@ var compareGeom = (prev, next) => {
1175
1291
  return prev === null && next === null;
1176
1292
  };
1177
1293
  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();
1294
+ 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
1295
  };
1180
1296
  var cleanupChoropleth = (shapeId, sourceId, strokeId, map) => {
1181
1297
  var _a, _b, _c;
@@ -1211,6 +1327,7 @@ var Choropleth = react_exports.memo(
1211
1327
  strokeColor,
1212
1328
  isThemeChanged,
1213
1329
  additionalFields,
1330
+ tooltipHeader,
1214
1331
  handleMapClick
1215
1332
  }) => {
1216
1333
  const sourceId = getSourceId(id);
@@ -1284,6 +1401,7 @@ var Choropleth = react_exports.memo(
1284
1401
  {
1285
1402
  isChoroplethTooltipOpen: isTooltipOpen,
1286
1403
  additionalFields,
1404
+ tooltipHeader,
1287
1405
  latitude: mouseLat,
1288
1406
  longitude: mouseLng,
1289
1407
  map,
@@ -1316,6 +1434,7 @@ var ChoroplethLayer = (props) => {
1316
1434
  value: choroplethMetadata[field]
1317
1435
  }))
1318
1436
  ) : [];
1437
+ const tooltipHeaderField = (choroplethLayer == null ? void 0 : choroplethLayer.tooltipHeaderField) || null;
1319
1438
  const handleMapClick = (e, i) => {
1320
1439
  const payload = formatMetadata(choroplethLayer, i);
1321
1440
  onMapClick({ e, payload });
@@ -1343,6 +1462,7 @@ var ChoroplethLayer = (props) => {
1343
1462
  areaId,
1344
1463
  areaValue,
1345
1464
  additionalFields: additionalFields[i],
1465
+ tooltipHeader: tooltipHeaderField && tooltipHeaderField[i],
1346
1466
  handleMapClick: (e) => handleMapClick(e, i)
1347
1467
  }
1348
1468
  );
@@ -1355,27 +1475,27 @@ var Message_exports = {};
1355
1475
  __export(Message_exports, {
1356
1476
  default: () => Message_default
1357
1477
  });
1358
- var defaultImport20 = __toESM(require("@splunk/visualizations-shared/Message"));
1478
+ var defaultImport24 = __toESM(require("@splunk/visualizations-shared/Message"));
1359
1479
  __reExport(Message_exports, require("@splunk/visualizations-shared/Message"));
1360
- var Message_default = "default" in defaultImport20 ? defaultImport20.default : defaultImport20;
1480
+ var Message_default = "default" in defaultImport24 ? defaultImport24.default : defaultImport24;
1361
1481
 
1362
1482
  // esm-externals:@splunk/visualization-context/GeoRegistry
1363
1483
  var GeoRegistry_exports = {};
1364
1484
  __export(GeoRegistry_exports, {
1365
1485
  default: () => GeoRegistry_default
1366
1486
  });
1367
- var defaultImport21 = __toESM(require("@splunk/visualization-context/GeoRegistry"));
1487
+ var defaultImport25 = __toESM(require("@splunk/visualization-context/GeoRegistry"));
1368
1488
  __reExport(GeoRegistry_exports, require("@splunk/visualization-context/GeoRegistry"));
1369
- var GeoRegistry_default = "default" in defaultImport21 ? defaultImport21.default : defaultImport21;
1489
+ var GeoRegistry_default = "default" in defaultImport25 ? defaultImport25.default : defaultImport25;
1370
1490
 
1371
1491
  // esm-externals:@splunk/visualization-context/GeoJsonProvider
1372
1492
  var GeoJsonProvider_exports = {};
1373
1493
  __export(GeoJsonProvider_exports, {
1374
1494
  default: () => GeoJsonProvider_default
1375
1495
  });
1376
- var defaultImport22 = __toESM(require("@splunk/visualization-context/GeoJsonProvider"));
1496
+ var defaultImport26 = __toESM(require("@splunk/visualization-context/GeoJsonProvider"));
1377
1497
  __reExport(GeoJsonProvider_exports, require("@splunk/visualization-context/GeoJsonProvider"));
1378
- var GeoJsonProvider_default = "default" in defaultImport22 ? defaultImport22.default : defaultImport22;
1498
+ var GeoJsonProvider_default = "default" in defaultImport26 ? defaultImport26.default : defaultImport26;
1379
1499
 
1380
1500
  // src/Map/PureMap/LocalChoroplethLayer.tsx
1381
1501
  var LocalChoroplethLayer = (props) => {
@@ -1486,7 +1606,8 @@ var LocalChoroplethLayer = (props) => {
1486
1606
  handleMapClick: (e) => handleMapClick(e, el.idx),
1487
1607
  isThemeChanged,
1488
1608
  geomData: geoJson.features[i].geometry,
1489
- additionalFields: additionalFields[el.idx]
1609
+ additionalFields: additionalFields[el.idx],
1610
+ tooltipHeader: choroplethLayer.tooltipHeaderField && choroplethLayer.tooltipHeaderField[el.idx]
1490
1611
  }
1491
1612
  );
1492
1613
  }));
@@ -1877,6 +1998,7 @@ PureMap.propTypes = {
1877
1998
  dataColors: prop_types_exports.oneOfType([prop_types_exports.string, prop_types_exports.arrayOf(prop_types_exports.string)]),
1878
1999
  seriesColors: prop_types_exports.arrayOf(prop_types_exports.string),
1879
2000
  additionalTooltipFields: prop_types_exports.arrayOf(prop_types_exports.string),
2001
+ tooltipHeaderField: prop_types_exports.arrayOf(prop_types_exports.string),
1880
2002
  resultLimit: prop_types_exports.number,
1881
2003
  source: prop_types_exports.string,
1882
2004
  choroplethEmptyAreaColor: prop_types_exports.string
@@ -1911,50 +2033,41 @@ PureMap.defaultProps = {
1911
2033
  };
1912
2034
  var PureMap_default = PureMap;
1913
2035
 
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
2036
  // esm-externals:@splunk/visualization-color-palettes/editors/PresetPalettes
1924
2037
  var PresetPalettes_exports = {};
1925
2038
  __export(PresetPalettes_exports, {
1926
2039
  default: () => PresetPalettes_default
1927
2040
  });
1928
- var defaultImport24 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
2041
+ var defaultImport27 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
1929
2042
  __reExport(PresetPalettes_exports, require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
1930
- var PresetPalettes_default = "default" in defaultImport24 ? defaultImport24.default : defaultImport24;
2043
+ var PresetPalettes_default = "default" in defaultImport27 ? defaultImport27.default : defaultImport27;
1931
2044
 
1932
2045
  // esm-externals:@splunk/visualization-icons
1933
2046
  var visualization_icons_exports = {};
1934
2047
  __export(visualization_icons_exports, {
1935
2048
  default: () => visualization_icons_default
1936
2049
  });
1937
- var defaultImport25 = __toESM(require("@splunk/visualization-icons"));
2050
+ var defaultImport28 = __toESM(require("@splunk/visualization-icons"));
1938
2051
  __reExport(visualization_icons_exports, require("@splunk/visualization-icons"));
1939
- var visualization_icons_default = "default" in defaultImport25 ? defaultImport25.default : defaultImport25;
2052
+ var visualization_icons_default = "default" in defaultImport28 ? defaultImport28.default : defaultImport28;
1940
2053
 
1941
2054
  // esm-externals:@splunk/visualization-icons/placeholders
1942
2055
  var placeholders_exports = {};
1943
2056
  __export(placeholders_exports, {
1944
2057
  default: () => placeholders_default
1945
2058
  });
1946
- var defaultImport26 = __toESM(require("@splunk/visualization-icons/placeholders"));
2059
+ var defaultImport29 = __toESM(require("@splunk/visualization-icons/placeholders"));
1947
2060
  __reExport(placeholders_exports, require("@splunk/visualization-icons/placeholders"));
1948
- var placeholders_default = "default" in defaultImport26 ? defaultImport26.default : defaultImport26;
2061
+ var placeholders_default = "default" in defaultImport29 ? defaultImport29.default : defaultImport29;
1949
2062
 
1950
2063
  // esm-externals:@splunk/visualizations-shared/configUtils
1951
2064
  var configUtils_exports = {};
1952
2065
  __export(configUtils_exports, {
1953
2066
  default: () => configUtils_default
1954
2067
  });
1955
- var defaultImport27 = __toESM(require("@splunk/visualizations-shared/configUtils"));
2068
+ var defaultImport30 = __toESM(require("@splunk/visualizations-shared/configUtils"));
1956
2069
  __reExport(configUtils_exports, require("@splunk/visualizations-shared/configUtils"));
1957
- var configUtils_default = "default" in defaultImport27 ? defaultImport27.default : defaultImport27;
2070
+ var configUtils_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
1958
2071
 
1959
2072
  // src/common/utils/configUtils.ts
1960
2073
  function enhanceConfig(vizConfig) {
@@ -2146,6 +2259,17 @@ var editorConfig = [
2146
2259
  editor: "editor.columnMultiSelectionByFieldNameEditor"
2147
2260
  }
2148
2261
  ],
2262
+ [
2263
+ {
2264
+ label: (0, i18n_exports._)("Tooltip header field"),
2265
+ option: "layers[0].tooltipHeaderField",
2266
+ editor: "editor.columnSelector",
2267
+ editorProps: {
2268
+ dataSourceKey: "primary",
2269
+ shouldShowInternalFields: false
2270
+ }
2271
+ }
2272
+ ],
2149
2273
  [
2150
2274
  {
2151
2275
  label: (0, i18n_exports._)("Result limit"),
@@ -2433,72 +2557,63 @@ var getSettingsFromThemedProps_exports = {};
2433
2557
  __export(getSettingsFromThemedProps_exports, {
2434
2558
  default: () => getSettingsFromThemedProps_default
2435
2559
  });
2436
- var defaultImport28 = __toESM(require("@splunk/themes/getSettingsFromThemedProps"));
2560
+ var defaultImport31 = __toESM(require("@splunk/themes/getSettingsFromThemedProps"));
2437
2561
  __reExport(getSettingsFromThemedProps_exports, require("@splunk/themes/getSettingsFromThemedProps"));
2438
- var getSettingsFromThemedProps_default = "default" in defaultImport28 ? defaultImport28.default : defaultImport28;
2562
+ var getSettingsFromThemedProps_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
2439
2563
 
2440
2564
  // esm-externals:@splunk/visualization-encoding/Options
2441
2565
  var Options_exports = {};
2442
2566
  __export(Options_exports, {
2443
2567
  default: () => Options_default
2444
2568
  });
2445
- var defaultImport29 = __toESM(require("@splunk/visualization-encoding/Options"));
2569
+ var defaultImport32 = __toESM(require("@splunk/visualization-encoding/Options"));
2446
2570
  __reExport(Options_exports, require("@splunk/visualization-encoding/Options"));
2447
- var Options_default = "default" in defaultImport29 ? defaultImport29.default : defaultImport29;
2571
+ var Options_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2448
2572
 
2449
2573
  // esm-externals:@splunk/visualizations-shared/SanitizeProps
2450
2574
  var SanitizeProps_exports = {};
2451
2575
  __export(SanitizeProps_exports, {
2452
2576
  default: () => SanitizeProps_default
2453
2577
  });
2454
- var defaultImport30 = __toESM(require("@splunk/visualizations-shared/SanitizeProps"));
2578
+ var defaultImport33 = __toESM(require("@splunk/visualizations-shared/SanitizeProps"));
2455
2579
  __reExport(SanitizeProps_exports, require("@splunk/visualizations-shared/SanitizeProps"));
2456
- var SanitizeProps_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
2580
+ var SanitizeProps_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2457
2581
 
2458
2582
  // esm-externals:@splunk/visualization-context/TimezoneContext
2459
2583
  var TimezoneContext_exports = {};
2460
2584
  __export(TimezoneContext_exports, {
2461
2585
  default: () => TimezoneContext_default
2462
2586
  });
2463
- var defaultImport31 = __toESM(require("@splunk/visualization-context/TimezoneContext"));
2587
+ var defaultImport34 = __toESM(require("@splunk/visualization-context/TimezoneContext"));
2464
2588
  __reExport(TimezoneContext_exports, require("@splunk/visualization-context/TimezoneContext"));
2465
- var TimezoneContext_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
2589
+ var TimezoneContext_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
2466
2590
 
2467
2591
  // esm-externals:@splunk/moment
2468
2592
  var moment_exports = {};
2469
2593
  __export(moment_exports, {
2470
2594
  default: () => moment_default
2471
2595
  });
2472
- var defaultImport32 = __toESM(require("@splunk/moment"));
2596
+ var defaultImport35 = __toESM(require("@splunk/moment"));
2473
2597
  __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;
2598
+ var moment_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
2484
2599
 
2485
2600
  // esm-externals:@splunk/async-dynamic-options-evaluator
2486
2601
  var async_dynamic_options_evaluator_exports = {};
2487
2602
  __export(async_dynamic_options_evaluator_exports, {
2488
2603
  default: () => async_dynamic_options_evaluator_default
2489
2604
  });
2490
- var defaultImport34 = __toESM(require("@splunk/async-dynamic-options-evaluator"));
2605
+ var defaultImport36 = __toESM(require("@splunk/async-dynamic-options-evaluator"));
2491
2606
  __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;
2607
+ var async_dynamic_options_evaluator_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
2493
2608
 
2494
2609
  // esm-externals:@splunk/ui-utils/id
2495
2610
  var id_exports = {};
2496
2611
  __export(id_exports, {
2497
2612
  default: () => id_default
2498
2613
  });
2499
- var defaultImport35 = __toESM(require("@splunk/ui-utils/id"));
2614
+ var defaultImport37 = __toESM(require("@splunk/ui-utils/id"));
2500
2615
  __reExport(id_exports, require("@splunk/ui-utils/id"));
2501
- var id_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
2616
+ var id_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
2502
2617
 
2503
2618
  // src/common/interfaces/VizActionHandler.ts
2504
2619
  var DefaultVizActionHandler = class {
@@ -2706,9 +2821,9 @@ var SizeAwareWrapper_exports = {};
2706
2821
  __export(SizeAwareWrapper_exports, {
2707
2822
  default: () => SizeAwareWrapper_default
2708
2823
  });
2709
- var defaultImport36 = __toESM(require("@splunk/visualizations-shared/SizeAwareWrapper"));
2824
+ var defaultImport38 = __toESM(require("@splunk/visualizations-shared/SizeAwareWrapper"));
2710
2825
  __reExport(SizeAwareWrapper_exports, require("@splunk/visualizations-shared/SizeAwareWrapper"));
2711
- var SizeAwareWrapper_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
2826
+ var SizeAwareWrapper_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
2712
2827
 
2713
2828
  // src/common/hocs/FixedSizeContainer.tsx
2714
2829
  var Item = styled_components_default.div.attrs(({ width }) => ({
@@ -2755,7 +2870,7 @@ var withFixedSizeContainer = (Viz) => {
2755
2870
  FixSizeItem,
2756
2871
  {
2757
2872
  "data-test": "fix-size-item",
2758
- "data-splunk-visualization-version": "27.4.0 - 92ef39d5c",
2873
+ "data-splunk-visualization-version": "27.5.0 - 5cfbc7064",
2759
2874
  width,
2760
2875
  height,
2761
2876
  backgroundColor
@@ -2821,7 +2936,7 @@ var Cover = styled_components_default.div`
2821
2936
  bottom: 0;
2822
2937
  `;
2823
2938
  var Blocker = styled_components_default.div.attrs({
2824
- "data-splunk-visualization-version": "27.4.0 - 92ef39d5c"
2939
+ "data-splunk-visualization-version": "27.5.0 - 5cfbc7064"
2825
2940
  })`
2826
2941
  position: relative;
2827
2942
  width: 100%;
@@ -2843,9 +2958,9 @@ var variables_exports = {};
2843
2958
  __export(variables_exports, {
2844
2959
  default: () => variables_default
2845
2960
  });
2846
- var defaultImport37 = __toESM(require("@splunk/themes/variables"));
2961
+ var defaultImport39 = __toESM(require("@splunk/themes/variables"));
2847
2962
  __reExport(variables_exports, require("@splunk/themes/variables"));
2848
- var variables_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
2963
+ var variables_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
2849
2964
 
2850
2965
  // src/common/components/IconPlaceholder.tsx
2851
2966
  var shouldShowIconPlaceholder = (dataSources, loading = false) => {
@@ -2925,9 +3040,9 @@ var numberUtils_exports = {};
2925
3040
  __export(numberUtils_exports, {
2926
3041
  default: () => numberUtils_default
2927
3042
  });
2928
- var defaultImport38 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
3043
+ var defaultImport40 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
2929
3044
  __reExport(numberUtils_exports, require("@splunk/visualizations-shared/numberUtils"));
2930
- var numberUtils_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
3045
+ var numberUtils_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
2931
3046
 
2932
3047
  // src/common/utils/dataUtils.ts
2933
3048
  var convertToArrOfObjects = (columns, fields) => {
@@ -3319,9 +3434,9 @@ var FeatureFlags_exports = {};
3319
3434
  __export(FeatureFlags_exports, {
3320
3435
  default: () => FeatureFlags_default
3321
3436
  });
3322
- var defaultImport39 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
3437
+ var defaultImport41 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
3323
3438
  __reExport(FeatureFlags_exports, require("@splunk/visualization-context/FeatureFlags"));
3324
- var FeatureFlags_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
3439
+ var FeatureFlags_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
3325
3440
 
3326
3441
  // src/common/utils/featureFlagUtils.ts
3327
3442
  var getFeatureFlag = (context, flagName) => {
@@ -3339,9 +3454,9 @@ var trellisUtils_exports = {};
3339
3454
  __export(trellisUtils_exports, {
3340
3455
  default: () => trellisUtils_default
3341
3456
  });
3342
- var defaultImport40 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3457
+ var defaultImport42 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3343
3458
  __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
3344
- var trellisUtils_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
3459
+ var trellisUtils_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
3345
3460
 
3346
3461
  // src/common/utils/trellisUtils.ts
3347
3462
  var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
@@ -3622,9 +3737,9 @@ var dsl_exports = {};
3622
3737
  __export(dsl_exports, {
3623
3738
  default: () => dsl_default
3624
3739
  });
3625
- var defaultImport41 = __toESM(require("@splunk/visualization-encoding/utils/dsl"));
3740
+ var defaultImport43 = __toESM(require("@splunk/visualization-encoding/utils/dsl"));
3626
3741
  __reExport(dsl_exports, require("@splunk/visualization-encoding/utils/dsl"));
3627
- var dsl_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
3742
+ var dsl_default = "default" in defaultImport43 ? defaultImport43.default : defaultImport43;
3628
3743
 
3629
3744
  // src/common/utils/mapUtils.ts
3630
3745
  var columnsNullToZeros = (config2, dataSources, options) => {
@@ -3640,7 +3755,17 @@ var columnsNullToZeros = (config2, dataSources, options) => {
3640
3755
  if (((_b = (_a = mergedOptions.layers) == null ? void 0 : _a[0]) == null ? void 0 : _b.type) === "bubble") {
3641
3756
  const latitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].latitude, dataSources)[0] || "";
3642
3757
  const longitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].longitude, dataSources)[0] || "";
3643
- const excludedFields = [latitudeField, longitudeField, "geobin"].concat(GEO_LAT_AND_LONG_FIELD);
3758
+ const stringsFields = (0, dsl_exports.getFieldsFromDSL)("> primary | frameBySeriesTypes('string')", dataSources);
3759
+ const excludedFields = Array.from(
3760
+ /* @__PURE__ */ new Set([
3761
+ latitudeField,
3762
+ longitudeField,
3763
+ "geobin",
3764
+ "name",
3765
+ ...stringsFields,
3766
+ ...GEO_LAT_AND_LONG_FIELD
3767
+ ])
3768
+ );
3644
3769
  const indicesToEvaluate = new Set(
3645
3770
  fields.reduce((arr, e, i) => {
3646
3771
  const field = typeof e === "string" ? e : e.name.toString();
@@ -3721,6 +3846,7 @@ var withTooltipFields = (Viz) => {
3721
3846
  if (((_c = (_b2 = mergedOptions.layers) == null ? void 0 : _b2[0]) == null ? void 0 : _c.type) === "bubble") {
3722
3847
  mergedOptions.layers[0].bubbleSizeFields = "> bubbleSize | getField()";
3723
3848
  mergedOptions.layers[0].dataValuesField = "> dataValues | getField()";
3849
+ mergedOptions.layers[0].tooltipHeaderFieldName = "> tooltipHeaderField | getField()";
3724
3850
  }
3725
3851
  const { fields } = dataSources.primary.data;
3726
3852
  if (Array.isArray(mergedOptions.layers[0].additionalTooltipFields) && Array.isArray(fields) && fields.length) {