@splunk/visualizations 28.8.0 → 28.9.1

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 (279) 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 +43 -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/ChoroplethLayer.d.ts.map +1 -1
  57. package/Map/PureMap/ClusterLayer.d.ts.map +1 -1
  58. package/Map/PureMap/MapUtils.d.ts.map +1 -1
  59. package/Map/PureMap/MarkerWrapper.d.ts.map +1 -1
  60. package/Map/PureMap/PureMap.d.ts +8 -65
  61. package/Map/PureMap/PureMap.d.ts.map +1 -1
  62. package/Map/PureMap/mapWorker.d.ts +2 -0
  63. package/Map/PureMap/mapWorker.d.ts.map +1 -0
  64. package/Map.config.js +1 -1
  65. package/Map.config.js.map +2 -2
  66. package/Map.js +439 -336
  67. package/Map.js.map +4 -4
  68. package/Markdown/Markdown.d.ts +9 -1
  69. package/Markdown/Markdown.d.ts.map +1 -1
  70. package/Markdown/config.d.ts.map +1 -1
  71. package/Markdown.config.js +5 -0
  72. package/Markdown.config.js.map +2 -2
  73. package/Markdown.js +225 -94
  74. package/Markdown.js.map +3 -3
  75. package/MarkerGauge.js +239 -134
  76. package/MarkerGauge.js.map +4 -4
  77. package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -1
  78. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts +1 -0
  79. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts.map +1 -1
  80. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts +1 -0
  81. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -1
  82. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +3 -5
  83. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -1
  84. package/NetworkGraph.config.js +4 -2
  85. package/NetworkGraph.config.js.map +2 -2
  86. package/NetworkGraph.js +327 -188
  87. package/NetworkGraph.js.map +4 -4
  88. package/ParallelCoordinates/ParallelCoordinates.d.ts +3 -1
  89. package/ParallelCoordinates/ParallelCoordinates.d.ts.map +1 -1
  90. package/ParallelCoordinates.js +239 -128
  91. package/ParallelCoordinates.js.map +4 -4
  92. package/Pie/config.d.ts.map +1 -1
  93. package/Pie/pieUtils.d.ts.map +1 -1
  94. package/Pie.config.js +4 -2
  95. package/Pie.config.js.map +2 -2
  96. package/Pie.js +228 -125
  97. package/Pie.js.map +3 -3
  98. package/ProcessTree/ProcessTree.d.ts +3 -1
  99. package/ProcessTree/ProcessTree.d.ts.map +1 -1
  100. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts +1 -0
  101. package/ProcessTree/PureProcessTree/PureProcessTree.d.ts.map +1 -1
  102. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts +1 -0
  103. package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts.map +1 -1
  104. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts +2 -1
  105. package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts.map +1 -1
  106. package/ProcessTree/PureProcessTree/utils/iconLoader.d.ts +2 -0
  107. package/ProcessTree/PureProcessTree/utils/iconLoader.d.ts.map +1 -1
  108. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts +5 -1
  109. package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts.map +1 -1
  110. package/ProcessTree.js +435 -192
  111. package/ProcessTree.js.map +4 -4
  112. package/Punchcard/Punchcard.d.ts +3 -1
  113. package/Punchcard/Punchcard.d.ts.map +1 -1
  114. package/Punchcard.js +238 -129
  115. package/Punchcard.js.map +4 -4
  116. package/Rectangle/Rectangle.d.ts +3 -1
  117. package/Rectangle/Rectangle.d.ts.map +1 -1
  118. package/Rectangle.js +218 -116
  119. package/Rectangle.js.map +4 -4
  120. package/RichText/PureRichText/Editor/EditorPanel.d.ts +1 -4
  121. package/RichText/PureRichText/Editor/EditorPanel.d.ts.map +1 -1
  122. package/RichText/PureRichText/Editor/hooks/useConfigPanelFocus.d.ts +14 -0
  123. package/RichText/PureRichText/Editor/hooks/useConfigPanelFocus.d.ts.map +1 -0
  124. package/RichText/PureRichText/Editor/hooks/useEditorPanelSync.d.ts +15 -0
  125. package/RichText/PureRichText/Editor/hooks/useEditorPanelSync.d.ts.map +1 -0
  126. package/RichText/PureRichText/Editor/hooks/useLinkHandlers.d.ts.map +1 -1
  127. package/RichText/PureRichText/Editor/hooks/usePortalTarget.d.ts +9 -0
  128. package/RichText/PureRichText/Editor/hooks/usePortalTarget.d.ts.map +1 -0
  129. package/RichText/PureRichText/InnerEditor.d.ts +15 -9
  130. package/RichText/PureRichText/InnerEditor.d.ts.map +1 -1
  131. package/RichText/PureRichText/PureRichText.d.ts +5 -10
  132. package/RichText/PureRichText/PureRichText.d.ts.map +1 -1
  133. package/RichText/PureRichText/PureRichTextContext.d.ts +3 -6
  134. package/RichText/PureRichText/PureRichTextContext.d.ts.map +1 -1
  135. package/RichText/PureRichText/RichTextStyles.d.ts +5 -4
  136. package/RichText/PureRichText/RichTextStyles.d.ts.map +1 -1
  137. package/RichText/PureRichText/activeInstance.d.ts +6 -7
  138. package/RichText/PureRichText/activeInstance.d.ts.map +1 -1
  139. package/RichText/PureRichText/config.d.ts.map +1 -1
  140. package/RichText/PureRichText/hooks/useContentSync.d.ts +9 -9
  141. package/RichText/PureRichText/hooks/useContentSync.d.ts.map +1 -1
  142. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts +2 -7
  143. package/RichText/PureRichText/hooks/useDashboardKeyboardNav.d.ts.map +1 -1
  144. package/RichText/PureRichText/hooks/useEditorSetup.d.ts +8 -4
  145. package/RichText/PureRichText/hooks/useEditorSetup.d.ts.map +1 -1
  146. package/RichText/PureRichText/hooks/useFocusHandlers.d.ts +2 -4
  147. package/RichText/PureRichText/hooks/useFocusHandlers.d.ts.map +1 -1
  148. package/RichText/PureRichText/hooks/useKeyboardShortcuts.d.ts.map +1 -1
  149. package/RichText/PureRichText/hooks/useMouseHandlers.d.ts +3 -7
  150. package/RichText/PureRichText/hooks/useMouseHandlers.d.ts.map +1 -1
  151. package/RichText/PureRichText/hooks/useStepFontSize.d.ts +2 -2
  152. package/RichText/PureRichText/hooks/useStepLineSpacing.d.ts +2 -3
  153. package/RichText/PureRichText/hooks/useStepLineSpacing.d.ts.map +1 -1
  154. package/RichText/PureRichText/hooks/useTokenMap.d.ts +13 -24
  155. package/RichText/PureRichText/hooks/useTokenMap.d.ts.map +1 -1
  156. package/RichText/PureRichText/renderers/ElementRenderer.d.ts +2 -5
  157. package/RichText/PureRichText/renderers/ElementRenderer.d.ts.map +1 -1
  158. package/RichText/PureRichText/types.d.ts +6 -0
  159. package/RichText/PureRichText/types.d.ts.map +1 -1
  160. package/RichText/PureRichText/utils/slateUtils.d.ts +26 -2
  161. package/RichText/PureRichText/utils/slateUtils.d.ts.map +1 -1
  162. package/RichText/RichText.d.ts +3 -1
  163. package/RichText/RichText.d.ts.map +1 -1
  164. package/RichText/config.d.ts.map +1 -1
  165. package/RichText.config.js +5 -0
  166. package/RichText.config.js.map +2 -2
  167. package/RichText.js +1848 -842
  168. package/RichText.js.map +4 -4
  169. package/Sankey/PureSankey/PureSankey.d.ts +2 -0
  170. package/Sankey/PureSankey/PureSankey.d.ts.map +1 -1
  171. package/Sankey/PureSankey/SankeyLink.d.ts +3 -1
  172. package/Sankey/PureSankey/SankeyLink.d.ts.map +1 -1
  173. package/Sankey/PureSankey/SankeyNode.d.ts +5 -2
  174. package/Sankey/PureSankey/SankeyNode.d.ts.map +1 -1
  175. package/Sankey/PureSankey/SankeyUtils.d.ts.map +1 -1
  176. package/Sankey/Sankey.d.ts +3 -1
  177. package/Sankey/Sankey.d.ts.map +1 -1
  178. package/Sankey.js +508 -219
  179. package/Sankey.js.map +4 -4
  180. package/Scatter.config.js +3 -5
  181. package/Scatter.config.js.map +2 -2
  182. package/Scatter.js +244 -146
  183. package/Scatter.js.map +4 -4
  184. package/SingleValue/SingleValue.d.ts.map +1 -1
  185. package/SingleValue.js +273 -173
  186. package/SingleValue.js.map +4 -4
  187. package/SingleValueBasic.js +4 -4
  188. package/SingleValueBasic.js.map +2 -2
  189. package/SingleValueIcon/SingleValueIcon.d.ts.map +1 -1
  190. package/SingleValueIcon.js +264 -164
  191. package/SingleValueIcon.js.map +4 -4
  192. package/SingleValueRadial.js +267 -167
  193. package/SingleValueRadial.js.map +4 -4
  194. package/SparkLine/SparkLine.d.ts.map +1 -1
  195. package/SparkLine.js.map +2 -2
  196. package/Table/PureTable.d.ts.map +1 -1
  197. package/Table/Table.d.ts +2 -5
  198. package/Table/Table.d.ts.map +1 -1
  199. package/Table/hooks.d.ts.map +1 -1
  200. package/Table.config.js +1 -1
  201. package/Table.config.js.map +2 -2
  202. package/Table.js +293 -271
  203. package/Table.js.map +4 -4
  204. package/Timeline/Timeline.d.ts +3 -1
  205. package/Timeline/Timeline.d.ts.map +1 -1
  206. package/Timeline.config.js +2 -2
  207. package/Timeline.config.js.map +2 -2
  208. package/Timeline.js +266 -142
  209. package/Timeline.js.map +4 -4
  210. package/Treemap/Treemap.d.ts +3 -1
  211. package/Treemap/Treemap.d.ts.map +1 -1
  212. package/Treemap.js +263 -147
  213. package/Treemap.js.map +4 -4
  214. package/common/Charting.js +8 -10
  215. package/common/Charting.js.map +2 -2
  216. package/common/ChartingApi.d.ts.map +1 -1
  217. package/common/ChartingApi.js +5 -2
  218. package/common/ChartingApi.js.map +2 -2
  219. package/common/DocExampleWithVizSandbox.d.ts +2 -0
  220. package/common/DocExampleWithVizSandbox.d.ts.map +1 -1
  221. package/common/DocExampleWithVizSandbox.js +54 -6
  222. package/common/DocExampleWithVizSandbox.js.map +2 -2
  223. package/common/GaugeMajorTicks.js.map +2 -2
  224. package/common/GaugeValueMarker.js.map +2 -2
  225. package/common/OptionsDoc.js +1 -1
  226. package/common/OptionsDoc.js.map +2 -2
  227. package/common/OverviewDoc.js +54 -6
  228. package/common/OverviewDoc.js.map +2 -2
  229. package/common/ThemesDoc.js.map +2 -2
  230. package/common/TimeSeriesChartWrapper.js +10 -9
  231. package/common/TimeSeriesChartWrapper.js.map +2 -2
  232. package/common/chartingUtils.d.ts.map +1 -1
  233. package/common/chartingUtils.js +12 -11
  234. package/common/chartingUtils.js.map +2 -2
  235. package/common/components/IconPlaceholder.d.ts.map +1 -1
  236. package/common/docUtils.d.ts.map +1 -1
  237. package/common/docUtils.js +15 -6
  238. package/common/docUtils.js.map +2 -2
  239. package/common/editorConfig/AxesChartDataDisplay.d.ts.map +1 -1
  240. package/common/gaugeUtils.d.ts.map +1 -1
  241. package/common/gaugeUtils.js +4 -2
  242. package/common/gaugeUtils.js.map +2 -2
  243. package/common/hooks/useSorting.d.ts.map +1 -1
  244. package/common/interfaces/VizEvent.d.ts +7 -0
  245. package/common/interfaces/VizEvent.d.ts.map +1 -1
  246. package/common/utils/dataUtils.d.ts.map +1 -1
  247. package/common/utils/dataUtils.js +6 -10
  248. package/common/utils/dataUtils.js.map +2 -2
  249. package/common/utils/featureFlagUtils.js +2 -2
  250. package/common/utils/featureFlagUtils.js.map +2 -2
  251. package/common/utils/focusUtils.js +1 -1
  252. package/common/utils/focusUtils.js.map +2 -2
  253. package/common/utils/mapUtils.d.ts.map +1 -1
  254. package/common/utils/mapUtils.js +17 -21
  255. package/common/utils/mapUtils.js.map +3 -3
  256. package/common/utils/singleValueUtils.js +22 -25
  257. package/common/utils/singleValueUtils.js.map +2 -2
  258. package/common/utils/textUtils.d.ts.map +1 -1
  259. package/common/utils/textUtils.js +37 -23
  260. package/common/utils/textUtils.js.map +2 -2
  261. package/common/utils/trellisUtils.d.ts.map +1 -1
  262. package/common/utils/trellisUtils.js +18 -17
  263. package/common/utils/trellisUtils.js.map +2 -2
  264. package/common/utils/urlUtils.js.map +2 -2
  265. package/common/utils/visualizationTheme.d.ts +15 -0
  266. package/common/utils/visualizationTheme.d.ts.map +1 -0
  267. package/common/utils/visualizationTheme.js +72 -0
  268. package/common/utils/visualizationTheme.js.map +7 -0
  269. package/common/withDashboardViz.d.ts +3 -1
  270. package/common/withDashboardViz.d.ts.map +1 -1
  271. package/common/withDashboardViz.js +216 -105
  272. package/common/withDashboardViz.js.map +4 -4
  273. package/docs-llm/map/examples-react.md +39 -39
  274. package/docs-llm/network-graph/options.md +2 -2
  275. package/docs-llm/pie/examples-json.md +195 -0
  276. package/docs-llm/pie/examples-react.md +123 -0
  277. package/docs-llm/pie/options.md +1 -1
  278. package/docs-llm/process-tree/options.md +3 -2
  279. package/package.json +32 -29
package/Area.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) => {
@@ -1554,10 +1551,8 @@ var AxesChartDataDisplayColumn = {
1554
1551
  };
1555
1552
  var AxesChartDataDisplayLine = {
1556
1553
  label: AxesChartDataDisplayBase.label,
1557
- layout: [
1558
- // remove stacked mode editor
1559
- ...AxesChartDataDisplayBase.layout.slice(1)
1560
- ]
1554
+ // remove stacked mode editor
1555
+ layout: AxesChartDataDisplayBase.layout.slice(1)
1561
1556
  };
1562
1557
 
1563
1558
  // src/common/editorConfig/BackgroundColor.ts
@@ -2712,7 +2707,10 @@ var useSortingParams = ({ requestParams, onRequestParamsChange }) => {
2712
2707
  onSort = (e, { sortKey, sortDir }) => {
2713
2708
  if (typeof sortKey === "string") {
2714
2709
  const nextSortDir = (0, lodash_exports.has)(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : "none";
2715
- onRequestParamsChange(__spreadValues(__spreadValues({}, requestParams), { offset: 0, sort: { [sortKey]: nextSortDir } }));
2710
+ onRequestParamsChange(__spreadProps(__spreadValues({}, requestParams), {
2711
+ offset: 0,
2712
+ sort: { [sortKey]: nextSortDir }
2713
+ }));
2716
2714
  } else {
2717
2715
  onRequestParamsChange(requestParams);
2718
2716
  }
@@ -2838,7 +2836,7 @@ var Cover = styled_components_default.div`
2838
2836
  bottom: 0;
2839
2837
  `;
2840
2838
  var Blocker = styled_components_default.div.attrs({
2841
- "data-splunk-visualization-version": "28.8.0 - 633c53372"
2839
+ "data-splunk-visualization-version": "28.9.1 - fba477a41"
2842
2840
  })`
2843
2841
  position: relative;
2844
2842
  width: 100%;
@@ -2864,6 +2862,15 @@ var defaultImport31 = __toESM(require("@splunk/visualizations-shared/colorUtils"
2864
2862
  __reExport(colorUtils_exports, require("@splunk/visualizations-shared/colorUtils"));
2865
2863
  var colorUtils_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
2866
2864
 
2865
+ // esm-externals:@splunk/themes
2866
+ var themes_exports = {};
2867
+ __export(themes_exports, {
2868
+ default: () => themes_default
2869
+ });
2870
+ var defaultImport32 = __toESM(require("@splunk/themes"));
2871
+ __reExport(themes_exports, require("@splunk/themes"));
2872
+ var themes_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2873
+
2867
2874
  // src/common/hocs/FixedSizeContainer.tsx
2868
2875
  var Item = styled_components_default.div.attrs(({ width }) => ({
2869
2876
  style: {
@@ -2919,7 +2926,7 @@ var withFixedSizeContainer = (Viz) => {
2919
2926
  FixSizeItem,
2920
2927
  {
2921
2928
  "data-test": "fix-size-item",
2922
- "data-splunk-visualization-version": "28.8.0 - 633c53372",
2929
+ "data-splunk-visualization-version": "28.9.1 - fba477a41",
2923
2930
  width,
2924
2931
  height,
2925
2932
  backgroundColor
@@ -2940,6 +2947,14 @@ var shouldShowIconPlaceholder = (dataSources, loading = false) => {
2940
2947
  const noFields = fields === void 0;
2941
2948
  return loading || noData || noFields;
2942
2949
  };
2950
+ var PlaceholderContainer = styled_components_default.div`
2951
+ /* The inline token color wins when supported. Older browsers discard an
2952
+ unsupported oklch value and retain this inherited fallback instead. */
2953
+ color: ${(0, themes_exports.pick)({
2954
+ dark: "#fafafa",
2955
+ light: "#2c2c2c"
2956
+ })};
2957
+ `;
2943
2958
  var IconPlaceholder = (props) => {
2944
2959
  const {
2945
2960
  width = SplunkVisualization_default.defaults.width,
@@ -2954,7 +2969,6 @@ var IconPlaceholder = (props) => {
2954
2969
  style: {
2955
2970
  left: "50%",
2956
2971
  top: "50%",
2957
- color: iconColor,
2958
2972
  opacity: 0.15,
2959
2973
  position: "absolute",
2960
2974
  transform: "translate(-50%, -50%)"
@@ -2964,7 +2978,14 @@ var IconPlaceholder = (props) => {
2964
2978
  "data-test": "icon-placeholder"
2965
2979
  });
2966
2980
  }
2967
- return /* @__PURE__ */ react_exports.createElement("div", { style: { width, height, background: backgroundColor } }, content);
2981
+ return /* @__PURE__ */ react_exports.createElement(
2982
+ PlaceholderContainer,
2983
+ {
2984
+ "data-test": "icon-placeholder-container",
2985
+ style: { width, height, background: backgroundColor, color: iconColor }
2986
+ },
2987
+ content
2988
+ );
2968
2989
  };
2969
2990
  var IconPlaceholder_default = FixedSizeContainer_default(IconPlaceholder);
2970
2991
 
@@ -3167,16 +3188,16 @@ var FeatureFlags_exports = {};
3167
3188
  __export(FeatureFlags_exports, {
3168
3189
  default: () => FeatureFlags_default
3169
3190
  });
3170
- var defaultImport32 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
3191
+ var defaultImport33 = __toESM(require("@splunk/visualization-context/FeatureFlags"));
3171
3192
  __reExport(FeatureFlags_exports, require("@splunk/visualization-context/FeatureFlags"));
3172
- var FeatureFlags_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
3193
+ var FeatureFlags_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
3173
3194
 
3174
3195
  // src/common/utils/featureFlagUtils.ts
3175
3196
  var getFeatureFlag = (context, flagName) => {
3176
- if (context && Object.keys(context).find((key) => key === flagName)) {
3197
+ if (context && Object.keys(context).includes(flagName)) {
3177
3198
  return context[flagName];
3178
3199
  }
3179
- if (Object.keys(FeatureFlags_default).find((key) => key === flagName)) {
3200
+ if (Object.keys(FeatureFlags_default).includes(flagName)) {
3180
3201
  return FeatureFlags_default[flagName];
3181
3202
  }
3182
3203
  return false;
@@ -3187,9 +3208,9 @@ var trellisUtils_exports = {};
3187
3208
  __export(trellisUtils_exports, {
3188
3209
  default: () => trellisUtils_default
3189
3210
  });
3190
- var defaultImport33 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3211
+ var defaultImport34 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3191
3212
  __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
3192
- var trellisUtils_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
3213
+ var trellisUtils_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
3193
3214
 
3194
3215
  // src/common/utils/trellisUtils.ts
3195
3216
  var AGGREGATIONS = "aggregations";
@@ -3410,7 +3431,7 @@ var dataSourcesSplitByModeChart = (dataSource, splitBy) => {
3410
3431
  splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
3411
3432
  }
3412
3433
  if (splitByFields == null ? void 0 : splitByFields.includes(splitBy)) {
3413
- const splitByFieldIdx = splitByFields.findIndex((f) => f === splitBy);
3434
+ const splitByFieldIdx = splitByFields.indexOf(splitBy);
3414
3435
  const otherSplitBy = splitByFields.filter((f) => f !== splitBy);
3415
3436
  const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
3416
3437
  const nonDataSourceAggregations = [];
@@ -3444,17 +3465,17 @@ var dataSourcesSplitByModeStatsorUnknown = (dataSource, splitBy, splitMode) => {
3444
3465
  let splitByFields = [];
3445
3466
  let errorCode = null;
3446
3467
  if (fields.length > 0) {
3447
- splitByFields = splitMode !== trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields);
3468
+ splitByFields = splitMode === trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields);
3448
3469
  }
3449
3470
  const splitByIndex = fields.findIndex((field) => field.name === splitBy);
3450
3471
  if (splitByFields == null ? void 0 : splitByFields.includes(splitBy)) {
3451
3472
  const splitByColumn = (_f = (_e = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _e.data) == null ? void 0 : _f.columns[splitByIndex];
3452
3473
  splitDataSources = {};
3453
3474
  splitByColumn.forEach((val, idx) => {
3454
- if (!splitDataSources[val]) {
3455
- splitDataSources[val] = [idx];
3456
- } else {
3475
+ if (splitDataSources[val]) {
3457
3476
  splitDataSources[val].push(idx);
3477
+ } else {
3478
+ splitDataSources[val] = [idx];
3458
3479
  }
3459
3480
  });
3460
3481
  const cloneFields = (0, lodash_exports.cloneDeep)(fields);
@@ -3505,27 +3526,28 @@ var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
3505
3526
  }
3506
3527
  return {};
3507
3528
  };
3529
+ var extendMinMaxWithColumn = (column, range2) => column.reduce((acc, point) => {
3530
+ const pointNumber = Number(point);
3531
+ if (Number.isNaN(pointNumber)) {
3532
+ return acc;
3533
+ }
3534
+ return {
3535
+ min: Math.min(pointNumber, acc.min),
3536
+ max: Math.max(pointNumber, acc.max)
3537
+ };
3538
+ }, range2);
3508
3539
  var calculateSharedMinMax = (splitData) => {
3509
- let max = -Infinity;
3510
- let min = Infinity;
3540
+ let range2 = { min: Infinity, max: -Infinity };
3511
3541
  Object.keys(splitData).forEach((splitByKey) => {
3512
3542
  const datasources = splitData[splitByKey];
3513
3543
  Object.keys(datasources).forEach((datasourceName) => {
3514
3544
  const dataColumns = datasources[datasourceName].data.columns;
3515
3545
  dataColumns.forEach((column) => {
3516
- column.forEach((point) => {
3517
- const pointNumber = Number(point);
3518
- if (pointNumber > max) {
3519
- max = pointNumber;
3520
- }
3521
- if (pointNumber < min) {
3522
- min = pointNumber;
3523
- }
3524
- });
3546
+ range2 = extendMinMaxWithColumn(column, range2);
3525
3547
  });
3526
3548
  });
3527
3549
  });
3528
- return [min, max];
3550
+ return [range2.min, range2.max];
3529
3551
  };
3530
3552
  var determineMinMax = (splitData, trellisSharedScale, yAxisMin, yAxisMax, stackMode) => {
3531
3553
  if (!trellisSharedScale || stackMode === "stacked100" || yAxisMin !== "auto" && yAxisMax !== "auto")
@@ -3541,9 +3563,9 @@ var visualization_canvas_exports = {};
3541
3563
  __export(visualization_canvas_exports, {
3542
3564
  default: () => visualization_canvas_default
3543
3565
  });
3544
- var defaultImport34 = __toESM(require("@splunk/visualization-canvas"));
3566
+ var defaultImport35 = __toESM(require("@splunk/visualization-canvas"));
3545
3567
  __reExport(visualization_canvas_exports, require("@splunk/visualization-canvas"));
3546
- var visualization_canvas_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
3568
+ var visualization_canvas_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
3547
3569
 
3548
3570
  // src/common/components/VizStyleWrapper.jsx
3549
3571
  var VizStyleWrapper = styled_components_default.div.attrs(({ dataTestKey }) => ({
@@ -3565,27 +3587,27 @@ var Triangle_exports = {};
3565
3587
  __export(Triangle_exports, {
3566
3588
  default: () => Triangle_default
3567
3589
  });
3568
- var defaultImport35 = __toESM(require("@splunk/react-icons/Triangle"));
3590
+ var defaultImport36 = __toESM(require("@splunk/react-icons/Triangle"));
3569
3591
  __reExport(Triangle_exports, require("@splunk/react-icons/Triangle"));
3570
- var Triangle_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
3592
+ var Triangle_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
3571
3593
 
3572
3594
  // esm-externals:@splunk/visualizations-shared/propUtils
3573
3595
  var propUtils_exports = {};
3574
3596
  __export(propUtils_exports, {
3575
3597
  default: () => propUtils_default
3576
3598
  });
3577
- var defaultImport36 = __toESM(require("@splunk/visualizations-shared/propUtils"));
3599
+ var defaultImport37 = __toESM(require("@splunk/visualizations-shared/propUtils"));
3578
3600
  __reExport(propUtils_exports, require("@splunk/visualizations-shared/propUtils"));
3579
- var propUtils_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
3601
+ var propUtils_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
3580
3602
 
3581
3603
  // esm-externals:@splunk/visualizations-shared/simpleXMLOptions
3582
3604
  var simpleXMLOptions_exports = {};
3583
3605
  __export(simpleXMLOptions_exports, {
3584
3606
  default: () => simpleXMLOptions_default
3585
3607
  });
3586
- var defaultImport37 = __toESM(require("@splunk/visualizations-shared/simpleXMLOptions"));
3608
+ var defaultImport38 = __toESM(require("@splunk/visualizations-shared/simpleXMLOptions"));
3587
3609
  __reExport(simpleXMLOptions_exports, require("@splunk/visualizations-shared/simpleXMLOptions"));
3588
- var simpleXMLOptions_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
3610
+ var simpleXMLOptions_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
3589
3611
 
3590
3612
  // src/common/chartingUtils.ts
3591
3613
  var SHARED_AXIS_CHART_CANVAS_SPECIFIC_PROPS = [
@@ -3690,7 +3712,7 @@ var constructFieldsAndColumns = ({
3690
3712
  const y2FieldsArray = toArrayForSeries(y2, y2Fields);
3691
3713
  const y2AsArray = toArrayForSeries(y2, y2).map((series) => series == null ? void 0 : series.map(String));
3692
3714
  y2FieldsArray.forEach((y2Field, index) => {
3693
- if (yFieldsArray.indexOf(y2Field) === -1 && y2AsArray[index]) {
3715
+ if (!yFieldsArray.includes(y2Field) && y2AsArray[index]) {
3694
3716
  fields.push({
3695
3717
  name: y2Field
3696
3718
  });
@@ -3782,9 +3804,9 @@ var shouldEnableSearchZoom = (eventHandlers = [], xField = "") => {
3782
3804
  const xAxisIsTime = xField === "_time";
3783
3805
  return !!rangeSelectEventHandler && xAxisIsTime;
3784
3806
  };
3785
- var canvasSupportedTimeSeriesCharts = ["splunk.line", "splunk.area"];
3807
+ var canvasSupportedTimeSeriesCharts = /* @__PURE__ */ new Set(["splunk.line", "splunk.area"]);
3786
3808
  var isTimeSeriesCanvasRenderSupported = (vizConfigKey) => {
3787
- return canvasSupportedTimeSeriesCharts.includes(vizConfigKey);
3809
+ return canvasSupportedTimeSeriesCharts.has(vizConfigKey);
3788
3810
  };
3789
3811
  var filterChartDataFromInternalFields = (chartData) => {
3790
3812
  const { fields, columns } = chartData;
@@ -3800,7 +3822,7 @@ var filterChartDataFromInternalFields = (chartData) => {
3800
3822
  return { fields: filteredFields, columns: filteredColumns };
3801
3823
  };
3802
3824
  var convert2DArrayToNumbers = (arr) => {
3803
- return arr.map((subArray) => subArray.map((element) => parseFloat(element)));
3825
+ return arr.map((subArray) => subArray.map((element) => Number.parseFloat(element)));
3804
3826
  };
3805
3827
  var parseAxisValue = (val) => {
3806
3828
  if (val === void 0 || val === null || val === "auto" || val === "") {
@@ -3838,6 +3860,7 @@ var getLegend = (props) => {
3838
3860
  return (0, visualization_canvas_exports.TopLegendFactory)(__spreadValues({
3839
3861
  wrap: true
3840
3862
  }, commonLegendProps));
3863
+ // Note: By default, use right legend
3841
3864
  default:
3842
3865
  return (0, visualization_canvas_exports.SideLegendFactory)(__spreadValues({}, commonLegendProps));
3843
3866
  }
@@ -3970,10 +3993,10 @@ var getSeriesOverrides = (opts) => {
3970
3993
  let spanGaps;
3971
3994
  if (nullValueMode === "gaps") {
3972
3995
  spanGaps = false;
3973
- } else if (nullValueMode != null) {
3974
- spanGaps = true;
3975
- } else {
3996
+ } else if (nullValueMode == null) {
3976
3997
  spanGaps = void 0;
3998
+ } else {
3999
+ spanGaps = true;
3977
4000
  }
3978
4001
  const replaceNullsWithZero = nullValueMode === "zero" ? true : void 0;
3979
4002
  const isAreaChart = type === "area";
@@ -4343,11 +4366,11 @@ var TimeSeriesChartWrapper = (props) => {
4343
4366
  y2AxisMajorUnitFromSimpleXML,
4344
4367
  y2AxisMajorTickInterval
4345
4368
  );
4346
- const xAxisMajorTickSizeNum = xAxisMajorTickSize != null ? Number(xAxisMajorTickSize) : void 0;
4347
- const yAxisMajorTickSizeNum = yAxisMajorTickSize != null ? Number(yAxisMajorTickSize) : void 0;
4348
- const y2AxisMajorTickSizeNum = y2AxisMajorTickSize != null ? Number(y2AxisMajorTickSize) : void 0;
4349
- const yAxisMinorTickSizeNum = yAxisMinorTickSize != null ? Number(yAxisMinorTickSize) : void 0;
4350
- const y2AxisMinorTickSizeNum = y2AxisMinorTickSize != null ? Number(y2AxisMinorTickSize) : void 0;
4369
+ const xAxisMajorTickSizeNum = xAxisMajorTickSize == null ? void 0 : Number(xAxisMajorTickSize);
4370
+ const yAxisMajorTickSizeNum = yAxisMajorTickSize == null ? void 0 : Number(yAxisMajorTickSize);
4371
+ const y2AxisMajorTickSizeNum = y2AxisMajorTickSize == null ? void 0 : Number(y2AxisMajorTickSize);
4372
+ const yAxisMinorTickSizeNum = yAxisMinorTickSize == null ? void 0 : Number(yAxisMinorTickSize);
4373
+ const y2AxisMinorTickSizeNum = y2AxisMinorTickSize == null ? void 0 : Number(y2AxisMinorTickSize);
4351
4374
  const areaOpacityForCanvas = getAreaOpacityForCanvas(areaOpacity);
4352
4375
  const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : void 0;
4353
4376
  const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : void 0;
@@ -4759,6 +4782,76 @@ var buildEventCallbackProps = (supportedEvents, evaluatedOptionsToUse, onEventTr
4759
4782
  });
4760
4783
  return result;
4761
4784
  };
4785
+ var buildAllEventCallbackProps = (events, evaluatedOptionsToUse, onEventTrigger, { supportsEvents, hasEventHandlers, mode }) => {
4786
+ if (!supportsEvents) return {};
4787
+ const defaultEvents = {};
4788
+ const userEvents = {};
4789
+ Object.entries(events || {}).forEach(([eventKey, eventConfig]) => {
4790
+ (eventConfig.source === "default" ? defaultEvents : userEvents)[eventKey] = eventConfig;
4791
+ });
4792
+ const userProps = hasEventHandlers && mode === "view" ? buildEventCallbackProps(userEvents, evaluatedOptionsToUse, onEventTrigger) : {};
4793
+ return __spreadValues(__spreadValues({}, userProps), buildEventCallbackProps(defaultEvents, evaluatedOptionsToUse, onEventTrigger));
4794
+ };
4795
+ var applyContextTimezone = (localeContext) => {
4796
+ if (localeContext.serializedTimezone && !moment_default.getDefaultSplunkTimezone()) {
4797
+ moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
4798
+ }
4799
+ };
4800
+ var getAsyncOptionsEvaluationParams = ({
4801
+ visualizationID,
4802
+ props,
4803
+ optionsToEvaluate,
4804
+ downsampledDataSources,
4805
+ vizConfig,
4806
+ bypassCloneDeepOptionScope,
4807
+ lazyLoadingDataFrame
4808
+ }) => {
4809
+ return {
4810
+ visualizationID,
4811
+ props,
4812
+ options: __spreadValues({}, optionsToEvaluate),
4813
+ dataSources: downsampledDataSources,
4814
+ theme: vizConfig.themes,
4815
+ bypassCloneDeepOptionScope,
4816
+ lazyLoadingDataFrame
4817
+ };
4818
+ };
4819
+ var evaluateOptionsSync = ({
4820
+ optionsToEvaluate,
4821
+ downsampledDataSources,
4822
+ dataSourcesInState,
4823
+ dataFramesInState,
4824
+ setDataSourcesInState,
4825
+ setDataFramesInState,
4826
+ computeDataFrames,
4827
+ featureFlagContext,
4828
+ themeFunc
4829
+ }) => {
4830
+ let dataFrames = dataFramesInState;
4831
+ if (downsampledDataSources !== dataSourcesInState) {
4832
+ setDataSourcesInState(downsampledDataSources);
4833
+ dataFrames = Options_exports.Options.dataFrameFromDataSource(
4834
+ downsampledDataSources,
4835
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4836
+ );
4837
+ setDataFramesInState(dataFrames);
4838
+ }
4839
+ let mergedFrames = dataFrames;
4840
+ if (computeDataFrames && dataFrames) {
4841
+ const derivedFrames = computeDataFrames({
4842
+ dataSources: downsampledDataSources,
4843
+ options: optionsToEvaluate.options
4844
+ });
4845
+ mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
4846
+ }
4847
+ return Options_exports.Options.evaluate(
4848
+ optionsToEvaluate,
4849
+ downsampledDataSources,
4850
+ themeFunc,
4851
+ mergedFrames,
4852
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4853
+ );
4854
+ };
4762
4855
  var withDashboardViz = (opts) => {
4763
4856
  const {
4764
4857
  ReactViz,
@@ -4790,11 +4883,7 @@ var withDashboardViz = (opts) => {
4790
4883
  onRequestParamsChange = lodash_exports.noop
4791
4884
  } = props;
4792
4885
  const localeContext = react_exports.useContext(TimezoneContext_default);
4793
- if (localeContext.serializedTimezone) {
4794
- if (!moment_default.getDefaultSplunkTimezone()) {
4795
- moment_default.setDefaultSplunkTimezone(localeContext.serializedTimezone);
4796
- }
4797
- }
4886
+ applyContextTimezone(localeContext);
4798
4887
  const themeFunc = (themeVar) => {
4799
4888
  var _a2, _b;
4800
4889
  return (_b = (_a2 = vizConfig.themes)[themeVar]) == null ? void 0 : _b.call(_a2, props);
@@ -4822,7 +4911,12 @@ var withDashboardViz = (opts) => {
4822
4911
  featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableAcceleratedRender
4823
4912
  );
4824
4913
  const isAcceleratedRenderOn = isAcceleratedRenderFeatureFlagOn2 && isTimeSeriesCanvasRenderSupported(vizConfig.key) && (options == null ? void 0 : options.acceleratedRender) === true;
4825
- const isMounted = react_exports.useRef(true);
4914
+ const bypassCloneDeepOptionScope = Boolean(
4915
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4916
+ );
4917
+ const lazyLoadingDataFrame = Boolean(
4918
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4919
+ );
4826
4920
  const optionsToEvaluate = react_exports.useMemo(() => {
4827
4921
  var _a2;
4828
4922
  const legendDisplay = turnOffLegendDisplayWhenTrellisIsOn(isTrellisOn, options);
@@ -4861,63 +4955,74 @@ var withDashboardViz = (opts) => {
4861
4955
  threshold,
4862
4956
  isDownsamplingEnabled
4863
4957
  });
4864
- evaluatedOptions = useDeepMemo(() => {
4958
+ const asyncOptionsEvaluationParams = useDeepMemo(
4959
+ () => getAsyncOptionsEvaluationParams({
4960
+ visualizationID,
4961
+ props,
4962
+ optionsToEvaluate,
4963
+ downsampledDataSources,
4964
+ vizConfig,
4965
+ bypassCloneDeepOptionScope,
4966
+ lazyLoadingDataFrame
4967
+ }),
4968
+ [
4969
+ visualizationID,
4970
+ optionsToEvaluate,
4971
+ downsampledDataSources,
4972
+ vizConfig,
4973
+ bypassCloneDeepOptionScope,
4974
+ lazyLoadingDataFrame,
4975
+ currentThemeFamily,
4976
+ currentThemeColorScheme,
4977
+ currentThemeDensity,
4978
+ localeContext.serializedTimezone
4979
+ ]
4980
+ );
4981
+ react_exports.useEffect(() => {
4982
+ if (!useAsyncEvaluatedOptions) {
4983
+ return void 0;
4984
+ }
4985
+ let ownsEvaluation = true;
4865
4986
  try {
4866
- if (useAsyncEvaluatedOptions) {
4867
- const asyncDynamicOptionsEvaluatorParams = {
4868
- visualizationID,
4869
- props,
4870
- options: optionsToEvaluate,
4871
- dataSources: downsampledDataSources,
4872
- theme: vizConfig.themes,
4873
- bypassCloneDeepOptionScope: Boolean(
4874
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4875
- ),
4876
- lazyLoadingDataFrame: Boolean(
4877
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4878
- )
4879
- };
4880
- async_dynamic_options_evaluator_default.evaluate(asyncDynamicOptionsEvaluatorParams).then((results) => {
4987
+ async_dynamic_options_evaluator_default.evaluate(asyncOptionsEvaluationParams).then((results) => {
4988
+ if (ownsEvaluation) {
4881
4989
  setEvaluatedOptionsAsync(results.results);
4882
- }).catch(() => {
4883
- if (isMounted.current) {
4884
- setUseAsyncEvaluatedOptions(false);
4885
- }
4886
- });
4887
- } else {
4888
- let dataFrames = dataFramesInState;
4889
- if (downsampledDataSources !== dataSourcesInState) {
4890
- setDataSourcesInState(downsampledDataSources);
4891
- dataFrames = Options_exports.Options.dataFrameFromDataSource(
4892
- downsampledDataSources,
4893
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
4894
- );
4895
- setDataFramesInState(dataFrames);
4896
4990
  }
4897
- let mergedFrames = dataFrames;
4898
- if (computeDataFrames && dataFrames) {
4899
- const derivedFrames = computeDataFrames({
4900
- dataSources: downsampledDataSources,
4901
- options: optionsToEvaluate.options
4902
- });
4903
- mergedFrames = __spreadValues(__spreadValues({}, dataFrames), derivedFrames);
4991
+ }).catch(() => {
4992
+ if (ownsEvaluation) {
4993
+ setUseAsyncEvaluatedOptions(false);
4904
4994
  }
4905
- const result = Options_exports.Options.evaluate(
4906
- optionsToEvaluate,
4907
- downsampledDataSources,
4908
- themeFunc,
4909
- mergedFrames,
4910
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
4911
- );
4912
- return result;
4995
+ });
4996
+ } catch (e) {
4997
+ setUseAsyncEvaluatedOptions(false);
4998
+ }
4999
+ return () => {
5000
+ ownsEvaluation = false;
5001
+ async_dynamic_options_evaluator_default.reset(visualizationID);
5002
+ };
5003
+ }, [asyncOptionsEvaluationParams, useAsyncEvaluatedOptions, visualizationID]);
5004
+ evaluatedOptions = useDeepMemo(() => {
5005
+ try {
5006
+ if (useAsyncEvaluatedOptions) {
5007
+ return {};
4913
5008
  }
5009
+ return evaluateOptionsSync({
5010
+ optionsToEvaluate,
5011
+ downsampledDataSources,
5012
+ dataSourcesInState,
5013
+ dataFramesInState,
5014
+ setDataSourcesInState,
5015
+ setDataFramesInState,
5016
+ computeDataFrames,
5017
+ featureFlagContext,
5018
+ themeFunc
5019
+ });
4914
5020
  } catch (e) {
4915
5021
  if (e instanceof Error) {
4916
5022
  console.error(`unexpected error evaluating options: ${e.message}`);
4917
5023
  }
4918
5024
  return {};
4919
5025
  }
4920
- return {};
4921
5026
  }, [
4922
5027
  currentThemeFamily,
4923
5028
  currentThemeColorScheme,
@@ -4927,7 +5032,7 @@ var withDashboardViz = (opts) => {
4927
5032
  localeContext.serializedTimezone,
4928
5033
  useAsyncEvaluatedOptions
4929
5034
  ]);
4930
- const evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync;
5035
+ const evaluatedOptionsToUse = useAsyncEvaluatedOptions ? evaluatedOptionsAsync : evaluatedOptions;
4931
5036
  let dataSourceMetadata = {};
4932
5037
  const OptionKey = "paginateDataSourceKey";
4933
5038
  const optsKey = (0, lodash_exports.has)(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey];
@@ -4949,7 +5054,7 @@ var withDashboardViz = (opts) => {
4949
5054
  sortParams,
4950
5055
  paginatorParams
4951
5056
  };
4952
- if (vizConfig.supports.indexOf("page-and-sort" /* PAGE_AND_SORT */) === -1 && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
5057
+ if (!vizConfig.supports.includes("page-and-sort" /* PAGE_AND_SORT */) && !(0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
4953
5058
  dataSourceMetadata = {};
4954
5059
  }
4955
5060
  const clonedEvaluatedOptions = __spreadValues({}, evaluatedOptionsToUse);
@@ -4959,14 +5064,6 @@ var withDashboardViz = (opts) => {
4959
5064
  react_exports.useEffect(() => {
4960
5065
  onComputedProps(clonedEvaluatedOptions);
4961
5066
  });
4962
- react_exports.useEffect(() => {
4963
- return () => {
4964
- if (useAsyncEvaluatedOptions) {
4965
- isMounted.current = false;
4966
- async_dynamic_options_evaluator_default.reset(visualizationID);
4967
- }
4968
- };
4969
- }, []);
4970
5067
  const { requiredProps = [], supports } = vizConfig;
4971
5068
  const missing = missingKeys(requiredProps, evaluatedOptionsToUse);
4972
5069
  if (missing.length > 0 && supports.includes("placeholder" /* PLACEHOLDER */) && vizConfig.key !== "splunk.singlevalue") {
@@ -4981,7 +5078,16 @@ var withDashboardViz = (opts) => {
4981
5078
  }
4982
5079
  );
4983
5080
  }
4984
- const eventCallbackProps = hasEventHandlers && mode === "view" && vizConfig.supports.includes("events" /* EVENTS */) ? buildEventCallbackProps(vizConfig.events, evaluatedOptionsToUse, onEventTrigger) : {};
5081
+ const eventCallbackProps = buildAllEventCallbackProps(
5082
+ vizConfig.events,
5083
+ evaluatedOptionsToUse,
5084
+ onEventTrigger,
5085
+ {
5086
+ supportsEvents: vizConfig.supports.includes("events" /* EVENTS */),
5087
+ hasEventHandlers,
5088
+ mode
5089
+ }
5090
+ );
4985
5091
  const computedVizProps = computeVizProps2(__spreadProps(__spreadValues(__spreadProps(__spreadValues(__spreadValues({}, props), evaluatedOptionsToUse), {
4986
5092
  // Align option transformation with the actual renderer selected below.
4987
5093
  // This prevents canvas-only option preservation from leaking into Highcharts mode.
@@ -5009,8 +5115,9 @@ var withDashboardViz = (opts) => {
5009
5115
  onEventTrigger: SplunkVisualization_default.defaults.onEventTrigger
5010
5116
  });
5011
5117
  DashboardViz.config = vizConfig;
5012
- return (0, styled_components_exports.withTheme)(
5013
- withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)
5118
+ return Object.assign(
5119
+ (0, styled_components_exports.withTheme)(withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)),
5120
+ { config: vizConfig }
5014
5121
  );
5015
5122
  };
5016
5123
  var withDashboardViz_default = withDashboardViz;
@@ -5122,18 +5229,9 @@ var Paginator_exports = {};
5122
5229
  __export(Paginator_exports, {
5123
5230
  default: () => Paginator_default
5124
5231
  });
5125
- var defaultImport38 = __toESM(require("@splunk/react-ui/Paginator"));
5232
+ var defaultImport39 = __toESM(require("@splunk/react-ui/Paginator"));
5126
5233
  __reExport(Paginator_exports, require("@splunk/react-ui/Paginator"));
5127
- var Paginator_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
5128
-
5129
- // esm-externals:@splunk/themes
5130
- var themes_exports = {};
5131
- __export(themes_exports, {
5132
- default: () => themes_default
5133
- });
5134
- var defaultImport39 = __toESM(require("@splunk/themes"));
5135
- __reExport(themes_exports, require("@splunk/themes"));
5136
- var themes_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
5234
+ var Paginator_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
5137
5235
 
5138
5236
  // src/common/hocs/withTrellis.tsx
5139
5237
  var evaluatePanelOption = (panelDataSources, allOptions, optionKey, vizContext) => {
@@ -5156,7 +5254,7 @@ var sortTrellisKeys = (keys, trellisSortBy, trellisSortOrder, modifiedDataSource
5156
5254
  if (trellisSortBy === "trend") {
5157
5255
  optionKey = "trendValue";
5158
5256
  } else {
5159
- optionKey = mergedOptions.value !== void 0 ? "value" : "majorValue";
5257
+ optionKey = mergedOptions.value === void 0 ? "majorValue" : "value";
5160
5258
  }
5161
5259
  keys.sort((a, b) => {
5162
5260
  const valA = evaluatePanelOption(
@@ -5308,13 +5406,13 @@ var withTrellis = (Viz) => {
5308
5406
  const noColumns = columns === void 0;
5309
5407
  const noFields = fields === void 0;
5310
5408
  const updateDataDisplay = (currPage) => {
5311
- if (!showPaginator) {
5312
- setPagedData(splitByKeys);
5313
- setPageNum(1);
5314
- } else {
5409
+ if (showPaginator) {
5315
5410
  const startIdx = pageCount * (currPage - 1);
5316
5411
  const paged = splitByKeys.slice(startIdx, startIdx + pageCount);
5317
5412
  setPagedData(paged);
5413
+ } else {
5414
+ setPagedData(splitByKeys);
5415
+ setPageNum(1);
5318
5416
  }
5319
5417
  };
5320
5418
  (0, react_exports.useEffect)(() => {