@splunk/visualizations 28.8.0 → 28.9.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 (273) hide show
  1. package/Area.config.js +2 -4
  2. package/Area.config.js.map +2 -2
  3. package/Area.js +245 -147
  4. package/Area.js.map +4 -4
  5. package/Bar.config.js +2 -4
  6. package/Bar.config.js.map +2 -2
  7. package/Bar.js +246 -148
  8. package/Bar.js.map +4 -4
  9. package/Bubble/Bubble.d.ts +3 -1
  10. package/Bubble/Bubble.d.ts.map +1 -1
  11. package/Bubble.js +216 -108
  12. package/Bubble.js.map +4 -4
  13. package/CHANGELOG.external.md +31 -1
  14. package/ChoroplethSvg/ChoroplethSvg.d.ts +3 -1
  15. package/ChoroplethSvg/ChoroplethSvg.d.ts.map +1 -1
  16. package/ChoroplethSvg/PureChoroplethSvg/PureChoroplethSvg.d.ts.map +1 -1
  17. package/ChoroplethSvg/PureChoroplethSvg/SvgMutator.d.ts.map +1 -1
  18. package/ChoroplethSvg.js +638 -209
  19. package/ChoroplethSvg.js.map +4 -4
  20. package/Column.config.js +2 -4
  21. package/Column.config.js.map +2 -2
  22. package/Column.js +246 -148
  23. package/Column.js.map +4 -4
  24. package/Ellipse/Ellipse.d.ts +3 -1
  25. package/Ellipse/Ellipse.d.ts.map +1 -1
  26. package/Ellipse.js +216 -105
  27. package/Ellipse.js.map +4 -4
  28. package/Events/Events.d.ts +5 -3
  29. package/Events/Events.d.ts.map +1 -1
  30. package/Events/PureEvents/FieldSummaryTooltip.d.ts.map +1 -1
  31. package/Events/PureEvents/PureEvents.d.ts +0 -1
  32. package/Events/PureEvents/PureEvents.d.ts.map +1 -1
  33. package/Events.js +270 -157
  34. package/Events.js.map +4 -4
  35. package/FillerGauge.js +243 -140
  36. package/FillerGauge.js.map +4 -4
  37. package/Image/Image.d.ts +3 -1
  38. package/Image/Image.d.ts.map +1 -1
  39. package/Image.js +217 -106
  40. package/Image.js.map +4 -4
  41. package/Line.config.js +2 -4
  42. package/Line.config.js.map +2 -2
  43. package/Line.js +246 -148
  44. package/Line.js.map +4 -4
  45. package/LinkGraph/LinkGraph.d.ts +3 -1
  46. package/LinkGraph/LinkGraph.d.ts.map +1 -1
  47. package/LinkGraph/PureLinkGraph/PureLinkGraphUtils.d.ts.map +1 -1
  48. package/LinkGraph/PureLinkGraph/components/Node.d.ts.map +1 -1
  49. package/LinkGraph.config.js +1 -1
  50. package/LinkGraph.config.js.map +2 -2
  51. package/LinkGraph.js +802 -682
  52. package/LinkGraph.js.map +4 -4
  53. package/Map/Map.d.ts +10 -9
  54. package/Map/Map.d.ts.map +1 -1
  55. package/Map/PureMap/BubbleLayer.d.ts.map +1 -1
  56. package/Map/PureMap/ClusterLayer.d.ts.map +1 -1
  57. package/Map/PureMap/MapUtils.d.ts.map +1 -1
  58. package/Map/PureMap/MarkerWrapper.d.ts.map +1 -1
  59. package/Map/PureMap/PureMap.d.ts +8 -65
  60. package/Map/PureMap/PureMap.d.ts.map +1 -1
  61. package/Map.config.js +1 -1
  62. package/Map.config.js.map +2 -2
  63. package/Map.js +363 -313
  64. package/Map.js.map +4 -4
  65. package/Markdown/Markdown.d.ts +9 -1
  66. package/Markdown/Markdown.d.ts.map +1 -1
  67. package/Markdown/config.d.ts.map +1 -1
  68. package/Markdown.config.js +5 -0
  69. package/Markdown.config.js.map +2 -2
  70. package/Markdown.js +225 -94
  71. package/Markdown.js.map +3 -3
  72. package/MarkerGauge.js +239 -134
  73. package/MarkerGauge.js.map +4 -4
  74. package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -1
  75. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts +1 -0
  76. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts.map +1 -1
  77. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts +1 -0
  78. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -1
  79. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +3 -5
  80. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -1
  81. package/NetworkGraph.config.js +4 -2
  82. package/NetworkGraph.config.js.map +2 -2
  83. package/NetworkGraph.js +327 -188
  84. package/NetworkGraph.js.map +4 -4
  85. package/ParallelCoordinates/ParallelCoordinates.d.ts +3 -1
  86. package/ParallelCoordinates/ParallelCoordinates.d.ts.map +1 -1
  87. package/ParallelCoordinates.js +239 -128
  88. package/ParallelCoordinates.js.map +4 -4
  89. package/Pie/config.d.ts.map +1 -1
  90. package/Pie/pieUtils.d.ts.map +1 -1
  91. package/Pie.config.js +4 -2
  92. package/Pie.config.js.map +2 -2
  93. package/Pie.js +228 -125
  94. package/Pie.js.map +3 -3
  95. package/ProcessTree/ProcessTree.d.ts +3 -1
  96. package/ProcessTree/ProcessTree.d.ts.map +1 -1
  97. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts +1 -0
  98. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts.map +1 -1
  99. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts +1 -0
  100. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts.map +1 -1
  101. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts +2 -1
  102. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts.map +1 -1
  103. package/ProcessTree/PureProcessTree/utils/iconLoader.d.ts +2 -0
  104. package/ProcessTree/PureProcessTree/utils/iconLoader.d.ts.map +1 -1
  105. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts +5 -1
  106. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts.map +1 -1
  107. package/ProcessTree.js +435 -192
  108. package/ProcessTree.js.map +4 -4
  109. package/Punchcard/Punchcard.d.ts +3 -1
  110. package/Punchcard/Punchcard.d.ts.map +1 -1
  111. package/Punchcard.js +238 -129
  112. package/Punchcard.js.map +4 -4
  113. package/Rectangle/Rectangle.d.ts +3 -1
  114. package/Rectangle/Rectangle.d.ts.map +1 -1
  115. package/Rectangle.js +218 -116
  116. package/Rectangle.js.map +4 -4
  117. package/RichText/PureRichText/Editor/EditorPanel.d.ts +1 -4
  118. package/RichText/PureRichText/Editor/EditorPanel.d.ts.map +1 -1
  119. package/RichText/PureRichText/Editor/hooks/useConfigPanelFocus.d.ts +14 -0
  120. package/RichText/PureRichText/Editor/hooks/useConfigPanelFocus.d.ts.map +1 -0
  121. package/RichText/PureRichText/Editor/hooks/useEditorPanelSync.d.ts +15 -0
  122. package/RichText/PureRichText/Editor/hooks/useEditorPanelSync.d.ts.map +1 -0
  123. package/RichText/PureRichText/Editor/hooks/useLinkHandlers.d.ts.map +1 -1
  124. package/RichText/PureRichText/Editor/hooks/usePortalTarget.d.ts +9 -0
  125. package/RichText/PureRichText/Editor/hooks/usePortalTarget.d.ts.map +1 -0
  126. package/RichText/PureRichText/InnerEditor.d.ts +15 -9
  127. package/RichText/PureRichText/InnerEditor.d.ts.map +1 -1
  128. package/RichText/PureRichText/PureRichText.d.ts +5 -10
  129. package/RichText/PureRichText/PureRichText.d.ts.map +1 -1
  130. package/RichText/PureRichText/PureRichTextContext.d.ts +3 -6
  131. package/RichText/PureRichText/PureRichTextContext.d.ts.map +1 -1
  132. package/RichText/PureRichText/RichTextStyles.d.ts +5 -4
  133. package/RichText/PureRichText/RichTextStyles.d.ts.map +1 -1
  134. package/RichText/PureRichText/activeInstance.d.ts +6 -7
  135. package/RichText/PureRichText/activeInstance.d.ts.map +1 -1
  136. package/RichText/PureRichText/config.d.ts.map +1 -1
  137. package/RichText/PureRichText/hooks/useContentSync.d.ts +9 -9
  138. package/RichText/PureRichText/hooks/useContentSync.d.ts.map +1 -1
  139. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts +2 -7
  140. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts.map +1 -1
  141. package/RichText/PureRichText/hooks/useEditorSetup.d.ts +8 -4
  142. package/RichText/PureRichText/hooks/useEditorSetup.d.ts.map +1 -1
  143. package/RichText/PureRichText/hooks/useFocusHandlers.d.ts +2 -4
  144. package/RichText/PureRichText/hooks/useFocusHandlers.d.ts.map +1 -1
  145. package/RichText/PureRichText/hooks/useKeyboardShortcuts.d.ts.map +1 -1
  146. package/RichText/PureRichText/hooks/useMouseHandlers.d.ts +3 -7
  147. package/RichText/PureRichText/hooks/useMouseHandlers.d.ts.map +1 -1
  148. package/RichText/PureRichText/hooks/useStepFontSize.d.ts +2 -2
  149. package/RichText/PureRichText/hooks/useStepLineSpacing.d.ts +2 -3
  150. package/RichText/PureRichText/hooks/useStepLineSpacing.d.ts.map +1 -1
  151. package/RichText/PureRichText/hooks/useTokenMap.d.ts +13 -24
  152. package/RichText/PureRichText/hooks/useTokenMap.d.ts.map +1 -1
  153. package/RichText/PureRichText/renderers/ElementRenderer.d.ts +2 -5
  154. package/RichText/PureRichText/renderers/ElementRenderer.d.ts.map +1 -1
  155. package/RichText/PureRichText/types.d.ts +6 -0
  156. package/RichText/PureRichText/types.d.ts.map +1 -1
  157. package/RichText/PureRichText/utils/slateUtils.d.ts +26 -2
  158. package/RichText/PureRichText/utils/slateUtils.d.ts.map +1 -1
  159. package/RichText/RichText.d.ts +3 -1
  160. package/RichText/RichText.d.ts.map +1 -1
  161. package/RichText/config.d.ts.map +1 -1
  162. package/RichText.config.js +5 -0
  163. package/RichText.config.js.map +2 -2
  164. package/RichText.js +1848 -842
  165. package/RichText.js.map +4 -4
  166. package/Sankey/PureSankey/PureSankey.d.ts +2 -0
  167. package/Sankey/PureSankey/PureSankey.d.ts.map +1 -1
  168. package/Sankey/PureSankey/SankeyLink.d.ts +3 -1
  169. package/Sankey/PureSankey/SankeyLink.d.ts.map +1 -1
  170. package/Sankey/PureSankey/SankeyNode.d.ts +5 -2
  171. package/Sankey/PureSankey/SankeyNode.d.ts.map +1 -1
  172. package/Sankey/PureSankey/SankeyUtils.d.ts.map +1 -1
  173. package/Sankey/Sankey.d.ts +3 -1
  174. package/Sankey/Sankey.d.ts.map +1 -1
  175. package/Sankey.js +508 -219
  176. package/Sankey.js.map +4 -4
  177. package/Scatter.config.js +3 -5
  178. package/Scatter.config.js.map +2 -2
  179. package/Scatter.js +244 -146
  180. package/Scatter.js.map +4 -4
  181. package/SingleValue/SingleValue.d.ts.map +1 -1
  182. package/SingleValue.js +273 -173
  183. package/SingleValue.js.map +4 -4
  184. package/SingleValueBasic.js +4 -4
  185. package/SingleValueBasic.js.map +2 -2
  186. package/SingleValueIcon/SingleValueIcon.d.ts.map +1 -1
  187. package/SingleValueIcon.js +264 -164
  188. package/SingleValueIcon.js.map +4 -4
  189. package/SingleValueRadial.js +267 -167
  190. package/SingleValueRadial.js.map +4 -4
  191. package/SparkLine/SparkLine.d.ts.map +1 -1
  192. package/SparkLine.js.map +2 -2
  193. package/Table/PureTable.d.ts.map +1 -1
  194. package/Table/Table.d.ts +2 -5
  195. package/Table/Table.d.ts.map +1 -1
  196. package/Table/hooks.d.ts.map +1 -1
  197. package/Table.config.js +1 -1
  198. package/Table.config.js.map +2 -2
  199. package/Table.js +293 -271
  200. package/Table.js.map +4 -4
  201. package/Timeline/Timeline.d.ts +3 -1
  202. package/Timeline/Timeline.d.ts.map +1 -1
  203. package/Timeline.config.js +2 -2
  204. package/Timeline.config.js.map +2 -2
  205. package/Timeline.js +266 -142
  206. package/Timeline.js.map +4 -4
  207. package/Treemap/Treemap.d.ts +3 -1
  208. package/Treemap/Treemap.d.ts.map +1 -1
  209. package/Treemap.js +263 -147
  210. package/Treemap.js.map +4 -4
  211. package/common/Charting.js +8 -10
  212. package/common/Charting.js.map +2 -2
  213. package/common/ChartingApi.d.ts.map +1 -1
  214. package/common/ChartingApi.js +5 -2
  215. package/common/ChartingApi.js.map +2 -2
  216. package/common/DocExampleWithVizSandbox.js +3 -3
  217. package/common/DocExampleWithVizSandbox.js.map +2 -2
  218. package/common/GaugeMajorTicks.js.map +2 -2
  219. package/common/GaugeValueMarker.js.map +2 -2
  220. package/common/OptionsDoc.js +1 -1
  221. package/common/OptionsDoc.js.map +2 -2
  222. package/common/OverviewDoc.js +3 -3
  223. package/common/OverviewDoc.js.map +2 -2
  224. package/common/ThemesDoc.js.map +2 -2
  225. package/common/TimeSeriesChartWrapper.js +10 -9
  226. package/common/TimeSeriesChartWrapper.js.map +2 -2
  227. package/common/chartingUtils.d.ts.map +1 -1
  228. package/common/chartingUtils.js +12 -11
  229. package/common/chartingUtils.js.map +2 -2
  230. package/common/components/IconPlaceholder.d.ts.map +1 -1
  231. package/common/docUtils.d.ts.map +1 -1
  232. package/common/docUtils.js +15 -6
  233. package/common/docUtils.js.map +2 -2
  234. package/common/editorConfig/AxesChartDataDisplay.d.ts.map +1 -1
  235. package/common/gaugeUtils.d.ts.map +1 -1
  236. package/common/gaugeUtils.js +4 -2
  237. package/common/gaugeUtils.js.map +2 -2
  238. package/common/hooks/useSorting.d.ts.map +1 -1
  239. package/common/interfaces/VizEvent.d.ts +7 -0
  240. package/common/interfaces/VizEvent.d.ts.map +1 -1
  241. package/common/utils/dataUtils.d.ts.map +1 -1
  242. package/common/utils/dataUtils.js +6 -10
  243. package/common/utils/dataUtils.js.map +2 -2
  244. package/common/utils/featureFlagUtils.js +2 -2
  245. package/common/utils/featureFlagUtils.js.map +2 -2
  246. package/common/utils/focusUtils.js +1 -1
  247. package/common/utils/focusUtils.js.map +2 -2
  248. package/common/utils/mapUtils.d.ts.map +1 -1
  249. package/common/utils/mapUtils.js +14 -18
  250. package/common/utils/mapUtils.js.map +2 -2
  251. package/common/utils/singleValueUtils.js +22 -25
  252. package/common/utils/singleValueUtils.js.map +2 -2
  253. package/common/utils/textUtils.d.ts.map +1 -1
  254. package/common/utils/textUtils.js +37 -23
  255. package/common/utils/textUtils.js.map +2 -2
  256. package/common/utils/trellisUtils.d.ts.map +1 -1
  257. package/common/utils/trellisUtils.js +18 -17
  258. package/common/utils/trellisUtils.js.map +2 -2
  259. package/common/utils/urlUtils.js.map +2 -2
  260. package/common/utils/visualizationTheme.d.ts +15 -0
  261. package/common/utils/visualizationTheme.d.ts.map +1 -0
  262. package/common/utils/visualizationTheme.js +72 -0
  263. package/common/utils/visualizationTheme.js.map +7 -0
  264. package/common/withDashboardViz.d.ts +3 -1
  265. package/common/withDashboardViz.d.ts.map +1 -1
  266. package/common/withDashboardViz.js +216 -105
  267. package/common/withDashboardViz.js.map +4 -4
  268. package/docs-llm/network-graph/options.md +2 -2
  269. package/docs-llm/pie/examples-json.md +195 -0
  270. package/docs-llm/pie/examples-react.md +123 -0
  271. package/docs-llm/pie/options.md +1 -1
  272. package/docs-llm/process-tree/options.md +3 -2
  273. package/package.json +24 -24
@@ -327,7 +327,7 @@ var getTrendColor = ({
327
327
  if (hasBackground(customizedBgColor) && !isIdenticalColor(customizedBgColor, defaultBackgroundColor) && !isIdenticalColor(customizedBgColor, defaultBlockFontColor)) {
328
328
  return defaultBlockFontColor;
329
329
  }
330
- const isInvalidTrend = trendDisplay === "percent" && trendValue === parseFloat(majorValue);
330
+ const isInvalidTrend = trendDisplay === "percent" && trendValue === Number.parseFloat(majorValue);
331
331
  if (trendValue === 0 || isInvalidTrend) {
332
332
  return defaultFontColor;
333
333
  }
@@ -368,7 +368,7 @@ var computeText = ({
368
368
  let text = (0, numberUtils_exports.isNumerial)(value) ? (0, numberUtils_exports.formatNumber)(value, numberPrecision, {
369
369
  useThousandSeparators: shouldUseThousandSeparators,
370
370
  useTrendUnits: shouldAbbreviateValue
371
- }) : value;
371
+ }) : String(value != null ? value : "");
372
372
  text = text || "";
373
373
  return text;
374
374
  };
@@ -398,23 +398,20 @@ var getTrendText = ({
398
398
  shouldUseThousandSeparators,
399
399
  shouldAbbreviateValue: shouldAbbreviateTrendValue
400
400
  });
401
- if (trendValue === "" || !(0, numberUtils_exports.isNumerial)(trendValue)) {
402
- return "";
403
- }
401
+ let trendText = "";
404
402
  const showPercent = trendDisplay === "percent";
405
- if (!showPercent) {
406
- return compute(trendValue);
407
- }
408
- const diff = Math.abs(trendValue - majorValue);
409
- let val = trendValue / diff * 100;
410
- if (trendValue === 0 && diff === 0) {
411
- val = 0;
412
- }
413
- if (!Number.isFinite(val)) {
414
- return "N/A";
403
+ const isValidTrend = trendValue !== "" && (0, numberUtils_exports.isNumerial)(trendValue);
404
+ if (isValidTrend && !showPercent) {
405
+ trendText = compute(trendValue);
406
+ } else if (isValidTrend && showPercent) {
407
+ const diff = Math.abs(trendValue - majorValue);
408
+ let val = trendValue / diff * 100;
409
+ if (trendValue === 0 && diff === 0) {
410
+ val = 0;
411
+ }
412
+ trendText = Number.isFinite(val) ? `${compute(val)}%` : "N/A";
415
413
  }
416
- const text = compute(val);
417
- return `${text}%`;
414
+ return trendText;
418
415
  };
419
416
  var computeFontSize = (text, { width, height }, fontFamily = DEFAULT_FONT_FAMILY, fontWeight = "normal") => {
420
417
  const widthInDefaultFont = (0, domUtils_exports.computeTextSize)(text, `${fontWeight} ${DEFAULT_FONT}px ${fontFamily}`);
@@ -422,7 +419,7 @@ var computeFontSize = (text, { width, height }, fontFamily = DEFAULT_FONT_FAMILY
422
419
  width / widthInDefaultFont * DEFAULT_FONT,
423
420
  height / DEFAULT_FONT * DEFAULT_FONT
424
421
  );
425
- return parseInt(fontSize, 10);
422
+ return Number.parseInt(fontSize, 10);
426
423
  };
427
424
  var getMajorFontSize = ({ width, height, unit, majorText, spaceRatio = 1 }) => {
428
425
  const majorTextCalc = unit ? `${unit}${majorText}` : majorText;
@@ -438,11 +435,11 @@ var getTrendFontSize = ({ width, height, trendText, spaceRatio = 1 }) => {
438
435
  width: width * spaceRatio,
439
436
  height
440
437
  });
441
- trendFontSize = parseInt(trendFontSize, 10) * spaceRatio;
438
+ trendFontSize = Number.parseInt(trendFontSize, 10) * spaceRatio;
442
439
  }
443
440
  return trendFontSize;
444
441
  };
445
- var getUnderLabelHeight = (height) => height > DEFAULT_FONT ? DEFAULT_FONT : height;
442
+ var getUnderLabelHeight = (height) => Math.min(height, DEFAULT_FONT);
446
443
  var getUnderLabel = ({ underLabel, width, height }) => computeFontSize(underLabel, {
447
444
  width,
448
445
  height
@@ -520,7 +517,7 @@ var updateVizInSmallSpace = ({
520
517
  let newTextSize = majorTextFontSize;
521
518
  while (newTextSize < 12 && removeIndex < toRemoveList.length) {
522
519
  const toRemove = toRemoveList[removeIndex];
523
- newProps = __spreadValues(__spreadValues({}, newProps), {
520
+ newProps = __spreadProps(__spreadValues({}, newProps), {
524
521
  [toRemove.key]: toRemove.value
525
522
  });
526
523
  newMajorAndTrend = getMajorAndTrend(__spreadValues({
@@ -664,7 +661,7 @@ var Column = styled_components_default.div`
664
661
  flex-direction: row;
665
662
  justify-content: ${(props) => props.justify || "flex-end"};
666
663
  height: ${(props) => props.size || 12}px;
667
- ${(props) => props.size ? `margin: 0 ${parseInt(props.size, 10) * 0.2 || 5}px;` : ""};
664
+ ${(props) => props.size ? `margin: 0 ${Number.parseInt(props.size, 10) * 0.2 || 5}px;` : ""};
668
665
  `;
669
666
  var Text = styled_components_default.div`
670
667
  white-space: nowrap;
@@ -675,15 +672,15 @@ var Text = styled_components_default.div`
675
672
  line-height: ${(props) => props.size || 12}px;
676
673
  display: flex;
677
674
  align-self: baseline;
678
- ${(props) => props.size ? `margin-left: ${parseInt(props.size, 10) * 0.2 || 5}px;` : ""};
675
+ ${(props) => props.size ? `margin-left: ${Number.parseInt(props.size, 10) * 0.2 || 5}px;` : ""};
679
676
  `;
680
677
  var TrendValue = ({ fontSize, color, value, text }) => {
681
678
  let TrendIndicator = false;
682
679
  let ariaLabel = false;
683
- if (parseFloat(value, 10) > 0) {
680
+ if (Number.parseFloat(value, 10) > 0) {
684
681
  TrendIndicator = ArrowUp_default;
685
682
  ariaLabel = (0, i18n_exports._)("increase");
686
- } else if (parseFloat(value, 10) < 0) {
683
+ } else if (Number.parseFloat(value, 10) < 0) {
687
684
  TrendIndicator = ArrowDown_default;
688
685
  ariaLabel = (0, i18n_exports._)("decrease");
689
686
  }
@@ -1646,7 +1643,10 @@ var useSortingParams = ({ requestParams, onRequestParamsChange }) => {
1646
1643
  onSort = (e, { sortKey, sortDir }) => {
1647
1644
  if (typeof sortKey === "string") {
1648
1645
  const nextSortDir = (0, lodash_exports.has)(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : "none";
1649
- onRequestParamsChange(__spreadValues(__spreadValues({}, requestParams), { offset: 0, sort: { [sortKey]: nextSortDir } }));
1646
+ onRequestParamsChange(__spreadProps(__spreadValues({}, requestParams), {
1647
+ offset: 0,
1648
+ sort: { [sortKey]: nextSortDir }
1649
+ }));
1650
1650
  } else {
1651
1651
  onRequestParamsChange(requestParams);
1652
1652
  }
@@ -1763,7 +1763,7 @@ var Cover = styled_components_default.div`
1763
1763
  bottom: 0;
1764
1764
  `;
1765
1765
  var Blocker = styled_components_default.div.attrs({
1766
- "data-splunk-visualization-version": "28.8.0 - 633c53372"
1766
+ "data-splunk-visualization-version": "28.9.0 - 96b03188d"
1767
1767
  })`
1768
1768
  position: relative;
1769
1769
  width: 100%;
@@ -1798,6 +1798,15 @@ var defaultImport37 = __toESM(require("@splunk/themes/variables"));
1798
1798
  __reExport(variables_exports, require("@splunk/themes/variables"));
1799
1799
  var variables_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
1800
1800
 
1801
+ // esm-externals:@splunk/themes
1802
+ var themes_exports = {};
1803
+ __export(themes_exports, {
1804
+ default: () => themes_default
1805
+ });
1806
+ var defaultImport38 = __toESM(require("@splunk/themes"));
1807
+ __reExport(themes_exports, require("@splunk/themes"));
1808
+ var themes_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
1809
+
1801
1810
  // src/common/hocs/FixedSizeContainer.tsx
1802
1811
  var Item = styled_components_default.div.attrs(({ width }) => ({
1803
1812
  style: {
@@ -1853,7 +1862,7 @@ var withFixedSizeContainer = (Viz) => {
1853
1862
  FixSizeItem,
1854
1863
  {
1855
1864
  "data-test": "fix-size-item",
1856
- "data-splunk-visualization-version": "28.8.0 - 633c53372",
1865
+ "data-splunk-visualization-version": "28.9.0 - 96b03188d",
1857
1866
  width,
1858
1867
  height,
1859
1868
  backgroundColor
@@ -1874,6 +1883,14 @@ var shouldShowIconPlaceholder = (dataSources, loading = false) => {
1874
1883
  const noFields = fields === void 0;
1875
1884
  return loading || noData || noFields;
1876
1885
  };
1886
+ var PlaceholderContainer = styled_components_default.div`
1887
+ /* The inline token color wins when supported. Older browsers discard an
1888
+ unsupported oklch value and retain this inherited fallback instead. */
1889
+ color: ${(0, themes_exports.pick)({
1890
+ dark: "#fafafa",
1891
+ light: "#2c2c2c"
1892
+ })};
1893
+ `;
1877
1894
  var IconPlaceholder = (props) => {
1878
1895
  const {
1879
1896
  width = SplunkVisualization_default.defaults.width,
@@ -1888,7 +1905,6 @@ var IconPlaceholder = (props) => {
1888
1905
  style: {
1889
1906
  left: "50%",
1890
1907
  top: "50%",
1891
- color: iconColor,
1892
1908
  opacity: 0.15,
1893
1909
  position: "absolute",
1894
1910
  transform: "translate(-50%, -50%)"
@@ -1898,7 +1914,14 @@ var IconPlaceholder = (props) => {
1898
1914
  "data-test": "icon-placeholder"
1899
1915
  });
1900
1916
  }
1901
- return /* @__PURE__ */ react_exports.createElement("div", { style: { width, height, background: backgroundColor } }, content);
1917
+ return /* @__PURE__ */ react_exports.createElement(
1918
+ PlaceholderContainer,
1919
+ {
1920
+ "data-test": "icon-placeholder-container",
1921
+ style: { width, height, background: backgroundColor, color: iconColor }
1922
+ },
1923
+ content
1924
+ );
1902
1925
  };
1903
1926
  var IconPlaceholder_default = FixedSizeContainer_default(IconPlaceholder);
1904
1927
 
@@ -1963,7 +1986,7 @@ var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices)
1963
1986
  let avgY = 0;
1964
1987
  let avgRangeStart = Math.floor((i + 1) * every) + 1;
1965
1988
  let avgRangeEnd = Math.floor((i + 2) * every) + 1;
1966
- avgRangeEnd = avgRangeEnd < dataLength ? avgRangeEnd : dataLength;
1989
+ avgRangeEnd = Math.min(avgRangeEnd, dataLength);
1967
1990
  const avgRangeLength = avgRangeEnd - avgRangeStart;
1968
1991
  for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {
1969
1992
  avgX += Number(data[avgRangeStart][0]);
@@ -1998,9 +2021,9 @@ var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices)
1998
2021
  };
1999
2022
  var strictlyCoerceYColumn = (column, options) => {
2000
2023
  const isNullCoercionEnabled = options.nullValueDisplay === "zero";
2001
- const canLooselyCoerceSomeValues = column.findIndex(
2024
+ const canLooselyCoerceSomeValues = column.some(
2002
2025
  (value) => (0, numberUtils_exports.startsWithNumber)(`${value}`) || isNullCoercionEnabled && value === null
2003
- ) >= 0;
2026
+ );
2004
2027
  const coercedColumn = [];
2005
2028
  const canDownsampleColumn = !column.some((value) => {
2006
2029
  const coercedValue = Number(value);
@@ -2019,7 +2042,7 @@ var strictlyCoerceYColumn = (column, options) => {
2019
2042
  };
2020
2043
  var strictlyCoerceXColumn = (column, fieldType) => {
2021
2044
  if (fieldType === "number") {
2022
- const coercedXColumn = column.map((xValue) => Number(xValue));
2045
+ const coercedXColumn = column.map(Number);
2023
2046
  if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {
2024
2047
  return coercedXColumn;
2025
2048
  }
@@ -2318,16 +2341,16 @@ var FeatureFlags_exports = {};
2318
2341
  __export(FeatureFlags_exports, {
2319
2342
  default: () => FeatureFlags_default
2320
2343
  });
2321
- var defaultImport38 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
2344
+ var defaultImport39 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
2322
2345
  __reExport(FeatureFlags_exports, require("@splunk/visualization-context/FeatureFlags"));
2323
- var FeatureFlags_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
2346
+ var FeatureFlags_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
2324
2347
 
2325
2348
  // src/common/utils/featureFlagUtils.ts
2326
2349
  var getFeatureFlag = (context, flagName) => {
2327
- if (context && Object.keys(context).find((key) => key === flagName)) {
2350
+ if (context && Object.keys(context).includes(flagName)) {
2328
2351
  return context[flagName];
2329
2352
  }
2330
- if (Object.keys(FeatureFlags_default).find((key) => key === flagName)) {
2353
+ if (Object.keys(FeatureFlags_default).includes(flagName)) {
2331
2354
  return FeatureFlags_default[flagName];
2332
2355
  }
2333
2356
  return false;
@@ -2338,9 +2361,9 @@ var trellisUtils_exports = {};
2338
2361
  __export(trellisUtils_exports, {
2339
2362
  default: () => trellisUtils_default
2340
2363
  });
2341
- var defaultImport39 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
2364
+ var defaultImport40 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
2342
2365
  __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
2343
- var trellisUtils_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
2366
+ var trellisUtils_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
2344
2367
 
2345
2368
  // src/common/utils/trellisUtils.ts
2346
2369
  var AGGREGATIONS = "aggregations";
@@ -2561,7 +2584,7 @@ var dataSourcesSplitByModeChart = (dataSource, splitBy) => {
2561
2584
  splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
2562
2585
  }
2563
2586
  if (splitByFields == null ? void 0 : splitByFields.includes(splitBy)) {
2564
- const splitByFieldIdx = splitByFields.findIndex((f) => f === splitBy);
2587
+ const splitByFieldIdx = splitByFields.indexOf(splitBy);
2565
2588
  const otherSplitBy = splitByFields.filter((f) => f !== splitBy);
2566
2589
  const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
2567
2590
  const nonDataSourceAggregations = [];
@@ -2595,17 +2618,17 @@ var dataSourcesSplitByModeStatsorUnknown = (dataSource, splitBy, splitMode) => {
2595
2618
  let splitByFields = [];
2596
2619
  let errorCode = null;
2597
2620
  if (fields.length > 0) {
2598
- splitByFields = splitMode !== trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields);
2621
+ splitByFields = splitMode === trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields);
2599
2622
  }
2600
2623
  const splitByIndex = fields.findIndex((field) => field.name === splitBy);
2601
2624
  if (splitByFields == null ? void 0 : splitByFields.includes(splitBy)) {
2602
2625
  const splitByColumn = (_f = (_e = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _e.data) == null ? void 0 : _f.columns[splitByIndex];
2603
2626
  splitDataSources = {};
2604
2627
  splitByColumn.forEach((val, idx) => {
2605
- if (!splitDataSources[val]) {
2606
- splitDataSources[val] = [idx];
2607
- } else {
2628
+ if (splitDataSources[val]) {
2608
2629
  splitDataSources[val].push(idx);
2630
+ } else {
2631
+ splitDataSources[val] = [idx];
2609
2632
  }
2610
2633
  });
2611
2634
  const cloneFields = (0, lodash_exports.cloneDeep)(fields);
@@ -2656,27 +2679,28 @@ var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
2656
2679
  }
2657
2680
  return {};
2658
2681
  };
2682
+ var extendMinMaxWithColumn = (column, range2) => column.reduce((acc, point) => {
2683
+ const pointNumber = Number(point);
2684
+ if (Number.isNaN(pointNumber)) {
2685
+ return acc;
2686
+ }
2687
+ return {
2688
+ min: Math.min(pointNumber, acc.min),
2689
+ max: Math.max(pointNumber, acc.max)
2690
+ };
2691
+ }, range2);
2659
2692
  var calculateSharedMinMax = (splitData) => {
2660
- let max = -Infinity;
2661
- let min = Infinity;
2693
+ let range2 = { min: Infinity, max: -Infinity };
2662
2694
  Object.keys(splitData).forEach((splitByKey) => {
2663
2695
  const datasources = splitData[splitByKey];
2664
2696
  Object.keys(datasources).forEach((datasourceName) => {
2665
2697
  const dataColumns = datasources[datasourceName].data.columns;
2666
2698
  dataColumns.forEach((column) => {
2667
- column.forEach((point) => {
2668
- const pointNumber = Number(point);
2669
- if (pointNumber > max) {
2670
- max = pointNumber;
2671
- }
2672
- if (pointNumber < min) {
2673
- min = pointNumber;
2674
- }
2675
- });
2699
+ range2 = extendMinMaxWithColumn(column, range2);
2676
2700
  });
2677
2701
  });
2678
2702
  });
2679
- return [min, max];
2703
+ return [range2.min, range2.max];
2680
2704
  };
2681
2705
  var determineMinMax = (splitData, trellisSharedScale, yAxisMin, yAxisMax, stackMode) => {
2682
2706
  if (!trellisSharedScale || stackMode === "stacked100" || yAxisMin !== "auto" && yAxisMax !== "auto")
@@ -2692,27 +2716,27 @@ var visualization_canvas_exports = {};
2692
2716
  __export(visualization_canvas_exports, {
2693
2717
  default: () => visualization_canvas_default
2694
2718
  });
2695
- var defaultImport40 = __toESM(require("@splunk/visualization-canvas"));
2719
+ var defaultImport41 = __toESM(require("@splunk/visualization-canvas"));
2696
2720
  __reExport(visualization_canvas_exports, require("@splunk/visualization-canvas"));
2697
- var visualization_canvas_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
2721
+ var visualization_canvas_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
2698
2722
 
2699
2723
  // esm-externals:@splunk/react-icons/Triangle
2700
2724
  var Triangle_exports = {};
2701
2725
  __export(Triangle_exports, {
2702
2726
  default: () => Triangle_default
2703
2727
  });
2704
- var defaultImport41 = __toESM(require("@splunk/react-icons/Triangle"));
2728
+ var defaultImport42 = __toESM(require("@splunk/react-icons/Triangle"));
2705
2729
  __reExport(Triangle_exports, require("@splunk/react-icons/Triangle"));
2706
- var Triangle_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
2730
+ var Triangle_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
2707
2731
 
2708
2732
  // esm-externals:@splunk/visualizations-shared/simpleXMLOptions
2709
2733
  var simpleXMLOptions_exports = {};
2710
2734
  __export(simpleXMLOptions_exports, {
2711
2735
  default: () => simpleXMLOptions_default
2712
2736
  });
2713
- var defaultImport42 = __toESM(require("@splunk/visualizations-shared/simpleXMLOptions"));
2737
+ var defaultImport43 = __toESM(require("@splunk/visualizations-shared/simpleXMLOptions"));
2714
2738
  __reExport(simpleXMLOptions_exports, require("@splunk/visualizations-shared/simpleXMLOptions"));
2715
- var simpleXMLOptions_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
2739
+ var simpleXMLOptions_default = "default" in defaultImport43 ? defaultImport43.default : defaultImport43;
2716
2740
 
2717
2741
  // src/common/chartingUtils.ts
2718
2742
  var DEFAULT_LINE_WIDTH = 2;
@@ -2751,9 +2775,9 @@ var shouldEnableSearchZoom = (eventHandlers = [], xField = "") => {
2751
2775
  const xAxisIsTime = xField === "_time";
2752
2776
  return !!rangeSelectEventHandler && xAxisIsTime;
2753
2777
  };
2754
- var canvasSupportedTimeSeriesCharts = ["splunk.line", "splunk.area"];
2778
+ var canvasSupportedTimeSeriesCharts = /* @__PURE__ */ new Set(["splunk.line", "splunk.area"]);
2755
2779
  var isTimeSeriesCanvasRenderSupported = (vizConfigKey) => {
2756
- return canvasSupportedTimeSeriesCharts.includes(vizConfigKey);
2780
+ return canvasSupportedTimeSeriesCharts.has(vizConfigKey);
2757
2781
  };
2758
2782
  var filterChartDataFromInternalFields = (chartData) => {
2759
2783
  const { fields, columns } = chartData;
@@ -2769,7 +2793,7 @@ var filterChartDataFromInternalFields = (chartData) => {
2769
2793
  return { fields: filteredFields, columns: filteredColumns };
2770
2794
  };
2771
2795
  var convert2DArrayToNumbers = (arr) => {
2772
- return arr.map((subArray) => subArray.map((element) => parseFloat(element)));
2796
+ return arr.map((subArray) => subArray.map((element) => Number.parseFloat(element)));
2773
2797
  };
2774
2798
  var parseAxisValue = (val) => {
2775
2799
  if (val === void 0 || val === null || val === "auto" || val === "") {
@@ -2807,6 +2831,7 @@ var getLegend = (props) => {
2807
2831
  return (0, visualization_canvas_exports.TopLegendFactory)(__spreadValues({
2808
2832
  wrap: true
2809
2833
  }, commonLegendProps));
2834
+ // Note: By default, use right legend
2810
2835
  default:
2811
2836
  return (0, visualization_canvas_exports.SideLegendFactory)(__spreadValues({}, commonLegendProps));
2812
2837
  }
@@ -2939,10 +2964,10 @@ var getSeriesOverrides = (opts) => {
2939
2964
  let spanGaps;
2940
2965
  if (nullValueMode === "gaps") {
2941
2966
  spanGaps = false;
2942
- } else if (nullValueMode != null) {
2943
- spanGaps = true;
2944
- } else {
2967
+ } else if (nullValueMode == null) {
2945
2968
  spanGaps = void 0;
2969
+ } else {
2970
+ spanGaps = true;
2946
2971
  }
2947
2972
  const replaceNullsWithZero = nullValueMode === "zero" ? true : void 0;
2948
2973
  const isAreaChart = type === "area";
@@ -3312,11 +3337,11 @@ var TimeSeriesChartWrapper = (props) => {
3312
3337
  y2AxisMajorUnitFromSimpleXML,
3313
3338
  y2AxisMajorTickInterval
3314
3339
  );
3315
- const xAxisMajorTickSizeNum = xAxisMajorTickSize != null ? Number(xAxisMajorTickSize) : void 0;
3316
- const yAxisMajorTickSizeNum = yAxisMajorTickSize != null ? Number(yAxisMajorTickSize) : void 0;
3317
- const y2AxisMajorTickSizeNum = y2AxisMajorTickSize != null ? Number(y2AxisMajorTickSize) : void 0;
3318
- const yAxisMinorTickSizeNum = yAxisMinorTickSize != null ? Number(yAxisMinorTickSize) : void 0;
3319
- const y2AxisMinorTickSizeNum = y2AxisMinorTickSize != null ? Number(y2AxisMinorTickSize) : void 0;
3340
+ const xAxisMajorTickSizeNum = xAxisMajorTickSize == null ? void 0 : Number(xAxisMajorTickSize);
3341
+ const yAxisMajorTickSizeNum = yAxisMajorTickSize == null ? void 0 : Number(yAxisMajorTickSize);
3342
+ const y2AxisMajorTickSizeNum = y2AxisMajorTickSize == null ? void 0 : Number(y2AxisMajorTickSize);
3343
+ const yAxisMinorTickSizeNum = yAxisMinorTickSize == null ? void 0 : Number(yAxisMinorTickSize);
3344
+ const y2AxisMinorTickSizeNum = y2AxisMinorTickSize == null ? void 0 : Number(y2AxisMinorTickSize);
3320
3345
  const areaOpacityForCanvas = getAreaOpacityForCanvas(areaOpacity);
3321
3346
  const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : void 0;
3322
3347
  const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : void 0;
@@ -3728,6 +3753,76 @@ var buildEventCallbackProps = (supportedEvents, evaluatedOptionsToUse, onEventTr
3728
3753
  });
3729
3754
  return result;
3730
3755
  };
3756
+ var buildAllEventCallbackProps = (events, evaluatedOptionsToUse, onEventTrigger, { supportsEvents, hasEventHandlers, mode }) => {
3757
+ if (!supportsEvents) return {};
3758
+ const defaultEvents = {};
3759
+ const userEvents = {};
3760
+ Object.entries(events || {}).forEach(([eventKey, eventConfig]) => {
3761
+ (eventConfig.source === "default" ? defaultEvents : userEvents)[eventKey] = eventConfig;
3762
+ });
3763
+ const userProps = hasEventHandlers && mode === "view" ? buildEventCallbackProps(userEvents, evaluatedOptionsToUse, onEventTrigger) : {};
3764
+ return __spreadValues(__spreadValues({}, userProps), buildEventCallbackProps(defaultEvents, evaluatedOptionsToUse, onEventTrigger));
3765
+ };
3766
+ var applyContextTimezone = (localeContext) => {
3767
+ if (localeContext.serializedTimezone && !moment_default.getDefaultSplunkTimezone()) {
3768
+ moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
3769
+ }
3770
+ };
3771
+ var getAsyncOptionsEvaluationParams = ({
3772
+ visualizationID,
3773
+ props,
3774
+ optionsToEvaluate,
3775
+ downsampledDataSources,
3776
+ vizConfig,
3777
+ bypassCloneDeepOptionScope,
3778
+ lazyLoadingDataFrame
3779
+ }) => {
3780
+ return {
3781
+ visualizationID,
3782
+ props,
3783
+ options: __spreadValues({}, optionsToEvaluate),
3784
+ dataSources: downsampledDataSources,
3785
+ theme: vizConfig.themes,
3786
+ bypassCloneDeepOptionScope,
3787
+ lazyLoadingDataFrame
3788
+ };
3789
+ };
3790
+ var evaluateOptionsSync = ({
3791
+ optionsToEvaluate,
3792
+ downsampledDataSources,
3793
+ dataSourcesInState,
3794
+ dataFramesInState,
3795
+ setDataSourcesInState,
3796
+ setDataFramesInState,
3797
+ computeDataFrames,
3798
+ featureFlagContext,
3799
+ themeFunc
3800
+ }) => {
3801
+ let dataFrames = dataFramesInState;
3802
+ if (downsampledDataSources !== dataSourcesInState) {
3803
+ setDataSourcesInState(downsampledDataSources);
3804
+ dataFrames = Options_exports.Options.dataFrameFromDataSource(
3805
+ downsampledDataSources,
3806
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
3807
+ );
3808
+ setDataFramesInState(dataFrames);
3809
+ }
3810
+ let mergedFrames = dataFrames;
3811
+ if (computeDataFrames && dataFrames) {
3812
+ const derivedFrames = computeDataFrames({
3813
+ dataSources: downsampledDataSources,
3814
+ options: optionsToEvaluate.options
3815
+ });
3816
+ mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
3817
+ }
3818
+ return Options_exports.Options.evaluate(
3819
+ optionsToEvaluate,
3820
+ downsampledDataSources,
3821
+ themeFunc,
3822
+ mergedFrames,
3823
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
3824
+ );
3825
+ };
3731
3826
  var withDashboardViz = (opts) => {
3732
3827
  const {
3733
3828
  ReactViz,
@@ -3759,11 +3854,7 @@ var withDashboardViz = (opts) => {
3759
3854
  onRequestParamsChange = lodash_exports.noop
3760
3855
  } = props;
3761
3856
  const localeContext = react_exports.useContext(TimezoneContext_default);
3762
- if (localeContext.serializedTimezone) {
3763
- if (!moment_default.getDefaultSplunkTimezone()) {
3764
- moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
3765
- }
3766
- }
3857
+ applyContextTimezone(localeContext);
3767
3858
  const themeFunc = (themeVar) => {
3768
3859
  var _a2, _b;
3769
3860
  return (_b = (_a2 = vizConfig.themes)[themeVar]) == null ? void 0 : _b.call(_a2, props);
@@ -3791,7 +3882,12 @@ var withDashboardViz = (opts) => {
3791
3882
  featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableAcceleratedRender
3792
3883
  );
3793
3884
  const isAcceleratedRenderOn = isAcceleratedRenderFeatureFlagOn && isTimeSeriesCanvasRenderSupported(vizConfig.key) && (options == null ? void 0 : options.acceleratedRender) === true;
3794
- const isMounted = react_exports.useRef(true);
3885
+ const bypassCloneDeepOptionScope = Boolean(
3886
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
3887
+ );
3888
+ const lazyLoadingDataFrame = Boolean(
3889
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
3890
+ );
3795
3891
  const optionsToEvaluate = react_exports.useMemo(() => {
3796
3892
  var _a2;
3797
3893
  const legendDisplay = turnOffLegendDisplayWhenTrellisIsOn(isTrellisOn, options);
@@ -3830,63 +3926,74 @@ var withDashboardViz = (opts) => {
3830
3926
  threshold,
3831
3927
  isDownsamplingEnabled
3832
3928
  });
3833
- evaluatedOptions = useDeepMemo(() => {
3929
+ const asyncOptionsEvaluationParams = useDeepMemo(
3930
+ () => getAsyncOptionsEvaluationParams({
3931
+ visualizationID,
3932
+ props,
3933
+ optionsToEvaluate,
3934
+ downsampledDataSources,
3935
+ vizConfig,
3936
+ bypassCloneDeepOptionScope,
3937
+ lazyLoadingDataFrame
3938
+ }),
3939
+ [
3940
+ visualizationID,
3941
+ optionsToEvaluate,
3942
+ downsampledDataSources,
3943
+ vizConfig,
3944
+ bypassCloneDeepOptionScope,
3945
+ lazyLoadingDataFrame,
3946
+ currentThemeFamily,
3947
+ currentThemeColorScheme,
3948
+ currentThemeDensity,
3949
+ localeContext.serializedTimezone
3950
+ ]
3951
+ );
3952
+ react_exports.useEffect(() => {
3953
+ if (!useAsyncEvaluatedOptions) {
3954
+ return void 0;
3955
+ }
3956
+ let ownsEvaluation = true;
3834
3957
  try {
3835
- if (useAsyncEvaluatedOptions) {
3836
- const asyncDynamicOptionsEvaluatorParams = {
3837
- visualizationID,
3838
- props,
3839
- options: optionsToEvaluate,
3840
- dataSources: downsampledDataSources,
3841
- theme: vizConfig.themes,
3842
- bypassCloneDeepOptionScope: Boolean(
3843
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
3844
- ),
3845
- lazyLoadingDataFrame: Boolean(
3846
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
3847
- )
3848
- };
3849
- async_dynamic_options_evaluator_default.evaluate(asyncDynamicOptionsEvaluatorParams).then((results) => {
3958
+ async_dynamic_options_evaluator_default.evaluate(asyncOptionsEvaluationParams).then((results) => {
3959
+ if (ownsEvaluation) {
3850
3960
  setEvaluatedOptionsAsync(results.results);
3851
- }).catch(() => {
3852
- if (isMounted.current) {
3853
- setUseAsyncEvaluatedOptions(false);
3854
- }
3855
- });
3856
- } else {
3857
- let dataFrames = dataFramesInState;
3858
- if (downsampledDataSources !== dataSourcesInState) {
3859
- setDataSourcesInState(downsampledDataSources);
3860
- dataFrames = Options_exports.Options.dataFrameFromDataSource(
3861
- downsampledDataSources,
3862
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
3863
- );
3864
- setDataFramesInState(dataFrames);
3865
3961
  }
3866
- let mergedFrames = dataFrames;
3867
- if (computeDataFrames && dataFrames) {
3868
- const derivedFrames = computeDataFrames({
3869
- dataSources: downsampledDataSources,
3870
- options: optionsToEvaluate.options
3871
- });
3872
- mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
3962
+ }).catch(() => {
3963
+ if (ownsEvaluation) {
3964
+ setUseAsyncEvaluatedOptions(false);
3873
3965
  }
3874
- const result = Options_exports.Options.evaluate(
3875
- optionsToEvaluate,
3876
- downsampledDataSources,
3877
- themeFunc,
3878
- mergedFrames,
3879
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
3880
- );
3881
- return result;
3966
+ });
3967
+ } catch (e) {
3968
+ setUseAsyncEvaluatedOptions(false);
3969
+ }
3970
+ return () => {
3971
+ ownsEvaluation = false;
3972
+ async_dynamic_options_evaluator_default.reset(visualizationID);
3973
+ };
3974
+ }, [asyncOptionsEvaluationParams, useAsyncEvaluatedOptions, visualizationID]);
3975
+ evaluatedOptions = useDeepMemo(() => {
3976
+ try {
3977
+ if (useAsyncEvaluatedOptions) {
3978
+ return {};
3882
3979
  }
3980
+ return evaluateOptionsSync({
3981
+ optionsToEvaluate,
3982
+ downsampledDataSources,
3983
+ dataSourcesInState,
3984
+ dataFramesInState,
3985
+ setDataSourcesInState,
3986
+ setDataFramesInState,
3987
+ computeDataFrames,
3988
+ featureFlagContext,
3989
+ themeFunc
3990
+ });
3883
3991
  } catch (e) {
3884
3992
  if (e instanceof Error) {
3885
3993
  console.error(`unexpected error evaluating options: ${e.message}`);
3886
3994
  }
3887
3995
  return {};
3888
3996
  }
3889
- return {};
3890
3997
  }, [
3891
3998
  currentThemeFamily,
3892
3999
  currentThemeColorScheme,
@@ -3896,7 +4003,7 @@ var withDashboardViz = (opts) => {
3896
4003
  localeContext.serializedTimezone,
3897
4004
  useAsyncEvaluatedOptions
3898
4005
  ]);
3899
- const evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync;
4006
+ const evaluatedOptionsToUse = useAsyncEvaluatedOptions ? evaluatedOptionsAsync : evaluatedOptions;
3900
4007
  let dataSourceMetadata = {};
3901
4008
  const OptionKey = "paginateDataSourceKey";
3902
4009
  const optsKey = (0, lodash_exports.has)(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey];
@@ -3918,7 +4025,7 @@ var withDashboardViz = (opts) => {
3918
4025
  sortParams,
3919
4026
  paginatorParams
3920
4027
  };
3921
- if (vizConfig.supports.indexOf("page-and-sort" /* PAGE_AND_SORT */) === -1 && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
4028
+ if (!vizConfig.supports.includes("page-and-sort" /* PAGE_AND_SORT */) && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
3922
4029
  dataSourceMetadata = {};
3923
4030
  }
3924
4031
  const clonedEvaluatedOptions = __spreadValues({}, evaluatedOptionsToUse);
@@ -3928,14 +4035,6 @@ var withDashboardViz = (opts) => {
3928
4035
  react_exports.useEffect(() => {
3929
4036
  onComputedProps(clonedEvaluatedOptions);
3930
4037
  });
3931
- react_exports.useEffect(() => {
3932
- return () => {
3933
- if (useAsyncEvaluatedOptions) {
3934
- isMounted.current = false;
3935
- async_dynamic_options_evaluator_default.reset(visualizationID);
3936
- }
3937
- };
3938
- }, []);
3939
4038
  const { requiredProps = [], supports } = vizConfig;
3940
4039
  const missing = missingKeys(requiredProps, evaluatedOptionsToUse);
3941
4040
  if (missing.length > 0 && supports.includes("placeholder" /* PLACEHOLDER */) && vizConfig.key !== "splunk.singlevalue") {
@@ -3950,7 +4049,16 @@ var withDashboardViz = (opts) => {
3950
4049
  }
3951
4050
  );
3952
4051
  }
3953
- const eventCallbackProps = hasEventHandlers && mode === "view" && vizConfig.supports.includes("events" /* EVENTS */) ? buildEventCallbackProps(vizConfig.events, evaluatedOptionsToUse, onEventTrigger) : {};
4052
+ const eventCallbackProps = buildAllEventCallbackProps(
4053
+ vizConfig.events,
4054
+ evaluatedOptionsToUse,
4055
+ onEventTrigger,
4056
+ {
4057
+ supportsEvents: vizConfig.supports.includes("events" /* EVENTS */),
4058
+ hasEventHandlers,
4059
+ mode
4060
+ }
4061
+ );
3954
4062
  const computedVizProps = computeVizProps2(__spreadProps(__spreadValues(__spreadProps(__spreadValues(__spreadValues({}, props), evaluatedOptionsToUse), {
3955
4063
  // Align option transformation with the actual renderer selected below.
3956
4064
  // This prevents canvas-only option preservation from leaking into Highcharts mode.
@@ -3978,8 +4086,9 @@ var withDashboardViz = (opts) => {
3978
4086
  onEventTrigger: SplunkVisualization_default.defaults.onEventTrigger
3979
4087
  });
3980
4088
  DashboardViz.config = vizConfig;
3981
- return (0, styled_components_exports.withTheme)(
3982
- withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)
4089
+ return Object.assign(
4090
+ (0, styled_components_exports.withTheme)(withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)),
4091
+ { config: vizConfig }
3983
4092
  );
3984
4093
  };
3985
4094
  var withDashboardViz_default = withDashboardViz;
@@ -3989,36 +4098,36 @@ var PresetPalettes_exports = {};
3989
4098
  __export(PresetPalettes_exports, {
3990
4099
  default: () => PresetPalettes_default
3991
4100
  });
3992
- var defaultImport43 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
4101
+ var defaultImport44 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
3993
4102
  __reExport(PresetPalettes_exports, require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
3994
- var PresetPalettes_default = "default" in defaultImport43 ? defaultImport43.default : defaultImport43;
4103
+ var PresetPalettes_default = "default" in defaultImport44 ? defaultImport44.default : defaultImport44;
3995
4104
 
3996
4105
  // esm-externals:@splunk/themes/pick
3997
4106
  var pick_exports2 = {};
3998
4107
  __export(pick_exports2, {
3999
4108
  default: () => pick_default2
4000
4109
  });
4001
- var defaultImport44 = __toESM(require("@splunk/themes/pick"));
4110
+ var defaultImport45 = __toESM(require("@splunk/themes/pick"));
4002
4111
  __reExport(pick_exports2, require("@splunk/themes/pick"));
4003
- var pick_default2 = "default" in defaultImport44 ? defaultImport44.default : defaultImport44;
4112
+ var pick_default2 = "default" in defaultImport45 ? defaultImport45.default : defaultImport45;
4004
4113
 
4005
4114
  // esm-externals:@splunk/visualizations-shared/configUtils
4006
4115
  var configUtils_exports = {};
4007
4116
  __export(configUtils_exports, {
4008
4117
  default: () => configUtils_default
4009
4118
  });
4010
- var defaultImport45 = __toESM(require("@splunk/visualizations-shared/configUtils"));
4119
+ var defaultImport46 = __toESM(require("@splunk/visualizations-shared/configUtils"));
4011
4120
  __reExport(configUtils_exports, require("@splunk/visualizations-shared/configUtils"));
4012
- var configUtils_default = "default" in defaultImport45 ? defaultImport45.default : defaultImport45;
4121
+ var configUtils_default = "default" in defaultImport46 ? defaultImport46.default : defaultImport46;
4013
4122
 
4014
4123
  // esm-externals:@splunk/visualization-icons
4015
4124
  var visualization_icons_exports = {};
4016
4125
  __export(visualization_icons_exports, {
4017
4126
  default: () => visualization_icons_default
4018
4127
  });
4019
- var defaultImport46 = __toESM(require("@splunk/visualization-icons"));
4128
+ var defaultImport47 = __toESM(require("@splunk/visualization-icons"));
4020
4129
  __reExport(visualization_icons_exports, require("@splunk/visualization-icons"));
4021
- var visualization_icons_default = "default" in defaultImport46 ? defaultImport46.default : defaultImport46;
4130
+ var visualization_icons_default = "default" in defaultImport47 ? defaultImport47.default : defaultImport47;
4022
4131
 
4023
4132
  // src/common/configContext/singleValueContext.ts
4024
4133
  var defaultContext = {
@@ -4786,18 +4895,9 @@ var Paginator_exports = {};
4786
4895
  __export(Paginator_exports, {
4787
4896
  default: () => Paginator_default
4788
4897
  });
4789
- var defaultImport47 = __toESM(require("@splunk/react-ui/Paginator"));
4898
+ var defaultImport48 = __toESM(require("@splunk/react-ui/Paginator"));
4790
4899
  __reExport(Paginator_exports, require("@splunk/react-ui/Paginator"));
4791
- var Paginator_default = "default" in defaultImport47 ? defaultImport47.default : defaultImport47;
4792
-
4793
- // esm-externals:@splunk/themes
4794
- var themes_exports = {};
4795
- __export(themes_exports, {
4796
- default: () => themes_default
4797
- });
4798
- var defaultImport48 = __toESM(require("@splunk/themes"));
4799
- __reExport(themes_exports, require("@splunk/themes"));
4800
- var themes_default = "default" in defaultImport48 ? defaultImport48.default : defaultImport48;
4900
+ var Paginator_default = "default" in defaultImport48 ? defaultImport48.default : defaultImport48;
4801
4901
 
4802
4902
  // esm-externals:@splunk/themes/useSplunkTheme
4803
4903
  var useSplunkTheme_exports = {};
@@ -4829,7 +4929,7 @@ var sortTrellisKeys = (keys, trellisSortBy, trellisSortOrder, modifiedDataSource
4829
4929
  if (trellisSortBy === "trend") {
4830
4930
  optionKey = "trendValue";
4831
4931
  } else {
4832
- optionKey = mergedOptions.value !== void 0 ? "value" : "majorValue";
4932
+ optionKey = mergedOptions.value === void 0 ? "majorValue" : "value";
4833
4933
  }
4834
4934
  keys.sort((a, b) => {
4835
4935
  const valA = evaluatePanelOption(
@@ -4981,13 +5081,13 @@ var withTrellis = (Viz) => {
4981
5081
  const noColumns = columns === void 0;
4982
5082
  const noFields = fields === void 0;
4983
5083
  const updateDataDisplay = (currPage) => {
4984
- if (!showPaginator) {
4985
- setPagedData(splitByKeys);
4986
- setPageNum(1);
4987
- } else {
5084
+ if (showPaginator) {
4988
5085
  const startIdx = pageCount * (currPage - 1);
4989
5086
  const paged = splitByKeys.slice(startIdx, startIdx + pageCount);
4990
5087
  setPagedData(paged);
5088
+ } else {
5089
+ setPagedData(splitByKeys);
5090
+ setPageNum(1);
4991
5091
  }
4992
5092
  };
4993
5093
  (0, react_exports.useEffect)(() => {
@@ -5113,7 +5213,7 @@ var computeVizProps = ({
5113
5213
  }) => {
5114
5214
  let iconUrl = icon;
5115
5215
  if (icon && (0, iconUtils_exports.isRelativeUrlPath)(icon)) {
5116
- iconUrl = `${window.location.origin}${icon}`;
5216
+ iconUrl = `${globalThis.location.origin}${icon}`;
5117
5217
  }
5118
5218
  if (iconUrl && ((0, iconUtils_exports.isRemoteIcon)(iconUrl) || (0, iconUtils_exports.isDataURI)(iconUrl) || (0, iconUtils_exports.isRelativeUrlPath)(icon))) {
5119
5219
  IconComponent = /* @__PURE__ */ react_exports.createElement(RemoteIcon_default, { iconURL: iconUrl });