@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
package/SingleValue.js CHANGED
@@ -324,7 +324,7 @@ var getTrendColor = ({
324
324
  if (hasBackground(customizedBgColor) && !isIdenticalColor(customizedBgColor, defaultBackgroundColor2) && !isIdenticalColor(customizedBgColor, defaultBlockFontColor)) {
325
325
  return defaultBlockFontColor;
326
326
  }
327
- const isInvalidTrend = trendDisplay === "percent" && trendValue === parseFloat(majorValue);
327
+ const isInvalidTrend = trendDisplay === "percent" && trendValue === Number.parseFloat(majorValue);
328
328
  if (trendValue === 0 || isInvalidTrend) {
329
329
  return defaultFontColor;
330
330
  }
@@ -365,7 +365,7 @@ var computeText = ({
365
365
  let text = (0, numberUtils_exports.isNumerial)(value) ? (0, numberUtils_exports.formatNumber)(value, numberPrecision, {
366
366
  useThousandSeparators: shouldUseThousandSeparators,
367
367
  useTrendUnits: shouldAbbreviateValue
368
- }) : value;
368
+ }) : String(value != null ? value : "");
369
369
  text = text || "";
370
370
  return text;
371
371
  };
@@ -395,23 +395,20 @@ var getTrendText = ({
395
395
  shouldUseThousandSeparators,
396
396
  shouldAbbreviateValue: shouldAbbreviateTrendValue
397
397
  });
398
- if (trendValue === "" || !(0, numberUtils_exports.isNumerial)(trendValue)) {
399
- return "";
400
- }
398
+ let trendText = "";
401
399
  const showPercent = trendDisplay === "percent";
402
- if (!showPercent) {
403
- return compute(trendValue);
404
- }
405
- const diff = Math.abs(trendValue - majorValue);
406
- let val = trendValue / diff * 100;
407
- if (trendValue === 0 && diff === 0) {
408
- val = 0;
409
- }
410
- if (!Number.isFinite(val)) {
411
- return "N/A";
400
+ const isValidTrend = trendValue !== "" && (0, numberUtils_exports.isNumerial)(trendValue);
401
+ if (isValidTrend && !showPercent) {
402
+ trendText = compute(trendValue);
403
+ } else if (isValidTrend && showPercent) {
404
+ const diff = Math.abs(trendValue - majorValue);
405
+ let val = trendValue / diff * 100;
406
+ if (trendValue === 0 && diff === 0) {
407
+ val = 0;
408
+ }
409
+ trendText = Number.isFinite(val) ? `${compute(val)}%` : "N/A";
412
410
  }
413
- const text = compute(val);
414
- return `${text}%`;
411
+ return trendText;
415
412
  };
416
413
  var computeFontSize = (text, { width, height }, fontFamily = DEFAULT_FONT_FAMILY, fontWeight = "normal") => {
417
414
  const widthInDefaultFont = (0, domUtils_exports.computeTextSize)(text, `${fontWeight} ${DEFAULT_FONT}px ${fontFamily}`);
@@ -419,7 +416,7 @@ var computeFontSize = (text, { width, height }, fontFamily = DEFAULT_FONT_FAMILY
419
416
  width / widthInDefaultFont * DEFAULT_FONT,
420
417
  height / DEFAULT_FONT * DEFAULT_FONT
421
418
  );
422
- return parseInt(fontSize, 10);
419
+ return Number.parseInt(fontSize, 10);
423
420
  };
424
421
  var getMajorFontSize = ({ width, height, unit, majorText, spaceRatio = 1 }) => {
425
422
  const majorTextCalc = unit ? `${unit}${majorText}` : majorText;
@@ -435,7 +432,7 @@ var getTrendFontSize = ({ width, height, trendText, spaceRatio = 1 }) => {
435
432
  width: width * spaceRatio,
436
433
  height
437
434
  });
438
- trendFontSize = parseInt(trendFontSize, 10) * spaceRatio;
435
+ trendFontSize = Number.parseInt(trendFontSize, 10) * spaceRatio;
439
436
  }
440
437
  return trendFontSize;
441
438
  };
@@ -512,7 +509,7 @@ var updateVizInSmallSpace = ({
512
509
  let newTextSize = majorTextFontSize;
513
510
  while (newTextSize < 12 && removeIndex < toRemoveList.length) {
514
511
  const toRemove = toRemoveList[removeIndex];
515
- newProps = __spreadValues(__spreadValues({}, newProps), {
512
+ newProps = __spreadProps(__spreadValues({}, newProps), {
516
513
  [toRemove.key]: toRemove.value
517
514
  });
518
515
  newMajorAndTrend = getMajorAndTrend(__spreadValues({
@@ -645,9 +642,9 @@ var getUnchangedColorDelta = (r, g, b, ratio) => {
645
642
  };
646
643
  var changeColor = (color, ratio) => {
647
644
  const hex = color.replace(/(0x|#)/, "");
648
- const r = parseInt(hex.substr(0, 2), 16);
649
- const g = parseInt(hex.substr(2, 2), 16);
650
- const b = parseInt(hex.substr(4, 2), 16);
645
+ const r = Number.parseInt(hex.substr(0, 2), 16);
646
+ const g = Number.parseInt(hex.substr(2, 2), 16);
647
+ const b = Number.parseInt(hex.substr(4, 2), 16);
651
648
  let newR = Math.max(Math.min(Math.floor(r * ratio), 255), 0);
652
649
  let newG = Math.max(Math.min(Math.floor(g * ratio), 255), 0);
653
650
  let newB = Math.max(Math.min(Math.floor(b * ratio), 255), 0);
@@ -657,7 +654,7 @@ var changeColor = (color, ratio) => {
657
654
  newG = adjustRGB(newG, delta);
658
655
  newB = adjustRGB(newB, delta);
659
656
  }
660
- return `#${newR.toString(16).padStart(2, 0)}${newG.toString(16).padStart(2, 0)}${newB.toString(16).padStart(2, 0)}`;
657
+ return `#${newR.toString(16).padStart(2, "0")}${newG.toString(16).padStart(2, "0")}${newB.toString(16).padStart(2, "0")}`;
661
658
  };
662
659
  var darken = (color) => changeColor(color, 0.5);
663
660
  var handleValueClickCallback = (ev, majorValue, majorValueField, trendValue, onValueClick, trellisContext = {}) => {
@@ -713,7 +710,7 @@ var Column = styled_components_default.div`
713
710
  flex-direction: row;
714
711
  justify-content: ${(props) => props.justify || "flex-end"};
715
712
  height: ${(props) => props.size || 12}px;
716
- ${(props) => props.size ? `margin: 0 ${parseInt(props.size, 10) * 0.2 || 5}px;` : ""};
713
+ ${(props) => props.size ? `margin: 0 ${Number.parseInt(props.size, 10) * 0.2 || 5}px;` : ""};
717
714
  `;
718
715
  var Text = styled_components_default.div`
719
716
  white-space: nowrap;
@@ -724,15 +721,15 @@ var Text = styled_components_default.div`
724
721
  line-height: ${(props) => props.size || 12}px;
725
722
  display: flex;
726
723
  align-self: baseline;
727
- ${(props) => props.size ? `margin-left: ${parseInt(props.size, 10) * 0.2 || 5}px;` : ""};
724
+ ${(props) => props.size ? `margin-left: ${Number.parseInt(props.size, 10) * 0.2 || 5}px;` : ""};
728
725
  `;
729
726
  var TrendValue = ({ fontSize, color, value, text }) => {
730
727
  let TrendIndicator = false;
731
728
  let ariaLabel = false;
732
- if (parseFloat(value, 10) > 0) {
729
+ if (Number.parseFloat(value, 10) > 0) {
733
730
  TrendIndicator = ArrowUp_default;
734
731
  ariaLabel = (0, i18n_exports._)("increase");
735
- } else if (parseFloat(value, 10) < 0) {
732
+ } else if (Number.parseFloat(value, 10) < 0) {
736
733
  TrendIndicator = ArrowDown_default;
737
734
  ariaLabel = (0, i18n_exports._)("decrease");
738
735
  }
@@ -1559,7 +1556,7 @@ var CONTENT_NEXT_TO_SPARKLINE_WIDTH_ALLOCATION_RATIO = 0.4;
1559
1556
  var LINEHEIGHT_FACTOR = 1.2;
1560
1557
  var CONTENT_SPARKLINE_SPACING = 16;
1561
1558
  var VALID_SPARKLINE_POSITIONS = ["below", "before", "after", "off"];
1562
- var getUnderLabelHeight = ({ underLabel, underLabelFontSize }) => underLabel && underLabel.length ? underLabelFontSize * LINEHEIGHT_FACTOR : 0;
1559
+ var getUnderLabelHeight = ({ underLabel, underLabelFontSize }) => (underLabel == null ? void 0 : underLabel.length) ? underLabelFontSize * LINEHEIGHT_FACTOR : 0;
1563
1560
  var getAvailableContentWidth = ({
1564
1561
  hasSparkline,
1565
1562
  isSparklinePositionBelow,
@@ -1592,14 +1589,14 @@ var parseSparklineValues = ({ sparklineValues }) => Array.isArray(sparklineValue
1592
1589
  }
1593
1590
  return numV || v;
1594
1591
  }) : void 0;
1595
- var shouldShowSparkline = ({ showSparkline, sparklineValues }) => showSparkline && Array.isArray(sparklineValues) && sparklineValues.length > 1 && sparklineValues.every((v) => v === null || !Number.isNaN((0, numberUtils_exports.parseNumber)(v))) && sparklineValues.filter((v) => v !== null).length > 0;
1592
+ var shouldShowSparkline = ({ showSparkline, sparklineValues }) => showSparkline && Array.isArray(sparklineValues) && sparklineValues.length > 1 && sparklineValues.every((v) => v === null || !Number.isNaN((0, numberUtils_exports.parseNumber)(v))) && sparklineValues.some((v) => v !== null);
1596
1593
  var getSparklineWidth = ({ width, isSparklinePositionBelow }) => {
1597
1594
  const spaceRatio = isSparklinePositionBelow ? 1 : 0.6;
1598
1595
  return width * spaceRatio;
1599
1596
  };
1600
1597
  var getSparklineHeight = ({ height, contentHeight, isSparklinePositionBelow }) => {
1601
1598
  const belowPositionHeight = height - contentHeight;
1602
- const sanitizedBelowPositionHeight = belowPositionHeight < 0 ? 0 : belowPositionHeight;
1599
+ const sanitizedBelowPositionHeight = Math.max(0, belowPositionHeight);
1603
1600
  return isSparklinePositionBelow ? sanitizedBelowPositionHeight : height;
1604
1601
  };
1605
1602
  var getSparklineSegments = ({ hasSparkline, sparklineHighlightSegments }) => hasSparkline && typeof sparklineHighlightSegments === "number" && sparklineHighlightSegments > 0 ? sparklineHighlightSegments + 1 : 0;
@@ -2283,7 +2280,10 @@ var useSortingParams = ({ requestParams, onRequestParamsChange }) => {
2283
2280
  onSort = (e, { sortKey, sortDir }) => {
2284
2281
  if (typeof sortKey === "string") {
2285
2282
  const nextSortDir = (0, lodash_exports.has)(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : "none";
2286
- onRequestParamsChange(__spreadValues(__spreadValues({}, requestParams), { offset: 0, sort: { [sortKey]: nextSortDir } }));
2283
+ onRequestParamsChange(__spreadProps(__spreadValues({}, requestParams), {
2284
+ offset: 0,
2285
+ sort: { [sortKey]: nextSortDir }
2286
+ }));
2287
2287
  } else {
2288
2288
  onRequestParamsChange(requestParams);
2289
2289
  }
@@ -2409,7 +2409,7 @@ var Cover = styled_components_default.div`
2409
2409
  bottom: 0;
2410
2410
  `;
2411
2411
  var Blocker = styled_components_default.div.attrs({
2412
- "data-splunk-visualization-version": "28.8.0 - 633c53372"
2412
+ "data-splunk-visualization-version": "28.9.0 - 96b03188d"
2413
2413
  })`
2414
2414
  position: relative;
2415
2415
  width: 100%;
@@ -2444,6 +2444,15 @@ var defaultImport31 = __toESM(require("@splunk/themes/variables"));
2444
2444
  __reExport(variables_exports, require("@splunk/themes/variables"));
2445
2445
  var variables_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
2446
2446
 
2447
+ // esm-externals:@splunk/themes
2448
+ var themes_exports = {};
2449
+ __export(themes_exports, {
2450
+ default: () => themes_default
2451
+ });
2452
+ var defaultImport32 = __toESM(require("@splunk/themes"));
2453
+ __reExport(themes_exports, require("@splunk/themes"));
2454
+ var themes_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2455
+
2447
2456
  // src/common/hocs/FixedSizeContainer.tsx
2448
2457
  var Item = styled_components_default.div.attrs(({ width }) => ({
2449
2458
  style: {
@@ -2499,7 +2508,7 @@ var withFixedSizeContainer = (Viz) => {
2499
2508
  FixSizeItem,
2500
2509
  {
2501
2510
  "data-test": "fix-size-item",
2502
- "data-splunk-visualization-version": "28.8.0 - 633c53372",
2511
+ "data-splunk-visualization-version": "28.9.0 - 96b03188d",
2503
2512
  width,
2504
2513
  height,
2505
2514
  backgroundColor
@@ -2520,6 +2529,14 @@ var shouldShowIconPlaceholder = (dataSources, loading = false) => {
2520
2529
  const noFields = fields === void 0;
2521
2530
  return loading || noData || noFields;
2522
2531
  };
2532
+ var PlaceholderContainer = styled_components_default.div`
2533
+ /* The inline token color wins when supported. Older browsers discard an
2534
+ unsupported oklch value and retain this inherited fallback instead. */
2535
+ color: ${(0, themes_exports.pick)({
2536
+ dark: "#fafafa",
2537
+ light: "#2c2c2c"
2538
+ })};
2539
+ `;
2523
2540
  var IconPlaceholder = (props) => {
2524
2541
  const {
2525
2542
  width = SplunkVisualization_default.defaults.width,
@@ -2534,7 +2551,6 @@ var IconPlaceholder = (props) => {
2534
2551
  style: {
2535
2552
  left: "50%",
2536
2553
  top: "50%",
2537
- color: iconColor,
2538
2554
  opacity: 0.15,
2539
2555
  position: "absolute",
2540
2556
  transform: "translate(-50%, -50%)"
@@ -2544,7 +2560,14 @@ var IconPlaceholder = (props) => {
2544
2560
  "data-test": "icon-placeholder"
2545
2561
  });
2546
2562
  }
2547
- return /* @__PURE__ */ react_exports.createElement("div", { style: { width, height, background: backgroundColor } }, content);
2563
+ return /* @__PURE__ */ react_exports.createElement(
2564
+ PlaceholderContainer,
2565
+ {
2566
+ "data-test": "icon-placeholder-container",
2567
+ style: { width, height, background: backgroundColor, color: iconColor }
2568
+ },
2569
+ content
2570
+ );
2548
2571
  };
2549
2572
  var IconPlaceholder_default = FixedSizeContainer_default(IconPlaceholder);
2550
2573
 
@@ -2609,7 +2632,7 @@ var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices)
2609
2632
  let avgY = 0;
2610
2633
  let avgRangeStart = Math.floor((i + 1) * every) + 1;
2611
2634
  let avgRangeEnd = Math.floor((i + 2) * every) + 1;
2612
- avgRangeEnd = avgRangeEnd < dataLength ? avgRangeEnd : dataLength;
2635
+ avgRangeEnd = Math.min(avgRangeEnd, dataLength);
2613
2636
  const avgRangeLength = avgRangeEnd - avgRangeStart;
2614
2637
  for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {
2615
2638
  avgX += Number(data[avgRangeStart][0]);
@@ -2644,9 +2667,9 @@ var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices)
2644
2667
  };
2645
2668
  var strictlyCoerceYColumn = (column, options) => {
2646
2669
  const isNullCoercionEnabled = options.nullValueDisplay === "zero";
2647
- const canLooselyCoerceSomeValues = column.findIndex(
2670
+ const canLooselyCoerceSomeValues = column.some(
2648
2671
  (value) => (0, numberUtils_exports.startsWithNumber)(`${value}`) || isNullCoercionEnabled && value === null
2649
- ) >= 0;
2672
+ );
2650
2673
  const coercedColumn = [];
2651
2674
  const canDownsampleColumn = !column.some((value) => {
2652
2675
  const coercedValue = Number(value);
@@ -2665,7 +2688,7 @@ var strictlyCoerceYColumn = (column, options) => {
2665
2688
  };
2666
2689
  var strictlyCoerceXColumn = (column, fieldType) => {
2667
2690
  if (fieldType === "number") {
2668
- const coercedXColumn = column.map((xValue) => Number(xValue));
2691
+ const coercedXColumn = column.map(Number);
2669
2692
  if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {
2670
2693
  return coercedXColumn;
2671
2694
  }
@@ -2964,16 +2987,16 @@ var FeatureFlags_exports = {};
2964
2987
  __export(FeatureFlags_exports, {
2965
2988
  default: () => FeatureFlags_default
2966
2989
  });
2967
- var defaultImport32 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
2990
+ var defaultImport33 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
2968
2991
  __reExport(FeatureFlags_exports, require("@splunk/visualization-context/FeatureFlags"));
2969
- var FeatureFlags_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2992
+ var FeatureFlags_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2970
2993
 
2971
2994
  // src/common/utils/featureFlagUtils.ts
2972
2995
  var getFeatureFlag = (context, flagName) => {
2973
- if (context && Object.keys(context).find((key) => key === flagName)) {
2996
+ if (context && Object.keys(context).includes(flagName)) {
2974
2997
  return context[flagName];
2975
2998
  }
2976
- if (Object.keys(FeatureFlags_default).find((key) => key === flagName)) {
2999
+ if (Object.keys(FeatureFlags_default).includes(flagName)) {
2977
3000
  return FeatureFlags_default[flagName];
2978
3001
  }
2979
3002
  return false;
@@ -2984,9 +3007,9 @@ var trellisUtils_exports = {};
2984
3007
  __export(trellisUtils_exports, {
2985
3008
  default: () => trellisUtils_default
2986
3009
  });
2987
- var defaultImport33 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3010
+ var defaultImport34 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
2988
3011
  __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
2989
- var trellisUtils_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
3012
+ var trellisUtils_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
2990
3013
 
2991
3014
  // src/common/utils/trellisUtils.ts
2992
3015
  var AGGREGATIONS = "aggregations";
@@ -3207,7 +3230,7 @@ var dataSourcesSplitByModeChart = (dataSource, splitBy) => {
3207
3230
  splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
3208
3231
  }
3209
3232
  if (splitByFields == null ? void 0 : splitByFields.includes(splitBy)) {
3210
- const splitByFieldIdx = splitByFields.findIndex((f) => f === splitBy);
3233
+ const splitByFieldIdx = splitByFields.indexOf(splitBy);
3211
3234
  const otherSplitBy = splitByFields.filter((f) => f !== splitBy);
3212
3235
  const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
3213
3236
  const nonDataSourceAggregations = [];
@@ -3241,17 +3264,17 @@ var dataSourcesSplitByModeStatsorUnknown = (dataSource, splitBy, splitMode) => {
3241
3264
  let splitByFields = [];
3242
3265
  let errorCode = null;
3243
3266
  if (fields.length > 0) {
3244
- splitByFields = splitMode !== trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields);
3267
+ splitByFields = splitMode === trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields);
3245
3268
  }
3246
3269
  const splitByIndex = fields.findIndex((field) => field.name === splitBy);
3247
3270
  if (splitByFields == null ? void 0 : splitByFields.includes(splitBy)) {
3248
3271
  const splitByColumn = (_f = (_e = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _e.data) == null ? void 0 : _f.columns[splitByIndex];
3249
3272
  splitDataSources = {};
3250
3273
  splitByColumn.forEach((val, idx) => {
3251
- if (!splitDataSources[val]) {
3252
- splitDataSources[val] = [idx];
3253
- } else {
3274
+ if (splitDataSources[val]) {
3254
3275
  splitDataSources[val].push(idx);
3276
+ } else {
3277
+ splitDataSources[val] = [idx];
3255
3278
  }
3256
3279
  });
3257
3280
  const cloneFields = (0, lodash_exports.cloneDeep)(fields);
@@ -3302,27 +3325,28 @@ var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
3302
3325
  }
3303
3326
  return {};
3304
3327
  };
3328
+ var extendMinMaxWithColumn = (column, range2) => column.reduce((acc, point) => {
3329
+ const pointNumber = Number(point);
3330
+ if (Number.isNaN(pointNumber)) {
3331
+ return acc;
3332
+ }
3333
+ return {
3334
+ min: Math.min(pointNumber, acc.min),
3335
+ max: Math.max(pointNumber, acc.max)
3336
+ };
3337
+ }, range2);
3305
3338
  var calculateSharedMinMax = (splitData) => {
3306
- let max2 = -Infinity;
3307
- let min2 = Infinity;
3339
+ let range2 = { min: Infinity, max: -Infinity };
3308
3340
  Object.keys(splitData).forEach((splitByKey) => {
3309
3341
  const datasources = splitData[splitByKey];
3310
3342
  Object.keys(datasources).forEach((datasourceName) => {
3311
3343
  const dataColumns = datasources[datasourceName].data.columns;
3312
3344
  dataColumns.forEach((column) => {
3313
- column.forEach((point) => {
3314
- const pointNumber = Number(point);
3315
- if (pointNumber > max2) {
3316
- max2 = pointNumber;
3317
- }
3318
- if (pointNumber < min2) {
3319
- min2 = pointNumber;
3320
- }
3321
- });
3345
+ range2 = extendMinMaxWithColumn(column, range2);
3322
3346
  });
3323
3347
  });
3324
3348
  });
3325
- return [min2, max2];
3349
+ return [range2.min, range2.max];
3326
3350
  };
3327
3351
  var determineMinMax = (splitData, trellisSharedScale, yAxisMin, yAxisMax, stackMode) => {
3328
3352
  if (!trellisSharedScale || stackMode === "stacked100" || yAxisMin !== "auto" && yAxisMax !== "auto")
@@ -3338,27 +3362,27 @@ var visualization_canvas_exports = {};
3338
3362
  __export(visualization_canvas_exports, {
3339
3363
  default: () => visualization_canvas_default
3340
3364
  });
3341
- var defaultImport34 = __toESM(require("@splunk/visualization-canvas"));
3365
+ var defaultImport35 = __toESM(require("@splunk/visualization-canvas"));
3342
3366
  __reExport(visualization_canvas_exports, require("@splunk/visualization-canvas"));
3343
- var visualization_canvas_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
3367
+ var visualization_canvas_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
3344
3368
 
3345
3369
  // esm-externals:@splunk/react-icons/Triangle
3346
3370
  var Triangle_exports = {};
3347
3371
  __export(Triangle_exports, {
3348
3372
  default: () => Triangle_default
3349
3373
  });
3350
- var defaultImport35 = __toESM(require("@splunk/react-icons/Triangle"));
3374
+ var defaultImport36 = __toESM(require("@splunk/react-icons/Triangle"));
3351
3375
  __reExport(Triangle_exports, require("@splunk/react-icons/Triangle"));
3352
- var Triangle_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
3376
+ var Triangle_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
3353
3377
 
3354
3378
  // esm-externals:@splunk/visualizations-shared/simpleXMLOptions
3355
3379
  var simpleXMLOptions_exports = {};
3356
3380
  __export(simpleXMLOptions_exports, {
3357
3381
  default: () => simpleXMLOptions_default
3358
3382
  });
3359
- var defaultImport36 = __toESM(require("@splunk/visualizations-shared/simpleXMLOptions"));
3383
+ var defaultImport37 = __toESM(require("@splunk/visualizations-shared/simpleXMLOptions"));
3360
3384
  __reExport(simpleXMLOptions_exports, require("@splunk/visualizations-shared/simpleXMLOptions"));
3361
- var simpleXMLOptions_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
3385
+ var simpleXMLOptions_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
3362
3386
 
3363
3387
  // src/common/chartingUtils.ts
3364
3388
  var DEFAULT_LINE_WIDTH = 2;
@@ -3397,9 +3421,9 @@ var shouldEnableSearchZoom = (eventHandlers = [], xField = "") => {
3397
3421
  const xAxisIsTime = xField === "_time";
3398
3422
  return !!rangeSelectEventHandler && xAxisIsTime;
3399
3423
  };
3400
- var canvasSupportedTimeSeriesCharts = ["splunk.line", "splunk.area"];
3424
+ var canvasSupportedTimeSeriesCharts = /* @__PURE__ */ new Set(["splunk.line", "splunk.area"]);
3401
3425
  var isTimeSeriesCanvasRenderSupported = (vizConfigKey) => {
3402
- return canvasSupportedTimeSeriesCharts.includes(vizConfigKey);
3426
+ return canvasSupportedTimeSeriesCharts.has(vizConfigKey);
3403
3427
  };
3404
3428
  var filterChartDataFromInternalFields = (chartData) => {
3405
3429
  const { fields, columns } = chartData;
@@ -3415,7 +3439,7 @@ var filterChartDataFromInternalFields = (chartData) => {
3415
3439
  return { fields: filteredFields, columns: filteredColumns };
3416
3440
  };
3417
3441
  var convert2DArrayToNumbers = (arr) => {
3418
- return arr.map((subArray) => subArray.map((element) => parseFloat(element)));
3442
+ return arr.map((subArray) => subArray.map((element) => Number.parseFloat(element)));
3419
3443
  };
3420
3444
  var parseAxisValue = (val) => {
3421
3445
  if (val === void 0 || val === null || val === "auto" || val === "") {
@@ -3453,6 +3477,7 @@ var getLegend = (props) => {
3453
3477
  return (0, visualization_canvas_exports.TopLegendFactory)(__spreadValues({
3454
3478
  wrap: true
3455
3479
  }, commonLegendProps));
3480
+ // Note: By default, use right legend
3456
3481
  default:
3457
3482
  return (0, visualization_canvas_exports.SideLegendFactory)(__spreadValues({}, commonLegendProps));
3458
3483
  }
@@ -3585,10 +3610,10 @@ var getSeriesOverrides = (opts) => {
3585
3610
  let spanGaps;
3586
3611
  if (nullValueMode === "gaps") {
3587
3612
  spanGaps = false;
3588
- } else if (nullValueMode != null) {
3589
- spanGaps = true;
3590
- } else {
3613
+ } else if (nullValueMode == null) {
3591
3614
  spanGaps = void 0;
3615
+ } else {
3616
+ spanGaps = true;
3592
3617
  }
3593
3618
  const replaceNullsWithZero = nullValueMode === "zero" ? true : void 0;
3594
3619
  const isAreaChart = type === "area";
@@ -3958,11 +3983,11 @@ var TimeSeriesChartWrapper = (props) => {
3958
3983
  y2AxisMajorUnitFromSimpleXML,
3959
3984
  y2AxisMajorTickInterval
3960
3985
  );
3961
- const xAxisMajorTickSizeNum = xAxisMajorTickSize != null ? Number(xAxisMajorTickSize) : void 0;
3962
- const yAxisMajorTickSizeNum = yAxisMajorTickSize != null ? Number(yAxisMajorTickSize) : void 0;
3963
- const y2AxisMajorTickSizeNum = y2AxisMajorTickSize != null ? Number(y2AxisMajorTickSize) : void 0;
3964
- const yAxisMinorTickSizeNum = yAxisMinorTickSize != null ? Number(yAxisMinorTickSize) : void 0;
3965
- const y2AxisMinorTickSizeNum = y2AxisMinorTickSize != null ? Number(y2AxisMinorTickSize) : void 0;
3986
+ const xAxisMajorTickSizeNum = xAxisMajorTickSize == null ? void 0 : Number(xAxisMajorTickSize);
3987
+ const yAxisMajorTickSizeNum = yAxisMajorTickSize == null ? void 0 : Number(yAxisMajorTickSize);
3988
+ const y2AxisMajorTickSizeNum = y2AxisMajorTickSize == null ? void 0 : Number(y2AxisMajorTickSize);
3989
+ const yAxisMinorTickSizeNum = yAxisMinorTickSize == null ? void 0 : Number(yAxisMinorTickSize);
3990
+ const y2AxisMinorTickSizeNum = y2AxisMinorTickSize == null ? void 0 : Number(y2AxisMinorTickSize);
3966
3991
  const areaOpacityForCanvas = getAreaOpacityForCanvas(areaOpacity);
3967
3992
  const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : void 0;
3968
3993
  const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : void 0;
@@ -4374,6 +4399,76 @@ var buildEventCallbackProps = (supportedEvents, evaluatedOptionsToUse, onEventTr
4374
4399
  });
4375
4400
  return result;
4376
4401
  };
4402
+ var buildAllEventCallbackProps = (events, evaluatedOptionsToUse, onEventTrigger, { supportsEvents, hasEventHandlers, mode }) => {
4403
+ if (!supportsEvents) return {};
4404
+ const defaultEvents = {};
4405
+ const userEvents = {};
4406
+ Object.entries(events || {}).forEach(([eventKey, eventConfig]) => {
4407
+ (eventConfig.source === "default" ? defaultEvents : userEvents)[eventKey] = eventConfig;
4408
+ });
4409
+ const userProps = hasEventHandlers && mode === "view" ? buildEventCallbackProps(userEvents, evaluatedOptionsToUse, onEventTrigger) : {};
4410
+ return __spreadValues(__spreadValues({}, userProps), buildEventCallbackProps(defaultEvents, evaluatedOptionsToUse, onEventTrigger));
4411
+ };
4412
+ var applyContextTimezone = (localeContext) => {
4413
+ if (localeContext.serializedTimezone && !moment_default.getDefaultSplunkTimezone()) {
4414
+ moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
4415
+ }
4416
+ };
4417
+ var getAsyncOptionsEvaluationParams = ({
4418
+ visualizationID,
4419
+ props,
4420
+ optionsToEvaluate,
4421
+ downsampledDataSources,
4422
+ vizConfig,
4423
+ bypassCloneDeepOptionScope,
4424
+ lazyLoadingDataFrame
4425
+ }) => {
4426
+ return {
4427
+ visualizationID,
4428
+ props,
4429
+ options: __spreadValues({}, optionsToEvaluate),
4430
+ dataSources: downsampledDataSources,
4431
+ theme: vizConfig.themes,
4432
+ bypassCloneDeepOptionScope,
4433
+ lazyLoadingDataFrame
4434
+ };
4435
+ };
4436
+ var evaluateOptionsSync = ({
4437
+ optionsToEvaluate,
4438
+ downsampledDataSources,
4439
+ dataSourcesInState,
4440
+ dataFramesInState,
4441
+ setDataSourcesInState,
4442
+ setDataFramesInState,
4443
+ computeDataFrames,
4444
+ featureFlagContext,
4445
+ themeFunc
4446
+ }) => {
4447
+ let dataFrames = dataFramesInState;
4448
+ if (downsampledDataSources !== dataSourcesInState) {
4449
+ setDataSourcesInState(downsampledDataSources);
4450
+ dataFrames = Options_exports.Options.dataFrameFromDataSource(
4451
+ downsampledDataSources,
4452
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4453
+ );
4454
+ setDataFramesInState(dataFrames);
4455
+ }
4456
+ let mergedFrames = dataFrames;
4457
+ if (computeDataFrames && dataFrames) {
4458
+ const derivedFrames = computeDataFrames({
4459
+ dataSources: downsampledDataSources,
4460
+ options: optionsToEvaluate.options
4461
+ });
4462
+ mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
4463
+ }
4464
+ return Options_exports.Options.evaluate(
4465
+ optionsToEvaluate,
4466
+ downsampledDataSources,
4467
+ themeFunc,
4468
+ mergedFrames,
4469
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4470
+ );
4471
+ };
4377
4472
  var withDashboardViz = (opts) => {
4378
4473
  const {
4379
4474
  ReactViz,
@@ -4405,11 +4500,7 @@ var withDashboardViz = (opts) => {
4405
4500
  onRequestParamsChange = lodash_exports.noop
4406
4501
  } = props;
4407
4502
  const localeContext = react_exports.useContext(TimezoneContext_default);
4408
- if (localeContext.serializedTimezone) {
4409
- if (!moment_default.getDefaultSplunkTimezone()) {
4410
- moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
4411
- }
4412
- }
4503
+ applyContextTimezone(localeContext);
4413
4504
  const themeFunc = (themeVar) => {
4414
4505
  var _a2, _b;
4415
4506
  return (_b = (_a2 = vizConfig.themes)[themeVar]) == null ? void 0 : _b.call(_a2, props);
@@ -4437,7 +4528,12 @@ var withDashboardViz = (opts) => {
4437
4528
  featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableAcceleratedRender
4438
4529
  );
4439
4530
  const isAcceleratedRenderOn = isAcceleratedRenderFeatureFlagOn && isTimeSeriesCanvasRenderSupported(vizConfig.key) && (options == null ? void 0 : options.acceleratedRender) === true;
4440
- const isMounted = react_exports.useRef(true);
4531
+ const bypassCloneDeepOptionScope = Boolean(
4532
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4533
+ );
4534
+ const lazyLoadingDataFrame = Boolean(
4535
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4536
+ );
4441
4537
  const optionsToEvaluate = react_exports.useMemo(() => {
4442
4538
  var _a2;
4443
4539
  const legendDisplay = turnOffLegendDisplayWhenTrellisIsOn(isTrellisOn, options);
@@ -4476,63 +4572,74 @@ var withDashboardViz = (opts) => {
4476
4572
  threshold,
4477
4573
  isDownsamplingEnabled
4478
4574
  });
4479
- evaluatedOptions = useDeepMemo(() => {
4575
+ const asyncOptionsEvaluationParams = useDeepMemo(
4576
+ () => getAsyncOptionsEvaluationParams({
4577
+ visualizationID,
4578
+ props,
4579
+ optionsToEvaluate,
4580
+ downsampledDataSources,
4581
+ vizConfig,
4582
+ bypassCloneDeepOptionScope,
4583
+ lazyLoadingDataFrame
4584
+ }),
4585
+ [
4586
+ visualizationID,
4587
+ optionsToEvaluate,
4588
+ downsampledDataSources,
4589
+ vizConfig,
4590
+ bypassCloneDeepOptionScope,
4591
+ lazyLoadingDataFrame,
4592
+ currentThemeFamily,
4593
+ currentThemeColorScheme,
4594
+ currentThemeDensity,
4595
+ localeContext.serializedTimezone
4596
+ ]
4597
+ );
4598
+ react_exports.useEffect(() => {
4599
+ if (!useAsyncEvaluatedOptions) {
4600
+ return void 0;
4601
+ }
4602
+ let ownsEvaluation = true;
4480
4603
  try {
4481
- if (useAsyncEvaluatedOptions) {
4482
- const asyncDynamicOptionsEvaluatorParams = {
4483
- visualizationID,
4484
- props,
4485
- options: optionsToEvaluate,
4486
- dataSources: downsampledDataSources,
4487
- theme: vizConfig.themes,
4488
- bypassCloneDeepOptionScope: Boolean(
4489
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4490
- ),
4491
- lazyLoadingDataFrame: Boolean(
4492
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4493
- )
4494
- };
4495
- async_dynamic_options_evaluator_default.evaluate(asyncDynamicOptionsEvaluatorParams).then((results) => {
4604
+ async_dynamic_options_evaluator_default.evaluate(asyncOptionsEvaluationParams).then((results) => {
4605
+ if (ownsEvaluation) {
4496
4606
  setEvaluatedOptionsAsync(results.results);
4497
- }).catch(() => {
4498
- if (isMounted.current) {
4499
- setUseAsyncEvaluatedOptions(false);
4500
- }
4501
- });
4502
- } else {
4503
- let dataFrames = dataFramesInState;
4504
- if (downsampledDataSources !== dataSourcesInState) {
4505
- setDataSourcesInState(downsampledDataSources);
4506
- dataFrames = Options_exports.Options.dataFrameFromDataSource(
4507
- downsampledDataSources,
4508
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4509
- );
4510
- setDataFramesInState(dataFrames);
4511
4607
  }
4512
- let mergedFrames = dataFrames;
4513
- if (computeDataFrames && dataFrames) {
4514
- const derivedFrames = computeDataFrames({
4515
- dataSources: downsampledDataSources,
4516
- options: optionsToEvaluate.options
4517
- });
4518
- mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
4608
+ }).catch(() => {
4609
+ if (ownsEvaluation) {
4610
+ setUseAsyncEvaluatedOptions(false);
4519
4611
  }
4520
- const result = Options_exports.Options.evaluate(
4521
- optionsToEvaluate,
4522
- downsampledDataSources,
4523
- themeFunc,
4524
- mergedFrames,
4525
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4526
- );
4527
- return result;
4612
+ });
4613
+ } catch (e) {
4614
+ setUseAsyncEvaluatedOptions(false);
4615
+ }
4616
+ return () => {
4617
+ ownsEvaluation = false;
4618
+ async_dynamic_options_evaluator_default.reset(visualizationID);
4619
+ };
4620
+ }, [asyncOptionsEvaluationParams, useAsyncEvaluatedOptions, visualizationID]);
4621
+ evaluatedOptions = useDeepMemo(() => {
4622
+ try {
4623
+ if (useAsyncEvaluatedOptions) {
4624
+ return {};
4528
4625
  }
4626
+ return evaluateOptionsSync({
4627
+ optionsToEvaluate,
4628
+ downsampledDataSources,
4629
+ dataSourcesInState,
4630
+ dataFramesInState,
4631
+ setDataSourcesInState,
4632
+ setDataFramesInState,
4633
+ computeDataFrames,
4634
+ featureFlagContext,
4635
+ themeFunc
4636
+ });
4529
4637
  } catch (e) {
4530
4638
  if (e instanceof Error) {
4531
4639
  console.error(`unexpected error evaluating options: ${e.message}`);
4532
4640
  }
4533
4641
  return {};
4534
4642
  }
4535
- return {};
4536
4643
  }, [
4537
4644
  currentThemeFamily,
4538
4645
  currentThemeColorScheme,
@@ -4542,7 +4649,7 @@ var withDashboardViz = (opts) => {
4542
4649
  localeContext.serializedTimezone,
4543
4650
  useAsyncEvaluatedOptions
4544
4651
  ]);
4545
- const evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync;
4652
+ const evaluatedOptionsToUse = useAsyncEvaluatedOptions ? evaluatedOptionsAsync : evaluatedOptions;
4546
4653
  let dataSourceMetadata = {};
4547
4654
  const OptionKey = "paginateDataSourceKey";
4548
4655
  const optsKey = (0, lodash_exports.has)(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey];
@@ -4564,7 +4671,7 @@ var withDashboardViz = (opts) => {
4564
4671
  sortParams,
4565
4672
  paginatorParams
4566
4673
  };
4567
- if (vizConfig.supports.indexOf("page-and-sort" /* PAGE_AND_SORT */) === -1 && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
4674
+ if (!vizConfig.supports.includes("page-and-sort" /* PAGE_AND_SORT */) && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
4568
4675
  dataSourceMetadata = {};
4569
4676
  }
4570
4677
  const clonedEvaluatedOptions = __spreadValues({}, evaluatedOptionsToUse);
@@ -4574,14 +4681,6 @@ var withDashboardViz = (opts) => {
4574
4681
  react_exports.useEffect(() => {
4575
4682
  onComputedProps(clonedEvaluatedOptions);
4576
4683
  });
4577
- react_exports.useEffect(() => {
4578
- return () => {
4579
- if (useAsyncEvaluatedOptions) {
4580
- isMounted.current = false;
4581
- async_dynamic_options_evaluator_default.reset(visualizationID);
4582
- }
4583
- };
4584
- }, []);
4585
4684
  const { requiredProps = [], supports } = vizConfig;
4586
4685
  const missing = missingKeys(requiredProps, evaluatedOptionsToUse);
4587
4686
  if (missing.length > 0 && supports.includes("placeholder" /* PLACEHOLDER */) && vizConfig.key !== "splunk.singlevalue") {
@@ -4596,7 +4695,16 @@ var withDashboardViz = (opts) => {
4596
4695
  }
4597
4696
  );
4598
4697
  }
4599
- const eventCallbackProps = hasEventHandlers && mode === "view" && vizConfig.supports.includes("events" /* EVENTS */) ? buildEventCallbackProps(vizConfig.events, evaluatedOptionsToUse, onEventTrigger) : {};
4698
+ const eventCallbackProps = buildAllEventCallbackProps(
4699
+ vizConfig.events,
4700
+ evaluatedOptionsToUse,
4701
+ onEventTrigger,
4702
+ {
4703
+ supportsEvents: vizConfig.supports.includes("events" /* EVENTS */),
4704
+ hasEventHandlers,
4705
+ mode
4706
+ }
4707
+ );
4600
4708
  const computedVizProps = computeVizProps2(__spreadProps(__spreadValues(__spreadProps(__spreadValues(__spreadValues({}, props), evaluatedOptionsToUse), {
4601
4709
  // Align option transformation with the actual renderer selected below.
4602
4710
  // This prevents canvas-only option preservation from leaking into Highcharts mode.
@@ -4624,8 +4732,9 @@ var withDashboardViz = (opts) => {
4624
4732
  onEventTrigger: SplunkVisualization_default.defaults.onEventTrigger
4625
4733
  });
4626
4734
  DashboardViz.config = vizConfig;
4627
- return (0, styled_components_exports.withTheme)(
4628
- withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)
4735
+ return Object.assign(
4736
+ (0, styled_components_exports.withTheme)(withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)),
4737
+ { config: vizConfig }
4629
4738
  );
4630
4739
  };
4631
4740
  var withDashboardViz_default = withDashboardViz;
@@ -4635,45 +4744,45 @@ var PresetPalettes_exports = {};
4635
4744
  __export(PresetPalettes_exports, {
4636
4745
  default: () => PresetPalettes_default
4637
4746
  });
4638
- var defaultImport37 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
4747
+ var defaultImport38 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
4639
4748
  __reExport(PresetPalettes_exports, require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
4640
- var PresetPalettes_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
4749
+ var PresetPalettes_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
4641
4750
 
4642
4751
  // esm-externals:@splunk/visualization-themes/variables
4643
4752
  var variables_exports2 = {};
4644
4753
  __export(variables_exports2, {
4645
4754
  default: () => variables_default2
4646
4755
  });
4647
- var defaultImport38 = __toESM(require("@splunk/visualization-themes/variables"));
4756
+ var defaultImport39 = __toESM(require("@splunk/visualization-themes/variables"));
4648
4757
  __reExport(variables_exports2, require("@splunk/visualization-themes/variables"));
4649
- var variables_default2 = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
4758
+ var variables_default2 = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
4650
4759
 
4651
4760
  // esm-externals:@splunk/themes/pick
4652
4761
  var pick_exports2 = {};
4653
4762
  __export(pick_exports2, {
4654
4763
  default: () => pick_default2
4655
4764
  });
4656
- var defaultImport39 = __toESM(require("@splunk/themes/pick"));
4765
+ var defaultImport40 = __toESM(require("@splunk/themes/pick"));
4657
4766
  __reExport(pick_exports2, require("@splunk/themes/pick"));
4658
- var pick_default2 = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
4767
+ var pick_default2 = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
4659
4768
 
4660
4769
  // esm-externals:@splunk/visualization-icons
4661
4770
  var visualization_icons_exports = {};
4662
4771
  __export(visualization_icons_exports, {
4663
4772
  default: () => visualization_icons_default
4664
4773
  });
4665
- var defaultImport40 = __toESM(require("@splunk/visualization-icons"));
4774
+ var defaultImport41 = __toESM(require("@splunk/visualization-icons"));
4666
4775
  __reExport(visualization_icons_exports, require("@splunk/visualization-icons"));
4667
- var visualization_icons_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
4776
+ var visualization_icons_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
4668
4777
 
4669
4778
  // esm-externals:@splunk/visualization-icons/placeholders
4670
4779
  var placeholders_exports = {};
4671
4780
  __export(placeholders_exports, {
4672
4781
  default: () => placeholders_default
4673
4782
  });
4674
- var defaultImport41 = __toESM(require("@splunk/visualization-icons/placeholders"));
4783
+ var defaultImport42 = __toESM(require("@splunk/visualization-icons/placeholders"));
4675
4784
  __reExport(placeholders_exports, require("@splunk/visualization-icons/placeholders"));
4676
- var placeholders_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
4785
+ var placeholders_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
4677
4786
 
4678
4787
  // src/common/configContext/singleValueContext.ts
4679
4788
  var defaultContext = {
@@ -4705,9 +4814,9 @@ var configUtils_exports = {};
4705
4814
  __export(configUtils_exports, {
4706
4815
  default: () => configUtils_default
4707
4816
  });
4708
- var defaultImport42 = __toESM(require("@splunk/visualizations-shared/configUtils"));
4817
+ var defaultImport43 = __toESM(require("@splunk/visualizations-shared/configUtils"));
4709
4818
  __reExport(configUtils_exports, require("@splunk/visualizations-shared/configUtils"));
4710
- var configUtils_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
4819
+ var configUtils_default = "default" in defaultImport43 ? defaultImport43.default : defaultImport43;
4711
4820
 
4712
4821
  // src/common/editorConfig/DynamicMajorColorEditor.js
4713
4822
  var getDynamicMajorColorEditor = ({ defaultContext: defaultContext2, defaultPalettesConfig: defaultPalettesConfig2 }) => ({
@@ -5499,18 +5608,9 @@ var Paginator_exports = {};
5499
5608
  __export(Paginator_exports, {
5500
5609
  default: () => Paginator_default
5501
5610
  });
5502
- var defaultImport43 = __toESM(require("@splunk/react-ui/Paginator"));
5611
+ var defaultImport44 = __toESM(require("@splunk/react-ui/Paginator"));
5503
5612
  __reExport(Paginator_exports, require("@splunk/react-ui/Paginator"));
5504
- var Paginator_default = "default" in defaultImport43 ? defaultImport43.default : defaultImport43;
5505
-
5506
- // esm-externals:@splunk/themes
5507
- var themes_exports = {};
5508
- __export(themes_exports, {
5509
- default: () => themes_default
5510
- });
5511
- var defaultImport44 = __toESM(require("@splunk/themes"));
5512
- __reExport(themes_exports, require("@splunk/themes"));
5513
- var themes_default = "default" in defaultImport44 ? defaultImport44.default : defaultImport44;
5613
+ var Paginator_default = "default" in defaultImport44 ? defaultImport44.default : defaultImport44;
5514
5614
 
5515
5615
  // esm-externals:@splunk/themes/useSplunkTheme
5516
5616
  var useSplunkTheme_exports = {};
@@ -5542,7 +5642,7 @@ var sortTrellisKeys = (keys, trellisSortBy, trellisSortOrder, modifiedDataSource
5542
5642
  if (trellisSortBy === "trend") {
5543
5643
  optionKey = "trendValue";
5544
5644
  } else {
5545
- optionKey = mergedOptions.value !== void 0 ? "value" : "majorValue";
5645
+ optionKey = mergedOptions.value === void 0 ? "majorValue" : "value";
5546
5646
  }
5547
5647
  keys.sort((a, b) => {
5548
5648
  const valA = evaluatePanelOption(
@@ -5694,13 +5794,13 @@ var withTrellis = (Viz) => {
5694
5794
  const noColumns = columns === void 0;
5695
5795
  const noFields = fields === void 0;
5696
5796
  const updateDataDisplay = (currPage) => {
5697
- if (!showPaginator) {
5698
- setPagedData(splitByKeys);
5699
- setPageNum(1);
5700
- } else {
5797
+ if (showPaginator) {
5701
5798
  const startIdx = pageCount * (currPage - 1);
5702
5799
  const paged = splitByKeys.slice(startIdx, startIdx + pageCount);
5703
5800
  setPagedData(paged);
5801
+ } else {
5802
+ setPagedData(splitByKeys);
5803
+ setPageNum(1);
5704
5804
  }
5705
5805
  };
5706
5806
  (0, react_exports.useEffect)(() => {