@splunk/visualizations 27.3.0 → 27.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/Area.config.js +24 -3
  2. package/Area.config.js.map +2 -2
  3. package/Area.js +53 -9
  4. package/Area.js.map +2 -2
  5. package/Bar.config.js +24 -3
  6. package/Bar.config.js.map +3 -3
  7. package/Bar.js +54 -11
  8. package/Bar.js.map +3 -3
  9. package/Bubble.config.js +8 -1
  10. package/Bubble.config.js.map +2 -2
  11. package/Bubble.js +17 -6
  12. package/Bubble.js.map +2 -2
  13. package/CHANGELOG.external.md +1629 -0
  14. package/ChoroplethSvg.js +2 -2
  15. package/Column.config.js +24 -3
  16. package/Column.config.js.map +3 -3
  17. package/Column.js +53 -9
  18. package/Column.js.map +3 -3
  19. package/Ellipse.js +65 -7
  20. package/Ellipse.js.map +4 -4
  21. package/Events.js +11 -6
  22. package/Events.js.map +2 -2
  23. package/FEATUREFLAGS.md +2 -0
  24. package/FillerGauge.config.js +8 -28
  25. package/FillerGauge.config.js.map +2 -2
  26. package/FillerGauge.js +10 -30
  27. package/FillerGauge.js.map +2 -2
  28. package/Image.js +2 -2
  29. package/Line.config.js +24 -3
  30. package/Line.config.js.map +3 -3
  31. package/Line.js +53 -9
  32. package/Line.js.map +3 -3
  33. package/LinkGraph.js +2 -2
  34. package/Map.config.js +22 -0
  35. package/Map.config.js.map +2 -2
  36. package/Map.js +284 -121
  37. package/Map.js.map +4 -4
  38. package/Markdown.js +2 -2
  39. package/MarkerGauge.config.js +8 -25
  40. package/MarkerGauge.config.js.map +2 -2
  41. package/MarkerGauge.js +10 -27
  42. package/MarkerGauge.js.map +2 -2
  43. package/ParallelCoordinates.js +2 -2
  44. package/ParallelCoordinates.js.map +1 -1
  45. package/Pie.config.js +123 -3
  46. package/Pie.config.js.map +3 -3
  47. package/Pie.js +743 -19
  48. package/Pie.js.map +4 -4
  49. package/Punchcard.js +2 -2
  50. package/Punchcard.js.map +1 -1
  51. package/Rectangle.js +64 -7
  52. package/Rectangle.js.map +4 -4
  53. package/Sankey.js +36 -35
  54. package/Sankey.js.map +3 -3
  55. package/Scatter.config.js +320 -113
  56. package/Scatter.config.js.map +4 -4
  57. package/Scatter.js +936 -128
  58. package/Scatter.js.map +4 -4
  59. package/SingleValue.js +3 -3
  60. package/SingleValue.js.map +2 -2
  61. package/SingleValueBasic.js.map +1 -1
  62. package/SingleValueIcon.js +3 -3
  63. package/SingleValueIcon.js.map +2 -2
  64. package/SingleValueRadial.js +3 -3
  65. package/SingleValueRadial.js.map +2 -2
  66. package/TRELLIS.md +12 -3
  67. package/Table.js +2 -2
  68. package/Timeline.js +81 -63
  69. package/Timeline.js.map +4 -4
  70. package/common/Charting.js +7 -3
  71. package/common/Charting.js.map +2 -2
  72. package/common/chartingUtils.js +11 -0
  73. package/common/chartingUtils.js.map +2 -2
  74. package/common/shapeUtils.js +85 -3
  75. package/common/shapeUtils.js.map +4 -4
  76. package/common/utils/mapUtils.js +169 -48
  77. package/common/utils/mapUtils.js.map +4 -4
  78. package/common/utils/singleValueUtils.js +1 -1
  79. package/common/utils/singleValueUtils.js.map +2 -2
  80. package/common/withDashboardViz.js +2 -2
  81. package/package.json +18 -18
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);
@@ -691,18 +752,26 @@ var Tooltip = ({
691
752
  longitude,
692
753
  areaId,
693
754
  areaValue,
694
- additionalFields = []
695
- }) => /* @__PURE__ */ react_exports.createElement(
696
- StyledPopover,
697
- {
698
- open,
699
- animation: false,
700
- anchor,
701
- "data-test": "map-marker-tooltip",
702
- defaultPlacement: "above"
703
- },
704
- /* @__PURE__ */ react_exports.createElement(StyledTable, null, /* @__PURE__ */ react_exports.createElement("tbody", null, areaId && areaValue && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, { "data-test": "area-id" }, areaId), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "area-value" }, areaValue)), latitude && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, null, (0, i18n_exports._)("Latitude")), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "latitude" }, convertDegToDMS(latitude, "latitude"))), longitude && /* @__PURE__ */ react_exports.createElement("tr", null, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, null, (0, i18n_exports._)("Longitude")), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "longitude" }, convertDegToDMS(longitude, "longitude"))), additionalFields.filter(({ value }) => value && String(value) !== "0").map(({ name, value, color }, index) => /* @__PURE__ */ react_exports.createElement("tr", { key: String(index) }, /* @__PURE__ */ react_exports.createElement(StyledTitleColumn, { "data-test": "field-title" }, color ? /* @__PURE__ */ react_exports.createElement(StyledColorBlock, { "data-test": "field-color", color }) : null, name), /* @__PURE__ */ react_exports.createElement(StyledValueColumn, { "data-test": "field-value" }, value)))))
705
- );
755
+ additionalFields = [],
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
+ };
706
775
  var Tooltip_default = Tooltip;
707
776
 
708
777
  // src/Map/PureMap/MarkerWrapper.tsx
@@ -713,18 +782,22 @@ var MarkerWrapper = (_a) => {
713
782
  areaId,
714
783
  areaValue,
715
784
  additionalFields = [],
785
+ tooltipHeader = null,
716
786
  map,
717
787
  isChoroplethTooltipOpen,
718
- children
788
+ children,
789
+ showCoordinates = true
719
790
  } = _b, otherProps = __objRest(_b, [
720
791
  "longitude",
721
792
  "latitude",
722
793
  "areaId",
723
794
  "areaValue",
724
795
  "additionalFields",
796
+ "tooltipHeader",
725
797
  "map",
726
798
  "isChoroplethTooltipOpen",
727
- "children"
799
+ "children",
800
+ "showCoordinates"
728
801
  ]);
729
802
  const container = react_exports.useRef();
730
803
  const marker = react_exports.useRef();
@@ -755,6 +828,8 @@ var MarkerWrapper = (_a) => {
755
828
  }
756
829
  }, [latitude, longitude, map]);
757
830
  react_exports.useEffect(() => cleanupMarker, []);
831
+ const filteredAdditionalFields = additionalFields.filter(({ value }) => value && String(value) !== "0");
832
+ const showTooltip = showCoordinates || filteredAdditionalFields.length || areaId && areaValue;
758
833
  return /* @__PURE__ */ react_exports.createElement("div", { style: { visibility: isChoroplethTooltip() ? "hidden" : "visible" } }, /* @__PURE__ */ react_exports.createElement(
759
834
  "div",
760
835
  __spreadValues({
@@ -767,7 +842,7 @@ var MarkerWrapper = (_a) => {
767
842
  onBlur: closeTooltip
768
843
  }, otherProps),
769
844
  children
770
- ), /* @__PURE__ */ react_exports.createElement("div", null, /* @__PURE__ */ react_exports.createElement(
845
+ ), /* @__PURE__ */ react_exports.createElement("div", null, showTooltip && /* @__PURE__ */ react_exports.createElement(
771
846
  Tooltip_default,
772
847
  {
773
848
  open: isChoroplethTooltip() ? isChoroplethTooltipOpen : isTooltipOpen,
@@ -776,7 +851,9 @@ var MarkerWrapper = (_a) => {
776
851
  longitude: isChoroplethTooltip() ? null : longitude,
777
852
  areaId,
778
853
  areaValue,
779
- additionalFields
854
+ additionalFields,
855
+ showCoordinates,
856
+ tooltipHeader
780
857
  }
781
858
  )));
782
859
  };
@@ -785,6 +862,7 @@ var MarkerWrapper_default = MarkerWrapper;
785
862
  // src/Map/PureMap/BubbleLayer.tsx
786
863
  var GEO_BOUND_PREFIX = "_geo_bounds_";
787
864
  var GEO_LAT_AND_LONG_FIELD = ["_geo_long_field", "_geo_lat_field"];
865
+ var ICON_DISPLAY_CUTOFF = 16;
788
866
  var PieSegment = react_exports.memo(
789
867
  ({
790
868
  start,
@@ -853,9 +931,16 @@ var Bubble = react_exports.memo(
853
931
  longitude,
854
932
  bubbleSize,
855
933
  additionalFields = [],
934
+ tooltipHeader = null,
856
935
  map,
857
- handleMapClick
936
+ handleMapClick,
937
+ icon,
938
+ showCoordinates
858
939
  }) => {
940
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
941
+ const isBubbleMapIconFlagEnabled = Boolean(
942
+ featureFlagContext && featureFlagContext.visualizations_enableBubbleMapIcon
943
+ );
859
944
  const onBubbleClick = react_exports.useCallback(
860
945
  (e, name, value) => {
861
946
  handleMapClick(e, name, value);
@@ -863,21 +948,20 @@ var Bubble = react_exports.memo(
863
948
  },
864
949
  [handleMapClick]
865
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);
866
955
  const bubble = react_exports.useMemo(() => {
867
- const allZeros = originalValues.every((v) => v === 0);
868
- if (allZeros || !originalValues.length) {
869
- return null;
870
- }
871
- const values = originalValues.map((v) => v > 0 ? v : 0);
956
+ if (allZeros || !originalValues.length) return null;
872
957
  const offsets = [];
873
- let total = 0;
958
+ let runningTotal = 0;
874
959
  values.forEach((count) => {
875
- offsets.push(total);
876
- total += count;
960
+ offsets.push(runningTotal);
961
+ runningTotal += count;
877
962
  });
878
- const radius = matchBubbleSize(valueRange, total);
879
963
  const width = radius * 2;
880
- 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(
881
965
  "circle",
882
966
  {
883
967
  cx: radius,
@@ -888,7 +972,7 @@ var Bubble = react_exports.memo(
888
972
  stroke: themeColor,
889
973
  strokeOpacity: 0.3
890
974
  }
891
- ) : null, values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
975
+ ), values.map((v, i) => /* @__PURE__ */ react_exports.createElement(
892
976
  PieSegment,
893
977
  {
894
978
  key: String(i),
@@ -901,7 +985,18 @@ var Bubble = react_exports.memo(
901
985
  handleBubbleClick: onBubbleClick
902
986
  }
903
987
  )));
904
- }, [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
+ ]);
905
1000
  if (!bubble) {
906
1001
  return null;
907
1002
  }
@@ -911,25 +1006,42 @@ var Bubble = react_exports.memo(
911
1006
  longitude,
912
1007
  latitude,
913
1008
  additionalFields: [...bubbleSize, ...additionalFields],
1009
+ tooltipHeader,
914
1010
  map,
915
- "data-test-type": "bubble"
1011
+ "data-test-type": "bubble",
1012
+ showCoordinates
916
1013
  },
917
- 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
+ )
918
1029
  );
919
1030
  }
920
1031
  );
921
1032
  Bubble.displayName = "MapBubble";
922
1033
  var BubbleLayer = (props) => {
923
- const { bubbleLayer, themeColorScheme, map, zoom, onMapClick } = props;
1034
+ const { bubbleLayer, themeColorScheme, map, zoom, onMapClick, showCoordinates } = props;
924
1035
  bubbleLayer.seriesColors = bubbleLayer.seriesColors || DEFAULT_SERIES_COLORS;
925
1036
  bubbleLayer.bubbleSize = bubbleLayer.bubbleSize || [];
1037
+ bubbleLayer.icon = bubbleLayer.icon || [];
926
1038
  const bakedData = react_exports.useMemo(() => bakeBubbleData(bubbleLayer), [bubbleLayer]);
927
1039
  const staticColors = react_exports.useMemo(
928
1040
  () => getStaticColors(bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors),
929
1041
  [bubbleLayer.bubbleSize.length, bubbleLayer.seriesColors]
930
1042
  );
931
1043
  const { data = [], dataRange = [], resultLimit, bubbleSizeFields, isPie } = bakedData != null ? bakedData : {};
932
- const { additionalTooltipFields = [] } = bubbleLayer;
1044
+ const { additionalTooltipFields = [], tooltipHeaderFieldName = null } = bubbleLayer;
933
1045
  const roundedZoom = Math.round(zoom);
934
1046
  const themeColor = themeColorScheme === "light" ? "#ffffff" : "#1a1c20";
935
1047
  const dynamicColors = bubbleLayer.dataColors;
@@ -970,10 +1082,15 @@ var BubbleLayer = (props) => {
970
1082
  value,
971
1083
  color: colors[index]
972
1084
  }));
973
- const additionalFields = bubbleLayer.metadata ? additionalTooltipFields.map((field) => ({
974
- name: field,
975
- value: datum.data.metadata[field]
976
- })) : [];
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];
977
1094
  return /* @__PURE__ */ react_exports.createElement(
978
1095
  Bubble,
979
1096
  {
@@ -987,8 +1104,11 @@ var BubbleLayer = (props) => {
987
1104
  latitude,
988
1105
  bubbleSize,
989
1106
  additionalFields,
1107
+ tooltipHeader: tooltipHeaderField,
990
1108
  map,
991
- handleMapClick: (e, name, value) => handleMapClick(e, name, value, i)
1109
+ handleMapClick: (e, name, value) => handleMapClick(e, name, value, i),
1110
+ icon: bubbleLayer.icon[datum.idx],
1111
+ showCoordinates
992
1112
  }
993
1113
  );
994
1114
  }));
@@ -1028,7 +1148,9 @@ var Marker2 = react_exports.memo(
1028
1148
  themeColorScheme,
1029
1149
  map,
1030
1150
  additionalFields,
1031
- handleLayerClick
1151
+ handleLayerClick,
1152
+ showCoordinates,
1153
+ tooltipHeader
1032
1154
  }) => {
1033
1155
  const icon = react_exports.useMemo(
1034
1156
  () => /* @__PURE__ */ react_exports.createElement(MarkerIcon, { color, theme: themeColorScheme, onClick: handleLayerClick }),
@@ -1041,7 +1163,9 @@ var Marker2 = react_exports.memo(
1041
1163
  longitude,
1042
1164
  map,
1043
1165
  additionalFields,
1044
- "data-test-type": "marker"
1166
+ "data-test-type": "marker",
1167
+ showCoordinates,
1168
+ tooltipHeader
1045
1169
  },
1046
1170
  icon
1047
1171
  );
@@ -1053,7 +1177,8 @@ var StyledMarkerWrapper2 = styled_components_default(MarkerWrapper_default)`
1053
1177
  height: 28px;
1054
1178
  cursor: pointer;
1055
1179
  `;
1056
- var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop) => {
1180
+ var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop, showCoordinates) => {
1181
+ var _a;
1057
1182
  const latArray = markerLayer.latitude;
1058
1183
  const lonArray = markerLayer.longitude;
1059
1184
  const isStaticColor = !markerLayer.dataColors;
@@ -1067,13 +1192,14 @@ var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop)
1067
1192
  const staticColor = markerLayer.seriesColors && (0, colorUtils_exports.isColor)(markerLayer.seriesColors[0]) ? markerLayer.seriesColors[0] : DEFAULT_CLUSTER_COLOR;
1068
1193
  const dynamicColor = markerLayer.dataColors && (0, colorUtils_exports.isColor)(markerLayer.dataColors[i]) ? markerLayer.dataColors[i] : DEFAULT_CLUSTER_COLOR;
1069
1194
  const color = isStaticColor ? staticColor : dynamicColor;
1070
- 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) => ({
1071
1197
  name: field,
1072
1198
  value: markerLayer.metadata[i][field]
1073
1199
  })) : [];
1074
1200
  const handleLayerClick = (e) => {
1075
- var _a;
1076
- 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 : {};
1077
1203
  const payload = Object.keys(metadata).reduce((acc, curr) => {
1078
1204
  const key = `row.${curr}.value`;
1079
1205
  const value = String(metadata[curr]);
@@ -1086,19 +1212,30 @@ var generateMarkerWrapperProps = (markerLayer, onMapClick = lodash_exports.noop)
1086
1212
  longitude: lonArray[i],
1087
1213
  color,
1088
1214
  additionalFields,
1089
- handleLayerClick
1215
+ tooltipHeader,
1216
+ handleLayerClick,
1217
+ showCoordinates
1090
1218
  });
1091
1219
  }
1092
1220
  return markerProps;
1093
1221
  };
1094
1222
  var MarkerLayer = (props) => {
1095
- const { map, themeColorScheme, markerLayer, onMapClick } = props;
1223
+ const { map, themeColorScheme, markerLayer, onMapClick, showCoordinates = true } = props;
1096
1224
  markerLayer.seriesColors = markerLayer.seriesColors || DEFAULT_SERIES_COLORS;
1097
- const markerPropsList = react_exports.useMemo(() => generateMarkerWrapperProps(markerLayer, onMapClick), [
1098
- markerLayer,
1099
- onMapClick
1100
- ]);
1101
- return /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null, markerPropsList.map((markerProps, i) => /* @__PURE__ */ react_exports.createElement(Marker2, __spreadValues({ key: String(i), themeColorScheme, map }, markerProps))));
1225
+ const markerPropsList = react_exports.useMemo(
1226
+ () => generateMarkerWrapperProps(markerLayer, onMapClick, showCoordinates),
1227
+ [markerLayer, onMapClick, showCoordinates]
1228
+ );
1229
+ return /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null, markerPropsList.map((markerProps, i) => /* @__PURE__ */ react_exports.createElement(
1230
+ Marker2,
1231
+ __spreadProps(__spreadValues({
1232
+ key: String(i),
1233
+ themeColorScheme,
1234
+ map
1235
+ }, markerProps), {
1236
+ showCoordinates
1237
+ })
1238
+ )));
1102
1239
  };
1103
1240
  var MarkerLayer_default = MarkerLayer;
1104
1241
 
@@ -1108,7 +1245,8 @@ var ClusterLayer = ({
1108
1245
  themeColorScheme,
1109
1246
  zoom,
1110
1247
  map,
1111
- onMapClick
1248
+ onMapClick,
1249
+ showCoordinates
1112
1250
  }) => {
1113
1251
  var _a;
1114
1252
  if (((_a = map == null ? void 0 : map.current) == null ? void 0 : _a.isStyleLoaded) && [clusterLayer.longitude, clusterLayer.latitude].every(Array.isArray)) {
@@ -1119,7 +1257,8 @@ var ClusterLayer = ({
1119
1257
  markerLayer: clusterLayer,
1120
1258
  themeColorScheme,
1121
1259
  map,
1122
- onMapClick
1260
+ onMapClick,
1261
+ showCoordinates
1123
1262
  }
1124
1263
  );
1125
1264
  }
@@ -1131,7 +1270,8 @@ var ClusterLayer = ({
1131
1270
  themeColorScheme,
1132
1271
  map,
1133
1272
  zoom,
1134
- onMapClick
1273
+ onMapClick,
1274
+ showCoordinates
1135
1275
  }
1136
1276
  );
1137
1277
  }
@@ -1151,7 +1291,7 @@ var compareGeom = (prev, next) => {
1151
1291
  return prev === null && next === null;
1152
1292
  };
1153
1293
  var compareChoropleth = (prevProps, nextProps) => {
1154
- 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();
1155
1295
  };
1156
1296
  var cleanupChoropleth = (shapeId, sourceId, strokeId, map) => {
1157
1297
  var _a, _b, _c;
@@ -1187,6 +1327,7 @@ var Choropleth = react_exports.memo(
1187
1327
  strokeColor,
1188
1328
  isThemeChanged,
1189
1329
  additionalFields,
1330
+ tooltipHeader,
1190
1331
  handleMapClick
1191
1332
  }) => {
1192
1333
  const sourceId = getSourceId(id);
@@ -1260,6 +1401,7 @@ var Choropleth = react_exports.memo(
1260
1401
  {
1261
1402
  isChoroplethTooltipOpen: isTooltipOpen,
1262
1403
  additionalFields,
1404
+ tooltipHeader,
1263
1405
  latitude: mouseLat,
1264
1406
  longitude: mouseLng,
1265
1407
  map,
@@ -1292,6 +1434,7 @@ var ChoroplethLayer = (props) => {
1292
1434
  value: choroplethMetadata[field]
1293
1435
  }))
1294
1436
  ) : [];
1437
+ const tooltipHeaderField = (choroplethLayer == null ? void 0 : choroplethLayer.tooltipHeaderField) || null;
1295
1438
  const handleMapClick = (e, i) => {
1296
1439
  const payload = formatMetadata(choroplethLayer, i);
1297
1440
  onMapClick({ e, payload });
@@ -1319,6 +1462,7 @@ var ChoroplethLayer = (props) => {
1319
1462
  areaId,
1320
1463
  areaValue,
1321
1464
  additionalFields: additionalFields[i],
1465
+ tooltipHeader: tooltipHeaderField && tooltipHeaderField[i],
1322
1466
  handleMapClick: (e) => handleMapClick(e, i)
1323
1467
  }
1324
1468
  );
@@ -1331,27 +1475,27 @@ var Message_exports = {};
1331
1475
  __export(Message_exports, {
1332
1476
  default: () => Message_default
1333
1477
  });
1334
- var defaultImport20 = __toESM(require("@splunk/visualizations-shared/Message"));
1478
+ var defaultImport24 = __toESM(require("@splunk/visualizations-shared/Message"));
1335
1479
  __reExport(Message_exports, require("@splunk/visualizations-shared/Message"));
1336
- var Message_default = "default" in defaultImport20 ? defaultImport20.default : defaultImport20;
1480
+ var Message_default = "default" in defaultImport24 ? defaultImport24.default : defaultImport24;
1337
1481
 
1338
1482
  // esm-externals:@splunk/visualization-context/GeoRegistry
1339
1483
  var GeoRegistry_exports = {};
1340
1484
  __export(GeoRegistry_exports, {
1341
1485
  default: () => GeoRegistry_default
1342
1486
  });
1343
- var defaultImport21 = __toESM(require("@splunk/visualization-context/GeoRegistry"));
1487
+ var defaultImport25 = __toESM(require("@splunk/visualization-context/GeoRegistry"));
1344
1488
  __reExport(GeoRegistry_exports, require("@splunk/visualization-context/GeoRegistry"));
1345
- var GeoRegistry_default = "default" in defaultImport21 ? defaultImport21.default : defaultImport21;
1489
+ var GeoRegistry_default = "default" in defaultImport25 ? defaultImport25.default : defaultImport25;
1346
1490
 
1347
1491
  // esm-externals:@splunk/visualization-context/GeoJsonProvider
1348
1492
  var GeoJsonProvider_exports = {};
1349
1493
  __export(GeoJsonProvider_exports, {
1350
1494
  default: () => GeoJsonProvider_default
1351
1495
  });
1352
- var defaultImport22 = __toESM(require("@splunk/visualization-context/GeoJsonProvider"));
1496
+ var defaultImport26 = __toESM(require("@splunk/visualization-context/GeoJsonProvider"));
1353
1497
  __reExport(GeoJsonProvider_exports, require("@splunk/visualization-context/GeoJsonProvider"));
1354
- var GeoJsonProvider_default = "default" in defaultImport22 ? defaultImport22.default : defaultImport22;
1498
+ var GeoJsonProvider_default = "default" in defaultImport26 ? defaultImport26.default : defaultImport26;
1355
1499
 
1356
1500
  // src/Map/PureMap/LocalChoroplethLayer.tsx
1357
1501
  var LocalChoroplethLayer = (props) => {
@@ -1462,7 +1606,8 @@ var LocalChoroplethLayer = (props) => {
1462
1606
  handleMapClick: (e) => handleMapClick(e, el.idx),
1463
1607
  isThemeChanged,
1464
1608
  geomData: geoJson.features[i].geometry,
1465
- additionalFields: additionalFields[el.idx]
1609
+ additionalFields: additionalFields[el.idx],
1610
+ tooltipHeader: choroplethLayer.tooltipHeaderField && choroplethLayer.tooltipHeaderField[el.idx]
1466
1611
  }
1467
1612
  );
1468
1613
  }));
@@ -1522,7 +1667,8 @@ var PureMap = (props) => {
1522
1667
  onMapLoad,
1523
1668
  onMapClick,
1524
1669
  onOptionsChange,
1525
- title
1670
+ title,
1671
+ showCoordinates
1526
1672
  } = props;
1527
1673
  const { defaultTileConfig, customTileConfig } = (0, react_exports.useContext)(MapContext_default);
1528
1674
  const basemapContainer = (0, react_exports.useRef)(null);
@@ -1788,7 +1934,8 @@ var PureMap = (props) => {
1788
1934
  themeColorScheme,
1789
1935
  map,
1790
1936
  zoom: currentZoomLevel,
1791
- onMapClick
1937
+ onMapClick,
1938
+ showCoordinates
1792
1939
  }
1793
1940
  ),
1794
1941
  isMapLoaded && layer && layer.type === visualization_schemas_exports.LAYER_TYPE.Choropleth && layer.source && /* @__PURE__ */ react_exports.createElement(
@@ -1851,6 +1998,7 @@ PureMap.propTypes = {
1851
1998
  dataColors: prop_types_exports.oneOfType([prop_types_exports.string, prop_types_exports.arrayOf(prop_types_exports.string)]),
1852
1999
  seriesColors: prop_types_exports.arrayOf(prop_types_exports.string),
1853
2000
  additionalTooltipFields: prop_types_exports.arrayOf(prop_types_exports.string),
2001
+ tooltipHeaderField: prop_types_exports.arrayOf(prop_types_exports.string),
1854
2002
  resultLimit: prop_types_exports.number,
1855
2003
  source: prop_types_exports.string,
1856
2004
  choroplethEmptyAreaColor: prop_types_exports.string
@@ -1885,50 +2033,41 @@ PureMap.defaultProps = {
1885
2033
  };
1886
2034
  var PureMap_default = PureMap;
1887
2035
 
1888
- // esm-externals:@splunk/themes
1889
- var themes_exports = {};
1890
- __export(themes_exports, {
1891
- default: () => themes_default
1892
- });
1893
- var defaultImport23 = __toESM(require("@splunk/themes"));
1894
- __reExport(themes_exports, require("@splunk/themes"));
1895
- var themes_default = "default" in defaultImport23 ? defaultImport23.default : defaultImport23;
1896
-
1897
2036
  // esm-externals:@splunk/visualization-color-palettes/editors/PresetPalettes
1898
2037
  var PresetPalettes_exports = {};
1899
2038
  __export(PresetPalettes_exports, {
1900
2039
  default: () => PresetPalettes_default
1901
2040
  });
1902
- var defaultImport24 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
2041
+ var defaultImport27 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
1903
2042
  __reExport(PresetPalettes_exports, require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
1904
- var PresetPalettes_default = "default" in defaultImport24 ? defaultImport24.default : defaultImport24;
2043
+ var PresetPalettes_default = "default" in defaultImport27 ? defaultImport27.default : defaultImport27;
1905
2044
 
1906
2045
  // esm-externals:@splunk/visualization-icons
1907
2046
  var visualization_icons_exports = {};
1908
2047
  __export(visualization_icons_exports, {
1909
2048
  default: () => visualization_icons_default
1910
2049
  });
1911
- var defaultImport25 = __toESM(require("@splunk/visualization-icons"));
2050
+ var defaultImport28 = __toESM(require("@splunk/visualization-icons"));
1912
2051
  __reExport(visualization_icons_exports, require("@splunk/visualization-icons"));
1913
- var visualization_icons_default = "default" in defaultImport25 ? defaultImport25.default : defaultImport25;
2052
+ var visualization_icons_default = "default" in defaultImport28 ? defaultImport28.default : defaultImport28;
1914
2053
 
1915
2054
  // esm-externals:@splunk/visualization-icons/placeholders
1916
2055
  var placeholders_exports = {};
1917
2056
  __export(placeholders_exports, {
1918
2057
  default: () => placeholders_default
1919
2058
  });
1920
- var defaultImport26 = __toESM(require("@splunk/visualization-icons/placeholders"));
2059
+ var defaultImport29 = __toESM(require("@splunk/visualization-icons/placeholders"));
1921
2060
  __reExport(placeholders_exports, require("@splunk/visualization-icons/placeholders"));
1922
- var placeholders_default = "default" in defaultImport26 ? defaultImport26.default : defaultImport26;
2061
+ var placeholders_default = "default" in defaultImport29 ? defaultImport29.default : defaultImport29;
1923
2062
 
1924
2063
  // esm-externals:@splunk/visualizations-shared/configUtils
1925
2064
  var configUtils_exports = {};
1926
2065
  __export(configUtils_exports, {
1927
2066
  default: () => configUtils_default
1928
2067
  });
1929
- var defaultImport27 = __toESM(require("@splunk/visualizations-shared/configUtils"));
2068
+ var defaultImport30 = __toESM(require("@splunk/visualizations-shared/configUtils"));
1930
2069
  __reExport(configUtils_exports, require("@splunk/visualizations-shared/configUtils"));
1931
- var configUtils_default = "default" in defaultImport27 ? defaultImport27.default : defaultImport27;
2070
+ var configUtils_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
1932
2071
 
1933
2072
  // src/common/utils/configUtils.ts
1934
2073
  function enhanceConfig(vizConfig) {
@@ -2120,6 +2259,17 @@ var editorConfig = [
2120
2259
  editor: "editor.columnMultiSelectionByFieldNameEditor"
2121
2260
  }
2122
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
+ ],
2123
2273
  [
2124
2274
  {
2125
2275
  label: (0, i18n_exports._)("Result limit"),
@@ -2176,6 +2326,17 @@ var editorConfig = [
2176
2326
  }
2177
2327
  }
2178
2328
  ],
2329
+ [
2330
+ {
2331
+ label: (0, i18n_exports._)("Show Latitude and Longitude"),
2332
+ option: "showCoordinates",
2333
+ editor: "editor.checkbox",
2334
+ editorProps: {
2335
+ labelPosition: "right",
2336
+ labelWidth: EDITOR_LABEL_WIDTH
2337
+ }
2338
+ }
2339
+ ],
2179
2340
  [
2180
2341
  {
2181
2342
  label: (0, i18n_exports._)("Show zoom controls"),
@@ -2396,72 +2557,63 @@ var getSettingsFromThemedProps_exports = {};
2396
2557
  __export(getSettingsFromThemedProps_exports, {
2397
2558
  default: () => getSettingsFromThemedProps_default
2398
2559
  });
2399
- var defaultImport28 = __toESM(require("@splunk/themes/getSettingsFromThemedProps"));
2560
+ var defaultImport31 = __toESM(require("@splunk/themes/getSettingsFromThemedProps"));
2400
2561
  __reExport(getSettingsFromThemedProps_exports, require("@splunk/themes/getSettingsFromThemedProps"));
2401
- var getSettingsFromThemedProps_default = "default" in defaultImport28 ? defaultImport28.default : defaultImport28;
2562
+ var getSettingsFromThemedProps_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
2402
2563
 
2403
2564
  // esm-externals:@splunk/visualization-encoding/Options
2404
2565
  var Options_exports = {};
2405
2566
  __export(Options_exports, {
2406
2567
  default: () => Options_default
2407
2568
  });
2408
- var defaultImport29 = __toESM(require("@splunk/visualization-encoding/Options"));
2569
+ var defaultImport32 = __toESM(require("@splunk/visualization-encoding/Options"));
2409
2570
  __reExport(Options_exports, require("@splunk/visualization-encoding/Options"));
2410
- var Options_default = "default" in defaultImport29 ? defaultImport29.default : defaultImport29;
2571
+ var Options_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2411
2572
 
2412
2573
  // esm-externals:@splunk/visualizations-shared/SanitizeProps
2413
2574
  var SanitizeProps_exports = {};
2414
2575
  __export(SanitizeProps_exports, {
2415
2576
  default: () => SanitizeProps_default
2416
2577
  });
2417
- var defaultImport30 = __toESM(require("@splunk/visualizations-shared/SanitizeProps"));
2578
+ var defaultImport33 = __toESM(require("@splunk/visualizations-shared/SanitizeProps"));
2418
2579
  __reExport(SanitizeProps_exports, require("@splunk/visualizations-shared/SanitizeProps"));
2419
- var SanitizeProps_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
2580
+ var SanitizeProps_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2420
2581
 
2421
2582
  // esm-externals:@splunk/visualization-context/TimezoneContext
2422
2583
  var TimezoneContext_exports = {};
2423
2584
  __export(TimezoneContext_exports, {
2424
2585
  default: () => TimezoneContext_default
2425
2586
  });
2426
- var defaultImport31 = __toESM(require("@splunk/visualization-context/TimezoneContext"));
2587
+ var defaultImport34 = __toESM(require("@splunk/visualization-context/TimezoneContext"));
2427
2588
  __reExport(TimezoneContext_exports, require("@splunk/visualization-context/TimezoneContext"));
2428
- var TimezoneContext_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
2589
+ var TimezoneContext_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
2429
2590
 
2430
2591
  // esm-externals:@splunk/moment
2431
2592
  var moment_exports = {};
2432
2593
  __export(moment_exports, {
2433
2594
  default: () => moment_default
2434
2595
  });
2435
- var defaultImport32 = __toESM(require("@splunk/moment"));
2596
+ var defaultImport35 = __toESM(require("@splunk/moment"));
2436
2597
  __reExport(moment_exports, require("@splunk/moment"));
2437
- var moment_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2438
-
2439
- // esm-externals:@splunk/visualization-context/FeatureFlagContext
2440
- var FeatureFlagContext_exports = {};
2441
- __export(FeatureFlagContext_exports, {
2442
- default: () => FeatureFlagContext_default
2443
- });
2444
- var defaultImport33 = __toESM(require("@splunk/visualization-context/FeatureFlagContext"));
2445
- __reExport(FeatureFlagContext_exports, require("@splunk/visualization-context/FeatureFlagContext"));
2446
- var FeatureFlagContext_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2598
+ var moment_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
2447
2599
 
2448
2600
  // esm-externals:@splunk/async-dynamic-options-evaluator
2449
2601
  var async_dynamic_options_evaluator_exports = {};
2450
2602
  __export(async_dynamic_options_evaluator_exports, {
2451
2603
  default: () => async_dynamic_options_evaluator_default
2452
2604
  });
2453
- var defaultImport34 = __toESM(require("@splunk/async-dynamic-options-evaluator"));
2605
+ var defaultImport36 = __toESM(require("@splunk/async-dynamic-options-evaluator"));
2454
2606
  __reExport(async_dynamic_options_evaluator_exports, require("@splunk/async-dynamic-options-evaluator"));
2455
- 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;
2456
2608
 
2457
2609
  // esm-externals:@splunk/ui-utils/id
2458
2610
  var id_exports = {};
2459
2611
  __export(id_exports, {
2460
2612
  default: () => id_default
2461
2613
  });
2462
- var defaultImport35 = __toESM(require("@splunk/ui-utils/id"));
2614
+ var defaultImport37 = __toESM(require("@splunk/ui-utils/id"));
2463
2615
  __reExport(id_exports, require("@splunk/ui-utils/id"));
2464
- var id_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
2616
+ var id_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
2465
2617
 
2466
2618
  // src/common/interfaces/VizActionHandler.ts
2467
2619
  var DefaultVizActionHandler = class {
@@ -2669,9 +2821,9 @@ var SizeAwareWrapper_exports = {};
2669
2821
  __export(SizeAwareWrapper_exports, {
2670
2822
  default: () => SizeAwareWrapper_default
2671
2823
  });
2672
- var defaultImport36 = __toESM(require("@splunk/visualizations-shared/SizeAwareWrapper"));
2824
+ var defaultImport38 = __toESM(require("@splunk/visualizations-shared/SizeAwareWrapper"));
2673
2825
  __reExport(SizeAwareWrapper_exports, require("@splunk/visualizations-shared/SizeAwareWrapper"));
2674
- var SizeAwareWrapper_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
2826
+ var SizeAwareWrapper_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
2675
2827
 
2676
2828
  // src/common/hocs/FixedSizeContainer.tsx
2677
2829
  var Item = styled_components_default.div.attrs(({ width }) => ({
@@ -2718,7 +2870,7 @@ var withFixedSizeContainer = (Viz) => {
2718
2870
  FixSizeItem,
2719
2871
  {
2720
2872
  "data-test": "fix-size-item",
2721
- "data-splunk-visualization-version": "27.3.0 - bd2e687fd",
2873
+ "data-splunk-visualization-version": "27.5.0 - 5cfbc7064",
2722
2874
  width,
2723
2875
  height,
2724
2876
  backgroundColor
@@ -2784,7 +2936,7 @@ var Cover = styled_components_default.div`
2784
2936
  bottom: 0;
2785
2937
  `;
2786
2938
  var Blocker = styled_components_default.div.attrs({
2787
- "data-splunk-visualization-version": "27.3.0 - bd2e687fd"
2939
+ "data-splunk-visualization-version": "27.5.0 - 5cfbc7064"
2788
2940
  })`
2789
2941
  position: relative;
2790
2942
  width: 100%;
@@ -2806,9 +2958,9 @@ var variables_exports = {};
2806
2958
  __export(variables_exports, {
2807
2959
  default: () => variables_default
2808
2960
  });
2809
- var defaultImport37 = __toESM(require("@splunk/themes/variables"));
2961
+ var defaultImport39 = __toESM(require("@splunk/themes/variables"));
2810
2962
  __reExport(variables_exports, require("@splunk/themes/variables"));
2811
- var variables_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
2963
+ var variables_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
2812
2964
 
2813
2965
  // src/common/components/IconPlaceholder.tsx
2814
2966
  var shouldShowIconPlaceholder = (dataSources, loading = false) => {
@@ -2888,9 +3040,9 @@ var numberUtils_exports = {};
2888
3040
  __export(numberUtils_exports, {
2889
3041
  default: () => numberUtils_default
2890
3042
  });
2891
- var defaultImport38 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
3043
+ var defaultImport40 = __toESM(require("@splunk/visualizations-shared/numberUtils"));
2892
3044
  __reExport(numberUtils_exports, require("@splunk/visualizations-shared/numberUtils"));
2893
- var numberUtils_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
3045
+ var numberUtils_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
2894
3046
 
2895
3047
  // src/common/utils/dataUtils.ts
2896
3048
  var convertToArrOfObjects = (columns, fields) => {
@@ -3282,9 +3434,9 @@ var FeatureFlags_exports = {};
3282
3434
  __export(FeatureFlags_exports, {
3283
3435
  default: () => FeatureFlags_default
3284
3436
  });
3285
- var defaultImport39 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
3437
+ var defaultImport41 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
3286
3438
  __reExport(FeatureFlags_exports, require("@splunk/visualization-context/FeatureFlags"));
3287
- var FeatureFlags_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
3439
+ var FeatureFlags_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
3288
3440
 
3289
3441
  // src/common/utils/featureFlagUtils.ts
3290
3442
  var getFeatureFlag = (context, flagName) => {
@@ -3302,9 +3454,9 @@ var trellisUtils_exports = {};
3302
3454
  __export(trellisUtils_exports, {
3303
3455
  default: () => trellisUtils_default
3304
3456
  });
3305
- var defaultImport40 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3457
+ var defaultImport42 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3306
3458
  __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
3307
- var trellisUtils_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
3459
+ var trellisUtils_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
3308
3460
 
3309
3461
  // src/common/utils/trellisUtils.ts
3310
3462
  var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
@@ -3585,9 +3737,9 @@ var dsl_exports = {};
3585
3737
  __export(dsl_exports, {
3586
3738
  default: () => dsl_default
3587
3739
  });
3588
- var defaultImport41 = __toESM(require("@splunk/visualization-encoding/utils/dsl"));
3740
+ var defaultImport43 = __toESM(require("@splunk/visualization-encoding/utils/dsl"));
3589
3741
  __reExport(dsl_exports, require("@splunk/visualization-encoding/utils/dsl"));
3590
- var dsl_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
3742
+ var dsl_default = "default" in defaultImport43 ? defaultImport43.default : defaultImport43;
3591
3743
 
3592
3744
  // src/common/utils/mapUtils.ts
3593
3745
  var columnsNullToZeros = (config2, dataSources, options) => {
@@ -3603,7 +3755,17 @@ var columnsNullToZeros = (config2, dataSources, options) => {
3603
3755
  if (((_b = (_a = mergedOptions.layers) == null ? void 0 : _a[0]) == null ? void 0 : _b.type) === "bubble") {
3604
3756
  const latitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].latitude, dataSources)[0] || "";
3605
3757
  const longitudeField = (0, dsl_exports.getFieldsFromDSL)(mergedOptions.layers[0].longitude, dataSources)[0] || "";
3606
- 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
+ );
3607
3769
  const indicesToEvaluate = new Set(
3608
3770
  fields.reduce((arr, e, i) => {
3609
3771
  const field = typeof e === "string" ? e : e.name.toString();
@@ -3684,6 +3846,7 @@ var withTooltipFields = (Viz) => {
3684
3846
  if (((_c = (_b2 = mergedOptions.layers) == null ? void 0 : _b2[0]) == null ? void 0 : _c.type) === "bubble") {
3685
3847
  mergedOptions.layers[0].bubbleSizeFields = "> bubbleSize | getField()";
3686
3848
  mergedOptions.layers[0].dataValuesField = "> dataValues | getField()";
3849
+ mergedOptions.layers[0].tooltipHeaderFieldName = "> tooltipHeaderField | getField()";
3687
3850
  }
3688
3851
  const { fields } = dataSources.primary.data;
3689
3852
  if (Array.isArray(mergedOptions.layers[0].additionalTooltipFields) && Array.isArray(fields) && fields.length) {