@splunk/visualizations 28.3.0 → 28.4.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 (225) hide show
  1. package/Area/Area.d.ts.map +1 -1
  2. package/Area.config.js +0 -1
  3. package/Area.config.js.map +2 -2
  4. package/Area.js +495 -99
  5. package/Area.js.map +3 -3
  6. package/Bar/Bar.d.ts.map +1 -1
  7. package/Bar.config.js +0 -1
  8. package/Bar.config.js.map +2 -2
  9. package/Bar.js +505 -99
  10. package/Bar.js.map +3 -3
  11. package/Bubble.config.js +0 -1
  12. package/Bubble.config.js.map +2 -2
  13. package/Bubble.js +494 -86
  14. package/Bubble.js.map +3 -3
  15. package/CHANGELOG.external.md +76 -0
  16. package/ChoroplethSvg/ChoroplethSvg.d.ts +4 -3
  17. package/ChoroplethSvg/ChoroplethSvg.d.ts.map +1 -1
  18. package/ChoroplethSvg.config.js +1 -3
  19. package/ChoroplethSvg.config.js.map +2 -2
  20. package/ChoroplethSvg.js +539 -103
  21. package/ChoroplethSvg.js.map +4 -4
  22. package/Column/Column.d.ts.map +1 -1
  23. package/Column.config.js +0 -1
  24. package/Column.config.js.map +2 -2
  25. package/Column.js +495 -99
  26. package/Column.js.map +3 -3
  27. package/Ellipse.js +528 -104
  28. package/Ellipse.js.map +4 -4
  29. package/Events/PureEvents/PureEvents.d.ts.map +1 -1
  30. package/Events.js +612 -149
  31. package/Events.js.map +4 -4
  32. package/FillerGauge/FillerGauge.d.ts.map +1 -1
  33. package/FillerGauge/PureFillerGauge/FillerGauge.d.ts.map +1 -1
  34. package/FillerGauge.js +535 -140
  35. package/FillerGauge.js.map +4 -4
  36. package/Image/Image.d.ts.map +1 -1
  37. package/Image.js +564 -108
  38. package/Image.js.map +4 -4
  39. package/Line/Line.d.ts.map +1 -1
  40. package/Line/lineUtils.d.ts.map +1 -1
  41. package/Line/mockdata/LineData.d.ts +59 -0
  42. package/Line/mockdata/LineData.d.ts.map +1 -1
  43. package/Line.config.js +0 -1
  44. package/Line.config.js.map +2 -2
  45. package/Line.js +601 -100
  46. package/Line.js.map +3 -3
  47. package/LinkGraph/PureLinkGraph/PureLinkGraph.d.ts +5 -0
  48. package/LinkGraph/PureLinkGraph/PureLinkGraph.d.ts.map +1 -1
  49. package/LinkGraph/PureLinkGraph/PureLinkGraphUtils.d.ts.map +1 -1
  50. package/LinkGraph/PureLinkGraph/components/Graph.d.ts +9 -1
  51. package/LinkGraph/PureLinkGraph/components/Graph.d.ts.map +1 -1
  52. package/LinkGraph/PureLinkGraph/components/GraphStyles.d.ts.map +1 -1
  53. package/LinkGraph/PureLinkGraph/components/Node.d.ts +1 -0
  54. package/LinkGraph/PureLinkGraph/components/Node.d.ts.map +1 -1
  55. package/LinkGraph/PureLinkGraph/components/Nodes.d.ts +1 -0
  56. package/LinkGraph/PureLinkGraph/components/Nodes.d.ts.map +1 -1
  57. package/LinkGraph/PureLinkGraph/measurementUtils.d.ts +16 -0
  58. package/LinkGraph/PureLinkGraph/measurementUtils.d.ts.map +1 -0
  59. package/LinkGraph/PureLinkGraph/utils/iconLoader.d.ts.map +1 -1
  60. package/LinkGraph/config.d.ts.map +1 -1
  61. package/LinkGraph.config.js +15 -1
  62. package/LinkGraph.config.js.map +2 -2
  63. package/LinkGraph.js +1355 -654
  64. package/LinkGraph.js.map +4 -4
  65. package/Map/Map.d.ts +2 -2
  66. package/Map/Map.d.ts.map +1 -1
  67. package/Map/PureMap/BubbleLayer.d.ts +5 -0
  68. package/Map/PureMap/BubbleLayer.d.ts.map +1 -1
  69. package/Map/PureMap/LocalChoroplethLayer.d.ts.map +1 -1
  70. package/Map/PureMap/PureMap.d.ts.map +1 -1
  71. package/Map/PureMap/PureMapContainer.d.ts.map +1 -1
  72. package/Map/PureMap/Tooltip.d.ts.map +1 -1
  73. package/Map/config.d.ts.map +1 -1
  74. package/Map.config.js +0 -1
  75. package/Map.config.js.map +2 -2
  76. package/Map.js +738 -228
  77. package/Map.js.map +4 -4
  78. package/Markdown/Markdown.d.ts.map +1 -1
  79. package/Markdown.js +548 -95
  80. package/Markdown.js.map +4 -4
  81. package/MarkerGauge/MarkerGauge.d.ts +5 -1
  82. package/MarkerGauge/MarkerGauge.d.ts.map +1 -1
  83. package/MarkerGauge/PureMarkerGauge/MarkerGauge.d.ts +4 -0
  84. package/MarkerGauge/PureMarkerGauge/MarkerGauge.d.ts.map +1 -1
  85. package/MarkerGauge/config.d.ts.map +1 -1
  86. package/MarkerGauge.config.js +121 -3
  87. package/MarkerGauge.config.js.map +3 -3
  88. package/MarkerGauge.js +1318 -142
  89. package/MarkerGauge.js.map +4 -4
  90. package/NetworkGraph/NetworkGraph.d.ts +22 -0
  91. package/NetworkGraph/NetworkGraph.d.ts.map +1 -0
  92. package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts +60 -0
  93. package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -0
  94. package/NetworkGraph/PureNetworkGraph/components/Link.d.ts +19 -0
  95. package/NetworkGraph/PureNetworkGraph/components/Link.d.ts.map +1 -0
  96. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts +29 -0
  97. package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts.map +1 -0
  98. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts +27 -0
  99. package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -0
  100. package/NetworkGraph/PureNetworkGraph/components/Tooltip.d.ts +12 -0
  101. package/NetworkGraph/PureNetworkGraph/components/Tooltip.d.ts.map +1 -0
  102. package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts +13 -0
  103. package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts.map +1 -0
  104. package/NetworkGraph/PureNetworkGraph/mockdata/data.d.ts +140 -0
  105. package/NetworkGraph/PureNetworkGraph/mockdata/data.d.ts.map +1 -0
  106. package/NetworkGraph/PureNetworkGraph/mockdata/datasource.d.ts +89 -0
  107. package/NetworkGraph/PureNetworkGraph/mockdata/datasource.d.ts.map +1 -0
  108. package/NetworkGraph/PureNetworkGraph/utils/forceLayout.d.ts +47 -0
  109. package/NetworkGraph/PureNetworkGraph/utils/forceLayout.d.ts.map +1 -0
  110. package/NetworkGraph/PureNetworkGraph/utils/iconLoader.d.ts +78 -0
  111. package/NetworkGraph/PureNetworkGraph/utils/iconLoader.d.ts.map +1 -0
  112. package/NetworkGraph/PureNetworkGraph/utils/networkGraphShared.d.ts +111 -0
  113. package/NetworkGraph/PureNetworkGraph/utils/networkGraphShared.d.ts.map +1 -0
  114. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +123 -0
  115. package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -0
  116. package/NetworkGraph/config.d.ts +4 -0
  117. package/NetworkGraph/config.d.ts.map +1 -0
  118. package/NetworkGraph/index.d.ts +3 -0
  119. package/NetworkGraph/index.d.ts.map +1 -0
  120. package/NetworkGraph.config.js +938 -0
  121. package/NetworkGraph.config.js.map +7 -0
  122. package/NetworkGraph.js +6793 -0
  123. package/NetworkGraph.js.map +7 -0
  124. package/ParallelCoordinates.js +532 -93
  125. package/ParallelCoordinates.js.map +4 -4
  126. package/Pie/Pie.d.ts.map +1 -1
  127. package/Pie/pieUtils.d.ts.map +1 -1
  128. package/Pie.js +510 -101
  129. package/Pie.js.map +3 -3
  130. package/Punchcard.js +523 -84
  131. package/Punchcard.js.map +4 -4
  132. package/Rectangle.js +537 -113
  133. package/Rectangle.js.map +4 -4
  134. package/Sankey/PureSankey/SankeyTooltip.d.ts.map +1 -1
  135. package/Sankey.js +562 -111
  136. package/Sankey.js.map +4 -4
  137. package/Scatter/Scatter.d.ts.map +1 -1
  138. package/Scatter.config.js +0 -1
  139. package/Scatter.config.js.map +2 -2
  140. package/Scatter.js +505 -99
  141. package/Scatter.js.map +3 -3
  142. package/SingleValue/SingleValue.d.ts.map +1 -1
  143. package/SingleValue/config.d.ts.map +1 -1
  144. package/SingleValue.config.js +15 -2
  145. package/SingleValue.config.js.map +2 -2
  146. package/SingleValue.js +656 -173
  147. package/SingleValue.js.map +3 -3
  148. package/SingleValueBasic.js.map +1 -1
  149. package/SingleValueIcon/SingleValueIcon.d.ts.map +1 -1
  150. package/SingleValueIcon/config.d.ts.map +1 -1
  151. package/SingleValueIcon.config.js +0 -1
  152. package/SingleValueIcon.config.js.map +2 -2
  153. package/SingleValueIcon.js +512 -124
  154. package/SingleValueIcon.js.map +3 -3
  155. package/SingleValueRadial/PureSingleValueRadial/utils/gaugeUtils.d.ts +0 -8
  156. package/SingleValueRadial/PureSingleValueRadial/utils/gaugeUtils.d.ts.map +1 -1
  157. package/SingleValueRadial/SingleValueRadial.d.ts.map +1 -1
  158. package/SingleValueRadial.config.js +0 -1
  159. package/SingleValueRadial.config.js.map +2 -2
  160. package/SingleValueRadial.js +517 -124
  161. package/SingleValueRadial.js.map +4 -4
  162. package/SparkLine.js +46 -8
  163. package/SparkLine.js.map +2 -2
  164. package/Table/PureTable.d.ts +10 -0
  165. package/Table/PureTable.d.ts.map +1 -1
  166. package/Table/cells/SparklineCell.d.ts.map +1 -1
  167. package/Table/config.d.ts.map +1 -1
  168. package/Table/hooks.d.ts +4 -0
  169. package/Table/hooks.d.ts.map +1 -1
  170. package/Table.config.js +1 -1
  171. package/Table.config.js.map +2 -2
  172. package/Table.js +760 -223
  173. package/Table.js.map +4 -4
  174. package/Timeline/PureTimeline/src/CursorPlugin.d.ts.map +1 -1
  175. package/Timeline/PureTimeline/src/TimelineLegend.d.ts.map +1 -1
  176. package/Timeline/config.d.ts.map +1 -1
  177. package/Timeline.config.js +31 -12
  178. package/Timeline.config.js.map +4 -4
  179. package/Timeline.js +649 -211
  180. package/Timeline.js.map +4 -4
  181. package/common/Charting.d.ts +5 -0
  182. package/common/Charting.d.ts.map +1 -1
  183. package/common/Charting.js +12 -0
  184. package/common/Charting.js.map +2 -2
  185. package/common/OptionsDoc.js.map +1 -1
  186. package/common/ThemesDoc.js +0 -1
  187. package/common/ThemesDoc.js.map +2 -2
  188. package/common/TimeSeriesChartWrapper.d.ts +24 -11
  189. package/common/TimeSeriesChartWrapper.d.ts.map +1 -1
  190. package/common/TimeSeriesChartWrapper.js +561 -83
  191. package/common/TimeSeriesChartWrapper.js.map +4 -4
  192. package/common/chartingUtils.d.ts +45 -5
  193. package/common/chartingUtils.d.ts.map +1 -1
  194. package/common/chartingUtils.js +102 -8
  195. package/common/chartingUtils.js.map +3 -3
  196. package/common/editorConfig/AxesChartDataConfig.d.ts.map +1 -1
  197. package/common/hocs/withTrellis.d.ts.map +1 -1
  198. package/common/interfaces/DashboardVizProps.d.ts +0 -3
  199. package/common/interfaces/DashboardVizProps.d.ts.map +1 -1
  200. package/common/interfaces/DataSource.d.ts +1 -1
  201. package/common/interfaces/DataSource.d.ts.map +1 -1
  202. package/common/shapeUtils.js +5 -20
  203. package/common/shapeUtils.js.map +2 -2
  204. package/common/utils/dataUtils.d.ts.map +1 -1
  205. package/common/utils/dataUtils.js +5 -4
  206. package/common/utils/dataUtils.js.map +2 -2
  207. package/common/utils/mapUtils.js +16 -9
  208. package/common/utils/mapUtils.js.map +2 -2
  209. package/common/utils/singleValueUtils.js +17 -18
  210. package/common/utils/singleValueUtils.js.map +2 -2
  211. package/common/utils/textUtils.d.ts +20 -0
  212. package/common/utils/textUtils.d.ts.map +1 -0
  213. package/common/utils/textUtils.js +76 -0
  214. package/common/utils/textUtils.js.map +7 -0
  215. package/common/utils/trellisUtils.d.ts.map +1 -1
  216. package/common/utils/trellisUtils.js +12 -14
  217. package/common/utils/trellisUtils.js.map +2 -2
  218. package/common/withDashboardViz.d.ts.map +1 -1
  219. package/common/withDashboardViz.js +544 -84
  220. package/common/withDashboardViz.js.map +4 -4
  221. package/package.json +33 -26
  222. package/common/utils/styleUtils.d.ts +0 -2
  223. package/common/utils/styleUtils.d.ts.map +0 -1
  224. package/common/utils/styleUtils.js +0 -30
  225. package/common/utils/styleUtils.js.map +0 -7
package/ChoroplethSvg.js CHANGED
@@ -505,7 +505,7 @@ var Cover = styled_components_default.div`
505
505
  bottom: 0;
506
506
  `;
507
507
  var Blocker = styled_components_default.div.attrs({
508
- "data-splunk-visualization-version": "28.3.0 - 843e0f60b"
508
+ "data-splunk-visualization-version": "28.4.0 - 002bd482f"
509
509
  })`
510
510
  position: relative;
511
511
  width: 100%;
@@ -604,7 +604,7 @@ var withFixedSizeContainer = (Viz) => {
604
604
  FixSizeItem,
605
605
  {
606
606
  "data-test": "fix-size-item",
607
- "data-splunk-visualization-version": "28.3.0 - 843e0f60b",
607
+ "data-splunk-visualization-version": "28.4.0 - 002bd482f",
608
608
  width,
609
609
  height,
610
610
  backgroundColor
@@ -700,6 +700,7 @@ __reExport(numberUtils_exports, require("@splunk/visualizations-shared/numberUti
700
700
  var numberUtils_default = "default" in defaultImport24 ? defaultImport24.default : defaultImport24;
701
701
 
702
702
  // src/common/utils/dataUtils.ts
703
+ var getFieldName = (field) => typeof field === "string" ? field : field.name;
703
704
  var largestTriangleThreeBuckets = (data, threshold, preferredDownsampleIndices) => {
704
705
  const dataLength = data.length;
705
706
  const downsampledIndices = [];
@@ -816,9 +817,9 @@ var tryToCoerceAllDisplayedFields = (ds, xField, yFields, fieldTypes, options) =
816
817
  let xColumn = [];
817
818
  const yColumns = [];
818
819
  const canDownsample = !ds.data.fields.some((field, index) => {
819
- var _a, _b;
820
- const fieldName = (_a = field.name) != null ? _a : field;
821
- const fieldType = (_b = fieldTypes[index]) != null ? _b : "unknown";
820
+ var _a;
821
+ const fieldName = getFieldName(field);
822
+ const fieldType = (_a = fieldTypes[index]) != null ? _a : "unknown";
822
823
  const column = ds.data.columns[index];
823
824
  let hasDisplayedColumnThatCantBeDownsampled = false;
824
825
  if (fieldName === xField) {
@@ -1171,6 +1172,16 @@ var triangleEventAnnotationRenderer = ({
1171
1172
  eventColor: eventWithColor.color
1172
1173
  });
1173
1174
  };
1175
+ var shouldEnableSearchZoom = (eventHandlers = [], xField = "") => {
1176
+ const rangeSelectEventHandler = eventHandlers.find(
1177
+ (eventHandler) => {
1178
+ var _a;
1179
+ return (_a = eventHandler.options.events) == null ? void 0 : _a.includes("range.select");
1180
+ }
1181
+ );
1182
+ const xAxisIsTime = xField === "_time";
1183
+ return !!rangeSelectEventHandler && xAxisIsTime;
1184
+ };
1174
1185
  var canvasSupportedTimeSeriesCharts = ["splunk.line"];
1175
1186
  var isTimeSeriesCanvasRenderSupported = (vizConfigKey) => {
1176
1187
  return canvasSupportedTimeSeriesCharts.indexOf(vizConfigKey) > -1;
@@ -1191,16 +1202,31 @@ var filterChartDataFromInternalFields = (chartData) => {
1191
1202
  var convert2DArrayToNumbers = (arr) => {
1192
1203
  return arr.map((subArray) => subArray.map((element) => parseFloat(element)));
1193
1204
  };
1205
+ var parseAxisValue = (val) => {
1206
+ if (val === void 0 || val === null || val === "auto" || val === "") {
1207
+ return void 0;
1208
+ }
1209
+ const num = typeof val === "number" ? val : Number.parseFloat(val);
1210
+ return Number.isNaN(num) ? void 0 : num;
1211
+ };
1194
1212
  var SideLegendWidth = 75;
1195
- var commonLegendProps = { center: true, fontSize: 12, largerTiles: true, hideSeriesValue: true };
1213
+ var SeriesCompareLegendWidth = 200;
1196
1214
  var getLegend = (props) => {
1197
1215
  const legendPlacement = props == null ? void 0 : props.legendDisplay;
1216
+ const { isSeriesCompare } = props;
1217
+ const commonLegendProps = {
1218
+ center: true,
1219
+ fontSize: 12,
1220
+ largerTiles: true,
1221
+ hideSeriesValue: !isSeriesCompare
1222
+ // Show values if in seriesCompare mode
1223
+ };
1198
1224
  switch (legendPlacement) {
1199
1225
  case "off":
1200
1226
  return false;
1201
1227
  case "left":
1202
1228
  return (0, visualization_canvas_exports.LeftLegendFactory)(__spreadValues({
1203
- width: SideLegendWidth
1229
+ width: isSeriesCompare ? SeriesCompareLegendWidth : SideLegendWidth
1204
1230
  }, commonLegendProps));
1205
1231
  case "bottom":
1206
1232
  return (0, visualization_canvas_exports.BottomLegendFactory)(__spreadValues({
@@ -1212,7 +1238,7 @@ var getLegend = (props) => {
1212
1238
  }, commonLegendProps));
1213
1239
  default:
1214
1240
  return (0, visualization_canvas_exports.SideLegendFactory)(__spreadValues({
1215
- width: SideLegendWidth
1241
+ width: isSeriesCompare ? SeriesCompareLegendWidth : SideLegendWidth
1216
1242
  }, commonLegendProps));
1217
1243
  }
1218
1244
  };
@@ -1248,22 +1274,25 @@ var ellipsisAxisTitle = (axisTitle, containerSpacing, fontSize = 12) => {
1248
1274
  const end = axisTitle.slice(-halfChars);
1249
1275
  return `${start}...${end}`;
1250
1276
  };
1251
- var getFieldName = (field) => {
1277
+ var getFieldName2 = (field) => {
1252
1278
  const fieldName = typeof field === "object" ? field == null ? void 0 : field.name : field;
1253
1279
  return fieldName;
1254
1280
  };
1255
1281
  var getFieldNames = (fields) => {
1256
- return fields.map((field) => getFieldName(field));
1282
+ return fields.map((field) => getFieldName2(field));
1257
1283
  };
1258
- var getXScaleConfig = (label, xAxisLabelVisibility) => {
1284
+ var getXScaleConfig = (label, xAxisLabelVisibility, xAxisLabelRotation) => {
1259
1285
  const xConfig = { x: {} };
1260
1286
  xConfig.x.label = label;
1261
1287
  if (xAxisLabelVisibility === "hide") {
1262
1288
  xConfig.x.hideLabels = true;
1263
1289
  }
1290
+ if (xAxisLabelRotation !== void 0) {
1291
+ xConfig.x.labelRotation = xAxisLabelRotation;
1292
+ }
1264
1293
  return xConfig;
1265
1294
  };
1266
- var getYScaleConfig = (label, yAxisAbbreviation, yAxisScale, yAxisLabelVisibility) => {
1295
+ var getYScaleConfig = (label, yAxisAbbreviation, yAxisScale, yAxisLabelVisibility, yAxisMin, yAxisMax) => {
1267
1296
  const scaleType = yAxisScale != null ? yAxisScale : "linear";
1268
1297
  const yConfig = { y: {} };
1269
1298
  yConfig.y.label = label;
@@ -1279,14 +1308,20 @@ var getYScaleConfig = (label, yAxisAbbreviation, yAxisScale, yAxisLabelVisibilit
1279
1308
  if (yAxisLabelVisibility === "hide") {
1280
1309
  yConfig.y.hideLabels = true;
1281
1310
  }
1311
+ if (yAxisMin !== void 0 || yAxisMax !== void 0) {
1312
+ yConfig.y.range = (u, dataMin, dataMax) => {
1313
+ const min = yAxisMin != null ? yAxisMin : dataMin;
1314
+ const max = yAxisMax != null ? yAxisMax : dataMax;
1315
+ return [min, max];
1316
+ };
1317
+ }
1282
1318
  return yConfig;
1283
1319
  };
1284
- var getY2ScaleConfig = (label, axisAbbreviation, axisScale, roundAxisLabelsToInteger, y2AxisLabelVisibility) => {
1320
+ var getY2ScaleConfig = (label, axisAbbreviation, axisScale, roundAxisLabelsToInteger, y2AxisLabelVisibility, y2AxisMin, y2AxisMax) => {
1285
1321
  const y2Config = { y2: {} };
1286
1322
  const scaleType = axisScale != null ? axisScale : "linear";
1287
1323
  y2Config.y2.label = label;
1288
1324
  y2Config.y2.side = "right";
1289
- y2Config.y2.showGrid = false;
1290
1325
  y2Config.y2.type = scaleType;
1291
1326
  if (axisAbbreviation !== "none") {
1292
1327
  y2Config.y2.tickFmt = (v) => (0, visualization_canvas_exports.shortenNumber)(v, 1, roundAxisLabelsToInteger);
@@ -1296,9 +1331,16 @@ var getY2ScaleConfig = (label, axisAbbreviation, axisScale, roundAxisLabelsToInt
1296
1331
  if (y2AxisLabelVisibility === "hide") {
1297
1332
  y2Config.y2.hideLabels = true;
1298
1333
  }
1334
+ if (y2AxisMin !== void 0 || y2AxisMax !== void 0) {
1335
+ y2Config.y2.range = (u, dataMin, dataMax) => {
1336
+ const min = y2AxisMin != null ? y2AxisMin : dataMin;
1337
+ const max = y2AxisMax != null ? y2AxisMax : dataMax;
1338
+ return [min, max];
1339
+ };
1340
+ }
1299
1341
  return y2Config;
1300
1342
  };
1301
- var getSeriesOverrides = (yfields, y2fields, lineWidth, overlayFields, y2Enabled, nullValueMode, markerDisplay) => {
1343
+ var getSeriesOverrides = (yfields, y2fields, lineWidth, overlayFields, y2Enabled, nullValueMode, markerDisplay, lineDashStyle, lineDashStylesByField) => {
1302
1344
  const seriesConfig = {};
1303
1345
  let spanGaps;
1304
1346
  let replaceNullsWithZero;
@@ -1333,12 +1375,96 @@ var getSeriesOverrides = (yfields, y2fields, lineWidth, overlayFields, y2Enabled
1333
1375
  if (markerDisplay !== void 0) {
1334
1376
  seriesConfig[field].markerDisplay = markerDisplay;
1335
1377
  }
1378
+ const fieldDashStyle = (lineDashStylesByField == null ? void 0 : lineDashStylesByField[field]) || lineDashStyle;
1379
+ if (fieldDashStyle) {
1380
+ seriesConfig[field].lineDashStyle = fieldDashStyle;
1381
+ }
1336
1382
  if (replaceNullsWithZero !== void 0) {
1337
1383
  seriesConfig[field].replaceNullsWithZero = replaceNullsWithZero;
1338
1384
  }
1339
1385
  });
1340
1386
  return seriesConfig;
1341
1387
  };
1388
+ var findRangeIndices = (xData, startValue, endValue) => {
1389
+ let startXIndex = -1;
1390
+ let endXIndex = -1;
1391
+ const xDataEpoch = xData.map((val) => {
1392
+ if (typeof val === "string") {
1393
+ return new Date(val).getTime() / 1e3;
1394
+ }
1395
+ return val;
1396
+ });
1397
+ for (let i = 0; i < xDataEpoch.length; i += 1) {
1398
+ if (xDataEpoch[i] >= startValue) {
1399
+ startXIndex = i;
1400
+ break;
1401
+ }
1402
+ }
1403
+ if (startXIndex === -1 && xDataEpoch.length > 0) {
1404
+ startXIndex = xDataEpoch.length - 1;
1405
+ }
1406
+ for (let i = xDataEpoch.length - 1; i >= 0; i -= 1) {
1407
+ if (xDataEpoch[i] <= endValue) {
1408
+ endXIndex = i;
1409
+ break;
1410
+ }
1411
+ }
1412
+ if (endXIndex === -1 && xDataEpoch.length > 0) {
1413
+ endXIndex = 0;
1414
+ }
1415
+ return { startXIndex, endXIndex };
1416
+ };
1417
+
1418
+ // esm-externals:@splunk/visualization-schemas
1419
+ var visualization_schemas_exports = {};
1420
+ __export(visualization_schemas_exports, {
1421
+ default: () => visualization_schemas_default
1422
+ });
1423
+ var defaultImport29 = __toESM(require("@splunk/visualization-schemas"));
1424
+ __reExport(visualization_schemas_exports, require("@splunk/visualization-schemas"));
1425
+ var visualization_schemas_default = "default" in defaultImport29 ? defaultImport29.default : defaultImport29;
1426
+
1427
+ // src/common/hooks/useTrellisEnabled.ts
1428
+ var useTrellisFeatureFlagOn = () => {
1429
+ const context = (0, react_exports.useContext)(FeatureFlagContext_default);
1430
+ return Boolean(context == null ? void 0 : context.visualizations_enableTrellis);
1431
+ };
1432
+ var useTrellisEnabled = (layoutType = visualization_schemas_exports.LAYOUT_TYPE.Off) => {
1433
+ const trellisFeatureEnabled = useTrellisFeatureFlagOn();
1434
+ return trellisFeatureEnabled && layoutType === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
1435
+ };
1436
+
1437
+ // src/common/components/TrellisTitle.tsx
1438
+ var TRELLIS_TITLE_HEIGHT = 28;
1439
+ var TrellisTitleText = styled_components_default.div`
1440
+ margin-left: 10px;
1441
+ margin-right: 10px;
1442
+ padding-top: 8px;
1443
+ text-overflow: ellipsis;
1444
+ white-space: nowrap;
1445
+ overflow: hidden;
1446
+ `;
1447
+ var TrellisTitleDiv = styled_components_default.div`
1448
+ height: ${TRELLIS_TITLE_HEIGHT}px;
1449
+ font-size: 14px;
1450
+ font-weight: 700;
1451
+ color: ${(props) => props.fontColor};
1452
+ background-color: ${(props) => props.backgroundColor};
1453
+ box-shadow: 0 1px ${(props) => props.backgroundColor}; // this is added to avoid a 1px gap between title and viz divs that showed up intermittently because of pixel rounding error in chrome.
1454
+ `;
1455
+ var TrellisTitle = (props) => {
1456
+ const titleText = String(props.trellisKey).toString();
1457
+ return /* @__PURE__ */ react_exports.createElement(
1458
+ TrellisTitleDiv,
1459
+ {
1460
+ fontColor: props.fontColor,
1461
+ backgroundColor: props.backgroundColor,
1462
+ "data-test": "trellis-title",
1463
+ title: titleText
1464
+ },
1465
+ /* @__PURE__ */ react_exports.createElement(TrellisTitleText, null, titleText)
1466
+ );
1467
+ };
1342
1468
 
1343
1469
  // src/common/TimeSeriesChartWrapper.tsx
1344
1470
  var TimeSeriesChartContainer = styled_components_default.div`
@@ -1349,38 +1475,123 @@ var TimeSeriesChartContainer = styled_components_default.div`
1349
1475
  position: absolute !important; // This is needed for canvas element export pdf/png to work correctly
1350
1476
  }
1351
1477
  `;
1352
- var handleClick = (chartEvent, onClick) => {
1478
+ var appendTrellisToPayload = (payload, trellisKey, trellisSplitBy) => {
1479
+ const result = __spreadValues({}, payload);
1480
+ if (trellisSplitBy) {
1481
+ result["trellis.name"] = trellisSplitBy;
1482
+ }
1483
+ if (trellisKey) {
1484
+ result["trellis.value"] = trellisKey;
1485
+ }
1486
+ return result;
1487
+ };
1488
+ var hasMouseoverPayloadChanged = (currentPayload, previousPayload) => {
1489
+ if (!previousPayload) {
1490
+ return true;
1491
+ }
1492
+ if (currentPayload.index !== previousPayload.index) {
1493
+ return true;
1494
+ }
1495
+ if (currentPayload.seriesIndex !== previousPayload.seriesIndex) {
1496
+ return true;
1497
+ }
1498
+ if (currentPayload["trellis.name"] !== previousPayload["trellis.name"]) {
1499
+ return true;
1500
+ }
1501
+ if (currentPayload["trellis.value"] !== previousPayload["trellis.value"]) {
1502
+ return true;
1503
+ }
1504
+ return false;
1505
+ };
1506
+ var handleClick = (chartEvent, onClick, trellisKey, trellisSplitBy) => {
1353
1507
  const payload = __spreadProps(__spreadValues({}, (0, lodash_exports.pick)(chartEvent, "value", "seriesKey")), {
1354
1508
  name: chartEvent.seriesKey
1355
1509
  });
1356
1510
  delete payload.seriesKey;
1357
1511
  if (chartEvent.rowContext) {
1358
- Object.keys(chartEvent.rowContext).forEach((fieldName) => {
1359
- payload[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];
1360
- });
1512
+ Object.assign(
1513
+ payload,
1514
+ Object.keys(chartEvent.rowContext).reduce((acc, fieldName) => {
1515
+ acc[`row.${fieldName}.value`] = chartEvent.rowContext[fieldName];
1516
+ return acc;
1517
+ }, {})
1518
+ );
1361
1519
  }
1520
+ const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);
1362
1521
  if (onClick) {
1363
1522
  onClick({
1364
1523
  type: "point.click",
1365
1524
  originalEvent: chartEvent,
1366
- payload
1525
+ payload: updatedPayload
1367
1526
  });
1368
1527
  }
1369
1528
  };
1370
- var handleLegendClick = (chartEvent, onClick) => {
1529
+ var handleLegendClick = (chartEvent, onClick, trellisKey, trellisSplitBy) => {
1371
1530
  const payload = {
1372
1531
  name: chartEvent
1373
1532
  };
1533
+ const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);
1374
1534
  if (onClick) {
1375
1535
  onClick({
1376
1536
  type: "legend.click",
1377
1537
  originalEvent: chartEvent,
1378
- payload
1538
+ payload: updatedPayload
1539
+ });
1540
+ }
1541
+ };
1542
+ var handleRangeSelection = (rangeEvent, onSelect, chartData, trellisKey, trellisSplitBy) => {
1543
+ var _a;
1544
+ if (!rangeEvent) {
1545
+ return;
1546
+ }
1547
+ const xData = ((_a = chartData == null ? void 0 : chartData.columns) == null ? void 0 : _a[0]) || [];
1548
+ const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);
1549
+ const payload = {
1550
+ startXIndex,
1551
+ startXValue: rangeEvent.start,
1552
+ endXIndex,
1553
+ endXValue: rangeEvent.end
1554
+ };
1555
+ const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);
1556
+ if (onSelect) {
1557
+ onSelect({
1558
+ type: "range.selectBeforeZoom",
1559
+ originalEvent: rangeEvent,
1560
+ payload: updatedPayload
1561
+ });
1562
+ }
1563
+ };
1564
+ var handleRangeZoom = (rangeEvent, onSelect, chartData, trellisKey, trellisSplitBy) => {
1565
+ var _a;
1566
+ const xData = ((_a = chartData == null ? void 0 : chartData.columns) == null ? void 0 : _a[0]) || [];
1567
+ const { startXIndex, endXIndex } = findRangeIndices(xData, rangeEvent.start, rangeEvent.end);
1568
+ const payload = {
1569
+ startXIndex,
1570
+ startXValue: rangeEvent.start,
1571
+ endXIndex,
1572
+ endXValue: rangeEvent.end
1573
+ };
1574
+ const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);
1575
+ if (onSelect) {
1576
+ onSelect({
1577
+ type: "range.select",
1578
+ originalEvent: rangeEvent,
1579
+ payload: updatedPayload
1379
1580
  });
1380
1581
  }
1381
1582
  };
1583
+ var parseArrayOption = (value) => {
1584
+ if (Array.isArray(value)) {
1585
+ return value;
1586
+ }
1587
+ if (value) {
1588
+ return JSON.parse(value);
1589
+ }
1590
+ return void 0;
1591
+ };
1382
1592
  var TimeSeriesChartWrapper = (props) => {
1383
- const {
1593
+ var _b, _c, _d;
1594
+ const _a = props, {
1384
1595
  width,
1385
1596
  height,
1386
1597
  chartData,
@@ -1393,12 +1604,49 @@ var TimeSeriesChartWrapper = (props) => {
1393
1604
  markerDisplay,
1394
1605
  onClick,
1395
1606
  onPointMouseOver,
1396
- onPointMouseOut
1397
- } = props;
1398
- const {
1607
+ onPointMouseOut,
1608
+ onSelect,
1609
+ splitByLayout,
1610
+ trellisKey,
1611
+ trellisSplitBy,
1399
1612
  backgroundColor,
1613
+ defaultFontColor,
1614
+ additionalTooltipValues,
1615
+ showYAxisWithZero: showYAxisWithZeroFromProps,
1616
+ showY2AxisWithZero: showY2AxisWithZeroFromProps
1617
+ } = _a, otherOptions = __objRest(_a, [
1618
+ "width",
1619
+ "height",
1620
+ "chartData",
1621
+ "options",
1622
+ "userLocale",
1623
+ "annotationX",
1624
+ "annotationLabel",
1625
+ "annotationColor",
1626
+ "legendDisplay",
1627
+ "markerDisplay",
1628
+ "onClick",
1629
+ "onPointMouseOver",
1630
+ "onPointMouseOut",
1631
+ "onSelect",
1632
+ "splitByLayout",
1633
+ "trellisKey",
1634
+ "trellisSplitBy",
1635
+ "backgroundColor",
1636
+ "defaultFontColor",
1637
+ "additionalTooltipValues",
1638
+ // Extract showYAxisWithZero directly from props for accelerated render mode
1639
+ "showYAxisWithZero",
1640
+ "showY2AxisWithZero"
1641
+ ]);
1642
+ const { eventHandlers, xField: xFieldFromProps } = otherOptions;
1643
+ const trellisEnabled = useTrellisEnabled(splitByLayout);
1644
+ const {
1645
+ backgroundColor: bgColorFromOptions,
1400
1646
  seriesColors: seriesColorsStr,
1401
1647
  fieldColors,
1648
+ legendLabels: legendLabelsStr,
1649
+ legendMode,
1402
1650
  "axisTitleX.text": xAxisTitleText,
1403
1651
  "axisTitleY.text": yAxisTitleText,
1404
1652
  "axisTitleY2.text": y2AxisTitleText,
@@ -1406,8 +1654,11 @@ var TimeSeriesChartWrapper = (props) => {
1406
1654
  "axisTitleY.visibility": yAxisTitleVisibility,
1407
1655
  "axisTitleY2.visibility": y2AxisTitleVisibility,
1408
1656
  "axisLabelsX.majorLabelVisibility": xAxisLabelVisibility,
1657
+ "axisLabelsX.majorLabelStyle.rotation": xAxisLabelRotation,
1409
1658
  "axisLabelsY.majorLabelVisibility": yAxisLabelVisibility,
1659
+ "axisLabelsY.majorUnit": yAxisMajorUnitFromSimpleXML,
1410
1660
  "axisLabelsY2.majorLabelVisibility": y2AxisLabelVisibility,
1661
+ "axisLabelsY2.majorUnit": y2AxisMajorUnitFromSimpleXML,
1411
1662
  "axisY.abbreviation": yAxisAbbreviation,
1412
1663
  "axisY.scale": yAxisScale,
1413
1664
  "axisY2.abbreviation": y2AxisAbbreviation,
@@ -1417,10 +1668,63 @@ var TimeSeriesChartWrapper = (props) => {
1417
1668
  "axisLabelsY2.integerUnits": y2IntegerUnits,
1418
1669
  "chart.overlayFields": overlayFieldsStr,
1419
1670
  "chart.nullValueMode": nullValueMode,
1420
- lineWidth
1671
+ "chart.showDataLabels": showDataLabels,
1672
+ lineWidth,
1673
+ lineDashStyle,
1674
+ fieldDashStyles: lineDashStylesByFieldStr,
1675
+ yAxisMin: yAxisMinRaw,
1676
+ yAxisMax: yAxisMaxRaw,
1677
+ y2AxisMin: y2AxisMinRaw,
1678
+ y2AxisMax: y2AxisMaxRaw,
1679
+ showXMajorGridLines,
1680
+ showYMajorGridLines,
1681
+ showY2MajorGridLines,
1682
+ showYMinorGridLines,
1683
+ showY2MinorGridLines,
1684
+ showLineSmoothing,
1685
+ yAxisMajorTickVisibility,
1686
+ y2AxisMajorTickVisibility,
1687
+ yAxisMajorTickSize,
1688
+ y2AxisMajorTickSize,
1689
+ yAxisMajorTickInterval,
1690
+ y2AxisMajorTickInterval,
1691
+ yAxisMinorTickVisibility,
1692
+ y2AxisMinorTickVisibility,
1693
+ yAxisMinorTickSize,
1694
+ y2AxisMinorTickSize,
1695
+ showYAxisWithZero: showYAxisWithZeroFromOptions,
1696
+ showY2AxisWithZero: showY2AxisWithZeroFromOptions
1421
1697
  } = options;
1698
+ const dataValuesDisplay = showDataLabels === "none" ? "off" : showDataLabels;
1699
+ const showYAxisWithZero = showYAxisWithZeroFromProps != null ? showYAxisWithZeroFromProps : showYAxisWithZeroFromOptions;
1700
+ const showY2AxisWithZero = showY2AxisWithZeroFromProps != null ? showY2AxisWithZeroFromProps : showY2AxisWithZeroFromOptions;
1701
+ const showYMajorTicks = yAxisMajorTickVisibility === "show";
1702
+ const showY2MajorTicks = y2AxisMajorTickVisibility === "show";
1703
+ const showYMinorTicks = yAxisMinorTickVisibility === "show";
1704
+ const showY2MinorTicks = y2AxisMinorTickVisibility === "show";
1705
+ const yAxisMin = parseAxisValue(yAxisMinRaw);
1706
+ const yAxisMax = parseAxisValue(yAxisMaxRaw);
1707
+ const y2AxisMin = parseAxisValue(y2AxisMinRaw);
1708
+ const y2AxisMax = parseAxisValue(y2AxisMaxRaw);
1709
+ const parseTickInterval = (simpleXMLValue, canvasValue) => {
1710
+ if (simpleXMLValue) return Number(simpleXMLValue);
1711
+ if (canvasValue) return Number(canvasValue);
1712
+ return void 0;
1713
+ };
1714
+ const yAxisMajorTickIntervalNum = parseTickInterval(yAxisMajorUnitFromSimpleXML, yAxisMajorTickInterval);
1715
+ const y2AxisMajorTickIntervalNum = parseTickInterval(
1716
+ y2AxisMajorUnitFromSimpleXML,
1717
+ y2AxisMajorTickInterval
1718
+ );
1719
+ const yAxisMajorTickSizeNum = yAxisMajorTickSize ? Number(yAxisMajorTickSize) : void 0;
1720
+ const y2AxisMajorTickSizeNum = y2AxisMajorTickSize ? Number(y2AxisMajorTickSize) : void 0;
1721
+ const yAxisMinorTickSizeNum = yAxisMinorTickSize ? Number(yAxisMinorTickSize) : void 0;
1722
+ const y2AxisMinorTickSizeNum = y2AxisMinorTickSize ? Number(y2AxisMinorTickSize) : void 0;
1422
1723
  const seriesColors = seriesColorsStr ? JSON.parse(seriesColorsStr) : void 0;
1423
1724
  const seriesColorsByField = fieldColors ? JSON.parse(fieldColors) : void 0;
1725
+ const lineDashStylesByField = lineDashStylesByFieldStr ? JSON.parse(lineDashStylesByFieldStr) : void 0;
1726
+ const legendLabels = parseArrayOption(legendLabelsStr);
1727
+ const bgColor = backgroundColor || bgColorFromOptions;
1424
1728
  const [containerWidth, setContainerWidth] = react_exports.useState(Number(props.width));
1425
1729
  const [containerHeight, setContainerHeight] = react_exports.useState(Number(props.height));
1426
1730
  const cachedHandleResize = react_exports.useCallback((w, h) => {
@@ -1431,31 +1735,64 @@ var TimeSeriesChartWrapper = (props) => {
1431
1735
  fields: chartData.fields,
1432
1736
  columns: chartData.seriesList
1433
1737
  });
1434
- const xField = getFieldName(filteredChartData.fields[0]);
1738
+ const xField = getFieldName2(filteredChartData.fields[0]);
1435
1739
  const yFields = getFieldNames(
1436
1740
  filteredChartData.fields.length > 1 ? filteredChartData.fields.slice(1) : []
1437
1741
  );
1438
- const y2Fields = y2FieldsStr ? y2FieldsStr.split(",").map((f) => f.trim()) : [];
1439
- const overlayFields = overlayFieldsStr ? overlayFieldsStr.split(",").map((f) => f.trim()) : [];
1742
+ const y2Fields = (0, react_exports.useMemo)(
1743
+ () => y2FieldsStr ? y2FieldsStr.split(",").map((f) => f.trim()) : [],
1744
+ [y2FieldsStr]
1745
+ );
1746
+ const overlayFields = (0, react_exports.useMemo)(
1747
+ () => overlayFieldsStr ? overlayFieldsStr.split(",").map((f) => f.trim()) : [],
1748
+ [overlayFieldsStr]
1749
+ );
1440
1750
  let xAxisTitle = getComputedAxisTitles(xAxisTitleText, [xField], xAxisTitleVisibility);
1441
1751
  xAxisTitle = ellipsisAxisTitle(xAxisTitle, containerWidth);
1442
- let yAxisTitle = getComputedAxisTitles(yAxisTitleText, yFields, yAxisTitleVisibility);
1752
+ const yFieldsForTitle = y2Enabled ? yFields.filter((field) => !y2Fields.includes(field)) : yFields;
1753
+ let yAxisTitle = getComputedAxisTitles(yAxisTitleText, yFieldsForTitle, yAxisTitleVisibility);
1443
1754
  yAxisTitle = ellipsisAxisTitle(yAxisTitle, containerHeight);
1444
1755
  const fieldsForY2Axis = y2Fields.length > 0 ? y2Fields : overlayFields;
1445
1756
  let y2AxisTitle = getComputedAxisTitles(y2AxisTitleText, fieldsForY2Axis, y2AxisTitleVisibility);
1446
1757
  y2AxisTitle = ellipsisAxisTitle(y2AxisTitle, containerHeight);
1447
- const xScaleConfig = getXScaleConfig(xAxisTitle, xAxisLabelVisibility);
1448
- const yScaleConfig = getYScaleConfig(yAxisTitle, yAxisAbbreviation, yAxisScale, yAxisLabelVisibility);
1449
- let y2ScaleConfig = {};
1450
- if (y2Enabled) {
1451
- y2ScaleConfig = getY2ScaleConfig(
1452
- y2AxisTitle,
1453
- y2AxisAbbreviation,
1454
- y2AxisScale,
1455
- y2IntegerUnits,
1456
- y2AxisLabelVisibility
1457
- );
1458
- }
1758
+ const xScaleConfig = (0, react_exports.useMemo)(
1759
+ () => getXScaleConfig(xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation),
1760
+ [xAxisTitle, xAxisLabelVisibility, xAxisLabelRotation]
1761
+ );
1762
+ const yScaleConfig = (0, react_exports.useMemo)(
1763
+ () => getYScaleConfig(
1764
+ yAxisTitle,
1765
+ yAxisAbbreviation,
1766
+ yAxisScale,
1767
+ yAxisLabelVisibility,
1768
+ yAxisMin,
1769
+ yAxisMax
1770
+ ),
1771
+ [yAxisTitle, yAxisAbbreviation, yAxisScale, yAxisLabelVisibility, yAxisMin, yAxisMax]
1772
+ );
1773
+ const y2ScaleConfig = (0, react_exports.useMemo)(() => {
1774
+ if (y2Enabled) {
1775
+ return getY2ScaleConfig(
1776
+ y2AxisTitle,
1777
+ y2AxisAbbreviation,
1778
+ y2AxisScale,
1779
+ y2IntegerUnits,
1780
+ y2AxisLabelVisibility,
1781
+ y2AxisMin,
1782
+ y2AxisMax
1783
+ );
1784
+ }
1785
+ return {};
1786
+ }, [
1787
+ y2Enabled,
1788
+ y2AxisTitle,
1789
+ y2AxisAbbreviation,
1790
+ y2AxisScale,
1791
+ y2IntegerUnits,
1792
+ y2AxisLabelVisibility,
1793
+ y2AxisMin,
1794
+ y2AxisMax
1795
+ ]);
1459
1796
  const uplotContainerElement = (0, react_exports.useRef)(null);
1460
1797
  const seriesDataFormatted = [
1461
1798
  filteredChartData.columns[0],
@@ -1471,9 +1808,21 @@ var TimeSeriesChartWrapper = (props) => {
1471
1808
  overlayFields,
1472
1809
  y2Enabled,
1473
1810
  nullValueMode,
1474
- markerDisplay
1811
+ markerDisplay,
1812
+ lineDashStyle,
1813
+ lineDashStylesByField
1475
1814
  ),
1476
- [yFields, y2Fields, lineWidth, overlayFields, y2Enabled, nullValueMode, markerDisplay]
1815
+ [
1816
+ yFields,
1817
+ y2Fields,
1818
+ lineWidth,
1819
+ overlayFields,
1820
+ y2Enabled,
1821
+ nullValueMode,
1822
+ markerDisplay,
1823
+ lineDashStyle,
1824
+ lineDashStylesByField
1825
+ ]
1477
1826
  );
1478
1827
  const chartingEventAnnotations = (0, react_exports.useMemo)(
1479
1828
  () => getAnnotationsForCanvas({
@@ -1487,25 +1836,54 @@ var TimeSeriesChartWrapper = (props) => {
1487
1836
  () => __spreadValues(__spreadValues(__spreadValues({}, xScaleConfig), yScaleConfig), y2ScaleConfig),
1488
1837
  [xScaleConfig, yScaleConfig, y2ScaleConfig]
1489
1838
  );
1490
- const legend = (0, react_exports.useMemo)(() => getLegend({ legendDisplay }), [legendDisplay]);
1839
+ const legend = (0, react_exports.useMemo)(
1840
+ () => getLegend({ legendDisplay, isSeriesCompare: legendMode === "seriesCompare" }),
1841
+ [legendDisplay, legendMode]
1842
+ );
1491
1843
  const handleChartClick = react_exports.useCallback(
1492
1844
  (event) => {
1493
1845
  if (onClick) {
1494
- handleClick(event, onClick);
1846
+ handleClick(event, onClick, trellisKey, trellisSplitBy);
1495
1847
  }
1496
1848
  },
1497
- [onClick]
1849
+ [onClick, trellisKey, trellisSplitBy]
1498
1850
  );
1499
1851
  const handleChartLegendClick = react_exports.useCallback(
1500
1852
  (event) => {
1501
1853
  if (onClick) {
1502
- handleLegendClick(event, onClick);
1854
+ handleLegendClick(event, onClick, trellisKey, trellisSplitBy);
1855
+ }
1856
+ },
1857
+ [onClick, trellisKey, trellisSplitBy]
1858
+ );
1859
+ const handleChartRangeSelection = react_exports.useCallback(
1860
+ (range2) => {
1861
+ if (onSelect) {
1862
+ handleRangeSelection(range2, onSelect, chartData, trellisKey, trellisSplitBy);
1503
1863
  }
1504
1864
  },
1505
- [onClick]
1865
+ [onSelect, chartData, trellisKey, trellisSplitBy]
1866
+ );
1867
+ const handleChartRangeZoom = react_exports.useCallback(
1868
+ (range2) => {
1869
+ if (onSelect) {
1870
+ handleRangeZoom(range2, onSelect, chartData, trellisKey, trellisSplitBy);
1871
+ }
1872
+ },
1873
+ [onSelect, chartData, trellisKey, trellisSplitBy]
1874
+ );
1875
+ const xFieldToUse = xFieldFromProps || xField;
1876
+ const enableSearchZoom = react_exports.useMemo(
1877
+ () => shouldEnableSearchZoom(eventHandlers, xFieldToUse),
1878
+ [eventHandlers, xFieldToUse]
1506
1879
  );
1507
1880
  const lastPayloadRef = react_exports.useRef(null);
1508
1881
  const lastOriginalEventRef = react_exports.useRef(null);
1882
+ const previousMouseoverPayloadRef = react_exports.useRef(null);
1883
+ const additionalTooltipValuesRef = react_exports.useRef(additionalTooltipValues);
1884
+ react_exports.useEffect(() => {
1885
+ additionalTooltipValuesRef.current = additionalTooltipValues;
1886
+ }, [additionalTooltipValues]);
1509
1887
  const handleChartCrosshairChange = react_exports.useCallback(
1510
1888
  (event) => {
1511
1889
  if (onPointMouseOver || onPointMouseOut) {
@@ -1517,6 +1895,7 @@ var TimeSeriesChartWrapper = (props) => {
1517
1895
  payload: lastPayloadRef.current
1518
1896
  });
1519
1897
  }
1898
+ previousMouseoverPayloadRef.current = null;
1520
1899
  return;
1521
1900
  }
1522
1901
  const payload = __spreadProps(__spreadValues({}, (0, lodash_exports.pick)(event, "value", "seriesKey", "time", "index", "seriesIndex")), {
@@ -1524,25 +1903,36 @@ var TimeSeriesChartWrapper = (props) => {
1524
1903
  });
1525
1904
  delete payload.seriesKey;
1526
1905
  if (event.rowContext) {
1527
- Object.keys(event.rowContext).forEach((fieldName) => {
1528
- payload[`row.${fieldName}.value`] = event.rowContext[fieldName];
1529
- });
1906
+ Object.assign(
1907
+ payload,
1908
+ Object.keys(event.rowContext).reduce((acc, fieldName) => {
1909
+ acc[`row.${fieldName}.value`] = event.rowContext[fieldName];
1910
+ return acc;
1911
+ }, {})
1912
+ );
1913
+ }
1914
+ const updatedPayload = appendTrellisToPayload(payload, trellisKey, trellisSplitBy);
1915
+ if (!hasMouseoverPayloadChanged(updatedPayload, previousMouseoverPayloadRef.current)) {
1916
+ return;
1530
1917
  }
1531
- lastPayloadRef.current = payload;
1918
+ lastPayloadRef.current = updatedPayload;
1532
1919
  lastOriginalEventRef.current = event;
1920
+ previousMouseoverPayloadRef.current = __spreadValues({}, updatedPayload);
1533
1921
  if (onPointMouseOver) {
1534
1922
  onPointMouseOver({
1535
1923
  type: "point.mouseover",
1536
1924
  originalEvent: event,
1537
- payload
1925
+ payload: updatedPayload
1538
1926
  });
1539
1927
  }
1540
1928
  }
1541
1929
  },
1542
- [onPointMouseOver, onPointMouseOut]
1930
+ [onPointMouseOver, onPointMouseOut, trellisKey, trellisSplitBy]
1543
1931
  );
1544
- const memoizedChart = (0, react_exports.useMemo)(
1545
- () => /* @__PURE__ */ react_exports.createElement(
1932
+ const dataKey = `${(_b = chartData.columns[0]) == null ? void 0 : _b[0]}-${(_c = chartData.columns[0]) == null ? void 0 : _c[chartData.columns[0].length - 1]}-${(_d = chartData.columns[0]) == null ? void 0 : _d.length}`;
1933
+ const memoizedChart = (0, react_exports.useMemo)(() => {
1934
+ const computedOnRangeZoom = onSelect ? handleChartRangeZoom : void 0;
1935
+ return /* @__PURE__ */ react_exports.createElement(visualization_canvas_exports.RangeSelectionProvider, { key: dataKey }, /* @__PURE__ */ react_exports.createElement(
1546
1936
  visualization_canvas_exports.TimeSeriesChart,
1547
1937
  {
1548
1938
  data: chartData,
@@ -1552,49 +1942,107 @@ var TimeSeriesChartWrapper = (props) => {
1552
1942
  seriesColorsByField,
1553
1943
  seriesConfig: seriesOverrides,
1554
1944
  legend,
1945
+ legendLabels,
1946
+ isSeriesCompare: legendMode === "seriesCompare",
1947
+ maxSeriesFocus: legendMode === "seriesCompare" ? 0 : void 0,
1555
1948
  scaleConfig,
1556
1949
  timestampFormat: "expanded",
1557
1950
  onCrosshairClick: onClick ? handleChartClick : void 0,
1558
1951
  onCrosshairChange: onPointMouseOver || onPointMouseOut ? handleChartCrosshairChange : void 0,
1559
1952
  onSeriesClick: onClick ? handleChartLegendClick : void 0,
1953
+ onRangeSelection: handleChartRangeSelection,
1954
+ onRangeZoom: computedOnRangeZoom,
1955
+ serverSideZoom: enableSearchZoom,
1560
1956
  userLocale,
1561
1957
  events: chartingEventAnnotations,
1562
- eventsConfig: { renderer: triangleEventAnnotationRenderer }
1958
+ eventsConfig: { renderer: triangleEventAnnotationRenderer },
1959
+ additionalTooltipValuesRef,
1960
+ showXMajorGridLines,
1961
+ showYMajorGridLines,
1962
+ showY2MajorGridLines,
1963
+ showYMinorGridLines,
1964
+ showY2MinorGridLines,
1965
+ showLineSmoothing,
1966
+ dataValuesDisplay,
1967
+ showYMajorTicks,
1968
+ showY2MajorTicks,
1969
+ yAxisMajorTickSize: yAxisMajorTickSizeNum,
1970
+ y2AxisMajorTickSize: y2AxisMajorTickSizeNum,
1971
+ yAxisMajorTickInterval: yAxisMajorTickIntervalNum,
1972
+ y2AxisMajorTickInterval: y2AxisMajorTickIntervalNum,
1973
+ showYMinorTicks,
1974
+ showY2MinorTicks,
1975
+ yAxisMinorTickSize: yAxisMinorTickSizeNum,
1976
+ y2AxisMinorTickSize: y2AxisMinorTickSizeNum,
1977
+ showYAxisWithZero,
1978
+ showY2AxisWithZero
1563
1979
  }
1564
- ),
1565
- [
1566
- chartData,
1567
- containerWidth,
1568
- containerHeight,
1569
- seriesColors,
1570
- seriesColorsByField,
1571
- seriesOverrides,
1572
- legend,
1573
- scaleConfig,
1574
- userLocale,
1575
- chartingEventAnnotations,
1576
- onClick,
1577
- handleChartClick,
1578
- onPointMouseOver,
1579
- onPointMouseOut,
1580
- handleChartCrosshairChange,
1581
- handleChartLegendClick
1582
- ]
1583
- );
1980
+ ));
1981
+ }, [
1982
+ onSelect,
1983
+ handleChartRangeZoom,
1984
+ dataKey,
1985
+ chartData,
1986
+ containerWidth,
1987
+ containerHeight,
1988
+ seriesColors,
1989
+ seriesColorsByField,
1990
+ seriesOverrides,
1991
+ legend,
1992
+ legendLabels,
1993
+ scaleConfig,
1994
+ onClick,
1995
+ handleChartClick,
1996
+ onPointMouseOver,
1997
+ onPointMouseOut,
1998
+ handleChartCrosshairChange,
1999
+ handleChartLegendClick,
2000
+ handleChartRangeSelection,
2001
+ enableSearchZoom,
2002
+ userLocale,
2003
+ chartingEventAnnotations,
2004
+ showXMajorGridLines,
2005
+ showYMajorGridLines,
2006
+ showY2MajorGridLines,
2007
+ showYMinorGridLines,
2008
+ showY2MinorGridLines,
2009
+ showLineSmoothing,
2010
+ dataValuesDisplay,
2011
+ showYMajorTicks,
2012
+ showY2MajorTicks,
2013
+ yAxisMajorTickSizeNum,
2014
+ y2AxisMajorTickSizeNum,
2015
+ yAxisMajorTickIntervalNum,
2016
+ y2AxisMajorTickIntervalNum,
2017
+ showYMinorTicks,
2018
+ showY2MinorTicks,
2019
+ yAxisMinorTickSizeNum,
2020
+ y2AxisMinorTickSizeNum,
2021
+ showYAxisWithZero,
2022
+ showY2AxisWithZero,
2023
+ legendMode
2024
+ ]);
1584
2025
  const memoizedVisualization = (0, react_exports.useMemo)(() => {
1585
- return /* @__PURE__ */ react_exports.createElement(VizStyleWrapper_default, { backgroundColor }, memoizedChart);
1586
- }, [backgroundColor, memoizedChart]);
1587
- return /* @__PURE__ */ react_exports.createElement(
2026
+ return /* @__PURE__ */ react_exports.createElement(VizStyleWrapper_default, { backgroundColor: bgColor }, memoizedChart);
2027
+ }, [bgColor, memoizedChart]);
2028
+ return /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null, trellisEnabled && /* @__PURE__ */ react_exports.createElement(
2029
+ TrellisTitle,
2030
+ {
2031
+ trellisKey,
2032
+ backgroundColor: bgColor,
2033
+ fontColor: defaultFontColor
2034
+ }
2035
+ ), /* @__PURE__ */ react_exports.createElement(
1588
2036
  TimeSeriesChartContainer,
1589
2037
  {
1590
- height,
2038
+ height: trellisEnabled ? Number(height) - TRELLIS_TITLE_HEIGHT : height,
1591
2039
  width,
1592
2040
  ref: uplotContainerElement,
1593
2041
  "data-test": "timeseries-chart-wrapper"
1594
2042
  },
1595
2043
  /* @__PURE__ */ react_exports.createElement(SizeAwareWrapper_default, { width, height, onResize: cachedHandleResize }),
1596
2044
  memoizedVisualization
1597
- );
2045
+ ));
1598
2046
  };
1599
2047
  var TimeSeriesChartWrapper_default = TimeSeriesChartWrapper;
1600
2048
 
@@ -1889,27 +2337,27 @@ var xpath_exports = {};
1889
2337
  __export(xpath_exports, {
1890
2338
  default: () => xpath_default
1891
2339
  });
1892
- var defaultImport29 = __toESM(require("xpath"));
2340
+ var defaultImport30 = __toESM(require("xpath"));
1893
2341
  __reExport(xpath_exports, require("xpath"));
1894
- var xpath_default = "default" in defaultImport29 ? defaultImport29.default : defaultImport29;
2342
+ var xpath_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
1895
2343
 
1896
2344
  // esm-externals:@xmldom/xmldom
1897
2345
  var xmldom_exports = {};
1898
2346
  __export(xmldom_exports, {
1899
2347
  default: () => xmldom_default
1900
2348
  });
1901
- var defaultImport30 = __toESM(require("@xmldom/xmldom"));
2349
+ var defaultImport31 = __toESM(require("@xmldom/xmldom"));
1902
2350
  __reExport(xmldom_exports, require("@xmldom/xmldom"));
1903
- var xmldom_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
2351
+ var xmldom_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
1904
2352
 
1905
2353
  // esm-externals:jexl
1906
2354
  var jexl_exports = {};
1907
2355
  __export(jexl_exports, {
1908
2356
  default: () => jexl_default
1909
2357
  });
1910
- var defaultImport31 = __toESM(require("jexl"));
2358
+ var defaultImport32 = __toESM(require("jexl"));
1911
2359
  __reExport(jexl_exports, require("jexl"));
1912
- var jexl_default = "default" in defaultImport31 ? defaultImport31.default : defaultImport31;
2360
+ var jexl_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
1913
2361
 
1914
2362
  // src/ChoroplethSvg/PureChoroplethSvg/SvgMutator.ts
1915
2363
  var ERROR_NON_ATTRIBUTE_MUTATION = "mutations only allowed on attribute nodes";
@@ -2412,7 +2860,6 @@ var computeSvgDynamicProps = (_a) => {
2412
2860
  const dataBinding = [
2413
2861
  {
2414
2862
  xPath: `'//*[@id="'+featureIDs[$i]+'"]/@fill'`,
2415
- // fixme todo move to DO as "xPath: areadIds | prepefix(`//*[@id="`)| suffix(`"/@fill`) > "
2416
2863
  value: "fill[$i]"
2417
2864
  }
2418
2865
  ];
@@ -2444,15 +2891,6 @@ var PureChoroplethSvg = (_a) => {
2444
2891
  };
2445
2892
  var PureChoroplethSvg_default = PureChoroplethSvg;
2446
2893
 
2447
- // esm-externals:@splunk/visualization-schemas
2448
- var visualization_schemas_exports = {};
2449
- __export(visualization_schemas_exports, {
2450
- default: () => visualization_schemas_default
2451
- });
2452
- var defaultImport32 = __toESM(require("@splunk/visualization-schemas"));
2453
- __reExport(visualization_schemas_exports, require("@splunk/visualization-schemas"));
2454
- var visualization_schemas_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2455
-
2456
2894
  // esm-externals:@splunk/visualization-color-palettes/editors/PresetPalettes
2457
2895
  var PresetPalettes_exports = {};
2458
2896
  __export(PresetPalettes_exports, {
@@ -2568,7 +3006,6 @@ var editorConfig = [
2568
3006
  editor: "editor.columnSelector",
2569
3007
  option: "areaIds",
2570
3008
  context: "areaIdContext",
2571
- // todo: need refactor this
2572
3009
  editorProps: {
2573
3010
  dataSourceKey: "primary"
2574
3011
  }
@@ -2579,8 +3016,7 @@ var editorConfig = [
2579
3016
  label: "Area values",
2580
3017
  editor: "editor.columnSelector",
2581
3018
  option: "areaValues",
2582
- context: "areaValuesContext",
2583
- // todo: need refactor this
3019
+ context: "areaIdContext",
2584
3020
  editorProps: {
2585
3021
  dataSourceKey: "primary"
2586
3022
  }