@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/Scatter.js CHANGED
@@ -181,17 +181,18 @@ __reExport(themeUtils_exports, require("@splunk/visualizations-shared/themeUtils
181
181
  var themeUtils_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
182
182
 
183
183
  // src/common/ChartingApi.ts
184
+ var DEFAULT_HIGHLIGHT_POINT = { xValue: "", seriesName: "" };
184
185
  var ChartingApiFunctional = class {
185
186
  // eslint-disable-next-line no-useless-constructor
186
187
  constructor(chartRef) {
187
- this.chartRef = chartRef;
188
+ __publicField(this, "chartRef", chartRef);
188
189
  }
189
190
  /**
190
191
  * Allows users to programmatically highlight a point on the chart
191
192
  *
192
193
  * @memberof ChartingApiFunctional
193
194
  */
194
- highlight({ xValue, seriesName } = { xValue: "", seriesName: "" }) {
195
+ highlight({ xValue, seriesName } = DEFAULT_HIGHLIGHT_POINT) {
195
196
  this.getChart().highlight(xValue, seriesName);
196
197
  }
197
198
  /**
@@ -273,7 +274,7 @@ var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices)
273
274
  let avgY = 0;
274
275
  let avgRangeStart = Math.floor((i + 1) * every) + 1;
275
276
  let avgRangeEnd = Math.floor((i + 2) * every) + 1;
276
- avgRangeEnd = avgRangeEnd < dataLength ? avgRangeEnd : dataLength;
277
+ avgRangeEnd = Math.min(avgRangeEnd, dataLength);
277
278
  const avgRangeLength = avgRangeEnd - avgRangeStart;
278
279
  for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {
279
280
  avgX += Number(data[avgRangeStart][0]);
@@ -308,9 +309,9 @@ var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices)
308
309
  };
309
310
  var strictlyCoerceYColumn = (column, options) => {
310
311
  const isNullCoercionEnabled = options.nullValueDisplay === "zero";
311
- const canLooselyCoerceSomeValues = column.findIndex(
312
+ const canLooselyCoerceSomeValues = column.some(
312
313
  (value) => (0, numberUtils_exports.startsWithNumber)(`${value}`) || isNullCoercionEnabled && value === null
313
- ) >= 0;
314
+ );
314
315
  const coercedColumn = [];
315
316
  const canDownsampleColumn = !column.some((value) => {
316
317
  const coercedValue = Number(value);
@@ -329,7 +330,7 @@ var strictlyCoerceYColumn = (column, options) => {
329
330
  };
330
331
  var strictlyCoerceXColumn = (column, fieldType) => {
331
332
  if (fieldType === "number") {
332
- const coercedXColumn = column.map((xValue) => Number(xValue));
333
+ const coercedXColumn = column.map(Number);
333
334
  if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {
334
335
  return coercedXColumn;
335
336
  }
@@ -383,12 +384,8 @@ var calculateDownsamplingThreshold = ({
383
384
  }
384
385
  const fullSeries = (_c = primaryDataSource == null ? void 0 : primaryDataSource.data) == null ? void 0 : _c.columns[xFieldIndex];
385
386
  const downsampledSeries = currentTarget.dataSet.seriesList[downsampledXFieldIndex];
386
- const firstIndex = fullSeries.findIndex((x) => {
387
- return downsampledSeries[startXIndex] === x;
388
- });
389
- const lastIndex = fullSeries.findIndex((x) => {
390
- return downsampledSeries[endXIndex] === x;
391
- });
387
+ const firstIndex = fullSeries.indexOf(downsampledSeries[startXIndex]);
388
+ const lastIndex = fullSeries.indexOf(downsampledSeries[endXIndex]);
392
389
  if (firstIndex >= 0 && lastIndex >= 0 && firstIndex <= lastIndex) {
393
390
  return calculateThresholdOnRangeSelect({
394
391
  firstIndex,
@@ -880,7 +877,7 @@ var Charting = (props) => {
880
877
  const payload = appendTrellisToPayload(props, {
881
878
  width,
882
879
  height,
883
- currentTime: (/* @__PURE__ */ new Date()).getTime()
880
+ currentTime: Date.now()
884
881
  });
885
882
  chart.current.prepareAndDraw(chartData, updatedOptions, () => {
886
883
  onEventTrigger({
@@ -905,7 +902,7 @@ var Charting = (props) => {
905
902
  needsInit.current = false;
906
903
  needsRedraw.current = false;
907
904
  } catch (e) {
908
- window.console.error("Caught error rendering chart:", e);
905
+ globalThis.console.error("Caught error rendering chart:", e);
909
906
  }
910
907
  };
911
908
  const onContainerMount = (chartingContainer) => {
@@ -1562,10 +1559,8 @@ var AxesChartDataDisplayColumn = {
1562
1559
  };
1563
1560
  var AxesChartDataDisplayLine = {
1564
1561
  label: AxesChartDataDisplayBase.label,
1565
- layout: [
1566
- // remove stacked mode editor
1567
- ...AxesChartDataDisplayBase.layout.slice(1)
1568
- ]
1562
+ // remove stacked mode editor
1563
+ layout: AxesChartDataDisplayBase.layout.slice(1)
1569
1564
  };
1570
1565
 
1571
1566
  // src/common/editorConfig/AxesChartXGridAndLabels.ts
@@ -2234,7 +2229,7 @@ var editorConfig = [
2234
2229
  },
2235
2230
  {
2236
2231
  label: AxesChartLegend_default.label,
2237
- layout: [...AxesChartLegendWithTrellisAndMode({ showLegendTooltip: false }).layout.slice(0, 2)]
2232
+ layout: AxesChartLegendWithTrellisAndMode({ showLegendTooltip: false }).layout.slice(0, 2)
2238
2233
  // Legendmode not required hence slice
2239
2234
  },
2240
2235
  AxesChartXGridAndLabelsBubbleScatter,
@@ -2479,7 +2474,10 @@ var useSortingParams = ({ requestParams, onRequestParamsChange }) => {
2479
2474
  onSort = (e, { sortKey, sortDir }) => {
2480
2475
  if (typeof sortKey === "string") {
2481
2476
  const nextSortDir = (0, lodash_exports.has)(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : "none";
2482
- onRequestParamsChange(__spreadValues(__spreadValues({}, requestParams), { offset: 0, sort: { [sortKey]: nextSortDir } }));
2477
+ onRequestParamsChange(__spreadProps(__spreadValues({}, requestParams), {
2478
+ offset: 0,
2479
+ sort: { [sortKey]: nextSortDir }
2480
+ }));
2483
2481
  } else {
2484
2482
  onRequestParamsChange(requestParams);
2485
2483
  }
@@ -2605,7 +2603,7 @@ var Cover = styled_components_default.div`
2605
2603
  bottom: 0;
2606
2604
  `;
2607
2605
  var Blocker = styled_components_default.div.attrs({
2608
- "data-splunk-visualization-version": "28.8.0 - 633c53372"
2606
+ "data-splunk-visualization-version": "28.9.0 - 96b03188d"
2609
2607
  })`
2610
2608
  position: relative;
2611
2609
  width: 100%;
@@ -2631,6 +2629,15 @@ var defaultImport32 = __toESM(require("@splunk/visualizations-shared/colorUtils"
2631
2629
  __reExport(colorUtils_exports, require("@splunk/visualizations-shared/colorUtils"));
2632
2630
  var colorUtils_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2633
2631
 
2632
+ // esm-externals:@splunk/themes
2633
+ var themes_exports = {};
2634
+ __export(themes_exports, {
2635
+ default: () => themes_default
2636
+ });
2637
+ var defaultImport33 = __toESM(require("@splunk/themes"));
2638
+ __reExport(themes_exports, require("@splunk/themes"));
2639
+ var themes_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2640
+
2634
2641
  // src/common/hocs/FixedSizeContainer.tsx
2635
2642
  var Item = styled_components_default.div.attrs(({ width }) => ({
2636
2643
  style: {
@@ -2686,7 +2693,7 @@ var withFixedSizeContainer = (Viz) => {
2686
2693
  FixSizeItem,
2687
2694
  {
2688
2695
  "data-test": "fix-size-item",
2689
- "data-splunk-visualization-version": "28.8.0 - 633c53372",
2696
+ "data-splunk-visualization-version": "28.9.0 - 96b03188d",
2690
2697
  width,
2691
2698
  height,
2692
2699
  backgroundColor
@@ -2707,6 +2714,14 @@ var shouldShowIconPlaceholder = (dataSources, loading = false) => {
2707
2714
  const noFields = fields === void 0;
2708
2715
  return loading || noData || noFields;
2709
2716
  };
2717
+ var PlaceholderContainer = styled_components_default.div`
2718
+ /* The inline token color wins when supported. Older browsers discard an
2719
+ unsupported oklch value and retain this inherited fallback instead. */
2720
+ color: ${(0, themes_exports.pick)({
2721
+ dark: "#fafafa",
2722
+ light: "#2c2c2c"
2723
+ })};
2724
+ `;
2710
2725
  var IconPlaceholder = (props) => {
2711
2726
  const {
2712
2727
  width = SplunkVisualization_default.defaults.width,
@@ -2721,7 +2736,6 @@ var IconPlaceholder = (props) => {
2721
2736
  style: {
2722
2737
  left: "50%",
2723
2738
  top: "50%",
2724
- color: iconColor,
2725
2739
  opacity: 0.15,
2726
2740
  position: "absolute",
2727
2741
  transform: "translate(-50%, -50%)"
@@ -2731,7 +2745,14 @@ var IconPlaceholder = (props) => {
2731
2745
  "data-test": "icon-placeholder"
2732
2746
  });
2733
2747
  }
2734
- return /* @__PURE__ */ react_exports.createElement("div", { style: { width, height, background: backgroundColor } }, content);
2748
+ return /* @__PURE__ */ react_exports.createElement(
2749
+ PlaceholderContainer,
2750
+ {
2751
+ "data-test": "icon-placeholder-container",
2752
+ style: { width, height, background: backgroundColor, color: iconColor }
2753
+ },
2754
+ content
2755
+ );
2735
2756
  };
2736
2757
  var IconPlaceholder_default = FixedSizeContainer_default(IconPlaceholder);
2737
2758
 
@@ -2934,16 +2955,16 @@ var FeatureFlags_exports = {};
2934
2955
  __export(FeatureFlags_exports, {
2935
2956
  default: () => FeatureFlags_default
2936
2957
  });
2937
- var defaultImport33 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
2958
+ var defaultImport34 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
2938
2959
  __reExport(FeatureFlags_exports, require("@splunk/visualization-context/FeatureFlags"));
2939
- var FeatureFlags_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2960
+ var FeatureFlags_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
2940
2961
 
2941
2962
  // src/common/utils/featureFlagUtils.ts
2942
2963
  var getFeatureFlag = (context, flagName) => {
2943
- if (context && Object.keys(context).find((key) => key === flagName)) {
2964
+ if (context && Object.keys(context).includes(flagName)) {
2944
2965
  return context[flagName];
2945
2966
  }
2946
- if (Object.keys(FeatureFlags_default).find((key) => key === flagName)) {
2967
+ if (Object.keys(FeatureFlags_default).includes(flagName)) {
2947
2968
  return FeatureFlags_default[flagName];
2948
2969
  }
2949
2970
  return false;
@@ -2954,9 +2975,9 @@ var trellisUtils_exports = {};
2954
2975
  __export(trellisUtils_exports, {
2955
2976
  default: () => trellisUtils_default
2956
2977
  });
2957
- var defaultImport34 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
2978
+ var defaultImport35 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
2958
2979
  __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
2959
- var trellisUtils_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
2980
+ var trellisUtils_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
2960
2981
 
2961
2982
  // src/common/utils/trellisUtils.ts
2962
2983
  var AGGREGATIONS = "aggregations";
@@ -3177,7 +3198,7 @@ var dataSourcesSplitByModeChart = (dataSource, splitBy) => {
3177
3198
  splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
3178
3199
  }
3179
3200
  if (splitByFields == null ? void 0 : splitByFields.includes(splitBy)) {
3180
- const splitByFieldIdx = splitByFields.findIndex((f) => f === splitBy);
3201
+ const splitByFieldIdx = splitByFields.indexOf(splitBy);
3181
3202
  const otherSplitBy = splitByFields.filter((f) => f !== splitBy);
3182
3203
  const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
3183
3204
  const nonDataSourceAggregations = [];
@@ -3211,17 +3232,17 @@ var dataSourcesSplitByModeStatsorUnknown = (dataSource, splitBy, splitMode) => {
3211
3232
  let splitByFields = [];
3212
3233
  let errorCode = null;
3213
3234
  if (fields.length > 0) {
3214
- splitByFields = splitMode !== trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields);
3235
+ splitByFields = splitMode === trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields);
3215
3236
  }
3216
3237
  const splitByIndex = fields.findIndex((field) => field.name === splitBy);
3217
3238
  if (splitByFields == null ? void 0 : splitByFields.includes(splitBy)) {
3218
3239
  const splitByColumn = (_f = (_e = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _e.data) == null ? void 0 : _f.columns[splitByIndex];
3219
3240
  splitDataSources = {};
3220
3241
  splitByColumn.forEach((val, idx) => {
3221
- if (!splitDataSources[val]) {
3222
- splitDataSources[val] = [idx];
3223
- } else {
3242
+ if (splitDataSources[val]) {
3224
3243
  splitDataSources[val].push(idx);
3244
+ } else {
3245
+ splitDataSources[val] = [idx];
3225
3246
  }
3226
3247
  });
3227
3248
  const cloneFields = (0, lodash_exports.cloneDeep)(fields);
@@ -3272,27 +3293,28 @@ var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
3272
3293
  }
3273
3294
  return {};
3274
3295
  };
3296
+ var extendMinMaxWithColumn = (column, range2) => column.reduce((acc, point) => {
3297
+ const pointNumber = Number(point);
3298
+ if (Number.isNaN(pointNumber)) {
3299
+ return acc;
3300
+ }
3301
+ return {
3302
+ min: Math.min(pointNumber, acc.min),
3303
+ max: Math.max(pointNumber, acc.max)
3304
+ };
3305
+ }, range2);
3275
3306
  var calculateSharedMinMax = (splitData) => {
3276
- let max = -Infinity;
3277
- let min = Infinity;
3307
+ let range2 = { min: Infinity, max: -Infinity };
3278
3308
  Object.keys(splitData).forEach((splitByKey) => {
3279
3309
  const datasources = splitData[splitByKey];
3280
3310
  Object.keys(datasources).forEach((datasourceName) => {
3281
3311
  const dataColumns = datasources[datasourceName].data.columns;
3282
3312
  dataColumns.forEach((column) => {
3283
- column.forEach((point) => {
3284
- const pointNumber = Number(point);
3285
- if (pointNumber > max) {
3286
- max = pointNumber;
3287
- }
3288
- if (pointNumber < min) {
3289
- min = pointNumber;
3290
- }
3291
- });
3313
+ range2 = extendMinMaxWithColumn(column, range2);
3292
3314
  });
3293
3315
  });
3294
3316
  });
3295
- return [min, max];
3317
+ return [range2.min, range2.max];
3296
3318
  };
3297
3319
  var determineMinMax = (splitData, trellisSharedScale, yAxisMin, yAxisMax, stackMode) => {
3298
3320
  if (!trellisSharedScale || stackMode === "stacked100" || yAxisMin !== "auto" && yAxisMax !== "auto")
@@ -3308,9 +3330,9 @@ var visualization_canvas_exports = {};
3308
3330
  __export(visualization_canvas_exports, {
3309
3331
  default: () => visualization_canvas_default
3310
3332
  });
3311
- var defaultImport35 = __toESM(require("@splunk/visualization-canvas"));
3333
+ var defaultImport36 = __toESM(require("@splunk/visualization-canvas"));
3312
3334
  __reExport(visualization_canvas_exports, require("@splunk/visualization-canvas"));
3313
- var visualization_canvas_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
3335
+ var visualization_canvas_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
3314
3336
 
3315
3337
  // src/common/components/VizStyleWrapper.jsx
3316
3338
  var VizStyleWrapper = styled_components_default.div.attrs(({ dataTestKey }) => ({
@@ -3332,18 +3354,18 @@ var Triangle_exports = {};
3332
3354
  __export(Triangle_exports, {
3333
3355
  default: () => Triangle_default
3334
3356
  });
3335
- var defaultImport36 = __toESM(require("@splunk/react-icons/Triangle"));
3357
+ var defaultImport37 = __toESM(require("@splunk/react-icons/Triangle"));
3336
3358
  __reExport(Triangle_exports, require("@splunk/react-icons/Triangle"));
3337
- var Triangle_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
3359
+ var Triangle_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
3338
3360
 
3339
3361
  // esm-externals:@splunk/visualizations-shared/propUtils
3340
3362
  var propUtils_exports = {};
3341
3363
  __export(propUtils_exports, {
3342
3364
  default: () => propUtils_default
3343
3365
  });
3344
- var defaultImport37 = __toESM(require("@splunk/visualizations-shared/propUtils"));
3366
+ var defaultImport38 = __toESM(require("@splunk/visualizations-shared/propUtils"));
3345
3367
  __reExport(propUtils_exports, require("@splunk/visualizations-shared/propUtils"));
3346
- var propUtils_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
3368
+ var propUtils_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
3347
3369
 
3348
3370
  // src/common/chartingUtils.ts
3349
3371
  var DEFAULT_LINE_WIDTH = 2;
@@ -3376,7 +3398,7 @@ var truncateData = (dataSet, truncationLimit) => {
3376
3398
  if (!dataSet) {
3377
3399
  return null;
3378
3400
  }
3379
- const limit = parseInt(truncationLimit, 10);
3401
+ const limit = Number.parseInt(truncationLimit, 10);
3380
3402
  if (!limit || limit <= 0) {
3381
3403
  return dataSet;
3382
3404
  }
@@ -3408,9 +3430,9 @@ var shouldEnableSearchZoom = (eventHandlers = [], xField = "") => {
3408
3430
  const xAxisIsTime = xField === "_time";
3409
3431
  return !!rangeSelectEventHandler && xAxisIsTime;
3410
3432
  };
3411
- var canvasSupportedTimeSeriesCharts = ["splunk.line", "splunk.area"];
3433
+ var canvasSupportedTimeSeriesCharts = /* @__PURE__ */ new Set(["splunk.line", "splunk.area"]);
3412
3434
  var isTimeSeriesCanvasRenderSupported = (vizConfigKey) => {
3413
- return canvasSupportedTimeSeriesCharts.includes(vizConfigKey);
3435
+ return canvasSupportedTimeSeriesCharts.has(vizConfigKey);
3414
3436
  };
3415
3437
  var filterChartDataFromInternalFields = (chartData) => {
3416
3438
  const { fields, columns } = chartData;
@@ -3426,7 +3448,7 @@ var filterChartDataFromInternalFields = (chartData) => {
3426
3448
  return { fields: filteredFields, columns: filteredColumns };
3427
3449
  };
3428
3450
  var convert2DArrayToNumbers = (arr) => {
3429
- return arr.map((subArray) => subArray.map((element) => parseFloat(element)));
3451
+ return arr.map((subArray) => subArray.map((element) => Number.parseFloat(element)));
3430
3452
  };
3431
3453
  var parseAxisValue = (val) => {
3432
3454
  if (val === void 0 || val === null || val === "auto" || val === "") {
@@ -3464,6 +3486,7 @@ var getLegend = (props) => {
3464
3486
  return (0, visualization_canvas_exports.TopLegendFactory)(__spreadValues({
3465
3487
  wrap: true
3466
3488
  }, commonLegendProps));
3489
+ // Note: By default, use right legend
3467
3490
  default:
3468
3491
  return (0, visualization_canvas_exports.SideLegendFactory)(__spreadValues({}, commonLegendProps));
3469
3492
  }
@@ -3596,10 +3619,10 @@ var getSeriesOverrides = (opts) => {
3596
3619
  let spanGaps;
3597
3620
  if (nullValueMode === "gaps") {
3598
3621
  spanGaps = false;
3599
- } else if (nullValueMode != null) {
3600
- spanGaps = true;
3601
- } else {
3622
+ } else if (nullValueMode == null) {
3602
3623
  spanGaps = void 0;
3624
+ } else {
3625
+ spanGaps = true;
3603
3626
  }
3604
3627
  const replaceNullsWithZero = nullValueMode === "zero" ? true : void 0;
3605
3628
  const isAreaChart = type === "area";
@@ -3969,11 +3992,11 @@ var TimeSeriesChartWrapper = (props) => {
3969
3992
  y2AxisMajorUnitFromSimpleXML,
3970
3993
  y2AxisMajorTickInterval
3971
3994
  );
3972
- const xAxisMajorTickSizeNum = xAxisMajorTickSize != null ? Number(xAxisMajorTickSize) : void 0;
3973
- const yAxisMajorTickSizeNum = yAxisMajorTickSize != null ? Number(yAxisMajorTickSize) : void 0;
3974
- const y2AxisMajorTickSizeNum = y2AxisMajorTickSize != null ? Number(y2AxisMajorTickSize) : void 0;
3975
- const yAxisMinorTickSizeNum = yAxisMinorTickSize != null ? Number(yAxisMinorTickSize) : void 0;
3976
- const y2AxisMinorTickSizeNum = y2AxisMinorTickSize != null ? Number(y2AxisMinorTickSize) : void 0;
3995
+ const xAxisMajorTickSizeNum = xAxisMajorTickSize == null ? void 0 : Number(xAxisMajorTickSize);
3996
+ const yAxisMajorTickSizeNum = yAxisMajorTickSize == null ? void 0 : Number(yAxisMajorTickSize);
3997
+ const y2AxisMajorTickSizeNum = y2AxisMajorTickSize == null ? void 0 : Number(y2AxisMajorTickSize);
3998
+ const yAxisMinorTickSizeNum = yAxisMinorTickSize == null ? void 0 : Number(yAxisMinorTickSize);
3999
+ const y2AxisMinorTickSizeNum = y2AxisMinorTickSize == null ? void 0 : Number(y2AxisMinorTickSize);
3977
4000
  const areaOpacityForCanvas = getAreaOpacityForCanvas(areaOpacity);
3978
4001
  const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : void 0;
3979
4002
  const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : void 0;
@@ -4385,6 +4408,76 @@ var buildEventCallbackProps = (supportedEvents, evaluatedOptionsToUse, onEventTr
4385
4408
  });
4386
4409
  return result;
4387
4410
  };
4411
+ var buildAllEventCallbackProps = (events, evaluatedOptionsToUse, onEventTrigger, { supportsEvents, hasEventHandlers, mode }) => {
4412
+ if (!supportsEvents) return {};
4413
+ const defaultEvents = {};
4414
+ const userEvents = {};
4415
+ Object.entries(events || {}).forEach(([eventKey, eventConfig]) => {
4416
+ (eventConfig.source === "default" ? defaultEvents : userEvents)[eventKey] = eventConfig;
4417
+ });
4418
+ const userProps = hasEventHandlers && mode === "view" ? buildEventCallbackProps(userEvents, evaluatedOptionsToUse, onEventTrigger) : {};
4419
+ return __spreadValues(__spreadValues({}, userProps), buildEventCallbackProps(defaultEvents, evaluatedOptionsToUse, onEventTrigger));
4420
+ };
4421
+ var applyContextTimezone = (localeContext) => {
4422
+ if (localeContext.serializedTimezone && !moment_default.getDefaultSplunkTimezone()) {
4423
+ moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
4424
+ }
4425
+ };
4426
+ var getAsyncOptionsEvaluationParams = ({
4427
+ visualizationID,
4428
+ props,
4429
+ optionsToEvaluate,
4430
+ downsampledDataSources,
4431
+ vizConfig,
4432
+ bypassCloneDeepOptionScope,
4433
+ lazyLoadingDataFrame
4434
+ }) => {
4435
+ return {
4436
+ visualizationID,
4437
+ props,
4438
+ options: __spreadValues({}, optionsToEvaluate),
4439
+ dataSources: downsampledDataSources,
4440
+ theme: vizConfig.themes,
4441
+ bypassCloneDeepOptionScope,
4442
+ lazyLoadingDataFrame
4443
+ };
4444
+ };
4445
+ var evaluateOptionsSync = ({
4446
+ optionsToEvaluate,
4447
+ downsampledDataSources,
4448
+ dataSourcesInState,
4449
+ dataFramesInState,
4450
+ setDataSourcesInState,
4451
+ setDataFramesInState,
4452
+ computeDataFrames,
4453
+ featureFlagContext,
4454
+ themeFunc
4455
+ }) => {
4456
+ let dataFrames = dataFramesInState;
4457
+ if (downsampledDataSources !== dataSourcesInState) {
4458
+ setDataSourcesInState(downsampledDataSources);
4459
+ dataFrames = Options_exports.Options.dataFrameFromDataSource(
4460
+ downsampledDataSources,
4461
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4462
+ );
4463
+ setDataFramesInState(dataFrames);
4464
+ }
4465
+ let mergedFrames = dataFrames;
4466
+ if (computeDataFrames && dataFrames) {
4467
+ const derivedFrames = computeDataFrames({
4468
+ dataSources: downsampledDataSources,
4469
+ options: optionsToEvaluate.options
4470
+ });
4471
+ mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
4472
+ }
4473
+ return Options_exports.Options.evaluate(
4474
+ optionsToEvaluate,
4475
+ downsampledDataSources,
4476
+ themeFunc,
4477
+ mergedFrames,
4478
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4479
+ );
4480
+ };
4388
4481
  var withDashboardViz = (opts) => {
4389
4482
  const {
4390
4483
  ReactViz,
@@ -4416,11 +4509,7 @@ var withDashboardViz = (opts) => {
4416
4509
  onRequestParamsChange = lodash_exports.noop
4417
4510
  } = props;
4418
4511
  const localeContext = react_exports.useContext(TimezoneContext_default);
4419
- if (localeContext.serializedTimezone) {
4420
- if (!moment_default.getDefaultSplunkTimezone()) {
4421
- moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
4422
- }
4423
- }
4512
+ applyContextTimezone(localeContext);
4424
4513
  const themeFunc = (themeVar) => {
4425
4514
  var _a2, _b;
4426
4515
  return (_b = (_a2 = vizConfig.themes)[themeVar]) == null ? void 0 : _b.call(_a2, props);
@@ -4448,7 +4537,12 @@ var withDashboardViz = (opts) => {
4448
4537
  featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableAcceleratedRender
4449
4538
  );
4450
4539
  const isAcceleratedRenderOn = isAcceleratedRenderFeatureFlagOn2 && isTimeSeriesCanvasRenderSupported(vizConfig.key) && (options == null ? void 0 : options.acceleratedRender) === true;
4451
- const isMounted = react_exports.useRef(true);
4540
+ const bypassCloneDeepOptionScope = Boolean(
4541
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4542
+ );
4543
+ const lazyLoadingDataFrame = Boolean(
4544
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4545
+ );
4452
4546
  const optionsToEvaluate = react_exports.useMemo(() => {
4453
4547
  var _a2;
4454
4548
  const legendDisplay = turnOffLegendDisplayWhenTrellisIsOn(isTrellisOn, options);
@@ -4487,63 +4581,74 @@ var withDashboardViz = (opts) => {
4487
4581
  threshold,
4488
4582
  isDownsamplingEnabled
4489
4583
  });
4490
- evaluatedOptions = useDeepMemo(() => {
4584
+ const asyncOptionsEvaluationParams = useDeepMemo(
4585
+ () => getAsyncOptionsEvaluationParams({
4586
+ visualizationID,
4587
+ props,
4588
+ optionsToEvaluate,
4589
+ downsampledDataSources,
4590
+ vizConfig,
4591
+ bypassCloneDeepOptionScope,
4592
+ lazyLoadingDataFrame
4593
+ }),
4594
+ [
4595
+ visualizationID,
4596
+ optionsToEvaluate,
4597
+ downsampledDataSources,
4598
+ vizConfig,
4599
+ bypassCloneDeepOptionScope,
4600
+ lazyLoadingDataFrame,
4601
+ currentThemeFamily,
4602
+ currentThemeColorScheme,
4603
+ currentThemeDensity,
4604
+ localeContext.serializedTimezone
4605
+ ]
4606
+ );
4607
+ react_exports.useEffect(() => {
4608
+ if (!useAsyncEvaluatedOptions) {
4609
+ return void 0;
4610
+ }
4611
+ let ownsEvaluation = true;
4491
4612
  try {
4492
- if (useAsyncEvaluatedOptions) {
4493
- const asyncDynamicOptionsEvaluatorParams = {
4494
- visualizationID,
4495
- props,
4496
- options: optionsToEvaluate,
4497
- dataSources: downsampledDataSources,
4498
- theme: vizConfig.themes,
4499
- bypassCloneDeepOptionScope: Boolean(
4500
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4501
- ),
4502
- lazyLoadingDataFrame: Boolean(
4503
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4504
- )
4505
- };
4506
- async_dynamic_options_evaluator_default.evaluate(asyncDynamicOptionsEvaluatorParams).then((results) => {
4613
+ async_dynamic_options_evaluator_default.evaluate(asyncOptionsEvaluationParams).then((results) => {
4614
+ if (ownsEvaluation) {
4507
4615
  setEvaluatedOptionsAsync(results.results);
4508
- }).catch(() => {
4509
- if (isMounted.current) {
4510
- setUseAsyncEvaluatedOptions(false);
4511
- }
4512
- });
4513
- } else {
4514
- let dataFrames = dataFramesInState;
4515
- if (downsampledDataSources !== dataSourcesInState) {
4516
- setDataSourcesInState(downsampledDataSources);
4517
- dataFrames = Options_exports.Options.dataFrameFromDataSource(
4518
- downsampledDataSources,
4519
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4520
- );
4521
- setDataFramesInState(dataFrames);
4522
4616
  }
4523
- let mergedFrames = dataFrames;
4524
- if (computeDataFrames && dataFrames) {
4525
- const derivedFrames = computeDataFrames({
4526
- dataSources: downsampledDataSources,
4527
- options: optionsToEvaluate.options
4528
- });
4529
- mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
4617
+ }).catch(() => {
4618
+ if (ownsEvaluation) {
4619
+ setUseAsyncEvaluatedOptions(false);
4530
4620
  }
4531
- const result = Options_exports.Options.evaluate(
4532
- optionsToEvaluate,
4533
- downsampledDataSources,
4534
- themeFunc,
4535
- mergedFrames,
4536
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4537
- );
4538
- return result;
4621
+ });
4622
+ } catch (e) {
4623
+ setUseAsyncEvaluatedOptions(false);
4624
+ }
4625
+ return () => {
4626
+ ownsEvaluation = false;
4627
+ async_dynamic_options_evaluator_default.reset(visualizationID);
4628
+ };
4629
+ }, [asyncOptionsEvaluationParams, useAsyncEvaluatedOptions, visualizationID]);
4630
+ evaluatedOptions = useDeepMemo(() => {
4631
+ try {
4632
+ if (useAsyncEvaluatedOptions) {
4633
+ return {};
4539
4634
  }
4635
+ return evaluateOptionsSync({
4636
+ optionsToEvaluate,
4637
+ downsampledDataSources,
4638
+ dataSourcesInState,
4639
+ dataFramesInState,
4640
+ setDataSourcesInState,
4641
+ setDataFramesInState,
4642
+ computeDataFrames,
4643
+ featureFlagContext,
4644
+ themeFunc
4645
+ });
4540
4646
  } catch (e) {
4541
4647
  if (e instanceof Error) {
4542
4648
  console.error(`unexpected error evaluating options: ${e.message}`);
4543
4649
  }
4544
4650
  return {};
4545
4651
  }
4546
- return {};
4547
4652
  }, [
4548
4653
  currentThemeFamily,
4549
4654
  currentThemeColorScheme,
@@ -4553,7 +4658,7 @@ var withDashboardViz = (opts) => {
4553
4658
  localeContext.serializedTimezone,
4554
4659
  useAsyncEvaluatedOptions
4555
4660
  ]);
4556
- const evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync;
4661
+ const evaluatedOptionsToUse = useAsyncEvaluatedOptions ? evaluatedOptionsAsync : evaluatedOptions;
4557
4662
  let dataSourceMetadata = {};
4558
4663
  const OptionKey = "paginateDataSourceKey";
4559
4664
  const optsKey = (0, lodash_exports.has)(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey];
@@ -4575,7 +4680,7 @@ var withDashboardViz = (opts) => {
4575
4680
  sortParams,
4576
4681
  paginatorParams
4577
4682
  };
4578
- if (vizConfig.supports.indexOf("page-and-sort" /* PAGE_AND_SORT */) === -1 && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
4683
+ if (!vizConfig.supports.includes("page-and-sort" /* PAGE_AND_SORT */) && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
4579
4684
  dataSourceMetadata = {};
4580
4685
  }
4581
4686
  const clonedEvaluatedOptions = __spreadValues({}, evaluatedOptionsToUse);
@@ -4585,14 +4690,6 @@ var withDashboardViz = (opts) => {
4585
4690
  react_exports.useEffect(() => {
4586
4691
  onComputedProps(clonedEvaluatedOptions);
4587
4692
  });
4588
- react_exports.useEffect(() => {
4589
- return () => {
4590
- if (useAsyncEvaluatedOptions) {
4591
- isMounted.current = false;
4592
- async_dynamic_options_evaluator_default.reset(visualizationID);
4593
- }
4594
- };
4595
- }, []);
4596
4693
  const { requiredProps = [], supports } = vizConfig;
4597
4694
  const missing = missingKeys(requiredProps, evaluatedOptionsToUse);
4598
4695
  if (missing.length > 0 && supports.includes("placeholder" /* PLACEHOLDER */) && vizConfig.key !== "splunk.singlevalue") {
@@ -4607,7 +4704,16 @@ var withDashboardViz = (opts) => {
4607
4704
  }
4608
4705
  );
4609
4706
  }
4610
- const eventCallbackProps = hasEventHandlers && mode === "view" && vizConfig.supports.includes("events" /* EVENTS */) ? buildEventCallbackProps(vizConfig.events, evaluatedOptionsToUse, onEventTrigger) : {};
4707
+ const eventCallbackProps = buildAllEventCallbackProps(
4708
+ vizConfig.events,
4709
+ evaluatedOptionsToUse,
4710
+ onEventTrigger,
4711
+ {
4712
+ supportsEvents: vizConfig.supports.includes("events" /* EVENTS */),
4713
+ hasEventHandlers,
4714
+ mode
4715
+ }
4716
+ );
4611
4717
  const computedVizProps = computeVizProps2(__spreadProps(__spreadValues(__spreadProps(__spreadValues(__spreadValues({}, props), evaluatedOptionsToUse), {
4612
4718
  // Align option transformation with the actual renderer selected below.
4613
4719
  // This prevents canvas-only option preservation from leaking into Highcharts mode.
@@ -4635,8 +4741,9 @@ var withDashboardViz = (opts) => {
4635
4741
  onEventTrigger: SplunkVisualization_default.defaults.onEventTrigger
4636
4742
  });
4637
4743
  DashboardViz.config = vizConfig;
4638
- return (0, styled_components_exports.withTheme)(
4639
- withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)
4744
+ return Object.assign(
4745
+ (0, styled_components_exports.withTheme)(withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)),
4746
+ { config: vizConfig }
4640
4747
  );
4641
4748
  };
4642
4749
  var withDashboardViz_default = withDashboardViz;
@@ -4698,18 +4805,9 @@ var Paginator_exports = {};
4698
4805
  __export(Paginator_exports, {
4699
4806
  default: () => Paginator_default
4700
4807
  });
4701
- var defaultImport38 = __toESM(require("@splunk/react-ui/Paginator"));
4808
+ var defaultImport39 = __toESM(require("@splunk/react-ui/Paginator"));
4702
4809
  __reExport(Paginator_exports, require("@splunk/react-ui/Paginator"));
4703
- var Paginator_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
4704
-
4705
- // esm-externals:@splunk/themes
4706
- var themes_exports = {};
4707
- __export(themes_exports, {
4708
- default: () => themes_default
4709
- });
4710
- var defaultImport39 = __toESM(require("@splunk/themes"));
4711
- __reExport(themes_exports, require("@splunk/themes"));
4712
- var themes_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
4810
+ var Paginator_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
4713
4811
 
4714
4812
  // src/common/hocs/withTrellis.tsx
4715
4813
  var evaluatePanelOption = (panelDataSources, allOptions, optionKey, vizContext) => {
@@ -4732,7 +4830,7 @@ var sortTrellisKeys = (keys, trellisSortBy, trellisSortOrder, modifiedDataSource
4732
4830
  if (trellisSortBy === "trend") {
4733
4831
  optionKey = "trendValue";
4734
4832
  } else {
4735
- optionKey = mergedOptions.value !== void 0 ? "value" : "majorValue";
4833
+ optionKey = mergedOptions.value === void 0 ? "majorValue" : "value";
4736
4834
  }
4737
4835
  keys.sort((a, b) => {
4738
4836
  const valA = evaluatePanelOption(
@@ -4884,13 +4982,13 @@ var withTrellis = (Viz) => {
4884
4982
  const noColumns = columns === void 0;
4885
4983
  const noFields = fields === void 0;
4886
4984
  const updateDataDisplay = (currPage) => {
4887
- if (!showPaginator) {
4888
- setPagedData(splitByKeys);
4889
- setPageNum(1);
4890
- } else {
4985
+ if (showPaginator) {
4891
4986
  const startIdx = pageCount * (currPage - 1);
4892
4987
  const paged = splitByKeys.slice(startIdx, startIdx + pageCount);
4893
4988
  setPagedData(paged);
4989
+ } else {
4990
+ setPagedData(splitByKeys);
4991
+ setPageNum(1);
4894
4992
  }
4895
4993
  };
4896
4994
  (0, react_exports.useEffect)(() => {