@splunk/visualizations 27.0.0 → 27.2.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 (89) hide show
  1. package/Area.config.js +269 -122
  2. package/Area.config.js.map +4 -4
  3. package/Area.js +1065 -209
  4. package/Area.js.map +4 -4
  5. package/Bar.config.js +266 -82
  6. package/Bar.config.js.map +4 -4
  7. package/Bar.js +1065 -171
  8. package/Bar.js.map +4 -4
  9. package/Bubble.config.js +127 -1
  10. package/Bubble.config.js.map +4 -4
  11. package/Bubble.js +323 -80
  12. package/Bubble.js.map +4 -4
  13. package/ChoroplethSvg.js +64 -37
  14. package/ChoroplethSvg.js.map +4 -4
  15. package/Column.config.js +271 -82
  16. package/Column.config.js.map +4 -4
  17. package/Column.js +1070 -171
  18. package/Column.js.map +4 -4
  19. package/Ellipse.js +44 -14
  20. package/Ellipse.js.map +4 -4
  21. package/Events.js +172 -527
  22. package/Events.js.map +4 -4
  23. package/FillerGauge.js +45 -15
  24. package/FillerGauge.js.map +4 -4
  25. package/Image.js +42 -12
  26. package/Image.js.map +4 -4
  27. package/Line.config.js +271 -119
  28. package/Line.config.js.map +4 -4
  29. package/Line.js +1067 -206
  30. package/Line.js.map +4 -4
  31. package/LinkGraph.js +584 -545
  32. package/LinkGraph.js.map +4 -4
  33. package/Map.config.js +114 -72
  34. package/Map.config.js.map +4 -4
  35. package/Map.js +177 -94
  36. package/Map.js.map +4 -4
  37. package/Markdown.js +46 -16
  38. package/Markdown.js.map +4 -4
  39. package/MarkerGauge.js +42 -12
  40. package/MarkerGauge.js.map +4 -4
  41. package/ParallelCoordinates.js +123 -87
  42. package/ParallelCoordinates.js.map +4 -4
  43. package/Pie.js +198 -81
  44. package/Pie.js.map +4 -4
  45. package/Punchcard.js +241 -38
  46. package/Punchcard.js.map +4 -4
  47. package/Rectangle.js +56 -26
  48. package/Rectangle.js.map +4 -4
  49. package/Sankey.js +68 -38
  50. package/Sankey.js.map +4 -4
  51. package/Scatter.config.js +127 -1
  52. package/Scatter.config.js.map +4 -4
  53. package/Scatter.js +323 -80
  54. package/Scatter.js.map +4 -4
  55. package/SingleValue.config.js +43 -67
  56. package/SingleValue.config.js.map +4 -4
  57. package/SingleValue.js +1434 -1356
  58. package/SingleValue.js.map +4 -4
  59. package/SingleValueBasic.js +1 -1
  60. package/SingleValueBasic.js.map +3 -3
  61. package/SingleValueIcon.config.js +45 -69
  62. package/SingleValueIcon.config.js.map +4 -4
  63. package/SingleValueIcon.js +1739 -1407
  64. package/SingleValueIcon.js.map +4 -4
  65. package/SingleValueRadial.config.js +43 -67
  66. package/SingleValueRadial.config.js.map +4 -4
  67. package/SingleValueRadial.js +1366 -1273
  68. package/SingleValueRadial.js.map +4 -4
  69. package/SparkLine.js +1 -1
  70. package/SparkLine.js.map +3 -3
  71. package/TRELLIS.md +16 -15
  72. package/Table.js +65 -30
  73. package/Table.js.map +4 -4
  74. package/Timeline.config.js +418 -0
  75. package/Timeline.config.js.map +7 -0
  76. package/Timeline.js +3074 -0
  77. package/Timeline.js.map +7 -0
  78. package/common/Charting.js +133 -27
  79. package/common/Charting.js.map +4 -4
  80. package/common/OptionsDoc.js +8 -3
  81. package/common/OptionsDoc.js.map +2 -2
  82. package/common/utils/mapUtils.js.map +2 -2
  83. package/common/utils/singleValueUtils.js +26 -15
  84. package/common/utils/singleValueUtils.js.map +2 -2
  85. package/common/utils/trellisUtils.js +41 -1
  86. package/common/utils/trellisUtils.js.map +2 -2
  87. package/common/withDashboardViz.js +42 -12
  88. package/common/withDashboardViz.js.map +4 -4
  89. package/package.json +49 -38
package/SingleValue.js CHANGED
@@ -60,7 +60,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
60
60
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
61
61
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
62
62
 
63
- // src/SingleValue/SingleValue.ts
63
+ // src/SingleValue/index.ts
64
64
  var SingleValue_exports = {};
65
65
  __export(SingleValue_exports, {
66
66
  PureSingleValue: () => PureSingleValue,
@@ -134,6 +134,21 @@ var defaultImport7 = __toESM(require("@splunk/visualizations-shared/SizeAwareWra
134
134
  __reExport(SizeAwareWrapper_exports, require("@splunk/visualizations-shared/SizeAwareWrapper"));
135
135
  var SizeAwareWrapper_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
136
136
 
137
+ // src/common/components/VizStyleWrapper.jsx
138
+ var VizStyleWrapper = styled_components_default.div.attrs(({ dataTestKey }) => ({
139
+ "data-test": dataTestKey,
140
+ "data-testid": dataTestKey
141
+ }))`
142
+ display: flex;
143
+ justify-content: center;
144
+ flex-direction: column;
145
+ width: 100%;
146
+ height: 100%;
147
+ background-color: ${(props) => props.backgroundColor};
148
+ `;
149
+ VizStyleWrapper.displayName = "VizStyleWrapper";
150
+ var VizStyleWrapper_default = VizStyleWrapper;
151
+
137
152
  // esm-externals:@splunk/visualization-context/FeatureFlagContext
138
153
  var FeatureFlagContext_exports = {};
139
154
  __export(FeatureFlagContext_exports, {
@@ -152,20 +167,15 @@ var defaultImport9 = __toESM(require("@splunk/visualization-schemas"));
152
167
  __reExport(visualization_schemas_exports, require("@splunk/visualization-schemas"));
153
168
  var visualization_schemas_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
154
169
 
155
- // src/common/components/VizStyleWrapper.jsx
156
- var VizStyleWrapper = styled_components_default.div.attrs(({ dataTestKey }) => ({
157
- "data-test": dataTestKey,
158
- "data-testid": dataTestKey
159
- }))`
160
- display: flex;
161
- justify-content: center;
162
- flex-direction: column;
163
- width: 100%;
164
- height: 100%;
165
- background-color: ${(props) => props.backgroundColor};
166
- `;
167
- VizStyleWrapper.displayName = "VizStyleWrapper";
168
- var VizStyleWrapper_default = VizStyleWrapper;
170
+ // src/common/hooks/useTrellisEnabled.ts
171
+ var useTrellisFeatureFlagOn = () => {
172
+ const context = (0, react_exports.useContext)(FeatureFlagContext_default);
173
+ return Boolean(context == null ? void 0 : context.visualizations_enableTrellis);
174
+ };
175
+ var useTrellisEnabled = (layoutType = visualization_schemas_exports.LAYOUT_TYPE.Off) => {
176
+ const trellisFeatureEnabled = useTrellisFeatureFlagOn();
177
+ return trellisFeatureEnabled && layoutType === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
178
+ };
169
179
 
170
180
  // src/common/components/TrellisTitle.tsx
171
181
  var TRELLIS_TITLE_HEIGHT = 28;
@@ -340,13 +350,13 @@ var computeText = ({
340
350
  return text;
341
351
  };
342
352
  var getMajorText = ({
343
- majorValue,
353
+ majorValueDisplay,
344
354
  numberPrecision,
345
355
  shouldUseThousandSeparators,
346
356
  shouldAbbreviateMajorValue
347
357
  }) => computeText({
348
- value: majorValue === null ? "N/A" : majorValue,
349
- // if majorValue is null, use `N/A`.
358
+ value: majorValueDisplay === null ? "N/A" : majorValueDisplay,
359
+ // if majorValueDisplay is null, use `N/A`.
350
360
  numberPrecision,
351
361
  shouldUseThousandSeparators,
352
362
  shouldAbbreviateValue: shouldAbbreviateMajorValue
@@ -413,6 +423,7 @@ var getMajorAndTrend = ({
413
423
  width,
414
424
  height,
415
425
  majorValue,
426
+ majorValueDisplay,
416
427
  trendValue,
417
428
  majorFontSize,
418
429
  trendFontSize,
@@ -427,7 +438,7 @@ var getMajorAndTrend = ({
427
438
  const textContentWidth = width * 0.9;
428
439
  const textContentHeight = height * 0.9;
429
440
  const majorText = getMajorText({
430
- majorValue,
441
+ majorValueDisplay,
431
442
  numberPrecision,
432
443
  shouldUseThousandSeparators,
433
444
  shouldAbbreviateMajorValue
@@ -465,6 +476,7 @@ var updateVizInSmallSpace = ({
465
476
  height,
466
477
  toRemoveList,
467
478
  majorValue,
479
+ majorValueDisplay,
468
480
  trendValue,
469
481
  majorFontSize,
470
482
  trendFontSize,
@@ -485,6 +497,7 @@ var updateVizInSmallSpace = ({
485
497
  });
486
498
  newMajorAndTrend = getMajorAndTrend(__spreadValues({
487
499
  majorValue,
500
+ majorValueDisplay,
488
501
  trendValue,
489
502
  majorFontSize,
490
503
  trendFontSize,
@@ -499,9 +512,10 @@ var updateVizInSmallSpace = ({
499
512
  removeIndex += 1;
500
513
  }
501
514
  if (newTextSize < 12) {
502
- const truncateValue = `${majorValue.toString().slice(0, 3)}...`;
515
+ const truncateValue = `${(majorValueDisplay || majorValue).toString().slice(0, 3)}...`;
503
516
  newMajorAndTrend = getMajorAndTrend(__spreadValues({
504
- majorValue: truncateValue,
517
+ majorValue,
518
+ majorValueDisplay: truncateValue,
505
519
  trendValue,
506
520
  majorFontSize,
507
521
  trendFontSize,
@@ -521,6 +535,7 @@ var computeSingleValueContent = ({
521
535
  containerWidth,
522
536
  containerHeight,
523
537
  majorValue,
538
+ majorValueDisplay,
524
539
  trendValue,
525
540
  majorFontSize,
526
541
  trendFontSize,
@@ -534,6 +549,7 @@ var computeSingleValueContent = ({
534
549
  }) => {
535
550
  let { majorText, trendText, majorTextFontSize, trendTextFontSize } = getMajorAndTrend({
536
551
  majorValue,
552
+ majorValueDisplay: majorValueDisplay || majorValue,
537
553
  trendValue,
538
554
  majorFontSize,
539
555
  trendFontSize,
@@ -554,6 +570,7 @@ var computeSingleValueContent = ({
554
570
  height: containerHeight,
555
571
  toRemoveList,
556
572
  majorValue,
573
+ majorValueDisplay: majorValueDisplay || majorValue,
557
574
  trendValue,
558
575
  majorFontSize,
559
576
  trendFontSize,
@@ -635,16 +652,16 @@ var changeColor = (color, ratio) => {
635
652
  return `#${newR.toString(16).padStart(2, 0)}${newG.toString(16).padStart(2, 0)}${newB.toString(16).padStart(2, 0)}`;
636
653
  };
637
654
  var darken = (color) => changeColor(color, 0.5);
638
- var handleValueClickCallback = (ev, majorValue, majorValueField, trendValue, onValueClick, trellisEnabled = false, trellisSplityBy = "", trellisKey = "") => {
639
- let payload = {
655
+ var handleValueClickCallback = (ev, majorValue, majorValueField, trendValue, onValueClick, trellisEnabled = false, trellisSplitBy = "", trellisKey = "") => onValueClick(__spreadProps(__spreadValues({}, ev), {
656
+ payload: __spreadValues({
640
657
  trendValue,
641
658
  value: majorValue,
642
659
  name: majorValueField
643
- };
644
- if (trellisEnabled) {
645
- payload = __spreadProps(__spreadValues({}, payload), { "trellis.name": trellisSplityBy, "trellis.value": trellisKey });
646
- }
647
- return onValueClick(__spreadProps(__spreadValues({}, ev), { payload }));
660
+ }, trellisEnabled && { "trellis.name": trellisSplitBy, "trellis.value": trellisKey })
661
+ }));
662
+ var getTrendColorWithPercent = (options) => {
663
+ const shouldUsePercentTrendColor = options.trendColor === "> trendValue | rangeValue(trendColorEditorConfig)" && options.trendDisplay === "percent";
664
+ return shouldUsePercentTrendColor ? { trendColor: "> trendValuePercent | rangeValue(trendColorEditorConfig)" } : {};
648
665
  };
649
666
 
650
667
  // esm-externals:@splunk/react-icons/enterprise/ArrowUp
@@ -1687,6 +1704,7 @@ var SingleValue = (_a) => {
1687
1704
  style,
1688
1705
  majorFontSize,
1689
1706
  majorValue,
1707
+ majorValueDisplay,
1690
1708
  majorValueField,
1691
1709
  trendValue,
1692
1710
  trendFontSize,
@@ -1731,11 +1749,7 @@ var SingleValue = (_a) => {
1731
1749
  setContainerWidth(w);
1732
1750
  setContainerHeight(h);
1733
1751
  }, []);
1734
- const featureFlagContext = react_default.useContext(FeatureFlagContext_default);
1735
- const isTrellisFeatureFlagOn = Boolean(
1736
- featureFlagContext && featureFlagContext.visualizations_enableTrellis
1737
- );
1738
- const trellisEnabled = isTrellisFeatureFlagOn && splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
1752
+ const trellisEnabled = useTrellisEnabled(splitByLayout);
1739
1753
  const handleValueClick = (0, react_exports.useCallback)(
1740
1754
  (ev) => handleValueClickCallback(
1741
1755
  ev,
@@ -1795,6 +1809,7 @@ var SingleValue = (_a) => {
1795
1809
  smallVizProps
1796
1810
  } = computeSingleValueContent({
1797
1811
  majorValue,
1812
+ majorValueDisplay,
1798
1813
  trendValue,
1799
1814
  majorFontSize,
1800
1815
  trendFontSize,
@@ -1887,6 +1902,7 @@ SingleValue.propTypes = {
1887
1902
  style: prop_types_default.object,
1888
1903
  sparklineValues: prop_types_default.arrayOf(prop_types_default.oneOfType([prop_types_default.string, prop_types_default.number])),
1889
1904
  majorValue: prop_types_default.oneOfType([prop_types_default.string, prop_types_default.number]),
1905
+ majorValueDisplay: prop_types_default.oneOfType([prop_types_default.string, prop_types_default.number]),
1890
1906
  majorColor: prop_types_default.string,
1891
1907
  majorFontSize: prop_types_default.number,
1892
1908
  majorValueField: prop_types_default.string,
@@ -2286,7 +2302,7 @@ var withFixedSizeContainer = (Viz) => {
2286
2302
  FixSizeItem,
2287
2303
  {
2288
2304
  "data-test": "fix-size-item",
2289
- "data-splunk-visualization-version": "27.0.0 - 9bf093b7d",
2305
+ "data-splunk-visualization-version": "27.2.0 - 2e7eda8d4",
2290
2306
  width,
2291
2307
  height,
2292
2308
  backgroundColor
@@ -2352,7 +2368,7 @@ var Cover = styled_components_default.div`
2352
2368
  bottom: 0;
2353
2369
  `;
2354
2370
  var Blocker = styled_components_default.div.attrs({
2355
- "data-splunk-visualization-version": "27.0.0 - 9bf093b7d"
2371
+ "data-splunk-visualization-version": "27.2.0 - 2e7eda8d4"
2356
2372
  })`
2357
2373
  position: relative;
2358
2374
  width: 100%;
@@ -2839,1384 +2855,1427 @@ var getFeatureFlag = (context, flagName) => {
2839
2855
  return false;
2840
2856
  };
2841
2857
 
2842
- // src/common/withDashboardViz.tsx
2843
- var withDashboardViz = (opts) => {
2844
- const {
2845
- ReactViz,
2846
- vizConfig,
2847
- computeVizProps: computeVizProps2 = () => {
2848
- },
2849
- disableEditModeCover,
2850
- useIconPlaceholder
2851
- } = opts;
2852
- const SanitizedReactViz = (0, SanitizeProps_exports.withSanitizedProps)(ReactViz);
2853
- const defaultOptions = (0, JSONSchemaUtils_exports.pickFieldFromJSONSchema)(vizConfig.optionsSchema, "default");
2854
- const DashboardViz = (props) => {
2855
- var _a;
2856
- const {
2857
- mode,
2858
- hasEventHandlers,
2859
- dataSources,
2860
- // type of { [key: string]: DataSource }
2861
- options,
2862
- context = {},
2863
- width,
2864
- height,
2865
- onComputedProps,
2866
- onEventTrigger,
2867
- theme,
2868
- onRequestParamsChange
2869
- } = props;
2870
- const { serializedTimezone } = react_exports.useContext(TimezoneContext_default);
2871
- if (serializedTimezone) {
2872
- if (!moment_default.getDefaultSplunkTimezone()) {
2873
- moment_default.setDefaultSplunkTimezone(serializedTimezone);
2858
+ // esm-externals:@splunk/visualizations-shared/trellisUtils
2859
+ var trellisUtils_exports = {};
2860
+ __export(trellisUtils_exports, {
2861
+ default: () => trellisUtils_default
2862
+ });
2863
+ var defaultImport33 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
2864
+ __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
2865
+ var trellisUtils_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
2866
+
2867
+ // src/common/utils/trellisUtils.ts
2868
+ var AGGREGATIONS = "aggregations";
2869
+ var dataSourcesSplitByAggregationsUnknown = (dataSource) => {
2870
+ var _a, _b, _c, _d;
2871
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
2872
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
2873
+ let splitDataSources = null;
2874
+ let errorCode = null;
2875
+ if (fields && fields.length) {
2876
+ splitDataSources = {};
2877
+ for (let i = 0; i < fields.length; i += 1) {
2878
+ const fieldName = fields[i].name;
2879
+ if (!(fieldName == null ? void 0 : fieldName.startsWith("_"))) {
2880
+ splitDataSources[fieldName] = (0, lodash_exports.cloneDeep)(
2881
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
2882
+ );
2883
+ splitDataSources[fieldName].primary.data.fields = [fields[i]];
2884
+ splitDataSources[fieldName].primary.data.columns = [columns[i]];
2874
2885
  }
2875
2886
  }
2876
- const themeFunc = (themeVar) => {
2877
- var _a2, _b;
2878
- return (_b = (_a2 = vizConfig.themes)[themeVar]) == null ? void 0 : _b.call(_a2, props);
2879
- };
2880
- const bgColorFromTheme = themeFunc("defaultBackgroundColor");
2881
- const {
2882
- family: currentThemeFamily,
2883
- colorScheme: currentThemeColorScheme,
2884
- density: currentThemeDensity
2885
- } = getSettingsFromThemedProps_default({ theme });
2886
- let evaluatedOptions = {};
2887
- const [evaluatedOptionsAsync, setEvaluatedOptionsAsync] = react_exports.useState({});
2888
- const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
2889
- const [visualizationID] = react_exports.useState(`${vizConfig.name} - ${(0, id_exports.createGUID)()}`);
2890
- const [dataSourcesInState, setDataSourcesInState] = react_exports.useState({});
2891
- const [dataFramesInState, setDataFramesInState] = react_exports.useState();
2892
- const [useAsyncEvaluatedOptions, setUseAsyncEvaluatedOptions] = react_exports.useState(
2893
- Boolean(getFeatureFlag(featureFlagContext, "visualizations_useWebWorkersForDSL"))
2894
- );
2895
- const isDownsamplingEnabledByFeatureFlag = Boolean(
2896
- featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableDownsampling
2897
- );
2898
- const isMounted = react_exports.useRef(true);
2899
- const optionsToEvaluate = react_exports.useMemo(
2900
- () => ({
2901
- context: (0, lodash_exports.defaultsDeep)({}, context, vizConfig.defaultContext),
2902
- options: (0, hocUtils_exports.deepMergeWithArrayPrimitiveOverrides)({}, options, defaultOptions)
2903
- }),
2904
- [options, context]
2905
- );
2906
- const [threshold, setThreshold] = react_exports.useState(Number(width));
2907
- const onDownsamplingThresholdChange = react_exports.useCallback((newThreshold) => {
2908
- setThreshold(newThreshold);
2909
- }, []);
2910
- const isDownsamplingEnabled = react_exports.useMemo(() => {
2911
- return isDownsamplingEnabledByFeatureFlag && isDownsamplingEnabledForViz({ vizConfig });
2912
- }, [isDownsamplingEnabledByFeatureFlag]);
2913
- const downsamplingProps = react_exports.useMemo(() => {
2914
- if (!isDownsamplingEnabled) {
2915
- return {};
2916
- }
2917
- return {
2918
- onDownsamplingThresholdChange,
2919
- originalDataSources: dataSources
2920
- };
2921
- }, [dataSources, isDownsamplingEnabled, onDownsamplingThresholdChange]);
2922
- const downsampledDataSources = useDownsampleDataSources_default({
2923
- options: optionsToEvaluate.options,
2924
- context: optionsToEvaluate.context,
2925
- dataSources,
2926
- threshold,
2927
- isDownsamplingEnabled
2928
- });
2929
- evaluatedOptions = useDeepMemo(() => {
2930
- try {
2931
- if (useAsyncEvaluatedOptions) {
2932
- const asyncDynamicOptionsEvaluatorParams = {
2933
- visualizationID,
2934
- props,
2935
- options: optionsToEvaluate,
2936
- dataSources: downsampledDataSources,
2937
- theme: vizConfig.themes,
2938
- bypassCloneDeepOptionScope: Boolean(
2939
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
2940
- ),
2941
- lazyLoadingDataFrame: Boolean(
2942
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
2943
- )
2944
- };
2945
- async_dynamic_options_evaluator_default.evaluate(asyncDynamicOptionsEvaluatorParams).then((results) => {
2946
- setEvaluatedOptionsAsync(results.results);
2947
- }).catch(() => {
2948
- if (isMounted.current) {
2949
- setUseAsyncEvaluatedOptions(false);
2950
- }
2951
- });
2952
- } else {
2953
- let dataFrames = dataFramesInState;
2954
- if (downsampledDataSources !== dataSourcesInState) {
2955
- setDataSourcesInState(downsampledDataSources);
2956
- dataFrames = Options_exports.Options.dataFrameFromDataSource(
2957
- downsampledDataSources,
2958
- getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
2959
- );
2960
- setDataFramesInState(dataFrames);
2961
- }
2962
- const result = Options_exports.Options.evaluate(
2963
- optionsToEvaluate,
2964
- downsampledDataSources,
2965
- themeFunc,
2966
- dataFrames,
2967
- getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
2968
- );
2969
- return result;
2887
+ } else {
2888
+ errorCode = "INVALID_SPLIT_BY_FIELD";
2889
+ }
2890
+ return { splitDataSources, errorCode };
2891
+ };
2892
+ var dataSourcesSplitByAggregationsTimechartAndChart = (dataSource) => {
2893
+ var _a, _b, _c, _d;
2894
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
2895
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
2896
+ let splitDataSources = null;
2897
+ let splitByFields = [];
2898
+ let errorCode = null;
2899
+ if (typeof fields[0] !== "string") {
2900
+ splitByFields = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
2901
+ }
2902
+ if (splitByFields && splitByFields.length > 0) {
2903
+ splitDataSources = {};
2904
+ splitByFields.forEach((splitByField) => {
2905
+ splitDataSources[splitByField] = (0, lodash_exports.cloneDeep)(
2906
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
2907
+ );
2908
+ splitDataSources[splitByField].primary.data.fields = [fields[0]];
2909
+ splitDataSources[splitByField].primary.data.columns = [columns[0]];
2910
+ fields.forEach((field, idx) => {
2911
+ const fieldName = field == null ? void 0 : field.name;
2912
+ if (fieldName !== "_time" && !(fieldName == null ? void 0 : fieldName.startsWith("_")) && field.data_source === splitByField) {
2913
+ splitDataSources[splitByField].primary.data.fields.push(field);
2914
+ splitDataSources[splitByField].primary.data.columns.push(columns[idx]);
2970
2915
  }
2971
- } catch (e) {
2972
- console.error(`unexpected error evaluating options: ${e.message}`);
2973
- return {};
2974
- }
2975
- return {};
2976
- }, [
2977
- currentThemeFamily,
2978
- currentThemeColorScheme,
2979
- currentThemeDensity,
2980
- optionsToEvaluate,
2981
- downsampledDataSources,
2982
- serializedTimezone,
2983
- useAsyncEvaluatedOptions
2984
- ]);
2985
- const evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync;
2986
- const isTrellisFeatureFlagOn = Boolean(
2987
- featureFlagContext && featureFlagContext.visualizations_enableTrellis
2988
- );
2989
- let clonedEvaluatedOptions = evaluatedOptionsToUse;
2990
- if (isTrellisFeatureFlagOn && ((_a = vizConfig == null ? void 0 : vizConfig.supports) == null ? void 0 : _a.includes("trellis" /* TRELLIS */)) && (clonedEvaluatedOptions == null ? void 0 : clonedEvaluatedOptions.splitByLayout) === "trellis" /* TRELLIS */) {
2991
- clonedEvaluatedOptions = __spreadProps(__spreadValues({}, evaluatedOptionsToUse), {
2992
- backgroundColor: clonedEvaluatedOptions == null ? void 0 : clonedEvaluatedOptions.trellisBackgroundColor
2993
2916
  });
2994
- }
2995
- react_exports.useEffect(() => {
2996
- onComputedProps(clonedEvaluatedOptions);
2997
2917
  });
2998
- react_exports.useEffect(() => {
2999
- return () => {
3000
- if (useAsyncEvaluatedOptions) {
3001
- isMounted.current = false;
3002
- async_dynamic_options_evaluator_default.reset(visualizationID);
3003
- }
3004
- };
3005
- }, []);
3006
- const { requiredProps = [], supports } = vizConfig;
3007
- const missing = missingKeys(requiredProps, evaluatedOptionsToUse);
3008
- if (missing.length > 0 && supports.includes("placeholder" /* PLACEHOLDER */) && vizConfig.key !== "splunk.singlevalue") {
3009
- return /* @__PURE__ */ react_exports.createElement(
3010
- MissingPropsMessage_default,
3011
- {
3012
- "data-test": "missing-props-message",
3013
- width,
3014
- height,
3015
- missingProps: missing,
3016
- backgroundColor: bgColorFromTheme
3017
- }
2918
+ } else if ((!splitByFields || !splitByFields.length) && fields.length > 1) {
2919
+ splitDataSources = {};
2920
+ for (let i = 1; i < fields.length; i += 1) {
2921
+ const fieldName = fields[i].name;
2922
+ if (!(fieldName == null ? void 0 : fieldName.startsWith("_"))) {
2923
+ splitDataSources[fieldName] = (0, lodash_exports.cloneDeep)(
2924
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
2925
+ );
2926
+ splitDataSources[fieldName].primary.data.fields = [fields[0], fields[i]];
2927
+ splitDataSources[fieldName].primary.data.columns = [columns[0], columns[i]];
2928
+ }
2929
+ }
2930
+ } else {
2931
+ errorCode = "INVALID_SPLIT_BY_FIELD";
2932
+ }
2933
+ return { splitDataSources, errorCode };
2934
+ };
2935
+ var dataSourcesSplitByAggregationsStats = (dataSource) => {
2936
+ var _a, _b, _c, _d;
2937
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
2938
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
2939
+ let splitDataSources = null;
2940
+ let splitByFields = [];
2941
+ let errorCode = null;
2942
+ if (typeof fields[0] !== "string") {
2943
+ splitByFields = (0, trellisUtils_exports.extractDataSourceAggregationKeysStats)(fields);
2944
+ }
2945
+ if (splitByFields && splitByFields.length > 0) {
2946
+ splitDataSources = {};
2947
+ splitByFields.forEach((splitByField) => {
2948
+ splitDataSources[splitByField] = (0, lodash_exports.cloneDeep)(
2949
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
3018
2950
  );
2951
+ splitDataSources[splitByField].primary.data.fields = [fields[0]];
2952
+ splitDataSources[splitByField].primary.data.columns = [columns[0]];
2953
+ const idx = fields.findIndex((field) => field.name === splitByField);
2954
+ if (idx > 0) {
2955
+ splitDataSources[splitByField].primary.data.fields.push(fields[idx]);
2956
+ splitDataSources[splitByField].primary.data.columns.push(columns[idx]);
2957
+ }
2958
+ });
2959
+ } else {
2960
+ errorCode = "INVALID_SPLIT_BY_FIELD";
2961
+ }
2962
+ return { splitDataSources, errorCode };
2963
+ };
2964
+ var dataSourcesSplitByModeTimechart = (dataSource, splitBy) => {
2965
+ var _a, _b, _c, _d, _e;
2966
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
2967
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
2968
+ let splitDataSources = null;
2969
+ let splitByFields = [];
2970
+ let errorCode = null;
2971
+ if (typeof fields[0] !== "string") {
2972
+ splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
2973
+ }
2974
+ if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
2975
+ splitDataSources = {};
2976
+ const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
2977
+ const valueKeys = [];
2978
+ for (let i = 1; i < fields.length; i += 1) {
2979
+ if (!((_e = fields[i].name) == null ? void 0 : _e.startsWith("_"))) {
2980
+ valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);
2981
+ }
3019
2982
  }
3020
- const eventCallbackProps = {};
3021
- if (hasEventHandlers && mode === "view" && vizConfig.supports.indexOf("events" /* EVENTS */) > -1) {
3022
- const supportedEvents = vizConfig.events;
3023
- Object.keys(supportedEvents).forEach((eventName) => {
3024
- const { parentKeys, payloadKeys } = supportedEvents[eventName];
3025
- const eventCallbackPropName = (0, lodash_exports.camelCase)(`on.${eventName}`);
3026
- let payload = {};
3027
- if (Array.isArray(payloadKeys) && payloadKeys.length) {
3028
- payloadKeys.forEach((p) => {
3029
- payload[p] = evaluatedOptionsToUse[p];
3030
- });
3031
- }
3032
- eventCallbackProps[eventCallbackPropName] = (ev) => {
3033
- if (ev && ev.payload) {
3034
- payload = ev.payload;
3035
- }
3036
- return onEventTrigger({ originalEvent: ev, payload, type: eventName });
3037
- };
3038
- if (parentKeys) {
3039
- for (let i = parentKeys.length - 1; i >= 0; i -= 1) {
3040
- const newObject = {};
3041
- newObject[parentKeys[i]] = eventCallbackProps[eventCallbackPropName];
3042
- eventCallbackProps[eventCallbackPropName] = newObject;
2983
+ valueKeys.forEach((val) => {
2984
+ splitDataSources[val] = (0, lodash_exports.cloneDeep)(
2985
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
2986
+ );
2987
+ splitDataSources[val].primary.data.fields = [
2988
+ { name: fields[0].name },
2989
+ ...dataSourceKeys.map((k) => ({
2990
+ name: k
2991
+ }))
2992
+ ];
2993
+ splitDataSources[val].primary.data.columns = [[...columns[0]]];
2994
+ dataSourceKeys.forEach((dsKey) => {
2995
+ fields.forEach((field, idx) => {
2996
+ if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {
2997
+ splitDataSources[val].primary.data.columns.push([...columns[idx]]);
3043
2998
  }
3044
- }
2999
+ });
3045
3000
  });
3001
+ });
3002
+ } else {
3003
+ errorCode = "INVALID_SPLIT_BY_FIELD";
3004
+ }
3005
+ return { splitDataSources, errorCode };
3006
+ };
3007
+ var dataSourcesSplitByModeChart = (dataSource, splitBy) => {
3008
+ var _a, _b, _c, _d;
3009
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
3010
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
3011
+ let splitDataSources = null;
3012
+ let splitByFields = [];
3013
+ let errorCode = null;
3014
+ if (typeof fields[0] !== "string") {
3015
+ splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
3016
+ }
3017
+ if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
3018
+ splitDataSources = {};
3019
+ const splitByFieldIdx = splitByFields.findIndex((f) => f === splitBy);
3020
+ const otherSplitBy = splitByFields.filter((f) => f !== splitBy);
3021
+ const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
3022
+ const nonDataSourceAggregations = [];
3023
+ if (!dataSourceKeys.length && fields[0].groupby_rank === "0" && fields.length && !fields[1].groupby_rank) {
3024
+ for (let i = 1; i < fields.length; i += 1) {
3025
+ nonDataSourceAggregations.push(fields[i].name);
3026
+ }
3046
3027
  }
3047
- const computedVizProps = computeVizProps2(__spreadProps(__spreadValues(__spreadValues(__spreadValues({}, props), evaluatedOptionsToUse), eventCallbackProps), {
3048
- themeFunc
3049
- }));
3050
- let dataSourceMetadata = {};
3051
- const OptionKey = "paginateDataSourceKey";
3052
- const paginateDataSourceKey = (0, lodash_exports.has)(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey] || "primary";
3053
- if (vizConfig.supports.indexOf("page-and-sort" /* PAGE_AND_SORT */) > -1 && (0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
3054
- const requestParams = (0, lodash_exports.get)(dataSources, [paginateDataSourceKey, "requestParams"], {});
3055
- const meta = (0, lodash_exports.get)(dataSources, [paginateDataSourceKey, "meta"], {});
3056
- const handleRequestParamsChange = (payload) => onRequestParamsChange(paginateDataSourceKey, payload);
3057
- const sortParams = getSortingParams({
3058
- requestParams,
3059
- meta,
3060
- onRequestParamsChange: handleRequestParamsChange
3028
+ if (splitByFieldIdx === 0) {
3029
+ const valueKeys = (0, lodash_exports.cloneDeep)(columns[0]);
3030
+ valueKeys.forEach((val, idx) => {
3031
+ splitDataSources[val] = (0, lodash_exports.cloneDeep)(
3032
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
3033
+ );
3034
+ splitDataSources[val].primary.data.fields = [];
3035
+ if (otherSplitBy.length) {
3036
+ splitDataSources[val].primary.data.fields = [{ name: otherSplitBy[0] }];
3037
+ }
3038
+ if (dataSourceKeys.length) {
3039
+ const columnValues = [[]];
3040
+ splitDataSources[val].primary.data.fields = [
3041
+ ...splitDataSources[val].primary.data.fields,
3042
+ ...dataSourceKeys.map((k) => ({
3043
+ name: k
3044
+ }))
3045
+ ];
3046
+ dataSourceKeys.forEach(() => {
3047
+ columnValues.push([]);
3048
+ });
3049
+ for (let i = 1; i <= Math.ceil((fields.length - 1) / dataSourceKeys.length); i += 1) {
3050
+ columnValues[0].push(
3051
+ fields[i].splitby_value ? fields[i].splitby_value : fields[i].name
3052
+ );
3053
+ dataSourceKeys.forEach((dskey, dsIndx) => {
3054
+ const mul = (fields.length - 1) / dataSourceKeys.length;
3055
+ columnValues[dsIndx + 1].push(columns[i + dsIndx * mul][idx]);
3056
+ });
3057
+ }
3058
+ splitDataSources[val].primary.data.columns = columnValues;
3059
+ } else if (nonDataSourceAggregations.length) {
3060
+ const columnValues = [];
3061
+ fields.forEach((aggregationField, fieldIdx) => {
3062
+ if (fieldIdx > 0) {
3063
+ splitDataSources[val].primary.data.fields.push(aggregationField);
3064
+ columnValues.push([columns[fieldIdx][idx]]);
3065
+ }
3066
+ });
3067
+ splitDataSources[val].primary.data.columns = columnValues;
3068
+ }
3061
3069
  });
3062
- const paginatorParams = getPaginationParams({
3063
- requestParams,
3064
- meta,
3065
- onRequestParamsChange: handleRequestParamsChange
3070
+ } else {
3071
+ const valueKeys = [];
3072
+ for (let i = 1; i < fields.length; i += 1) {
3073
+ valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);
3074
+ }
3075
+ valueKeys.forEach((val) => {
3076
+ splitDataSources[val] = (0, lodash_exports.cloneDeep)(
3077
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
3078
+ );
3079
+ splitDataSources[val].primary.data.fields = [
3080
+ { name: otherSplitBy[0] },
3081
+ ...dataSourceKeys.map((k) => ({
3082
+ name: k
3083
+ }))
3084
+ ];
3085
+ splitDataSources[val].primary.data.columns = [[...columns[0]]];
3086
+ dataSourceKeys.forEach((dsKey) => {
3087
+ fields.forEach((field, idx) => {
3088
+ if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {
3089
+ splitDataSources[val].primary.data.columns.push([...columns[idx]]);
3090
+ }
3091
+ });
3092
+ });
3066
3093
  });
3067
- dataSourceMetadata = {
3068
- sortParams,
3069
- paginatorParams
3070
- };
3071
3094
  }
3072
- if (useAsyncEvaluatedOptions && Object.keys(evaluatedOptionsToUse).length === 0) {
3073
- return null;
3074
- }
3075
- return /* @__PURE__ */ react_exports.createElement(
3076
- SanitizedReactViz,
3077
- __spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
3078
- mode,
3079
- width,
3080
- height
3081
- }, downsamplingProps), evaluatedOptionsToUse), computedVizProps), eventCallbackProps), dataSourceMetadata)
3082
- );
3083
- };
3084
- DashboardViz.propTypes = __spreadValues(__spreadValues({}, SplunkVisualization_default.propTypes), ReactViz.propTypes);
3085
- DashboardViz.defaultProps = __spreadProps(__spreadValues(__spreadValues({}, SplunkVisualization_default.defaultProps), ReactViz.defaultProps), {
3086
- // using withTheme requires component to receive theme prop. In case the consumer did not provide ThemeProvider, a default empty object will prevent warnings.
3087
- theme: {}
3088
- });
3089
- DashboardViz.config = vizConfig;
3090
- return (0, styled_components_exports.withTheme)(
3091
- withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)
3092
- );
3095
+ } else {
3096
+ errorCode = "INVALID_SPLIT_BY_FIELD";
3097
+ }
3098
+ return { splitDataSources, errorCode };
3093
3099
  };
3094
- var withDashboardViz_default = withDashboardViz;
3095
-
3096
- // esm-externals:@splunk/visualization-color-palettes/editors/PresetPalettes
3097
- var PresetPalettes_exports = {};
3098
- __export(PresetPalettes_exports, {
3099
- default: () => PresetPalettes_default
3100
- });
3101
- var defaultImport33 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
3102
- __reExport(PresetPalettes_exports, require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
3103
- var PresetPalettes_default = "default" in defaultImport33 ? defaultImport33.default : defaultImport33;
3104
-
3105
- // esm-externals:@splunk/visualization-themes/variables
3106
- var variables_exports2 = {};
3107
- __export(variables_exports2, {
3108
- default: () => variables_default2
3109
- });
3110
- var defaultImport34 = __toESM(require("@splunk/visualization-themes/variables"));
3111
- __reExport(variables_exports2, require("@splunk/visualization-themes/variables"));
3112
- var variables_default2 = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
3113
-
3114
- // esm-externals:@splunk/themes/pick
3115
- var pick_exports2 = {};
3116
- __export(pick_exports2, {
3117
- default: () => pick_default2
3118
- });
3119
- var defaultImport35 = __toESM(require("@splunk/themes/pick"));
3120
- __reExport(pick_exports2, require("@splunk/themes/pick"));
3121
- var pick_default2 = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
3122
-
3123
- // esm-externals:@splunk/visualization-icons
3124
- var visualization_icons_exports = {};
3125
- __export(visualization_icons_exports, {
3126
- default: () => visualization_icons_default
3127
- });
3128
- var defaultImport36 = __toESM(require("@splunk/visualization-icons"));
3129
- __reExport(visualization_icons_exports, require("@splunk/visualization-icons"));
3130
- var visualization_icons_default = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
3131
-
3132
- // esm-externals:@splunk/visualization-icons/placeholders
3133
- var placeholders_exports = {};
3134
- __export(placeholders_exports, {
3135
- default: () => placeholders_default
3136
- });
3137
- var defaultImport37 = __toESM(require("@splunk/visualization-icons/placeholders"));
3138
- __reExport(placeholders_exports, require("@splunk/visualization-icons/placeholders"));
3139
- var placeholders_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
3140
-
3141
- // src/common/configContext/singleValueContext.ts
3142
- var defaultContext = {
3143
- trendColorConfig: [
3144
- {
3145
- to: 0,
3146
- value: "#9E2520"
3147
- },
3148
- {
3149
- from: 0,
3150
- value: "#1C6B2D"
3151
- }
3152
- ],
3153
- majorColorConfig: [
3154
- { to: 20, value: "#D41F1F" },
3155
- { from: 20, to: 40, value: "#D94E17" },
3156
- { from: 40, to: 60, value: "#CBA700" },
3157
- { from: 60, to: 80, value: "#669922" },
3158
- { from: 80, value: "#118832" }
3159
- ],
3160
- majorColorMatchConfig: [{ match: "", value: "#5C33FF" }]
3161
- };
3162
-
3163
- // esm-externals:@splunk/visualizations-shared/configUtils
3164
- var configUtils_exports = {};
3165
- __export(configUtils_exports, {
3166
- default: () => configUtils_default
3167
- });
3168
- var defaultImport38 = __toESM(require("@splunk/visualizations-shared/configUtils"));
3169
- __reExport(configUtils_exports, require("@splunk/visualizations-shared/configUtils"));
3170
- var configUtils_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
3171
-
3172
- // src/common/editorConfig/DynamicMajorColorEditor.js
3173
- var getDynamicMajorColorEditor = ({ defaultContext: defaultContext2, defaultPalettesConfig: defaultPalettesConfig2 }) => ({
3174
- label: (0, i18n_exports._)("Major value"),
3175
- option: "majorColor",
3176
- context: "majorColorEditorConfig",
3177
- editor: "editor.dynamicColor",
3178
- showEditor: ({ options }) => (0, configUtils_exports.isDynamicOption)(options.majorColor),
3179
- editorProps: {
3180
- labelPosition: "top",
3181
- flyoutTitle: (0, i18n_exports._)("Dynamic coloring: major value"),
3182
- formatters: [
3183
- {
3184
- label: (0, i18n_exports._)("Ranges"),
3185
- value: "rangeValue",
3186
- defaults: {
3187
- majorValue: defaultContext2.majorColorConfig
3188
- }
3189
- },
3190
- {
3191
- label: (0, i18n_exports._)("Matches"),
3192
- value: "matchValue",
3193
- defaults: {
3194
- majorValue: defaultContext2.majorColorMatchConfig
3195
- }
3196
- }
3197
- ],
3198
- dataSelectors: [
3199
- {
3200
- label: (0, i18n_exports._)("Major value"),
3201
- value: "majorValue"
3202
- }
3203
- ],
3204
- defaultPalettesConfig: defaultPalettesConfig2
3100
+ var dataSourcesSplitByModeStatsorUnknown = (dataSource, splitBy, splitMode) => {
3101
+ var _a, _b, _c, _d, _e, _f;
3102
+ const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
3103
+ const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
3104
+ let splitDataSources = null;
3105
+ let splitByFields = [];
3106
+ let errorCode = null;
3107
+ if (typeof fields[0] !== "string") {
3108
+ splitByFields = splitMode !== trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields);
3205
3109
  }
3206
- });
3207
-
3208
- // src/common/editorConfig/DynamicTrendColorEditor.js
3209
- var getDynamicTrendColorEditor = ({ defaultContext: defaultContext2, defaultPalettesConfig: defaultPalettesConfig2 }) => ({
3210
- label: (0, i18n_exports._)("Trend value"),
3211
- option: "trendColor",
3212
- context: "trendColorEditorConfig",
3213
- editor: "editor.dynamicColor",
3214
- showEditor: ({ options }) => (0, configUtils_exports.isDynamicOption)(options.trendColor),
3215
- editorProps: {
3216
- labelPosition: "top",
3217
- flyoutTitle: (0, i18n_exports._)("Dynamic coloring: trend value"),
3218
- formatters: [
3219
- {
3220
- label: (0, i18n_exports._)("Ranges"),
3221
- value: "rangeValue",
3222
- defaults: {
3223
- trendValue: defaultContext2.trendColorConfig
3224
- }
3225
- }
3226
- ],
3227
- dataSelectors: [
3228
- {
3229
- label: (0, i18n_exports._)("Trend value"),
3230
- value: "trendValue"
3110
+ const splitByIndex = fields == null ? void 0 : fields.findIndex(
3111
+ (field) => field === splitBy || field.name === splitBy
3112
+ );
3113
+ if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
3114
+ const splitByColumn = (_f = (_e = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _e.data) == null ? void 0 : _f.columns[splitByIndex];
3115
+ splitDataSources = {};
3116
+ splitByColumn.forEach((val, idx) => {
3117
+ if (!splitDataSources[val]) {
3118
+ splitDataSources[val] = [idx];
3119
+ } else {
3120
+ splitDataSources[val].push(idx);
3231
3121
  }
3232
- ],
3233
- defaultPalettesConfig: defaultPalettesConfig2
3234
- }
3235
- });
3236
-
3237
- // src/common/editorConfig/DynamicBackgroundColorEditor.js
3238
- var getDynamicBackgroundColorEditor = ({ defaultContext: defaultContext2, defaultPalettesConfig: defaultPalettesConfig2 }) => ({
3239
- label: (0, i18n_exports._)("Background color"),
3240
- option: "backgroundColor",
3241
- context: "backgroundColorEditorConfig",
3242
- editor: "editor.dynamicColor",
3243
- showEditor: ({ options }) => (0, configUtils_exports.isDynamicOption)(options.backgroundColor),
3244
- editorProps: {
3245
- labelPosition: "top",
3246
- flyoutTitle: (0, i18n_exports._)("Dynamic coloring: background"),
3247
- formatters: [
3248
- {
3249
- label: (0, i18n_exports._)("Ranges"),
3250
- value: "rangeValue",
3251
- defaults: {
3252
- majorValue: defaultContext2.majorColorConfig,
3253
- trendValue: defaultContext2.trendColorConfig
3254
- }
3255
- },
3256
- {
3257
- label: (0, i18n_exports._)("Matches"),
3258
- value: "matchValue",
3259
- defaults: {
3260
- majorValue: defaultContext2.majorColorMatchConfig
3122
+ });
3123
+ const cloneFields = (0, lodash_exports.cloneDeep)(fields);
3124
+ cloneFields.splice(splitByIndex, 1);
3125
+ const valueKeys = Object.keys(splitDataSources);
3126
+ valueKeys.forEach((val) => {
3127
+ const valIndices = (0, lodash_exports.cloneDeep)(splitDataSources[val]);
3128
+ splitDataSources[val] = (0, lodash_exports.cloneDeep)(
3129
+ (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
3130
+ );
3131
+ splitDataSources[val].primary.data.fields = cloneFields;
3132
+ splitDataSources[val].primary.data.columns = [];
3133
+ columns.forEach((col, idx) => {
3134
+ if (idx !== splitByIndex) {
3135
+ const newCol = valIndices.map((valIdx) => col[valIdx]);
3136
+ splitDataSources[val].primary.data.columns.push(newCol);
3261
3137
  }
3262
- }
3263
- ],
3264
- dataSelectors: [
3265
- {
3266
- label: (0, i18n_exports._)("Major Value"),
3267
- value: "majorValue"
3268
- },
3269
- {
3270
- label: (0, i18n_exports._)("Trend"),
3271
- value: "trendValue"
3272
- }
3273
- ],
3274
- defaultPalettesConfig: defaultPalettesConfig2
3138
+ });
3139
+ });
3140
+ } else {
3141
+ errorCode = "INVALID_SPLIT_BY_FIELD";
3275
3142
  }
3276
- });
3277
-
3278
- // src/common/editorConfig/StaticMajorAndTrendLayout.js
3279
- var StaticMajorAndTrendLayout = [
3280
- [
3281
- {
3282
- label: (0, i18n_exports._)("Unit position"),
3283
- // todo: we need a new editor combining unit and position
3284
- option: "unitPosition",
3285
- editor: "editor.select",
3286
- editorProps: {
3287
- values: [
3288
- { label: (0, i18n_exports._)("Before"), value: "before" },
3289
- { label: (0, i18n_exports._)("After"), value: "after" }
3290
- ]
3291
- },
3292
- showEditor: ({ options }) => options.showValue || options.showValue === void 0
3293
- },
3294
- {
3295
- label: (0, i18n_exports._)("Unit label"),
3296
- option: "unit",
3297
- editor: "editor.text",
3298
- showEditor: ({ options }) => options.showValue || options.showValue === void 0
3299
- }
3300
- ],
3301
- [
3302
- {
3303
- label: (0, i18n_exports._)("Precision"),
3304
- option: "numberPrecision",
3305
- editor: "editor.number",
3306
- editorProps: {
3307
- min: 0,
3308
- max: 20
3309
- },
3310
- showEditor: ({ options }) => options.showValue || options.showValue === void 0
3143
+ return { splitDataSources, errorCode };
3144
+ };
3145
+ var getTrellisDataSourcesBySplitMode = (splitMode, dataSources, trellisSplitBy) => {
3146
+ let result = null;
3147
+ try {
3148
+ if (splitMode === trellisUtils_exports.TIMECHART) {
3149
+ result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources) : dataSourcesSplitByModeTimechart(dataSources, trellisSplitBy);
3150
+ } else if (splitMode === trellisUtils_exports.STATS) {
3151
+ result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsStats(dataSources) : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, trellisUtils_exports.STATS);
3152
+ } else if (splitMode === trellisUtils_exports.CHART) {
3153
+ result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources) : dataSourcesSplitByModeChart(dataSources, trellisSplitBy);
3154
+ } else if (splitMode === trellisUtils_exports.UNKNOWN) {
3155
+ result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsUnknown(dataSources) : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, trellisUtils_exports.UNKNOWN);
3311
3156
  }
3312
- ]
3313
- ];
3314
- var StaticMajorAndTrendLayout_default = StaticMajorAndTrendLayout;
3315
-
3316
- // src/common/editorConfig/StaticMajorColorEditor.js
3317
- var StaticMajorColorEditor = {
3318
- label: (0, i18n_exports._)("Major value"),
3319
- option: "majorColor",
3320
- editor: "editor.color",
3321
- showEditor: ({ options }) => !(0, configUtils_exports.isDynamicOption)(options.majorColor)
3157
+ } catch (ex) {
3158
+ console.error("getTrellisDataSourcesBySplitMode ", ex);
3159
+ result = { splitDataSources: null, errorCode: "UNKNOWN" };
3160
+ }
3161
+ return result;
3322
3162
  };
3323
- var StaticMajorColorEditor_default = StaticMajorColorEditor;
3324
-
3325
- // src/common/editorConfig/StaticTrendColorEditor.js
3326
- var StaticTrendColorEditor = {
3327
- label: (0, i18n_exports._)("Trend value"),
3328
- option: "trendColor",
3329
- editor: "editor.color",
3330
- showEditor: ({ options }) => !(0, configUtils_exports.isDynamicOption)(options.trendColor),
3331
- isDisabled: ({ options }) => options.trendDisplay === "off"
3332
- };
3333
- var StaticTrendColorEditor_default = StaticTrendColorEditor;
3334
-
3335
- // src/common/editorConfig/StaticBackgroundColorEditor.js
3336
- var StaticBackgroundColorEditor = {
3337
- label: (0, i18n_exports._)("Background color"),
3338
- option: "backgroundColor",
3339
- editor: "editor.color",
3340
- showEditor: ({ options }) => !(0, configUtils_exports.isDynamicOption)(options.backgroundColor)
3163
+ var turnOffLegendDisplayWhenTrellisIsOn = (isTrellisOn, options) => {
3164
+ if (isTrellisOn && !options.legendDisplay) {
3165
+ return {
3166
+ legendDisplay: "off"
3167
+ };
3168
+ }
3169
+ return {};
3341
3170
  };
3342
- var StaticBackgroundColorEditor_default = StaticBackgroundColorEditor;
3343
-
3344
- // src/common/utils/configUtils.ts
3345
- function enhanceConfig(vizConfig) {
3346
- const enhancedConfig = __spreadValues({}, vizConfig);
3347
- enhancedConfig.editorConfig = vizConfig.editorConfig.map(
3348
- (config3) => {
3349
- return __spreadProps(__spreadValues({}, config3), { open: config3.open || false });
3350
- }
3351
- );
3352
- return enhancedConfig;
3353
- }
3354
- function hasCompatibleContexts(vizContext, presetContext) {
3355
- const presetContextKeys = Object.keys(presetContext);
3356
- return presetContextKeys.every(
3357
- (contextKey) => presetContext[contextKey] === void 0 && vizContext[contextKey] === void 0 || presetContext[contextKey] !== void 0 && vizContext[contextKey] !== void 0
3358
- );
3359
- }
3360
- function hasCompatibleOptions(vizOptions, presetOptions) {
3361
- const presetOptionKeys = Object.keys(presetOptions);
3362
- return presetOptionKeys.every(
3363
- (optionKey) => (0, configUtils_exports.isDynamicOption)(presetOptions[optionKey]) === (0, configUtils_exports.isDynamicOption)(vizOptions[optionKey])
3364
- );
3365
- }
3366
- function getInitialPreset(vizContext, vizOptions, presets2) {
3367
- return presets2.find((preset) => {
3368
- const presetContext = (0, lodash_exports.get)(preset, ["value", "context"], {});
3369
- const presetOptions = (0, lodash_exports.get)(preset, ["value", "options"], {});
3370
- const presetContextKeys = Object.keys(presetContext);
3371
- const presetOptionKeys = Object.keys(presetOptions);
3372
- if (presetContextKeys.length === 0 || presetOptionKeys.length === 0) return false;
3373
- return hasCompatibleContexts(vizContext, presetContext) && hasCompatibleOptions(vizOptions, presetOptions);
3171
+ var calculateSharedMinMax = (splitData) => {
3172
+ let max2 = -Infinity;
3173
+ let min2 = Infinity;
3174
+ Object.keys(splitData).forEach((splitByKey) => {
3175
+ const datasources = splitData[splitByKey];
3176
+ Object.keys(datasources).forEach((datasourceName) => {
3177
+ const dataColumns = datasources[datasourceName].data.columns;
3178
+ dataColumns.forEach((column) => {
3179
+ column.forEach((point) => {
3180
+ const pointNumber = Number(point);
3181
+ if (pointNumber > max2) {
3182
+ max2 = pointNumber;
3183
+ }
3184
+ if (pointNumber < min2) {
3185
+ min2 = pointNumber;
3186
+ }
3187
+ });
3188
+ });
3189
+ });
3374
3190
  });
3375
- }
3191
+ return [min2, max2];
3192
+ };
3193
+ var determineMinMax = (splitData, trellisSharedScale, yAxisMin, yAxisMax, stackMode) => {
3194
+ if (!trellisSharedScale || stackMode === "stacked100" || yAxisMin !== "auto" && yAxisMax !== "auto")
3195
+ return [yAxisMin, yAxisMax];
3196
+ const [sharedMin, sharedMax] = calculateSharedMinMax(splitData);
3197
+ const shouldUseSharedMax = sharedMax !== -Infinity && yAxisMax === "auto";
3198
+ const shouldUseSharedMin = sharedMin !== Infinity && yAxisMin === "auto";
3199
+ return [shouldUseSharedMin ? sharedMin : yAxisMin, shouldUseSharedMax ? sharedMax : yAxisMax];
3200
+ };
3376
3201
 
3377
- // src/common/editorConfig/TrellisEditors.ts
3378
- var TrellisEditorConfig = [
3379
- [
3380
- {
3381
- label: (0, i18n_exports._)("Trellis layout"),
3382
- option: "splitByLayout",
3383
- editor: "editor.toggle",
3384
- showEditor: () => {
3385
- const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
3386
- const isTrellisFeatureFlagOn = Boolean(
3387
- featureFlagContext && featureFlagContext.visualizations_enableTrellis
3388
- );
3389
- return isTrellisFeatureFlagOn;
3390
- }
3391
- }
3392
- ],
3393
- [
3394
- {
3395
- label: (0, i18n_exports._)("Split by"),
3396
- option: "trellisSplitBy",
3397
- editor: "editor.trellisSplitBy",
3398
- editorProps: {
3399
- dataSourceKey: "primary"
3400
- },
3401
- showEditor: ({ options }) => {
3402
- const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
3403
- const isTrellisFeatureFlagOn = Boolean(
3404
- featureFlagContext && featureFlagContext.visualizations_enableTrellis
3405
- );
3406
- return isTrellisFeatureFlagOn && options.splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
3407
- }
3408
- }
3409
- ],
3410
- [
3411
- {
3412
- label: (0, i18n_exports._)("Number of columns"),
3413
- option: "trellisColumns",
3414
- editor: "editor.number",
3415
- editorProps: {
3416
- min: 1
3417
- },
3418
- placeholder: (0, i18n_exports._)("Auto"),
3419
- showEditor: ({ options }) => {
3420
- const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
3421
- const isTrellisFeatureFlagOn = Boolean(
3422
- featureFlagContext && featureFlagContext.visualizations_enableTrellis
3423
- );
3424
- return isTrellisFeatureFlagOn && options.splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
3425
- }
3426
- }
3427
- ],
3428
- [
3429
- {
3430
- label: (0, i18n_exports._)("Min column width"),
3431
- option: "trellisMinColumnWidth",
3432
- editor: "editor.number",
3433
- editorProps: {
3434
- min: 1
3435
- },
3436
- showEditor: ({ options }) => {
3437
- const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
3438
- const isTrellisFeatureFlagOn = Boolean(
3439
- featureFlagContext && featureFlagContext.visualizations_enableTrellis
3440
- );
3441
- return isTrellisFeatureFlagOn && options.splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
3442
- }
3202
+ // src/common/withDashboardViz.tsx
3203
+ var withDashboardViz = (opts) => {
3204
+ const {
3205
+ ReactViz,
3206
+ vizConfig,
3207
+ computeVizProps: computeVizProps2 = () => {
3443
3208
  },
3444
- {
3445
- label: (0, i18n_exports._)("Row height"),
3446
- option: "trellisRowHeight",
3447
- editor: "editor.number",
3448
- editorProps: {
3449
- min: 1
3450
- },
3451
- showEditor: ({ options }) => {
3452
- const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
3453
- const isTrellisFeatureFlagOn = Boolean(
3454
- featureFlagContext && featureFlagContext.visualizations_enableTrellis
3455
- );
3456
- return isTrellisFeatureFlagOn && options.splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
3457
- }
3458
- }
3459
- ],
3460
- [
3461
- {
3462
- label: (0, i18n_exports._)("Max number of components per page"),
3463
- option: "trellisPageCount",
3464
- editor: "editor.number",
3465
- editorProps: {
3466
- min: 1
3467
- },
3468
- showEditor: ({ options }) => {
3469
- const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
3470
- const isTrellisFeatureFlagOn = Boolean(
3471
- featureFlagContext && featureFlagContext.visualizations_enableTrellis
3472
- );
3473
- return isTrellisFeatureFlagOn && options.splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
3209
+ computeVizPropsBeforeEval: computeVizPropsBeforeEval2 = () => {
3210
+ },
3211
+ disableEditModeCover,
3212
+ useIconPlaceholder
3213
+ } = opts;
3214
+ const SanitizedReactViz = (0, SanitizeProps_exports.withSanitizedProps)(ReactViz);
3215
+ const defaultOptions = (0, JSONSchemaUtils_exports.pickFieldFromJSONSchema)(vizConfig.optionsSchema, "default");
3216
+ const DashboardViz = (props) => {
3217
+ var _a;
3218
+ const {
3219
+ mode,
3220
+ hasEventHandlers,
3221
+ dataSources,
3222
+ // type of { [key: string]: DataSource }
3223
+ options,
3224
+ context = {},
3225
+ width,
3226
+ height,
3227
+ onComputedProps,
3228
+ onEventTrigger,
3229
+ theme,
3230
+ onRequestParamsChange
3231
+ } = props;
3232
+ const { serializedTimezone } = react_exports.useContext(TimezoneContext_default);
3233
+ if (serializedTimezone) {
3234
+ if (!moment_default.getDefaultSplunkTimezone()) {
3235
+ moment_default.setDefaultSplunkTimezone(serializedTimezone);
3474
3236
  }
3475
3237
  }
3476
- ]
3477
- ];
3478
- var TrellisBackgroundColorEditor = {
3479
- label: (0, i18n_exports._)("Trellis background"),
3480
- option: "trellisBackgroundColor",
3481
- editor: "editor.color",
3482
- showEditor: ({ options }) => {
3238
+ const themeFunc = (themeVar) => {
3239
+ var _a2, _b;
3240
+ return (_b = (_a2 = vizConfig.themes)[themeVar]) == null ? void 0 : _b.call(_a2, props);
3241
+ };
3242
+ const bgColorFromTheme = themeFunc("defaultBackgroundColor");
3243
+ const {
3244
+ family: currentThemeFamily,
3245
+ colorScheme: currentThemeColorScheme,
3246
+ density: currentThemeDensity
3247
+ } = getSettingsFromThemedProps_default({ theme });
3248
+ let evaluatedOptions = {};
3249
+ const [evaluatedOptionsAsync, setEvaluatedOptionsAsync] = react_exports.useState({});
3483
3250
  const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
3484
- const isTrellisFeatureFlagOn = Boolean(
3251
+ const [visualizationID] = react_exports.useState(`${vizConfig.name} - ${(0, id_exports.createGUID)()}`);
3252
+ const [dataSourcesInState, setDataSourcesInState] = react_exports.useState({});
3253
+ const [dataFramesInState, setDataFramesInState] = react_exports.useState();
3254
+ const [useAsyncEvaluatedOptions, setUseAsyncEvaluatedOptions] = react_exports.useState(
3255
+ Boolean(getFeatureFlag(featureFlagContext, "visualizations_useWebWorkersForDSL"))
3256
+ );
3257
+ const isDownsamplingEnabledByFeatureFlag = Boolean(
3258
+ featureFlagContext == null ? void 0 : featureFlagContext.visualizations_enableDownsampling
3259
+ );
3260
+ const isTrellisFeatureFlagOn2 = Boolean(
3485
3261
  featureFlagContext && featureFlagContext.visualizations_enableTrellis
3486
3262
  );
3487
- return isTrellisFeatureFlagOn && options.splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
3488
- }
3489
- };
3490
-
3491
- // src/SingleValue/config.ts
3492
- var dataContract = {
3493
- requiredDataSources: [
3494
- {
3495
- name: "primary",
3496
- description: "DataSource that powers the visualization"
3497
- }
3498
- ],
3499
- optionalDataSources: [],
3500
- initialRequestParams: {
3501
- primary: { offset: 0, count: 1e4 }
3502
- }
3503
- };
3504
- var size = {
3505
- initialWidth: 250,
3506
- initialHeight: 250
3507
- };
3508
- var basePresetContext = {
3509
- majorColorEditorConfig: void 0,
3510
- trendColorEditorConfig: void 0,
3511
- backgroundColorEditorConfig: void 0
3512
- };
3513
- var basePresetOptions = {
3514
- majorColor: void 0,
3515
- trendColor: void 0,
3516
- backgroundColor: void 0
3517
- };
3518
- var presets = [
3519
- {
3520
- // dummy context variables to allow for resetting of unused context states
3521
- label: (0, i18n_exports._)("None"),
3522
- name: "singleValue.none",
3523
- value: {
3524
- context: __spreadValues({}, basePresetContext),
3525
- options: __spreadValues({}, basePresetOptions)
3526
- }
3527
- },
3528
- {
3529
- label: (0, i18n_exports._)("Major value"),
3530
- name: "singleValue.majorValue",
3531
- value: {
3532
- context: __spreadProps(__spreadValues({}, basePresetContext), {
3533
- majorColorEditorConfig: defaultContext.majorColorConfig
3534
- }),
3535
- options: __spreadProps(__spreadValues({}, basePresetOptions), {
3536
- majorColor: "> majorValue | rangeValue(majorColorEditorConfig)"
3537
- })
3538
- }
3539
- },
3540
- {
3541
- label: (0, i18n_exports._)("Trend value"),
3542
- name: "singleValue.trend",
3543
- value: {
3544
- context: __spreadProps(__spreadValues({}, basePresetContext), {
3545
- trendColorEditorConfig: defaultContext.trendColorConfig
3546
- }),
3547
- options: __spreadProps(__spreadValues({}, basePresetOptions), {
3548
- trendColor: "> trendValue | rangeValue(trendColorEditorConfig)"
3549
- })
3550
- }
3551
- },
3552
- {
3553
- label: (0, i18n_exports._)("Major value and Trend value"),
3554
- name: "singleValue.majorValueAndTrend",
3555
- value: {
3556
- context: __spreadProps(__spreadValues({}, basePresetContext), {
3557
- majorColorEditorConfig: defaultContext.majorColorConfig,
3558
- trendColorEditorConfig: defaultContext.trendColorConfig
3559
- }),
3560
- options: __spreadProps(__spreadValues({}, basePresetOptions), {
3561
- majorColor: "> majorValue | rangeValue(majorColorEditorConfig)",
3562
- trendColor: "> trendValue | rangeValue(trendColorEditorConfig)"
3563
- })
3564
- }
3565
- },
3566
- {
3567
- label: (0, i18n_exports._)("Background"),
3568
- name: "singleValue.background",
3569
- value: {
3570
- context: __spreadProps(__spreadValues({}, basePresetContext), {
3571
- backgroundColorEditorConfig: defaultContext.majorColorConfig
3572
- }),
3573
- options: __spreadProps(__spreadValues({}, basePresetOptions), {
3574
- backgroundColor: "> majorValue | rangeValue(backgroundColorEditorConfig)"
3575
- })
3576
- }
3577
- }
3578
- ];
3579
- var themes = {
3580
- defaultFontColor: (props) => pick_default2({
3581
- enterprise: {
3582
- dark: variables_default.textColor(props),
3583
- light: variables_default.gray20(props)
3584
- },
3585
- prisma: variables_default.contentColorActive(props)
3586
- })(props),
3587
- defaultBlockFontColor: (props) => pick_default2({
3588
- enterprise: variables_default.white(props),
3589
- prisma: variables_default.contentColorActive(props)
3590
- })(props),
3591
- defaultBackgroundColor: (props) => pick_default2({
3592
- enterprise: {
3593
- dark: variables_default.black(props),
3594
- light: variables_default.backgroundColor(props)
3595
- },
3596
- prisma: variables_default.backgroundColorSidebar(props)
3597
- })(props),
3598
- defaultSparklineStrokeColor: (props) => pick_default2({
3599
- enterprise: variables_default.textColor(props),
3600
- prisma: variables_default.contentColorActive(props)
3601
- })(props),
3602
- // TODO(fkurniawan): update with SCP-36839
3603
- sparklineSeverityColors: (props) => pick_default2({
3604
- enterprise: {
3605
- dark: JSON.stringify({
3606
- none: {
3607
- background: variables_exports2.enterpriseDark.gray60,
3608
- // note: may need update later
3609
- stroke: variables_exports2.enterpriseDark.white
3610
- },
3611
- low: {
3612
- background: variables_exports2.enterpriseDark.successColorD50,
3613
- stroke: variables_exports2.enterpriseDark.white
3614
- },
3615
- guarded: {
3616
- background: variables_exports2.enterpriseDark.infoColorD50,
3617
- stroke: variables_exports2.enterpriseDark.white
3618
- },
3619
- elevated: {
3620
- background: variables_exports2.enterpriseDark.warningColorD50,
3621
- stroke: variables_exports2.enterpriseDark.white
3622
- },
3623
- high: {
3624
- background: variables_exports2.enterpriseDark.alertColorD50,
3625
- stroke: variables_exports2.enterpriseDark.white
3626
- },
3627
- severe: {
3628
- background: variables_exports2.enterpriseDark.errorColorD50,
3629
- stroke: variables_exports2.enterpriseDark.white
3630
- }
3631
- }),
3632
- light: JSON.stringify({
3633
- none: {
3634
- background: variables_exports2.enterprise.gray60,
3635
- stroke: variables_exports2.enterprise.gray20
3636
- },
3637
- low: {
3638
- background: variables_exports2.enterprise.successColorD50,
3639
- stroke: variables_exports2.enterprise.white
3640
- },
3641
- guarded: {
3642
- background: variables_exports2.enterprise.infoColorD50,
3643
- stroke: variables_exports2.enterprise.white
3644
- },
3645
- elevated: {
3646
- background: variables_exports2.enterprise.warningColorD50,
3647
- stroke: variables_exports2.enterprise.white
3648
- },
3649
- high: {
3650
- background: variables_exports2.enterprise.alertColorD50,
3651
- stroke: variables_exports2.enterprise.white
3652
- },
3653
- severe: {
3654
- background: variables_exports2.enterprise.errorColorD50,
3655
- stroke: variables_exports2.enterprise.white
3656
- }
3657
- })
3658
- },
3659
- prisma: JSON.stringify({
3660
- none: {
3661
- background: variables_exports2.scp.gray52,
3662
- stroke: variables_exports2.scp.white
3663
- },
3664
- low: {
3665
- background: variables_exports2.scp.successColorD50,
3666
- stroke: variables_exports2.scp.white
3667
- },
3668
- guarded: {
3669
- background: variables_exports2.scp.infoColorD50,
3670
- stroke: variables_exports2.scp.white
3671
- },
3672
- elevated: {
3673
- background: variables_exports2.scp.warningColorD50,
3674
- stroke: variables_exports2.scp.white
3675
- },
3676
- high: {
3677
- background: variables_exports2.scp.alertColorD50,
3678
- stroke: variables_exports2.scp.white
3679
- },
3680
- severe: {
3681
- background: variables_exports2.scp.errorColorD50,
3682
- stroke: variables_exports2.scp.white
3263
+ 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 */;
3264
+ const isMounted = react_exports.useRef(true);
3265
+ const optionsToEvaluate = react_exports.useMemo(() => {
3266
+ var _a2;
3267
+ const legendDisplay = turnOffLegendDisplayWhenTrellisIsOn(isTrellisOn, options);
3268
+ const computedOptions = (_a2 = computeVizPropsBeforeEval2(options)) != null ? _a2 : {};
3269
+ return {
3270
+ context: (0, lodash_exports.defaultsDeep)({}, context, vizConfig.defaultContext),
3271
+ options: (0, hocUtils_exports.deepMergeWithArrayPrimitiveOverrides)(
3272
+ {},
3273
+ legendDisplay,
3274
+ computedOptions,
3275
+ options,
3276
+ defaultOptions
3277
+ )
3278
+ };
3279
+ }, [isTrellisOn, options, context]);
3280
+ const [threshold, setThreshold] = react_exports.useState(Number(width));
3281
+ const onDownsamplingThresholdChange = react_exports.useCallback((newThreshold) => {
3282
+ setThreshold(newThreshold);
3283
+ }, []);
3284
+ const isDownsamplingEnabled = react_exports.useMemo(() => {
3285
+ return isDownsamplingEnabledByFeatureFlag && isDownsamplingEnabledForViz({ vizConfig });
3286
+ }, [isDownsamplingEnabledByFeatureFlag]);
3287
+ const downsamplingProps = react_exports.useMemo(() => {
3288
+ if (!isDownsamplingEnabled) {
3289
+ return {};
3683
3290
  }
3684
- })
3685
- })(props)
3686
- };
3687
- var editorConfig = [
3688
- {
3689
- label: (0, i18n_exports._)("Data configurations"),
3690
- layout: [
3691
- [
3692
- {
3693
- label: (0, i18n_exports._)("Value"),
3694
- editor: "editor.columnSelector",
3695
- option: "sparklineValues",
3696
- context: "sparklineValuesContext",
3697
- editorProps: {
3698
- dataSourceKey: "primary",
3699
- prepareValue: (definition) => {
3700
- const {
3701
- options: { sparklineValues }
3702
- } = definition;
3703
- return {
3704
- context: {},
3705
- options: {
3706
- majorValue: `> sparklineValues | lastPoint()`,
3707
- trendValue: `> sparklineValues | delta(-2)`,
3708
- sparklineValues
3709
- }
3710
- };
3291
+ return {
3292
+ onDownsamplingThresholdChange,
3293
+ originalDataSources: dataSources
3294
+ };
3295
+ }, [dataSources, isDownsamplingEnabled, onDownsamplingThresholdChange]);
3296
+ const downsampledDataSources = useDownsampleDataSources_default({
3297
+ options: optionsToEvaluate.options,
3298
+ context: optionsToEvaluate.context,
3299
+ dataSources,
3300
+ threshold,
3301
+ isDownsamplingEnabled
3302
+ });
3303
+ evaluatedOptions = useDeepMemo(() => {
3304
+ try {
3305
+ if (useAsyncEvaluatedOptions) {
3306
+ const asyncDynamicOptionsEvaluatorParams = {
3307
+ visualizationID,
3308
+ props,
3309
+ options: optionsToEvaluate,
3310
+ dataSources: downsampledDataSources,
3311
+ theme: vizConfig.themes,
3312
+ bypassCloneDeepOptionScope: Boolean(
3313
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
3314
+ ),
3315
+ lazyLoadingDataFrame: Boolean(
3316
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
3317
+ )
3318
+ };
3319
+ async_dynamic_options_evaluator_default.evaluate(asyncDynamicOptionsEvaluatorParams).then((results) => {
3320
+ setEvaluatedOptionsAsync(results.results);
3321
+ }).catch(() => {
3322
+ if (isMounted.current) {
3323
+ setUseAsyncEvaluatedOptions(false);
3711
3324
  }
3712
- },
3713
- isDisabled: ({ options }) => options.splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis
3714
- }
3715
- ]
3716
- ]
3717
- },
3718
- {
3719
- label: (0, i18n_exports._)("Data display"),
3720
- layout: [
3721
- ...StaticMajorAndTrendLayout_default,
3722
- [
3723
- {
3724
- label: (0, i18n_exports._)("Trend display"),
3725
- option: "trendDisplay",
3726
- editor: "editor.select",
3727
- editorProps: {
3728
- values: [
3729
- { label: (0, i18n_exports._)("Percent"), value: "percent" },
3730
- { label: (0, i18n_exports._)("Absolute"), value: "absolute" },
3731
- { label: (0, i18n_exports._)("Off"), value: "off" }
3732
- ]
3733
- },
3734
- showEditor: ({ options }) => options.showValue || options.showValue === void 0
3735
- },
3736
- {
3737
- label: (0, i18n_exports._)("Sparkline display"),
3738
- option: "sparklineDisplay",
3739
- editor: "editor.select",
3740
- editorProps: {
3741
- values: [
3742
- { label: (0, i18n_exports._)("Off"), value: "off" },
3743
- { label: (0, i18n_exports._)("Before"), value: "before" },
3744
- { label: (0, i18n_exports._)("Below"), value: "below" },
3745
- { label: (0, i18n_exports._)("After"), value: "after" }
3746
- ]
3325
+ });
3326
+ } else {
3327
+ let dataFrames = dataFramesInState;
3328
+ if (downsampledDataSources !== dataSourcesInState) {
3329
+ setDataSourcesInState(downsampledDataSources);
3330
+ dataFrames = Options_exports.Options.dataFrameFromDataSource(
3331
+ downsampledDataSources,
3332
+ getFeatureFlag(featureFlagContext, "visualizations_lazyLoadingDataFrame")
3333
+ );
3334
+ setDataFramesInState(dataFrames);
3747
3335
  }
3336
+ const result = Options_exports.Options.evaluate(
3337
+ optionsToEvaluate,
3338
+ downsampledDataSources,
3339
+ themeFunc,
3340
+ dataFrames,
3341
+ getFeatureFlag(featureFlagContext, "visualizations_bypassCloneDeepOptionScope")
3342
+ );
3343
+ return result;
3344
+ }
3345
+ } catch (e) {
3346
+ console.error(`unexpected error evaluating options: ${e.message}`);
3347
+ return {};
3348
+ }
3349
+ return {};
3350
+ }, [
3351
+ currentThemeFamily,
3352
+ currentThemeColorScheme,
3353
+ currentThemeDensity,
3354
+ optionsToEvaluate,
3355
+ downsampledDataSources,
3356
+ serializedTimezone,
3357
+ useAsyncEvaluatedOptions
3358
+ ]);
3359
+ const evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync;
3360
+ let clonedEvaluatedOptions = evaluatedOptionsToUse;
3361
+ if (isTrellisOn) {
3362
+ clonedEvaluatedOptions = __spreadProps(__spreadValues({}, evaluatedOptionsToUse), {
3363
+ backgroundColor: clonedEvaluatedOptions == null ? void 0 : clonedEvaluatedOptions.trellisBackgroundColor
3364
+ });
3365
+ }
3366
+ react_exports.useEffect(() => {
3367
+ onComputedProps(clonedEvaluatedOptions);
3368
+ });
3369
+ react_exports.useEffect(() => {
3370
+ return () => {
3371
+ if (useAsyncEvaluatedOptions) {
3372
+ isMounted.current = false;
3373
+ async_dynamic_options_evaluator_default.reset(visualizationID);
3748
3374
  }
3749
- ],
3750
- ...TrellisEditorConfig
3751
- ]
3752
- },
3753
- {
3754
- label: (0, i18n_exports._)("Color and style"),
3755
- layout: [
3756
- [
3375
+ };
3376
+ }, []);
3377
+ const { requiredProps = [], supports } = vizConfig;
3378
+ const missing = missingKeys(requiredProps, evaluatedOptionsToUse);
3379
+ if (missing.length > 0 && supports.includes("placeholder" /* PLACEHOLDER */) && vizConfig.key !== "splunk.singlevalue") {
3380
+ return /* @__PURE__ */ react_exports.createElement(
3381
+ MissingPropsMessage_default,
3757
3382
  {
3758
- label: (0, i18n_exports._)("Dynamic elements"),
3759
- key: "presetSelector",
3760
- editor: "editor.presetSelector",
3761
- editorProps: {
3762
- presets,
3763
- value: ({ context, options }) => {
3764
- const initialPreset = getInitialPreset(context, options, presets);
3765
- return initialPreset && initialPreset.label || null;
3766
- }
3767
- }
3383
+ "data-test": "missing-props-message",
3384
+ width,
3385
+ height,
3386
+ missingProps: missing,
3387
+ backgroundColor: bgColorFromTheme
3768
3388
  }
3769
- ],
3770
- [
3771
- __spreadProps(__spreadValues({}, StaticMajorColorEditor_default), {
3772
- editorProps: {
3773
- themes
3774
- }
3775
- })
3776
- ],
3777
- [getDynamicMajorColorEditor({ defaultContext, defaultPalettesConfig: PresetPalettes_exports.defaultPalettesConfig })],
3778
- [
3779
- __spreadProps(__spreadValues({}, StaticTrendColorEditor_default), {
3780
- editorProps: {
3781
- themes
3782
- }
3783
- })
3784
- ],
3785
- [getDynamicTrendColorEditor({ defaultContext, defaultPalettesConfig: PresetPalettes_exports.defaultPalettesConfig })],
3786
- [
3787
- __spreadProps(__spreadValues({}, StaticBackgroundColorEditor_default), {
3788
- editorProps: {
3789
- themes
3389
+ );
3390
+ }
3391
+ const eventCallbackProps = {};
3392
+ if (hasEventHandlers && mode === "view" && vizConfig.supports.indexOf("events" /* EVENTS */) > -1) {
3393
+ const supportedEvents = vizConfig.events;
3394
+ Object.keys(supportedEvents).forEach((eventName) => {
3395
+ const { parentKeys, payloadKeys } = supportedEvents[eventName];
3396
+ const eventCallbackPropName = (0, lodash_exports.camelCase)(`on.${eventName}`);
3397
+ let payload = {};
3398
+ if (Array.isArray(payloadKeys) && payloadKeys.length) {
3399
+ payloadKeys.forEach((p) => {
3400
+ payload[p] = evaluatedOptionsToUse[p];
3401
+ });
3402
+ }
3403
+ eventCallbackProps[eventCallbackPropName] = (ev) => {
3404
+ if (ev && ev.payload) {
3405
+ payload = ev.payload;
3790
3406
  }
3791
- })
3792
- ],
3793
- [
3794
- __spreadProps(__spreadValues({}, TrellisBackgroundColorEditor), {
3795
- editorProps: {
3796
- themes
3407
+ return onEventTrigger({ originalEvent: ev, payload, type: eventName });
3408
+ };
3409
+ if (parentKeys) {
3410
+ for (let i = parentKeys.length - 1; i >= 0; i -= 1) {
3411
+ const newObject = {};
3412
+ newObject[parentKeys[i]] = eventCallbackProps[eventCallbackPropName];
3413
+ eventCallbackProps[eventCallbackPropName] = newObject;
3797
3414
  }
3798
- })
3799
- ],
3800
- [getDynamicBackgroundColorEditor({ defaultContext, defaultPalettesConfig: PresetPalettes_exports.defaultPalettesConfig })],
3801
- [
3802
- {
3803
- label: (0, i18n_exports._)("Major value size (px)"),
3804
- option: "majorFontSize",
3805
- editor: "editor.number",
3806
- editorProps: {
3807
- min: 1
3808
- },
3809
- placeholder: (0, i18n_exports._)("Auto"),
3810
- showEditor: ({ options }) => options.showValue || options.showValue === void 0
3811
- },
3812
- {
3813
- label: (0, i18n_exports._)("Trend value size (px)"),
3814
- option: "trendFontSize",
3815
- editor: "editor.number",
3816
- editorProps: {
3817
- min: 1
3818
- },
3819
- placeholder: (0, i18n_exports._)("Auto"),
3820
- showEditor: ({ options }) => options.showValue || options.showValue === void 0,
3821
- isDisabled: ({ options }) => options.trendDisplay === "off"
3822
3415
  }
3823
- ],
3824
- [
3825
- {
3826
- label: (0, i18n_exports._)("Major value abbreviation"),
3827
- option: "shouldAbbreviateMajorValue",
3828
- editor: "editor.checkbox"
3416
+ });
3417
+ }
3418
+ const computedVizProps = computeVizProps2(__spreadProps(__spreadValues(__spreadValues(__spreadValues({}, props), evaluatedOptionsToUse), eventCallbackProps), {
3419
+ themeFunc
3420
+ }));
3421
+ let dataSourceMetadata = {};
3422
+ const OptionKey = "paginateDataSourceKey";
3423
+ const paginateDataSourceKey = (0, lodash_exports.has)(evaluatedOptionsToUse, OptionKey) && evaluatedOptionsToUse[OptionKey] || "primary";
3424
+ if (vizConfig.supports.indexOf("page-and-sort" /* PAGE_AND_SORT */) > -1 && (0, lodash_exports.has)(dataSources, paginateDataSourceKey)) {
3425
+ const requestParams = (0, lodash_exports.get)(dataSources, [paginateDataSourceKey, "requestParams"], {});
3426
+ const meta = (0, lodash_exports.get)(dataSources, [paginateDataSourceKey, "meta"], {});
3427
+ const handleRequestParamsChange = (payload) => onRequestParamsChange(paginateDataSourceKey, payload);
3428
+ const sortParams = getSortingParams({
3429
+ requestParams,
3430
+ meta,
3431
+ onRequestParamsChange: handleRequestParamsChange
3432
+ });
3433
+ const paginatorParams = getPaginationParams({
3434
+ requestParams,
3435
+ meta,
3436
+ onRequestParamsChange: handleRequestParamsChange
3437
+ });
3438
+ dataSourceMetadata = {
3439
+ sortParams,
3440
+ paginatorParams
3441
+ };
3442
+ }
3443
+ if (useAsyncEvaluatedOptions && Object.keys(evaluatedOptionsToUse).length === 0) {
3444
+ return null;
3445
+ }
3446
+ return /* @__PURE__ */ react_exports.createElement(
3447
+ SanitizedReactViz,
3448
+ __spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
3449
+ mode,
3450
+ width,
3451
+ height
3452
+ }, downsamplingProps), evaluatedOptionsToUse), computedVizProps), eventCallbackProps), dataSourceMetadata)
3453
+ );
3454
+ };
3455
+ DashboardViz.propTypes = __spreadValues(__spreadValues({}, SplunkVisualization_default.propTypes), ReactViz.propTypes);
3456
+ DashboardViz.defaultProps = __spreadProps(__spreadValues(__spreadValues({}, SplunkVisualization_default.defaultProps), ReactViz.defaultProps), {
3457
+ // using withTheme requires component to receive theme prop. In case the consumer did not provide ThemeProvider, a default empty object will prevent warnings.
3458
+ theme: {}
3459
+ });
3460
+ DashboardViz.config = vizConfig;
3461
+ return (0, styled_components_exports.withTheme)(
3462
+ withPlaceholder_default(withEditModeCover_default(DashboardViz, disableEditModeCover), useIconPlaceholder)
3463
+ );
3464
+ };
3465
+ var withDashboardViz_default = withDashboardViz;
3466
+
3467
+ // esm-externals:@splunk/visualization-color-palettes/editors/PresetPalettes
3468
+ var PresetPalettes_exports = {};
3469
+ __export(PresetPalettes_exports, {
3470
+ default: () => PresetPalettes_default
3471
+ });
3472
+ var defaultImport34 = __toESM(require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
3473
+ __reExport(PresetPalettes_exports, require("@splunk/visualization-color-palettes/editors/PresetPalettes"));
3474
+ var PresetPalettes_default = "default" in defaultImport34 ? defaultImport34.default : defaultImport34;
3475
+
3476
+ // esm-externals:@splunk/visualization-themes/variables
3477
+ var variables_exports2 = {};
3478
+ __export(variables_exports2, {
3479
+ default: () => variables_default2
3480
+ });
3481
+ var defaultImport35 = __toESM(require("@splunk/visualization-themes/variables"));
3482
+ __reExport(variables_exports2, require("@splunk/visualization-themes/variables"));
3483
+ var variables_default2 = "default" in defaultImport35 ? defaultImport35.default : defaultImport35;
3484
+
3485
+ // esm-externals:@splunk/themes/pick
3486
+ var pick_exports2 = {};
3487
+ __export(pick_exports2, {
3488
+ default: () => pick_default2
3489
+ });
3490
+ var defaultImport36 = __toESM(require("@splunk/themes/pick"));
3491
+ __reExport(pick_exports2, require("@splunk/themes/pick"));
3492
+ var pick_default2 = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
3493
+
3494
+ // esm-externals:@splunk/visualization-icons
3495
+ var visualization_icons_exports = {};
3496
+ __export(visualization_icons_exports, {
3497
+ default: () => visualization_icons_default
3498
+ });
3499
+ var defaultImport37 = __toESM(require("@splunk/visualization-icons"));
3500
+ __reExport(visualization_icons_exports, require("@splunk/visualization-icons"));
3501
+ var visualization_icons_default = "default" in defaultImport37 ? defaultImport37.default : defaultImport37;
3502
+
3503
+ // esm-externals:@splunk/visualization-icons/placeholders
3504
+ var placeholders_exports = {};
3505
+ __export(placeholders_exports, {
3506
+ default: () => placeholders_default
3507
+ });
3508
+ var defaultImport38 = __toESM(require("@splunk/visualization-icons/placeholders"));
3509
+ __reExport(placeholders_exports, require("@splunk/visualization-icons/placeholders"));
3510
+ var placeholders_default = "default" in defaultImport38 ? defaultImport38.default : defaultImport38;
3511
+
3512
+ // src/common/configContext/singleValueContext.ts
3513
+ var defaultContext = {
3514
+ trendColorConfig: [
3515
+ {
3516
+ to: 0,
3517
+ value: "#9E2520"
3518
+ },
3519
+ {
3520
+ from: 0,
3521
+ value: "#1C6B2D"
3522
+ }
3523
+ ],
3524
+ majorColorConfig: [
3525
+ { to: 20, value: "#D41F1F" },
3526
+ { from: 20, to: 40, value: "#D94E17" },
3527
+ { from: 40, to: 60, value: "#CBA700" },
3528
+ { from: 60, to: 80, value: "#669922" },
3529
+ { from: 80, value: "#118832" }
3530
+ ],
3531
+ majorColorMatchConfig: [{ match: "", value: "#5C33FF" }],
3532
+ trendValueCopy: "> trendValue",
3533
+ divisor: "> majorValue | subtract(trendValueCopy) | divideBy(100)",
3534
+ trendValuePercent: "> trendValue | divideBy(divisor)"
3535
+ };
3536
+
3537
+ // esm-externals:@splunk/visualizations-shared/configUtils
3538
+ var configUtils_exports = {};
3539
+ __export(configUtils_exports, {
3540
+ default: () => configUtils_default
3541
+ });
3542
+ var defaultImport39 = __toESM(require("@splunk/visualizations-shared/configUtils"));
3543
+ __reExport(configUtils_exports, require("@splunk/visualizations-shared/configUtils"));
3544
+ var configUtils_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
3545
+
3546
+ // src/common/editorConfig/DynamicMajorColorEditor.js
3547
+ var getDynamicMajorColorEditor = ({ defaultContext: defaultContext2, defaultPalettesConfig: defaultPalettesConfig2 }) => ({
3548
+ label: (0, i18n_exports._)("Major value"),
3549
+ option: "majorColor",
3550
+ context: "majorColorEditorConfig",
3551
+ editor: "editor.dynamicColor",
3552
+ showEditor: ({ options }) => (0, configUtils_exports.isDynamicOption)(options.majorColor),
3553
+ editorProps: {
3554
+ labelPosition: "top",
3555
+ flyoutTitle: (0, i18n_exports._)("Dynamic coloring: major value"),
3556
+ formatters: [
3557
+ {
3558
+ label: (0, i18n_exports._)("Ranges"),
3559
+ value: "rangeValue",
3560
+ defaults: {
3561
+ majorValue: defaultContext2.majorColorConfig
3562
+ }
3563
+ },
3564
+ {
3565
+ label: (0, i18n_exports._)("Matches"),
3566
+ value: "matchValue",
3567
+ defaults: {
3568
+ majorValue: defaultContext2.majorColorMatchConfig
3569
+ }
3570
+ }
3571
+ ],
3572
+ dataSelectors: [
3573
+ {
3574
+ label: (0, i18n_exports._)("Major value"),
3575
+ value: "majorValue"
3576
+ }
3577
+ ],
3578
+ defaultPalettesConfig: defaultPalettesConfig2
3579
+ }
3580
+ });
3581
+
3582
+ // src/common/editorConfig/DynamicTrendColorEditor.js
3583
+ var getDynamicTrendColorEditor = ({ defaultContext: defaultContext2, defaultPalettesConfig: defaultPalettesConfig2 }) => ({
3584
+ label: (0, i18n_exports._)("Trend value"),
3585
+ option: "trendColor",
3586
+ context: "trendColorEditorConfig",
3587
+ editor: "editor.dynamicColor",
3588
+ showEditor: ({ options }) => (0, configUtils_exports.isDynamicOption)(options.trendColor),
3589
+ editorProps: {
3590
+ labelPosition: "top",
3591
+ flyoutTitle: (0, i18n_exports._)("Dynamic coloring: trend value"),
3592
+ formatters: [
3593
+ {
3594
+ label: (0, i18n_exports._)("Ranges"),
3595
+ value: "rangeValue",
3596
+ defaults: {
3597
+ trendValue: defaultContext2.trendColorConfig
3829
3598
  }
3830
- ],
3831
- [
3832
- {
3833
- label: (0, i18n_exports._)("Trend value abbreviation"),
3834
- option: "shouldAbbreviateTrendValue",
3835
- editor: "editor.checkbox"
3599
+ }
3600
+ ],
3601
+ dataSelectors: [
3602
+ {
3603
+ label: (0, i18n_exports._)("Trend value"),
3604
+ value: "trendValue"
3605
+ }
3606
+ ],
3607
+ defaultPalettesConfig: defaultPalettesConfig2
3608
+ }
3609
+ });
3610
+
3611
+ // src/common/editorConfig/DynamicBackgroundColorEditor.js
3612
+ var getDynamicBackgroundColorEditor = ({ defaultContext: defaultContext2, defaultPalettesConfig: defaultPalettesConfig2 }) => ({
3613
+ label: (0, i18n_exports._)("Background color"),
3614
+ option: "backgroundColor",
3615
+ context: "backgroundColorEditorConfig",
3616
+ editor: "editor.dynamicColor",
3617
+ showEditor: ({ options }) => (0, configUtils_exports.isDynamicOption)(options.backgroundColor),
3618
+ editorProps: {
3619
+ labelPosition: "top",
3620
+ flyoutTitle: (0, i18n_exports._)("Dynamic coloring: background"),
3621
+ formatters: [
3622
+ {
3623
+ label: (0, i18n_exports._)("Ranges"),
3624
+ value: "rangeValue",
3625
+ defaults: {
3626
+ majorValue: defaultContext2.majorColorConfig,
3627
+ trendValue: defaultContext2.trendColorConfig
3836
3628
  }
3837
- ],
3838
- [
3839
- {
3840
- label: (0, i18n_exports._)("Alignment"),
3841
- editor: "editor.radioBar",
3842
- option: "align",
3843
- editorProps: {
3844
- values: [
3845
- { label: (0, i18n_exports._)("Left"), value: "left" },
3846
- { label: (0, i18n_exports._)("Center"), value: "center" },
3847
- { label: (0, i18n_exports._)("Right"), value: "right" }
3848
- ]
3849
- },
3850
- showEditor: ({ options }) => options.showValue || options.showValue === void 0
3629
+ },
3630
+ {
3631
+ label: (0, i18n_exports._)("Matches"),
3632
+ value: "matchValue",
3633
+ defaults: {
3634
+ majorValue: defaultContext2.majorColorMatchConfig
3851
3635
  }
3852
- ]
3853
- ]
3636
+ }
3637
+ ],
3638
+ dataSelectors: [
3639
+ {
3640
+ label: (0, i18n_exports._)("Major Value"),
3641
+ value: "majorValue"
3642
+ },
3643
+ {
3644
+ label: (0, i18n_exports._)("Trend"),
3645
+ value: "trendValue"
3646
+ }
3647
+ ],
3648
+ defaultPalettesConfig: defaultPalettesConfig2
3854
3649
  }
3650
+ });
3651
+
3652
+ // src/common/editorConfig/StaticMajorAndTrendLayout.js
3653
+ var StaticMajorAndTrendLayout = [
3654
+ [
3655
+ {
3656
+ label: (0, i18n_exports._)("Unit position"),
3657
+ // todo: we need a new editor combining unit and position
3658
+ option: "unitPosition",
3659
+ editor: "editor.select",
3660
+ editorProps: {
3661
+ values: [
3662
+ { label: (0, i18n_exports._)("Before"), value: "before" },
3663
+ { label: (0, i18n_exports._)("After"), value: "after" }
3664
+ ]
3665
+ },
3666
+ showEditor: ({ options }) => options.showValue || options.showValue === void 0
3667
+ },
3668
+ {
3669
+ label: (0, i18n_exports._)("Unit label"),
3670
+ option: "unit",
3671
+ editor: "editor.text",
3672
+ showEditor: ({ options }) => options.showValue || options.showValue === void 0
3673
+ }
3674
+ ],
3675
+ [
3676
+ {
3677
+ label: (0, i18n_exports._)("Precision"),
3678
+ option: "numberPrecision",
3679
+ editor: "editor.number",
3680
+ editorProps: {
3681
+ min: 0,
3682
+ max: 20
3683
+ },
3684
+ showEditor: ({ options }) => options.showValue || options.showValue === void 0
3685
+ }
3686
+ ]
3687
+ ];
3688
+ var StaticMajorAndTrendLayout_default = StaticMajorAndTrendLayout;
3689
+
3690
+ // src/common/editorConfig/StaticMajorColorEditor.js
3691
+ var StaticMajorColorEditor = {
3692
+ label: (0, i18n_exports._)("Major value"),
3693
+ option: "majorColor",
3694
+ editor: "editor.color",
3695
+ showEditor: ({ options }) => !(0, configUtils_exports.isDynamicOption)(options.majorColor)
3696
+ };
3697
+ var StaticMajorColorEditor_default = StaticMajorColorEditor;
3698
+
3699
+ // src/common/editorConfig/StaticTrendColorEditor.js
3700
+ var StaticTrendColorEditor = {
3701
+ label: (0, i18n_exports._)("Trend value"),
3702
+ option: "trendColor",
3703
+ editor: "editor.color",
3704
+ showEditor: ({ options }) => !(0, configUtils_exports.isDynamicOption)(options.trendColor),
3705
+ isDisabled: ({ options }) => options.trendDisplay === "off"
3706
+ };
3707
+ var StaticTrendColorEditor_default = StaticTrendColorEditor;
3708
+
3709
+ // src/common/editorConfig/StaticBackgroundColorEditor.js
3710
+ var StaticBackgroundColorEditor = {
3711
+ label: (0, i18n_exports._)("Background color"),
3712
+ option: "backgroundColor",
3713
+ editor: "editor.color",
3714
+ showEditor: ({ options }) => !(0, configUtils_exports.isDynamicOption)(options.backgroundColor)
3715
+ };
3716
+ var StaticBackgroundColorEditor_default = StaticBackgroundColorEditor;
3717
+
3718
+ // src/common/utils/configUtils.ts
3719
+ function enhanceConfig(vizConfig) {
3720
+ const enhancedConfig = __spreadValues({}, vizConfig);
3721
+ enhancedConfig.editorConfig = vizConfig.editorConfig.map(
3722
+ (config3) => {
3723
+ return __spreadProps(__spreadValues({}, config3), { open: config3.open || false });
3724
+ }
3725
+ );
3726
+ return enhancedConfig;
3727
+ }
3728
+ function hasCompatibleContexts(vizContext, presetContext) {
3729
+ const presetContextKeys = Object.keys(presetContext);
3730
+ return presetContextKeys.every(
3731
+ (contextKey) => presetContext[contextKey] === void 0 && vizContext[contextKey] === void 0 || presetContext[contextKey] !== void 0 && vizContext[contextKey] !== void 0
3732
+ );
3733
+ }
3734
+ function hasCompatibleOptions(vizOptions, presetOptions) {
3735
+ const presetOptionKeys = Object.keys(presetOptions);
3736
+ return presetOptionKeys.every(
3737
+ (optionKey) => (0, configUtils_exports.isDynamicOption)(presetOptions[optionKey]) === (0, configUtils_exports.isDynamicOption)(vizOptions[optionKey])
3738
+ );
3739
+ }
3740
+ function getInitialPreset(vizContext, vizOptions, presets2) {
3741
+ return presets2.find((preset) => {
3742
+ const presetContext = (0, lodash_exports.get)(preset, ["value", "context"], {});
3743
+ const presetOptions = (0, lodash_exports.get)(preset, ["value", "options"], {});
3744
+ const presetContextKeys = Object.keys(presetContext);
3745
+ const presetOptionKeys = Object.keys(presetOptions);
3746
+ if (presetContextKeys.length === 0 || presetOptionKeys.length === 0) return false;
3747
+ return hasCompatibleContexts(vizContext, presetContext) && hasCompatibleOptions(vizOptions, presetOptions);
3748
+ });
3749
+ }
3750
+
3751
+ // src/common/editorConfig/TrellisEditors.ts
3752
+ var isTrellisFeatureFlagOn = ({ featureFlags }) => {
3753
+ return Boolean(featureFlags == null ? void 0 : featureFlags.visualizations_enableTrellis);
3754
+ };
3755
+ var isTrellisEnabled = ({ options, featureFlags }) => {
3756
+ const { splitByLayout = visualization_schemas_exports.LAYOUT_TYPE.Off } = options;
3757
+ return isTrellisFeatureFlagOn({ featureFlags }) && splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis;
3758
+ };
3759
+ var TrellisEditorConfig = [
3760
+ [
3761
+ {
3762
+ label: (0, i18n_exports._)("Trellis layout"),
3763
+ option: "splitByLayout",
3764
+ editor: "editor.toggle",
3765
+ showEditor: isTrellisFeatureFlagOn
3766
+ }
3767
+ ],
3768
+ [
3769
+ {
3770
+ label: (0, i18n_exports._)("Split by"),
3771
+ option: "trellisSplitBy",
3772
+ editor: "editor.trellisSplitBy",
3773
+ editorProps: {
3774
+ dataSourceKey: "primary"
3775
+ },
3776
+ showEditor: isTrellisEnabled
3777
+ }
3778
+ ],
3779
+ [
3780
+ {
3781
+ label: (0, i18n_exports._)("Number of columns"),
3782
+ option: "trellisColumns",
3783
+ editor: "editor.number",
3784
+ editorProps: {
3785
+ min: 1
3786
+ },
3787
+ placeholder: (0, i18n_exports._)("Auto"),
3788
+ showEditor: isTrellisEnabled
3789
+ }
3790
+ ],
3791
+ [
3792
+ {
3793
+ label: (0, i18n_exports._)("Min column width"),
3794
+ option: "trellisMinColumnWidth",
3795
+ editor: "editor.number",
3796
+ editorProps: {
3797
+ min: 1
3798
+ },
3799
+ showEditor: isTrellisEnabled
3800
+ },
3801
+ {
3802
+ label: (0, i18n_exports._)("Row height"),
3803
+ option: "trellisRowHeight",
3804
+ editor: "editor.number",
3805
+ editorProps: {
3806
+ min: 1
3807
+ },
3808
+ showEditor: isTrellisEnabled
3809
+ }
3810
+ ],
3811
+ [
3812
+ {
3813
+ label: (0, i18n_exports._)("Max number of components per page"),
3814
+ option: "trellisPageCount",
3815
+ editor: "editor.number",
3816
+ editorProps: {
3817
+ min: 1
3818
+ },
3819
+ showEditor: isTrellisEnabled
3820
+ }
3821
+ ]
3855
3822
  ];
3856
- var config = {
3857
- /**
3858
- * unique viz key
3859
- */
3860
- key: "splunk.singlevalue",
3861
- /**
3862
- * viz name
3863
- */
3864
- name: (0, i18n_exports._)("Single value"),
3865
- category: "Single Value" /* SINGLE_VALUE */,
3866
- /**
3867
- * viz icon
3868
- */
3869
- icon: visualization_icons_exports.SingleValue,
3870
- placeholderIcon: placeholders_exports.SingleValue,
3871
- dataContract,
3872
- size,
3873
- defaultContext,
3874
- optionsSchema: visualization_schemas_exports.singleValueOptionsSchema,
3875
- editorConfig,
3876
- events: {
3877
- "value.click": {
3878
- description: "trigger when user clicks major value",
3879
- payloadKeys: ["majorValue", "trendValue"]
3823
+ var TimechartTrellisEditorConfig = [
3824
+ [
3825
+ {
3826
+ label: (0, i18n_exports._)("Trellis layout"),
3827
+ option: "splitByLayout",
3828
+ editor: "editor.toggle",
3829
+ showEditor: isTrellisFeatureFlagOn,
3830
+ // add help text for timecharts
3831
+ editorProps: {
3832
+ help: (0, i18n_exports._)(
3833
+ "Y2-axis and overlay field configurations are not supported when trellis is enabled."
3834
+ ),
3835
+ helpFormat: "under"
3836
+ }
3880
3837
  }
3881
- },
3882
- supports: ["dynamic-options" /* DYNAMIC_OPTIONS */, "events" /* EVENTS */, "placeholder" /* PLACEHOLDER */, "trellis" /* TRELLIS */],
3883
- themes,
3884
- requiredProps: ["majorValue"]
3838
+ ],
3839
+ ...TrellisEditorConfig.slice(1),
3840
+ [
3841
+ {
3842
+ label: (0, i18n_exports._)("Shared y-axis scale"),
3843
+ option: "trellisSharedScale",
3844
+ editor: "editor.checkbox",
3845
+ showEditor: isTrellisEnabled
3846
+ }
3847
+ ]
3848
+ ];
3849
+ var TrellisBackgroundColorEditor = {
3850
+ label: (0, i18n_exports._)("Trellis background"),
3851
+ option: "trellisBackgroundColor",
3852
+ editor: "editor.color",
3853
+ showEditor: isTrellisEnabled
3885
3854
  };
3886
- var config_default = enhanceConfig(config);
3887
-
3888
- // esm-externals:@splunk/react-ui/Paginator
3889
- var Paginator_exports = {};
3890
- __export(Paginator_exports, {
3891
- default: () => Paginator_default
3892
- });
3893
- var defaultImport39 = __toESM(require("@splunk/react-ui/Paginator"));
3894
- __reExport(Paginator_exports, require("@splunk/react-ui/Paginator"));
3895
- var Paginator_default = "default" in defaultImport39 ? defaultImport39.default : defaultImport39;
3896
-
3897
- // esm-externals:@splunk/themes
3898
- var themes_exports = {};
3899
- __export(themes_exports, {
3900
- default: () => themes_default
3901
- });
3902
- var defaultImport40 = __toESM(require("@splunk/themes"));
3903
- __reExport(themes_exports, require("@splunk/themes"));
3904
- var themes_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
3905
-
3906
- // esm-externals:@splunk/themes/useSplunkTheme
3907
- var useSplunkTheme_exports = {};
3908
- __export(useSplunkTheme_exports, {
3909
- default: () => useSplunkTheme_default
3910
- });
3911
- var defaultImport41 = __toESM(require("@splunk/themes/useSplunkTheme"));
3912
- __reExport(useSplunkTheme_exports, require("@splunk/themes/useSplunkTheme"));
3913
- var useSplunkTheme_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
3914
-
3915
- // esm-externals:@splunk/visualizations-shared/trellisUtils
3916
- var trellisUtils_exports = {};
3917
- __export(trellisUtils_exports, {
3918
- default: () => trellisUtils_default
3919
- });
3920
- var defaultImport42 = __toESM(require("@splunk/visualizations-shared/trellisUtils"));
3921
- __reExport(trellisUtils_exports, require("@splunk/visualizations-shared/trellisUtils"));
3922
- var trellisUtils_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
3923
3855
 
3924
- // src/common/utils/trellisUtils.ts
3925
- var AGGREGATIONS = "aggregations";
3926
- var dataSourcesSplitByAggregationsUnknown = (dataSource) => {
3927
- var _a, _b, _c, _d;
3928
- const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
3929
- const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
3930
- let splitDataSources = null;
3931
- let errorCode = null;
3932
- if (fields && fields.length) {
3933
- splitDataSources = {};
3934
- for (let i = 0; i < fields.length; i += 1) {
3935
- const fieldName = fields[i].name;
3936
- if (!(fieldName == null ? void 0 : fieldName.startsWith("_"))) {
3937
- splitDataSources[fieldName] = (0, lodash_exports.cloneDeep)(
3938
- (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
3939
- );
3940
- splitDataSources[fieldName].primary.data.fields = [fields[i]];
3941
- splitDataSources[fieldName].primary.data.columns = [columns[i]];
3942
- }
3856
+ // src/SingleValue/config.ts
3857
+ var dataContract = {
3858
+ requiredDataSources: [
3859
+ {
3860
+ name: "primary",
3861
+ description: "DataSource that powers the visualization"
3943
3862
  }
3944
- } else {
3945
- errorCode = "INVALID_SPLIT_BY_FIELD";
3863
+ ],
3864
+ optionalDataSources: [],
3865
+ initialRequestParams: {
3866
+ primary: { offset: 0, count: 1e4 }
3946
3867
  }
3947
- return { splitDataSources, errorCode };
3948
3868
  };
3949
- var dataSourcesSplitByAggregationsTimechartAndChart = (dataSource) => {
3950
- var _a, _b, _c, _d;
3951
- const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
3952
- const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
3953
- let splitDataSources = null;
3954
- let splitByFields = [];
3955
- let errorCode = null;
3956
- if (typeof fields[0] !== "string") {
3957
- splitByFields = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
3958
- }
3959
- if (splitByFields && splitByFields.length > 0) {
3960
- splitDataSources = {};
3961
- splitByFields.forEach((splitByField) => {
3962
- splitDataSources[splitByField] = (0, lodash_exports.cloneDeep)(
3963
- (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
3964
- );
3965
- splitDataSources[splitByField].primary.data.fields = [fields[0]];
3966
- splitDataSources[splitByField].primary.data.columns = [columns[0]];
3967
- fields.forEach((field, idx) => {
3968
- const fieldName = field == null ? void 0 : field.name;
3969
- if (fieldName !== "_time" && !(fieldName == null ? void 0 : fieldName.startsWith("_")) && field.data_source === splitByField) {
3970
- splitDataSources[splitByField].primary.data.fields.push(field);
3971
- splitDataSources[splitByField].primary.data.columns.push(columns[idx]);
3972
- }
3973
- });
3974
- });
3975
- } else if ((!splitByFields || !splitByFields.length) && fields.length > 1) {
3976
- splitDataSources = {};
3977
- for (let i = 1; i < fields.length; i += 1) {
3978
- const fieldName = fields[i].name;
3979
- if (!(fieldName == null ? void 0 : fieldName.startsWith("_"))) {
3980
- splitDataSources[fieldName] = (0, lodash_exports.cloneDeep)(
3981
- (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
3982
- );
3983
- splitDataSources[fieldName].primary.data.fields = [fields[0], fields[i]];
3984
- splitDataSources[fieldName].primary.data.columns = [columns[0], columns[i]];
3985
- }
3986
- }
3987
- } else {
3988
- errorCode = "INVALID_SPLIT_BY_FIELD";
3989
- }
3990
- return { splitDataSources, errorCode };
3869
+ var size = {
3870
+ initialWidth: 250,
3871
+ initialHeight: 250
3991
3872
  };
3992
- var dataSourcesSplitByAggregationsStats = (dataSource) => {
3993
- var _a, _b, _c, _d;
3994
- const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
3995
- const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
3996
- let splitDataSources = null;
3997
- let splitByFields = [];
3998
- let errorCode = null;
3999
- if (typeof fields[0] !== "string") {
4000
- splitByFields = (0, trellisUtils_exports.extractDataSourceAggregationKeysStats)(fields);
4001
- }
4002
- if (splitByFields && splitByFields.length > 0) {
4003
- splitDataSources = {};
4004
- splitByFields.forEach((splitByField) => {
4005
- splitDataSources[splitByField] = (0, lodash_exports.cloneDeep)(
4006
- (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
4007
- );
4008
- splitDataSources[splitByField].primary.data.fields = [fields[0]];
4009
- splitDataSources[splitByField].primary.data.columns = [columns[0]];
4010
- const idx = fields.findIndex((field) => field.name === splitByField);
4011
- if (idx > 0) {
4012
- splitDataSources[splitByField].primary.data.fields.push(fields[idx]);
4013
- splitDataSources[splitByField].primary.data.columns.push(columns[idx]);
4014
- }
4015
- });
4016
- } else {
4017
- errorCode = "INVALID_SPLIT_BY_FIELD";
4018
- }
4019
- return { splitDataSources, errorCode };
3873
+ var basePresetContext = {
3874
+ majorColorEditorConfig: void 0,
3875
+ trendColorEditorConfig: void 0,
3876
+ backgroundColorEditorConfig: void 0
4020
3877
  };
4021
- var dataSourcesSplitByModeTimechart = (dataSource, splitBy) => {
4022
- var _a, _b, _c, _d, _e;
4023
- const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
4024
- const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
4025
- let splitDataSources = null;
4026
- let splitByFields = [];
4027
- let errorCode = null;
4028
- if (typeof fields[0] !== "string") {
4029
- splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
4030
- }
4031
- if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
4032
- splitDataSources = {};
4033
- const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
4034
- const valueKeys = [];
4035
- for (let i = 1; i < fields.length; i += 1) {
4036
- if (!((_e = fields[i].name) == null ? void 0 : _e.startsWith("_"))) {
4037
- valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);
4038
- }
3878
+ var basePresetOptions = {
3879
+ majorColor: void 0,
3880
+ trendColor: void 0,
3881
+ backgroundColor: void 0
3882
+ };
3883
+ var presets = [
3884
+ {
3885
+ // dummy context variables to allow for resetting of unused context states
3886
+ label: (0, i18n_exports._)("None"),
3887
+ name: "singleValue.none",
3888
+ value: {
3889
+ context: __spreadValues({}, basePresetContext),
3890
+ options: __spreadValues({}, basePresetOptions)
3891
+ }
3892
+ },
3893
+ {
3894
+ label: (0, i18n_exports._)("Major value"),
3895
+ name: "singleValue.majorValue",
3896
+ value: {
3897
+ context: __spreadProps(__spreadValues({}, basePresetContext), {
3898
+ majorColorEditorConfig: defaultContext.majorColorConfig
3899
+ }),
3900
+ options: __spreadProps(__spreadValues({}, basePresetOptions), {
3901
+ majorColor: "> majorValue | rangeValue(majorColorEditorConfig)"
3902
+ })
3903
+ }
3904
+ },
3905
+ {
3906
+ label: (0, i18n_exports._)("Trend value"),
3907
+ name: "singleValue.trend",
3908
+ value: {
3909
+ context: __spreadProps(__spreadValues({}, basePresetContext), {
3910
+ trendColorEditorConfig: defaultContext.trendColorConfig
3911
+ }),
3912
+ options: __spreadProps(__spreadValues({}, basePresetOptions), {
3913
+ trendColor: "> trendValue | rangeValue(trendColorEditorConfig)"
3914
+ })
3915
+ }
3916
+ },
3917
+ {
3918
+ label: (0, i18n_exports._)("Major value and Trend value"),
3919
+ name: "singleValue.majorValueAndTrend",
3920
+ value: {
3921
+ context: __spreadProps(__spreadValues({}, basePresetContext), {
3922
+ majorColorEditorConfig: defaultContext.majorColorConfig,
3923
+ trendColorEditorConfig: defaultContext.trendColorConfig
3924
+ }),
3925
+ options: __spreadProps(__spreadValues({}, basePresetOptions), {
3926
+ majorColor: "> majorValue | rangeValue(majorColorEditorConfig)",
3927
+ trendColor: "> trendValue | rangeValue(trendColorEditorConfig)"
3928
+ })
3929
+ }
3930
+ },
3931
+ {
3932
+ label: (0, i18n_exports._)("Background"),
3933
+ name: "singleValue.background",
3934
+ value: {
3935
+ context: __spreadProps(__spreadValues({}, basePresetContext), {
3936
+ backgroundColorEditorConfig: defaultContext.majorColorConfig
3937
+ }),
3938
+ options: __spreadProps(__spreadValues({}, basePresetOptions), {
3939
+ backgroundColor: "> majorValue | rangeValue(backgroundColorEditorConfig)"
3940
+ })
4039
3941
  }
4040
- valueKeys.forEach((val) => {
4041
- splitDataSources[val] = (0, lodash_exports.cloneDeep)(
4042
- (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
4043
- );
4044
- splitDataSources[val].primary.data.fields = [
4045
- { name: fields[0].name },
4046
- ...dataSourceKeys.map((k) => ({
4047
- name: k
4048
- }))
4049
- ];
4050
- splitDataSources[val].primary.data.columns = [[...columns[0]]];
4051
- dataSourceKeys.forEach((dsKey) => {
4052
- fields.forEach((field, idx) => {
4053
- if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {
4054
- splitDataSources[val].primary.data.columns.push([...columns[idx]]);
4055
- }
4056
- });
4057
- });
4058
- });
4059
- } else {
4060
- errorCode = "INVALID_SPLIT_BY_FIELD";
4061
- }
4062
- return { splitDataSources, errorCode };
4063
- };
4064
- var dataSourcesSplitByModeChart = (dataSource, splitBy) => {
4065
- var _a, _b, _c, _d;
4066
- const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
4067
- const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
4068
- let splitDataSources = null;
4069
- let splitByFields = [];
4070
- let errorCode = null;
4071
- if (typeof fields[0] !== "string") {
4072
- splitByFields = (0, trellisUtils_exports.extractSplitByFieldsChartFields)(fields);
4073
3942
  }
4074
- if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
4075
- splitDataSources = {};
4076
- const splitByFieldIdx = splitByFields.findIndex((f) => f === splitBy);
4077
- const otherSplitBy = splitByFields.filter((f) => f !== splitBy);
4078
- const dataSourceKeys = (0, trellisUtils_exports.extractDataSourceAggregationKeysChart)(fields);
4079
- const nonDataSourceAggregations = [];
4080
- if (!dataSourceKeys.length && fields[0].groupby_rank === "0" && fields.length && !fields[1].groupby_rank) {
4081
- for (let i = 1; i < fields.length; i += 1) {
4082
- nonDataSourceAggregations.push(fields[i].name);
3943
+ ];
3944
+ var themes = {
3945
+ defaultFontColor: (props) => pick_default2({
3946
+ enterprise: {
3947
+ dark: variables_default.textColor(props),
3948
+ light: variables_default.gray20(props)
3949
+ },
3950
+ prisma: variables_default.contentColorActive(props)
3951
+ })(props),
3952
+ defaultBlockFontColor: (props) => pick_default2({
3953
+ enterprise: variables_default.white(props),
3954
+ prisma: variables_default.contentColorActive(props)
3955
+ })(props),
3956
+ defaultBackgroundColor: (props) => pick_default2({
3957
+ enterprise: {
3958
+ dark: variables_default.black(props),
3959
+ light: variables_default.backgroundColor(props)
3960
+ },
3961
+ prisma: variables_default.backgroundColorSidebar(props)
3962
+ })(props),
3963
+ defaultSparklineStrokeColor: (props) => pick_default2({
3964
+ enterprise: variables_default.textColor(props),
3965
+ prisma: variables_default.contentColorActive(props)
3966
+ })(props),
3967
+ // TODO(fkurniawan): update with SCP-36839
3968
+ sparklineSeverityColors: (props) => pick_default2({
3969
+ enterprise: {
3970
+ dark: JSON.stringify({
3971
+ none: {
3972
+ background: variables_exports2.enterpriseDark.gray60,
3973
+ // note: may need update later
3974
+ stroke: variables_exports2.enterpriseDark.white
3975
+ },
3976
+ low: {
3977
+ background: variables_exports2.enterpriseDark.successColorD50,
3978
+ stroke: variables_exports2.enterpriseDark.white
3979
+ },
3980
+ guarded: {
3981
+ background: variables_exports2.enterpriseDark.infoColorD50,
3982
+ stroke: variables_exports2.enterpriseDark.white
3983
+ },
3984
+ elevated: {
3985
+ background: variables_exports2.enterpriseDark.warningColorD50,
3986
+ stroke: variables_exports2.enterpriseDark.white
3987
+ },
3988
+ high: {
3989
+ background: variables_exports2.enterpriseDark.alertColorD50,
3990
+ stroke: variables_exports2.enterpriseDark.white
3991
+ },
3992
+ severe: {
3993
+ background: variables_exports2.enterpriseDark.errorColorD50,
3994
+ stroke: variables_exports2.enterpriseDark.white
3995
+ }
3996
+ }),
3997
+ light: JSON.stringify({
3998
+ none: {
3999
+ background: variables_exports2.enterprise.gray60,
4000
+ stroke: variables_exports2.enterprise.gray20
4001
+ },
4002
+ low: {
4003
+ background: variables_exports2.enterprise.successColorD50,
4004
+ stroke: variables_exports2.enterprise.white
4005
+ },
4006
+ guarded: {
4007
+ background: variables_exports2.enterprise.infoColorD50,
4008
+ stroke: variables_exports2.enterprise.white
4009
+ },
4010
+ elevated: {
4011
+ background: variables_exports2.enterprise.warningColorD50,
4012
+ stroke: variables_exports2.enterprise.white
4013
+ },
4014
+ high: {
4015
+ background: variables_exports2.enterprise.alertColorD50,
4016
+ stroke: variables_exports2.enterprise.white
4017
+ },
4018
+ severe: {
4019
+ background: variables_exports2.enterprise.errorColorD50,
4020
+ stroke: variables_exports2.enterprise.white
4021
+ }
4022
+ })
4023
+ },
4024
+ prisma: JSON.stringify({
4025
+ none: {
4026
+ background: variables_exports2.scp.gray52,
4027
+ stroke: variables_exports2.scp.white
4028
+ },
4029
+ low: {
4030
+ background: variables_exports2.scp.successColorD50,
4031
+ stroke: variables_exports2.scp.white
4032
+ },
4033
+ guarded: {
4034
+ background: variables_exports2.scp.infoColorD50,
4035
+ stroke: variables_exports2.scp.white
4036
+ },
4037
+ elevated: {
4038
+ background: variables_exports2.scp.warningColorD50,
4039
+ stroke: variables_exports2.scp.white
4040
+ },
4041
+ high: {
4042
+ background: variables_exports2.scp.alertColorD50,
4043
+ stroke: variables_exports2.scp.white
4044
+ },
4045
+ severe: {
4046
+ background: variables_exports2.scp.errorColorD50,
4047
+ stroke: variables_exports2.scp.white
4083
4048
  }
4084
- }
4085
- if (splitByFieldIdx === 0) {
4086
- const valueKeys = (0, lodash_exports.cloneDeep)(columns[0]);
4087
- valueKeys.forEach((val, idx) => {
4088
- splitDataSources[val] = (0, lodash_exports.cloneDeep)(
4089
- (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
4090
- );
4091
- splitDataSources[val].primary.data.fields = [];
4092
- if (otherSplitBy.length) {
4093
- splitDataSources[val].primary.data.fields = [{ name: otherSplitBy[0] }];
4049
+ })
4050
+ })(props)
4051
+ };
4052
+ var editorConfig = [
4053
+ {
4054
+ label: (0, i18n_exports._)("Data configurations"),
4055
+ layout: [
4056
+ [
4057
+ {
4058
+ label: (0, i18n_exports._)("Value"),
4059
+ editor: "editor.columnSelector",
4060
+ option: "sparklineValues",
4061
+ context: "sparklineValuesContext",
4062
+ editorProps: {
4063
+ dataSourceKey: "primary",
4064
+ prepareValue: (definition) => {
4065
+ const {
4066
+ options: { sparklineValues }
4067
+ } = definition;
4068
+ return {
4069
+ context: {},
4070
+ options: {
4071
+ majorValue: `> sparklineValues | lastPoint()`,
4072
+ trendValue: `> sparklineValues | delta(-2)`,
4073
+ sparklineValues
4074
+ }
4075
+ };
4076
+ }
4077
+ },
4078
+ isDisabled: ({ options }) => options.splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis
4094
4079
  }
4095
- if (dataSourceKeys.length) {
4096
- const columnValues = [[]];
4097
- splitDataSources[val].primary.data.fields = [
4098
- ...splitDataSources[val].primary.data.fields,
4099
- ...dataSourceKeys.map((k) => ({
4100
- name: k
4101
- }))
4102
- ];
4103
- dataSourceKeys.forEach(() => {
4104
- columnValues.push([]);
4105
- });
4106
- for (let i = 1; i <= Math.ceil((fields.length - 1) / dataSourceKeys.length); i += 1) {
4107
- columnValues[0].push(
4108
- fields[i].splitby_value ? fields[i].splitby_value : fields[i].name
4109
- );
4110
- dataSourceKeys.forEach((dskey, dsIndx) => {
4111
- const mul = (fields.length - 1) / dataSourceKeys.length;
4112
- columnValues[dsIndx + 1].push(columns[i + dsIndx * mul][idx]);
4113
- });
4080
+ ]
4081
+ ]
4082
+ },
4083
+ {
4084
+ label: (0, i18n_exports._)("Data display"),
4085
+ layout: [
4086
+ ...StaticMajorAndTrendLayout_default,
4087
+ [
4088
+ {
4089
+ label: (0, i18n_exports._)("Trend display"),
4090
+ option: "trendDisplay",
4091
+ editor: "editor.select",
4092
+ editorProps: {
4093
+ values: [
4094
+ { label: (0, i18n_exports._)("Percent"), value: "percent" },
4095
+ { label: (0, i18n_exports._)("Absolute"), value: "absolute" },
4096
+ { label: (0, i18n_exports._)("Off"), value: "off" }
4097
+ ]
4098
+ },
4099
+ showEditor: ({ options }) => options.showValue || options.showValue === void 0
4100
+ },
4101
+ {
4102
+ label: (0, i18n_exports._)("Sparkline display"),
4103
+ option: "sparklineDisplay",
4104
+ editor: "editor.select",
4105
+ editorProps: {
4106
+ values: [
4107
+ { label: (0, i18n_exports._)("Off"), value: "off" },
4108
+ { label: (0, i18n_exports._)("Before"), value: "before" },
4109
+ { label: (0, i18n_exports._)("Below"), value: "below" },
4110
+ { label: (0, i18n_exports._)("After"), value: "after" }
4111
+ ]
4114
4112
  }
4115
- splitDataSources[val].primary.data.columns = columnValues;
4116
- } else if (nonDataSourceAggregations.length) {
4117
- const columnValues = [];
4118
- fields.forEach((aggregationField, fieldIdx) => {
4119
- if (fieldIdx > 0) {
4120
- splitDataSources[val].primary.data.fields.push(aggregationField);
4121
- columnValues.push([columns[fieldIdx][idx]]);
4122
- }
4123
- });
4124
- splitDataSources[val].primary.data.columns = columnValues;
4125
4113
  }
4126
- });
4127
- } else {
4128
- const valueKeys = [];
4129
- for (let i = 1; i < fields.length; i += 1) {
4130
- valueKeys.push(fields[i].splitby_value ? fields[i].splitby_value : fields[i].name);
4131
- }
4132
- valueKeys.forEach((val) => {
4133
- splitDataSources[val] = (0, lodash_exports.cloneDeep)(
4134
- (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
4135
- );
4136
- splitDataSources[val].primary.data.fields = [
4137
- { name: otherSplitBy[0] },
4138
- ...dataSourceKeys.map((k) => ({
4139
- name: k
4140
- }))
4141
- ];
4142
- splitDataSources[val].primary.data.columns = [[...columns[0]]];
4143
- dataSourceKeys.forEach((dsKey) => {
4144
- fields.forEach((field, idx) => {
4145
- if (field.data_source === dsKey && (field.splitby_value === val || field.name === val)) {
4146
- splitDataSources[val].primary.data.columns.push([...columns[idx]]);
4114
+ ],
4115
+ ...TrellisEditorConfig
4116
+ ]
4117
+ },
4118
+ {
4119
+ label: (0, i18n_exports._)("Color and style"),
4120
+ layout: [
4121
+ [
4122
+ {
4123
+ label: (0, i18n_exports._)("Dynamic elements"),
4124
+ key: "presetSelector",
4125
+ editor: "editor.presetSelector",
4126
+ editorProps: {
4127
+ presets,
4128
+ value: ({ context, options }) => {
4129
+ const initialPreset = getInitialPreset(context, options, presets);
4130
+ return initialPreset && initialPreset.label || null;
4147
4131
  }
4148
- });
4149
- });
4150
- });
4151
- }
4152
- } else {
4153
- errorCode = "INVALID_SPLIT_BY_FIELD";
4154
- }
4155
- return { splitDataSources, errorCode };
4156
- };
4157
- var dataSourcesSplitByModeStatsorUnknown = (dataSource, splitBy, splitMode) => {
4158
- var _a, _b, _c, _d, _e, _f;
4159
- const fields = (_b = (_a = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _a.data) == null ? void 0 : _b.fields;
4160
- const columns = (_d = (_c = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
4161
- let splitDataSources = null;
4162
- let splitByFields = [];
4163
- let errorCode = null;
4164
- if (typeof fields[0] !== "string") {
4165
- splitByFields = splitMode !== trellisUtils_exports.UNKNOWN ? (0, trellisUtils_exports.extractSplitByFieldsForStats)(fields) : (0, trellisUtils_exports.extractSplitByFieldsForUnknown)(fields);
4166
- }
4167
- const splitByIndex = fields == null ? void 0 : fields.findIndex(
4168
- (field) => field === splitBy || field.name === splitBy
4169
- );
4170
- if (splitByFields && splitByFields.indexOf(splitBy) > -1) {
4171
- const splitByColumn = (_f = (_e = dataSource == null ? void 0 : dataSource.primary) == null ? void 0 : _e.data) == null ? void 0 : _f.columns[splitByIndex];
4172
- splitDataSources = {};
4173
- splitByColumn.forEach((val, idx) => {
4174
- if (!splitDataSources[val]) {
4175
- splitDataSources[val] = [idx];
4176
- } else {
4177
- splitDataSources[val].push(idx);
4178
- }
4179
- });
4180
- const cloneFields = (0, lodash_exports.cloneDeep)(fields);
4181
- cloneFields.splice(splitByIndex, 1);
4182
- const valueKeys = Object.keys(splitDataSources);
4183
- valueKeys.forEach((val) => {
4184
- const valIndices = (0, lodash_exports.cloneDeep)(splitDataSources[val]);
4185
- splitDataSources[val] = (0, lodash_exports.cloneDeep)(
4186
- (0, lodash_exports.omit)(dataSource, ["primary.data.fields", "primary.data.columns"])
4187
- );
4188
- splitDataSources[val].primary.data.fields = cloneFields;
4189
- splitDataSources[val].primary.data.columns = [];
4190
- columns.forEach((col, idx) => {
4191
- if (idx !== splitByIndex) {
4192
- const newCol = valIndices.map((valIdx) => col[valIdx]);
4193
- splitDataSources[val].primary.data.columns.push(newCol);
4132
+ }
4194
4133
  }
4195
- });
4196
- });
4197
- } else {
4198
- errorCode = "INVALID_SPLIT_BY_FIELD";
4134
+ ],
4135
+ [
4136
+ __spreadProps(__spreadValues({}, StaticMajorColorEditor_default), {
4137
+ editorProps: {
4138
+ themes
4139
+ }
4140
+ })
4141
+ ],
4142
+ [getDynamicMajorColorEditor({ defaultContext, defaultPalettesConfig: PresetPalettes_exports.defaultPalettesConfig })],
4143
+ [
4144
+ __spreadProps(__spreadValues({}, StaticTrendColorEditor_default), {
4145
+ editorProps: {
4146
+ themes
4147
+ }
4148
+ })
4149
+ ],
4150
+ [getDynamicTrendColorEditor({ defaultContext, defaultPalettesConfig: PresetPalettes_exports.defaultPalettesConfig })],
4151
+ [
4152
+ __spreadProps(__spreadValues({}, StaticBackgroundColorEditor_default), {
4153
+ editorProps: {
4154
+ themes
4155
+ }
4156
+ })
4157
+ ],
4158
+ [
4159
+ __spreadProps(__spreadValues({}, TrellisBackgroundColorEditor), {
4160
+ editorProps: {
4161
+ themes
4162
+ }
4163
+ })
4164
+ ],
4165
+ [getDynamicBackgroundColorEditor({ defaultContext, defaultPalettesConfig: PresetPalettes_exports.defaultPalettesConfig })],
4166
+ [
4167
+ {
4168
+ label: (0, i18n_exports._)("Major value size (px)"),
4169
+ option: "majorFontSize",
4170
+ editor: "editor.number",
4171
+ editorProps: {
4172
+ min: 1
4173
+ },
4174
+ placeholder: (0, i18n_exports._)("Auto"),
4175
+ showEditor: ({ options }) => options.showValue || options.showValue === void 0
4176
+ },
4177
+ {
4178
+ label: (0, i18n_exports._)("Trend value size (px)"),
4179
+ option: "trendFontSize",
4180
+ editor: "editor.number",
4181
+ editorProps: {
4182
+ min: 1
4183
+ },
4184
+ placeholder: (0, i18n_exports._)("Auto"),
4185
+ showEditor: ({ options }) => options.showValue || options.showValue === void 0,
4186
+ isDisabled: ({ options }) => options.trendDisplay === "off"
4187
+ }
4188
+ ],
4189
+ [
4190
+ {
4191
+ label: (0, i18n_exports._)("Major value abbreviation"),
4192
+ option: "shouldAbbreviateMajorValue",
4193
+ editor: "editor.checkbox"
4194
+ }
4195
+ ],
4196
+ [
4197
+ {
4198
+ label: (0, i18n_exports._)("Trend value abbreviation"),
4199
+ option: "shouldAbbreviateTrendValue",
4200
+ editor: "editor.checkbox"
4201
+ }
4202
+ ],
4203
+ [
4204
+ {
4205
+ label: (0, i18n_exports._)("Alignment"),
4206
+ editor: "editor.radioBar",
4207
+ option: "align",
4208
+ editorProps: {
4209
+ values: [
4210
+ { label: (0, i18n_exports._)("Left"), value: "left" },
4211
+ { label: (0, i18n_exports._)("Center"), value: "center" },
4212
+ { label: (0, i18n_exports._)("Right"), value: "right" }
4213
+ ]
4214
+ },
4215
+ showEditor: ({ options }) => options.showValue || options.showValue === void 0
4216
+ }
4217
+ ]
4218
+ ]
4199
4219
  }
4200
- return { splitDataSources, errorCode };
4201
- };
4202
- var getTrellisDataSourcesBySplitMode = (splitMode, dataSources, trellisSplitBy) => {
4203
- let result = null;
4204
- try {
4205
- if (splitMode === trellisUtils_exports.TIMECHART) {
4206
- result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources) : dataSourcesSplitByModeTimechart(dataSources, trellisSplitBy);
4207
- } else if (splitMode === trellisUtils_exports.STATS) {
4208
- result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsStats(dataSources) : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, trellisUtils_exports.STATS);
4209
- } else if (splitMode === trellisUtils_exports.CHART) {
4210
- result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsTimechartAndChart(dataSources) : dataSourcesSplitByModeChart(dataSources, trellisSplitBy);
4211
- } else if (splitMode === trellisUtils_exports.UNKNOWN) {
4212
- result = trellisSplitBy === AGGREGATIONS ? dataSourcesSplitByAggregationsUnknown(dataSources) : dataSourcesSplitByModeStatsorUnknown(dataSources, trellisSplitBy, trellisUtils_exports.UNKNOWN);
4220
+ ];
4221
+ var config = {
4222
+ /**
4223
+ * unique viz key
4224
+ */
4225
+ key: "splunk.singlevalue",
4226
+ /**
4227
+ * viz name
4228
+ */
4229
+ name: (0, i18n_exports._)("Single value"),
4230
+ category: "Single Value" /* SINGLE_VALUE */,
4231
+ /**
4232
+ * viz icon
4233
+ */
4234
+ icon: visualization_icons_exports.SingleValue,
4235
+ placeholderIcon: placeholders_exports.SingleValue,
4236
+ dataContract,
4237
+ size,
4238
+ defaultContext,
4239
+ optionsSchema: visualization_schemas_exports.singleValueOptionsSchema,
4240
+ editorConfig,
4241
+ events: {
4242
+ "value.click": {
4243
+ description: "trigger when user clicks major value",
4244
+ payloadKeys: ["majorValue", "trendValue"]
4213
4245
  }
4214
- } catch (ex) {
4215
- console.error("getTrellisDataSourcesBySplitMode ", ex);
4216
- result = { splitDataSources: null, errorCode: "UNKNOWN" };
4217
- }
4218
- return result;
4246
+ },
4247
+ supports: ["dynamic-options" /* DYNAMIC_OPTIONS */, "events" /* EVENTS */, "placeholder" /* PLACEHOLDER */, "trellis" /* TRELLIS */],
4248
+ themes,
4249
+ requiredProps: ["majorValue"]
4219
4250
  };
4251
+ var config_default = enhanceConfig(config);
4252
+
4253
+ // esm-externals:@splunk/react-ui/Paginator
4254
+ var Paginator_exports = {};
4255
+ __export(Paginator_exports, {
4256
+ default: () => Paginator_default
4257
+ });
4258
+ var defaultImport40 = __toESM(require("@splunk/react-ui/Paginator"));
4259
+ __reExport(Paginator_exports, require("@splunk/react-ui/Paginator"));
4260
+ var Paginator_default = "default" in defaultImport40 ? defaultImport40.default : defaultImport40;
4261
+
4262
+ // esm-externals:@splunk/themes
4263
+ var themes_exports = {};
4264
+ __export(themes_exports, {
4265
+ default: () => themes_default
4266
+ });
4267
+ var defaultImport41 = __toESM(require("@splunk/themes"));
4268
+ __reExport(themes_exports, require("@splunk/themes"));
4269
+ var themes_default = "default" in defaultImport41 ? defaultImport41.default : defaultImport41;
4270
+
4271
+ // esm-externals:@splunk/themes/useSplunkTheme
4272
+ var useSplunkTheme_exports = {};
4273
+ __export(useSplunkTheme_exports, {
4274
+ default: () => useSplunkTheme_default
4275
+ });
4276
+ var defaultImport42 = __toESM(require("@splunk/themes/useSplunkTheme"));
4277
+ __reExport(useSplunkTheme_exports, require("@splunk/themes/useSplunkTheme"));
4278
+ var useSplunkTheme_default = "default" in defaultImport42 ? defaultImport42.default : defaultImport42;
4220
4279
 
4221
4280
  // src/common/hocs/withTrellis.tsx
4222
4281
  var TrellisContainer = styled_components_default.div`
@@ -4280,7 +4339,11 @@ var withTrellis = (Viz) => {
4280
4339
  trellisMinColumnWidth,
4281
4340
  trellisRowHeight,
4282
4341
  splitByLayout,
4283
- trellisSplitBy
4342
+ trellisSplitBy,
4343
+ trellisSharedScale,
4344
+ stackMode,
4345
+ yAxisMin,
4346
+ yAxisMax
4284
4347
  } = mergedOptions;
4285
4348
  const colCount = trellisColumns > 0 ? trellisColumns : defaultOptions.trellisColumns;
4286
4349
  const pageCount = +trellisPageCount > 0 ? +trellisPageCount : defaultOptions.trellisPageCount;
@@ -4351,10 +4414,10 @@ var withTrellis = (Viz) => {
4351
4414
  [pageNum, pagedData]
4352
4415
  );
4353
4416
  const featureFlagContext = react_exports.useContext(FeatureFlagContext_default);
4354
- const isTrellisFeatureFlagOn = Boolean(
4417
+ const isTrellisFeatureFlagOn2 = Boolean(
4355
4418
  featureFlagContext && featureFlagContext.visualizations_enableTrellis
4356
4419
  );
4357
- if (!isTrellisFeatureFlagOn || !splitByLayout || splitByLayout !== visualization_schemas_exports.LAYOUT_TYPE.Trellis) {
4420
+ if (!isTrellisFeatureFlagOn2 || !splitByLayout || splitByLayout !== visualization_schemas_exports.LAYOUT_TYPE.Trellis) {
4358
4421
  return /* @__PURE__ */ react_exports.createElement(Viz, __spreadValues({}, opts));
4359
4422
  }
4360
4423
  if (splitByLayout === visualization_schemas_exports.LAYOUT_TYPE.Trellis) {
@@ -4383,6 +4446,13 @@ var withTrellis = (Viz) => {
4383
4446
  splitByKeys = splitByKeysModified;
4384
4447
  totalPages = splitByKeysModified ? Math.ceil(splitByKeysModified.length / pageCount) : 0;
4385
4448
  }
4449
+ const [calculatedMin, calculatedMax] = determineMinMax(
4450
+ modifiedDataSourceBySplitBy,
4451
+ trellisSharedScale,
4452
+ yAxisMin,
4453
+ yAxisMax,
4454
+ stackMode
4455
+ );
4386
4456
  return /* @__PURE__ */ react_exports.createElement(TrellisContainer, { height, width, backgroundColor: trellisBackgroundColor }, /* @__PURE__ */ react_exports.createElement(
4387
4457
  TrellisContainerGrid,
4388
4458
  {
@@ -4391,7 +4461,7 @@ var withTrellis = (Viz) => {
4391
4461
  colMinWidth,
4392
4462
  rowHeight
4393
4463
  },
4394
- pagedData && pagedData.map((splitByKey, idx) => /* @__PURE__ */ react_exports.createElement(
4464
+ pagedData == null ? void 0 : pagedData.map((splitByKey, idx) => /* @__PURE__ */ react_exports.createElement(
4395
4465
  "div",
4396
4466
  {
4397
4467
  className: "child",
@@ -4412,7 +4482,10 @@ var withTrellis = (Viz) => {
4412
4482
  trellisKey: splitByKey,
4413
4483
  trellisSplitBy: currTrellisSplitBy,
4414
4484
  dataSources: modifiedDataSourceBySplitBy[splitByKey],
4415
- options,
4485
+ options: __spreadProps(__spreadValues({}, options), {
4486
+ yAxisMin: calculatedMin,
4487
+ yAxisMax: calculatedMax
4488
+ }),
4416
4489
  key: `viz-${idx.toString()}`,
4417
4490
  height: containerHeight,
4418
4491
  width: containerWidth
@@ -4464,11 +4537,16 @@ var computeVizProps = (_a) => {
4464
4537
  }
4465
4538
  return __spreadValues({ defaultThemeColors }, props);
4466
4539
  };
4540
+ var computeVizPropsBeforeEval = (options) => {
4541
+ const trendColor = getTrendColorWithPercent(options);
4542
+ return __spreadValues({}, trendColor);
4543
+ };
4467
4544
  var viz = withTrellis_default(
4468
4545
  withDashboardViz_default({
4469
4546
  ReactViz: SingleValue_default,
4470
4547
  vizConfig: config_default,
4471
4548
  computeVizProps,
4549
+ computeVizPropsBeforeEval,
4472
4550
  useIconPlaceholder: (dataSources, loading) => isLoadingOrNoColumns(dataSources, loading)
4473
4551
  })
4474
4552
  );