@splunk/visualizations 26.1.2 → 26.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/Area.config.js +2 -1
  2. package/Area.config.js.map +1 -1
  3. package/Area.js +1562 -433
  4. package/Area.js.map +1 -1
  5. package/Bar.config.js +1 -0
  6. package/Bar.config.js.map +1 -1
  7. package/Bar.js +1555 -430
  8. package/Bar.js.map +1 -1
  9. package/Bubble.config.js +1 -0
  10. package/Bubble.config.js.map +1 -1
  11. package/Bubble.js +1580 -455
  12. package/Bubble.js.map +1 -1
  13. package/ChoroplethSvg.config.js +1 -0
  14. package/ChoroplethSvg.config.js.map +1 -1
  15. package/ChoroplethSvg.js +1421 -352
  16. package/ChoroplethSvg.js.map +1 -1
  17. package/Column.config.js +2 -1
  18. package/Column.config.js.map +1 -1
  19. package/Column.js +1564 -435
  20. package/Column.js.map +1 -1
  21. package/Ellipse.config.js +1 -0
  22. package/Ellipse.config.js.map +1 -1
  23. package/Ellipse.js +1342 -297
  24. package/Ellipse.js.map +1 -1
  25. package/Events.config.js +4 -0
  26. package/Events.config.js.map +1 -1
  27. package/Events.js +1503 -489
  28. package/Events.js.map +1 -1
  29. package/FEATUREFLAGS.md +3 -0
  30. package/FillerGauge.config.js +1 -0
  31. package/FillerGauge.config.js.map +1 -1
  32. package/FillerGauge.js +1406 -345
  33. package/FillerGauge.js.map +1 -1
  34. package/Image.config.js +1 -0
  35. package/Image.config.js.map +1 -1
  36. package/Image.js +2355 -1183
  37. package/Image.js.map +1 -1
  38. package/Line.config.js +2 -1
  39. package/Line.config.js.map +1 -1
  40. package/Line.js +1562 -433
  41. package/Line.js.map +1 -1
  42. package/LinkGraph.config.js +1 -0
  43. package/LinkGraph.config.js.map +1 -1
  44. package/LinkGraph.js +18499 -24296
  45. package/LinkGraph.js.map +1 -1
  46. package/Map.config.js +1 -0
  47. package/Map.config.js.map +1 -1
  48. package/Map.js +2556 -1527
  49. package/Map.js.map +1 -1
  50. package/Markdown.config.js +1 -0
  51. package/Markdown.config.js.map +1 -1
  52. package/Markdown.js +1952 -883
  53. package/Markdown.js.map +1 -1
  54. package/MarkerGauge.config.js +1 -0
  55. package/MarkerGauge.config.js.map +1 -1
  56. package/MarkerGauge.js +4049 -2965
  57. package/MarkerGauge.js.map +1 -1
  58. package/ParallelCoordinates.config.js +1 -0
  59. package/ParallelCoordinates.config.js.map +1 -1
  60. package/ParallelCoordinates.js +3286 -2215
  61. package/ParallelCoordinates.js.map +1 -1
  62. package/Pie.config.js +1 -0
  63. package/Pie.config.js.map +1 -1
  64. package/Pie.js +2187 -1036
  65. package/Pie.js.map +1 -1
  66. package/Punchcard.config.js +1 -0
  67. package/Punchcard.config.js.map +1 -1
  68. package/Punchcard.js +3397 -2299
  69. package/Punchcard.js.map +1 -1
  70. package/Rectangle.config.js +1 -0
  71. package/Rectangle.config.js.map +1 -1
  72. package/Rectangle.js +2181 -1112
  73. package/Rectangle.js.map +1 -1
  74. package/Sankey.config.js +1 -0
  75. package/Sankey.config.js.map +1 -1
  76. package/Sankey.js +3275 -2199
  77. package/Sankey.js.map +1 -1
  78. package/Scatter.config.js +1 -0
  79. package/Scatter.config.js.map +1 -1
  80. package/Scatter.js +3551 -2400
  81. package/Scatter.js.map +1 -1
  82. package/SingleValue.config.js +27 -0
  83. package/SingleValue.config.js.map +1 -1
  84. package/SingleValue.js +5551 -4397
  85. package/SingleValue.js.map +1 -1
  86. package/SingleValueBasic.js +1227 -1209
  87. package/SingleValueBasic.js.map +1 -1
  88. package/SingleValueIcon.config.js +27 -0
  89. package/SingleValueIcon.config.js.map +1 -1
  90. package/SingleValueIcon.js +2850 -1696
  91. package/SingleValueIcon.js.map +1 -1
  92. package/SingleValueRadial.config.js +1 -0
  93. package/SingleValueRadial.config.js.map +1 -1
  94. package/SingleValueRadial.js +6334 -5215
  95. package/SingleValueRadial.js.map +1 -1
  96. package/SparkLine.js +96 -96
  97. package/SparkLine.js.map +1 -1
  98. package/Table.config.js +172 -7
  99. package/Table.config.js.map +1 -1
  100. package/Table.js +3500 -2195
  101. package/Table.js.map +1 -1
  102. package/common/Charting.js +1009 -82
  103. package/common/Charting.js.map +1 -1
  104. package/common/ChartingApi.js +4 -4
  105. package/common/ChartingApi.js.map +1 -1
  106. package/common/DocExampleWithVizSandbox.js +54 -57
  107. package/common/DocExampleWithVizSandbox.js.map +1 -1
  108. package/common/EventsDoc.js +40 -40
  109. package/common/EventsDoc.js.map +1 -1
  110. package/common/GaugeMajorTicks.js +15 -13
  111. package/common/GaugeMajorTicks.js.map +1 -1
  112. package/common/GaugeValueMarker.js +12 -12
  113. package/common/GaugeValueMarker.js.map +1 -1
  114. package/common/OptionsDoc.js +34 -34
  115. package/common/OptionsDoc.js.map +1 -1
  116. package/common/OverviewDoc.js +124 -103
  117. package/common/OverviewDoc.js.map +1 -1
  118. package/common/SplunkVisualization.js +49 -49
  119. package/common/SplunkVisualization.js.map +1 -1
  120. package/common/SplunkVisualizationApi.js +4 -4
  121. package/common/SplunkVisualizationApi.js.map +1 -1
  122. package/common/ThemesDoc.js +31 -31
  123. package/common/ThemesDoc.js.map +1 -1
  124. package/common/chartingUtils.js +24 -8
  125. package/common/chartingUtils.js.map +1 -1
  126. package/common/docUtils.js +4 -4
  127. package/common/docUtils.js.map +1 -1
  128. package/common/gaugeUtils.js +16 -16
  129. package/common/gaugeUtils.js.map +1 -1
  130. package/common/shapeUtils.js +36 -36
  131. package/common/shapeUtils.js.map +1 -1
  132. package/common/utils/configUtils.js +48 -47
  133. package/common/utils/configUtils.js.map +1 -1
  134. package/common/utils/dataUtils.js +832 -6
  135. package/common/utils/dataUtils.js.map +1 -1
  136. package/common/utils/featureFlagUtils.js +139 -0
  137. package/common/utils/featureFlagUtils.js.map +1 -0
  138. package/common/utils/hocUtils.js +2 -2
  139. package/common/utils/hocUtils.js.map +1 -1
  140. package/common/utils/layoutUtils.js +2 -2
  141. package/common/utils/layoutUtils.js.map +1 -1
  142. package/common/utils/mapUtils.js +77 -54
  143. package/common/utils/mapUtils.js.map +1 -1
  144. package/common/utils/singleValueUtils.js +28 -19
  145. package/common/utils/singleValueUtils.js.map +1 -1
  146. package/common/utils/testHelper.js +10 -10
  147. package/common/utils/testHelper.js.map +1 -1
  148. package/common/utils/trellisUtils.js +6 -6
  149. package/common/utils/trellisUtils.js.map +1 -1
  150. package/common/utils/urlUtils.js +2 -2
  151. package/common/utils/urlUtils.js.map +1 -1
  152. package/common/withDashboardViz.js +1313 -235
  153. package/common/withDashboardViz.js.map +1 -1
  154. package/package.json +14 -13
  155. package/__mocks__/fileMock.js +0 -2
  156. package/__mocks__/styleMock.js +0 -2
  157. package/babel.config.js +0 -11
  158. package/jest.config.js +0 -8
  159. package/loki.config.js +0 -14
package/Bubble.js CHANGED
@@ -87,20 +87,20 @@ module.exports =
87
87
  /******/
88
88
  /******/
89
89
  /******/ // Load entry module and return exports
90
- /******/ return __webpack_require__(__webpack_require__.s = 183);
90
+ /******/ return __webpack_require__(__webpack_require__.s = 205);
91
91
  /******/ })
92
92
  /************************************************************************/
93
93
  /******/ ([
94
94
  /* 0 */
95
95
  /***/ (function(module, exports) {
96
96
 
97
- module.exports = require("prop-types");
97
+ module.exports = require("react");
98
98
 
99
99
  /***/ }),
100
100
  /* 1 */
101
101
  /***/ (function(module, exports) {
102
102
 
103
- module.exports = require("react");
103
+ module.exports = require("prop-types");
104
104
 
105
105
  /***/ }),
106
106
  /* 2 */
@@ -148,6 +148,7 @@ var VizBehavior;
148
148
  */
149
149
  VizBehavior["DYNAMIC_OPTIONS"] = "dynamic-options";
150
150
  VizBehavior["EVENTS"] = "events";
151
+ VizBehavior["DOWNSAMPLING"] = "downsampling";
151
152
  /**
152
153
  * Placeholder behavior: visualization will display a placeholder rather than fail if any of the `requiredProps` is
153
154
  * missing.
@@ -163,7 +164,7 @@ var VizBehavior;
163
164
  /* 7 */
164
165
  /***/ (function(module, exports) {
165
166
 
166
- module.exports = require("@babel/runtime/helpers/defineProperty");
167
+ module.exports = require("@babel/runtime/helpers/slicedToArray");
167
168
 
168
169
  /***/ }),
169
170
  /* 8 */
@@ -175,46 +176,540 @@ module.exports = require("@babel/runtime/helpers/toConsumableArray");
175
176
  /* 9 */
176
177
  /***/ (function(module, exports) {
177
178
 
178
- module.exports = require("@babel/runtime/helpers/classCallCheck");
179
+ module.exports = require("@babel/runtime/helpers/defineProperty");
179
180
 
180
181
  /***/ }),
181
182
  /* 10 */
182
183
  /***/ (function(module, exports) {
183
184
 
184
- module.exports = require("@splunk/visualizations-shared/Message");
185
+ module.exports = require("@babel/runtime/helpers/classCallCheck");
185
186
 
186
187
  /***/ }),
187
188
  /* 11 */
188
189
  /***/ (function(module, exports) {
189
190
 
190
- module.exports = require("@splunk/themes/variables");
191
+ module.exports = require("@splunk/visualizations-shared/numberUtils");
191
192
 
192
193
  /***/ }),
193
194
  /* 12 */
194
195
  /***/ (function(module, exports) {
195
196
 
196
- module.exports = require("@splunk/visualizations-shared/colorUtils");
197
+ module.exports = require("@splunk/visualizations-shared/Message");
197
198
 
198
199
  /***/ }),
199
200
  /* 13 */
201
+ /***/ (function(module, exports) {
202
+
203
+ module.exports = require("@splunk/themes/variables");
204
+
205
+ /***/ }),
206
+ /* 14 */
207
+ /***/ (function(module, exports, __webpack_require__) {
208
+
209
+ "use strict";
210
+
211
+
212
+ Object.defineProperty(exports, "__esModule", {
213
+ value: true
214
+ });
215
+ exports.downsampleDataSources = exports.calculateDownsamplingThreshold = exports.calculateThresholdOnRangeSelect = exports.isDownsamplingEnabledForViz = exports.convertToArrOfObjects = void 0;
216
+
217
+ var numberUtils_1 = __webpack_require__(11);
218
+
219
+ var interfaces_1 = __webpack_require__(40); // TODO: utilize this fn in ParallelCoordinates
220
+
221
+
222
+ var convertToArrOfObjects = function convertToArrOfObjects(columns, fields) {
223
+ if (!columns || !columns[0] || !columns[0].length) return [];
224
+ var data = [];
225
+
226
+ var _loop = function _loop(i) {
227
+ var newObj = {};
228
+ fields.forEach(function (field, index) {
229
+ var fieldName = typeof field === 'string' ? field : field.name;
230
+
231
+ if (columns[index][i] === '') {
232
+ newObj[fieldName] = null;
233
+ } else {
234
+ newObj[fieldName] = columns[index][i];
235
+ }
236
+ });
237
+ data.push(newObj);
238
+ };
239
+
240
+ for (var i = 0; i < columns[0].length; i += 1) {
241
+ _loop(i);
242
+ }
243
+
244
+ return data;
245
+ };
246
+
247
+ exports.convertToArrOfObjects = convertToArrOfObjects; // LTTB algorithm which can be used to downsample time series data while striving to maintain
248
+ // the spikes and overall shape of the chart
249
+ // Copied from https://github.com/sveinn-steinarsson/flot-downsample/blob/0815010016fc94b1bbc6a010afb8aad13ada6d0d/jquery.flot.downsample.js
250
+ // Modifications include:
251
+ // 1) Convert to modern JavaScript(use const, let, and use array.push to push to last element of array)
252
+ // 2) Convert to camel case
253
+ // 3) Convert to TS and also return the indices of the points that are in the downsampled result.
254
+ // 4) Add a new parameter preferredDownsampleIndices that correspond to the indices of points
255
+ // that should be used in case of a tie of the max area in a bucket
256
+
257
+ var largestTriangleThreeBuckets = function largestTriangleThreeBuckets(data, threshold, preferredDownsampleIndices) {
258
+ var dataLength = data.length;
259
+ var downsampledIndices = [];
260
+
261
+ if (threshold >= dataLength || threshold === 0) {
262
+ var allIndices = data.map(function (values, index) {
263
+ return index;
264
+ });
265
+ return {
266
+ downsampledData: data,
267
+ downsampledIndices: allIndices
268
+ }; // Nothing to do
269
+ }
270
+
271
+ var sampled = [];
272
+ var sampledIndex = 0; // Bucket size. Leave room for start and end data points
273
+
274
+ var every = (dataLength - 2) / (threshold - 2);
275
+ var a = 0; // Initially a is the first point in the triangle
276
+
277
+ var maxAreaPoint;
278
+ var maxArea;
279
+ var area;
280
+ var nextA;
281
+ sampled.push(data[a]); // Always add the first point
282
+
283
+ downsampledIndices.push(0); // eslint-disable-next-line no-plusplus
284
+
285
+ for (var i = 0; i < threshold - 2; i++) {
286
+ // Calculate point average for next bucket (containing c)
287
+ var avgX = 0;
288
+ var avgY = 0;
289
+ var avgRangeStart = Math.floor((i + 1) * every) + 1;
290
+ var avgRangeEnd = Math.floor((i + 2) * every) + 1;
291
+ avgRangeEnd = avgRangeEnd < dataLength ? avgRangeEnd : dataLength;
292
+ var avgRangeLength = avgRangeEnd - avgRangeStart; // eslint-disable-next-line no-plusplus
293
+
294
+ for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {
295
+ avgX += Number(data[avgRangeStart][0]); // * 1 enforces Number (value may be Date)
296
+
297
+ avgY += data[avgRangeStart][1] * 1;
298
+ }
299
+
300
+ avgX /= avgRangeLength;
301
+ avgY /= avgRangeLength; // Get the range for this bucket
302
+
303
+ var rangeOffs = Math.floor((i + 0) * every) + 1;
304
+ var rangeTo = Math.floor((i + 1) * every) + 1; // Point a
305
+
306
+ var pointAX = Number(data[a][0]); // Enforce Number (value may be Date)
307
+
308
+ var pointAY = data[a][1] * 1; // eslint-disable-next-line no-multi-assign
309
+
310
+ maxArea = area = -1;
311
+ var maxAreaIndex = rangeOffs; // eslint-disable-next-line no-plusplus
312
+
313
+ for (; rangeOffs < rangeTo; rangeOffs++) {
314
+ // Calculate triangle area over three buckets
315
+ area = Math.abs((pointAX - avgX) * (data[rangeOffs][1] - pointAY) - (pointAX - Number(data[rangeOffs][0])) * (avgY - pointAY)) * 0.5; // Modification: try to downsample the least amount of points possible when there are multiple series
316
+ // If all points in a bucket have the same area, prioritize the one with an x index
317
+ // that also existed from another series so we don't add another point unnecessarily.
318
+ // By default LTTB picks the leftmost point in the bucket
319
+
320
+ if (area > maxArea || area === maxArea && preferredDownsampleIndices.has(rangeOffs)) {
321
+ maxArea = area;
322
+ maxAreaPoint = data[rangeOffs];
323
+ nextA = rangeOffs; // Next a is this b
324
+ // Modification: save the index of the point with the most area
325
+
326
+ maxAreaIndex = rangeOffs;
327
+ }
328
+ } // eslint-disable-next-line no-plusplus
329
+
330
+
331
+ sampled[sampledIndex++] = maxAreaPoint; // Pick this point from the bucket
332
+
333
+ downsampledIndices.push(maxAreaIndex);
334
+ a = nextA; // This a is the next a (chosen b)
335
+ } // eslint-disable-next-line no-plusplus
336
+
337
+
338
+ sampled[sampledIndex++] = data[dataLength - 1]; // Always add last
339
+
340
+ downsampledIndices.push(dataLength - 1);
341
+ return {
342
+ downsampledData: sampled,
343
+ downsampledIndices: downsampledIndices
344
+ };
345
+ };
346
+ /**
347
+ * Strictly coerces the entire column to numbers if it only consists of numeric strings or numbers. Also determines
348
+ * if at least one of the values in the column can be loosely coerced to a number.
349
+ * If the column cannot be strictly downsampled (if it contains nulls or non-numeric strings), returns an empty array and
350
+ * returns that it cannot downsample the column.
351
+ */
352
+
353
+
354
+ var strictlyCoerceYColumn = function strictlyCoerceYColumn(column) {
355
+ // Splunk charting allows for numbers in formats such as negative hex that
356
+ // Number() does not support and also allows loose coercion of hex numbers (but not other formats)
357
+ // We want to identify columns which contain at least one value that can be loosely coerced
358
+ var canLooselyCoerceSomeValues = column.findIndex(function (value) {
359
+ return (0, numberUtils_1.startsWithNumber)("".concat(value));
360
+ }) >= 0; // If not all values in column can be strictly coerced to a number, we do not downsample
361
+
362
+ var coercedColumn = [];
363
+ var canDownsampleColumn = !column.some(function (value) {
364
+ var coercedValue = Number(value); // if it can't be parsed or isn't safe, fail
365
+
366
+ if (Number.isNaN(coercedValue) || coercedValue <= Number.MIN_SAFE_INTEGER || coercedValue >= Number.MAX_SAFE_INTEGER || typeof value !== 'string' && typeof value !== 'number') {
367
+ return true;
368
+ } // save value and continue to next
369
+
370
+
371
+ coercedColumn.push(coercedValue);
372
+ return false;
373
+ });
374
+ return {
375
+ canDownsampleColumn: canDownsampleColumn,
376
+ canLooselyCoerceSomeValues: canLooselyCoerceSomeValues,
377
+ coercedColumn: canDownsampleColumn ? coercedColumn : []
378
+ };
379
+ };
380
+ /**
381
+ * Tries to coerce the x-column to numbers or dates, if it is eligible for downsampling.
382
+ * Only strictly increasing x-columns are eligible for downsampling.
383
+ * If the column is not eligible for downsampling, returns an empty array.
384
+ */
385
+
386
+
387
+ var strictlyCoerceXColumn = function strictlyCoerceXColumn(column, fieldType) {
388
+ if (fieldType === 'number') {
389
+ var coercedXColumn = column.map(function (xValue) {
390
+ return Number(xValue);
391
+ });
392
+
393
+ if (isColumnStrictlyIncreasing(coercedXColumn, fieldType)) {
394
+ return coercedXColumn;
395
+ }
396
+ } else if (fieldType === 'time') {
397
+ var _coercedXColumn = column.map(function (xValue) {
398
+ return new Date(xValue);
399
+ });
400
+
401
+ if (isColumnStrictlyIncreasing(_coercedXColumn, fieldType)) {
402
+ return _coercedXColumn;
403
+ }
404
+ }
405
+
406
+ return [];
407
+ };
408
+
409
+ var isDownsamplingEnabledForViz = function isDownsamplingEnabledForViz(_ref) {
410
+ var vizConfig = _ref.vizConfig;
411
+
412
+ var _a;
413
+
414
+ return (_a = vizConfig.supports) === null || _a === void 0 ? void 0 : _a.includes(interfaces_1.VizBehavior.DOWNSAMPLING);
415
+ };
416
+
417
+ exports.isDownsamplingEnabledForViz = isDownsamplingEnabledForViz;
418
+
419
+ var calculateThresholdOnRangeSelect = function calculateThresholdOnRangeSelect(_ref2) {
420
+ var firstIndex = _ref2.firstIndex,
421
+ lastIndex = _ref2.lastIndex,
422
+ dataSources = _ref2.dataSources,
423
+ width = _ref2.width;
424
+
425
+ var _a, _b, _c;
426
+
427
+ var window = lastIndex - firstIndex + 1;
428
+ var ratio = Math.round(Number(((_c = (_b = (_a = dataSources === null || dataSources === void 0 ? void 0 : dataSources.primary) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.columns[0]) === null || _c === void 0 ? void 0 : _c.length) / window) * 10) / 10;
429
+ return Math.round(ratio * Number(width));
430
+ };
431
+
432
+ exports.calculateThresholdOnRangeSelect = calculateThresholdOnRangeSelect;
433
+ /**
434
+ * Calculates the downsampling threshold based on the range selection. If search zoom is enabled or there is no selection,
435
+ * then returns the width of the visualization.
436
+ *
437
+ * Otherwise calculates the threshold based on the ratio of the window selected compared to the size of the non-downsampled
438
+ * data sources. Returns null if the chart event's dataset does not match the passed in primary data source or if the chart is zoomed
439
+ * in for a categorical chart.
440
+ */
441
+
442
+ var calculateDownsamplingThreshold = function calculateDownsamplingThreshold(_ref3) {
443
+ var enableSearchZoom = _ref3.enableSearchZoom,
444
+ dataSources = _ref3.dataSources,
445
+ selectChartEvent = _ref3.selectChartEvent,
446
+ width = _ref3.width,
447
+ xField = _ref3.xField,
448
+ y2Fields = _ref3.y2Fields;
449
+
450
+ var _a, _b, _c;
451
+
452
+ if (enableSearchZoom || !selectChartEvent) {
453
+ return Number(width);
454
+ }
455
+
456
+ var primaryDataSource = dataSources === null || dataSources === void 0 ? void 0 : dataSources.primary;
457
+
458
+ if (!primaryDataSource) {
459
+ return null;
460
+ }
461
+
462
+ var startXIndex = selectChartEvent.startXIndex,
463
+ endXIndex = selectChartEvent.endXIndex,
464
+ currentTarget = selectChartEvent.currentTarget;
465
+
466
+ try {
467
+ var xFieldIndex = (_a = primaryDataSource === null || primaryDataSource === void 0 ? void 0 : primaryDataSource.data) === null || _a === void 0 ? void 0 : _a.fields.findIndex(function (field) {
468
+ return field.name === xField;
469
+ });
470
+ var downsampledXFieldIndex = (_b = currentTarget.dataSet) === null || _b === void 0 ? void 0 : _b.fields.findIndex(function (field) {
471
+ return field === xField;
472
+ });
473
+
474
+ if (xFieldIndex === -1 || downsampledXFieldIndex === -1) {
475
+ return null;
476
+ }
477
+
478
+ var fullSeries = (_c = primaryDataSource === null || primaryDataSource === void 0 ? void 0 : primaryDataSource.data) === null || _c === void 0 ? void 0 : _c.columns[xFieldIndex];
479
+ var downsampledSeries = currentTarget.dataSet.seriesList[downsampledXFieldIndex];
480
+ var firstIndex = fullSeries.findIndex(function (x) {
481
+ return downsampledSeries[startXIndex] === x;
482
+ });
483
+ var lastIndex = fullSeries.findIndex(function (x) {
484
+ return downsampledSeries[endXIndex] === x;
485
+ }); // For charts with categorical x-axis (charts with an xField that isn't _time), do not support
486
+ // re-calculating downsampling threshold if the chart is zoomed in until SPL-259458 is fixed
487
+ // Also do not support re-calculating downsampling threshold for zoomed-in charts with y2
488
+ // until SPL-259611 is fixed
489
+
490
+ if (xField !== '_time' || (y2Fields === null || y2Fields === void 0 ? void 0 : y2Fields.length)) {
491
+ return firstIndex === 0 && lastIndex === fullSeries.length - 1 ? width : null;
492
+ }
493
+
494
+ if (firstIndex >= 0 && lastIndex >= 0 && firstIndex <= lastIndex) {
495
+ return (0, exports.calculateThresholdOnRangeSelect)({
496
+ firstIndex: firstIndex,
497
+ lastIndex: lastIndex,
498
+ dataSources: dataSources,
499
+ width: width
500
+ });
501
+ }
502
+ } catch (e) {
503
+ console.error('Error occurred while setting downsample threshold on range select event', e);
504
+ }
505
+
506
+ return null;
507
+ };
508
+
509
+ exports.calculateDownsamplingThreshold = calculateDownsamplingThreshold;
510
+
511
+ var isColumnStrictlyIncreasing = function isColumnStrictlyIncreasing(column, fieldType) {
512
+ return column.every(function (value, index) {
513
+ if (fieldType === 'number') {
514
+ if (Number.isNaN(value)) {
515
+ return false;
516
+ }
517
+ }
518
+
519
+ if (fieldType === 'time') {
520
+ if (Number.isNaN(value.getTime())) {
521
+ return false;
522
+ }
523
+ }
524
+
525
+ if (index === 0) {
526
+ return true;
527
+ }
528
+
529
+ return value > column[index - 1];
530
+ });
531
+ };
532
+ /**
533
+ * Verifies that all of the columns that are displayed in a chart can be downsampled. Valid columns that can be
534
+ * displayed are those that contain at least one number. We can only downsample columns that only consist of numbers.
535
+ *
536
+ * If all columns can be downsampled, returns the x column coerced to time/number and y columns coerced to numbers.
537
+ * If not all columns can be downsampled, then returns empty arrays for both x and y
538
+ */
539
+
540
+
541
+ var tryToCoerceAllDisplayedFields = function tryToCoerceAllDisplayedFields(ds, xField, yFields, fieldTypes) {
542
+ var xColumn = [];
543
+ var yColumns = [];
544
+ var canDownsample = !ds.data.fields.some(function (field, index) {
545
+ var _a, _b;
546
+
547
+ var fieldName = (_a = field.name) !== null && _a !== void 0 ? _a : field;
548
+ var fieldType = (_b = fieldTypes[index]) !== null && _b !== void 0 ? _b : 'unknown';
549
+ var column = ds.data.columns[index];
550
+ var hasDisplayedColumnThatCantBeDownsampled = false;
551
+
552
+ if (fieldName === xField) {
553
+ xColumn = strictlyCoerceXColumn(column, fieldType);
554
+ } else if (yFields.has(fieldName)) {
555
+ var _strictlyCoerceYColum = strictlyCoerceYColumn(ds.data.columns[index]),
556
+ coercedColumn = _strictlyCoerceYColum.coercedColumn,
557
+ canLooselyCoerceSomeValues = _strictlyCoerceYColum.canLooselyCoerceSomeValues,
558
+ canDownsampleColumn = _strictlyCoerceYColum.canDownsampleColumn; // do not perform downsampling if a column can possibly be displayed but cannot
559
+ // be downsampled using LTTB
560
+
561
+
562
+ hasDisplayedColumnThatCantBeDownsampled = canLooselyCoerceSomeValues && !canDownsampleColumn;
563
+
564
+ if (hasDisplayedColumnThatCantBeDownsampled) {
565
+ return true;
566
+ }
567
+
568
+ if (canDownsampleColumn) {
569
+ yColumns.push(coercedColumn);
570
+ }
571
+ }
572
+
573
+ return false;
574
+ });
575
+
576
+ if (canDownsample) {
577
+ return {
578
+ xColumn: xColumn,
579
+ yColumns: yColumns
580
+ };
581
+ }
582
+
583
+ return {
584
+ xColumn: [],
585
+ yColumns: []
586
+ };
587
+ };
588
+
589
+ var pickIndicesFromDataSource = function pickIndicesFromDataSource(ds, indices) {
590
+ var sortedIndices = Array.from(indices).sort(function (a, b) {
591
+ return a - b;
592
+ });
593
+ var slicedColumns = [];
594
+ ds.data.columns.forEach(function (column) {
595
+ var slicedColumn = [];
596
+ sortedIndices.forEach(function (index) {
597
+ slicedColumn.push(column[index]);
598
+ });
599
+ slicedColumns.push(slicedColumn);
600
+ }); // update data columns with downsampled columns
601
+
602
+ return Object.assign(Object.assign({}, ds), {
603
+ data: Object.assign(Object.assign({}, ds.data), {
604
+ columns: slicedColumns
605
+ })
606
+ });
607
+ };
608
+
609
+ var downsampleDataSources = function downsampleDataSources(_ref4) {
610
+ var dataSources = _ref4.dataSources,
611
+ threshold = _ref4.threshold,
612
+ options = _ref4.options;
613
+
614
+ var _a, _b, _c;
615
+
616
+ var primaryDS = dataSources === null || dataSources === void 0 ? void 0 : dataSources.primary; // only downsample time series when number of data points are over threshold
617
+
618
+ var numPoints = (_c = (_b = (_a = primaryDS === null || primaryDS === void 0 ? void 0 : primaryDS.data) === null || _a === void 0 ? void 0 : _a.columns[0]) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0;
619
+
620
+ if (Number.isNaN(threshold) || numPoints <= threshold || threshold < 2) {
621
+ return dataSources;
622
+ }
623
+
624
+ var xField = options.xField,
625
+ yFields = options.yFields,
626
+ fieldTypes = options.fieldTypes;
627
+
628
+ if (!xField || !(yFields === null || yFields === void 0 ? void 0 : yFields.length) || !(fieldTypes === null || fieldTypes === void 0 ? void 0 : fieldTypes.length)) {
629
+ return dataSources;
630
+ }
631
+
632
+ var nonInternalYFields = new Set(yFields.filter(function (yField) {
633
+ return !yField.startsWith('_');
634
+ }));
635
+ var maxPointsInDownsample = Math.min(nonInternalYFields.size * threshold, numPoints); // Do not try to downsample if there are too many downsampled pts
636
+ // At the worst case, each series has non-overlapping downsampled pts
637
+ // which will mean that all points will be included in the downsampled result
638
+ // This will just lead to additional overhead due to coercing each
639
+ // x and y field to number
640
+
641
+ if (maxPointsInDownsample >= numPoints) {
642
+ return dataSources;
643
+ }
644
+
645
+ var _tryToCoerceAllDispla = tryToCoerceAllDisplayedFields(primaryDS, xField, nonInternalYFields, fieldTypes),
646
+ xColumn = _tryToCoerceAllDispla.xColumn,
647
+ yColumns = _tryToCoerceAllDispla.yColumns;
648
+
649
+ if (!yColumns.length || !xColumn.length) {
650
+ return dataSources;
651
+ }
652
+
653
+ var downsampledDataSources = Object.assign({}, dataSources);
654
+ var downsampledIndices = new Set();
655
+ yColumns.forEach(function (yColumn, columnIndex) {
656
+ // perform LTTB downsampling for current series, LTTB takes an [x, y] pair
657
+ var xyPair = yColumn.map(function (yValue, index) {
658
+ return [xColumn[index], yValue];
659
+ });
660
+
661
+ try {
662
+ var _largestTriangleThree = largestTriangleThreeBuckets(xyPair, threshold, downsampledIndices),
663
+ downsampledIndicesForSeries = _largestTriangleThree.downsampledIndices;
664
+
665
+ downsampledIndicesForSeries.forEach(function (downsampleIndex) {
666
+ return downsampledIndices.add(downsampleIndex);
667
+ });
668
+ } catch (e) {
669
+ console.error("Error occurred while downsampling column ".concat(columnIndex), e);
670
+ }
671
+ }); // update data columns with downsampled columns
672
+
673
+ downsampledDataSources.primary = pickIndicesFromDataSource(primaryDS, downsampledIndices);
674
+ return downsampledDataSources;
675
+ };
676
+
677
+ exports.downsampleDataSources = downsampleDataSources;
678
+
679
+ /***/ }),
680
+ /* 15 */
681
+ /***/ (function(module, exports) {
682
+
683
+ module.exports = require("@splunk/visualizations-shared/colorUtils");
684
+
685
+ /***/ }),
686
+ /* 16 */
687
+ /***/ (function(module, exports) {
688
+
689
+ module.exports = require("@splunk/visualization-encoding/Options");
690
+
691
+ /***/ }),
692
+ /* 17 */
200
693
  /***/ (function(module, exports, __webpack_require__) {
201
694
 
202
695
  "use strict";
203
696
 
204
697
 
698
+ var _slicedToArray = __webpack_require__(7);
699
+
205
700
  Object.defineProperty(exports, "__esModule", {
206
701
  value: true
207
702
  });
208
703
 
209
- var React = __webpack_require__(1);
704
+ var React = __webpack_require__(0);
210
705
 
211
706
  var styled_components_1 = __webpack_require__(4);
212
707
 
213
- var SizeAwareWrapper_1 = __webpack_require__(19);
708
+ var style_1 = __webpack_require__(18);
214
709
 
215
- var style_1 = __webpack_require__(14);
710
+ var colorUtils_1 = __webpack_require__(15);
216
711
 
217
- var colorUtils_1 = __webpack_require__(12);
712
+ var SizeAwareWrapper_1 = __webpack_require__(26);
218
713
 
219
714
  var Item = styled_components_1.default.div.attrs(function (_ref) {
220
715
  var width = _ref.width;
@@ -260,6 +755,20 @@ var withFixedSizeContainer = function withFixedSizeContainer(Viz) {
260
755
  var width = props.width,
261
756
  height = props.height,
262
757
  backgroundColor = props.backgroundColor;
758
+ var cachedHandleResize = React.useCallback(function (w, h) {
759
+ setContainerWidth(w);
760
+ setContainerHeight(h);
761
+ }, []);
762
+
763
+ var _React$useState = React.useState(Number(props.width)),
764
+ _React$useState2 = _slicedToArray(_React$useState, 2),
765
+ containerWidth = _React$useState2[0],
766
+ setContainerWidth = _React$useState2[1];
767
+
768
+ var _React$useState3 = React.useState(Number(props.height)),
769
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
770
+ containerHeight = _React$useState4[0],
771
+ setContainerHeight = _React$useState4[1];
263
772
 
264
773
  if (!height) {
265
774
  return React.createElement(Item, {
@@ -271,18 +780,18 @@ var withFixedSizeContainer = function withFixedSizeContainer(Viz) {
271
780
 
272
781
  return React.createElement(FixSizeItem, {
273
782
  "data-test": "fix-size-item",
274
- "data-splunk-visualization-version": "26.1.2 - 9c7479612",
783
+ "data-splunk-visualization-version": "26.2.1 - 714383dbb",
275
784
  width: width,
276
785
  height: height,
277
786
  backgroundColor: backgroundColor
278
- }, React.createElement(FixSizeItemContent, null, React.createElement(SizeAwareWrapper_1.default, null, function (_ref3) {
279
- var newWidth = _ref3.width,
280
- newHeight = _ref3.height;
281
- return React.createElement(Viz, Object.assign({}, props, {
282
- width: newWidth,
283
- height: newHeight
284
- }));
285
- })));
787
+ }, React.createElement(FixSizeItemContent, null, React.createElement(SizeAwareWrapper_1.default, {
788
+ width: width,
789
+ height: height,
790
+ onResize: cachedHandleResize
791
+ }), React.createElement(Viz, Object.assign({}, props, {
792
+ width: containerWidth,
793
+ height: containerHeight
794
+ }))));
286
795
  };
287
796
 
288
797
  FixedSizeContainer.displayName = 'withFixedSizeContainer';
@@ -292,13 +801,13 @@ var withFixedSizeContainer = function withFixedSizeContainer(Viz) {
292
801
  exports.default = withFixedSizeContainer;
293
802
 
294
803
  /***/ }),
295
- /* 14 */
804
+ /* 18 */
296
805
  /***/ (function(module, exports) {
297
806
 
298
807
  module.exports = require("@splunk/visualizations-shared/style");
299
808
 
300
809
  /***/ }),
301
- /* 15 */
810
+ /* 19 */
302
811
  /***/ (function(module, exports, __webpack_require__) {
303
812
 
304
813
  "use strict";
@@ -307,54 +816,129 @@ module.exports = require("@splunk/visualizations-shared/style");
307
816
  Object.defineProperty(exports, "__esModule", {
308
817
  value: true
309
818
  });
310
- exports.extendStaticWrapperProps = void 0;
311
- /**
312
- * @method extendStaticWrapperProps
313
- * @param {Object} props
314
- * @param {DashboardVizType} props.Wrapper
315
- * @param {DashboardVizType} props.Visualization
316
- */
317
-
318
- var extendStaticWrapperProps = function extendStaticWrapperProps(_ref) {
319
- var Wrapper = _ref.Wrapper,
320
- Visualization = _ref.Visualization;
321
- var extendProperties = ['propTypes', 'defaultProps', 'config'];
322
- extendProperties.forEach(function (prop) {
323
- if (Visualization[prop]) {
324
- // eslint-disable-next-line no-param-reassign
325
- Wrapper[prop] = Visualization[prop];
326
- }
327
- });
328
- };
329
-
330
- exports.extendStaticWrapperProps = extendStaticWrapperProps;
819
+ exports.validOutputModes = exports.validSegmentationModes = exports.validSortDirs = void 0;
820
+ exports.validSortDirs = ['asc', 'desc', 'none'];
821
+ exports.validSegmentationModes = ['none', 'inner'];
822
+ exports.validOutputModes = ['json_cols', 'json'];
331
823
 
332
824
  /***/ }),
333
- /* 16 */
334
- /***/ (function(module, exports) {
825
+ /* 20 */,
826
+ /* 21 */
827
+ /***/ (function(module, exports, __webpack_require__) {
335
828
 
336
- module.exports = require("@splunk/visualizations-shared/schemaUtils");
829
+ "use strict";
830
+
831
+
832
+ var _classCallCheck = __webpack_require__(10);
833
+
834
+ var _createClass = __webpack_require__(25);
835
+
836
+ Object.defineProperty(exports, "__esModule", {
837
+ value: true
838
+ });
839
+ exports.DefaultVizActionHandler = void 0;
840
+
841
+ var DefaultVizActionHandler = /*#__PURE__*/function () {
842
+ function DefaultVizActionHandler() {
843
+ _classCallCheck(this, DefaultVizActionHandler);
844
+ }
845
+
846
+ _createClass(DefaultVizActionHandler, [{
847
+ key: "focus",
848
+ value: function focus() {// noop
849
+ }
850
+ }, {
851
+ key: "snapshot",
852
+ value: function snapshot() {
853
+ return null; // noop
854
+ }
855
+ }]);
856
+
857
+ return DefaultVizActionHandler;
858
+ }();
859
+
860
+ exports.DefaultVizActionHandler = DefaultVizActionHandler;
337
861
 
338
862
  /***/ }),
339
- /* 17 */
863
+ /* 22 */
864
+ /***/ (function(module, exports, __webpack_require__) {
865
+
866
+ "use strict";
867
+
868
+
869
+ Object.defineProperty(exports, "__esModule", {
870
+ value: true
871
+ });
872
+ exports.VizCategory = void 0;
873
+ var VizCategory;
874
+
875
+ (function (VizCategory) {
876
+ VizCategory["SINGLE_VALUE"] = "Single Value";
877
+ VizCategory["TRENDS"] = "Trends";
878
+ VizCategory["COMPARISONS"] = "Comparisons";
879
+ VizCategory["TABLE"] = "Table";
880
+ VizCategory["GAUGE"] = "Gauge";
881
+ VizCategory["DISTRIBUTIONS"] = "Distributions";
882
+ VizCategory["CHOROPLETH"] = "Choropleth Maps";
883
+ VizCategory["SHAPES"] = "Shapes";
884
+ VizCategory["MISC"] = "misc";
885
+ VizCategory["FLOW"] = "Flow";
886
+ VizCategory["CORRELATION"] = "Correlation";
887
+ VizCategory["SPATIAL"] = "Spatial";
888
+ })(VizCategory = exports.VizCategory || (exports.VizCategory = {}));
889
+
890
+ /***/ }),
891
+ /* 23 */
892
+ /***/ (function(module, exports, __webpack_require__) {
893
+
894
+ "use strict";
895
+
896
+
897
+ Object.defineProperty(exports, "__esModule", {
898
+ value: true
899
+ });
900
+ exports.extendStaticWrapperProps = void 0;
901
+ /**
902
+ * @method extendStaticWrapperProps
903
+ * @param {Object} props
904
+ * @param {DashboardVizType} props.Wrapper
905
+ * @param {DashboardVizType} props.Visualization
906
+ */
907
+
908
+ var extendStaticWrapperProps = function extendStaticWrapperProps(_ref) {
909
+ var Wrapper = _ref.Wrapper,
910
+ Visualization = _ref.Visualization;
911
+ var extendProperties = ['propTypes', 'defaultProps', 'config'];
912
+ extendProperties.forEach(function (prop) {
913
+ if (Visualization[prop]) {
914
+ // eslint-disable-next-line no-param-reassign
915
+ Wrapper[prop] = Visualization[prop];
916
+ }
917
+ });
918
+ };
919
+
920
+ exports.extendStaticWrapperProps = extendStaticWrapperProps;
921
+
922
+ /***/ }),
923
+ /* 24 */
340
924
  /***/ (function(module, exports) {
341
925
 
342
- module.exports = require("@babel/runtime/helpers/slicedToArray");
926
+ module.exports = require("@splunk/visualizations-shared/schemaUtils");
343
927
 
344
928
  /***/ }),
345
- /* 18 */
929
+ /* 25 */
346
930
  /***/ (function(module, exports) {
347
931
 
348
932
  module.exports = require("@babel/runtime/helpers/createClass");
349
933
 
350
934
  /***/ }),
351
- /* 19 */
935
+ /* 26 */
352
936
  /***/ (function(module, exports) {
353
937
 
354
938
  module.exports = require("@splunk/visualizations-shared/SizeAwareWrapper");
355
939
 
356
940
  /***/ }),
357
- /* 20 */
941
+ /* 27 */
358
942
  /***/ (function(module, exports, __webpack_require__) {
359
943
 
360
944
  "use strict";
@@ -362,7 +946,7 @@ module.exports = require("@splunk/visualizations-shared/SizeAwareWrapper");
362
946
 
363
947
  var _toConsumableArray = __webpack_require__(8);
364
948
 
365
- var _defineProperty = __webpack_require__(7);
949
+ var _defineProperty = __webpack_require__(9);
366
950
 
367
951
  var __rest = this && this.__rest || function (s, e) {
368
952
  var t = {};
@@ -384,7 +968,7 @@ exports.insertLayout = exports.isDynamicOption = exports.uncollapseEditorConfig
384
968
 
385
969
  var lodash_1 = __webpack_require__(3);
386
970
 
387
- var schemaUtils_1 = __webpack_require__(16);
971
+ var schemaUtils_1 = __webpack_require__(24);
388
972
 
389
973
  var VizBehavior_1 = __webpack_require__(6);
390
974
 
@@ -590,58 +1174,73 @@ var insertLayout = function insertLayout(layout, index) {
590
1174
  exports.insertLayout = insertLayout;
591
1175
 
592
1176
  /***/ }),
593
- /* 21 */
1177
+ /* 28 */
594
1178
  /***/ (function(module, exports) {
595
1179
 
596
1180
  module.exports = require("@splunk/visualization-context/FeatureFlagContext");
597
1181
 
598
1182
  /***/ }),
599
- /* 22 */,
600
- /* 23 */
1183
+ /* 29 */,
1184
+ /* 30 */
601
1185
  /***/ (function(module, exports) {
602
1186
 
603
1187
  module.exports = require("@splunk/themes/pick");
604
1188
 
605
1189
  /***/ }),
606
- /* 24 */,
607
- /* 25 */
1190
+ /* 31 */
608
1191
  /***/ (function(module, exports) {
609
1192
 
610
1193
  module.exports = require("@splunk/ui-utils/id");
611
1194
 
612
1195
  /***/ }),
613
- /* 26 */
1196
+ /* 32 */
614
1197
  /***/ (function(module, exports) {
615
1198
 
616
1199
  module.exports = require("@splunk/visualization-context/TimezoneContext");
617
1200
 
618
1201
  /***/ }),
619
- /* 27 */
620
- /***/ (function(module, exports) {
1202
+ /* 33 */
1203
+ /***/ (function(module, exports, __webpack_require__) {
621
1204
 
622
- module.exports = require("@splunk/visualizations-shared/hocUtils");
1205
+ "use strict";
1206
+
1207
+
1208
+ Object.defineProperty(exports, "__esModule", {
1209
+ value: true
1210
+ });
1211
+
1212
+ var react_1 = __webpack_require__(0);
1213
+
1214
+ function usePrevious(value) {
1215
+ var ref = (0, react_1.useRef)();
1216
+ (0, react_1.useEffect)(function () {
1217
+ ref.current = value;
1218
+ });
1219
+ return ref.current;
1220
+ }
1221
+
1222
+ exports.default = usePrevious;
623
1223
 
624
1224
  /***/ }),
625
- /* 28 */
1225
+ /* 34 */
626
1226
  /***/ (function(module, exports) {
627
1227
 
628
- module.exports = require("@splunk/visualizations-shared/JSONSchemaUtils");
1228
+ module.exports = require("@splunk/visualizations-shared/hocUtils");
629
1229
 
630
1230
  /***/ }),
631
- /* 29 */
1231
+ /* 35 */
632
1232
  /***/ (function(module, exports) {
633
1233
 
634
- module.exports = require("@splunk/visualizations-shared/propUtils");
1234
+ module.exports = require("@splunk/visualizations-shared/JSONSchemaUtils");
635
1235
 
636
1236
  /***/ }),
637
- /* 30 */
1237
+ /* 36 */
638
1238
  /***/ (function(module, exports) {
639
1239
 
640
- module.exports = require("@splunk/visualization-encoding/Options");
1240
+ module.exports = require("@splunk/visualizations-shared/propUtils");
641
1241
 
642
1242
  /***/ }),
643
- /* 31 */,
644
- /* 32 */
1243
+ /* 37 */
645
1244
  /***/ (function(module, exports, __webpack_require__) {
646
1245
 
647
1246
  "use strict";
@@ -652,17 +1251,17 @@ Object.defineProperty(exports, "__esModule", {
652
1251
  });
653
1252
  exports.shouldShowIconPlaceholder = void 0;
654
1253
 
655
- var React = __webpack_require__(1);
1254
+ var React = __webpack_require__(0);
656
1255
 
657
- var T = __webpack_require__(0);
1256
+ var T = __webpack_require__(1);
658
1257
 
659
1258
  var lodash_1 = __webpack_require__(3);
660
1259
 
661
1260
  var i18n_1 = __webpack_require__(2);
662
1261
 
663
- var Message_1 = __webpack_require__(10);
1262
+ var Message_1 = __webpack_require__(12);
664
1263
 
665
- var FixedSizeContainer_1 = __webpack_require__(13);
1264
+ var FixedSizeContainer_1 = __webpack_require__(17);
666
1265
  /**
667
1266
  * @method shouldShowIconPlaceholder
668
1267
  * @param {object} dataSources
@@ -717,93 +1316,322 @@ var IconPlaceholder = function IconPlaceholder(props) {
717
1316
  });
718
1317
  }
719
1318
 
720
- return React.createElement(Message_1.default, {
721
- width: width,
722
- height: height,
723
- level: "warning",
724
- message: (0, i18n_1._)('No DataSource Connected')
725
- });
726
- };
1319
+ return React.createElement(Message_1.default, {
1320
+ width: width,
1321
+ height: height,
1322
+ level: "warning",
1323
+ message: (0, i18n_1._)('No DataSource Connected')
1324
+ });
1325
+ };
1326
+
1327
+ IconPlaceholder.propTypes = propTypes;
1328
+ IconPlaceholder.defaultProps = {
1329
+ width: '100%',
1330
+ height: 250
1331
+ };
1332
+ exports.default = (0, FixedSizeContainer_1.default)(IconPlaceholder);
1333
+
1334
+ /***/ }),
1335
+ /* 38 */
1336
+ /***/ (function(module, exports, __webpack_require__) {
1337
+
1338
+ "use strict";
1339
+
1340
+
1341
+ var _defineProperty = __webpack_require__(9);
1342
+
1343
+ Object.defineProperty(exports, "__esModule", {
1344
+ value: true
1345
+ });
1346
+ exports.getSortingParams = exports.SortParamsPropTypes = void 0;
1347
+
1348
+ var T = __webpack_require__(1);
1349
+
1350
+ var lodash_1 = __webpack_require__(3);
1351
+
1352
+ var DataSource_1 = __webpack_require__(19);
1353
+
1354
+ exports.SortParamsPropTypes = T.shape({
1355
+ currentSortKey: T.string,
1356
+ currentSortDir: T.oneOf(DataSource_1.validSortDirs),
1357
+ onSort: T.func
1358
+ });
1359
+
1360
+ var getSortingParams = function getSortingParams(_ref) {
1361
+ var requestParams = _ref.requestParams,
1362
+ onRequestParamsChange = _ref.onRequestParamsChange;
1363
+ var currentSortKey;
1364
+ var currentSortDir;
1365
+ var nextSortDirMap = {
1366
+ asc: 'desc',
1367
+ desc: 'asc',
1368
+ none: 'asc'
1369
+ };
1370
+ var onSort;
1371
+
1372
+ if (typeof onRequestParamsChange === 'function') {
1373
+ if (requestParams && (0, lodash_1.has)(requestParams, 'sort')) {
1374
+ currentSortKey = Object.keys(requestParams.sort).shift();
1375
+ currentSortDir = requestParams.sort[currentSortKey];
1376
+ } // undid memoization since there is a dependency on requestParams, which is a deeply nested object
1377
+
1378
+
1379
+ onSort = function onSort(e, _ref2) {
1380
+ var sortKey = _ref2.sortKey,
1381
+ sortDir = _ref2.sortDir;
1382
+
1383
+ if (typeof sortKey === 'string') {
1384
+ var nextSortDir = (0, lodash_1.has)(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : 'none';
1385
+ onRequestParamsChange(Object.assign(Object.assign({}, requestParams), {
1386
+ offset: 0,
1387
+ sort: _defineProperty({}, sortKey, nextSortDir)
1388
+ }));
1389
+ } else {
1390
+ onRequestParamsChange(requestParams);
1391
+ }
1392
+ };
1393
+ }
1394
+
1395
+ return {
1396
+ currentSortKey: currentSortKey,
1397
+ currentSortDir: currentSortDir,
1398
+ onSort: onSort
1399
+ };
1400
+ };
1401
+
1402
+ exports.getSortingParams = getSortingParams;
1403
+
1404
+ /***/ }),
1405
+ /* 39 */
1406
+ /***/ (function(module, exports, __webpack_require__) {
1407
+
1408
+ "use strict";
1409
+
1410
+
1411
+ Object.defineProperty(exports, "__esModule", {
1412
+ value: true
1413
+ });
1414
+ exports.getPaginationParams = exports.PaginatorParamsPropTypes = void 0;
1415
+
1416
+ var T = __webpack_require__(1);
1417
+
1418
+ var lodash_1 = __webpack_require__(3);
1419
+
1420
+ exports.PaginatorParamsPropTypes = T.shape({
1421
+ isPaging: T.bool,
1422
+ current: T.number,
1423
+ totalPages: T.number,
1424
+ onChange: T.func
1425
+ });
1426
+
1427
+ var getPaginationParams = function getPaginationParams(_ref) {
1428
+ var requestParams = _ref.requestParams,
1429
+ meta = _ref.meta,
1430
+ onRequestParamsChange = _ref.onRequestParamsChange;
1431
+ var totalCount = meta && meta.totalCount || 0;
1432
+ var offset = requestParams && requestParams.offset || 0;
1433
+ var count = requestParams && requestParams.count;
1434
+ var totalPages = typeof count === 'number' && count > 0 ? Math.ceil(totalCount / count) : 0;
1435
+ var current = typeof count === 'number' && count > 0 ? Math.floor(offset / count) + 1 : 0;
1436
+ var isPaging = totalPages > 1 && typeof onRequestParamsChange === 'function';
1437
+
1438
+ var onChangeHandler = function onChangeHandler(e, _ref2) {
1439
+ var page = _ref2.page,
1440
+ countArg = _ref2.count;
1441
+ var newParams = (0, lodash_1.cloneDeep)(requestParams);
1442
+
1443
+ if (typeof countArg === 'number') {
1444
+ newParams.count = countArg;
1445
+ newParams.offset = 0;
1446
+ }
1447
+
1448
+ var pageCount = typeof newParams.count === 'number' ? newParams.count : 10;
1449
+
1450
+ if (typeof page === 'number' && page > 0) {
1451
+ newParams.count = pageCount;
1452
+ newParams.offset = (page - 1) * pageCount;
1453
+ }
1454
+
1455
+ onRequestParamsChange(newParams);
1456
+ };
1457
+
1458
+ return {
1459
+ isPaging: isPaging,
1460
+ current: current,
1461
+ totalPages: totalPages,
1462
+ onChange: typeof onRequestParamsChange === 'function' ? onChangeHandler : lodash_1.noop
1463
+ };
1464
+ };
1465
+
1466
+ exports.getPaginationParams = getPaginationParams;
1467
+
1468
+ /***/ }),
1469
+ /* 40 */
1470
+ /***/ (function(module, exports, __webpack_require__) {
1471
+
1472
+ "use strict";
1473
+
1474
+
1475
+ var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {
1476
+ if (k2 === undefined) k2 = k;
1477
+ var desc = Object.getOwnPropertyDescriptor(m, k);
1478
+
1479
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
1480
+ desc = {
1481
+ enumerable: true,
1482
+ get: function get() {
1483
+ return m[k];
1484
+ }
1485
+ };
1486
+ }
1487
+
1488
+ Object.defineProperty(o, k2, desc);
1489
+ } : function (o, m, k, k2) {
1490
+ if (k2 === undefined) k2 = k;
1491
+ o[k2] = m[k];
1492
+ });
1493
+
1494
+ var __exportStar = this && this.__exportStar || function (m, exports) {
1495
+ for (var p in m) {
1496
+ if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1497
+ }
1498
+ };
1499
+
1500
+ Object.defineProperty(exports, "__esModule", {
1501
+ value: true
1502
+ });
1503
+
1504
+ __exportStar(__webpack_require__(41), exports);
1505
+
1506
+ __exportStar(__webpack_require__(42), exports);
1507
+
1508
+ __exportStar(__webpack_require__(19), exports);
1509
+
1510
+ __exportStar(__webpack_require__(43), exports);
1511
+
1512
+ __exportStar(__webpack_require__(44), exports);
1513
+
1514
+ __exportStar(__webpack_require__(45), exports);
1515
+
1516
+ __exportStar(__webpack_require__(46), exports);
1517
+
1518
+ __exportStar(__webpack_require__(47), exports);
1519
+
1520
+ __exportStar(__webpack_require__(48), exports);
1521
+
1522
+ __exportStar(__webpack_require__(49), exports);
1523
+
1524
+ __exportStar(__webpack_require__(21), exports);
1525
+
1526
+ __exportStar(__webpack_require__(6), exports);
1527
+
1528
+ __exportStar(__webpack_require__(22), exports);
1529
+
1530
+ __exportStar(__webpack_require__(50), exports);
1531
+
1532
+ __exportStar(__webpack_require__(51), exports);
1533
+
1534
+ __exportStar(__webpack_require__(52), exports);
1535
+
1536
+ __exportStar(__webpack_require__(53), exports);
1537
+
1538
+ __exportStar(__webpack_require__(54), exports);
1539
+
1540
+ __exportStar(__webpack_require__(55), exports);
1541
+
1542
+ /***/ }),
1543
+ /* 41 */
1544
+ /***/ (function(module, exports, __webpack_require__) {
1545
+
1546
+ "use strict";
1547
+
1548
+
1549
+ Object.defineProperty(exports, "__esModule", {
1550
+ value: true
1551
+ });
1552
+
1553
+ /***/ }),
1554
+ /* 42 */
1555
+ /***/ (function(module, exports, __webpack_require__) {
1556
+
1557
+ "use strict";
1558
+
1559
+ /**
1560
+ * A data structure used at runtime to wire up a visualization.
1561
+ */
1562
+
1563
+ Object.defineProperty(exports, "__esModule", {
1564
+ value: true
1565
+ });
1566
+
1567
+ /***/ }),
1568
+ /* 43 */
1569
+ /***/ (function(module, exports, __webpack_require__) {
727
1570
 
728
- IconPlaceholder.propTypes = propTypes;
729
- IconPlaceholder.defaultProps = {
730
- width: '100%',
731
- height: 250
732
- };
733
- exports.default = (0, FixedSizeContainer_1.default)(IconPlaceholder);
1571
+ "use strict";
1572
+
1573
+
1574
+ Object.defineProperty(exports, "__esModule", {
1575
+ value: true
1576
+ });
734
1577
 
735
1578
  /***/ }),
736
- /* 33 */
1579
+ /* 44 */
737
1580
  /***/ (function(module, exports, __webpack_require__) {
738
1581
 
739
1582
  "use strict";
740
1583
 
741
1584
 
742
- var _defineProperty = __webpack_require__(7);
1585
+ Object.defineProperty(exports, "__esModule", {
1586
+ value: true
1587
+ });
1588
+
1589
+ /***/ }),
1590
+ /* 45 */
1591
+ /***/ (function(module, exports, __webpack_require__) {
1592
+
1593
+ "use strict";
1594
+
743
1595
 
744
1596
  Object.defineProperty(exports, "__esModule", {
745
1597
  value: true
746
1598
  });
747
- exports.getSortingParams = exports.SortParamsPropTypes = void 0;
748
1599
 
749
- var T = __webpack_require__(0);
1600
+ /***/ }),
1601
+ /* 46 */
1602
+ /***/ (function(module, exports, __webpack_require__) {
750
1603
 
751
- var lodash_1 = __webpack_require__(3);
1604
+ "use strict";
752
1605
 
753
- var DataSource_1 = __webpack_require__(34);
754
1606
 
755
- exports.SortParamsPropTypes = T.shape({
756
- currentSortKey: T.string,
757
- currentSortDir: T.oneOf(DataSource_1.validSortDirs),
758
- onSort: T.func
1607
+ Object.defineProperty(exports, "__esModule", {
1608
+ value: true
759
1609
  });
760
1610
 
761
- var getSortingParams = function getSortingParams(_ref) {
762
- var requestParams = _ref.requestParams,
763
- onRequestParamsChange = _ref.onRequestParamsChange;
764
- var currentSortKey;
765
- var currentSortDir;
766
- var nextSortDirMap = {
767
- asc: 'desc',
768
- desc: 'asc',
769
- none: 'asc'
770
- };
771
- var onSort;
1611
+ /***/ }),
1612
+ /* 47 */
1613
+ /***/ (function(module, exports, __webpack_require__) {
772
1614
 
773
- if (typeof onRequestParamsChange === 'function') {
774
- if (requestParams && (0, lodash_1.has)(requestParams, 'sort')) {
775
- currentSortKey = Object.keys(requestParams.sort).shift();
776
- currentSortDir = requestParams.sort[currentSortKey];
777
- } // undid memoization since there is a dependency on requestParams, which is a deeply nested object
1615
+ "use strict";
778
1616
 
779
1617
 
780
- onSort = function onSort(e, _ref2) {
781
- var sortKey = _ref2.sortKey,
782
- sortDir = _ref2.sortDir;
1618
+ Object.defineProperty(exports, "__esModule", {
1619
+ value: true
1620
+ });
783
1621
 
784
- if (typeof sortKey === 'string') {
785
- var nextSortDir = (0, lodash_1.has)(nextSortDirMap, sortDir) ? nextSortDirMap[sortDir] : 'none';
786
- onRequestParamsChange(Object.assign(Object.assign({}, requestParams), {
787
- offset: 0,
788
- sort: _defineProperty({}, sortKey, nextSortDir)
789
- }));
790
- } else {
791
- onRequestParamsChange(requestParams);
792
- }
793
- };
794
- }
1622
+ /***/ }),
1623
+ /* 48 */
1624
+ /***/ (function(module, exports, __webpack_require__) {
795
1625
 
796
- return {
797
- currentSortKey: currentSortKey,
798
- currentSortDir: currentSortDir,
799
- onSort: onSort
800
- };
801
- };
1626
+ "use strict";
802
1627
 
803
- exports.getSortingParams = getSortingParams;
1628
+
1629
+ Object.defineProperty(exports, "__esModule", {
1630
+ value: true
1631
+ });
804
1632
 
805
1633
  /***/ }),
806
- /* 34 */
1634
+ /* 49 */
807
1635
  /***/ (function(module, exports, __webpack_require__) {
808
1636
 
809
1637
  "use strict";
@@ -812,13 +1640,9 @@ exports.getSortingParams = getSortingParams;
812
1640
  Object.defineProperty(exports, "__esModule", {
813
1641
  value: true
814
1642
  });
815
- exports.validOutputModes = exports.validSegmentationModes = exports.validSortDirs = void 0;
816
- exports.validSortDirs = ['asc', 'desc', 'none'];
817
- exports.validSegmentationModes = ['none', 'inner'];
818
- exports.validOutputModes = ['json_cols', 'json'];
819
1643
 
820
1644
  /***/ }),
821
- /* 35 */
1645
+ /* 50 */
822
1646
  /***/ (function(module, exports, __webpack_require__) {
823
1647
 
824
1648
  "use strict";
@@ -827,62 +1651,42 @@ exports.validOutputModes = ['json_cols', 'json'];
827
1651
  Object.defineProperty(exports, "__esModule", {
828
1652
  value: true
829
1653
  });
830
- exports.getPaginationParams = exports.PaginatorParamsPropTypes = void 0;
831
1654
 
832
- var T = __webpack_require__(0);
1655
+ /***/ }),
1656
+ /* 51 */
1657
+ /***/ (function(module, exports, __webpack_require__) {
833
1658
 
834
- var lodash_1 = __webpack_require__(3);
1659
+ "use strict";
835
1660
 
836
- exports.PaginatorParamsPropTypes = T.shape({
837
- isPaging: T.bool,
838
- current: T.number,
839
- totalPages: T.number,
840
- onChange: T.func
1661
+
1662
+ Object.defineProperty(exports, "__esModule", {
1663
+ value: true
841
1664
  });
842
1665
 
843
- var getPaginationParams = function getPaginationParams(_ref) {
844
- var requestParams = _ref.requestParams,
845
- meta = _ref.meta,
846
- onRequestParamsChange = _ref.onRequestParamsChange;
847
- var totalCount = meta && meta.totalCount || 0;
848
- var offset = requestParams && requestParams.offset || 0;
849
- var count = requestParams && requestParams.count;
850
- var totalPages = typeof count === 'number' && count > 0 ? Math.ceil(totalCount / count) : 0;
851
- var current = typeof count === 'number' && count > 0 ? Math.floor(offset / count) + 1 : 0;
852
- var isPaging = totalPages > 1 && typeof onRequestParamsChange === 'function';
1666
+ /***/ }),
1667
+ /* 52 */
1668
+ /***/ (function(module, exports, __webpack_require__) {
853
1669
 
854
- var onChangeHandler = function onChangeHandler(e, _ref2) {
855
- var page = _ref2.page,
856
- countArg = _ref2.count;
857
- var newParams = (0, lodash_1.cloneDeep)(requestParams);
1670
+ "use strict";
858
1671
 
859
- if (typeof countArg === 'number') {
860
- newParams.count = countArg;
861
- newParams.offset = 0;
862
- }
863
1672
 
864
- var pageCount = typeof newParams.count === 'number' ? newParams.count : 10;
1673
+ Object.defineProperty(exports, "__esModule", {
1674
+ value: true
1675
+ });
865
1676
 
866
- if (typeof page === 'number' && page > 0) {
867
- newParams.count = pageCount;
868
- newParams.offset = (page - 1) * pageCount;
869
- }
1677
+ /***/ }),
1678
+ /* 53 */
1679
+ /***/ (function(module, exports, __webpack_require__) {
870
1680
 
871
- onRequestParamsChange(newParams);
872
- };
1681
+ "use strict";
873
1682
 
874
- return {
875
- isPaging: isPaging,
876
- current: current,
877
- totalPages: totalPages,
878
- onChange: typeof onRequestParamsChange === 'function' ? onChangeHandler : lodash_1.noop
879
- };
880
- };
881
1683
 
882
- exports.getPaginationParams = getPaginationParams;
1684
+ Object.defineProperty(exports, "__esModule", {
1685
+ value: true
1686
+ });
883
1687
 
884
1688
  /***/ }),
885
- /* 36 */
1689
+ /* 54 */
886
1690
  /***/ (function(module, exports, __webpack_require__) {
887
1691
 
888
1692
  "use strict";
@@ -891,78 +1695,78 @@ exports.getPaginationParams = getPaginationParams;
891
1695
  Object.defineProperty(exports, "__esModule", {
892
1696
  value: true
893
1697
  });
894
- exports.VizCategory = void 0;
895
- var VizCategory;
896
1698
 
897
- (function (VizCategory) {
898
- VizCategory["SINGLE_VALUE"] = "Single Value";
899
- VizCategory["TRENDS"] = "Trends";
900
- VizCategory["COMPARISONS"] = "Comparisons";
901
- VizCategory["TABLE"] = "Table";
902
- VizCategory["GAUGE"] = "Gauge";
903
- VizCategory["DISTRIBUTIONS"] = "Distributions";
904
- VizCategory["CHOROPLETH"] = "Choropleth Maps";
905
- VizCategory["SHAPES"] = "Shapes";
906
- VizCategory["MISC"] = "misc";
907
- VizCategory["FLOW"] = "Flow";
908
- VizCategory["CORRELATION"] = "Correlation";
909
- VizCategory["SPATIAL"] = "Spatial";
910
- })(VizCategory = exports.VizCategory || (exports.VizCategory = {}));
1699
+ /***/ }),
1700
+ /* 55 */
1701
+ /***/ (function(module, exports, __webpack_require__) {
1702
+
1703
+ "use strict";
1704
+
1705
+
1706
+ Object.defineProperty(exports, "__esModule", {
1707
+ value: true
1708
+ });
911
1709
 
912
1710
  /***/ }),
913
- /* 37 */
1711
+ /* 56 */
914
1712
  /***/ (function(module, exports, __webpack_require__) {
915
1713
 
916
1714
  "use strict";
917
1715
 
918
1716
 
919
- var _slicedToArray = __webpack_require__(17);
1717
+ var _slicedToArray = __webpack_require__(7);
920
1718
 
921
1719
  Object.defineProperty(exports, "__esModule", {
922
1720
  value: true
923
1721
  });
924
1722
 
925
- var React = __webpack_require__(1);
1723
+ var React = __webpack_require__(0);
926
1724
 
927
1725
  var lodash_1 = __webpack_require__(3);
928
1726
 
929
- var getSettingsFromThemedProps_1 = __webpack_require__(38);
1727
+ var getSettingsFromThemedProps_1 = __webpack_require__(57);
930
1728
 
931
- var Options_1 = __webpack_require__(30);
1729
+ var Options_1 = __webpack_require__(16);
932
1730
 
933
- var SanitizeProps_1 = __webpack_require__(39);
1731
+ var SanitizeProps_1 = __webpack_require__(58);
934
1732
 
935
- var TimezoneContext_1 = __webpack_require__(26);
1733
+ var TimezoneContext_1 = __webpack_require__(32);
936
1734
 
937
- var moment_1 = __webpack_require__(40);
1735
+ var moment_1 = __webpack_require__(59);
938
1736
 
939
- var FeatureFlagContext_1 = __webpack_require__(21);
1737
+ var FeatureFlagContext_1 = __webpack_require__(28);
940
1738
 
941
1739
  var styled_components_1 = __webpack_require__(4);
942
1740
 
943
- var hocUtils_1 = __webpack_require__(27);
1741
+ var hocUtils_1 = __webpack_require__(34);
944
1742
 
945
- var JSONSchemaUtils_1 = __webpack_require__(28);
1743
+ var JSONSchemaUtils_1 = __webpack_require__(35);
946
1744
 
947
- var async_dynamic_options_evaluator_1 = __webpack_require__(41);
1745
+ var async_dynamic_options_evaluator_1 = __webpack_require__(60);
948
1746
 
949
- var id_1 = __webpack_require__(25);
1747
+ var id_1 = __webpack_require__(31);
950
1748
 
951
- var SplunkVisualization_1 = __webpack_require__(42);
1749
+ var SplunkVisualization_1 = __webpack_require__(61);
952
1750
 
953
1751
  var VizBehavior_1 = __webpack_require__(6);
954
1752
 
955
- var getSorting_1 = __webpack_require__(33);
1753
+ var getSorting_1 = __webpack_require__(38);
1754
+
1755
+ var getPagination_1 = __webpack_require__(39);
1756
+
1757
+ var useDeepMemo_1 = __webpack_require__(62);
1758
+
1759
+ var MissingPropsMessage_1 = __webpack_require__(63);
956
1760
 
957
- var getPagination_1 = __webpack_require__(35);
1761
+ var withEditModeCover_1 = __webpack_require__(64);
958
1762
 
959
- var useDeepMemo_1 = __webpack_require__(44);
1763
+ var withPlaceholder_1 = __webpack_require__(65);
960
1764
 
961
- var MissingPropsMessage_1 = __webpack_require__(45);
1765
+ var useDownsampleDataSources_1 = __webpack_require__(66);
962
1766
 
963
- var withEditModeCover_1 = __webpack_require__(46);
1767
+ var dataUtils_1 = __webpack_require__(14);
964
1768
 
965
- var withPlaceholder_1 = __webpack_require__(47);
1769
+ var featureFlagUtils_1 = __webpack_require__(68);
966
1770
  /**
967
1771
  * hoc that wraps a pure react visualization in a Dashboard visualization
968
1772
  * @param {DashboardVizOpts} opts
@@ -1053,25 +1857,61 @@ var withDashboardViz = function withDashboardViz(opts) {
1053
1857
  dataFramesInState = _React$useState8[0],
1054
1858
  setDataFramesInState = _React$useState8[1];
1055
1859
 
1056
- var _React$useState9 = React.useState(Boolean(featureFlagContext === null || featureFlagContext === void 0 ? void 0 : featureFlagContext.visualizations_useWebWorkersForDSL)),
1860
+ var _React$useState9 = React.useState(Boolean((0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_useWebWorkersForDSL'))),
1057
1861
  _React$useState10 = _slicedToArray(_React$useState9, 2),
1058
1862
  useAsyncEvaluatedOptions = _React$useState10[0],
1059
1863
  setUseAsyncEvaluatedOptions = _React$useState10[1];
1060
1864
 
1865
+ var isDownsamplingEnabledByFeatureFlag = Boolean(featureFlagContext === null || featureFlagContext === void 0 ? void 0 : featureFlagContext.visualizations_enableDownsampling);
1061
1866
  var isMounted = React.useRef(true);
1867
+ var optionsToEvaluate = React.useMemo(function () {
1868
+ return {
1869
+ context: (0, lodash_1.defaultsDeep)({}, context, vizConfig.defaultContext),
1870
+ options: (0, hocUtils_1.deepMergeWithArrayPrimitiveOverrides)({}, options, defaultOptions)
1871
+ };
1872
+ }, [options, context]);
1873
+
1874
+ var _React$useState11 = React.useState(Number(width)),
1875
+ _React$useState12 = _slicedToArray(_React$useState11, 2),
1876
+ threshold = _React$useState12[0],
1877
+ setThreshold = _React$useState12[1];
1878
+
1879
+ var onDownsamplingThresholdChange = React.useCallback(function (newThreshold) {
1880
+ setThreshold(newThreshold);
1881
+ }, []);
1882
+ var isDownsamplingEnabled = React.useMemo(function () {
1883
+ return isDownsamplingEnabledByFeatureFlag && (0, dataUtils_1.isDownsamplingEnabledForViz)({
1884
+ vizConfig: vizConfig
1885
+ });
1886
+ }, [isDownsamplingEnabledByFeatureFlag]);
1887
+ var downsamplingProps = React.useMemo(function () {
1888
+ if (!isDownsamplingEnabled) {
1889
+ return {};
1890
+ }
1891
+
1892
+ return {
1893
+ onDownsamplingThresholdChange: onDownsamplingThresholdChange,
1894
+ originalDataSources: dataSources
1895
+ };
1896
+ }, [dataSources, isDownsamplingEnabled, onDownsamplingThresholdChange]);
1897
+ var downsampledDataSources = (0, useDownsampleDataSources_1.default)({
1898
+ options: optionsToEvaluate.options,
1899
+ context: optionsToEvaluate.context,
1900
+ dataSources: dataSources,
1901
+ threshold: threshold,
1902
+ isDownsamplingEnabled: isDownsamplingEnabled
1903
+ });
1062
1904
  evaluatedOptions = (0, useDeepMemo_1.useDeepMemo)(function () {
1063
1905
  try {
1064
1906
  if (useAsyncEvaluatedOptions) {
1065
- var optionsToEvaluate = {
1066
- context: (0, lodash_1.defaultsDeep)({}, context, vizConfig.defaultContext),
1067
- options: (0, hocUtils_1.deepMergeWithArrayPrimitiveOverrides)({}, options, defaultOptions)
1068
- };
1069
1907
  var asyncDynamicOptionsEvaluatorParams = {
1070
1908
  visualizationID: visualizationID,
1071
1909
  props: props,
1072
1910
  options: optionsToEvaluate,
1073
- dataSources: dataSources,
1074
- theme: vizConfig.themes
1911
+ dataSources: downsampledDataSources,
1912
+ theme: vizConfig.themes,
1913
+ bypassCloneDeepOptionScope: Boolean((0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_bypassCloneDeepOptionScope')),
1914
+ lazyLoadingDataFrame: Boolean((0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_lazyLoadingDataFrame'))
1075
1915
  };
1076
1916
  async_dynamic_options_evaluator_1.default.evaluate(asyncDynamicOptionsEvaluatorParams).then(function (results) {
1077
1917
  setEvaluatedOptionsAsync(results.results);
@@ -1083,16 +1923,14 @@ var withDashboardViz = function withDashboardViz(opts) {
1083
1923
  } else {
1084
1924
  var dataFrames = dataFramesInState;
1085
1925
 
1086
- if (dataSources !== dataSourcesInState) {
1087
- setDataSourcesInState(dataSources);
1088
- dataFrames = Options_1.Options.dataFrameFromDataSource(dataSources);
1926
+ if (downsampledDataSources !== dataSourcesInState) {
1927
+ setDataSourcesInState(downsampledDataSources);
1928
+ dataFrames = Options_1.Options.dataFrameFromDataSource(downsampledDataSources, (0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_lazyLoadingDataFrame'));
1089
1929
  setDataFramesInState(dataFrames);
1090
1930
  }
1091
1931
 
1092
- return Options_1.Options.evaluate({
1093
- context: (0, lodash_1.defaultsDeep)({}, context, vizConfig.defaultContext),
1094
- options: (0, hocUtils_1.deepMergeWithArrayPrimitiveOverrides)({}, options, defaultOptions)
1095
- }, dataSources, themeFunc, dataFrames);
1932
+ var result = Options_1.Options.evaluate(optionsToEvaluate, downsampledDataSources, themeFunc, dataFrames, (0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_bypassCloneDeepOptionScope'));
1933
+ return result;
1096
1934
  }
1097
1935
  } catch (e) {
1098
1936
  // eslint-disable-next-line no-console
@@ -1101,7 +1939,7 @@ var withDashboardViz = function withDashboardViz(opts) {
1101
1939
  }
1102
1940
 
1103
1941
  return {};
1104
- }, [currentThemeFamily, currentThemeColorScheme, currentThemeDensity, options, context, dataSources, serializedTimezone, useAsyncEvaluatedOptions]);
1942
+ }, [currentThemeFamily, currentThemeColorScheme, currentThemeDensity, optionsToEvaluate, downsampledDataSources, serializedTimezone, useAsyncEvaluatedOptions]);
1105
1943
  var evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync; // trellis specific backgroundColor update for onComputedProps
1106
1944
  // if trellis is enabled following these three criteria - 1) trellis feature flag is enabled 2) vizConfig supports array has 'trellis' 3) option 'splitByLayout' is set to 'trellis
1107
1945
  // onComputedProps api should return back trellisBackgroundColor value for backgroundColor option to support coloring of sibling panels (for eg:- title/ description on UDF side)
@@ -1243,7 +2081,7 @@ var withDashboardViz = function withDashboardViz(opts) {
1243
2081
  mode: mode,
1244
2082
  width: width,
1245
2083
  height: height
1246
- }, evaluatedOptionsToUse, computedVizProps, eventCallbackProps, dataSourceMetadata));
2084
+ }, downsamplingProps, evaluatedOptionsToUse, computedVizProps, eventCallbackProps, dataSourceMetadata));
1247
2085
  };
1248
2086
 
1249
2087
  DashboardViz.propTypes = Object.assign(Object.assign({}, SplunkVisualization_1.default.propTypes), ReactViz.propTypes);
@@ -1260,37 +2098,37 @@ var withDashboardViz = function withDashboardViz(opts) {
1260
2098
  exports.default = withDashboardViz;
1261
2099
 
1262
2100
  /***/ }),
1263
- /* 38 */
2101
+ /* 57 */
1264
2102
  /***/ (function(module, exports) {
1265
2103
 
1266
2104
  module.exports = require("@splunk/themes/getSettingsFromThemedProps");
1267
2105
 
1268
2106
  /***/ }),
1269
- /* 39 */
2107
+ /* 58 */
1270
2108
  /***/ (function(module, exports) {
1271
2109
 
1272
2110
  module.exports = require("@splunk/visualizations-shared/SanitizeProps");
1273
2111
 
1274
2112
  /***/ }),
1275
- /* 40 */
2113
+ /* 59 */
1276
2114
  /***/ (function(module, exports) {
1277
2115
 
1278
2116
  module.exports = require("@splunk/moment");
1279
2117
 
1280
2118
  /***/ }),
1281
- /* 41 */
2119
+ /* 60 */
1282
2120
  /***/ (function(module, exports) {
1283
2121
 
1284
2122
  module.exports = require("@splunk/async-dynamic-options-evaluator");
1285
2123
 
1286
2124
  /***/ }),
1287
- /* 42 */
2125
+ /* 61 */
1288
2126
  /***/ (function(module, exports, __webpack_require__) {
1289
2127
 
1290
2128
  "use strict";
1291
2129
 
1292
2130
 
1293
- var _classCallCheck = __webpack_require__(9);
2131
+ var _classCallCheck = __webpack_require__(10);
1294
2132
 
1295
2133
  Object.defineProperty(exports, "__esModule", {
1296
2134
  value: true
@@ -1298,11 +2136,11 @@ Object.defineProperty(exports, "__esModule", {
1298
2136
  exports.INITIAL_HEIGHT = exports.INITIAL_WIDTH = void 0;
1299
2137
  /* eslint-disable react/no-unused-prop-types,react/prefer-stateless-function */
1300
2138
 
1301
- var T = __webpack_require__(0);
2139
+ var T = __webpack_require__(1);
1302
2140
 
1303
2141
  var lodash_1 = __webpack_require__(3);
1304
2142
 
1305
- var VizActionHandler_1 = __webpack_require__(43); // this is identical to the initial height and width we use in BaseVisualization in dashboard-visualizations
2143
+ var VizActionHandler_1 = __webpack_require__(21); // this is identical to the initial height and width we use in BaseVisualization in dashboard-visualizations
1306
2144
 
1307
2145
 
1308
2146
  exports.INITIAL_WIDTH = 250;
@@ -1428,51 +2266,14 @@ SplunkVisualization.defaultProps = {
1428
2266
  },
1429
2267
  onComputedProps: function onComputedProps() {
1430
2268
  return {};
1431
- },
1432
- loading: false,
1433
- onRequestParamsChange: lodash_1.noop
1434
- };
1435
- exports.default = SplunkVisualization;
1436
-
1437
- /***/ }),
1438
- /* 43 */
1439
- /***/ (function(module, exports, __webpack_require__) {
1440
-
1441
- "use strict";
1442
-
1443
-
1444
- var _classCallCheck = __webpack_require__(9);
1445
-
1446
- var _createClass = __webpack_require__(18);
1447
-
1448
- Object.defineProperty(exports, "__esModule", {
1449
- value: true
1450
- });
1451
- exports.DefaultVizActionHandler = void 0;
1452
-
1453
- var DefaultVizActionHandler = /*#__PURE__*/function () {
1454
- function DefaultVizActionHandler() {
1455
- _classCallCheck(this, DefaultVizActionHandler);
1456
- }
1457
-
1458
- _createClass(DefaultVizActionHandler, [{
1459
- key: "focus",
1460
- value: function focus() {// noop
1461
- }
1462
- }, {
1463
- key: "snapshot",
1464
- value: function snapshot() {
1465
- return null; // noop
1466
- }
1467
- }]);
1468
-
1469
- return DefaultVizActionHandler;
1470
- }();
1471
-
1472
- exports.DefaultVizActionHandler = DefaultVizActionHandler;
2269
+ },
2270
+ loading: false,
2271
+ onRequestParamsChange: lodash_1.noop
2272
+ };
2273
+ exports.default = SplunkVisualization;
1473
2274
 
1474
2275
  /***/ }),
1475
- /* 44 */
2276
+ /* 62 */
1476
2277
  /***/ (function(module, exports, __webpack_require__) {
1477
2278
 
1478
2279
  "use strict";
@@ -1483,7 +2284,7 @@ Object.defineProperty(exports, "__esModule", {
1483
2284
  });
1484
2285
  exports.useDeepMemo = void 0;
1485
2286
 
1486
- var react_1 = __webpack_require__(1);
2287
+ var react_1 = __webpack_require__(0);
1487
2288
 
1488
2289
  var lodash_1 = __webpack_require__(3);
1489
2290
  /**
@@ -1517,7 +2318,7 @@ var useDeepMemo = function useDeepMemo(fn, dependencies) {
1517
2318
  exports.useDeepMemo = useDeepMemo;
1518
2319
 
1519
2320
  /***/ }),
1520
- /* 45 */
2321
+ /* 63 */
1521
2322
  /***/ (function(module, exports, __webpack_require__) {
1522
2323
 
1523
2324
  "use strict";
@@ -1528,15 +2329,15 @@ Object.defineProperty(exports, "__esModule", {
1528
2329
  });
1529
2330
  exports.MissingPropsMessage = exports.missingKeys = exports.isMissing = void 0;
1530
2331
 
1531
- var React = __webpack_require__(1);
2332
+ var React = __webpack_require__(0);
1532
2333
 
1533
- var T = __webpack_require__(0);
2334
+ var T = __webpack_require__(1);
1534
2335
 
1535
2336
  var i18n_1 = __webpack_require__(2);
1536
2337
 
1537
- var Message_1 = __webpack_require__(10);
2338
+ var Message_1 = __webpack_require__(12);
1538
2339
 
1539
- var FixedSizeContainer_1 = __webpack_require__(13);
2340
+ var FixedSizeContainer_1 = __webpack_require__(17);
1540
2341
  /**
1541
2342
  * @method isMissing
1542
2343
  * @param {any} v
@@ -1597,7 +2398,7 @@ exports.MissingPropsMessage.defaultProps = {
1597
2398
  exports.default = (0, FixedSizeContainer_1.default)(exports.MissingPropsMessage);
1598
2399
 
1599
2400
  /***/ }),
1600
- /* 46 */
2401
+ /* 64 */
1601
2402
  /***/ (function(module, exports, __webpack_require__) {
1602
2403
 
1603
2404
  "use strict";
@@ -1607,18 +2408,18 @@ Object.defineProperty(exports, "__esModule", {
1607
2408
  value: true
1608
2409
  });
1609
2410
 
1610
- var React = __webpack_require__(1);
2411
+ var React = __webpack_require__(0);
1611
2412
 
1612
2413
  var styled_components_1 = __webpack_require__(4);
1613
2414
 
1614
- var hocUtils_1 = __webpack_require__(15);
2415
+ var hocUtils_1 = __webpack_require__(23);
1615
2416
 
1616
2417
  var Cover = styled_components_1.default.div.withConfig({
1617
2418
  displayName: "withEditModeCover__Cover",
1618
2419
  componentId: "sc-1gsbnxb-0"
1619
2420
  })(["position:absolute;left:0;right:0;top:0;bottom:0;"]);
1620
2421
  var Blocker = styled_components_1.default.div.attrs({
1621
- 'data-splunk-visualization-version': "26.1.2 - 9c7479612"
2422
+ 'data-splunk-visualization-version': "26.2.1 - 714383dbb"
1622
2423
  }).withConfig({
1623
2424
  displayName: "withEditModeCover__Blocker",
1624
2425
  componentId: "sc-1gsbnxb-1"
@@ -1649,7 +2450,7 @@ var withEditModeCover = function withEditModeCover(Visualization, disableEditMod
1649
2450
  exports.default = withEditModeCover;
1650
2451
 
1651
2452
  /***/ }),
1652
- /* 47 */
2453
+ /* 65 */
1653
2454
  /***/ (function(module, exports, __webpack_require__) {
1654
2455
 
1655
2456
  "use strict";
@@ -1659,17 +2460,17 @@ Object.defineProperty(exports, "__esModule", {
1659
2460
  value: true
1660
2461
  });
1661
2462
 
1662
- var React = __webpack_require__(1);
2463
+ var React = __webpack_require__(0);
1663
2464
 
1664
- var colorUtils_1 = __webpack_require__(12);
2465
+ var colorUtils_1 = __webpack_require__(15);
1665
2466
 
1666
- var variables_1 = __webpack_require__(11);
2467
+ var variables_1 = __webpack_require__(13);
1667
2468
 
1668
- var IconPlaceholder_1 = __webpack_require__(32);
2469
+ var IconPlaceholder_1 = __webpack_require__(37);
1669
2470
 
1670
2471
  var VizBehavior_1 = __webpack_require__(6);
1671
2472
 
1672
- var hocUtils_1 = __webpack_require__(15);
2473
+ var hocUtils_1 = __webpack_require__(23);
1673
2474
 
1674
2475
  var withPlaceholder = function withPlaceholder(Visualization) {
1675
2476
  var useIconPlaceholder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : IconPlaceholder_1.shouldShowIconPlaceholder;
@@ -1713,27 +2514,271 @@ var withPlaceholder = function withPlaceholder(Visualization) {
1713
2514
  exports.default = withPlaceholder;
1714
2515
 
1715
2516
  /***/ }),
1716
- /* 48 */,
1717
- /* 49 */,
1718
- /* 50 */
2517
+ /* 66 */
2518
+ /***/ (function(module, exports, __webpack_require__) {
2519
+
2520
+ "use strict";
2521
+
2522
+
2523
+ var _slicedToArray = __webpack_require__(7);
2524
+
2525
+ Object.defineProperty(exports, "__esModule", {
2526
+ value: true
2527
+ });
2528
+
2529
+ var react_1 = __webpack_require__(0);
2530
+
2531
+ var lodash_1 = __webpack_require__(3);
2532
+
2533
+ var dataUtils_1 = __webpack_require__(14);
2534
+
2535
+ var usePrevious_1 = __webpack_require__(33);
2536
+
2537
+ var useGetXAndYFields_1 = __webpack_require__(67);
2538
+
2539
+ var useDownsampleDataSources = function useDownsampleDataSources(_ref) {
2540
+ var dataSources = _ref.dataSources,
2541
+ options = _ref.options,
2542
+ context = _ref.context,
2543
+ threshold = _ref.threshold,
2544
+ isDownsamplingEnabled = _ref.isDownsamplingEnabled;
2545
+ var isFirstUseEffectCall = (0, react_1.useRef)(true);
2546
+ var xAndYFieldsWithTypes = (0, useGetXAndYFields_1.default)({
2547
+ shouldEvaluateDSL: isDownsamplingEnabled,
2548
+ options: options,
2549
+ context: context,
2550
+ dataSources: dataSources
2551
+ });
2552
+ var previousXAndYFieldsWithTypes = (0, usePrevious_1.default)(xAndYFieldsWithTypes);
2553
+ var previousDataSources = (0, usePrevious_1.default)(dataSources);
2554
+ var previousThreshold = (0, usePrevious_1.default)(threshold);
2555
+
2556
+ var _ref2 = (0, react_1.useState)(function () {
2557
+ return isDownsamplingEnabled ? (0, dataUtils_1.downsampleDataSources)({
2558
+ dataSources: dataSources,
2559
+ threshold: threshold,
2560
+ options: xAndYFieldsWithTypes
2561
+ }) : dataSources;
2562
+ }),
2563
+ _ref3 = _slicedToArray(_ref2, 2),
2564
+ downsampledDataSources = _ref3[0],
2565
+ setDownsampledDataSources = _ref3[1];
2566
+
2567
+ var debouncedDownsampleDataSources = (0, react_1.useMemo)(function () {
2568
+ return (0, lodash_1.debounce)(function (downsampleOptions) {
2569
+ var downsampledResult = (0, dataUtils_1.downsampleDataSources)(downsampleOptions);
2570
+ setDownsampledDataSources(downsampledResult);
2571
+ }, 100, {
2572
+ trailing: true
2573
+ });
2574
+ }, []);
2575
+ (0, react_1.useEffect)(function () {
2576
+ // don't downsample again on the use effect call that happened due to the initial render
2577
+ // this is since we already downsampled as part of the useState call
2578
+ if (isFirstUseEffectCall.current) {
2579
+ isFirstUseEffectCall.current = false;
2580
+ return;
2581
+ }
2582
+
2583
+ if (!isDownsamplingEnabled) {
2584
+ setDownsampledDataSources(dataSources);
2585
+ return;
2586
+ }
2587
+
2588
+ if ((0, lodash_1.isEqual)(previousXAndYFieldsWithTypes, xAndYFieldsWithTypes) && previousDataSources === dataSources && previousThreshold === threshold) {
2589
+ return;
2590
+ } // Debounce the downsampling so we don't have to downsample and execute DSL multiple times
2591
+ // while the viz is being resized
2592
+
2593
+
2594
+ debouncedDownsampleDataSources({
2595
+ dataSources: dataSources,
2596
+ options: xAndYFieldsWithTypes,
2597
+ threshold: threshold
2598
+ }); // need to detect if this runs as part of the initial render
2599
+ }, [dataSources, debouncedDownsampleDataSources, xAndYFieldsWithTypes, threshold, isDownsamplingEnabled, previousXAndYFieldsWithTypes, previousDataSources, previousThreshold]);
2600
+ return downsampledDataSources;
2601
+ };
2602
+
2603
+ exports.default = useDownsampleDataSources;
2604
+
2605
+ /***/ }),
2606
+ /* 67 */
2607
+ /***/ (function(module, exports, __webpack_require__) {
2608
+
2609
+ "use strict";
2610
+
2611
+
2612
+ var _toConsumableArray = __webpack_require__(8);
2613
+
2614
+ Object.defineProperty(exports, "__esModule", {
2615
+ value: true
2616
+ });
2617
+
2618
+ var react_1 = __webpack_require__(0);
2619
+
2620
+ var Options_1 = __webpack_require__(16);
2621
+ /**
2622
+ * Hook that evaluates the DSL for subset of a viz's options needed to determine
2623
+ * its x and y fields as well as the types of all its fields.
2624
+ */
2625
+
2626
+
2627
+ var useGetXAndYFields = function useGetXAndYFields(_ref) {
2628
+ var shouldEvaluateDSL = _ref.shouldEvaluateDSL,
2629
+ options = _ref.options,
2630
+ context = _ref.context,
2631
+ dataSources = _ref.dataSources;
2632
+
2633
+ var _ref2 = (0, react_1.useMemo)(function () {
2634
+ var _a, _b, _c;
2635
+
2636
+ if (!shouldEvaluateDSL) {
2637
+ return {
2638
+ dataSourcesWithOnlyOnePoint: null,
2639
+ dataFrameWithOnlyOnePoint: null
2640
+ };
2641
+ }
2642
+
2643
+ if (!((_c = (_b = (_a = dataSources === null || dataSources === void 0 ? void 0 : dataSources.primary) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.columns) === null || _c === void 0 ? void 0 : _c.length)) {
2644
+ return {
2645
+ dataSourcesWithOnlyOnePoint: null,
2646
+ dataFrameWithOnlyOnePoint: null
2647
+ };
2648
+ }
2649
+
2650
+ var primaryDS = dataSources.primary;
2651
+ var columnsWithOnlyOnePoint = primaryDS.data.columns.map(function (column) {
2652
+ return [column[0]];
2653
+ });
2654
+ var filteredDataSources = {
2655
+ primary: Object.assign(Object.assign({}, primaryDS), {
2656
+ data: Object.assign(Object.assign({}, primaryDS.data), {
2657
+ columns: columnsWithOnlyOnePoint
2658
+ })
2659
+ })
2660
+ };
2661
+ return {
2662
+ dataSourcesWithOnlyOnePoint: filteredDataSources,
2663
+ dataFrameWithOnlyOnePoint: Options_1.Options.dataFrameFromDataSource(filteredDataSources)
2664
+ };
2665
+ }, [dataSources, shouldEvaluateDSL]),
2666
+ dataSourcesWithOnlyOnePoint = _ref2.dataSourcesWithOnlyOnePoint,
2667
+ dataFrameWithOnlyOnePoint = _ref2.dataFrameWithOnlyOnePoint;
2668
+
2669
+ var xAndYFieldsWithTypes = (0, react_1.useMemo)(function () {
2670
+ try {
2671
+ if (!dataSourcesWithOnlyOnePoint || !dataFrameWithOnlyOnePoint) {
2672
+ return options;
2673
+ }
2674
+
2675
+ if (!(options === null || options === void 0 ? void 0 : options.x) || !(options === null || options === void 0 ? void 0 : options.y) && !(options === null || options === void 0 ? void 0 : options.y2)) {
2676
+ return options;
2677
+ }
2678
+
2679
+ var optionsToEvaluate = {
2680
+ x: options.x,
2681
+ xField: '> x | getField()',
2682
+ y: options.y,
2683
+ yFields: options.y ? '> y | getField()' : undefined,
2684
+ y2: options.y2,
2685
+ y2Fields: options.y2 ? '> y2 | getField()' : undefined,
2686
+ fieldTypes: '> primary | getType()'
2687
+ };
2688
+
2689
+ var _Options_1$Options$ev = Options_1.Options.evaluate({
2690
+ options: optionsToEvaluate,
2691
+ context: context
2692
+ }, dataSourcesWithOnlyOnePoint, function () {}, dataFrameWithOnlyOnePoint),
2693
+ _Options_1$Options$ev2 = _Options_1$Options$ev.xField,
2694
+ xField = _Options_1$Options$ev2 === void 0 ? '' : _Options_1$Options$ev2,
2695
+ _Options_1$Options$ev3 = _Options_1$Options$ev.yFields,
2696
+ yFields = _Options_1$Options$ev3 === void 0 ? [] : _Options_1$Options$ev3,
2697
+ _Options_1$Options$ev4 = _Options_1$Options$ev.y2Fields,
2698
+ y2Fields = _Options_1$Options$ev4 === void 0 ? [] : _Options_1$Options$ev4,
2699
+ fieldTypes = _Options_1$Options$ev.fieldTypes;
2700
+
2701
+ return {
2702
+ xField: xField,
2703
+ yFields: [].concat(_toConsumableArray(yFields), _toConsumableArray(y2Fields)),
2704
+ fieldTypes: fieldTypes
2705
+ };
2706
+ } catch (e) {
2707
+ return {
2708
+ xField: undefined,
2709
+ yFields: [],
2710
+ fieldTypes: []
2711
+ };
2712
+ }
2713
+ }, [options, context, dataSourcesWithOnlyOnePoint, dataFrameWithOnlyOnePoint]);
2714
+ return xAndYFieldsWithTypes;
2715
+ };
2716
+
2717
+ exports.default = useGetXAndYFields;
2718
+
2719
+ /***/ }),
2720
+ /* 68 */
2721
+ /***/ (function(module, exports, __webpack_require__) {
2722
+
2723
+ "use strict";
2724
+
2725
+
2726
+ Object.defineProperty(exports, "__esModule", {
2727
+ value: true
2728
+ });
2729
+ exports.getFeatureFlag = void 0;
2730
+
2731
+ var FeatureFlags_1 = __webpack_require__(69);
2732
+
2733
+ var getFeatureFlag = function getFeatureFlag(context, flagName) {
2734
+ // look for feature flag in context first
2735
+ if (context && Object.keys(context).find(function (key) {
2736
+ return key === flagName;
2737
+ })) {
2738
+ return context[flagName];
2739
+ } // fall back to defaults
2740
+
2741
+
2742
+ if (Object.keys(FeatureFlags_1.default).find(function (key) {
2743
+ return key === flagName;
2744
+ })) {
2745
+ return FeatureFlags_1.default[flagName];
2746
+ } // fall back to false
2747
+
2748
+
2749
+ return false;
2750
+ };
2751
+
2752
+ exports.getFeatureFlag = getFeatureFlag;
2753
+
2754
+ /***/ }),
2755
+ /* 69 */
2756
+ /***/ (function(module, exports) {
2757
+
2758
+ module.exports = require("@splunk/visualization-context/FeatureFlags");
2759
+
2760
+ /***/ }),
2761
+ /* 70 */,
2762
+ /* 71 */,
2763
+ /* 72 */
1719
2764
  /***/ (function(module, exports) {
1720
2765
 
1721
2766
  module.exports = require("@splunk/visualization-icons/placeholders");
1722
2767
 
1723
2768
  /***/ }),
1724
- /* 51 */
2769
+ /* 73 */
1725
2770
  /***/ (function(module, exports) {
1726
2771
 
1727
2772
  module.exports = require("@splunk/visualization-color-palettes");
1728
2773
 
1729
2774
  /***/ }),
1730
- /* 52 */
2775
+ /* 74 */
1731
2776
  /***/ (function(module, exports) {
1732
2777
 
1733
2778
  module.exports = require("@splunk/visualization-icons");
1734
2779
 
1735
2780
  /***/ }),
1736
- /* 53 */
2781
+ /* 75 */
1737
2782
  /***/ (function(module, exports, __webpack_require__) {
1738
2783
 
1739
2784
  "use strict";
@@ -1763,20 +2808,20 @@ var background = function background(_ref) {
1763
2808
  exports.default = background;
1764
2809
 
1765
2810
  /***/ }),
1766
- /* 54 */,
1767
- /* 55 */
2811
+ /* 76 */,
2812
+ /* 77 */
1768
2813
  /***/ (function(module, exports) {
1769
2814
 
1770
2815
  module.exports = require("@splunk/charting-bundle");
1771
2816
 
1772
2817
  /***/ }),
1773
- /* 56 */
2818
+ /* 78 */
1774
2819
  /***/ (function(module, exports) {
1775
2820
 
1776
2821
  module.exports = require("@splunk/themes/useSplunkTheme");
1777
2822
 
1778
2823
  /***/ }),
1779
- /* 57 */
2824
+ /* 79 */
1780
2825
  /***/ (function(module, exports, __webpack_require__) {
1781
2826
 
1782
2827
  "use strict";
@@ -1800,7 +2845,7 @@ var __rest = this && this.__rest || function (s, e) {
1800
2845
  Object.defineProperty(exports, "__esModule", {
1801
2846
  value: true
1802
2847
  });
1803
- exports.constructFieldsAndColumns = exports.toArrayForSeries = exports.isMultiSeriesData = exports.convertOverlayFields = exports.convertY2AxisOptions = exports.mapToValues = exports.truncateData = exports.getAnnotations = void 0;
2848
+ exports.shouldEnableSearchZoom = exports.constructFieldsAndColumns = exports.toArrayForSeries = exports.isMultiSeriesData = exports.convertOverlayFields = exports.convertY2AxisOptions = exports.mapToValues = exports.truncateData = exports.getAnnotations = void 0;
1804
2849
 
1805
2850
  var lodash_1 = __webpack_require__(3);
1806
2851
  /**
@@ -1996,15 +3041,31 @@ var constructFieldsAndColumns = function constructFieldsAndColumns(_ref2) {
1996
3041
 
1997
3042
  exports.constructFieldsAndColumns = constructFieldsAndColumns;
1998
3043
 
3044
+ var shouldEnableSearchZoom = function shouldEnableSearchZoom() {
3045
+ var eventHandlers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
3046
+ var xField = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
3047
+ var rangeSelectEventHandler = eventHandlers.find(function (eventHandler) {
3048
+ var _a;
3049
+
3050
+ return (_a = eventHandler.options.events) === null || _a === void 0 ? void 0 : _a.includes('range.select');
3051
+ }); // Check if xField is _time. This is how splunk-charting distinguishes a time chart from categorical.
3052
+ // Note: search zoom will be buggy if the x axis uses timestamp values but is not _time
3053
+
3054
+ var xAxisIsTime = xField === '_time';
3055
+ return !!rangeSelectEventHandler && xAxisIsTime;
3056
+ };
3057
+
3058
+ exports.shouldEnableSearchZoom = shouldEnableSearchZoom;
3059
+
1999
3060
  /***/ }),
2000
- /* 58 */,
2001
- /* 59 */,
2002
- /* 60 */,
2003
- /* 61 */,
2004
- /* 62 */,
2005
- /* 63 */,
2006
- /* 64 */,
2007
- /* 65 */
3061
+ /* 80 */,
3062
+ /* 81 */,
3063
+ /* 82 */,
3064
+ /* 83 */,
3065
+ /* 84 */,
3066
+ /* 85 */,
3067
+ /* 86 */,
3068
+ /* 87 */
2008
3069
  /***/ (function(module, exports, __webpack_require__) {
2009
3070
 
2010
3071
  "use strict";
@@ -2020,34 +3081,40 @@ var lodash_1 = __webpack_require__(3);
2020
3081
 
2021
3082
  var i18n_1 = __webpack_require__(2);
2022
3083
 
2023
- var visualization_color_palettes_1 = __webpack_require__(51);
3084
+ var visualization_color_palettes_1 = __webpack_require__(73);
2024
3085
 
2025
- var react_1 = __webpack_require__(1);
3086
+ var react_1 = __webpack_require__(0);
2026
3087
 
2027
- var React = __webpack_require__(1);
3088
+ var React = __webpack_require__(0);
2028
3089
 
2029
- var T = __webpack_require__(0);
3090
+ var T = __webpack_require__(1);
2030
3091
 
2031
- var react_event_listener_1 = __webpack_require__(66);
3092
+ var react_event_listener_1 = __webpack_require__(88);
2032
3093
 
2033
- __webpack_require__(67); // fixme, @splunk/charting should be refactor to use locale & timezone instead of i18n functions
3094
+ __webpack_require__(89); // fixme, @splunk/charting should be refactor to use locale & timezone instead of i18n functions
2034
3095
 
2035
3096
 
2036
- var charting_bundle_1 = __webpack_require__(55);
3097
+ var charting_bundle_1 = __webpack_require__(77);
2037
3098
 
2038
- var TimezoneContext_1 = __webpack_require__(26);
3099
+ var TimezoneContext_1 = __webpack_require__(32);
2039
3100
 
2040
- var style_1 = __webpack_require__(14);
3101
+ var style_1 = __webpack_require__(18);
2041
3102
 
2042
3103
  var styled_components_1 = __webpack_require__(4);
2043
3104
 
2044
- var Message_1 = __webpack_require__(10);
3105
+ var Message_1 = __webpack_require__(12);
3106
+
3107
+ var useSplunkTheme_1 = __webpack_require__(78);
3108
+
3109
+ var themeUtils_1 = __webpack_require__(90);
3110
+
3111
+ var ChartingApi_1 = __webpack_require__(91);
2045
3112
 
2046
- var useSplunkTheme_1 = __webpack_require__(56);
3113
+ var usePrevious_1 = __webpack_require__(33);
2047
3114
 
2048
- var themeUtils_1 = __webpack_require__(68);
3115
+ var useEventCallback_1 = __webpack_require__(92);
2049
3116
 
2050
- var ChartingApi_1 = __webpack_require__(69);
3117
+ var dataUtils_1 = __webpack_require__(14);
2051
3118
 
2052
3119
  exports.NO_INPLACE_PROPS = ['chart', 'chart.orientation', 'layout.splitSeries', 'chart.style', 'legend.placement'];
2053
3120
 
@@ -2061,14 +3128,6 @@ var changedOptions = function changedOptions(curOptions, nextOptions) {
2061
3128
 
2062
3129
  exports.changedOptions = changedOptions;
2063
3130
 
2064
- function usePrevious(value) {
2065
- var ref = (0, react_1.useRef)();
2066
- (0, react_1.useEffect)(function () {
2067
- ref.current = value;
2068
- });
2069
- return ref.current;
2070
- }
2071
-
2072
3131
  var canUpdateInPlace = function canUpdateInPlace(curOptions, nextOptions) {
2073
3132
  // if either of the options are undefined
2074
3133
  // it cannot update in place.
@@ -2133,16 +3192,23 @@ var propTypes = {
2133
3192
  style: T.object,
2134
3193
  colorPalette: T.array,
2135
3194
  visualizationApiRef: T.func,
2136
- themeKey: T.string
3195
+ themeKey: T.string,
3196
+ originalDataSources: T.object,
3197
+ onDownsamplingThresholdChange: T.func,
3198
+ xField: T.string,
3199
+ y2Fields: T.array
2137
3200
  };
2138
3201
 
2139
3202
  var Charting = function Charting(props) {
3203
+ var _a, _b;
3204
+
2140
3205
  var container = (0, react_1.useRef)(null);
2141
3206
  var needsInit = (0, react_1.useRef)(true);
2142
3207
  var chart = (0, react_1.useRef)();
2143
3208
  var needsRedraw = (0, react_1.useRef)(true);
2144
3209
  var api = (0, react_1.useRef)(new ChartingApi_1.ChartingApiFunctional(chart));
2145
3210
  var timezone = (0, react_1.useContext)(TimezoneContext_1.default);
3211
+ var selectChartEvent = (0, react_1.useRef)(null);
2146
3212
 
2147
3213
  var computeChartingSize = function computeChartingSize() {
2148
3214
  if (container.current) {
@@ -2170,9 +3236,13 @@ var Charting = function Charting(props) {
2170
3236
  onSelect = props.onSelect,
2171
3237
  onPointMouseOut = props.onPointMouseOut,
2172
3238
  onPointMouseOver = props.onPointMouseOver,
2173
- onEventTrigger = props.onEventTrigger;
2174
- var prevOptions = usePrevious(options);
2175
- var prevTimezone = usePrevious(timezone);
3239
+ onEventTrigger = props.onEventTrigger,
3240
+ originalDataSources = props.originalDataSources,
3241
+ onDownsamplingThresholdChange = props.onDownsamplingThresholdChange,
3242
+ xField = props.xField,
3243
+ y2Fields = props.y2Fields;
3244
+ var prevOptions = (0, usePrevious_1.default)(options);
3245
+ var prevTimezone = (0, usePrevious_1.default)(timezone);
2176
3246
 
2177
3247
  var handleClick = function handleClick(chartEvent, type) {
2178
3248
  var payload = (0, lodash_1.pick)(chartEvent, 'name2', 'value2', '_span', 'modifierKey');
@@ -2202,8 +3272,37 @@ var Charting = function Charting(props) {
2202
3272
  needsInit.current = true;
2203
3273
  };
2204
3274
 
2205
- var handleSelect = function handleSelect(chartEvent) {
2206
- // todo: need change this after breaking all visualizations
3275
+ var enableSearchZoom = (_b = (_a = chartData === null || chartData === void 0 ? void 0 : chartData.chartDataOptions) === null || _a === void 0 ? void 0 : _a.enableSearchZoom) !== null && _b !== void 0 ? _b : false;
3276
+ var recalculateDownsamplingThreshold = React.useCallback(function () {
3277
+ if (!onDownsamplingThresholdChange || !xField) {
3278
+ return;
3279
+ }
3280
+
3281
+ var newThreshold = (0, dataUtils_1.calculateDownsamplingThreshold)({
3282
+ enableSearchZoom: enableSearchZoom,
3283
+ dataSources: originalDataSources,
3284
+ width: Number(width),
3285
+ selectChartEvent: selectChartEvent.current,
3286
+ xField: xField,
3287
+ y2Fields: y2Fields
3288
+ });
3289
+
3290
+ if (Number.isFinite(newThreshold)) {
3291
+ onDownsamplingThresholdChange(newThreshold);
3292
+ }
3293
+ }, [enableSearchZoom, originalDataSources, onDownsamplingThresholdChange, width, xField, y2Fields]);
3294
+ React.useEffect(function () {
3295
+ recalculateDownsamplingThreshold();
3296
+ }, [recalculateDownsamplingThreshold]); // useEventCallback is used for these handlers to make sure that they are a stable reference and
3297
+ // we always use the latest version of the callback
3298
+ // Since chart drawing is debounced, there is a race condition where a stale callback may be called
3299
+ // if a prop changes and the event handler is called before the chart redraws. This means that
3300
+ // it will use the old callback rather than the newer one, which can lead to inaccurate results
3301
+
3302
+ var handleSelect = (0, useEventCallback_1.default)(function (chartEvent) {
3303
+ selectChartEvent.current = chartEvent;
3304
+ recalculateDownsamplingThreshold(); // todo: need change this after breaking all visualizations
3305
+
2207
3306
  if (onSelect && typeof onSelect === 'function') {
2208
3307
  onSelect({
2209
3308
  type: 'range.select',
@@ -2219,9 +3318,8 @@ var Charting = function Charting(props) {
2219
3318
  originalEvent: chartEvent,
2220
3319
  payload: (0, lodash_1.pick)(chartEvent, 'startXIndex', 'endXIndex', 'startXValue', 'endXValue')
2221
3320
  });
2222
- };
2223
-
2224
- var handlePointMouseOut = function handlePointMouseOut(chartEvent, type) {
3321
+ });
3322
+ var handlePointMouseOut = (0, useEventCallback_1.default)(function (chartEvent, type) {
2225
3323
  var payload = (0, lodash_1.pick)(chartEvent, 'name2', 'value2', '_span', 'modifierKey', 'tooltipContext');
2226
3324
  payload.name = payload.name2;
2227
3325
  delete payload.name2;
@@ -2233,9 +3331,8 @@ var Charting = function Charting(props) {
2233
3331
  originalEvent: chartEvent,
2234
3332
  payload: payload
2235
3333
  });
2236
- };
2237
-
2238
- var handlePointMouseOver = function handlePointMouseOver(chartEvent, type) {
3334
+ });
3335
+ var handlePointMouseOver = (0, useEventCallback_1.default)(function (chartEvent, type) {
2239
3336
  var payload = (0, lodash_1.pick)(chartEvent, 'name2', 'value2', '_span', 'modifierKey', 'tooltipContext');
2240
3337
  payload.name = payload.name2;
2241
3338
  delete payload.name2;
@@ -2247,7 +3344,7 @@ var Charting = function Charting(props) {
2247
3344
  originalEvent: chartEvent,
2248
3345
  payload: payload
2249
3346
  });
2250
- };
3347
+ });
2251
3348
 
2252
3349
  var drawChart = function drawChart() {
2253
3350
  var updatedOptions = Object.assign(Object.assign({}, options), {
@@ -2273,7 +3370,7 @@ var Charting = function Charting(props) {
2273
3370
 
2274
3371
  if (prevOptions) {
2275
3372
  Object.keys(prevOptions).forEach(function (key) {
2276
- if (updatedOptions[key] === undefined) {
3373
+ if (prevOptions[key] && updatedOptions[key] === undefined) {
2277
3374
  updatedOptions[key] = '';
2278
3375
  }
2279
3376
  });
@@ -2343,8 +3440,8 @@ var Charting = function Charting(props) {
2343
3440
  debouncedDrawChart();
2344
3441
  };
2345
3442
 
2346
- var prevTheme = usePrevious(themeKey);
2347
- var prevOnClick = usePrevious(onClick);
3443
+ var prevTheme = (0, usePrevious_1.default)(themeKey);
3444
+ var prevOnClick = (0, usePrevious_1.default)(onClick);
2348
3445
  (0, react_1.useEffect)(function () {
2349
3446
  debouncedDrawChart();
2350
3447
  props.visualizationApiRef(api.current);
@@ -2359,11 +3456,11 @@ var Charting = function Charting(props) {
2359
3456
  if (!chart.current || !(0, exports.canUpdateInPlace)(prevOptions, options) || // timezone is a simple object so this comparison should be fast
2360
3457
  JSON.stringify(prevTimezone) !== JSON.stringify(timezone) || !props.themeKey && prevTheme !== themeKey || prevOnClick !== onClick) {
2361
3458
  needsInit.current = true;
2362
- }
2363
-
2364
- needsRedraw.current = true; // need to immediately call drawChart upon an option or chartData change
3459
+ } // need to immediately call drawChart upon an option or chartData change
2365
3460
  // otherwise a noop would occur if the onContainerMount drawChart is re-invoked when dimensions change
2366
3461
 
3462
+
3463
+ needsRedraw.current = true;
2367
3464
  drawChart();
2368
3465
  }, [JSON.stringify(options), JSON.stringify(chartData.toJSON()), JSON.stringify(chartData.annotations), timezone === null || timezone === void 0 ? void 0 : timezone.ianaTimezone, timezone === null || timezone === void 0 ? void 0 : timezone.utcOffset, timezone === null || timezone === void 0 ? void 0 : timezone.serializedTimezone, themeKey, onClick]);
2369
3466
  return React.createElement(ChartingContainer, {
@@ -2391,7 +3488,11 @@ var defaultProps = {
2391
3488
  colorPalette: visualization_color_palettes_1.VIZ_CATEGORICAL,
2392
3489
  visualizationApiRef: lodash_1.noop,
2393
3490
  chartData: null,
2394
- themeKey: null
3491
+ themeKey: null,
3492
+ onDownsamplingThresholdChange: null,
3493
+ originalDataSources: null,
3494
+ xField: null,
3495
+ y2Fields: []
2395
3496
  };
2396
3497
  Charting.propTypes = propTypes;
2397
3498
  Charting.defaultProps = defaultProps; // allow for early return in case of empty chartData while still following hook rules
@@ -2427,33 +3528,33 @@ var withEmptyChartMessage = function withEmptyChartMessage(Chart) {
2427
3528
  exports.default = withEmptyChartMessage(Charting);
2428
3529
 
2429
3530
  /***/ }),
2430
- /* 66 */
3531
+ /* 88 */
2431
3532
  /***/ (function(module, exports) {
2432
3533
 
2433
3534
  module.exports = require("react-event-listener");
2434
3535
 
2435
3536
  /***/ }),
2436
- /* 67 */
3537
+ /* 89 */
2437
3538
  /***/ (function(module, exports) {
2438
3539
 
2439
3540
  module.exports = require("@splunk/visualizations-shared/i18n");
2440
3541
 
2441
3542
  /***/ }),
2442
- /* 68 */
3543
+ /* 90 */
2443
3544
  /***/ (function(module, exports) {
2444
3545
 
2445
3546
  module.exports = require("@splunk/visualizations-shared/themeUtils");
2446
3547
 
2447
3548
  /***/ }),
2448
- /* 69 */
3549
+ /* 91 */
2449
3550
  /***/ (function(module, exports, __webpack_require__) {
2450
3551
 
2451
3552
  "use strict";
2452
3553
 
2453
3554
 
2454
- var _classCallCheck = __webpack_require__(9);
3555
+ var _classCallCheck = __webpack_require__(10);
2455
3556
 
2456
- var _createClass = __webpack_require__(18);
3557
+ var _createClass = __webpack_require__(25);
2457
3558
 
2458
3559
  Object.defineProperty(exports, "__esModule", {
2459
3560
  value: true
@@ -2513,16 +3614,41 @@ var ChartingApiFunctional = /*#__PURE__*/function () {
2513
3614
  exports.ChartingApiFunctional = ChartingApiFunctional;
2514
3615
 
2515
3616
  /***/ }),
2516
- /* 70 */
3617
+ /* 92 */
3618
+ /***/ (function(module, exports, __webpack_require__) {
3619
+
3620
+ "use strict";
3621
+
3622
+
3623
+ Object.defineProperty(exports, "__esModule", {
3624
+ value: true
3625
+ });
3626
+
3627
+ var react_1 = __webpack_require__(0);
3628
+
3629
+ var useEventCallback = function useEventCallback(fn) {
3630
+ var ref = (0, react_1.useRef)(fn);
3631
+ (0, react_1.useLayoutEffect)(function () {
3632
+ ref.current = fn;
3633
+ });
3634
+ return (0, react_1.useCallback)(function () {
3635
+ return ref.current.apply(ref, arguments);
3636
+ }, []);
3637
+ };
3638
+
3639
+ exports.default = useEventCallback;
3640
+
3641
+ /***/ }),
3642
+ /* 93 */
2517
3643
  /***/ (function(module, exports) {
2518
3644
 
2519
3645
  module.exports = require("@splunk/visualizations-shared/simpleXMLOptions");
2520
3646
 
2521
3647
  /***/ }),
2522
- /* 71 */,
2523
- /* 72 */,
2524
- /* 73 */,
2525
- /* 74 */
3648
+ /* 94 */,
3649
+ /* 95 */,
3650
+ /* 96 */,
3651
+ /* 97 */
2526
3652
  /***/ (function(module, exports, __webpack_require__) {
2527
3653
 
2528
3654
  "use strict";
@@ -2537,7 +3663,7 @@ exports.AxesChartDataConfigAreaColumnLine = exports.AxesChartDataConfigBubble =
2537
3663
 
2538
3664
  var i18n_1 = __webpack_require__(2);
2539
3665
 
2540
- var configUtils_1 = __webpack_require__(20);
3666
+ var configUtils_1 = __webpack_require__(27);
2541
3667
 
2542
3668
  var AxesChartDataConfig = {
2543
3669
  label: (0, i18n_1._)('Data configurations'),
@@ -2662,7 +3788,7 @@ exports.AxesChartDataConfigAreaColumnLine = {
2662
3788
  exports.default = AxesChartDataConfig;
2663
3789
 
2664
3790
  /***/ }),
2665
- /* 75 */
3791
+ /* 98 */
2666
3792
  /***/ (function(module, exports, __webpack_require__) {
2667
3793
 
2668
3794
  "use strict";
@@ -2674,11 +3800,11 @@ Object.defineProperty(exports, "__esModule", {
2674
3800
 
2675
3801
  var i18n_1 = __webpack_require__(2);
2676
3802
 
2677
- var pick_1 = __webpack_require__(23);
3803
+ var pick_1 = __webpack_require__(30);
2678
3804
 
2679
- var variables_1 = __webpack_require__(11);
3805
+ var variables_1 = __webpack_require__(13);
2680
3806
 
2681
- var BackgroundColor_1 = __webpack_require__(53);
3807
+ var BackgroundColor_1 = __webpack_require__(75);
2682
3808
 
2683
3809
  var themes = {
2684
3810
  defaultBackgroundColor: function defaultBackgroundColor(props) {
@@ -2708,7 +3834,7 @@ var AxesChartColorAndStyle = {
2708
3834
  exports.default = AxesChartColorAndStyle;
2709
3835
 
2710
3836
  /***/ }),
2711
- /* 76 */
3837
+ /* 99 */
2712
3838
  /***/ (function(module, exports, __webpack_require__) {
2713
3839
 
2714
3840
  "use strict";
@@ -2772,7 +3898,7 @@ var AxesChartLegend = {
2772
3898
  exports.default = AxesChartLegend;
2773
3899
 
2774
3900
  /***/ }),
2775
- /* 77 */
3901
+ /* 100 */
2776
3902
  /***/ (function(module, exports, __webpack_require__) {
2777
3903
 
2778
3904
  "use strict";
@@ -2787,7 +3913,7 @@ exports.AxesChartXGridAndLabelsBubbleScatter = exports.AxesChartXGridAndLabelsCo
2787
3913
 
2788
3914
  var i18n_1 = __webpack_require__(2);
2789
3915
 
2790
- var configUtils_1 = __webpack_require__(20);
3916
+ var configUtils_1 = __webpack_require__(27);
2791
3917
 
2792
3918
  exports.AxesChartXGridAndLabelsCommon = {
2793
3919
  label: (0, i18n_1._)('X-axis grid and labels'),
@@ -3060,7 +4186,7 @@ exports.AxesChartXGridAndLabelsBubbleScatter = {
3060
4186
  exports.default = AxesChartXGridAndLabels;
3061
4187
 
3062
4188
  /***/ }),
3063
- /* 78 */
4189
+ /* 101 */
3064
4190
  /***/ (function(module, exports, __webpack_require__) {
3065
4191
 
3066
4192
  "use strict";
@@ -3222,29 +4348,6 @@ var AxesChartYGridAndLabels = {
3222
4348
  exports.default = AxesChartYGridAndLabels;
3223
4349
 
3224
4350
  /***/ }),
3225
- /* 79 */,
3226
- /* 80 */,
3227
- /* 81 */,
3228
- /* 82 */,
3229
- /* 83 */,
3230
- /* 84 */,
3231
- /* 85 */,
3232
- /* 86 */,
3233
- /* 87 */,
3234
- /* 88 */,
3235
- /* 89 */,
3236
- /* 90 */,
3237
- /* 91 */,
3238
- /* 92 */,
3239
- /* 93 */,
3240
- /* 94 */,
3241
- /* 95 */,
3242
- /* 96 */,
3243
- /* 97 */,
3244
- /* 98 */,
3245
- /* 99 */,
3246
- /* 100 */,
3247
- /* 101 */,
3248
4351
  /* 102 */,
3249
4352
  /* 103 */,
3250
4353
  /* 104 */,
@@ -3289,7 +4392,29 @@ exports.default = AxesChartYGridAndLabels;
3289
4392
  /* 143 */,
3290
4393
  /* 144 */,
3291
4394
  /* 145 */,
3292
- /* 146 */
4395
+ /* 146 */,
4396
+ /* 147 */,
4397
+ /* 148 */,
4398
+ /* 149 */,
4399
+ /* 150 */,
4400
+ /* 151 */,
4401
+ /* 152 */,
4402
+ /* 153 */,
4403
+ /* 154 */,
4404
+ /* 155 */,
4405
+ /* 156 */,
4406
+ /* 157 */,
4407
+ /* 158 */,
4408
+ /* 159 */,
4409
+ /* 160 */,
4410
+ /* 161 */,
4411
+ /* 162 */,
4412
+ /* 163 */,
4413
+ /* 164 */,
4414
+ /* 165 */,
4415
+ /* 166 */,
4416
+ /* 167 */,
4417
+ /* 168 */
3293
4418
  /***/ (function(module, exports, __webpack_require__) {
3294
4419
 
3295
4420
  "use strict";
@@ -3317,21 +4442,21 @@ var lodash_1 = __webpack_require__(3); // Charting imports i18n which needs to b
3317
4442
  // eslint-disable-next-line import/order
3318
4443
 
3319
4444
 
3320
- var Charting_1 = __webpack_require__(65);
4445
+ var Charting_1 = __webpack_require__(87);
3321
4446
 
3322
- var charting_bundle_1 = __webpack_require__(55);
4447
+ var charting_bundle_1 = __webpack_require__(77);
3323
4448
 
3324
- var simpleXMLOptions_1 = __webpack_require__(70);
4449
+ var simpleXMLOptions_1 = __webpack_require__(93);
3325
4450
 
3326
- var config_1 = __webpack_require__(184);
4451
+ var config_1 = __webpack_require__(206);
3327
4452
 
3328
4453
  exports.config = config_1.default;
3329
4454
 
3330
- var withDashboardViz_1 = __webpack_require__(37);
4455
+ var withDashboardViz_1 = __webpack_require__(56);
3331
4456
 
3332
- var bubbleUtils_1 = __webpack_require__(185);
4457
+ var bubbleUtils_1 = __webpack_require__(207);
3333
4458
 
3334
- var chartingUtils_1 = __webpack_require__(57);
4459
+ var chartingUtils_1 = __webpack_require__(79);
3335
4460
 
3336
4461
  var validOptions = Object.keys(config_1.default.optionsSchema);
3337
4462
 
@@ -3413,28 +4538,6 @@ exports.themes = themes;
3413
4538
  exports.default = Bubble;
3414
4539
 
3415
4540
  /***/ }),
3416
- /* 147 */,
3417
- /* 148 */,
3418
- /* 149 */,
3419
- /* 150 */,
3420
- /* 151 */,
3421
- /* 152 */,
3422
- /* 153 */,
3423
- /* 154 */,
3424
- /* 155 */,
3425
- /* 156 */,
3426
- /* 157 */,
3427
- /* 158 */,
3428
- /* 159 */,
3429
- /* 160 */,
3430
- /* 161 */,
3431
- /* 162 */,
3432
- /* 163 */,
3433
- /* 164 */,
3434
- /* 165 */,
3435
- /* 166 */,
3436
- /* 167 */,
3437
- /* 168 */,
3438
4541
  /* 169 */,
3439
4542
  /* 170 */,
3440
4543
  /* 171 */,
@@ -3449,7 +4552,29 @@ exports.default = Bubble;
3449
4552
  /* 180 */,
3450
4553
  /* 181 */,
3451
4554
  /* 182 */,
3452
- /* 183 */
4555
+ /* 183 */,
4556
+ /* 184 */,
4557
+ /* 185 */,
4558
+ /* 186 */,
4559
+ /* 187 */,
4560
+ /* 188 */,
4561
+ /* 189 */,
4562
+ /* 190 */,
4563
+ /* 191 */,
4564
+ /* 192 */,
4565
+ /* 193 */,
4566
+ /* 194 */,
4567
+ /* 195 */,
4568
+ /* 196 */,
4569
+ /* 197 */,
4570
+ /* 198 */,
4571
+ /* 199 */,
4572
+ /* 200 */,
4573
+ /* 201 */,
4574
+ /* 202 */,
4575
+ /* 203 */,
4576
+ /* 204 */,
4577
+ /* 205 */
3453
4578
  /***/ (function(module, exports, __webpack_require__) {
3454
4579
 
3455
4580
  "use strict";
@@ -3485,9 +4610,9 @@ Object.defineProperty(exports, "__esModule", {
3485
4610
  });
3486
4611
  exports.default = void 0;
3487
4612
 
3488
- __exportStar(__webpack_require__(146), exports);
4613
+ __exportStar(__webpack_require__(168), exports);
3489
4614
 
3490
- var Bubble_1 = __webpack_require__(146);
4615
+ var Bubble_1 = __webpack_require__(168);
3491
4616
 
3492
4617
  Object.defineProperty(exports, "default", {
3493
4618
  enumerable: true,
@@ -3497,7 +4622,7 @@ Object.defineProperty(exports, "default", {
3497
4622
  });
3498
4623
 
3499
4624
  /***/ }),
3500
- /* 184 */
4625
+ /* 206 */
3501
4626
  /***/ (function(module, exports, __webpack_require__) {
3502
4627
 
3503
4628
  "use strict";
@@ -3509,35 +4634,35 @@ Object.defineProperty(exports, "__esModule", {
3509
4634
  value: true
3510
4635
  });
3511
4636
 
3512
- var visualization_icons_1 = __webpack_require__(52);
4637
+ var visualization_icons_1 = __webpack_require__(74);
3513
4638
 
3514
- var placeholders_1 = __webpack_require__(50);
4639
+ var placeholders_1 = __webpack_require__(72);
3515
4640
 
3516
- var schemaUtils_1 = __webpack_require__(16);
4641
+ var schemaUtils_1 = __webpack_require__(24);
3517
4642
 
3518
- var visualization_color_palettes_1 = __webpack_require__(51);
4643
+ var visualization_color_palettes_1 = __webpack_require__(73);
3519
4644
 
3520
- var pick_1 = __webpack_require__(23);
4645
+ var pick_1 = __webpack_require__(30);
3521
4646
 
3522
- var variables_1 = __webpack_require__(11);
4647
+ var variables_1 = __webpack_require__(13);
3523
4648
 
3524
4649
  var i18n_1 = __webpack_require__(2);
3525
4650
 
3526
- var AxesChartDataConfig_1 = __webpack_require__(74);
4651
+ var AxesChartDataConfig_1 = __webpack_require__(97);
3527
4652
 
3528
- var AxesChartXGridAndLabels_1 = __webpack_require__(77);
4653
+ var AxesChartXGridAndLabels_1 = __webpack_require__(100);
3529
4654
 
3530
- var AxesChartColorAndStyle_1 = __webpack_require__(75);
4655
+ var AxesChartColorAndStyle_1 = __webpack_require__(98);
3531
4656
 
3532
- var AxesChartLegend_1 = __webpack_require__(76);
4657
+ var AxesChartLegend_1 = __webpack_require__(99);
3533
4658
 
3534
- var AxesChartYGridAndLabels_1 = __webpack_require__(78);
4659
+ var AxesChartYGridAndLabels_1 = __webpack_require__(101);
3535
4660
 
3536
4661
  var VizBehavior_1 = __webpack_require__(6);
3537
4662
 
3538
- var VizCategory_1 = __webpack_require__(36);
4663
+ var VizCategory_1 = __webpack_require__(22);
3539
4664
 
3540
- var configUtils_1 = __webpack_require__(20);
4665
+ var configUtils_1 = __webpack_require__(27);
3541
4666
 
3542
4667
  var dataContract = {
3543
4668
  requiredDataSources: [{
@@ -3959,7 +5084,7 @@ var config = {
3959
5084
  exports.default = (0, configUtils_1.enhanceConfig)(config);
3960
5085
 
3961
5086
  /***/ }),
3962
- /* 185 */
5087
+ /* 207 */
3963
5088
  /***/ (function(module, exports, __webpack_require__) {
3964
5089
 
3965
5090
  "use strict";
@@ -3972,9 +5097,9 @@ exports.convertToBubbleSCProperties = exports.mapToOldKey = exports.convertToStr
3972
5097
 
3973
5098
  var lodash_1 = __webpack_require__(3);
3974
5099
 
3975
- var propUtils_1 = __webpack_require__(29);
5100
+ var propUtils_1 = __webpack_require__(36);
3976
5101
 
3977
- var chartingUtils_1 = __webpack_require__(57); // map for key names which are either new or not present in SimpleXML options mapping
5102
+ var chartingUtils_1 = __webpack_require__(79); // map for key names which are either new or not present in SimpleXML options mapping
3978
5103
 
3979
5104
 
3980
5105
  var bubbleOptionsSCMapping = {