@splunk/visualizations 26.1.1 → 26.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +1418 -351
  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 +2013 -968
  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 +3517 -2212
  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 +13 -12
  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/Ellipse.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 = 201);
90
+ /******/ return __webpack_require__(__webpack_require__.s = 223);
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.1 - b6df0a015",
783
+ "data-splunk-visualization-version": "26.2.0 - 49b909915",
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,94 @@ 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 */
811
+ /***/ (function(module, exports, __webpack_require__) {
812
+
813
+ "use strict";
814
+
815
+
816
+ Object.defineProperty(exports, "__esModule", {
817
+ value: true
818
+ });
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'];
823
+
824
+ /***/ }),
825
+ /* 20 */,
826
+ /* 21 */
827
+ /***/ (function(module, exports, __webpack_require__) {
828
+
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;
861
+
862
+ /***/ }),
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 */
302
892
  /***/ (function(module, exports, __webpack_require__) {
303
893
 
304
894
  "use strict";
@@ -330,31 +920,25 @@ var extendStaticWrapperProps = function extendStaticWrapperProps(_ref) {
330
920
  exports.extendStaticWrapperProps = extendStaticWrapperProps;
331
921
 
332
922
  /***/ }),
333
- /* 16 */
923
+ /* 24 */
334
924
  /***/ (function(module, exports) {
335
925
 
336
926
  module.exports = require("@splunk/visualizations-shared/schemaUtils");
337
927
 
338
928
  /***/ }),
339
- /* 17 */
340
- /***/ (function(module, exports) {
341
-
342
- module.exports = require("@babel/runtime/helpers/slicedToArray");
343
-
344
- /***/ }),
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,63 +1174,78 @@ 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 */
1183
+ /* 29 */
600
1184
  /***/ (function(module, exports) {
601
1185
 
602
1186
  module.exports = require("@splunk/visualizations-shared/configUtils");
603
1187
 
604
1188
  /***/ }),
605
- /* 23 */
1189
+ /* 30 */
606
1190
  /***/ (function(module, exports) {
607
1191
 
608
1192
  module.exports = require("@splunk/themes/pick");
609
1193
 
610
1194
  /***/ }),
611
- /* 24 */,
612
- /* 25 */
1195
+ /* 31 */
613
1196
  /***/ (function(module, exports) {
614
1197
 
615
1198
  module.exports = require("@splunk/ui-utils/id");
616
1199
 
617
1200
  /***/ }),
618
- /* 26 */
1201
+ /* 32 */
619
1202
  /***/ (function(module, exports) {
620
1203
 
621
1204
  module.exports = require("@splunk/visualization-context/TimezoneContext");
622
1205
 
623
1206
  /***/ }),
624
- /* 27 */
625
- /***/ (function(module, exports) {
1207
+ /* 33 */
1208
+ /***/ (function(module, exports, __webpack_require__) {
626
1209
 
627
- module.exports = require("@splunk/visualizations-shared/hocUtils");
1210
+ "use strict";
1211
+
1212
+
1213
+ Object.defineProperty(exports, "__esModule", {
1214
+ value: true
1215
+ });
1216
+
1217
+ var react_1 = __webpack_require__(0);
1218
+
1219
+ function usePrevious(value) {
1220
+ var ref = (0, react_1.useRef)();
1221
+ (0, react_1.useEffect)(function () {
1222
+ ref.current = value;
1223
+ });
1224
+ return ref.current;
1225
+ }
1226
+
1227
+ exports.default = usePrevious;
628
1228
 
629
1229
  /***/ }),
630
- /* 28 */
1230
+ /* 34 */
631
1231
  /***/ (function(module, exports) {
632
1232
 
633
- module.exports = require("@splunk/visualizations-shared/JSONSchemaUtils");
1233
+ module.exports = require("@splunk/visualizations-shared/hocUtils");
634
1234
 
635
1235
  /***/ }),
636
- /* 29 */
1236
+ /* 35 */
637
1237
  /***/ (function(module, exports) {
638
1238
 
639
- module.exports = require("@splunk/visualizations-shared/propUtils");
1239
+ module.exports = require("@splunk/visualizations-shared/JSONSchemaUtils");
640
1240
 
641
1241
  /***/ }),
642
- /* 30 */
1242
+ /* 36 */
643
1243
  /***/ (function(module, exports) {
644
1244
 
645
- module.exports = require("@splunk/visualization-encoding/Options");
1245
+ module.exports = require("@splunk/visualizations-shared/propUtils");
646
1246
 
647
1247
  /***/ }),
648
- /* 31 */,
649
- /* 32 */
1248
+ /* 37 */
650
1249
  /***/ (function(module, exports, __webpack_require__) {
651
1250
 
652
1251
  "use strict";
@@ -657,17 +1256,17 @@ Object.defineProperty(exports, "__esModule", {
657
1256
  });
658
1257
  exports.shouldShowIconPlaceholder = void 0;
659
1258
 
660
- var React = __webpack_require__(1);
1259
+ var React = __webpack_require__(0);
661
1260
 
662
- var T = __webpack_require__(0);
1261
+ var T = __webpack_require__(1);
663
1262
 
664
1263
  var lodash_1 = __webpack_require__(3);
665
1264
 
666
1265
  var i18n_1 = __webpack_require__(2);
667
1266
 
668
- var Message_1 = __webpack_require__(10);
1267
+ var Message_1 = __webpack_require__(12);
669
1268
 
670
- var FixedSizeContainer_1 = __webpack_require__(13);
1269
+ var FixedSizeContainer_1 = __webpack_require__(17);
671
1270
  /**
672
1271
  * @method shouldShowIconPlaceholder
673
1272
  * @param {object} dataSources
@@ -738,24 +1337,24 @@ IconPlaceholder.defaultProps = {
738
1337
  exports.default = (0, FixedSizeContainer_1.default)(IconPlaceholder);
739
1338
 
740
1339
  /***/ }),
741
- /* 33 */
1340
+ /* 38 */
742
1341
  /***/ (function(module, exports, __webpack_require__) {
743
1342
 
744
1343
  "use strict";
745
1344
 
746
1345
 
747
- var _defineProperty = __webpack_require__(7);
1346
+ var _defineProperty = __webpack_require__(9);
748
1347
 
749
1348
  Object.defineProperty(exports, "__esModule", {
750
1349
  value: true
751
1350
  });
752
1351
  exports.getSortingParams = exports.SortParamsPropTypes = void 0;
753
1352
 
754
- var T = __webpack_require__(0);
1353
+ var T = __webpack_require__(1);
755
1354
 
756
1355
  var lodash_1 = __webpack_require__(3);
757
1356
 
758
- var DataSource_1 = __webpack_require__(34);
1357
+ var DataSource_1 = __webpack_require__(19);
759
1358
 
760
1359
  exports.SortParamsPropTypes = T.shape({
761
1360
  currentSortKey: T.string,
@@ -808,22 +1407,7 @@ var getSortingParams = function getSortingParams(_ref) {
808
1407
  exports.getSortingParams = getSortingParams;
809
1408
 
810
1409
  /***/ }),
811
- /* 34 */
812
- /***/ (function(module, exports, __webpack_require__) {
813
-
814
- "use strict";
815
-
816
-
817
- Object.defineProperty(exports, "__esModule", {
818
- value: true
819
- });
820
- exports.validOutputModes = exports.validSegmentationModes = exports.validSortDirs = void 0;
821
- exports.validSortDirs = ['asc', 'desc', 'none'];
822
- exports.validSegmentationModes = ['none', 'inner'];
823
- exports.validOutputModes = ['json_cols', 'json'];
824
-
825
- /***/ }),
826
- /* 35 */
1410
+ /* 39 */
827
1411
  /***/ (function(module, exports, __webpack_require__) {
828
1412
 
829
1413
  "use strict";
@@ -834,7 +1418,7 @@ Object.defineProperty(exports, "__esModule", {
834
1418
  });
835
1419
  exports.getPaginationParams = exports.PaginatorParamsPropTypes = void 0;
836
1420
 
837
- var T = __webpack_require__(0);
1421
+ var T = __webpack_require__(1);
838
1422
 
839
1423
  var lodash_1 = __webpack_require__(3);
840
1424
 
@@ -887,7 +1471,238 @@ var getPaginationParams = function getPaginationParams(_ref) {
887
1471
  exports.getPaginationParams = getPaginationParams;
888
1472
 
889
1473
  /***/ }),
890
- /* 36 */
1474
+ /* 40 */
1475
+ /***/ (function(module, exports, __webpack_require__) {
1476
+
1477
+ "use strict";
1478
+
1479
+
1480
+ var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {
1481
+ if (k2 === undefined) k2 = k;
1482
+ var desc = Object.getOwnPropertyDescriptor(m, k);
1483
+
1484
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
1485
+ desc = {
1486
+ enumerable: true,
1487
+ get: function get() {
1488
+ return m[k];
1489
+ }
1490
+ };
1491
+ }
1492
+
1493
+ Object.defineProperty(o, k2, desc);
1494
+ } : function (o, m, k, k2) {
1495
+ if (k2 === undefined) k2 = k;
1496
+ o[k2] = m[k];
1497
+ });
1498
+
1499
+ var __exportStar = this && this.__exportStar || function (m, exports) {
1500
+ for (var p in m) {
1501
+ if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1502
+ }
1503
+ };
1504
+
1505
+ Object.defineProperty(exports, "__esModule", {
1506
+ value: true
1507
+ });
1508
+
1509
+ __exportStar(__webpack_require__(41), exports);
1510
+
1511
+ __exportStar(__webpack_require__(42), exports);
1512
+
1513
+ __exportStar(__webpack_require__(19), exports);
1514
+
1515
+ __exportStar(__webpack_require__(43), exports);
1516
+
1517
+ __exportStar(__webpack_require__(44), exports);
1518
+
1519
+ __exportStar(__webpack_require__(45), exports);
1520
+
1521
+ __exportStar(__webpack_require__(46), exports);
1522
+
1523
+ __exportStar(__webpack_require__(47), exports);
1524
+
1525
+ __exportStar(__webpack_require__(48), exports);
1526
+
1527
+ __exportStar(__webpack_require__(49), exports);
1528
+
1529
+ __exportStar(__webpack_require__(21), exports);
1530
+
1531
+ __exportStar(__webpack_require__(6), exports);
1532
+
1533
+ __exportStar(__webpack_require__(22), exports);
1534
+
1535
+ __exportStar(__webpack_require__(50), exports);
1536
+
1537
+ __exportStar(__webpack_require__(51), exports);
1538
+
1539
+ __exportStar(__webpack_require__(52), exports);
1540
+
1541
+ __exportStar(__webpack_require__(53), exports);
1542
+
1543
+ __exportStar(__webpack_require__(54), exports);
1544
+
1545
+ __exportStar(__webpack_require__(55), exports);
1546
+
1547
+ /***/ }),
1548
+ /* 41 */
1549
+ /***/ (function(module, exports, __webpack_require__) {
1550
+
1551
+ "use strict";
1552
+
1553
+
1554
+ Object.defineProperty(exports, "__esModule", {
1555
+ value: true
1556
+ });
1557
+
1558
+ /***/ }),
1559
+ /* 42 */
1560
+ /***/ (function(module, exports, __webpack_require__) {
1561
+
1562
+ "use strict";
1563
+
1564
+ /**
1565
+ * A data structure used at runtime to wire up a visualization.
1566
+ */
1567
+
1568
+ Object.defineProperty(exports, "__esModule", {
1569
+ value: true
1570
+ });
1571
+
1572
+ /***/ }),
1573
+ /* 43 */
1574
+ /***/ (function(module, exports, __webpack_require__) {
1575
+
1576
+ "use strict";
1577
+
1578
+
1579
+ Object.defineProperty(exports, "__esModule", {
1580
+ value: true
1581
+ });
1582
+
1583
+ /***/ }),
1584
+ /* 44 */
1585
+ /***/ (function(module, exports, __webpack_require__) {
1586
+
1587
+ "use strict";
1588
+
1589
+
1590
+ Object.defineProperty(exports, "__esModule", {
1591
+ value: true
1592
+ });
1593
+
1594
+ /***/ }),
1595
+ /* 45 */
1596
+ /***/ (function(module, exports, __webpack_require__) {
1597
+
1598
+ "use strict";
1599
+
1600
+
1601
+ Object.defineProperty(exports, "__esModule", {
1602
+ value: true
1603
+ });
1604
+
1605
+ /***/ }),
1606
+ /* 46 */
1607
+ /***/ (function(module, exports, __webpack_require__) {
1608
+
1609
+ "use strict";
1610
+
1611
+
1612
+ Object.defineProperty(exports, "__esModule", {
1613
+ value: true
1614
+ });
1615
+
1616
+ /***/ }),
1617
+ /* 47 */
1618
+ /***/ (function(module, exports, __webpack_require__) {
1619
+
1620
+ "use strict";
1621
+
1622
+
1623
+ Object.defineProperty(exports, "__esModule", {
1624
+ value: true
1625
+ });
1626
+
1627
+ /***/ }),
1628
+ /* 48 */
1629
+ /***/ (function(module, exports, __webpack_require__) {
1630
+
1631
+ "use strict";
1632
+
1633
+
1634
+ Object.defineProperty(exports, "__esModule", {
1635
+ value: true
1636
+ });
1637
+
1638
+ /***/ }),
1639
+ /* 49 */
1640
+ /***/ (function(module, exports, __webpack_require__) {
1641
+
1642
+ "use strict";
1643
+
1644
+
1645
+ Object.defineProperty(exports, "__esModule", {
1646
+ value: true
1647
+ });
1648
+
1649
+ /***/ }),
1650
+ /* 50 */
1651
+ /***/ (function(module, exports, __webpack_require__) {
1652
+
1653
+ "use strict";
1654
+
1655
+
1656
+ Object.defineProperty(exports, "__esModule", {
1657
+ value: true
1658
+ });
1659
+
1660
+ /***/ }),
1661
+ /* 51 */
1662
+ /***/ (function(module, exports, __webpack_require__) {
1663
+
1664
+ "use strict";
1665
+
1666
+
1667
+ Object.defineProperty(exports, "__esModule", {
1668
+ value: true
1669
+ });
1670
+
1671
+ /***/ }),
1672
+ /* 52 */
1673
+ /***/ (function(module, exports, __webpack_require__) {
1674
+
1675
+ "use strict";
1676
+
1677
+
1678
+ Object.defineProperty(exports, "__esModule", {
1679
+ value: true
1680
+ });
1681
+
1682
+ /***/ }),
1683
+ /* 53 */
1684
+ /***/ (function(module, exports, __webpack_require__) {
1685
+
1686
+ "use strict";
1687
+
1688
+
1689
+ Object.defineProperty(exports, "__esModule", {
1690
+ value: true
1691
+ });
1692
+
1693
+ /***/ }),
1694
+ /* 54 */
1695
+ /***/ (function(module, exports, __webpack_require__) {
1696
+
1697
+ "use strict";
1698
+
1699
+
1700
+ Object.defineProperty(exports, "__esModule", {
1701
+ value: true
1702
+ });
1703
+
1704
+ /***/ }),
1705
+ /* 55 */
891
1706
  /***/ (function(module, exports, __webpack_require__) {
892
1707
 
893
1708
  "use strict";
@@ -896,78 +1711,67 @@ exports.getPaginationParams = getPaginationParams;
896
1711
  Object.defineProperty(exports, "__esModule", {
897
1712
  value: true
898
1713
  });
899
- exports.VizCategory = void 0;
900
- var VizCategory;
901
-
902
- (function (VizCategory) {
903
- VizCategory["SINGLE_VALUE"] = "Single Value";
904
- VizCategory["TRENDS"] = "Trends";
905
- VizCategory["COMPARISONS"] = "Comparisons";
906
- VizCategory["TABLE"] = "Table";
907
- VizCategory["GAUGE"] = "Gauge";
908
- VizCategory["DISTRIBUTIONS"] = "Distributions";
909
- VizCategory["CHOROPLETH"] = "Choropleth Maps";
910
- VizCategory["SHAPES"] = "Shapes";
911
- VizCategory["MISC"] = "misc";
912
- VizCategory["FLOW"] = "Flow";
913
- VizCategory["CORRELATION"] = "Correlation";
914
- VizCategory["SPATIAL"] = "Spatial";
915
- })(VizCategory = exports.VizCategory || (exports.VizCategory = {}));
916
1714
 
917
1715
  /***/ }),
918
- /* 37 */
1716
+ /* 56 */
919
1717
  /***/ (function(module, exports, __webpack_require__) {
920
1718
 
921
1719
  "use strict";
922
1720
 
923
1721
 
924
- var _slicedToArray = __webpack_require__(17);
1722
+ var _slicedToArray = __webpack_require__(7);
925
1723
 
926
1724
  Object.defineProperty(exports, "__esModule", {
927
1725
  value: true
928
1726
  });
929
1727
 
930
- var React = __webpack_require__(1);
1728
+ var React = __webpack_require__(0);
931
1729
 
932
1730
  var lodash_1 = __webpack_require__(3);
933
1731
 
934
- var getSettingsFromThemedProps_1 = __webpack_require__(38);
1732
+ var getSettingsFromThemedProps_1 = __webpack_require__(57);
935
1733
 
936
- var Options_1 = __webpack_require__(30);
1734
+ var Options_1 = __webpack_require__(16);
937
1735
 
938
- var SanitizeProps_1 = __webpack_require__(39);
1736
+ var SanitizeProps_1 = __webpack_require__(58);
939
1737
 
940
- var TimezoneContext_1 = __webpack_require__(26);
1738
+ var TimezoneContext_1 = __webpack_require__(32);
941
1739
 
942
- var moment_1 = __webpack_require__(40);
1740
+ var moment_1 = __webpack_require__(59);
943
1741
 
944
- var FeatureFlagContext_1 = __webpack_require__(21);
1742
+ var FeatureFlagContext_1 = __webpack_require__(28);
945
1743
 
946
1744
  var styled_components_1 = __webpack_require__(4);
947
1745
 
948
- var hocUtils_1 = __webpack_require__(27);
1746
+ var hocUtils_1 = __webpack_require__(34);
949
1747
 
950
- var JSONSchemaUtils_1 = __webpack_require__(28);
1748
+ var JSONSchemaUtils_1 = __webpack_require__(35);
951
1749
 
952
- var async_dynamic_options_evaluator_1 = __webpack_require__(41);
1750
+ var async_dynamic_options_evaluator_1 = __webpack_require__(60);
953
1751
 
954
- var id_1 = __webpack_require__(25);
1752
+ var id_1 = __webpack_require__(31);
955
1753
 
956
- var SplunkVisualization_1 = __webpack_require__(42);
1754
+ var SplunkVisualization_1 = __webpack_require__(61);
957
1755
 
958
1756
  var VizBehavior_1 = __webpack_require__(6);
959
1757
 
960
- var getSorting_1 = __webpack_require__(33);
1758
+ var getSorting_1 = __webpack_require__(38);
1759
+
1760
+ var getPagination_1 = __webpack_require__(39);
1761
+
1762
+ var useDeepMemo_1 = __webpack_require__(62);
961
1763
 
962
- var getPagination_1 = __webpack_require__(35);
1764
+ var MissingPropsMessage_1 = __webpack_require__(63);
963
1765
 
964
- var useDeepMemo_1 = __webpack_require__(44);
1766
+ var withEditModeCover_1 = __webpack_require__(64);
965
1767
 
966
- var MissingPropsMessage_1 = __webpack_require__(45);
1768
+ var withPlaceholder_1 = __webpack_require__(65);
967
1769
 
968
- var withEditModeCover_1 = __webpack_require__(46);
1770
+ var useDownsampleDataSources_1 = __webpack_require__(66);
969
1771
 
970
- var withPlaceholder_1 = __webpack_require__(47);
1772
+ var dataUtils_1 = __webpack_require__(14);
1773
+
1774
+ var featureFlagUtils_1 = __webpack_require__(68);
971
1775
  /**
972
1776
  * hoc that wraps a pure react visualization in a Dashboard visualization
973
1777
  * @param {DashboardVizOpts} opts
@@ -1058,25 +1862,61 @@ var withDashboardViz = function withDashboardViz(opts) {
1058
1862
  dataFramesInState = _React$useState8[0],
1059
1863
  setDataFramesInState = _React$useState8[1];
1060
1864
 
1061
- var _React$useState9 = React.useState(Boolean(featureFlagContext === null || featureFlagContext === void 0 ? void 0 : featureFlagContext.visualizations_useWebWorkersForDSL)),
1865
+ var _React$useState9 = React.useState(Boolean((0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_useWebWorkersForDSL'))),
1062
1866
  _React$useState10 = _slicedToArray(_React$useState9, 2),
1063
1867
  useAsyncEvaluatedOptions = _React$useState10[0],
1064
1868
  setUseAsyncEvaluatedOptions = _React$useState10[1];
1065
1869
 
1870
+ var isDownsamplingEnabledByFeatureFlag = Boolean(featureFlagContext === null || featureFlagContext === void 0 ? void 0 : featureFlagContext.visualizations_enableDownsampling);
1066
1871
  var isMounted = React.useRef(true);
1872
+ var optionsToEvaluate = React.useMemo(function () {
1873
+ return {
1874
+ context: (0, lodash_1.defaultsDeep)({}, context, vizConfig.defaultContext),
1875
+ options: (0, hocUtils_1.deepMergeWithArrayPrimitiveOverrides)({}, options, defaultOptions)
1876
+ };
1877
+ }, [options, context]);
1878
+
1879
+ var _React$useState11 = React.useState(Number(width)),
1880
+ _React$useState12 = _slicedToArray(_React$useState11, 2),
1881
+ threshold = _React$useState12[0],
1882
+ setThreshold = _React$useState12[1];
1883
+
1884
+ var onDownsamplingThresholdChange = React.useCallback(function (newThreshold) {
1885
+ setThreshold(newThreshold);
1886
+ }, []);
1887
+ var isDownsamplingEnabled = React.useMemo(function () {
1888
+ return isDownsamplingEnabledByFeatureFlag && (0, dataUtils_1.isDownsamplingEnabledForViz)({
1889
+ vizConfig: vizConfig
1890
+ });
1891
+ }, [isDownsamplingEnabledByFeatureFlag]);
1892
+ var downsamplingProps = React.useMemo(function () {
1893
+ if (!isDownsamplingEnabled) {
1894
+ return {};
1895
+ }
1896
+
1897
+ return {
1898
+ onDownsamplingThresholdChange: onDownsamplingThresholdChange,
1899
+ originalDataSources: dataSources
1900
+ };
1901
+ }, [dataSources, isDownsamplingEnabled, onDownsamplingThresholdChange]);
1902
+ var downsampledDataSources = (0, useDownsampleDataSources_1.default)({
1903
+ options: optionsToEvaluate.options,
1904
+ context: optionsToEvaluate.context,
1905
+ dataSources: dataSources,
1906
+ threshold: threshold,
1907
+ isDownsamplingEnabled: isDownsamplingEnabled
1908
+ });
1067
1909
  evaluatedOptions = (0, useDeepMemo_1.useDeepMemo)(function () {
1068
1910
  try {
1069
1911
  if (useAsyncEvaluatedOptions) {
1070
- var optionsToEvaluate = {
1071
- context: (0, lodash_1.defaultsDeep)({}, context, vizConfig.defaultContext),
1072
- options: (0, hocUtils_1.deepMergeWithArrayPrimitiveOverrides)({}, options, defaultOptions)
1073
- };
1074
1912
  var asyncDynamicOptionsEvaluatorParams = {
1075
1913
  visualizationID: visualizationID,
1076
1914
  props: props,
1077
1915
  options: optionsToEvaluate,
1078
- dataSources: dataSources,
1079
- theme: vizConfig.themes
1916
+ dataSources: downsampledDataSources,
1917
+ theme: vizConfig.themes,
1918
+ bypassCloneDeepOptionScope: Boolean((0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_bypassCloneDeepOptionScope')),
1919
+ lazyLoadingDataFrame: Boolean((0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_lazyLoadingDataFrame'))
1080
1920
  };
1081
1921
  async_dynamic_options_evaluator_1.default.evaluate(asyncDynamicOptionsEvaluatorParams).then(function (results) {
1082
1922
  setEvaluatedOptionsAsync(results.results);
@@ -1088,16 +1928,14 @@ var withDashboardViz = function withDashboardViz(opts) {
1088
1928
  } else {
1089
1929
  var dataFrames = dataFramesInState;
1090
1930
 
1091
- if (dataSources !== dataSourcesInState) {
1092
- setDataSourcesInState(dataSources);
1093
- dataFrames = Options_1.Options.dataFrameFromDataSource(dataSources);
1931
+ if (downsampledDataSources !== dataSourcesInState) {
1932
+ setDataSourcesInState(downsampledDataSources);
1933
+ dataFrames = Options_1.Options.dataFrameFromDataSource(downsampledDataSources, (0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_lazyLoadingDataFrame'));
1094
1934
  setDataFramesInState(dataFrames);
1095
1935
  }
1096
1936
 
1097
- return Options_1.Options.evaluate({
1098
- context: (0, lodash_1.defaultsDeep)({}, context, vizConfig.defaultContext),
1099
- options: (0, hocUtils_1.deepMergeWithArrayPrimitiveOverrides)({}, options, defaultOptions)
1100
- }, dataSources, themeFunc, dataFrames);
1937
+ var result = Options_1.Options.evaluate(optionsToEvaluate, downsampledDataSources, themeFunc, dataFrames, (0, featureFlagUtils_1.getFeatureFlag)(featureFlagContext, 'visualizations_bypassCloneDeepOptionScope'));
1938
+ return result;
1101
1939
  }
1102
1940
  } catch (e) {
1103
1941
  // eslint-disable-next-line no-console
@@ -1106,7 +1944,7 @@ var withDashboardViz = function withDashboardViz(opts) {
1106
1944
  }
1107
1945
 
1108
1946
  return {};
1109
- }, [currentThemeFamily, currentThemeColorScheme, currentThemeDensity, options, context, dataSources, serializedTimezone, useAsyncEvaluatedOptions]);
1947
+ }, [currentThemeFamily, currentThemeColorScheme, currentThemeDensity, optionsToEvaluate, downsampledDataSources, serializedTimezone, useAsyncEvaluatedOptions]);
1110
1948
  var evaluatedOptionsToUse = !useAsyncEvaluatedOptions ? evaluatedOptions : evaluatedOptionsAsync; // trellis specific backgroundColor update for onComputedProps
1111
1949
  // 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
1112
1950
  // onComputedProps api should return back trellisBackgroundColor value for backgroundColor option to support coloring of sibling panels (for eg:- title/ description on UDF side)
@@ -1248,7 +2086,7 @@ var withDashboardViz = function withDashboardViz(opts) {
1248
2086
  mode: mode,
1249
2087
  width: width,
1250
2088
  height: height
1251
- }, evaluatedOptionsToUse, computedVizProps, eventCallbackProps, dataSourceMetadata));
2089
+ }, downsamplingProps, evaluatedOptionsToUse, computedVizProps, eventCallbackProps, dataSourceMetadata));
1252
2090
  };
1253
2091
 
1254
2092
  DashboardViz.propTypes = Object.assign(Object.assign({}, SplunkVisualization_1.default.propTypes), ReactViz.propTypes);
@@ -1265,37 +2103,37 @@ var withDashboardViz = function withDashboardViz(opts) {
1265
2103
  exports.default = withDashboardViz;
1266
2104
 
1267
2105
  /***/ }),
1268
- /* 38 */
2106
+ /* 57 */
1269
2107
  /***/ (function(module, exports) {
1270
2108
 
1271
2109
  module.exports = require("@splunk/themes/getSettingsFromThemedProps");
1272
2110
 
1273
2111
  /***/ }),
1274
- /* 39 */
2112
+ /* 58 */
1275
2113
  /***/ (function(module, exports) {
1276
2114
 
1277
2115
  module.exports = require("@splunk/visualizations-shared/SanitizeProps");
1278
2116
 
1279
2117
  /***/ }),
1280
- /* 40 */
2118
+ /* 59 */
1281
2119
  /***/ (function(module, exports) {
1282
2120
 
1283
2121
  module.exports = require("@splunk/moment");
1284
2122
 
1285
2123
  /***/ }),
1286
- /* 41 */
2124
+ /* 60 */
1287
2125
  /***/ (function(module, exports) {
1288
2126
 
1289
2127
  module.exports = require("@splunk/async-dynamic-options-evaluator");
1290
2128
 
1291
2129
  /***/ }),
1292
- /* 42 */
2130
+ /* 61 */
1293
2131
  /***/ (function(module, exports, __webpack_require__) {
1294
2132
 
1295
2133
  "use strict";
1296
2134
 
1297
2135
 
1298
- var _classCallCheck = __webpack_require__(9);
2136
+ var _classCallCheck = __webpack_require__(10);
1299
2137
 
1300
2138
  Object.defineProperty(exports, "__esModule", {
1301
2139
  value: true
@@ -1303,11 +2141,11 @@ Object.defineProperty(exports, "__esModule", {
1303
2141
  exports.INITIAL_HEIGHT = exports.INITIAL_WIDTH = void 0;
1304
2142
  /* eslint-disable react/no-unused-prop-types,react/prefer-stateless-function */
1305
2143
 
1306
- var T = __webpack_require__(0);
2144
+ var T = __webpack_require__(1);
1307
2145
 
1308
2146
  var lodash_1 = __webpack_require__(3);
1309
2147
 
1310
- var VizActionHandler_1 = __webpack_require__(43); // this is identical to the initial height and width we use in BaseVisualization in dashboard-visualizations
2148
+ var VizActionHandler_1 = __webpack_require__(21); // this is identical to the initial height and width we use in BaseVisualization in dashboard-visualizations
1311
2149
 
1312
2150
 
1313
2151
  exports.INITIAL_WIDTH = 250;
@@ -1440,44 +2278,7 @@ SplunkVisualization.defaultProps = {
1440
2278
  exports.default = SplunkVisualization;
1441
2279
 
1442
2280
  /***/ }),
1443
- /* 43 */
1444
- /***/ (function(module, exports, __webpack_require__) {
1445
-
1446
- "use strict";
1447
-
1448
-
1449
- var _classCallCheck = __webpack_require__(9);
1450
-
1451
- var _createClass = __webpack_require__(18);
1452
-
1453
- Object.defineProperty(exports, "__esModule", {
1454
- value: true
1455
- });
1456
- exports.DefaultVizActionHandler = void 0;
1457
-
1458
- var DefaultVizActionHandler = /*#__PURE__*/function () {
1459
- function DefaultVizActionHandler() {
1460
- _classCallCheck(this, DefaultVizActionHandler);
1461
- }
1462
-
1463
- _createClass(DefaultVizActionHandler, [{
1464
- key: "focus",
1465
- value: function focus() {// noop
1466
- }
1467
- }, {
1468
- key: "snapshot",
1469
- value: function snapshot() {
1470
- return null; // noop
1471
- }
1472
- }]);
1473
-
1474
- return DefaultVizActionHandler;
1475
- }();
1476
-
1477
- exports.DefaultVizActionHandler = DefaultVizActionHandler;
1478
-
1479
- /***/ }),
1480
- /* 44 */
2281
+ /* 62 */
1481
2282
  /***/ (function(module, exports, __webpack_require__) {
1482
2283
 
1483
2284
  "use strict";
@@ -1488,7 +2289,7 @@ Object.defineProperty(exports, "__esModule", {
1488
2289
  });
1489
2290
  exports.useDeepMemo = void 0;
1490
2291
 
1491
- var react_1 = __webpack_require__(1);
2292
+ var react_1 = __webpack_require__(0);
1492
2293
 
1493
2294
  var lodash_1 = __webpack_require__(3);
1494
2295
  /**
@@ -1522,7 +2323,7 @@ var useDeepMemo = function useDeepMemo(fn, dependencies) {
1522
2323
  exports.useDeepMemo = useDeepMemo;
1523
2324
 
1524
2325
  /***/ }),
1525
- /* 45 */
2326
+ /* 63 */
1526
2327
  /***/ (function(module, exports, __webpack_require__) {
1527
2328
 
1528
2329
  "use strict";
@@ -1533,15 +2334,15 @@ Object.defineProperty(exports, "__esModule", {
1533
2334
  });
1534
2335
  exports.MissingPropsMessage = exports.missingKeys = exports.isMissing = void 0;
1535
2336
 
1536
- var React = __webpack_require__(1);
2337
+ var React = __webpack_require__(0);
1537
2338
 
1538
- var T = __webpack_require__(0);
2339
+ var T = __webpack_require__(1);
1539
2340
 
1540
2341
  var i18n_1 = __webpack_require__(2);
1541
2342
 
1542
- var Message_1 = __webpack_require__(10);
2343
+ var Message_1 = __webpack_require__(12);
1543
2344
 
1544
- var FixedSizeContainer_1 = __webpack_require__(13);
2345
+ var FixedSizeContainer_1 = __webpack_require__(17);
1545
2346
  /**
1546
2347
  * @method isMissing
1547
2348
  * @param {any} v
@@ -1602,7 +2403,7 @@ exports.MissingPropsMessage.defaultProps = {
1602
2403
  exports.default = (0, FixedSizeContainer_1.default)(exports.MissingPropsMessage);
1603
2404
 
1604
2405
  /***/ }),
1605
- /* 46 */
2406
+ /* 64 */
1606
2407
  /***/ (function(module, exports, __webpack_require__) {
1607
2408
 
1608
2409
  "use strict";
@@ -1612,18 +2413,18 @@ Object.defineProperty(exports, "__esModule", {
1612
2413
  value: true
1613
2414
  });
1614
2415
 
1615
- var React = __webpack_require__(1);
2416
+ var React = __webpack_require__(0);
1616
2417
 
1617
2418
  var styled_components_1 = __webpack_require__(4);
1618
2419
 
1619
- var hocUtils_1 = __webpack_require__(15);
2420
+ var hocUtils_1 = __webpack_require__(23);
1620
2421
 
1621
2422
  var Cover = styled_components_1.default.div.withConfig({
1622
2423
  displayName: "withEditModeCover__Cover",
1623
2424
  componentId: "sc-1gsbnxb-0"
1624
2425
  })(["position:absolute;left:0;right:0;top:0;bottom:0;"]);
1625
2426
  var Blocker = styled_components_1.default.div.attrs({
1626
- 'data-splunk-visualization-version': "26.1.1 - b6df0a015"
2427
+ 'data-splunk-visualization-version': "26.2.0 - 49b909915"
1627
2428
  }).withConfig({
1628
2429
  displayName: "withEditModeCover__Blocker",
1629
2430
  componentId: "sc-1gsbnxb-1"
@@ -1654,7 +2455,7 @@ var withEditModeCover = function withEditModeCover(Visualization, disableEditMod
1654
2455
  exports.default = withEditModeCover;
1655
2456
 
1656
2457
  /***/ }),
1657
- /* 47 */
2458
+ /* 65 */
1658
2459
  /***/ (function(module, exports, __webpack_require__) {
1659
2460
 
1660
2461
  "use strict";
@@ -1664,17 +2465,17 @@ Object.defineProperty(exports, "__esModule", {
1664
2465
  value: true
1665
2466
  });
1666
2467
 
1667
- var React = __webpack_require__(1);
2468
+ var React = __webpack_require__(0);
1668
2469
 
1669
- var colorUtils_1 = __webpack_require__(12);
2470
+ var colorUtils_1 = __webpack_require__(15);
1670
2471
 
1671
- var variables_1 = __webpack_require__(11);
2472
+ var variables_1 = __webpack_require__(13);
1672
2473
 
1673
- var IconPlaceholder_1 = __webpack_require__(32);
2474
+ var IconPlaceholder_1 = __webpack_require__(37);
1674
2475
 
1675
2476
  var VizBehavior_1 = __webpack_require__(6);
1676
2477
 
1677
- var hocUtils_1 = __webpack_require__(15);
2478
+ var hocUtils_1 = __webpack_require__(23);
1678
2479
 
1679
2480
  var withPlaceholder = function withPlaceholder(Visualization) {
1680
2481
  var useIconPlaceholder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : IconPlaceholder_1.shouldShowIconPlaceholder;
@@ -1718,38 +2519,250 @@ var withPlaceholder = function withPlaceholder(Visualization) {
1718
2519
  exports.default = withPlaceholder;
1719
2520
 
1720
2521
  /***/ }),
1721
- /* 48 */,
1722
- /* 49 */,
1723
- /* 50 */,
1724
- /* 51 */,
1725
- /* 52 */,
1726
- /* 53 */,
1727
- /* 54 */,
1728
- /* 55 */,
1729
- /* 56 */,
1730
- /* 57 */,
1731
- /* 58 */,
1732
- /* 59 */
1733
- /***/ (function(module, exports) {
2522
+ /* 66 */
2523
+ /***/ (function(module, exports, __webpack_require__) {
1734
2524
 
1735
- module.exports = require("@babel/runtime/helpers/taggedTemplateLiteral");
2525
+ "use strict";
2526
+
2527
+
2528
+ var _slicedToArray = __webpack_require__(7);
2529
+
2530
+ Object.defineProperty(exports, "__esModule", {
2531
+ value: true
2532
+ });
2533
+
2534
+ var react_1 = __webpack_require__(0);
2535
+
2536
+ var lodash_1 = __webpack_require__(3);
2537
+
2538
+ var dataUtils_1 = __webpack_require__(14);
2539
+
2540
+ var usePrevious_1 = __webpack_require__(33);
2541
+
2542
+ var useGetXAndYFields_1 = __webpack_require__(67);
2543
+
2544
+ var useDownsampleDataSources = function useDownsampleDataSources(_ref) {
2545
+ var dataSources = _ref.dataSources,
2546
+ options = _ref.options,
2547
+ context = _ref.context,
2548
+ threshold = _ref.threshold,
2549
+ isDownsamplingEnabled = _ref.isDownsamplingEnabled;
2550
+ var isFirstUseEffectCall = (0, react_1.useRef)(true);
2551
+ var xAndYFieldsWithTypes = (0, useGetXAndYFields_1.default)({
2552
+ shouldEvaluateDSL: isDownsamplingEnabled,
2553
+ options: options,
2554
+ context: context,
2555
+ dataSources: dataSources
2556
+ });
2557
+ var previousXAndYFieldsWithTypes = (0, usePrevious_1.default)(xAndYFieldsWithTypes);
2558
+ var previousDataSources = (0, usePrevious_1.default)(dataSources);
2559
+ var previousThreshold = (0, usePrevious_1.default)(threshold);
2560
+
2561
+ var _ref2 = (0, react_1.useState)(function () {
2562
+ return isDownsamplingEnabled ? (0, dataUtils_1.downsampleDataSources)({
2563
+ dataSources: dataSources,
2564
+ threshold: threshold,
2565
+ options: xAndYFieldsWithTypes
2566
+ }) : dataSources;
2567
+ }),
2568
+ _ref3 = _slicedToArray(_ref2, 2),
2569
+ downsampledDataSources = _ref3[0],
2570
+ setDownsampledDataSources = _ref3[1];
2571
+
2572
+ var debouncedDownsampleDataSources = (0, react_1.useMemo)(function () {
2573
+ return (0, lodash_1.debounce)(function (downsampleOptions) {
2574
+ var downsampledResult = (0, dataUtils_1.downsampleDataSources)(downsampleOptions);
2575
+ setDownsampledDataSources(downsampledResult);
2576
+ }, 100, {
2577
+ trailing: true
2578
+ });
2579
+ }, []);
2580
+ (0, react_1.useEffect)(function () {
2581
+ // don't downsample again on the use effect call that happened due to the initial render
2582
+ // this is since we already downsampled as part of the useState call
2583
+ if (isFirstUseEffectCall.current) {
2584
+ isFirstUseEffectCall.current = false;
2585
+ return;
2586
+ }
2587
+
2588
+ if (!isDownsamplingEnabled) {
2589
+ setDownsampledDataSources(dataSources);
2590
+ return;
2591
+ }
2592
+
2593
+ if ((0, lodash_1.isEqual)(previousXAndYFieldsWithTypes, xAndYFieldsWithTypes) && previousDataSources === dataSources && previousThreshold === threshold) {
2594
+ return;
2595
+ } // Debounce the downsampling so we don't have to downsample and execute DSL multiple times
2596
+ // while the viz is being resized
2597
+
2598
+
2599
+ debouncedDownsampleDataSources({
2600
+ dataSources: dataSources,
2601
+ options: xAndYFieldsWithTypes,
2602
+ threshold: threshold
2603
+ }); // need to detect if this runs as part of the initial render
2604
+ }, [dataSources, debouncedDownsampleDataSources, xAndYFieldsWithTypes, threshold, isDownsamplingEnabled, previousXAndYFieldsWithTypes, previousDataSources, previousThreshold]);
2605
+ return downsampledDataSources;
2606
+ };
2607
+
2608
+ exports.default = useDownsampleDataSources;
1736
2609
 
1737
2610
  /***/ }),
1738
- /* 60 */,
1739
- /* 61 */
2611
+ /* 67 */
2612
+ /***/ (function(module, exports, __webpack_require__) {
2613
+
2614
+ "use strict";
2615
+
2616
+
2617
+ var _toConsumableArray = __webpack_require__(8);
2618
+
2619
+ Object.defineProperty(exports, "__esModule", {
2620
+ value: true
2621
+ });
2622
+
2623
+ var react_1 = __webpack_require__(0);
2624
+
2625
+ var Options_1 = __webpack_require__(16);
2626
+ /**
2627
+ * Hook that evaluates the DSL for subset of a viz's options needed to determine
2628
+ * its x and y fields as well as the types of all its fields.
2629
+ */
2630
+
2631
+
2632
+ var useGetXAndYFields = function useGetXAndYFields(_ref) {
2633
+ var shouldEvaluateDSL = _ref.shouldEvaluateDSL,
2634
+ options = _ref.options,
2635
+ context = _ref.context,
2636
+ dataSources = _ref.dataSources;
2637
+
2638
+ var _ref2 = (0, react_1.useMemo)(function () {
2639
+ var _a, _b, _c;
2640
+
2641
+ if (!shouldEvaluateDSL) {
2642
+ return {
2643
+ dataSourcesWithOnlyOnePoint: null,
2644
+ dataFrameWithOnlyOnePoint: null
2645
+ };
2646
+ }
2647
+
2648
+ 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)) {
2649
+ return {
2650
+ dataSourcesWithOnlyOnePoint: null,
2651
+ dataFrameWithOnlyOnePoint: null
2652
+ };
2653
+ }
2654
+
2655
+ var primaryDS = dataSources.primary;
2656
+ var columnsWithOnlyOnePoint = primaryDS.data.columns.map(function (column) {
2657
+ return [column[0]];
2658
+ });
2659
+ var filteredDataSources = {
2660
+ primary: Object.assign(Object.assign({}, primaryDS), {
2661
+ data: Object.assign(Object.assign({}, primaryDS.data), {
2662
+ columns: columnsWithOnlyOnePoint
2663
+ })
2664
+ })
2665
+ };
2666
+ return {
2667
+ dataSourcesWithOnlyOnePoint: filteredDataSources,
2668
+ dataFrameWithOnlyOnePoint: Options_1.Options.dataFrameFromDataSource(filteredDataSources)
2669
+ };
2670
+ }, [dataSources, shouldEvaluateDSL]),
2671
+ dataSourcesWithOnlyOnePoint = _ref2.dataSourcesWithOnlyOnePoint,
2672
+ dataFrameWithOnlyOnePoint = _ref2.dataFrameWithOnlyOnePoint;
2673
+
2674
+ var xAndYFieldsWithTypes = (0, react_1.useMemo)(function () {
2675
+ try {
2676
+ if (!dataSourcesWithOnlyOnePoint || !dataFrameWithOnlyOnePoint) {
2677
+ return options;
2678
+ }
2679
+
2680
+ 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)) {
2681
+ return options;
2682
+ }
2683
+
2684
+ var optionsToEvaluate = {
2685
+ x: options.x,
2686
+ xField: '> x | getField()',
2687
+ y: options.y,
2688
+ yFields: options.y ? '> y | getField()' : undefined,
2689
+ y2: options.y2,
2690
+ y2Fields: options.y2 ? '> y2 | getField()' : undefined,
2691
+ fieldTypes: '> primary | getType()'
2692
+ };
2693
+
2694
+ var _Options_1$Options$ev = Options_1.Options.evaluate({
2695
+ options: optionsToEvaluate,
2696
+ context: context
2697
+ }, dataSourcesWithOnlyOnePoint, function () {}, dataFrameWithOnlyOnePoint),
2698
+ _Options_1$Options$ev2 = _Options_1$Options$ev.xField,
2699
+ xField = _Options_1$Options$ev2 === void 0 ? '' : _Options_1$Options$ev2,
2700
+ _Options_1$Options$ev3 = _Options_1$Options$ev.yFields,
2701
+ yFields = _Options_1$Options$ev3 === void 0 ? [] : _Options_1$Options$ev3,
2702
+ _Options_1$Options$ev4 = _Options_1$Options$ev.y2Fields,
2703
+ y2Fields = _Options_1$Options$ev4 === void 0 ? [] : _Options_1$Options$ev4,
2704
+ fieldTypes = _Options_1$Options$ev.fieldTypes;
2705
+
2706
+ return {
2707
+ xField: xField,
2708
+ yFields: [].concat(_toConsumableArray(yFields), _toConsumableArray(y2Fields)),
2709
+ fieldTypes: fieldTypes
2710
+ };
2711
+ } catch (e) {
2712
+ return {
2713
+ xField: undefined,
2714
+ yFields: [],
2715
+ fieldTypes: []
2716
+ };
2717
+ }
2718
+ }, [options, context, dataSourcesWithOnlyOnePoint, dataFrameWithOnlyOnePoint]);
2719
+ return xAndYFieldsWithTypes;
2720
+ };
2721
+
2722
+ exports.default = useGetXAndYFields;
2723
+
2724
+ /***/ }),
2725
+ /* 68 */
2726
+ /***/ (function(module, exports, __webpack_require__) {
2727
+
2728
+ "use strict";
2729
+
2730
+
2731
+ Object.defineProperty(exports, "__esModule", {
2732
+ value: true
2733
+ });
2734
+ exports.getFeatureFlag = void 0;
2735
+
2736
+ var FeatureFlags_1 = __webpack_require__(69);
2737
+
2738
+ var getFeatureFlag = function getFeatureFlag(context, flagName) {
2739
+ // look for feature flag in context first
2740
+ if (context && Object.keys(context).find(function (key) {
2741
+ return key === flagName;
2742
+ })) {
2743
+ return context[flagName];
2744
+ } // fall back to defaults
2745
+
2746
+
2747
+ if (Object.keys(FeatureFlags_1.default).find(function (key) {
2748
+ return key === flagName;
2749
+ })) {
2750
+ return FeatureFlags_1.default[flagName];
2751
+ } // fall back to false
2752
+
2753
+
2754
+ return false;
2755
+ };
2756
+
2757
+ exports.getFeatureFlag = getFeatureFlag;
2758
+
2759
+ /***/ }),
2760
+ /* 69 */
1740
2761
  /***/ (function(module, exports) {
1741
2762
 
1742
- module.exports = require("@splunk/visualization-color-palettes/editors/PresetPalettes");
2763
+ module.exports = require("@splunk/visualization-context/FeatureFlags");
1743
2764
 
1744
2765
  /***/ }),
1745
- /* 62 */,
1746
- /* 63 */,
1747
- /* 64 */,
1748
- /* 65 */,
1749
- /* 66 */,
1750
- /* 67 */,
1751
- /* 68 */,
1752
- /* 69 */,
1753
2766
  /* 70 */,
1754
2767
  /* 71 */,
1755
2768
  /* 72 */,
@@ -1761,9 +2774,19 @@ module.exports = require("@splunk/visualization-color-palettes/editors/PresetPal
1761
2774
  /* 78 */,
1762
2775
  /* 79 */,
1763
2776
  /* 80 */,
1764
- /* 81 */,
2777
+ /* 81 */
2778
+ /***/ (function(module, exports) {
2779
+
2780
+ module.exports = require("@babel/runtime/helpers/taggedTemplateLiteral");
2781
+
2782
+ /***/ }),
1765
2783
  /* 82 */,
1766
- /* 83 */,
2784
+ /* 83 */
2785
+ /***/ (function(module, exports) {
2786
+
2787
+ module.exports = require("@splunk/visualization-color-palettes/editors/PresetPalettes");
2788
+
2789
+ /***/ }),
1767
2790
  /* 84 */,
1768
2791
  /* 85 */,
1769
2792
  /* 86 */,
@@ -1794,7 +2817,30 @@ module.exports = require("@splunk/visualization-color-palettes/editors/PresetPal
1794
2817
  /* 111 */,
1795
2818
  /* 112 */,
1796
2819
  /* 113 */,
1797
- /* 114 */
2820
+ /* 114 */,
2821
+ /* 115 */,
2822
+ /* 116 */,
2823
+ /* 117 */,
2824
+ /* 118 */,
2825
+ /* 119 */,
2826
+ /* 120 */,
2827
+ /* 121 */,
2828
+ /* 122 */,
2829
+ /* 123 */,
2830
+ /* 124 */,
2831
+ /* 125 */,
2832
+ /* 126 */,
2833
+ /* 127 */,
2834
+ /* 128 */,
2835
+ /* 129 */,
2836
+ /* 130 */,
2837
+ /* 131 */,
2838
+ /* 132 */,
2839
+ /* 133 */,
2840
+ /* 134 */,
2841
+ /* 135 */,
2842
+ /* 136 */,
2843
+ /* 137 */
1798
2844
  /***/ (function(module, exports, __webpack_require__) {
1799
2845
 
1800
2846
  "use strict";
@@ -1807,7 +2853,7 @@ exports.getDynamicFillColorEditor = void 0;
1807
2853
 
1808
2854
  var i18n_1 = __webpack_require__(2);
1809
2855
 
1810
- var configUtils_1 = __webpack_require__(22);
2856
+ var configUtils_1 = __webpack_require__(29);
1811
2857
 
1812
2858
  var getDynamicFillColorEditor = function getDynamicFillColorEditor(_ref) {
1813
2859
  var defaultContext = _ref.defaultContext,
@@ -1849,7 +2895,7 @@ var getDynamicFillColorEditor = function getDynamicFillColorEditor(_ref) {
1849
2895
  exports.getDynamicFillColorEditor = getDynamicFillColorEditor;
1850
2896
 
1851
2897
  /***/ }),
1852
- /* 115 */
2898
+ /* 138 */
1853
2899
  /***/ (function(module, exports, __webpack_require__) {
1854
2900
 
1855
2901
  "use strict";
@@ -1862,7 +2908,7 @@ exports.getDynamicStrokeColorEditor = void 0;
1862
2908
 
1863
2909
  var i18n_1 = __webpack_require__(2);
1864
2910
 
1865
- var configUtils_1 = __webpack_require__(22);
2911
+ var configUtils_1 = __webpack_require__(29);
1866
2912
 
1867
2913
  var getDynamicStrokeColorEditor = function getDynamicStrokeColorEditor(_ref) {
1868
2914
  var defaultContext = _ref.defaultContext,
@@ -1904,7 +2950,7 @@ var getDynamicStrokeColorEditor = function getDynamicStrokeColorEditor(_ref) {
1904
2950
  exports.getDynamicStrokeColorEditor = getDynamicStrokeColorEditor;
1905
2951
 
1906
2952
  /***/ }),
1907
- /* 116 */
2953
+ /* 139 */
1908
2954
  /***/ (function(module, exports, __webpack_require__) {
1909
2955
 
1910
2956
  "use strict";
@@ -1916,7 +2962,7 @@ Object.defineProperty(exports, "__esModule", {
1916
2962
 
1917
2963
  var i18n_1 = __webpack_require__(2);
1918
2964
 
1919
- var configUtils_1 = __webpack_require__(22);
2965
+ var configUtils_1 = __webpack_require__(29);
1920
2966
 
1921
2967
  var StaticFillColorEditor = {
1922
2968
  label: (0, i18n_1._)('Fill'),
@@ -1930,7 +2976,7 @@ var StaticFillColorEditor = {
1930
2976
  exports.default = StaticFillColorEditor;
1931
2977
 
1932
2978
  /***/ }),
1933
- /* 117 */
2979
+ /* 140 */
1934
2980
  /***/ (function(module, exports, __webpack_require__) {
1935
2981
 
1936
2982
  "use strict";
@@ -1942,7 +2988,7 @@ Object.defineProperty(exports, "__esModule", {
1942
2988
 
1943
2989
  var i18n_1 = __webpack_require__(2);
1944
2990
 
1945
- var configUtils_1 = __webpack_require__(22);
2991
+ var configUtils_1 = __webpack_require__(29);
1946
2992
 
1947
2993
  var StaticStrokeColorEditor = {
1948
2994
  label: (0, i18n_1._)('Stroke'),
@@ -1956,13 +3002,13 @@ var StaticStrokeColorEditor = {
1956
3002
  exports.default = StaticStrokeColorEditor;
1957
3003
 
1958
3004
  /***/ }),
1959
- /* 118 */
3005
+ /* 141 */
1960
3006
  /***/ (function(module, exports, __webpack_require__) {
1961
3007
 
1962
3008
  "use strict";
1963
3009
 
1964
3010
 
1965
- var _taggedTemplateLiteral = __webpack_require__(59);
3011
+ var _taggedTemplateLiteral = __webpack_require__(81);
1966
3012
 
1967
3013
  var _templateObject;
1968
3014
 
@@ -1975,11 +3021,11 @@ var lodash_1 = __webpack_require__(3);
1975
3021
 
1976
3022
  var styled_components_1 = __webpack_require__(4);
1977
3023
 
1978
- var pick_1 = __webpack_require__(23);
3024
+ var pick_1 = __webpack_require__(30);
1979
3025
 
1980
- var variables_1 = __webpack_require__(11);
3026
+ var variables_1 = __webpack_require__(13);
1981
3027
 
1982
- var propUtils_1 = __webpack_require__(29); // map for new options names to old option names
3028
+ var propUtils_1 = __webpack_require__(36); // map for new options names to old option names
1983
3029
 
1984
3030
 
1985
3031
  var shapeOptionsMapping = {
@@ -2033,29 +3079,6 @@ var getStyledShape = function getStyledShape(shape) {
2033
3079
  exports.getStyledShape = getStyledShape;
2034
3080
 
2035
3081
  /***/ }),
2036
- /* 119 */,
2037
- /* 120 */,
2038
- /* 121 */,
2039
- /* 122 */,
2040
- /* 123 */,
2041
- /* 124 */,
2042
- /* 125 */,
2043
- /* 126 */,
2044
- /* 127 */,
2045
- /* 128 */,
2046
- /* 129 */,
2047
- /* 130 */,
2048
- /* 131 */,
2049
- /* 132 */,
2050
- /* 133 */,
2051
- /* 134 */,
2052
- /* 135 */,
2053
- /* 136 */,
2054
- /* 137 */,
2055
- /* 138 */,
2056
- /* 139 */,
2057
- /* 140 */,
2058
- /* 141 */,
2059
3082
  /* 142 */,
2060
3083
  /* 143 */,
2061
3084
  /* 144 */,
@@ -2063,7 +3086,29 @@ exports.getStyledShape = getStyledShape;
2063
3086
  /* 146 */,
2064
3087
  /* 147 */,
2065
3088
  /* 148 */,
2066
- /* 149 */
3089
+ /* 149 */,
3090
+ /* 150 */,
3091
+ /* 151 */,
3092
+ /* 152 */,
3093
+ /* 153 */,
3094
+ /* 154 */,
3095
+ /* 155 */,
3096
+ /* 156 */,
3097
+ /* 157 */,
3098
+ /* 158 */,
3099
+ /* 159 */,
3100
+ /* 160 */,
3101
+ /* 161 */,
3102
+ /* 162 */,
3103
+ /* 163 */,
3104
+ /* 164 */,
3105
+ /* 165 */,
3106
+ /* 166 */,
3107
+ /* 167 */,
3108
+ /* 168 */,
3109
+ /* 169 */,
3110
+ /* 170 */,
3111
+ /* 171 */
2067
3112
  /***/ (function(module, exports, __webpack_require__) {
2068
3113
 
2069
3114
  "use strict";
@@ -2087,21 +3132,21 @@ Object.defineProperty(exports, "__esModule", {
2087
3132
  });
2088
3133
  exports.config = exports.themes = void 0;
2089
3134
 
2090
- var React = __webpack_require__(1);
3135
+ var React = __webpack_require__(0);
2091
3136
 
2092
3137
  var lodash_1 = __webpack_require__(3);
2093
3138
 
2094
3139
  var styled_components_1 = __webpack_require__(4);
2095
3140
 
2096
- var T = __webpack_require__(0);
3141
+ var T = __webpack_require__(1);
2097
3142
 
2098
- var config_1 = __webpack_require__(202);
3143
+ var config_1 = __webpack_require__(224);
2099
3144
 
2100
3145
  exports.config = config_1.default;
2101
3146
 
2102
- var withDashboardViz_1 = __webpack_require__(37);
3147
+ var withDashboardViz_1 = __webpack_require__(56);
2103
3148
 
2104
- var shapeUtils_1 = __webpack_require__(118);
3149
+ var shapeUtils_1 = __webpack_require__(141);
2105
3150
 
2106
3151
  var validOptions = Object.keys(config_1.default.optionsSchema);
2107
3152
  var SVGContainer = styled_components_1.default.svg.withConfig({
@@ -2170,28 +3215,6 @@ exports.themes = themes;
2170
3215
  exports.default = Ellipse;
2171
3216
 
2172
3217
  /***/ }),
2173
- /* 150 */,
2174
- /* 151 */,
2175
- /* 152 */,
2176
- /* 153 */,
2177
- /* 154 */,
2178
- /* 155 */,
2179
- /* 156 */,
2180
- /* 157 */,
2181
- /* 158 */,
2182
- /* 159 */,
2183
- /* 160 */,
2184
- /* 161 */,
2185
- /* 162 */,
2186
- /* 163 */,
2187
- /* 164 */,
2188
- /* 165 */,
2189
- /* 166 */,
2190
- /* 167 */,
2191
- /* 168 */,
2192
- /* 169 */,
2193
- /* 170 */,
2194
- /* 171 */,
2195
3218
  /* 172 */,
2196
3219
  /* 173 */,
2197
3220
  /* 174 */,
@@ -2221,7 +3244,29 @@ exports.default = Ellipse;
2221
3244
  /* 198 */,
2222
3245
  /* 199 */,
2223
3246
  /* 200 */,
2224
- /* 201 */
3247
+ /* 201 */,
3248
+ /* 202 */,
3249
+ /* 203 */,
3250
+ /* 204 */,
3251
+ /* 205 */,
3252
+ /* 206 */,
3253
+ /* 207 */,
3254
+ /* 208 */,
3255
+ /* 209 */,
3256
+ /* 210 */,
3257
+ /* 211 */,
3258
+ /* 212 */,
3259
+ /* 213 */,
3260
+ /* 214 */,
3261
+ /* 215 */,
3262
+ /* 216 */,
3263
+ /* 217 */,
3264
+ /* 218 */,
3265
+ /* 219 */,
3266
+ /* 220 */,
3267
+ /* 221 */,
3268
+ /* 222 */,
3269
+ /* 223 */
2225
3270
  /***/ (function(module, exports, __webpack_require__) {
2226
3271
 
2227
3272
  "use strict";
@@ -2257,9 +3302,9 @@ Object.defineProperty(exports, "__esModule", {
2257
3302
  });
2258
3303
  exports.default = void 0;
2259
3304
 
2260
- __exportStar(__webpack_require__(149), exports);
3305
+ __exportStar(__webpack_require__(171), exports);
2261
3306
 
2262
- var Ellipse_1 = __webpack_require__(149);
3307
+ var Ellipse_1 = __webpack_require__(171);
2263
3308
 
2264
3309
  Object.defineProperty(exports, "default", {
2265
3310
  enumerable: true,
@@ -2269,7 +3314,7 @@ Object.defineProperty(exports, "default", {
2269
3314
  });
2270
3315
 
2271
3316
  /***/ }),
2272
- /* 202 */
3317
+ /* 224 */
2273
3318
  /***/ (function(module, exports, __webpack_require__) {
2274
3319
 
2275
3320
  "use strict";
@@ -2281,25 +3326,25 @@ Object.defineProperty(exports, "__esModule", {
2281
3326
 
2282
3327
  var i18n_1 = __webpack_require__(2);
2283
3328
 
2284
- var PresetPalettes_1 = __webpack_require__(61);
3329
+ var PresetPalettes_1 = __webpack_require__(83);
2285
3330
 
2286
- var pick_1 = __webpack_require__(23);
3331
+ var pick_1 = __webpack_require__(30);
2287
3332
 
2288
- var variables_1 = __webpack_require__(11);
3333
+ var variables_1 = __webpack_require__(13);
2289
3334
 
2290
3335
  var VizBehavior_1 = __webpack_require__(6);
2291
3336
 
2292
- var VizCategory_1 = __webpack_require__(36);
3337
+ var VizCategory_1 = __webpack_require__(22);
2293
3338
 
2294
- var configUtils_1 = __webpack_require__(20);
3339
+ var configUtils_1 = __webpack_require__(27);
2295
3340
 
2296
- var DynamicFillColorEditor_1 = __webpack_require__(114);
3341
+ var DynamicFillColorEditor_1 = __webpack_require__(137);
2297
3342
 
2298
- var DynamicStrokeColorEditor_1 = __webpack_require__(115);
3343
+ var DynamicStrokeColorEditor_1 = __webpack_require__(138);
2299
3344
 
2300
- var StaticFillColorEditor_1 = __webpack_require__(116);
3345
+ var StaticFillColorEditor_1 = __webpack_require__(139);
2301
3346
 
2302
- var StaticStrokeColorEditor_1 = __webpack_require__(117);
3347
+ var StaticStrokeColorEditor_1 = __webpack_require__(140);
2303
3348
 
2304
3349
  var dataContract = {
2305
3350
  requiredDataSources: [],