@splunk/visualizations 27.5.0 → 28.1.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 (167) hide show
  1. package/Area.config.js +19 -21
  2. package/Area.config.js.map +3 -3
  3. package/Area.js +55 -33
  4. package/Area.js.map +3 -3
  5. package/Bar.config.js +18 -21
  6. package/Bar.config.js.map +3 -3
  7. package/Bar.js +49 -32
  8. package/Bar.js.map +3 -3
  9. package/Bubble.config.js +39 -44
  10. package/Bubble.config.js.map +4 -4
  11. package/Bubble.js +70 -52
  12. package/Bubble.js.map +4 -4
  13. package/CHANGELOG.external.md +63 -7
  14. package/ChoroplethSvg.config.js +47 -43
  15. package/ChoroplethSvg.config.js.map +4 -4
  16. package/ChoroplethSvg.js +85 -54
  17. package/ChoroplethSvg.js.map +4 -4
  18. package/Column.config.js +15 -20
  19. package/Column.config.js.map +3 -3
  20. package/Column.js +43 -30
  21. package/Column.js.map +3 -3
  22. package/Ellipse.config.js +16 -7
  23. package/Ellipse.config.js.map +2 -2
  24. package/Ellipse.js +46 -20
  25. package/Ellipse.js.map +2 -2
  26. package/Events.config.js +38 -27
  27. package/Events.config.js.map +4 -4
  28. package/Events.js +114 -98
  29. package/Events.js.map +4 -4
  30. package/FEATUREFLAGS.md +9 -9
  31. package/FillerGauge.config.js +144 -16
  32. package/FillerGauge.config.js.map +3 -3
  33. package/FillerGauge.js +891 -101
  34. package/FillerGauge.js.map +4 -4
  35. package/Image.config.js +5 -6
  36. package/Image.config.js.map +2 -2
  37. package/Image.js +30 -15
  38. package/Image.js.map +2 -2
  39. package/Line.config.js +15 -20
  40. package/Line.config.js.map +3 -3
  41. package/Line.js +51 -32
  42. package/Line.js.map +3 -3
  43. package/LinkGraph.config.js +39 -46
  44. package/LinkGraph.config.js.map +3 -3
  45. package/LinkGraph.js +72 -52
  46. package/LinkGraph.js.map +3 -3
  47. package/MIGRATION.md +169 -40
  48. package/Map.config.js +83 -16
  49. package/Map.config.js.map +4 -4
  50. package/Map.js +218 -109
  51. package/Map.js.map +4 -4
  52. package/Markdown.config.js +4 -5
  53. package/Markdown.config.js.map +2 -2
  54. package/Markdown.js +122 -74
  55. package/Markdown.js.map +3 -3
  56. package/MarkerGauge.config.js +14 -12
  57. package/MarkerGauge.config.js.map +3 -3
  58. package/MarkerGauge.js +108 -70
  59. package/MarkerGauge.js.map +4 -4
  60. package/ParallelCoordinates.config.js +14 -12
  61. package/ParallelCoordinates.config.js.map +3 -3
  62. package/ParallelCoordinates.js +114 -60
  63. package/ParallelCoordinates.js.map +3 -3
  64. package/Pie.config.js +51 -38
  65. package/Pie.config.js.map +4 -4
  66. package/Pie.js +110 -86
  67. package/Pie.js.map +4 -4
  68. package/Punchcard.config.js +36 -34
  69. package/Punchcard.config.js.map +4 -4
  70. package/Punchcard.js +154 -88
  71. package/Punchcard.js.map +4 -4
  72. package/README.internal.md +15 -15
  73. package/README.md +10 -10
  74. package/Rectangle.config.js +16 -7
  75. package/Rectangle.config.js.map +2 -2
  76. package/Rectangle.js +46 -20
  77. package/Rectangle.js.map +2 -2
  78. package/Sankey.config.js +69 -17
  79. package/Sankey.config.js.map +4 -4
  80. package/Sankey.js +179 -50
  81. package/Sankey.js.map +4 -4
  82. package/Scatter.config.js +37 -42
  83. package/Scatter.config.js.map +3 -3
  84. package/Scatter.js +71 -54
  85. package/Scatter.js.map +3 -3
  86. package/SingleValue.config.js +32 -18
  87. package/SingleValue.config.js.map +4 -4
  88. package/SingleValue.js +240 -94
  89. package/SingleValue.js.map +4 -4
  90. package/SingleValueBasic.js +1 -0
  91. package/SingleValueBasic.js.map +2 -2
  92. package/SingleValueIcon.config.js +22 -11
  93. package/SingleValueIcon.config.js.map +2 -2
  94. package/SingleValueIcon.js +85 -29
  95. package/SingleValueIcon.js.map +2 -2
  96. package/SingleValueRadial.config.js +34 -23
  97. package/SingleValueRadial.config.js.map +3 -3
  98. package/SingleValueRadial.js +90 -49
  99. package/SingleValueRadial.js.map +4 -4
  100. package/SparkLine.js +153 -49
  101. package/SparkLine.js.map +2 -2
  102. package/TRELLIS.md +2 -2
  103. package/Table.config.js +93 -52
  104. package/Table.config.js.map +3 -3
  105. package/Table.js +513 -202
  106. package/Table.js.map +4 -4
  107. package/Timeline.config.js +36 -34
  108. package/Timeline.config.js.map +4 -4
  109. package/Timeline.js +131 -83
  110. package/Timeline.js.map +4 -4
  111. package/common/Charting.js +1 -0
  112. package/common/Charting.js.map +2 -2
  113. package/common/ChartingApi.js +1 -0
  114. package/common/ChartingApi.js.map +1 -1
  115. package/common/DocExampleWithVizSandbox.js +7 -2
  116. package/common/DocExampleWithVizSandbox.js.map +2 -2
  117. package/common/EventsDoc.js +31 -5
  118. package/common/EventsDoc.js.map +4 -4
  119. package/common/GaugeMajorTicks.js +4 -1
  120. package/common/GaugeMajorTicks.js.map +2 -2
  121. package/common/GaugeValueMarker.js +31 -3
  122. package/common/GaugeValueMarker.js.map +4 -4
  123. package/common/OptionsDoc.js +4 -1
  124. package/common/OptionsDoc.js.map +2 -2
  125. package/common/OverviewDoc.js +66 -50
  126. package/common/OverviewDoc.js.map +4 -4
  127. package/common/SplunkVisualization.js +1 -0
  128. package/common/SplunkVisualization.js.map +1 -1
  129. package/common/SplunkVisualizationApi.js +1 -0
  130. package/common/SplunkVisualizationApi.js.map +1 -1
  131. package/common/ThemedDefaults.js +67 -0
  132. package/common/ThemedDefaults.js.map +7 -0
  133. package/common/ThemesDoc.js +6 -9
  134. package/common/ThemesDoc.js.map +2 -2
  135. package/common/chartingUtils.js +1 -0
  136. package/common/chartingUtils.js.map +2 -2
  137. package/common/docUtils.js +6 -1
  138. package/common/docUtils.js.map +2 -2
  139. package/common/gaugeUtils.js +6 -1
  140. package/common/gaugeUtils.js.map +2 -2
  141. package/common/shapeUtils.js +6 -4
  142. package/common/shapeUtils.js.map +2 -2
  143. package/common/utils/configUtils.js +4 -5
  144. package/common/utils/configUtils.js.map +2 -2
  145. package/common/utils/dataUtils.js +1 -0
  146. package/common/utils/dataUtils.js.map +2 -2
  147. package/common/utils/featureFlagUtils.js +1 -0
  148. package/common/utils/featureFlagUtils.js.map +1 -1
  149. package/common/utils/hocUtils.js +1 -0
  150. package/common/utils/hocUtils.js.map +1 -1
  151. package/common/utils/mapUtils.js +35 -22
  152. package/common/utils/mapUtils.js.map +4 -4
  153. package/common/utils/singleValueUtils.js +8 -2
  154. package/common/utils/singleValueUtils.js.map +2 -2
  155. package/common/utils/styleUtils.js +1 -0
  156. package/common/utils/styleUtils.js.map +1 -1
  157. package/common/utils/tableUtils.js +59 -0
  158. package/common/utils/tableUtils.js.map +7 -0
  159. package/common/utils/testHelper.js +1 -0
  160. package/common/utils/testHelper.js.map +1 -1
  161. package/common/utils/trellisUtils.js +1 -0
  162. package/common/utils/trellisUtils.js.map +1 -1
  163. package/common/utils/urlUtils.js +1 -0
  164. package/common/utils/urlUtils.js.map +1 -1
  165. package/common/withDashboardViz.js +26 -9
  166. package/common/withDashboardViz.js.map +2 -2
  167. package/package.json +41 -39
package/FillerGauge.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /* Copyright © 2020 Splunk Inc.
2
2
  SPLUNK CONFIDENTIAL – Use or disclosure of this material in whole or
3
3
  in part without a valid written license from Splunk Inc. is PROHIBITED. */
4
+ "use strict";
4
5
  var __create = Object.create;
5
6
  var __defProp = Object.defineProperty;
6
7
  var __defProps = Object.defineProperties;
@@ -163,11 +164,9 @@ var configUtils_default = "default" in defaultImport10 ? defaultImport10.default
163
164
  // src/common/utils/configUtils.ts
164
165
  function enhanceConfig(vizConfig) {
165
166
  const enhancedConfig = __spreadValues({}, vizConfig);
166
- enhancedConfig.editorConfig = vizConfig.editorConfig.map(
167
- (config3) => {
168
- return __spreadProps(__spreadValues({}, config3), { open: config3.open || false });
169
- }
170
- );
167
+ enhancedConfig.editorConfig = vizConfig.editorConfig.map((config3) => {
168
+ return __spreadProps(__spreadValues({}, config3), { open: config3.open || false });
169
+ });
171
170
  return enhancedConfig;
172
171
  }
173
172
  function hasCompatibleContexts(vizContext, presetContext) {
@@ -298,6 +297,119 @@ var StaticGaugeColorEditor = {
298
297
  };
299
298
  var StaticGaugeColorEditor_default = StaticGaugeColorEditor;
300
299
 
300
+ // src/common/ThemedDefaults.tsx
301
+ var defaultBackgroundColor = (props) => pick_default({
302
+ enterprise: {
303
+ dark: variables_default.black(props),
304
+ light: variables_default.white(props)
305
+ },
306
+ prisma: variables_default.backgroundColorSection(props)
307
+ })(props);
308
+
309
+ // src/common/editorConfig/TrellisEditors.ts
310
+ var isTrellisFeatureFlagOn = ({ featureFlags }) => {
311
+ return Boolean(featureFlags == null ? void 0 : featureFlags.visualizations_enableTrellis);
312
+ };
313
+ var isTrellisEnabled = ({ options, featureFlags }) => {
314
+ const { splitByLayout = visualization_schemas_exports.LAYOUT_TYPE.Off } = options;
315
+ return isTrellisFeatureFlagOn({ featureFlags }) && splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
316
+ };
317
+ var TrellisEditorConfig = [
318
+ [
319
+ {
320
+ label: (0, i18n_exports._)("Trellis layout"),
321
+ option: "splitByLayout",
322
+ editor: "editor.toggle",
323
+ showEditor: isTrellisFeatureFlagOn
324
+ }
325
+ ],
326
+ [
327
+ {
328
+ label: (0, i18n_exports._)("Split by"),
329
+ option: "trellisSplitBy",
330
+ editor: "editor.trellisSplitBy",
331
+ editorProps: {
332
+ dataSourceKey: "primary"
333
+ },
334
+ showEditor: isTrellisEnabled
335
+ }
336
+ ],
337
+ [
338
+ {
339
+ label: (0, i18n_exports._)("Number of columns"),
340
+ option: "trellisColumns",
341
+ editor: "editor.number",
342
+ editorProps: {
343
+ min: 1
344
+ },
345
+ showEditor: isTrellisEnabled
346
+ }
347
+ ],
348
+ [
349
+ {
350
+ label: (0, i18n_exports._)("Min column width"),
351
+ option: "trellisMinColumnWidth",
352
+ editor: "editor.number",
353
+ editorProps: {
354
+ min: 1
355
+ },
356
+ showEditor: isTrellisEnabled
357
+ },
358
+ {
359
+ label: (0, i18n_exports._)("Row height"),
360
+ option: "trellisRowHeight",
361
+ editor: "editor.number",
362
+ editorProps: {
363
+ min: 1
364
+ },
365
+ showEditor: isTrellisEnabled
366
+ }
367
+ ],
368
+ [
369
+ {
370
+ label: (0, i18n_exports._)("Max number of components per page"),
371
+ option: "trellisPageCount",
372
+ editor: "editor.number",
373
+ editorProps: {
374
+ min: 1
375
+ },
376
+ showEditor: isTrellisEnabled
377
+ }
378
+ ]
379
+ ];
380
+ var TimechartTrellisEditorConfig = [
381
+ [
382
+ {
383
+ label: (0, i18n_exports._)("Trellis layout"),
384
+ option: "splitByLayout",
385
+ editor: "editor.toggle",
386
+ showEditor: isTrellisFeatureFlagOn,
387
+ // add help text for timecharts
388
+ editorProps: {
389
+ help: (0, i18n_exports._)(
390
+ "Y2-axis and overlay field configurations are not supported when trellis is enabled."
391
+ ),
392
+ helpFormat: "under"
393
+ }
394
+ }
395
+ ],
396
+ ...TrellisEditorConfig.slice(1),
397
+ [
398
+ {
399
+ label: (0, i18n_exports._)("Shared y-axis scale"),
400
+ option: "trellisSharedScale",
401
+ editor: "editor.checkbox",
402
+ showEditor: isTrellisEnabled
403
+ }
404
+ ]
405
+ ];
406
+ var TrellisBackgroundColorEditor = {
407
+ label: (0, i18n_exports._)("Trellis background"),
408
+ option: "trellisBackgroundColor",
409
+ editor: "editor.color",
410
+ showEditor: isTrellisEnabled
411
+ };
412
+
301
413
  // src/FillerGauge/config.ts
302
414
  var dataContract = {
303
415
  requiredDataSources: [
@@ -325,13 +437,7 @@ var defaultContext = {
325
437
  ]
326
438
  };
327
439
  var themes = {
328
- defaultBackgroundColor: (props) => pick_default({
329
- enterprise: {
330
- dark: variables_default.black(props),
331
- light: variables_default.backgroundColor(props)
332
- },
333
- prisma: variables_default.backgroundColorSidebar(props)
334
- })(props),
440
+ defaultBackgroundColor,
335
441
  defaultBackgroundBarFillColor: (props) => pick_default({
336
442
  light: "rgba(0, 0, 0, 0.07)",
337
443
  dark: "rgba(255, 255, 255, 0.14)"
@@ -354,6 +460,13 @@ var themes = {
354
460
  valueMarkerLabelFillColor: (props) => pick_default({
355
461
  light: variables_default.gray96(props),
356
462
  dark: variables_default.black(props)
463
+ })(props),
464
+ defaultFontColor: (props) => pick_default({
465
+ enterprise: {
466
+ dark: variables_default.textColor(props),
467
+ light: variables_default.textColor(props)
468
+ },
469
+ prisma: variables_default.contentColorDefault(props)
357
470
  })(props)
358
471
  };
359
472
  var basePresetContext = {
@@ -413,7 +526,10 @@ var editorConfig = [
413
526
  ]
414
527
  ]
415
528
  },
416
- Gauge_default,
529
+ {
530
+ label: Gauge_default.label,
531
+ layout: [...Gauge_default.layout, ...TrellisEditorConfig]
532
+ },
417
533
  {
418
534
  label: (0, i18n_exports._)("Color and style"),
419
535
  layout: [
@@ -431,7 +547,12 @@ var editorConfig = [
431
547
  }
432
548
  }
433
549
  ],
434
- [getDynamicGaugeColorEditor({ defaultContext, defaultPalettesConfig: PresetPalettes_exports.defaultPalettesConfig })],
550
+ [
551
+ getDynamicGaugeColorEditor({
552
+ defaultContext,
553
+ defaultPalettesConfig: PresetPalettes_exports.defaultPalettesConfig
554
+ })
555
+ ],
435
556
  [
436
557
  __spreadProps(__spreadValues({}, StaticGaugeColorEditor_default), {
437
558
  editorProps: {
@@ -439,7 +560,14 @@ var editorConfig = [
439
560
  }
440
561
  })
441
562
  ],
442
- BackgroundColor_default({ themes })
563
+ BackgroundColor_default({ themes }),
564
+ [
565
+ __spreadProps(__spreadValues({}, TrellisBackgroundColorEditor), {
566
+ editorProps: {
567
+ themes
568
+ }
569
+ })
570
+ ]
443
571
  ]
444
572
  }
445
573
  ];
@@ -463,7 +591,7 @@ var config = {
463
591
  defaultContext,
464
592
  optionsSchema: visualization_schemas_exports.fillerGaugeOptionsSchema,
465
593
  editorConfig,
466
- supports: ["dynamic-options" /* DYNAMIC_OPTIONS */, "placeholder" /* PLACEHOLDER */],
594
+ supports: ["dynamic-options" /* DYNAMIC_OPTIONS */, "placeholder" /* PLACEHOLDER */, "trellis" /* TRELLIS */],
467
595
  themes
468
596
  };
469
597
  var config_default = enhanceConfig(config);
@@ -831,9 +959,14 @@ var Item = styled_components_default.div.attrs(({ width }) => ({
831
959
  position: relative;
832
960
  background-color: ${(props) => (0, colorUtils_exports.isColor)(props.backgroundColor) && props.backgroundColor || props.theme.defaultBackgroundColor}};
833
961
  `;
834
- var FixSizeItem = styled_components_default.div.attrs(({ width, height }) => ({
835
- style: __spreadValues(__spreadValues({}, width && { width: (0, style_exports.toPx)(width) }), height && { height: (0, style_exports.toPx)(height) })
836
- }))`
962
+ var FixSizeItem = styled_components_default.div.attrs(
963
+ ({
964
+ width,
965
+ height
966
+ }) => ({
967
+ style: __spreadValues(__spreadValues({}, width && { width: (0, style_exports.toPx)(width) }), height && { height: (0, style_exports.toPx)(height) })
968
+ })
969
+ )`
837
970
  position: relative;
838
971
  flex-direction: column;
839
972
  flex: 1;
@@ -867,7 +1000,7 @@ var withFixedSizeContainer = (Viz) => {
867
1000
  FixSizeItem,
868
1001
  {
869
1002
  "data-test": "fix-size-item",
870
- "data-splunk-visualization-version": "27.5.0 - 5cfbc7064",
1003
+ "data-splunk-visualization-version": "28.1.0 - 4a1bff08b",
871
1004
  width,
872
1005
  height,
873
1006
  backgroundColor
@@ -933,7 +1066,7 @@ var Cover = styled_components_default.div`
933
1066
  bottom: 0;
934
1067
  `;
935
1068
  var Blocker = styled_components_default.div.attrs({
936
- "data-splunk-visualization-version": "27.5.0 - 5cfbc7064"
1069
+ "data-splunk-visualization-version": "28.1.0 - 4a1bff08b"
937
1070
  })`
938
1071
  position: relative;
939
1072
  width: 100%;
@@ -1302,7 +1435,12 @@ var useGetXAndYFields = ({
1302
1435
  y2Fields: options.y2 ? "> y2 | getField()" : void 0,
1303
1436
  fieldTypes: "> primary | getType()"
1304
1437
  };
1305
- const { xField = "", yFields = [], y2Fields = [], fieldTypes } = Options_exports.Options.evaluate(
1438
+ const {
1439
+ xField = "",
1440
+ yFields = [],
1441
+ y2Fields = [],
1442
+ fieldTypes
1443
+ } = Options_exports.Options.evaluate(
1306
1444
  { options: optionsToEvaluate, context },
1307
1445
  dataSourcesWithOnlyOnePoint,
1308
1446
  () => {
@@ -1430,6 +1568,309 @@ __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisU
1430
1568
  var trellisUtils_default = "default" in defaultImport30 ? defaultImport30.default : defaultImport30;
1431
1569
 
1432
1570
  // src/common/utils/trellisUtils.ts
1571
+ var AGGREGATIONS = "aggregations";
1572
+ var dataSourcesSplitByAggregationsUnknown = (dataSource) => {
1573
+ var _a, _b, _c, _d;
1574
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
1575
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
1576
+ let splitDataSources = null;
1577
+ let errorCode = null;
1578
+ if (fields && fields.length) {
1579
+ splitDataSources = {};
1580
+ for (let i = 0; i < fields.length; i += 1) {
1581
+ const fieldName = fields[i].name;
1582
+ if (!(fieldName == null ? void 0 : fieldName.startsWith("_"))) {
1583
+ splitDataSources[fieldName] = (0, lodash_exports.cloneDeep)(
1584
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
1585
+ );
1586
+ splitDataSources[fieldName].primary.data.fields = [fields[i]];
1587
+ splitDataSources[fieldName].primary.data.columns = [columns[i]];
1588
+ }
1589
+ }
1590
+ } else {
1591
+ errorCode = "INVALID_SPLIT_BY_FIELD";
1592
+ }
1593
+ return { splitDataSources, errorCode };
1594
+ };
1595
+ var toFieldEntries = (fields) => {
1596
+ return fields.map((field) => {
1597
+ if (typeof field === "string") {
1598
+ return { name: field };
1599
+ }
1600
+ return field;
1601
+ });
1602
+ };
1603
+ var dataSourcesSplitByAggregationsTimechartAndChart = (dataSource) => {
1604
+ var _a, _b, _c, _d;
1605
+ const fields = toFieldEntries((_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields);
1606
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
1607
+ let splitDataSources = null;
1608
+ let splitByFields = [];
1609
+ let errorCode = null;
1610
+ if (typeof fields[0] !== "string") {
1611
+ splitByFields = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
1612
+ }
1613
+ if (splitByFields && splitByFields.length > 0) {
1614
+ splitDataSources = {};
1615
+ splitByFields.forEach((splitByField) => {
1616
+ splitDataSources[splitByField] = (0, lodash_exports.cloneDeep)(
1617
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
1618
+ );
1619
+ splitDataSources[splitByField].primary.data.fields = [fields[0]];
1620
+ splitDataSources[splitByField].primary.data.columns = [columns[0]];
1621
+ fields.forEach((field, idx) => {
1622
+ const fieldName = field == null ? void 0 : field.name;
1623
+ if (fieldName !== "_time" && !(fieldName == null ? void 0 : fieldName.startsWith("_")) && field.data_source === splitByField) {
1624
+ splitDataSources[splitByField].primary.data.fields.push(field);
1625
+ splitDataSources[splitByField].primary.data.columns.push(columns[idx]);
1626
+ }
1627
+ });
1628
+ });
1629
+ } else if ((!splitByFields || !splitByFields.length) && fields.length > 1) {
1630
+ splitDataSources = {};
1631
+ for (let i = 1; i < fields.length; i += 1) {
1632
+ const fieldName = fields[i].name;
1633
+ if (!(fieldName == null ? void 0 : fieldName.startsWith("_"))) {
1634
+ splitDataSources[fieldName] = (0, lodash_exports.cloneDeep)(
1635
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
1636
+ );
1637
+ splitDataSources[fieldName].primary.data.fields = [fields[0], fields[i]];
1638
+ splitDataSources[fieldName].primary.data.columns = [columns[0], columns[i]];
1639
+ }
1640
+ }
1641
+ } else {
1642
+ errorCode = "INVALID_SPLIT_BY_FIELD";
1643
+ }
1644
+ return { splitDataSources, errorCode };
1645
+ };
1646
+ var dataSourcesSplitByAggregationsStats = (dataSource) => {
1647
+ var _a, _b, _c, _d;
1648
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
1649
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
1650
+ let splitDataSources = null;
1651
+ let splitByFields = [];
1652
+ let errorCode = null;
1653
+ if (typeof fields[0] !== "string") {
1654
+ splitByFields = (0, trellisUtils_exports.extractDataSourceAggregationKeysStats)(fields);
1655
+ }
1656
+ if (splitByFields && splitByFields.length > 0) {
1657
+ splitDataSources = {};
1658
+ splitByFields.forEach((splitByField) => {
1659
+ splitDataSources[splitByField] = (0, lodash_exports.cloneDeep)(
1660
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
1661
+ );
1662
+ splitDataSources[splitByField].primary.data.fields = [fields[0]];
1663
+ splitDataSources[splitByField].primary.data.columns = [columns[0]];
1664
+ const idx = fields.findIndex((field) => field.name === splitByField);
1665
+ if (idx > 0) {
1666
+ splitDataSources[splitByField].primary.data.fields.push(fields[idx]);
1667
+ splitDataSources[splitByField].primary.data.columns.push(columns[idx]);
1668
+ }
1669
+ });
1670
+ } else {
1671
+ errorCode = "INVALID_SPLIT_BY_FIELD";
1672
+ }
1673
+ return { splitDataSources, errorCode };
1674
+ };
1675
+ var dataSourcesSplitByModeTimechart = (dataSource, splitBy) => {
1676
+ var _a, _b, _c, _d, _e;
1677
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
1678
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
1679
+ let splitDataSources = null;
1680
+ let splitByFields = [];
1681
+ let errorCode = null;
1682
+ if (typeof fields[0] !== "string") {
1683
+ splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
1684
+ }
1685
+ if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
1686
+ splitDataSources = {};
1687
+ const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
1688
+ const valueKeys = [];
1689
+ for (let i = 1; i < fields.length; i += 1) {
1690
+ if (!((_e = fields[i].name) == null ? void 0 : _e.startsWith("_"))) {
1691
+ valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);
1692
+ }
1693
+ }
1694
+ valueKeys.forEach((val) => {
1695
+ splitDataSources[val] = (0, lodash_exports.cloneDeep)(
1696
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
1697
+ );
1698
+ splitDataSources[val].primary.data.fields = [
1699
+ { name: fields[0].name },
1700
+ ...dataSourceKeys.map((k) => ({
1701
+ name: k
1702
+ }))
1703
+ ];
1704
+ splitDataSources[val].primary.data.columns = [[...columns[0]]];
1705
+ dataSourceKeys.forEach((dsKey) => {
1706
+ fields.forEach((field, idx) => {
1707
+ if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {
1708
+ splitDataSources[val].primary.data.columns.push([...columns[idx]]);
1709
+ }
1710
+ });
1711
+ });
1712
+ });
1713
+ } else {
1714
+ errorCode = "INVALID_SPLIT_BY_FIELD";
1715
+ }
1716
+ return { splitDataSources, errorCode };
1717
+ };
1718
+ var dataSourcesSplitByModeChart = (dataSource, splitBy) => {
1719
+ var _a, _b, _c, _d;
1720
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
1721
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
1722
+ let splitDataSources = null;
1723
+ let splitByFields = [];
1724
+ let errorCode = null;
1725
+ if (typeof fields[0] !== "string") {
1726
+ splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
1727
+ }
1728
+ if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
1729
+ splitDataSources = {};
1730
+ const splitByFieldIdx = splitByFields.findIndex((f) => f === splitBy);
1731
+ const otherSplitBy = splitByFields.filter((f) => f !== splitBy);
1732
+ const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
1733
+ const nonDataSourceAggregations = [];
1734
+ if (!dataSourceKeys.length && fields[0].groupby_rank === "0" && fields.length && !fields[1].groupby_rank) {
1735
+ for (let i = 1; i < fields.length; i += 1) {
1736
+ nonDataSourceAggregations.push(fields[i].name);
1737
+ }
1738
+ }
1739
+ if (splitByFieldIdx === 0) {
1740
+ const valueKeys = (0, lodash_exports.cloneDeep)(columns[0]);
1741
+ valueKeys.forEach((val, idx) => {
1742
+ splitDataSources[val] = (0, lodash_exports.cloneDeep)(
1743
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
1744
+ );
1745
+ splitDataSources[val].primary.data.fields = [];
1746
+ if (otherSplitBy.length) {
1747
+ splitDataSources[val].primary.data.fields = [{ name: otherSplitBy[0] }];
1748
+ }
1749
+ if (dataSourceKeys.length) {
1750
+ const columnValues = [[]];
1751
+ splitDataSources[val].primary.data.fields = [
1752
+ ...splitDataSources[val].primary.data.fields,
1753
+ ...dataSourceKeys.map((k) => ({
1754
+ name: k
1755
+ }))
1756
+ ];
1757
+ dataSourceKeys.forEach(() => {
1758
+ columnValues.push([]);
1759
+ });
1760
+ for (let i = 1; i <= Math.ceil((fields.length - 1) / dataSourceKeys.length); i += 1) {
1761
+ columnValues[0].push(
1762
+ fields[i].splitby_value ? fields[i].splitby_value : fields[i].name
1763
+ );
1764
+ dataSourceKeys.forEach((dskey, dsIndx) => {
1765
+ const mul = (fields.length - 1) / dataSourceKeys.length;
1766
+ columnValues[dsIndx + 1].push(columns[i + dsIndx * mul][idx]);
1767
+ });
1768
+ }
1769
+ splitDataSources[val].primary.data.columns = columnValues;
1770
+ } else if (nonDataSourceAggregations.length) {
1771
+ const columnValues = [];
1772
+ fields.forEach((aggregationField, fieldIdx) => {
1773
+ if (fieldIdx > 0) {
1774
+ splitDataSources[val].primary.data.fields.push(aggregationField);
1775
+ columnValues.push([columns[fieldIdx][idx]]);
1776
+ }
1777
+ });
1778
+ splitDataSources[val].primary.data.columns = columnValues;
1779
+ }
1780
+ });
1781
+ } else {
1782
+ const valueKeys = [];
1783
+ for (let i = 1; i < fields.length; i += 1) {
1784
+ valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);
1785
+ }
1786
+ valueKeys.forEach((val) => {
1787
+ splitDataSources[val] = (0, lodash_exports.cloneDeep)(
1788
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
1789
+ );
1790
+ splitDataSources[val].primary.data.fields = [
1791
+ { name: otherSplitBy[0] },
1792
+ ...dataSourceKeys.map((k) => ({
1793
+ name: k
1794
+ }))
1795
+ ];
1796
+ splitDataSources[val].primary.data.columns = [[...columns[0]]];
1797
+ dataSourceKeys.forEach((dsKey) => {
1798
+ fields.forEach((field, idx) => {
1799
+ if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {
1800
+ splitDataSources[val].primary.data.columns.push([...columns[idx]]);
1801
+ }
1802
+ });
1803
+ });
1804
+ });
1805
+ }
1806
+ } else {
1807
+ errorCode = "INVALID_SPLIT_BY_FIELD";
1808
+ }
1809
+ return { splitDataSources, errorCode };
1810
+ };
1811
+ var dataSourcesSplitByModeStatsorUnknown = (dataSource, splitBy, splitMode) => {
1812
+ var _a, _b, _c, _d, _e, _f;
1813
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
1814
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
1815
+ let splitDataSources = null;
1816
+ let splitByFields = [];
1817
+ let errorCode = null;
1818
+ if (typeof fields[0] !== "string") {
1819
+ splitByFields = splitMode !== trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields);
1820
+ }
1821
+ const splitByIndex = fields == null ? void 0 : fields.findIndex(
1822
+ (field) => field === splitBy || field.name === splitBy
1823
+ );
1824
+ if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
1825
+ const splitByColumn = (_f = (_e = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _e.data) == null ? void 0 : _f.columns[splitByIndex];
1826
+ splitDataSources = {};
1827
+ splitByColumn.forEach((val, idx) => {
1828
+ if (!splitDataSources[val]) {
1829
+ splitDataSources[val] = [idx];
1830
+ } else {
1831
+ splitDataSources[val].push(idx);
1832
+ }
1833
+ });
1834
+ const cloneFields = (0, lodash_exports.cloneDeep)(fields);
1835
+ cloneFields.splice(splitByIndex, 1);
1836
+ const valueKeys = Object.keys(splitDataSources);
1837
+ valueKeys.forEach((val) => {
1838
+ const valIndices = (0, lodash_exports.cloneDeep)(splitDataSources[val]);
1839
+ splitDataSources[val] = (0, lodash_exports.cloneDeep)(
1840
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
1841
+ );
1842
+ splitDataSources[val].primary.data.fields = cloneFields;
1843
+ splitDataSources[val].primary.data.columns = [];
1844
+ columns.forEach((col, idx) => {
1845
+ if (idx !== splitByIndex) {
1846
+ const newCol = valIndices.map((valIdx) => col[valIdx]);
1847
+ splitDataSources[val].primary.data.columns.push(newCol);
1848
+ }
1849
+ });
1850
+ });
1851
+ } else {
1852
+ errorCode = "INVALID_SPLIT_BY_FIELD";
1853
+ }
1854
+ return { splitDataSources, errorCode };
1855
+ };
1856
+ var getTrellisDataSourcesBySplitMode = (splitMode, dataSources, trellisSplitBy) => {
1857
+ let result = null;
1858
+ try {
1859
+ if (splitMode === trellisUtils_exports.TIMECHART) {
1860
+ result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources) : dataSourcesSplitByModeTimechart(dataSources, trellisSplitBy);
1861
+ } else if (splitMode === trellisUtils_exports.STATS) {
1862
+ result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsStats(dataSources) : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, trellisUtils_exports.STATS);
1863
+ } else if (splitMode === trellisUtils_exports.CHART) {
1864
+ result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources) : dataSourcesSplitByModeChart(dataSources, trellisSplitBy);
1865
+ } else if (splitMode === trellisUtils_exports.UNKNOWN) {
1866
+ result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsUnknown(dataSources) : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, trellisUtils_exports.UNKNOWN);
1867
+ }
1868
+ } catch (ex) {
1869
+ console.error("getTrellisDataSourcesBySplitMode ", ex);
1870
+ result = { splitDataSources: null, errorCode: "UNKNOWN" };
1871
+ }
1872
+ return result;
1873
+ };
1433
1874
  var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
1434
1875
  if (isTrellisOn && !options.legendDisplay) {
1435
1876
  return {
@@ -1438,6 +1879,36 @@ var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
1438
1879
  }
1439
1880
  return {};
1440
1881
  };
1882
+ var calculateSharedMinMax = (splitData) => {
1883
+ let max = -Infinity;
1884
+ let min = Infinity;
1885
+ Object.keys(splitData).forEach((splitByKey) => {
1886
+ const datasources = splitData[splitByKey];
1887
+ Object.keys(datasources).forEach((datasourceName) => {
1888
+ const dataColumns = datasources[datasourceName].data.columns;
1889
+ dataColumns.forEach((column) => {
1890
+ column.forEach((point) => {
1891
+ const pointNumber = Number(point);
1892
+ if (pointNumber > max) {
1893
+ max = pointNumber;
1894
+ }
1895
+ if (pointNumber < min) {
1896
+ min = pointNumber;
1897
+ }
1898
+ });
1899
+ });
1900
+ });
1901
+ });
1902
+ return [min, max];
1903
+ };
1904
+ var determineMinMax = (splitData, trellisSharedScale, yAxisMin, yAxisMax, stackMode) => {
1905
+ if (!trellisSharedScale || stackMode === "stacked100" || yAxisMin !== "auto" && yAxisMax !== "auto")
1906
+ return [yAxisMin, yAxisMax];
1907
+ const [sharedMin, sharedMax] = calculateSharedMinMax(splitData);
1908
+ const shouldUseSharedMax = sharedMax !== -Infinity && yAxisMax === "auto";
1909
+ const shouldUseSharedMin = sharedMin !== Infinity && yAxisMin === "auto";
1910
+ return [shouldUseSharedMin ? sharedMin : yAxisMin, shouldUseSharedMax ? sharedMax : yAxisMax];
1911
+ };
1441
1912
 
1442
1913
  // src/common/withDashboardViz.tsx
1443
1914
  var withDashboardViz = (opts) => {
@@ -1497,10 +1968,10 @@ var withDashboardViz = (opts) => {
1497
1968
  const isDownsamplingEnabledByFeatureFlag = Boolean(
1498
1969
  featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableDownsampling
1499
1970
  );
1500
- const isTrellisFeatureFlagOn = Boolean(
1971
+ const isTrellisFeatureFlagOn2 = Boolean(
1501
1972
  featureFlagContext && featureFlagContext.visualizations_enableTrellis
1502
1973
  );
1503
- const isTrellisOn = isTrellisFeatureFlagOn && ((_a = vizConfig == null ? void 0 : vizConfig.supports) == null ? void 0 : _a.includes("trellis" /* TRELLIS */)) && (options == null ? void 0 : options.splitByLayout) === "trellis" /* TRELLIS */;
1974
+ const isTrellisOn = isTrellisFeatureFlagOn2 && ((_a = vizConfig == null ? void 0 : vizConfig.supports) == null ? void 0 : _a.includes("trellis" /* TRELLIS */)) && (options == null ? void 0 : options.splitByLayout) === "trellis" /* TRELLIS */;
1504
1975
  const isMounted = react_exports.useRef(true);
1505
1976
  const optionsToEvaluate = react_exports.useMemo(() => {
1506
1977
  var _a2;
@@ -1583,7 +2054,9 @@ var withDashboardViz = (opts) => {
1583
2054
  return result;
1584
2055
  }
1585
2056
  } catch (e) {
1586
- console.error(`unexpected error evaluating options: ${e.message}`);
2057
+ if (e instanceof Error) {
2058
+ console.error(`unexpected error evaluating options: ${e.message}`);
2059
+ }
1587
2060
  return {};
1588
2061
  }
1589
2062
  return {};
@@ -1640,9 +2113,13 @@ var withDashboardViz = (opts) => {
1640
2113
  }
1641
2114
  eventCallbackProps[eventCallbackPropName] = (ev) => {
1642
2115
  if (ev && ev.payload) {
1643
- payload = ev.payload;
2116
+ payload = __spreadValues({}, ev.payload);
1644
2117
  }
1645
- return onEventTrigger({ originalEvent: ev, payload, type: eventName });
2118
+ return onEventTrigger({
2119
+ originalEvent: ev,
2120
+ payload,
2121
+ type: eventName
2122
+ });
1646
2123
  };
1647
2124
  if (parentKeys) {
1648
2125
  for (let i = parentKeys.length - 1; i >= 0; i -= 1) {
@@ -1728,7 +2205,11 @@ var getGaugeStartPosition = ({ containerWidth, containerHeight, gaugeLength, ori
1728
2205
  return { gaugeStartX, gaugeStartY };
1729
2206
  };
1730
2207
  var getGaugeDimensions = ({ containerWidth, containerHeight, orientation }) => {
1731
- const gaugeLength = getGaugeLength({ containerWidth, containerHeight, orientation });
2208
+ const gaugeLength = getGaugeLength({
2209
+ containerWidth,
2210
+ containerHeight,
2211
+ orientation
2212
+ });
1732
2213
  const { gaugeStartX, gaugeStartY } = getGaugeStartPosition({
1733
2214
  containerWidth,
1734
2215
  containerHeight,
@@ -1872,7 +2353,9 @@ var MajorTickLine = styled_components_default.line`
1872
2353
  `;
1873
2354
  var MajorTickLabel = styled_components_default.text`
1874
2355
  font-size: 12px;
1875
- font-family: Splunk Platform Sans, sans-serif;
2356
+ font-family:
2357
+ Splunk Platform Sans,
2358
+ sans-serif;
1876
2359
  line-height: 19px;
1877
2360
  fill: ${(props) => props.majorTickFillColor};
1878
2361
  text-anchor: middle;
@@ -2060,6 +2543,15 @@ MajorTicks.defaultProps = {
2060
2543
  };
2061
2544
  var GaugeMajorTicks_default = MajorTicks;
2062
2545
 
2546
+ // esm-externals:@splunk/ui-utils/format
2547
+ var format_exports = {};
2548
+ __export(format_exports, {
2549
+ default: () => format_default
2550
+ });
2551
+ var defaultImport32 = __toESM(require("@splunk/ui-utils/format"));
2552
+ __reExport(format_exports, require("@splunk/ui-utils/format"));
2553
+ var format_default = "default" in defaultImport32 ? defaultImport32.default : defaultImport32;
2554
+
2063
2555
  // src/common/GaugeValueMarker.jsx
2064
2556
  var MARKER_THICKNESS = 15;
2065
2557
  var MARKER_INNER_LENGTH = 30;
@@ -2077,7 +2569,9 @@ var ValueMarkerLabelRect = styled_components_default.rect`
2077
2569
  var ValueMarkerLabel = styled_components_default.text`
2078
2570
  fill: ${(props) => props.valueMarkerLabelFillColor};
2079
2571
  font-size: 14px;
2080
- font-family: Splunk Platform Sans, sans-serif;
2572
+ font-family:
2573
+ Splunk Platform Sans,
2574
+ sans-serif;
2081
2575
  line-height: 16px;
2082
2576
  text-anchor: middle;
2083
2577
  text-align: center;
@@ -2149,7 +2643,13 @@ var ValueMarker = (_a) => {
2149
2643
  ValueMarkerRect,
2150
2644
  {
2151
2645
  "data-test": "value-marker-rect",
2152
- d: positionValueMarkerRect({ x, y, orientation, valueMarkerRectLength, alignCenter }),
2646
+ d: positionValueMarkerRect({
2647
+ x,
2648
+ y,
2649
+ orientation,
2650
+ valueMarkerRectLength,
2651
+ alignCenter
2652
+ }),
2153
2653
  valueMarkerFillColor
2154
2654
  }
2155
2655
  ), showValue && /* @__PURE__ */ react_default.createElement("g", null, /* @__PURE__ */ react_default.createElement(
@@ -2170,7 +2670,8 @@ var ValueMarker = (_a) => {
2170
2670
  "data-test": "value-marker-label",
2171
2671
  x: labelX,
2172
2672
  y: labelY,
2173
- valueMarkerLabelFillColor
2673
+ valueMarkerLabelFillColor,
2674
+ "aria-label": (0, format_exports.sprintf)((0, i18n_exports._)("Marker gauge value: %s"), value)
2174
2675
  },
2175
2676
  usePercentageValue ? `${(value / (max - min) * 100).toFixed(2)}%` : (0, numberUtils_exports.formatNumber)(value, 0, {
2176
2677
  useThousandSeparators: true,
@@ -2202,6 +2703,48 @@ ValueMarker.defaultProps = {
2202
2703
  };
2203
2704
  var GaugeValueMarker_default = ValueMarker;
2204
2705
 
2706
+ // src/common/hooks/useTrellisEnabled.ts
2707
+ var useTrellisFeatureFlagOn = () => {
2708
+ const context = (0, react_exports.useContext)(FeatureFlagContext_default);
2709
+ return Boolean(context == null ? void 0 : context.visualizations_enableTrellis);
2710
+ };
2711
+ var useTrellisEnabled = (layoutType = visualization_schemas_exports.LAYOUT_TYPE.Off) => {
2712
+ const trellisFeatureEnabled = useTrellisFeatureFlagOn();
2713
+ return trellisFeatureEnabled && layoutType === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
2714
+ };
2715
+
2716
+ // src/common/components/TrellisTitle.tsx
2717
+ var TRELLIS_TITLE_HEIGHT = 28;
2718
+ var TrellisTitleText = styled_components_default.div`
2719
+ margin-left: 10px;
2720
+ margin-right: 10px;
2721
+ padding-top: 8px;
2722
+ text-overflow: ellipsis;
2723
+ white-space: nowrap;
2724
+ overflow: hidden;
2725
+ `;
2726
+ var TrellisTitleDiv = styled_components_default.div`
2727
+ height: ${TRELLIS_TITLE_HEIGHT}px;
2728
+ font-size: 14px;
2729
+ font-weight: 700;
2730
+ color: ${(props) => props.fontColor};
2731
+ background-color: ${(props) => props.backgroundColor};
2732
+ 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.
2733
+ `;
2734
+ var TrellisTitle = (props) => {
2735
+ const titleText = String(props.trellisKey).toString();
2736
+ return /* @__PURE__ */ react_exports.createElement(
2737
+ TrellisTitleDiv,
2738
+ {
2739
+ fontColor: props.fontColor,
2740
+ backgroundColor: props.backgroundColor,
2741
+ "data-test": "trellis-title",
2742
+ title: titleText
2743
+ },
2744
+ /* @__PURE__ */ react_exports.createElement(TrellisTitleText, null, titleText)
2745
+ );
2746
+ };
2747
+
2205
2748
  // src/FillerGauge/PureFillerGauge/FillerGauge.tsx
2206
2749
  var Container = styled_components_default.div`
2207
2750
  overflow: hidden;
@@ -2224,7 +2767,9 @@ var FillerGaugeContainer = styled_components_default.div`
2224
2767
  var FillerGaugeSVG = styled_components_default.svg`
2225
2768
  ${(props) => (0, style_exports.toDimension)((0, lodash_exports.pick)(props, ["width", "height"]))};
2226
2769
  `;
2227
- var BackgroundBar = styled_components_default.rect.attrs({ "data-test": "background-bar-rect" })`
2770
+ var BackgroundBar = styled_components_default.rect.attrs({
2771
+ "data-test": "background-bar-rect"
2772
+ })`
2228
2773
  fill: ${(props) => props.backgroundBarFillColor};
2229
2774
  `;
2230
2775
  var FillBar = styled_components_default.rect.attrs({ "data-test": "fill-bar-rect" })`
@@ -2237,25 +2782,29 @@ var MIN_HORIZONTAL_CONTAINER_HEIGHT = 100;
2237
2782
  var FillerGauge = (_a) => {
2238
2783
  var props = __objRest(_a, []);
2239
2784
  const {
2240
- width,
2241
- height,
2785
+ width = "100%",
2786
+ height = 250,
2242
2787
  value,
2243
2788
  gaugeColor,
2244
- min,
2245
- max,
2246
- orientation,
2247
- majorUnit,
2248
- showLabels,
2249
- showValue,
2250
- usePercentageRange,
2251
- usePercentageValue,
2252
- backgroundColor,
2253
- backgroundBarFillColor,
2254
- majorTickFillColor,
2255
- majorTickStrokeColor,
2256
- valueMarkerFillColor,
2257
- valueMarkerLabelFillColor
2789
+ min = 0,
2790
+ max = 100,
2791
+ orientation = "vertical",
2792
+ majorUnit = "auto",
2793
+ showLabels = true,
2794
+ showValue = true,
2795
+ usePercentageRange = false,
2796
+ usePercentageValue = false,
2797
+ backgroundColor = "transparent",
2798
+ backgroundBarFillColor = "#f2f4f5",
2799
+ majorTickFillColor = "#3c444d",
2800
+ majorTickStrokeColor = "#6b7785",
2801
+ valueMarkerFillColor = "#3c444d",
2802
+ valueMarkerLabelFillColor = "#f2f4f5",
2803
+ splitByLayout = visualization_schemas_exports.LAYOUT_TYPE.Off,
2804
+ defaultFontColor = "#000",
2805
+ trellisKey = ""
2258
2806
  } = props;
2807
+ const trellisEnabled = useTrellisEnabled(splitByLayout);
2259
2808
  const cachedHandleResize = react_exports.useCallback((w, h) => {
2260
2809
  setContainerWidth(w);
2261
2810
  setContainerHeight(h);
@@ -2371,54 +2920,292 @@ var FillerGauge = (_a) => {
2371
2920
  )
2372
2921
  ));
2373
2922
  };
2923
+ if (trellisEnabled) {
2924
+ return /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null, /* @__PURE__ */ react_exports.createElement(
2925
+ TrellisTitle,
2926
+ {
2927
+ fontColor: defaultFontColor,
2928
+ backgroundColor,
2929
+ trellisKey
2930
+ }
2931
+ ), /* @__PURE__ */ react_exports.createElement(
2932
+ Container,
2933
+ {
2934
+ width,
2935
+ height: Number(height) - TRELLIS_TITLE_HEIGHT,
2936
+ backgroundColor
2937
+ },
2938
+ /* @__PURE__ */ react_exports.createElement(SizeAwareWrapper_default, { width, height, onResize: cachedHandleResize }),
2939
+ renderVisualization()
2940
+ ));
2941
+ }
2374
2942
  return /* @__PURE__ */ react_exports.createElement(Container, { width, height, backgroundColor }, /* @__PURE__ */ react_exports.createElement(SizeAwareWrapper_default, { width, height, onResize: cachedHandleResize }), renderVisualization());
2375
2943
  };
2376
- var propTypes3 = {
2377
- width: prop_types_exports.oneOfType([prop_types_exports.string, prop_types_exports.number]),
2378
- height: prop_types_exports.oneOfType([prop_types_exports.string, prop_types_exports.number]),
2379
- value: prop_types_exports.number,
2380
- gaugeColor: prop_types_exports.string,
2381
- min: prop_types_exports.number,
2382
- max: prop_types_exports.number,
2383
- // valueFieldName: T.string, // todo: need add it back when displaying name later
2384
- // gaugeColorFieldName: T.string, // todo: may need add it back may not
2385
- orientation: prop_types_exports.oneOf(["horizontal", "vertical"]),
2386
- majorUnit: prop_types_exports.oneOfType([prop_types_exports.string, prop_types_exports.number]),
2387
- showLabels: prop_types_exports.bool,
2388
- showValue: prop_types_exports.bool,
2389
- usePercentageRange: prop_types_exports.bool,
2390
- usePercentageValue: prop_types_exports.bool,
2391
- backgroundColor: prop_types_exports.string,
2392
- backgroundBarFillColor: prop_types_exports.string,
2393
- majorTickFillColor: prop_types_exports.string,
2394
- majorTickStrokeColor: prop_types_exports.string,
2395
- valueMarkerFillColor: prop_types_exports.string,
2396
- valueMarkerLabelFillColor: prop_types_exports.string
2397
- };
2398
- var defaultProps = {
2399
- width: "100%",
2400
- height: 250,
2401
- value: void 0,
2402
- gaugeColor: void 0,
2403
- orientation: "vertical",
2404
- min: 0,
2405
- max: 100,
2406
- majorUnit: "auto",
2407
- showLabels: true,
2408
- showValue: true,
2409
- usePercentageRange: false,
2410
- usePercentageValue: false,
2411
- backgroundColor: "transparent",
2412
- backgroundBarFillColor: "#f2f4f5",
2413
- majorTickFillColor: "#3c444d",
2414
- majorTickStrokeColor: "#6b7785",
2415
- valueMarkerFillColor: "#3c444d",
2416
- valueMarkerLabelFillColor: "#f2f4f5"
2417
- };
2418
- FillerGauge.propTypes = propTypes3;
2419
- FillerGauge.defaultProps = defaultProps;
2420
2944
  var FillerGauge_default = FillerGauge;
2421
2945
 
2946
+ // esm-externals:@splunk/react-ui/Paginator
2947
+ var Paginator_exports = {};
2948
+ __export(Paginator_exports, {
2949
+ default: () => Paginator_default
2950
+ });
2951
+ var defaultImport33 = __toESM(require("@splunk/react-ui/Paginator"));
2952
+ __reExport(Paginator_exports, require("@splunk/react-ui/Paginator"));
2953
+ var Paginator_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2954
+
2955
+ // esm-externals:@splunk/themes
2956
+ var themes_exports = {};
2957
+ __export(themes_exports, {
2958
+ default: () => themes_default
2959
+ });
2960
+ var defaultImport34 = __toESM(require("@splunk/themes"));
2961
+ __reExport(themes_exports, require("@splunk/themes"));
2962
+ var themes_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
2963
+
2964
+ // esm-externals:@splunk/themes/useSplunkTheme
2965
+ var useSplunkTheme_exports = {};
2966
+ __export(useSplunkTheme_exports, {
2967
+ default: () => useSplunkTheme_default
2968
+ });
2969
+ var defaultImport35 = __toESM(require("@splunk/themes/useSplunkTheme"));
2970
+ __reExport(useSplunkTheme_exports, require("@splunk/themes/useSplunkTheme"));
2971
+ var useSplunkTheme_default = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
2972
+
2973
+ // src/common/hocs/withTrellis.tsx
2974
+ var TrellisContainer = styled_components_default.div`
2975
+ overflow: hidden;
2976
+ display: flex;
2977
+ flex-direction: column;
2978
+ background-color: ${(props) => props.backgroundColor};
2979
+ ${(props) => (0, style_exports.toDimension)((0, lodash_exports.pick)(props, ["width", "height"]))};
2980
+ > [data-test='paginator'] {
2981
+ align-self: flex-end;
2982
+ margin-bottom: 10px;
2983
+ }
2984
+ `;
2985
+ var TrellisContainerGrid = styled_components_default.div`
2986
+ display: grid;
2987
+ height: ${(props) => {
2988
+ return `${props.height}px`;
2989
+ }};
2990
+ gap: 10px 10px;
2991
+ grid-template-columns: ${(props) => {
2992
+ return props.colCount ? `repeat(${props.colCount}, minmax(${props.colMinWidth}px, 1fr))` : `repeat(auto-fit, minmax(${props.colMinWidth}px, 1fr))`;
2993
+ }};
2994
+ overflow: auto;
2995
+ justify-items: stretch;
2996
+ grid-auto-rows: ${(props) => `${props.rowHeight}px`};
2997
+ .child {
2998
+ height: ${(props) => `${props.rowHeight}px`};
2999
+ }
3000
+ `;
3001
+ var showErrorMessage = (errorCode, width, height) => {
3002
+ if (errorCode === "INVALID_SPLIT_BY_FIELD") {
3003
+ return /* @__PURE__ */ react_exports.createElement(
3004
+ Message_default,
3005
+ {
3006
+ width,
3007
+ height,
3008
+ message: (0, i18n_exports._)("Select a valid trellis split by field"),
3009
+ level: "info"
3010
+ }
3011
+ );
3012
+ }
3013
+ if (errorCode === "UNKNOWN_DATA_SPLIT_MODE") {
3014
+ return /* @__PURE__ */ react_exports.createElement(Message_default, { width, height, message: (0, i18n_exports._)("Unknown data split mode"), level: "info" });
3015
+ }
3016
+ return /* @__PURE__ */ react_exports.createElement(Message_default, { width, height, message: (0, i18n_exports._)("Error render in trellis"), level: "info" });
3017
+ };
3018
+ var withTrellis = (Viz) => {
3019
+ const VizWithTrellis = (opts) => {
3020
+ const cachedHandleResize = react_exports.useCallback((w, h) => {
3021
+ setContainerWidth(w);
3022
+ setContainerHeight(h);
3023
+ }, []);
3024
+ const [containerWidth, setContainerWidth] = react_exports.useState(Number(opts.width));
3025
+ const [containerHeight, setContainerHeight] = react_exports.useState(Number(opts.height));
3026
+ const _a = opts, { options = {}, height, width } = _a, otherProps = __objRest(_a, ["options", "height", "width"]);
3027
+ const defaultOptions = (0, JSONSchemaUtils_exports.pickFieldFromJSONSchema)(Viz.config.optionsSchema, "default");
3028
+ const mergedOptions = (0, hocUtils_exports.deepMergeWithArrayPrimitiveOverrides)({}, options, defaultOptions);
3029
+ const {
3030
+ trellisColumns,
3031
+ trellisPageCount,
3032
+ trellisMinColumnWidth,
3033
+ trellisRowHeight,
3034
+ splitByLayout,
3035
+ trellisSplitBy,
3036
+ trellisSharedScale,
3037
+ stackMode,
3038
+ yAxisMin,
3039
+ yAxisMax
3040
+ } = mergedOptions;
3041
+ const colCount = trellisColumns > 0 ? trellisColumns : defaultOptions.trellisColumns;
3042
+ const pageCount = +trellisPageCount > 0 ? +trellisPageCount : defaultOptions.trellisPageCount;
3043
+ const colMinWidth = trellisMinColumnWidth > 0 ? trellisMinColumnWidth : defaultOptions.trellisMinColumnWidth;
3044
+ const rowHeight = trellisRowHeight > 0 ? trellisRowHeight : defaultOptions.trellisRowHeight;
3045
+ const [pageNum, setPageNum] = (0, react_exports.useState)(1);
3046
+ const [pagedData, setPagedData] = (0, react_exports.useState)(null);
3047
+ let splitByKeys = [];
3048
+ let totalPages = 0;
3049
+ let showPaginator = false;
3050
+ const { dataSources } = otherProps;
3051
+ const theme = {
3052
+ splunkThemeV1: useSplunkTheme_default()
3053
+ };
3054
+ const {
3055
+ family: currentThemeFamily,
3056
+ colorScheme: currentThemeColorScheme,
3057
+ density: currentThemeDensity
3058
+ } = (0, themes_exports.getSettingsFromThemedProps)({ theme });
3059
+ const trellisBackgroundColor = (0, react_exports.useMemo)(() => {
3060
+ const themeFunc = (themeVar) => {
3061
+ var _a2, _b;
3062
+ return (_b = (_a2 = Viz.config.themes)[themeVar]) == null ? void 0 : _b.call(_a2, {
3063
+ trellisBackgroundColor: mergedOptions.trellisBackgroundColor,
3064
+ theme
3065
+ });
3066
+ };
3067
+ const evaluated = Options_exports.Options.evaluate(
3068
+ {
3069
+ context: Viz.config.context,
3070
+ options: {
3071
+ trellisBackgroundColor: mergedOptions.trellisBackgroundColor
3072
+ }
3073
+ },
3074
+ {},
3075
+ themeFunc
3076
+ );
3077
+ return evaluated.trellisBackgroundColor;
3078
+ }, [
3079
+ mergedOptions.trellisBackgroundColor,
3080
+ currentThemeFamily,
3081
+ currentThemeColorScheme,
3082
+ currentThemeDensity
3083
+ ]);
3084
+ const columns = (0, lodash_exports.get)(dataSources, "primary.data.columns", void 0);
3085
+ const fields = (0, lodash_exports.get)(dataSources, "primary.data.fields", void 0);
3086
+ const noColumns = columns === void 0;
3087
+ const noFields = fields === void 0;
3088
+ const updateDataDisplay = (currPage) => {
3089
+ if (!showPaginator) {
3090
+ setPagedData(splitByKeys);
3091
+ setPageNum(1);
3092
+ } else {
3093
+ const startIdx = pageCount * (currPage - 1);
3094
+ const paged = splitByKeys.slice(startIdx, startIdx + pageCount);
3095
+ setPagedData(paged);
3096
+ }
3097
+ };
3098
+ (0, react_exports.useEffect)(() => {
3099
+ setPageNum(1);
3100
+ updateDataDisplay(1);
3101
+ }, [pageCount, trellisSplitBy]);
3102
+ (0, react_exports.useEffect)(() => {
3103
+ updateDataDisplay(pageNum);
3104
+ }, [columns, fields, trellisSplitBy, pageNum, splitByLayout]);
3105
+ const handlePageChange = (0, react_exports.useCallback)(
3106
+ (event, { page }) => {
3107
+ setPageNum(page);
3108
+ },
3109
+ [pageNum, pagedData]
3110
+ );
3111
+ const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
3112
+ const isTrellisFeatureFlagOn2 = Boolean(
3113
+ featureFlagContext && featureFlagContext.visualizations_enableTrellis
3114
+ );
3115
+ if (!isTrellisFeatureFlagOn2 || !splitByLayout || splitByLayout !== visualization_schemas_exports.LAYOUT_TYPE.Trellis) {
3116
+ return /* @__PURE__ */ react_exports.createElement(Viz, __spreadValues({}, opts));
3117
+ }
3118
+ if (splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis) {
3119
+ if (noColumns || noFields) {
3120
+ return /* @__PURE__ */ react_exports.createElement(Message_default, { width, height, message: (0, i18n_exports._)("Loading"), level: "info" });
3121
+ }
3122
+ let currTrellisSplitBy = trellisSplitBy;
3123
+ if (!trellisSplitBy || trellisSplitBy.length === 0) {
3124
+ const splitByPossibleFields = (0, trellisUtils_exports.getAllPossibleSplitByFields)(fields);
3125
+ currTrellisSplitBy = splitByPossibleFields.fields && splitByPossibleFields.fields.length ? splitByPossibleFields.fields[0] : AGGREGATIONS;
3126
+ }
3127
+ const splitMode = (0, trellisUtils_exports.getTrellisDataSplitterMode)(fields);
3128
+ const dataSplitResult = getTrellisDataSourcesBySplitMode(
3129
+ splitMode,
3130
+ dataSources,
3131
+ currTrellisSplitBy
3132
+ );
3133
+ const modifiedDataSourceBySplitBy = dataSplitResult == null ? void 0 : dataSplitResult.splitDataSources;
3134
+ const dataSplitErrorCode = dataSplitResult == null ? void 0 : dataSplitResult.errorCode;
3135
+ if (!modifiedDataSourceBySplitBy || Object.keys(modifiedDataSourceBySplitBy).length === 0 || dataSplitErrorCode) {
3136
+ return showErrorMessage(dataSplitErrorCode, width, height);
3137
+ }
3138
+ const splitByKeysModified = modifiedDataSourceBySplitBy ? Object.keys(modifiedDataSourceBySplitBy) : [];
3139
+ if (splitByKeysModified) {
3140
+ showPaginator = splitByKeysModified.length > pageCount;
3141
+ splitByKeys = splitByKeysModified;
3142
+ totalPages = splitByKeysModified ? Math.ceil(splitByKeysModified.length / pageCount) : 0;
3143
+ }
3144
+ const [calculatedMin, calculatedMax] = determineMinMax(
3145
+ modifiedDataSourceBySplitBy,
3146
+ trellisSharedScale,
3147
+ yAxisMin,
3148
+ yAxisMax,
3149
+ stackMode
3150
+ );
3151
+ return /* @__PURE__ */ react_exports.createElement(TrellisContainer, { height, width, backgroundColor: trellisBackgroundColor }, /* @__PURE__ */ react_exports.createElement(
3152
+ TrellisContainerGrid,
3153
+ {
3154
+ height,
3155
+ colCount,
3156
+ colMinWidth,
3157
+ rowHeight
3158
+ },
3159
+ pagedData == null ? void 0 : pagedData.map((splitByKey, idx) => /* @__PURE__ */ react_exports.createElement(
3160
+ "div",
3161
+ {
3162
+ className: "child",
3163
+ "data-test": "trellis-child",
3164
+ key: `div-child-${idx.toString()}`
3165
+ },
3166
+ /* @__PURE__ */ react_exports.createElement(
3167
+ SizeAwareWrapper_default,
3168
+ {
3169
+ width,
3170
+ height,
3171
+ onResize: cachedHandleResize
3172
+ }
3173
+ ),
3174
+ /* @__PURE__ */ react_exports.createElement(
3175
+ Viz,
3176
+ __spreadProps(__spreadValues({}, otherProps), {
3177
+ trellisKey: splitByKey,
3178
+ trellisSplitBy: currTrellisSplitBy,
3179
+ dataSources: modifiedDataSourceBySplitBy[splitByKey],
3180
+ options: __spreadProps(__spreadValues({}, options), {
3181
+ yAxisMin: calculatedMin,
3182
+ yAxisMax: calculatedMax
3183
+ }),
3184
+ key: `viz-${idx.toString()}`,
3185
+ height: containerHeight,
3186
+ width: containerWidth
3187
+ })
3188
+ )
3189
+ ))
3190
+ ), showPaginator && totalPages >= pageNum && /* @__PURE__ */ react_exports.createElement(
3191
+ Paginator_default,
3192
+ {
3193
+ onChange: handlePageChange,
3194
+ current: pageNum,
3195
+ alwaysShowLastPageLink: true,
3196
+ totalPages
3197
+ }
3198
+ ));
3199
+ }
3200
+ return null;
3201
+ };
3202
+ VizWithTrellis.propTypes = Viz.proptypes;
3203
+ VizWithTrellis.defaultProps = Viz.defaultProps;
3204
+ VizWithTrellis.config = Viz.config;
3205
+ return VizWithTrellis;
3206
+ };
3207
+ var withTrellis_default = withTrellis;
3208
+
2422
3209
  // src/FillerGauge/FillerGauge.ts
2423
3210
  var config2 = config_default;
2424
3211
  var PureFillerGauge = FillerGauge_default;
@@ -2431,15 +3218,18 @@ var computeVizProps = (_a) => {
2431
3218
  majorTickFillColor: config2.themes.majorTickFillColor(props),
2432
3219
  majorTickStrokeColor: config2.themes.majorTickStrokeColor(props),
2433
3220
  valueMarkerFillColor: config2.themes.valueMarkerFillColor(props),
2434
- valueMarkerLabelFillColor: config2.themes.valueMarkerLabelFillColor(props)
3221
+ valueMarkerLabelFillColor: config2.themes.valueMarkerLabelFillColor(props),
3222
+ defaultFontColor: props.themeFunc("defaultFontColor")
2435
3223
  };
2436
- return __spreadValues(__spreadValues({}, options), defaultColors);
2437
- };
2438
- var viz = withDashboardViz_default({
2439
- ReactViz: FillerGauge_default,
2440
- computeVizProps,
2441
- vizConfig: config_default
2442
- });
3224
+ return __spreadProps(__spreadValues(__spreadValues({}, options), defaultColors), { trellisKey: props.trellisKey });
3225
+ };
3226
+ var viz = withTrellis_default(
3227
+ withDashboardViz_default({
3228
+ ReactViz: FillerGauge_default,
3229
+ computeVizProps,
3230
+ vizConfig: config_default
3231
+ })
3232
+ );
2443
3233
  var { themes: themes2 } = config_default;
2444
3234
  var FillerGauge_default2 = viz;
2445
3235
  //# sourceMappingURL=FillerGauge.js.map