@vizzly/dashboard 0.14.4-dev-dacb7b6ee19300aa636d654c99f13d6ac43da830 → 0.14.4-dev-470d6f9c95d1b6422dbe1be22378ce12cdf6580a

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 (44) hide show
  1. package/dist/charts/src/BubbleChart/BubbleChart.d.ts +5 -0
  2. package/dist/charts/src/BubbleChart/VizzlyBubbleChart.d.ts +3 -0
  3. package/dist/charts/src/BubbleChart/index.d.ts +1 -0
  4. package/dist/charts/src/BubbleChart/types.d.ts +32 -0
  5. package/dist/charts/src/XYChart/types.d.ts +2 -0
  6. package/dist/dashboard/src/contexts/GlobalProvider/useGlobalProvider.d.ts +6 -6
  7. package/dist/dashboard.cjs.development.js +747 -95
  8. package/dist/dashboard.cjs.production.min.js +1 -1
  9. package/dist/dashboard.esm.js +747 -95
  10. package/dist/results-driver/src/driver/VizzlyQuery/BubbleChart/toQueries.d.ts +10 -0
  11. package/dist/services/src/Services/View.d.ts +5 -1
  12. package/dist/shared-logic/src/BubbleChart/adjustTicks.d.ts +3 -0
  13. package/dist/shared-logic/src/BubbleChart/attributesSchema.d.ts +3 -0
  14. package/dist/shared-logic/src/BubbleChart/buildBubbleChartRepresentation.d.ts +39 -0
  15. package/dist/shared-logic/src/BubbleChart/buildTrendAndForecast.d.ts +25 -0
  16. package/dist/shared-logic/src/BubbleChart/constants.d.ts +3 -0
  17. package/dist/shared-logic/src/BubbleChart/getAxisFormattingFunction.d.ts +13 -0
  18. package/dist/shared-logic/src/BubbleChart/getConditionalFormatting.d.ts +7 -0
  19. package/dist/shared-logic/src/BubbleChart/getGoalLines.d.ts +8 -0
  20. package/dist/shared-logic/src/BubbleChart/getMinAndMax.d.ts +15 -0
  21. package/dist/shared-logic/src/BubbleChart/getScaleAndTicks.d.ts +42 -0
  22. package/dist/shared-logic/src/BubbleChart/getStyleDefinition.d.ts +8 -0
  23. package/dist/shared-logic/src/BubbleChart/getTrendsAndForecastsData.d.ts +41 -0
  24. package/dist/shared-logic/src/BubbleChart/index.d.ts +4 -0
  25. package/dist/shared-logic/src/BubbleChart/setAttributes.d.ts +4 -0
  26. package/dist/shared-logic/src/BubbleChart/types.d.ts +74 -0
  27. package/dist/shared-logic/src/Component/setAttributes.d.ts +1 -1
  28. package/dist/shared-logic/src/Component/types.d.ts +20 -3
  29. package/dist/shared-logic/src/ComponentInterface/types/namespaces.types.d.ts +8 -1
  30. package/dist/shared-logic/src/DataPanelConfig/types.d.ts +1 -1
  31. package/dist/shared-logic/src/DataSet/DataSet.d.ts +1 -1
  32. package/dist/shared-logic/src/getComponentInterface.d.ts +1 -0
  33. package/dist/shared-ui/src/api/useQueryEffect.d.ts +1 -1
  34. package/dist/shared-ui/src/components/BubbleChart/BubbleChart.d.ts +3 -0
  35. package/dist/shared-ui/src/components/BubbleChart/BubbleChartView.d.ts +16 -0
  36. package/dist/shared-ui/src/components/BubbleChart/index.d.ts +2 -0
  37. package/dist/shared-ui/src/components/Component/types.d.ts +3 -0
  38. package/dist/shared-ui/src/components/Icons/ComponentIcons.d.ts +1 -0
  39. package/dist/shared-ui/src/components/LineChart/LineChartView.d.ts +1 -1
  40. package/dist/shared-ui/src/components/MercatorMap/View.d.ts +1 -1
  41. package/dist/shared-ui/src/components/Parameters/useParameters.d.ts +1 -1
  42. package/dist/shared-ui/src/library/DataPanel/FieldCollectorInput.d.ts +1 -1
  43. package/dist/shared-ui/src/library/DataPanel/MeasuresInput.d.ts +1 -1
  44. package/package.json +1 -1
@@ -57,6 +57,7 @@ var windowSize = require('@react-hook/window-size');
57
57
  var copy = _interopDefault(require('copy-to-clipboard'));
58
58
  var html2canvas = _interopDefault(require('html2canvas'));
59
59
  var jsPDF = _interopDefault(require('jspdf'));
60
+ var BubbleChart$3 = require('./charts/src/BubbleChart');
60
61
  var clipPath = require('@visx/clip-path');
61
62
  var event = require('@visx/event');
62
63
  var d3Array = require('@visx/vendor/d3-array');
@@ -8171,7 +8172,7 @@ var RichText = function RichText(config) {
8171
8172
  };
8172
8173
  };
8173
8174
 
8174
- var componentTypes = ['areaChart', 'barChart', 'basicTable', 'comboChart', 'custom', 'dataTable', 'funnelChart', 'horizontalBarChart', 'lineChart', 'lineChartV2', 'barChartV2', 'mercatorMap', 'pieChart', 'progress', 'richText', 'scatterChart', 'singleStat', 'waterfallChart'];
8175
+ var componentTypes = ['areaChart', 'barChart', 'basicTable', 'bubbleChart', 'comboChart', 'custom', 'dataTable', 'funnelChart', 'horizontalBarChart', 'lineChart', 'lineChartV2', 'barChartV2', 'mercatorMap', 'pieChart', 'progress', 'richText', 'scatterChart', 'singleStat', 'waterfallChart'];
8175
8176
  /** @deprecated */
8176
8177
 
8177
8178
  var ProgressType = /*#__PURE__*/function (ProgressType) {
@@ -8939,6 +8940,405 @@ function isStatsLabels(panel) {
8939
8940
  }
8940
8941
 
8941
8942
  var attributesSchema$e = function attributesSchema(config) {
8943
+ return Joi.object(_extends({}, baseAttributesSchema(config.attributesSchemaOptions), {
8944
+ xMeasure: measureSchema(config.queryEngineConfig.supportedAggregates, config.attributesSchemaOptions).allow(null),
8945
+ yMeasure: measureSchema(config.queryEngineConfig.supportedAggregates, config.attributesSchemaOptions).allow(null),
8946
+ zMeasure: measureSchema(config.queryEngineConfig.supportedAggregates, config.attributesSchemaOptions).allow(null),
8947
+ dimension: dimensionSchema(config.queryEngineConfig.supportedTimeTruncFunctions, config.attributesSchemaOptions),
8948
+ order: Joi.array().items(orderSchema(config.queryEngineConfig)),
8949
+ limit: queryAttributesLimit(),
8950
+ legend: Joi.valid(true, false),
8951
+ offset: Joi.number().min(0),
8952
+ filter: queryAttributesFilter(config.queryEngineConfig),
8953
+ type: Joi.valid('bubbleChart').required(),
8954
+ timeDimension: Joi.valid(null),
8955
+ xAxisPrefix: Joi.string().allow(''),
8956
+ yAxisPrefix: Joi.string().allow(''),
8957
+ xAxisPostfix: Joi.string().allow(''),
8958
+ yAxisPostfix: Joi.string().allow(''),
8959
+ yAxisFormat: Joi.alternatives(Joi.string(), Joi.valid(null)),
8960
+ xAxisFormat: Joi.alternatives(Joi.string(), Joi.valid(null)),
8961
+ approxYAxisLabelCount: approxAxisLabelCountSchema,
8962
+ approxXAxisLabelCount: approxAxisLabelCountSchema,
8963
+ goalLines: goalLinesSchema(),
8964
+ axisTitles: axisTitleSchema(),
8965
+ tags: tagsSchema()
8966
+ }));
8967
+ };
8968
+
8969
+ var setAttributes$d = (function (config) {
8970
+ return function (bubbleChart, partial) {
8971
+ var newAttributes = setAttributes(bubbleChart, partial, attributesSchema$e(config));
8972
+ console.log(newAttributes, 'HERE');
8973
+ var allowedOrderSpec = [];
8974
+ if (newAttributes.xMeasure) {
8975
+ allowedOrderSpec.push(newAttributes.xMeasure);
8976
+ }
8977
+ if (newAttributes.yMeasure) {
8978
+ allowedOrderSpec.push(newAttributes.yMeasure);
8979
+ }
8980
+ if (newAttributes.zMeasure) {
8981
+ allowedOrderSpec.push(newAttributes.zMeasure);
8982
+ }
8983
+
8984
+ // Add dimension fields as valid to keep in order
8985
+ newAttributes.dimension.forEach(function (dimension) {
8986
+ allowedOrderSpec.push({
8987
+ field: dimension.field,
8988
+ "function": dimension["function"]
8989
+ });
8990
+ });
8991
+ newAttributes = trimFieldsInOrder(newAttributes, allowedOrderSpec);
8992
+ return newAttributes;
8993
+ };
8994
+ });
8995
+
8996
+ var CONSTANTS$g = {
8997
+ title: 'Bubble chart',
8998
+ description: 'Displays data points on a Cartesian plane, with a third metric corresponding to bubble size.',
8999
+ namespace: 'bubble_chart',
9000
+ data_panel: {
9001
+ data_set: {
9002
+ type: 'dataSet',
9003
+ title: 'Data set',
9004
+ description: 'What data do you want to use in this bubble chart?'
9005
+ },
9006
+ views: {
9007
+ type: 'views',
9008
+ title: 'View',
9009
+ description: ''
9010
+ },
9011
+ labelled_metrics: {
9012
+ type: 'labelledMetrics',
9013
+ title: 'Metric - Y Axis',
9014
+ description: '',
9015
+ subSectionDefinition: {
9016
+ xAxis: {
9017
+ type: 'metrics',
9018
+ title: 'X axis',
9019
+ namespace: 'metrics.xAxis'
9020
+ },
9021
+ yAxis: {
9022
+ type: 'metrics',
9023
+ title: 'Y axis',
9024
+ namespace: 'metrics.yAxis'
9025
+ },
9026
+ zAxis: {
9027
+ type: 'metrics',
9028
+ title: 'Metric - Bubble Size',
9029
+ namespace: 'metrics.zAxis'
9030
+ }
9031
+ }
9032
+ },
9033
+ field_grouping: {
9034
+ type: 'fieldCollector',
9035
+ title: 'Grouping',
9036
+ description: 'What do you want each bubble to represent?',
9037
+ callToAction: 'Add comparison'
9038
+ },
9039
+ filter: {
9040
+ type: 'filter',
9041
+ title: 'Filters',
9042
+ description: 'Only include the information you want in this bubble chart.'
9043
+ },
9044
+ custom_metrics: {
9045
+ type: 'customMetrics',
9046
+ title: 'Custom metrics',
9047
+ description: 'Build your own metrics, such as a percentage.'
9048
+ },
9049
+ limit: {
9050
+ type: 'limit',
9051
+ title: 'Limit',
9052
+ description: 'Limit the number of data points shown on this bubble chart.'
9053
+ }
9054
+ },
9055
+ format_panel: {
9056
+ heading: {
9057
+ type: 'heading',
9058
+ title: 'Heading',
9059
+ description: '',
9060
+ subSectionDefinition: {
9061
+ title: {
9062
+ type: 'title',
9063
+ title: 'Title',
9064
+ description: '',
9065
+ namespace: 'title'
9066
+ },
9067
+ subject: {
9068
+ title: 'Subject',
9069
+ type: 'subject',
9070
+ description: '',
9071
+ namespace: 'subject'
9072
+ }
9073
+ }
9074
+ },
9075
+ chart_styles: {
9076
+ type: 'chartStyles',
9077
+ title: 'Chart Settings',
9078
+ description: '',
9079
+ subSectionDefinition: {
9080
+ legend: {
9081
+ type: 'legend',
9082
+ title: 'Show Legend',
9083
+ description: '',
9084
+ namespace: 'legend'
9085
+ }
9086
+ }
9087
+ },
9088
+ axis_labels: {
9089
+ type: 'axisLabels',
9090
+ title: 'Axis Preferences',
9091
+ description: '',
9092
+ subSectionDefinition: {
9093
+ x: {
9094
+ title: 'X Axis',
9095
+ description: '',
9096
+ namespace: 'x'
9097
+ },
9098
+ 'x.prefix': {
9099
+ title: 'Prefix',
9100
+ description: '',
9101
+ namespace: 'x.prefix'
9102
+ },
9103
+ 'x.postfix': {
9104
+ title: 'Postfix',
9105
+ description: '',
9106
+ namespace: 'x.postfix'
9107
+ },
9108
+ 'x.format': {
9109
+ title: 'Format',
9110
+ description: '',
9111
+ namespace: 'x.format'
9112
+ },
9113
+ 'x.count': {
9114
+ title: 'Label count',
9115
+ description: '',
9116
+ namespace: 'x.count'
9117
+ },
9118
+ 'x.axis_title': {
9119
+ title: 'Title',
9120
+ description: '',
9121
+ namespace: 'x.axis_title'
9122
+ },
9123
+ y: {
9124
+ title: 'Y Axis',
9125
+ description: '',
9126
+ namespace: 'y'
9127
+ },
9128
+ 'y.prefix': {
9129
+ title: 'Prefix',
9130
+ description: '',
9131
+ namespace: 'y.prefix'
9132
+ },
9133
+ 'y.postfix': {
9134
+ title: 'Postfix',
9135
+ description: '',
9136
+ namespace: 'y.postfix'
9137
+ },
9138
+ 'y.format': {
9139
+ title: 'Format',
9140
+ description: '',
9141
+ namespace: 'y.format'
9142
+ },
9143
+ 'y.count': {
9144
+ title: 'Label count',
9145
+ description: '',
9146
+ namespace: 'y.count'
9147
+ },
9148
+ 'y.axis_title': {
9149
+ title: 'Title',
9150
+ description: '',
9151
+ namespace: 'y.axis_title'
9152
+ },
9153
+ z: {
9154
+ title: 'Metric - Bubble Size',
9155
+ description: '',
9156
+ namespace: 'z'
9157
+ },
9158
+ 'z.prefix': {
9159
+ title: 'Prefix',
9160
+ description: '',
9161
+ namespace: 'z.prefix'
9162
+ },
9163
+ 'z.postfix': {
9164
+ title: 'Postfix',
9165
+ description: '',
9166
+ namespace: 'z.postfix'
9167
+ },
9168
+ 'z.format': {
9169
+ title: 'Format',
9170
+ description: '',
9171
+ namespace: 'z.format'
9172
+ },
9173
+ 'z.count': {
9174
+ title: 'Label count',
9175
+ description: '',
9176
+ namespace: 'z.count'
9177
+ },
9178
+ 'z.axis_title': {
9179
+ title: 'Title',
9180
+ description: '',
9181
+ namespace: 'z.axis_title'
9182
+ }
9183
+ }
9184
+ },
9185
+ goal_line: {
9186
+ type: 'goalLine',
9187
+ title: 'Goal Lines',
9188
+ description: ''
9189
+ }
9190
+ }
9191
+ };
9192
+
9193
+ var BubbleChart = function BubbleChart(config) {
9194
+ return {
9195
+ title: CONSTANTS$g.title,
9196
+ description: CONSTANTS$g.description,
9197
+ servicesClass: 'BubbleChart',
9198
+ namespace: CONSTANTS$g.namespace,
9199
+ dump: function dump(hydrated) {
9200
+ return hydrated;
9201
+ },
9202
+ load: function load(dumped) {
9203
+ var _dumped$tags;
9204
+ return {
9205
+ type: dumped.type,
9206
+ xMeasure: upcastMeasure(dumped.xMeasure ? [dumped.xMeasure] : [])[0] || null,
9207
+ yMeasure: upcastMeasure(dumped.yMeasure ? [dumped.yMeasure] : [])[0] || null,
9208
+ zMeasure: upcastMeasure(dumped.zMeasure ? [dumped.zMeasure] : [])[0] || null,
9209
+ dimension: upcastStringDimensionsToObject(dumped.dimension),
9210
+ viewId: upcastViewId(dumped.viewId),
9211
+ timeDimension: dumped.timeDimension,
9212
+ displayTitle: dumped.displayTitle,
9213
+ displaySubject: dumped.displaySubject,
9214
+ protectedByOrganisation: dumped.protectedByOrganisation,
9215
+ filter: upcastFilter(dumped.filter),
9216
+ order: upcastOrder(dumped.order, dumped.timeDimension),
9217
+ dataSetId: dumped.dataSetId,
9218
+ limit: dumped.limit,
9219
+ legend: dumped.legend,
9220
+ xAxisFormat: dumped.xAxisFormat,
9221
+ yAxisFormat: dumped.yAxisFormat,
9222
+ yAxisPostfix: dumped.yAxisPostfix,
9223
+ yAxisPrefix: dumped.yAxisPrefix,
9224
+ xAxisPostfix: dumped.xAxisPostfix,
9225
+ xAxisPrefix: dumped.xAxisPrefix,
9226
+ approxXAxisLabelCount: upcastAxisLabel(dumped.approxXAxisLabelCount),
9227
+ approxYAxisLabelCount: upcastAxisLabel(dumped.approxYAxisLabelCount),
9228
+ goalLines: dumped.goalLines,
9229
+ axisTitles: dumped.axisTitles,
9230
+ tags: (_dumped$tags = dumped.tags) != null ? _dumped$tags : []
9231
+ };
9232
+ },
9233
+ setAttributes: setAttributes$d(config),
9234
+ validate: function validate(attrs, dataSets) {
9235
+ return validateView(attrs, dataSets, config.queryEngineConfig);
9236
+ },
9237
+ init: function init(dataSetId, overrides) {
9238
+ return _extends({
9239
+ type: 'bubbleChart',
9240
+ xMeasure: null,
9241
+ yMeasure: null,
9242
+ zMeasure: null,
9243
+ dimension: [],
9244
+ timeDimension: null,
9245
+ displayTitle: '',
9246
+ displaySubject: '',
9247
+ protectedByOrganisation: undefined,
9248
+ viewId: upcastViewId(overrides == null ? void 0 : overrides.viewId),
9249
+ filter: [],
9250
+ order: [],
9251
+ dataSetId: dataSetId,
9252
+ limit: 5000,
9253
+ legend: true,
9254
+ xAxisPostfix: '',
9255
+ xAxisPrefix: '',
9256
+ yAxisPostfix: '',
9257
+ yAxisPrefix: '',
9258
+ yAxisFormat: null,
9259
+ xAxisFormat: null,
9260
+ approxXAxisLabelCount: 'auto',
9261
+ approxYAxisLabelCount: 'auto',
9262
+ goalLines: undefined,
9263
+ axisTitles: undefined,
9264
+ tags: []
9265
+ }, overrides);
9266
+ },
9267
+ createFeedback: createFeedback,
9268
+ schema: attributesSchema$e(config),
9269
+ removeField: function removeField(attrs, fieldId) {
9270
+ return removeField$1(attrs, fieldId, config.queryEngineConfig);
9271
+ },
9272
+ isRunnable: function isRunnable(hydrated) {
9273
+ return !!hydrated.xMeasure && !!hydrated.yMeasure && !!hydrated.zMeasure && hydrated.dimension.length > 0;
9274
+ },
9275
+ autoGenerate: function autoGenerate(dataSet) {
9276
+ var _DataSet$buildQueryAt = buildQueryAttributes(dataSet, config.queryEngineConfig, 'bubbleChart'),
9277
+ measure = _DataSet$buildQueryAt.measure,
9278
+ dimension = _DataSet$buildQueryAt.dimension;
9279
+ return this.init(dataSet.id, {
9280
+ xMeasure: measure[0],
9281
+ yMeasure: measure[1],
9282
+ dimension: dimension
9283
+ });
9284
+ },
9285
+ dataPanelConfig: function dataPanelConfig() {
9286
+ var _CONSTANTS$data_panel, _CONSTANTS$data_panel2, _CONSTANTS$data_panel3;
9287
+ return [namespace(CONSTANTS$g, 'data_set'), namespace(CONSTANTS$g, 'views'), _extends({}, namespace(CONSTANTS$g, 'labelled_metrics'), {
9288
+ subSection: [_extends({}, (_CONSTANTS$data_panel = CONSTANTS$g.data_panel.labelled_metrics) == null ? void 0 : _CONSTANTS$data_panel.subSectionDefinition['xAxis'], {
9289
+ propKey: 'xMeasure',
9290
+ allowsMultiple: false
9291
+ }), _extends({}, (_CONSTANTS$data_panel2 = CONSTANTS$g.data_panel.labelled_metrics) == null ? void 0 : _CONSTANTS$data_panel2.subSectionDefinition['yAxis'], {
9292
+ propKey: 'yMeasure',
9293
+ allowsMultiple: false
9294
+ }), _extends({}, (_CONSTANTS$data_panel3 = CONSTANTS$g.data_panel.labelled_metrics) == null ? void 0 : _CONSTANTS$data_panel3.subSectionDefinition['zAxis'], {
9295
+ propKey: 'zMeasure',
9296
+ allowsMultiple: false
9297
+ })]
9298
+ }), _extends({}, namespace(CONSTANTS$g, 'field_grouping'), {
9299
+ fieldFilterOptions: {
9300
+ onlyDimensions: true,
9301
+ onlyFieldTypes: ['boolean', 'number', 'string'],
9302
+ removePercentage: true,
9303
+ removeSimpleMaths: true,
9304
+ removeAggregateMaths: true
9305
+ },
9306
+ maxAllowed: 1,
9307
+ preSetPartialAttributes: function preSetPartialAttributes(values) {
9308
+ return {
9309
+ dimension: values
9310
+ };
9311
+ },
9312
+ getValues: function getValues(attrs) {
9313
+ return attrs.dimension;
9314
+ },
9315
+ testId: 'add-dimension'
9316
+ }), namespace(CONSTANTS$g, 'filter'), namespace(CONSTANTS$g, 'custom_metrics'), namespace(CONSTANTS$g, 'limit')];
9317
+ },
9318
+ formatPanelConfig: function formatPanelConfig() {
9319
+ var _CONSTANTS$format_pan;
9320
+ return [headingConstant(CONSTANTS$g), _extends({}, namespace(CONSTANTS$g, 'chart_styles'), {
9321
+ subSection: [(_CONSTANTS$format_pan = CONSTANTS$g.format_panel.chart_styles) == null ? void 0 : _CONSTANTS$format_pan.subSectionDefinition.legend]
9322
+ }), axisLabelsConstants(CONSTANTS$g), namespace(CONSTANTS$g, 'goal_line')];
9323
+ },
9324
+ supportedCustomFields: {
9325
+ percentages: true,
9326
+ dateCalculations: true,
9327
+ simpleMaths: true,
9328
+ rules: true,
9329
+ aggregateMaths: true,
9330
+ roundedNumbers: true,
9331
+ conditional: true,
9332
+ calculatedField: [AcceptedTypes.Maths, AcceptedTypes.IfStatement]
9333
+ },
9334
+ supportedFeatures: {
9335
+ parameters: false,
9336
+ colorGradient: false
9337
+ }
9338
+ };
9339
+ };
9340
+
9341
+ var attributesSchema$f = function attributesSchema(config) {
8942
9342
  return Joi.object(_extends({}, baseAttributesSchema(config.attributesSchemaOptions), timeDimensionQuerySchema(config.queryEngineConfig, config.attributesSchemaOptions), {
8943
9343
  stacked: Joi.valid(true, false, '100%'),
8944
9344
  legend: Joi.valid(true, false),
@@ -8953,15 +9353,15 @@ var attributesSchema$e = function attributesSchema(config) {
8953
9353
  }));
8954
9354
  };
8955
9355
 
8956
- var setAttributes$d = (function (config) {
9356
+ var setAttributes$e = (function (config) {
8957
9357
  return function (barChart, partial) {
8958
- var newAttributes = setAttributes(barChart, partial, attributesSchema$e(config));
9358
+ var newAttributes = setAttributes(barChart, partial, attributesSchema$f(config));
8959
9359
  newAttributes = removeUnusedOrderFieldsFromTimeSeriesComponent(newAttributes);
8960
9360
  return newAttributes;
8961
9361
  };
8962
9362
  });
8963
9363
 
8964
- var CONSTANTS$g = {
9364
+ var CONSTANTS$h = {
8965
9365
  title: 'Bar Chart V2',
8966
9366
  description: 'Ideal for illustrating changes and trends over time with bar graphs.',
8967
9367
  namespace: 'bar_chart',
@@ -9183,7 +9583,7 @@ var BarChart$1 = function BarChart(config) {
9183
9583
  drilldownOptions: dumped.drilldownOptions
9184
9584
  };
9185
9585
  },
9186
- setAttributes: setAttributes$d(config),
9586
+ setAttributes: setAttributes$e(config),
9187
9587
  validate: function validate(attrs, dataSets) {
9188
9588
  return validateView(attrs, dataSets, config.queryEngineConfig);
9189
9589
  },
@@ -9221,7 +9621,7 @@ var BarChart$1 = function BarChart(config) {
9221
9621
  }, overrides);
9222
9622
  },
9223
9623
  createFeedback: createFeedback,
9224
- schema: attributesSchema$e(config),
9624
+ schema: attributesSchema$f(config),
9225
9625
  removeField: function removeField(attrs, fieldId) {
9226
9626
  return removeField$1(attrs, fieldId, config.queryEngineConfig);
9227
9627
  },
@@ -9238,7 +9638,7 @@ var BarChart$1 = function BarChart(config) {
9238
9638
  });
9239
9639
  },
9240
9640
  dataPanelConfig: function dataPanelConfig() {
9241
- return [namespace(CONSTANTS$g, 'data_set'), namespace(CONSTANTS$g, 'views'), _extends({}, namespace(CONSTANTS$g, 'field_y_axis'), {
9641
+ return [namespace(CONSTANTS$h, 'data_set'), namespace(CONSTANTS$h, 'views'), _extends({}, namespace(CONSTANTS$h, 'field_y_axis'), {
9242
9642
  fieldFilterOptions: {
9243
9643
  forComponent: 'barChart'
9244
9644
  },
@@ -9251,7 +9651,7 @@ var BarChart$1 = function BarChart(config) {
9251
9651
  return attrs.measure;
9252
9652
  },
9253
9653
  testId: 'metric-input'
9254
- }), _extends({}, namespace(CONSTANTS$g, 'field_x_axis'), {
9654
+ }), _extends({}, namespace(CONSTANTS$h, 'field_x_axis'), {
9255
9655
  fieldFilterOptions: {
9256
9656
  forComponent: 'barChart',
9257
9657
  onlyDimensions: true
@@ -9269,16 +9669,16 @@ var BarChart$1 = function BarChart(config) {
9269
9669
  },
9270
9670
  maxAllowed: 2,
9271
9671
  testId: 'add-dimension'
9272
- }), namespace(CONSTANTS$g, 'sort'), namespace(CONSTANTS$g, 'filter'), _extends({}, namespace(CONSTANTS$g, 'drilldown'), {
9672
+ }), namespace(CONSTANTS$h, 'sort'), namespace(CONSTANTS$h, 'filter'), _extends({}, namespace(CONSTANTS$h, 'drilldown'), {
9273
9673
  options: {
9274
9674
  property: 'drilldownOptions'
9275
9675
  }
9276
- }), namespace(CONSTANTS$g, 'custom_metrics'), namespace(CONSTANTS$g, 'limit')];
9676
+ }), namespace(CONSTANTS$h, 'custom_metrics'), namespace(CONSTANTS$h, 'limit')];
9277
9677
  },
9278
9678
  formatPanelConfig: function formatPanelConfig() {
9279
- return [headingConstant(CONSTANTS$g), chartStylesConstant(CONSTANTS$g, false, true), axisLabelsConstants(CONSTANTS$g), _extends({}, namespace(CONSTANTS$g, 'conditional_formatting'), {
9679
+ return [headingConstant(CONSTANTS$h), chartStylesConstant(CONSTANTS$h, false, true), axisLabelsConstants(CONSTANTS$h), _extends({}, namespace(CONSTANTS$h, 'conditional_formatting'), {
9280
9680
  ruleType: 'lineColor'
9281
- }), namespace(CONSTANTS$g, 'goal_line')];
9681
+ }), namespace(CONSTANTS$h, 'goal_line')];
9282
9682
  },
9283
9683
  supportedCustomFields: {
9284
9684
  calculatedField: false,
@@ -9300,7 +9700,7 @@ var BarChart$1 = function BarChart(config) {
9300
9700
  };
9301
9701
  };
9302
9702
 
9303
- var attributesSchema$f = function attributesSchema(config) {
9703
+ var attributesSchema$g = function attributesSchema(config) {
9304
9704
  return Joi.object(_extends({}, baseAttributesSchema(config.attributesSchemaOptions), timeDimensionQuerySchema(config.queryEngineConfig, config.attributesSchemaOptions), {
9305
9705
  legend: Joi.valid(true, false),
9306
9706
  type: Joi.valid('waterfallChart').required(),
@@ -9311,15 +9711,15 @@ var attributesSchema$f = function attributesSchema(config) {
9311
9711
  }));
9312
9712
  };
9313
9713
 
9314
- var setAttributes$e = (function (config) {
9714
+ var setAttributes$f = (function (config) {
9315
9715
  return function (waterfallChart, partial) {
9316
- var newAttributes = setAttributes(waterfallChart, partial, attributesSchema$f(config));
9716
+ var newAttributes = setAttributes(waterfallChart, partial, attributesSchema$g(config));
9317
9717
  newAttributes = removeUnusedOrderFieldsFromTimeSeriesComponent(newAttributes);
9318
9718
  return newAttributes;
9319
9719
  };
9320
9720
  });
9321
9721
 
9322
- var CONSTANTS$h = {
9722
+ var CONSTANTS$i = {
9323
9723
  title: 'Waterfall chart',
9324
9724
  description: "Shows a running total as values are added or subtracted. It's useful for understanding how an initial value is affected by a series of positive and negative values.",
9325
9725
  namespace: 'waterfall_chart',
@@ -9477,10 +9877,10 @@ var CONSTANTS$h = {
9477
9877
 
9478
9878
  var WaterfallChart = function WaterfallChart(config) {
9479
9879
  return {
9480
- title: CONSTANTS$h.title,
9481
- description: CONSTANTS$h.description,
9880
+ title: CONSTANTS$i.title,
9881
+ description: CONSTANTS$i.description,
9482
9882
  servicesClass: 'WaterfallChart',
9483
- namespace: CONSTANTS$h.namespace,
9883
+ namespace: CONSTANTS$i.namespace,
9484
9884
  dump: function dump(hydrated) {
9485
9885
  return hydrated;
9486
9886
  },
@@ -9515,7 +9915,7 @@ var WaterfallChart = function WaterfallChart(config) {
9515
9915
  offset: dumped.offset
9516
9916
  };
9517
9917
  },
9518
- setAttributes: setAttributes$e(config),
9918
+ setAttributes: setAttributes$f(config),
9519
9919
  validate: function validate(attrs, dataSets) {
9520
9920
  return validateView(attrs, dataSets, config.queryEngineConfig);
9521
9921
  },
@@ -9550,7 +9950,7 @@ var WaterfallChart = function WaterfallChart(config) {
9550
9950
  }, overrides);
9551
9951
  },
9552
9952
  createFeedback: createFeedback,
9553
- schema: attributesSchema$f(config),
9953
+ schema: attributesSchema$g(config),
9554
9954
  removeField: function removeField(attrs, fieldId) {
9555
9955
  return removeField$1(attrs, fieldId, config.queryEngineConfig);
9556
9956
  },
@@ -9567,7 +9967,7 @@ var WaterfallChart = function WaterfallChart(config) {
9567
9967
  });
9568
9968
  },
9569
9969
  dataPanelConfig: function dataPanelConfig() {
9570
- return [namespace(CONSTANTS$h, 'data_set'), namespace(CONSTANTS$h, 'views'), _extends({}, namespace(CONSTANTS$h, 'field_y_axis'), {
9970
+ return [namespace(CONSTANTS$i, 'data_set'), namespace(CONSTANTS$i, 'views'), _extends({}, namespace(CONSTANTS$i, 'field_y_axis'), {
9571
9971
  fieldFilterOptions: {
9572
9972
  forComponent: 'waterfallChart',
9573
9973
  onlyMeasures: true
@@ -9581,7 +9981,7 @@ var WaterfallChart = function WaterfallChart(config) {
9581
9981
  return attrs.measure;
9582
9982
  },
9583
9983
  testId: 'metric-input'
9584
- }), _extends({}, namespace(CONSTANTS$h, 'field_x_axis'), {
9984
+ }), _extends({}, namespace(CONSTANTS$i, 'field_x_axis'), {
9585
9985
  fieldFilterOptions: {
9586
9986
  forComponent: 'waterfallChart',
9587
9987
  onlyDimensions: true
@@ -9595,10 +9995,10 @@ var WaterfallChart = function WaterfallChart(config) {
9595
9995
  },
9596
9996
  maxAllowed: 2,
9597
9997
  testId: 'add-dimension'
9598
- }), namespace(CONSTANTS$h, 'sort'), namespace(CONSTANTS$h, 'filter'), namespace(CONSTANTS$h, 'custom_metrics'), namespace(CONSTANTS$h, 'limit')];
9998
+ }), namespace(CONSTANTS$i, 'sort'), namespace(CONSTANTS$i, 'filter'), namespace(CONSTANTS$i, 'custom_metrics'), namespace(CONSTANTS$i, 'limit')];
9599
9999
  },
9600
10000
  formatPanelConfig: function formatPanelConfig() {
9601
- return [headingConstant(CONSTANTS$h), chartStylesConstant(CONSTANTS$h, false, false), axisLabelsConstants(CONSTANTS$h)];
10001
+ return [headingConstant(CONSTANTS$i), chartStylesConstant(CONSTANTS$i, false, false), axisLabelsConstants(CONSTANTS$i)];
9602
10002
  },
9603
10003
  supportedCustomFields: {
9604
10004
  percentages: true,
@@ -9636,6 +10036,7 @@ function getComponentInterface(type, config) {
9636
10036
  if (type == 'areaChart') return textOverrideComponent(AreaChart(config || EMPTY_CONFIG), config == null ? void 0 : config.textOverride);
9637
10037
  if (type == 'barChart') return textOverrideComponent(BarChart(config || EMPTY_CONFIG), config == null ? void 0 : config.textOverride);
9638
10038
  if (type == 'basicTable') return textOverrideComponent(BasicTable(config || EMPTY_CONFIG), config == null ? void 0 : config.textOverride);
10039
+ if (type == 'bubbleChart') return textOverrideComponent(BubbleChart(config || EMPTY_CONFIG), config == null ? void 0 : config.textOverride);
9639
10040
  if (type == 'comboChart') return textOverrideComponent(ComboChart(config || EMPTY_CONFIG), config == null ? void 0 : config.textOverride);
9640
10041
  if (type == 'custom') return textOverrideComponent(CustomChart(config || EMPTY_CONFIG), config == null ? void 0 : config.textOverride);
9641
10042
  if (type == 'dataTable') return textOverrideComponent(DataTable(config || EMPTY_CONFIG), config == null ? void 0 : config.textOverride);
@@ -12797,7 +13198,7 @@ var buildDefaults = function buildDefaults(partialFeatureToggles) {
12797
13198
  };
12798
13199
  };
12799
13200
 
12800
- var ALL_COMPONENT_TYPES = ['barChart', 'horizontalBarChart', 'funnelChart', 'areaChart', 'lineChart', 'lineChartV2', 'barChartV2', 'scatterChart', 'pieChart', 'singleStat', 'dataTable', 'basicTable', 'comboChart', 'mercatorMap', 'progress', 'richText', 'custom', 'waterfallChart'];
13201
+ var ALL_COMPONENT_TYPES = ['barChart', 'bubbleChart', 'horizontalBarChart', 'funnelChart', 'areaChart', 'lineChart', 'lineChartV2', 'barChartV2', 'scatterChart', 'pieChart', 'singleStat', 'dataTable', 'basicTable', 'comboChart', 'mercatorMap', 'progress', 'richText', 'custom', 'waterfallChart'];
12801
13202
  var ALL_VIZZLY_COMPONENT_TYPES = /*#__PURE__*/[].concat(ALL_COMPONENT_TYPES).filter(function (type) {
12802
13203
  return type != 'custom';
12803
13204
  });
@@ -13137,7 +13538,7 @@ var saveable = function saveable(component, protectedComponent) {
13137
13538
  };
13138
13539
  };
13139
13540
 
13140
- var attributesSchema$g = function attributesSchema(config) {
13541
+ var attributesSchema$h = function attributesSchema(config) {
13141
13542
  return Joi.alternatives().conditional('.type', {
13142
13543
  is: 'barChart',
13143
13544
  then: BarChart(config).schema
@@ -13168,6 +13569,9 @@ var attributesSchema$g = function attributesSchema(config) {
13168
13569
  }).conditional('.type', {
13169
13570
  is: 'pieChart',
13170
13571
  then: PieChart(config).schema
13572
+ }).conditional('.type', {
13573
+ is: 'bubbleChart',
13574
+ then: BubbleChart(config).schema
13171
13575
  }).conditional('.type', {
13172
13576
  is: 'scatterChart',
13173
13577
  then: ScatterChart(config).schema
@@ -20501,7 +20905,7 @@ var Combobox = function Combobox(props) {
20501
20905
  });
20502
20906
  };
20503
20907
 
20504
- var attributesSchema$h = /*#__PURE__*/Joi.object({
20908
+ var attributesSchema$i = /*#__PURE__*/Joi.object({
20505
20909
  displayTitle: /*#__PURE__*/Joi.string().min(1).required(),
20506
20910
  colSpan: /*#__PURE__*/Joi.number().valid(12).required()
20507
20911
  });
@@ -20518,7 +20922,7 @@ var isEmptyCell = /*#__PURE__*/Joi.object({
20518
20922
  });
20519
20923
  var isPopulatedCell = function isPopulatedCell(queryEngineConfig) {
20520
20924
  return Joi.object({
20521
- attributes: attributesSchema$g({
20925
+ attributes: attributesSchema$h({
20522
20926
  queryEngineConfig: queryEngineConfig
20523
20927
  }),
20524
20928
  colSpan: colSpanSchema
@@ -20529,7 +20933,7 @@ var saveableDashboardDefinitionSchema = function saveableDashboardDefinitionSche
20529
20933
  id: Joi.string(),
20530
20934
  display: displaySchema(queryEngineConfig),
20531
20935
  componentLibrary: Joi.array().required().items(Joi.object({
20532
- attributes: attributesSchema$g({
20936
+ attributes: attributesSchema$h({
20533
20937
  queryEngineConfig: queryEngineConfig
20534
20938
  })
20535
20939
  })),
@@ -20540,7 +20944,7 @@ var saveableDashboardDefinitionSchema = function saveableDashboardDefinitionSche
20540
20944
  function displaySchema(queryEngineConfig) {
20541
20945
  return Joi.array().required().items(Joi.object({
20542
20946
  height: Joi.number().required(),
20543
- components: Joi.array().required().min(1).items(Joi.alternatives(isEmptyCell, isPopulatedCell(queryEngineConfig), attributesSchema$h))
20947
+ components: Joi.array().required().min(1).items(Joi.alternatives(isEmptyCell, isPopulatedCell(queryEngineConfig), attributesSchema$i))
20544
20948
  }));
20545
20949
  }
20546
20950
 
@@ -21262,7 +21666,7 @@ var setHeaderComponent = function setHeaderComponent(state, action) {
21262
21666
  newDisplayState.dashboard.display[rowIndex].components[cellIndex] = component;
21263
21667
  return newDisplayState;
21264
21668
  };
21265
- var setAttributes$f = function setAttributes(state, action) {
21669
+ var setAttributes$g = function setAttributes(state, action) {
21266
21670
  var attributes = action.attributes,
21267
21671
  rowIndex = action.rowIndex,
21268
21672
  cellIndex = action.cellIndex;
@@ -21547,7 +21951,7 @@ var reducer = function reducer(pipelineTransformationOptions) {
21547
21951
  case 'swapComponents':
21548
21952
  return swapComponents$1(state, action);
21549
21953
  case 'setAttributes':
21550
- return setAttributes$f(state, action);
21954
+ return setAttributes$g(state, action);
21551
21955
  case 'addComponentToLibrary':
21552
21956
  return addComponentToLibrary(state, action);
21553
21957
  case 'setLocalFilters':
@@ -25010,6 +25414,59 @@ var ScatterChart$1 = function ScatterChart(props) {
25010
25414
  })]
25011
25415
  }));
25012
25416
  };
25417
+ var BubbleChart$1 = function BubbleChart(props) {
25418
+ return jsxRuntime.jsxs("svg", _extends({
25419
+ viewBox: "0 0 2134 2134",
25420
+ xmlns: "http://www.w3.org/2000/svg",
25421
+ xmlSpace: "preserve",
25422
+ style: {
25423
+ fillRule: 'evenodd',
25424
+ clipRule: 'evenodd',
25425
+ strokeLinecap: 'round',
25426
+ strokeLinejoin: 'round',
25427
+ strokeMiterlimit: 1.5
25428
+ }
25429
+ }, props, {
25430
+ children: [jsxRuntime.jsx("path", {
25431
+ d: "M208.333 208.334v1716.66M214.91 1926.73h1716.66",
25432
+ style: {
25433
+ strokeWidth: '166.67px'
25434
+ }
25435
+ }), jsxRuntime.jsx("circle", {
25436
+ cx: 987.916,
25437
+ cy: 920.416,
25438
+ r: 187.917,
25439
+ style: {
25440
+ strokeWidth: '8.33px',
25441
+ strokeLinecap: 'square'
25442
+ }
25443
+ }), jsxRuntime.jsx("circle", {
25444
+ cx: 708.749,
25445
+ cy: 1516.25,
25446
+ r: 187.917,
25447
+ style: {
25448
+ strokeWidth: '8.33px',
25449
+ strokeLinecap: 'square'
25450
+ }
25451
+ }), jsxRuntime.jsx("circle", {
25452
+ cx: 1633.75,
25453
+ cy: 907.916,
25454
+ r: 187.917,
25455
+ style: {
25456
+ strokeWidth: '8.33px',
25457
+ strokeLinecap: 'square'
25458
+ }
25459
+ }), jsxRuntime.jsx("circle", {
25460
+ cx: 1775.42,
25461
+ cy: 307.916,
25462
+ r: 187.917,
25463
+ style: {
25464
+ strokeWidth: '8.33px',
25465
+ strokeLinecap: 'square'
25466
+ }
25467
+ })]
25468
+ }));
25469
+ };
25013
25470
  var Funnel = function Funnel(props) {
25014
25471
  return jsxRuntime.jsx("svg", _extends({
25015
25472
  fill: "none",
@@ -25131,6 +25588,9 @@ var componentTypeToIconMapping = {
25131
25588
  scatterChart: function scatterChart(props) {
25132
25589
  return ScatterChart$1(props);
25133
25590
  },
25591
+ bubbleChart: function bubbleChart(props) {
25592
+ return BubbleChart$1(props);
25593
+ },
25134
25594
  singleStat: function singleStat(props) {
25135
25595
  return SingleStat$1(props);
25136
25596
  },
@@ -31710,7 +32170,7 @@ var accessors = function accessors(xAxisIsTime, xKey, yKey, horizontal) {
31710
32170
  };
31711
32171
  var DEFAULT_Y_AXIS_LABEL_COUNT = 5;
31712
32172
  var VizzlyXYChart = function VizzlyXYChart(props) {
31713
- var _props$height, _theme$axis$stroke, _theme$axis, _ref, _props$lines$data$len, _props$lines, _props$areas, _props$bars, _props$lines$threshol, _props$lines2, _props$areas2, _props$forceXAxisAsTi, _props$bars2, _props$lines3, _theme$grid$stroke, _theme$grid, _props$axisTitles, _props$axisTitles2, _props$axisTitles3, _props$axisTitles4, _props$areas7, _props$bars3, _props$bars7, _props$lines4, _props$lines7, _props$trends2, _props$lines13, _props$lines16, _props$bars14, _props$goalLine, _props$bars15, _props$bars16, _props$bars17;
32173
+ var _props$height, _theme$axis$stroke, _theme$axis, _ref, _props$lines$data$len, _props$lines, _props$areas, _props$bars, _props$lines$threshol, _props$lines2, _props$areas2, _props$forceXAxisAsTi, _props$bars2, _props$lines3, _theme$grid$stroke, _theme$grid, _props$axisTitles, _props$axisTitles2, _props$axisTitles3, _props$axisTitles4, _props$areas7, _props$bars3, _props$bars7, _props$lines4, _props$lines7, _props$trends2, _props$lines13, _props$bars14, _props$goalLine, _props$bars15, _props$bars16, _props$bars17;
31714
32174
  var height = adjustHeight((_props$height = props == null ? void 0 : props.height) != null ? _props$height : 300, props == null ? void 0 : props.legend);
31715
32175
  var _props$approxYAxisLab = props.approxYAxisLabelCount,
31716
32176
  approxYAxisLabelCount = _props$approxYAxisLab === void 0 ? 'auto' : _props$approxYAxisLab,
@@ -32071,27 +32531,12 @@ var VizzlyXYChart = function VizzlyXYChart(props) {
32071
32531
  data: props == null || (_props$trends7 = props.trends) == null ? void 0 : _props$trends7.data
32072
32532
  }, accessors(xAxisIsTime, x, key, horizontal)), "trends_line_on_line_chart_" + props.uniqueId + "_" + keyIndex);
32073
32533
  }), props.lines && (props == null || (_props$lines13 = props.lines) == null ? void 0 : _props$lines13.scatter) && props.lines.keys.map(function (key, keyIndex) {
32074
- var _props$lines14;
32534
+ var _props$lines14, _props$lines15;
32075
32535
  return jsxRuntime.jsx(xychart.GlyphSeries, _extends({
32076
32536
  dataKey: key,
32077
32537
  data: (_props$lines14 = props.lines) == null ? void 0 : _props$lines14.data
32078
32538
  }, accessors(xAxisIsTime, x, key, horizontal), {
32079
- colorAccessor: function colorAccessor(d) {
32080
- var _props$lines15;
32081
- if (props != null && (_props$lines15 = props.lines) != null && _props$lines15.formatter) {
32082
- var color = getColorFromDatum(key, props == null ? void 0 : props.lines.formatter, colors, keyIndex)(d);
32083
- return color;
32084
- }
32085
- return undefined;
32086
- }
32087
- }), "scatter_chart_" + props.uniqueId + "_" + keyIndex);
32088
- }), props.lines && (props == null || (_props$lines16 = props.lines) == null ? void 0 : _props$lines16.scatter) && props.lines.keys.map(function (key, keyIndex) {
32089
- var _props$lines17, _props$lines18;
32090
- return jsxRuntime.jsx(xychart.GlyphSeries, _extends({
32091
- dataKey: key,
32092
- data: (_props$lines17 = props.lines) == null ? void 0 : _props$lines17.data
32093
- }, accessors(xAxisIsTime, x, key, horizontal), {
32094
- colorAccessor: (props == null || (_props$lines18 = props.lines) == null ? void 0 : _props$lines18.formatter) && getColorFromDatum(key, props == null ? void 0 : props.lines.formatter, colors, keyIndex)
32539
+ colorAccessor: (props == null || (_props$lines15 = props.lines) == null ? void 0 : _props$lines15.formatter) && getColorFromDatum(key, props == null ? void 0 : props.lines.formatter, colors, keyIndex)
32095
32540
  }), "scatter_chart_" + props.uniqueId + "_" + keyIndex);
32096
32541
  }), ['areas', 'lines'].map(function (seriesType, indexOne) {
32097
32542
  var chartProps = props;
@@ -40302,6 +40747,172 @@ var IconText = function IconText(props) {
40302
40747
  });
40303
40748
  };
40304
40749
 
40750
+ var defaultProps$6 = {
40751
+ type: 'bubbleChart',
40752
+ xMeasure: null,
40753
+ yMeasure: null,
40754
+ dimension: [],
40755
+ timeDimension: null,
40756
+ order: [],
40757
+ displayTitle: '',
40758
+ displaySubject: '',
40759
+ xAxisPostfix: '',
40760
+ xAxisPrefix: '',
40761
+ yAxisPostfix: '',
40762
+ yAxisPrefix: '',
40763
+ yAxisFormat: null,
40764
+ xAxisFormat: null,
40765
+ filter: [],
40766
+ limit: 500,
40767
+ legend: false,
40768
+ approxXAxisLabelCount: 'auto',
40769
+ approxYAxisLabelCount: 'auto',
40770
+ tags: []
40771
+ };
40772
+ var BubbleChartView = function BubbleChartView(props) {
40773
+ var _props$library, _props$viewId, _props$library2, _props$viewId2, _theme$charts;
40774
+ var _props = props,
40775
+ displayTitle = _props.displayTitle,
40776
+ displaySubject = _props.displaySubject;
40777
+ var _useDashboardBehaviou = useDashboardBehaviourContext(),
40778
+ textOverride = _useDashboardBehaviou.textOverride,
40779
+ labelFormat = _useDashboardBehaviou.labelFormat,
40780
+ variables = _useDashboardBehaviou.variables;
40781
+ var ref = useChartRenderHelper({
40782
+ title: displayTitle,
40783
+ subject: displaySubject
40784
+ });
40785
+ var headerProps = {
40786
+ displayTitle: displayTitle,
40787
+ displaySubject: displaySubject,
40788
+ library: (_props$library = props.library) != null ? _props$library : false,
40789
+ verified: props.protectedByOrganisation,
40790
+ localFilters: props.localFilters,
40791
+ setLocalFilters: props.setLocalFilters,
40792
+ dataSet: props.dataSet,
40793
+ componentType: props.type,
40794
+ viewId: (_props$viewId = props.viewId) != null ? _props$viewId : '',
40795
+ order: props.order,
40796
+ setPartialAttributes: props.setPartialAttributes
40797
+ };
40798
+ var theme = useTheme();
40799
+ var BubbleChartComponent = getComponentInterface(props.type);
40800
+ if (!BubbleChartComponent.isRunnable(props)) {
40801
+ return jsxRuntime.jsx(QueryUnderConstructionNotice, {
40802
+ title: "Missing parameters",
40803
+ children: emptyScatterChartMessage(props)
40804
+ });
40805
+ }
40806
+ if (isLoading(props.result)) return jsxRuntime.jsx(LoadingComponent, {});
40807
+ if (hasFailed(props.result)) return jsxRuntime.jsx(FailedToLoadDataNotice, {});
40808
+ if (isEmpty(props.result)) return jsxRuntime.jsx(NoResultContentToShowNotice, _extends({}, headerProps));
40809
+ props = mergeProps(props, {}, defaultProps$6);
40810
+ var keys = props.result && props.xMeasure ? scatterXKeys(props.dimension, props.xMeasure, props.result) : [];
40811
+ if (!props.xMeasure || !props.yMeasure) return null;
40812
+ var measure = [];
40813
+ measure.push(props.xMeasure);
40814
+ measure.push(props.yMeasure);
40815
+ var pivotConfig = init$c(props);
40816
+ var bubbleData = props.result ? resultSet(props.result, measure, pivotConfig) : [];
40817
+ var xField = key([], [], props.xMeasure.field, props.xMeasure["function"]);
40818
+ var zField = props.zMeasure ? key([], [], props.zMeasure.field, props.zMeasure["function"]) : '';
40819
+ bubbleData.forEach(function (d) {
40820
+ var dimensionValues = [].concat(props.dimension.map(function (dimension) {
40821
+ return d[dimension.field];
40822
+ }));
40823
+ var yMeasure = props.yMeasure;
40824
+ var xMeasure = props.xMeasure;
40825
+ var yKeyWithoutDimension = key([], [], yMeasure.field, yMeasure["function"]);
40826
+ var xKeyWithDimension = key(props.dimension.map(function (d) {
40827
+ return d.field;
40828
+ }), dimensionValues, xMeasure.field, xMeasure["function"]);
40829
+ d[xKeyWithDimension] = d[yKeyWithoutDimension];
40830
+ });
40831
+ return jsxRuntime.jsx(React.Suspense, {
40832
+ fallback: jsxRuntime.jsx(LoadingComponent, {}),
40833
+ children: jsxRuntime.jsxs(ViewWrapper, {
40834
+ queriesAreChanging: props.queriesAreChanging,
40835
+ children: [jsxRuntime.jsx(ViewHeader, _extends({}, headerProps)), jsxRuntime.jsx(ChartWrapper, {
40836
+ disabledFeatures: (_props$library2 = props.library) != null ? _props$library2 : false,
40837
+ children: jsxRuntime.jsx(BubbleChart$3.BubbleChart, {
40838
+ ref: ref,
40839
+ approxXAxisLabelCount: props.approxXAxisLabelCount,
40840
+ approxYAxisLabelCount: props.approxYAxisLabelCount,
40841
+ uniqueId: props.id,
40842
+ x: xField,
40843
+ z: zField,
40844
+ keys: keys,
40845
+ colors: themeToColorScale(theme == null ? void 0 : theme.colors, keys.length),
40846
+ data: bubbleData,
40847
+ legend: showLegend(props.legend, (theme == null ? void 0 : theme.detail) === 'verbose'),
40848
+ horizontal: false,
40849
+ removeStroke: false,
40850
+ forceXAxisAsTime: false,
40851
+ sparkline: false,
40852
+ formatYAxisLabel: formatYAxisLabel(textOverride, {
40853
+ prefix: props.yAxisPrefix,
40854
+ postfix: props.yAxisPostfix,
40855
+ format: props.yAxisFormat,
40856
+ numberFormatOptions: props.numberFormatOptions,
40857
+ dateTimeFormatOptions: props.dateTimeFormatOptions,
40858
+ defaultFormats: props.defaultFormats
40859
+ }),
40860
+ formatXAxisLabel: formatXAxisLabel(null, {
40861
+ prefix: props.xAxisPrefix,
40862
+ postfix: props.xAxisPostfix,
40863
+ format: props.xAxisFormat,
40864
+ numberFormatOptions: props.numberFormatOptions,
40865
+ dateTimeFormatOptions: props.dateTimeFormatOptions,
40866
+ defaultFormats: props.defaultFormats
40867
+ }),
40868
+ theme: theme == null ? void 0 : theme.charts,
40869
+ formatSeriesName: formatSeriesName(props.result, textOverride, props.type, (_props$viewId2 = props.viewId) != null ? _props$viewId2 : '', labelFormat),
40870
+ goalLine: buildGoalLine(variables, props.goalLines),
40871
+ axisTitles: props.axisTitles,
40872
+ idPrefix: props.idPrefix,
40873
+ popOverMenuStyles: theme == null || (_theme$charts = theme.charts) == null ? void 0 : _theme$charts.popoverMenus
40874
+ })
40875
+ })]
40876
+ })
40877
+ });
40878
+ };
40879
+ BubbleChartView.defaultProps = defaultProps$6;
40880
+ var memoized$4 = /*#__PURE__*/React.memo(BubbleChartView, shouldUpdate);
40881
+
40882
+ var BubbleChart$2 = function BubbleChart(props) {
40883
+ var _props$dashboardBehav;
40884
+ var _props$component = props.component,
40885
+ results = _props$component.results,
40886
+ attributes = _props$component.attributes,
40887
+ localFilters = _props$component.localFilters;
40888
+ var _useQueryEffect = useQueryEffect(attributes, props.runQueriesCallback, props.setResults, {
40889
+ localFilters: localFilters,
40890
+ globalFilters: props.globalFilters
40891
+ }, props.dataSet, undefined, props.dashboardBehaviour.variables),
40892
+ queriesAreChanging = _useQueryEffect.queriesAreChanging;
40893
+ return jsxRuntime.jsx(memoized$4, _extends({
40894
+ id: props.id
40895
+ }, attributes, {
40896
+ dataSet: props.dataSet,
40897
+ localFilters: localFilters,
40898
+ setLocalFilters: props.setLocalFilters,
40899
+ setPartialAttributes: function setPartialAttributes(changes) {
40900
+ return props.setPartialAttributes(changes);
40901
+ },
40902
+ result: results && results[0],
40903
+ queriesAreChanging: queriesAreChanging,
40904
+ supportedAggregates: props.dashboardBehaviour.queryEngineConfig.supportedAggregates,
40905
+ supportedTimeTruncFunctions: props.dashboardBehaviour.queryEngineConfig.supportedTimeTruncFunctions,
40906
+ sm: props.sm,
40907
+ library: props == null ? void 0 : props.library,
40908
+ supportedTransformationFunctions: props == null || (_props$dashboardBehav = props.dashboardBehaviour) == null || (_props$dashboardBehav = _props$dashboardBehav.queryEngineConfig) == null ? void 0 : _props$dashboardBehav.supportedTransformationFunctions,
40909
+ numberFormatOptions: props.dashboardBehaviour.numberFormatOptions,
40910
+ dateTimeFormatOptions: props.dashboardBehaviour.dateTimeFormatOptions,
40911
+ idPrefix: props.idPrefix,
40912
+ defaultFormats: props.dashboardBehaviour.defaultFormats
40913
+ }));
40914
+ };
40915
+
40305
40916
  var takeRenderOverrideFunctions = function takeRenderOverrideFunctions(props) {
40306
40917
  return {
40307
40918
  renderCloseIcon: props.renderCloseIcon || null,
@@ -43192,7 +43803,7 @@ var MercatorMap$3 = function MercatorMap(props) {
43192
43803
  }));
43193
43804
  };
43194
43805
 
43195
- var defaultProps$6 = {
43806
+ var defaultProps$7 = {
43196
43807
  type: 'funnelChart',
43197
43808
  measure: [],
43198
43809
  dimension: [],
@@ -43231,7 +43842,7 @@ var FunnelChartView = function FunnelChartView(props) {
43231
43842
  headline: props.headline
43232
43843
  });
43233
43844
  var theme = useTheme();
43234
- props = mergeProps(props, {}, defaultProps$6);
43845
+ props = mergeProps(props, {}, defaultProps$7);
43235
43846
  var headerProps = {
43236
43847
  displayTitle: displayTitle,
43237
43848
  displaySubject: displaySubject,
@@ -43325,7 +43936,7 @@ var FunnelChartView = function FunnelChartView(props) {
43325
43936
  })
43326
43937
  });
43327
43938
  };
43328
- FunnelChartView.defaultProps = defaultProps$6;
43939
+ FunnelChartView.defaultProps = defaultProps$7;
43329
43940
  var FunnelChartView$1 = /*#__PURE__*/React.memo(FunnelChartView, shouldUpdate);
43330
43941
 
43331
43942
  var FunnelChart$2 = function FunnelChart(props) {
@@ -43455,7 +44066,7 @@ var SingleStat$2 = function SingleStat(props) {
43455
44066
  }));
43456
44067
  };
43457
44068
 
43458
- var defaultProps$7 = {
44069
+ var defaultProps$8 = {
43459
44070
  type: 'dataTable',
43460
44071
  measure: [],
43461
44072
  dimension: [],
@@ -43486,13 +44097,13 @@ function hasNext(_ref) {
43486
44097
  return total >= limit;
43487
44098
  }
43488
44099
  function nextOffset(offset, limit) {
43489
- return (offset || 0) + (limit || defaultProps$7.limit);
44100
+ return (offset || 0) + (limit || defaultProps$8.limit);
43490
44101
  }
43491
44102
  function previousOffset(offset, limit) {
43492
44103
  if (offset === undefined && limit === undefined) {
43493
44104
  return undefined;
43494
44105
  }
43495
- return (offset || 0) - (limit || defaultProps$7.limit);
44106
+ return (offset || 0) - (limit || defaultProps$8.limit);
43496
44107
  }
43497
44108
 
43498
44109
  var wrapper$8 = /*#__PURE__*/buildStyleOverrides( /*#__PURE__*/_extends({
@@ -45776,7 +46387,7 @@ var DataTableView = function DataTableView(props) {
45776
46387
  })]
45777
46388
  });
45778
46389
  };
45779
- DataTableView.defaultProps = defaultProps$7;
46390
+ DataTableView.defaultProps = defaultProps$8;
45780
46391
  var DataTableView$1 = (function (props) {
45781
46392
  return jsxRuntime.jsx(DataTableView, _extends({}, props));
45782
46393
  });
@@ -46065,7 +46676,7 @@ var IndividualProgress = function IndividualProgress(props) {
46065
46676
  radius: props.progressType === ProgressType.Linear ? undefined : props.radius
46066
46677
  });
46067
46678
  };
46068
- var defaultProps$8 = {
46679
+ var defaultProps$9 = {
46069
46680
  type: 'progress',
46070
46681
  measure: [],
46071
46682
  displayTitle: '',
@@ -46111,7 +46722,7 @@ var ProgressView$1 = function ProgressView(props) {
46111
46722
  if (isLoading(mainResult)) return jsxRuntime.jsx(LoadingComponent, {});
46112
46723
  if (hasFailed(mainResult)) return jsxRuntime.jsx(FailedToLoadDataNotice, {});
46113
46724
  if (isEmpty(mainResult)) return jsxRuntime.jsx(NoResultContentToShowNotice, _extends({}, headerProps));
46114
- props = mergeProps(props, {}, defaultProps$8);
46725
+ props = mergeProps(props, {}, defaultProps$9);
46115
46726
  var noOfMeasures = props.measure.length;
46116
46727
  var progressType = defaultProgressType(props.progressType);
46117
46728
  var _useState2 = React.useState(0),
@@ -46173,7 +46784,7 @@ var ProgressView$1 = function ProgressView(props) {
46173
46784
  })]
46174
46785
  });
46175
46786
  };
46176
- ProgressView$1.defaultProps = defaultProps$8;
46787
+ ProgressView$1.defaultProps = defaultProps$9;
46177
46788
 
46178
46789
  var Progress$2 = function Progress(props) {
46179
46790
  var _props$dashboardBehav;
@@ -47847,6 +48458,30 @@ var Component = function Component(props) {
47847
48458
  })
47848
48459
  });
47849
48460
  }
48461
+ if (props.component.attributes.type == 'bubbleChart') {
48462
+ return jsxRuntime.jsx(ErrorBoundary, {
48463
+ renderOnError: function renderOnError(onManualRetry) {
48464
+ return jsxRuntime.jsx(ComponentErrorNotice, {
48465
+ onManualRetry: onManualRetry
48466
+ });
48467
+ },
48468
+ onError: dashboardBehaviour.onError,
48469
+ children: jsxRuntime.jsx(BubbleChart$2, {
48470
+ id: props.id,
48471
+ setLocalFilters: props.setLocalFilters,
48472
+ dataSet: dataSet,
48473
+ runQueriesCallback: props.runQueriesCallback,
48474
+ component: props.component,
48475
+ setResults: props.setResults,
48476
+ globalFilters: dashboard.globalFilters,
48477
+ dashboardBehaviour: dashboardBehaviour,
48478
+ sm: smallVersion,
48479
+ library: props == null ? void 0 : props.library,
48480
+ idPrefix: idPrefix,
48481
+ setPartialAttributes: setPartialAttributes
48482
+ })
48483
+ });
48484
+ }
47850
48485
  if (['horizontalBarChart', 'barChart'].includes(props.component.attributes.type)) {
47851
48486
  return jsxRuntime.jsx(ErrorBoundary, {
47852
48487
  renderOnError: function renderOnError(onManualRetry) {
@@ -64435,109 +65070,109 @@ var PieChart$4 = /*#__PURE__*/function (_View5) {
64435
65070
  };
64436
65071
  return PieChart;
64437
65072
  }(View$3);
64438
- var ScatterChart$4 = /*#__PURE__*/function (_View6) {
65073
+ var ScatterChart$4 = /*#__PURE__*/function (_View7) {
64439
65074
  function ScatterChart(attributes) {
64440
- return _View6.call(this, _extends({}, attributes, {
65075
+ return _View7.call(this, _extends({}, attributes, {
64441
65076
  type: 'scatterChart'
64442
65077
  })) || this;
64443
65078
  }
64444
- _inheritsLoose(ScatterChart, _View6);
65079
+ _inheritsLoose(ScatterChart, _View7);
64445
65080
  ScatterChart.type = function type() {
64446
65081
  return 'scatterChart';
64447
65082
  };
64448
65083
  return ScatterChart;
64449
65084
  }(View$3);
64450
- var ComboChart$4 = /*#__PURE__*/function (_View7) {
65085
+ var ComboChart$4 = /*#__PURE__*/function (_View8) {
64451
65086
  function ComboChart(attributes) {
64452
- return _View7.call(this, _extends({}, attributes, {
65087
+ return _View8.call(this, _extends({}, attributes, {
64453
65088
  type: 'comboChart'
64454
65089
  })) || this;
64455
65090
  }
64456
- _inheritsLoose(ComboChart, _View7);
65091
+ _inheritsLoose(ComboChart, _View8);
64457
65092
  ComboChart.type = function type() {
64458
65093
  return 'comboChart';
64459
65094
  };
64460
65095
  return ComboChart;
64461
65096
  }(View$3);
64462
- var PivotTable = /*#__PURE__*/function (_View8) {
65097
+ var PivotTable = /*#__PURE__*/function (_View9) {
64463
65098
  function PivotTable(attributes) {
64464
- return _View8.call(this, _extends({}, attributes, {
65099
+ return _View9.call(this, _extends({}, attributes, {
64465
65100
  type: 'dataTable'
64466
65101
  })) || this;
64467
65102
  }
64468
- _inheritsLoose(PivotTable, _View8);
65103
+ _inheritsLoose(PivotTable, _View9);
64469
65104
  PivotTable.type = function type() {
64470
65105
  return 'dataTable';
64471
65106
  };
64472
65107
  return PivotTable;
64473
65108
  }(View$3);
64474
- var BasicTable$1 = /*#__PURE__*/function (_View9) {
65109
+ var BasicTable$1 = /*#__PURE__*/function (_View10) {
64475
65110
  function BasicTable(attributes) {
64476
- return _View9.call(this, _extends({}, attributes, {
65111
+ return _View10.call(this, _extends({}, attributes, {
64477
65112
  type: 'basicTable'
64478
65113
  })) || this;
64479
65114
  }
64480
- _inheritsLoose(BasicTable, _View9);
65115
+ _inheritsLoose(BasicTable, _View10);
64481
65116
  BasicTable.type = function type() {
64482
65117
  return 'basicTable';
64483
65118
  };
64484
65119
  return BasicTable;
64485
65120
  }(View$3);
64486
- var HorizontalBarChart$2 = /*#__PURE__*/function (_View10) {
65121
+ var HorizontalBarChart$2 = /*#__PURE__*/function (_View11) {
64487
65122
  function HorizontalBarChart(attributes) {
64488
- return _View10.call(this, _extends({}, attributes, {
65123
+ return _View11.call(this, _extends({}, attributes, {
64489
65124
  type: 'horizontalBarChart'
64490
65125
  })) || this;
64491
65126
  }
64492
- _inheritsLoose(HorizontalBarChart, _View10);
65127
+ _inheritsLoose(HorizontalBarChart, _View11);
64493
65128
  HorizontalBarChart.type = function type() {
64494
65129
  return 'horizontalBarChart';
64495
65130
  };
64496
65131
  return HorizontalBarChart;
64497
65132
  }(View$3);
64498
- var MercatorMap$4 = /*#__PURE__*/function (_View11) {
65133
+ var MercatorMap$4 = /*#__PURE__*/function (_View12) {
64499
65134
  function MercatorMap(attributes) {
64500
- return _View11.call(this, _extends({}, attributes, {
65135
+ return _View12.call(this, _extends({}, attributes, {
64501
65136
  type: 'mercatorMap'
64502
65137
  })) || this;
64503
65138
  }
64504
- _inheritsLoose(MercatorMap, _View11);
65139
+ _inheritsLoose(MercatorMap, _View12);
64505
65140
  MercatorMap.type = function type() {
64506
65141
  return 'mercatorMap';
64507
65142
  };
64508
65143
  return MercatorMap;
64509
65144
  }(View$3);
64510
- var SingleStat$3 = /*#__PURE__*/function (_View12) {
65145
+ var SingleStat$3 = /*#__PURE__*/function (_View13) {
64511
65146
  function SingleStat(attributes) {
64512
- return _View12.call(this, _extends({}, attributes, {
65147
+ return _View13.call(this, _extends({}, attributes, {
64513
65148
  type: 'singleStat'
64514
65149
  })) || this;
64515
65150
  }
64516
- _inheritsLoose(SingleStat, _View12);
65151
+ _inheritsLoose(SingleStat, _View13);
64517
65152
  SingleStat.type = function type() {
64518
65153
  return 'singleStat';
64519
65154
  };
64520
65155
  return SingleStat;
64521
65156
  }(View$3);
64522
- var Progress$3 = /*#__PURE__*/function (_View13) {
65157
+ var Progress$3 = /*#__PURE__*/function (_View14) {
64523
65158
  function Progress(attributes) {
64524
- return _View13.call(this, _extends({}, attributes, {
65159
+ return _View14.call(this, _extends({}, attributes, {
64525
65160
  type: 'progress'
64526
65161
  })) || this;
64527
65162
  }
64528
- _inheritsLoose(Progress, _View13);
65163
+ _inheritsLoose(Progress, _View14);
64529
65164
  Progress.type = function type() {
64530
65165
  return 'progress';
64531
65166
  };
64532
65167
  return Progress;
64533
65168
  }(View$3);
64534
- var WaterfallChart$4 = /*#__PURE__*/function (_View15) {
65169
+ var WaterfallChart$4 = /*#__PURE__*/function (_View16) {
64535
65170
  function WaterfallChart(attributes) {
64536
- return _View15.call(this, _extends({}, attributes, {
65171
+ return _View16.call(this, _extends({}, attributes, {
64537
65172
  type: 'waterfallChart'
64538
65173
  })) || this;
64539
65174
  }
64540
- _inheritsLoose(WaterfallChart, _View15);
65175
+ _inheritsLoose(WaterfallChart, _View16);
64541
65176
  WaterfallChart.type = function type() {
64542
65177
  return 'waterfallChart';
64543
65178
  };
@@ -64847,7 +65482,21 @@ var toQueries$d = function toQueries(attributes, dataSet, queryEngineConfig, par
64847
65482
  };
64848
65483
  };
64849
65484
 
64850
- var toQueries$e = function toQueries$1(attributes, dataSet, queryEngineConfig, params) {
65485
+ var toQueries$e = function toQueries(attributes, dataSet, queryEngineConfig, params) {
65486
+ var measures = [];
65487
+ attributes.xMeasure && measures.push(attributes.xMeasure);
65488
+ attributes.yMeasure && measures.push(attributes.yMeasure);
65489
+ var _Query$build = build$a(dataSet, measures, attributes.order, attributes.dimension, attributes.timeDimension, attributes.limit, attributes.offset, queryEngineConfig, params),
65490
+ query = _Query$build.query,
65491
+ measureDescription = _Query$build.measureDescription;
65492
+ var resultFields = toResultFields([measureDescription], queryEngineConfig);
65493
+ return {
65494
+ queries: [query],
65495
+ resultFields: resultFields
65496
+ };
65497
+ };
65498
+
65499
+ var toQueries$f = function toQueries$1(attributes, dataSet, queryEngineConfig, params) {
64851
65500
  return toQueries([dataSet], [{
64852
65501
  measure: attributes.measure,
64853
65502
  dataSetId: dataSet.id,
@@ -64859,12 +65508,12 @@ var toQueries$e = function toQueries$1(attributes, dataSet, queryEngineConfig, p
64859
65508
  }], queryEngineConfig, params);
64860
65509
  };
64861
65510
 
64862
- var toQueries$f = commonToQueries;
64863
-
64864
65511
  var toQueries$g = commonToQueries;
64865
65512
 
64866
65513
  var toQueries$h = commonToQueries;
64867
65514
 
65515
+ var toQueries$i = commonToQueries;
65516
+
64868
65517
  var buildVizzlyViewQueries = function buildVizzlyViewQueries(attributes, dataSet, queryEngineConfig, params) {
64869
65518
  switch (attributes.type) {
64870
65519
  case 'areaChart':
@@ -64893,14 +65542,16 @@ var buildVizzlyViewQueries = function buildVizzlyViewQueries(attributes, dataSet
64893
65542
  return toQueries$c(attributes, dataSet, queryEngineConfig, params);
64894
65543
  case 'scatterChart':
64895
65544
  return toQueries$d(attributes, dataSet, queryEngineConfig, params);
64896
- case 'mercatorMap':
65545
+ case 'bubbleChart':
64897
65546
  return toQueries$e(attributes, dataSet, queryEngineConfig, params);
64898
- case 'funnelChart':
65547
+ case 'mercatorMap':
64899
65548
  return toQueries$f(attributes, dataSet, queryEngineConfig, params);
64900
- case 'richText':
65549
+ case 'funnelChart':
64901
65550
  return toQueries$g(attributes, dataSet, queryEngineConfig, params);
64902
- case 'waterfallChart':
65551
+ case 'richText':
64903
65552
  return toQueries$h(attributes, dataSet, queryEngineConfig, params);
65553
+ case 'waterfallChart':
65554
+ return toQueries$i(attributes, dataSet, queryEngineConfig, params);
64904
65555
  default:
64905
65556
  throw 'Unsupported view when building query.';
64906
65557
  }
@@ -67771,6 +68422,7 @@ var attributesToAiView = function attributesToAiView(dataSet, originalAttributes
67771
68422
  if (attributes.type === 'funnelChart') throw 'Funnel chart views are not supported by Vizzly AI.';
67772
68423
  if (attributes.type === 'richText') throw 'Rich text views are not supported by Vizzly AI.';
67773
68424
  if (attributes.type === 'lineChartV2') throw 'Line Chart V2 views are not supported by Vizzly AI.';
68425
+ if (attributes.type === 'bubbleChart') throw 'Bubble Chart views are not supported by Vizzly AI.';
67774
68426
  if (attributes.type === 'barChartV2') throw 'Line Chart V2 views are not supported by Vizzly AI.';
67775
68427
  if (attributes.type === 'waterfallChart') throw 'Waterfall chart views are not supported by Vizzly AI.';
67776
68428
  var select = [];