@datarailsshared/dr_renderer 1.5.107 → 1.5.116

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.
@@ -14,6 +14,7 @@ const {
14
14
  GenericRenderingError,
15
15
  GenericComputationalError
16
16
  } = require('./errors');
17
+ const optionsBuilders = require('./options');
17
18
 
18
19
  const mobileBrowserRegex = new RegExp([
19
20
  '(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
@@ -32,58 +33,9 @@ const EMPTY_ROW_N_KEYS = [[]];
32
33
 
33
34
  const NULL_VALUE = '[null]';
34
35
 
35
- const CHART_COLORS = {
36
- BACKGROUND: '#fff',
37
- TEXT: '#151a41',
38
- LABEL: '#cfd7dd',
39
- LABEL_SECOND: '#85889c',
40
- DRILL_UP_FILL: '#eef3f6',
41
- DRILL_BUTTON_COLOR_FILL: 'white',
42
- DRILL_BUTTON_COLOR: '#6D6E6F',
43
- DRILL_BUTTON_COLOR_HOVER: '#333333',
44
- PLOT_BORDER: '#606063',
45
- MINOR_GRID_LINE: '#505053',
46
- TICK_COLOR: '#666',
47
- LABELS_OLD: '#D7D7D8',
48
- DATA_LABELS: '#B0B0B3',
49
- CONTRAST_TEXT: '#F0F0F3',
50
- LEGEND_BACKGROUND: 'rgba(0, 0, 0, 0.5)',
51
- MASK: 'rgba(255,255,255,0.3)',
52
- };
36
+ const CHART_COLORS = optionsBuilders.CHART_COLORS;
53
37
 
54
- const CHART_TYPES = {
55
- LINE_CHART: 'line-chart',
56
- LINE_CHART_SMOOTH: 'line-chart-smooth',
57
- LINE_CHART_FORECAST: 'line-chart-forecast',
58
- COLUMN_CHART: 'column-chart',
59
- COLUMN_CHART_STACKED: 'column-chart-stacked',
60
- COMBO_CHART: 'combo-chart',
61
- COMBO_COLUMN_CHART: 'combo-column-chart',
62
- COMBO_STACKED_CHART: 'combo-stacked-chart',
63
- BAR_CHART: 'bar-chart',
64
- BAR_CHART_STACKED: 'bar-chart-stacked',
65
- SCATTER_CHART: 'scatter-chart',
66
- AREA_CHART: 'area-chart',
67
- AREA_CHART_SMOOTH: 'area-chart-smooth',
68
- TABLE_ONLY: 'table_only',
69
- POLYGON_CHART: 'polygon-chart',
70
- PIE_CHART: 'pie-chart',
71
- PIE_CHART_DRILLDOWN: 'pie-chart-drilldown',
72
- GAUGE_SOLID_CHART: 'gauge-solid-chart',
73
- GAUGE_CHART: 'gauge-chart',
74
- GAUGE_CHART_ENHANCED: 'gauge-chart-enhanced',
75
- GAUGE_CHART_DYNAMIC_GOAL: 'gauge-chart-dynamic-goal',
76
- GAUGE_CHART_CATEGORIES_SUMMARY: 'gauge-chart-categories-summary',
77
- KPI_WIDGET: 'kpi-widget',
78
- SMART_KPI: 'smart-kpi',
79
- TEXT_WIDGET: 'text-widget',
80
- WATERFALL_BREAKDOWN: 'waterfall-chart-breakdown',
81
- WATERFALL_WALKTHROUGH: 'waterfall-chart-walkthrough',
82
- PUBLISHED_ITEM: 'published_item',
83
- RICH_TEXT: 'rich_text',
84
- EXCEL_VIEWER: 'excel_viewer',
85
- DONUT_CHART: 'donut-chart',
86
- }
38
+ const CHART_TYPES = optionsBuilders.CHART_TYPES;
87
39
 
88
40
  const HIGHCHARTS_CONSTANTS = {
89
41
  delimer: helpers.DELIMER,
@@ -110,59 +62,11 @@ const HIGHCHARTS_CONSTANTS = {
110
62
  MAX_SELECTED_ITEMS_BEFORE_SHOWING_COUNTER: 3,
111
63
  }
112
64
 
113
- const SUBOPTIONS_FONTS = [
114
- 'Arial',
115
- 'Arial Black',
116
- 'Comic Sans MS',
117
- 'Courier New',
118
- 'Helvetica',
119
- 'Impact',
120
- 'Nunito Sans',
121
- 'Tahoma',
122
- 'Times New Roman',
123
- 'Verdana',
124
- 'Poppins'
125
- ];
126
-
127
- const HIGHCHARTS_FONT_FAMILY = 'Poppins';
128
-
129
- const HIGHCHARTS_FONT_FAMILY_CSS = 'Poppins, sans-serif';
130
-
131
- const TOOLTIP_DEFAULT_SETTINGS = {
132
- FONT_COLOR: '#545a6b',
133
- FONT_SIZE: '12',
134
- FONT_FAMILY: HIGHCHARTS_FONT_FAMILY,
135
- };
136
-
137
- const TOOLTIP_DEFAULT_OPTIONS = {
138
- borderColor: CHART_COLORS.BACKGROUND,
139
- shadow: {
140
- color: '#9199b4',
141
- width: 10,
142
- opacity: 0.05
143
- },
144
- style: {
145
- fontSize: TOOLTIP_DEFAULT_SETTINGS.FONT_SIZE,
146
- fontFamily: TOOLTIP_DEFAULT_SETTINGS.FONT_FAMILY,
147
- color: TOOLTIP_DEFAULT_SETTINGS.FONT_COLOR,
148
- },
149
- enabled: true,
150
- };
65
+ const HIGHCHARTS_FONT_FAMILY_CSS = optionsBuilders.HIGHCHARTS_FONT_FAMILY_CSS;
151
66
 
152
- const LABEL_DEFAULT_SETTINGS = {
153
- FONT_COLOR: CHART_COLORS.TEXT,
154
- FONT_SIZE: '11',
155
- FONT_FAMILY: HIGHCHARTS_FONT_FAMILY,
156
- };
67
+ const TOOLTIP_DEFAULT_OPTIONS = optionsBuilders.TOOLTIP_DEFAULT_OPTIONS;
157
68
 
158
- const LABEL_DEFAULT_OPTIONS = {
159
- style: {
160
- fontSize: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
161
- fontFamily: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
162
- fontWeight: 'normal',
163
- },
164
- color: LABEL_DEFAULT_SETTINGS.FONT_COLOR,
165
- };
69
+ const LABEL_DEFAULT_OPTIONS = optionsBuilders.LABEL_DEFAULT_OPTIONS;
166
70
 
167
71
  const CHART_AXIS_DEFAULT_LABEL = 'Axis (Category)';
168
72
 
@@ -245,6 +149,184 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
245
149
  }
246
150
  }
247
151
 
152
+ /**
153
+ * Sanitizes series data for 100% stacking by converting negative values to 0.
154
+ * @param {Array<Object>} series - Array of Highcharts series objects
155
+ * @returns {Array<Object>} Sanitized series with negative y-values set to 0
156
+ * @private
157
+ */
158
+ const _sanitizeDataForPercentStacking = (series) => {
159
+ return series.map(s => ({
160
+ ...s,
161
+ data: s.data.map(point => {
162
+ const y = typeof point === 'object' ? point.y : point;
163
+ return typeof point === 'object'
164
+ ? { ...point, y: Math.max(0, y) }
165
+ : Math.max(0, y);
166
+ })
167
+ }));
168
+ };
169
+
170
+ /**
171
+ * Calculates the sum of positive values only for a column (x-axis total).
172
+ * Used for 100% stacked charts to calculate percentages excluding negative values.
173
+ * @param {Object} pivotData - The pivot data model
174
+ * @param {Array} colKey - The column key to sum values for
175
+ * @returns {number} Sum of positive values for all rows in the specified column
176
+ * @private
177
+ */
178
+ const _getPositiveOnlyAxisTotal = (pivotData, colKey) => {
179
+ let total = 0;
180
+ const rowKeys = pivotData.getRowKeys();
181
+ if (rowKeys.length === 0) {
182
+ // No row keys, get the total value directly
183
+ const val = pivotData.getAggregator([], colKey).value() || 0;
184
+ return val > 0 ? val : 0;
185
+ }
186
+ rowKeys.forEach(rk => {
187
+ const val = pivotData.getAggregator(rk, colKey).value() || 0;
188
+ if (val > 0) total += val;
189
+ });
190
+ return total;
191
+ };
192
+
193
+ /**
194
+ * Calculates the sum of positive values only for a row (data series total).
195
+ * Used for 100% stacked charts to calculate percentages excluding negative values.
196
+ * @param {Object} pivotData - The pivot data model
197
+ * @param {Array} rowKey - The row key to sum values for
198
+ * @returns {number} Sum of positive values for all columns in the specified row
199
+ * @private
200
+ */
201
+ const _getPositiveOnlySeriesTotal = (pivotData, rowKey) => {
202
+ let total = 0;
203
+ const colKeys = pivotData.getColKeys();
204
+ colKeys.forEach(ck => {
205
+ const val = pivotData.getAggregator(rowKey, ck).value() || 0;
206
+ if (val > 0) total += val;
207
+ });
208
+ return total;
209
+ };
210
+
211
+ /**
212
+ * Creates a data label formatter for 100% stacked charts.
213
+ * Calculates percentages using pivot data with negative values omitted.
214
+ * @param {Object} pivotData - The pivot data model
215
+ * @param {Object} additionOptions - Chart options
216
+ * @param {Object} opts - Additional options
217
+ * @returns {Function} Formatter function for data labels
218
+ * @private
219
+ */
220
+ const _createPercentStackedDataLabelFormatter = (pivotData, additionOptions, opts) => {
221
+ return function() {
222
+ const labelOptions = lodash.get(additionOptions, 'label', {});
223
+ const value = Math.max(0, this.y);
224
+
225
+ let series_name = highchartsRenderer.getSeriesNameInFormatterContext(this);
226
+ let rows = series_name.split(highchartsRenderer.delimer);
227
+ let cols = highchartsRenderer.getColsInFormatterContext(this);
228
+
229
+ if (pivotData.rowAttrs.length === 0) {
230
+ rows = [];
231
+ }
232
+ if (!lodash.isArray(cols)) {
233
+ cols = [cols];
234
+ }
235
+
236
+ const percentageArray = [];
237
+
238
+ if (labelOptions.show_out_of_x_axis) {
239
+ const axisTotal = _getPositiveOnlyAxisTotal(pivotData, cols);
240
+ if (value && axisTotal) {
241
+ percentageArray.push(Math.round(value / axisTotal * 100) + '%');
242
+ }
243
+ }
244
+
245
+ if (labelOptions.show_out_of_data_series) {
246
+ const seriesTotal = _getPositiveOnlySeriesTotal(pivotData, rows);
247
+ if (value && seriesTotal) {
248
+ percentageArray.push(Math.round(value / seriesTotal * 100) + '%');
249
+ }
250
+ }
251
+
252
+ const percentageWrapper = percentageArray.length ? `(${percentageArray.join(', ')})` : '';
253
+
254
+ let formattedValue = '';
255
+ if (labelOptions.show_value !== false) {
256
+ try {
257
+ const aggr = pivotData.getAggregator(rows, cols);
258
+ formattedValue = $.pivotUtilities.getFormattedNumber(this.y, aggr, opts, true);
259
+ } catch (err) {
260
+ formattedValue = this.y;
261
+ }
262
+ }
263
+
264
+ return String(formattedValue) + percentageWrapper;
265
+ };
266
+ };
267
+
268
+ /**
269
+ * Creates a tooltip formatter for 100% stacked charts.
270
+ * Calculates percentages using pivot data with negative values omitted.
271
+ * @param {Object} pivotData - The pivot data model
272
+ * @param {Object} opts - Chart options
273
+ * @returns {Function} Formatter function for tooltips
274
+ * @private
275
+ */
276
+ const _createPercentStackedTooltipFormatter = (pivotData, opts) => {
277
+ const tooltipOptions = lodash.get(opts, 'chartOptions.tooltips') || {};
278
+ let percentageLabels = { axis: CHART_AXIS_DEFAULT_LABEL, legend: CHART_LEGEND_DEFAULT_LABEL };
279
+ if (lodash.has(opts, 'chartLabels')) {
280
+ percentageLabels = opts.chartLabels;
281
+ }
282
+
283
+ return function() {
284
+ const y = parseFloat(this.y);
285
+ const value = Math.max(0, y); // Treat negative as 0 for percentage
286
+
287
+ let series_name = highchartsRenderer.getSeriesNameInFormatterContext(this);
288
+ let rows = series_name.split(highchartsRenderer.delimer);
289
+ let cols = highchartsRenderer.getColsInFormatterContext(this);
290
+
291
+ if (pivotData.rowAttrs.length === 0) { rows = []; }
292
+ if (!lodash.isArray(cols)) { cols = [cols]; }
293
+
294
+ try {
295
+ const aggr = pivotData.getAggregator(rows, cols);
296
+ let formatted_value = $.pivotUtilities.getFormattedNumber(y, aggr, opts);
297
+ let wrappedFormattedValue = highchartsRenderer.getSpanWrapper(formatted_value);
298
+
299
+ const category_text = tooltipOptions.show_x_axis ? `<b>${cols[0] || this.key}</b>` : '';
300
+ const series_text = tooltipOptions.show_data_series
301
+ ? `<br/><span style="color: ${this.series.color};">\u200E${this.series.name}</span>: `
302
+ : '';
303
+ wrappedFormattedValue = tooltipOptions.show_value ? wrappedFormattedValue : '';
304
+
305
+ let to_return = category_text + series_text + wrappedFormattedValue;
306
+
307
+ const percentageArray = [];
308
+ if (tooltipOptions.show_out_of_x_axis) {
309
+ const axisTotal = _getPositiveOnlyAxisTotal(pivotData, cols);
310
+ if (value && axisTotal) {
311
+ percentageArray.push(`% Out of ${percentageLabels.axis}: ${Math.round(value / axisTotal * 100)}%`);
312
+ }
313
+ }
314
+ if (tooltipOptions.show_out_of_data_series) {
315
+ const seriesTotal = _getPositiveOnlySeriesTotal(pivotData, rows);
316
+ if (value && seriesTotal) {
317
+ percentageArray.push(`% Out of ${percentageLabels.legend}: ${Math.round(value / seriesTotal * 100)}%`);
318
+ }
319
+ }
320
+ if (percentageArray.length) {
321
+ to_return += `<br/>` + percentageArray.join(', ');
322
+ }
323
+ return to_return;
324
+ } catch (err) {
325
+ return this.y;
326
+ }
327
+ };
328
+ };
329
+
248
330
  highchartsRenderer.hasFeature = function(featureFlagKey) {
249
331
  return lodash.includes(highchartsRenderer.features || [], featureFlagKey);
250
332
  }
@@ -439,17 +521,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
439
521
  return {};
440
522
  };
441
523
 
442
- const chartHasVerticalDataLabelsOption = (type) => {
443
- return ![
444
- highchartsRenderer.CHART_TYPES.LINE_CHART,
445
- highchartsRenderer.CHART_TYPES.LINE_CHART_SMOOTH,
446
- highchartsRenderer.CHART_TYPES.AREA_CHART,
447
- highchartsRenderer.CHART_TYPES.AREA_CHART_SMOOTH,
448
- highchartsRenderer.CHART_TYPES.BAR_CHART,
449
- highchartsRenderer.CHART_TYPES.BAR_CHART_STACKED,
450
- ].includes(type);
451
- };
452
-
453
524
  const objectCopyJsonMethod = function (o) {
454
525
  if(!o) return 0;
455
526
  return JSON.parse(JSON.stringify(o));
@@ -3169,6 +3240,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3169
3240
  chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
3170
3241
  }
3171
3242
  chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, chartOptions.colors, null, true, true, additionOptions, opts, chartOptions, chartType);
3243
+
3172
3244
  //chartOptions.drilldown = {}
3173
3245
  if (opts.selectedPoint) {
3174
3246
  seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
@@ -3181,6 +3253,114 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3181
3253
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
3182
3254
  };
3183
3255
 
3256
+ /**
3257
+ * Renders a 100% stacked column chart where each bar represents 100%
3258
+ * and segments show their percentage contribution.
3259
+ * @param {Object} pivotData - The pivot data model
3260
+ * @param {Object} opts - Chart options
3261
+ * @param {Function} _drilldownFunc - Optional drilldown callback
3262
+ * @param {string} chartType - The chart type identifier
3263
+ * @returns {Object} The rendered chart element
3264
+ */
3265
+ highchartsRenderer.ptRenderStackedPercentColumn = function (pivotData, opts, _drilldownFunc, chartType) {
3266
+ var chartOptions = {};
3267
+ var rowAttrs = pivotData.rowAttrs;
3268
+ var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart(optionsBuilders.CHART_TYPES.COLUMN_CHART_STACKED_PERCENT);
3269
+
3270
+ chartOptions.chart = {
3271
+ type: 'column',
3272
+ zoomType: 'x',
3273
+ };
3274
+ if (disableAnimation) {
3275
+ chartOptions.chart.animation = false;
3276
+ }
3277
+ highchartsRenderer.setTitleAndSubTitle(chartOptions, opts, additionOptions);
3278
+
3279
+ // Y-axis always 0-100% for percent stacking
3280
+ chartOptions.yAxis = {
3281
+ min: 0,
3282
+ max: 100,
3283
+ title: {
3284
+ text: additionOptions && additionOptions.axisY ? additionOptions.axisY.name : ''
3285
+ },
3286
+ stackLabels: {
3287
+ enabled: false // No stack labels for 100% stacked
3288
+ },
3289
+ labels: {
3290
+ formatter: function() { return this.value + '%'; }
3291
+ }
3292
+ };
3293
+
3294
+ chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
3295
+
3296
+ chartOptions.tooltip = {
3297
+ formatter: _createPercentStackedTooltipFormatter(pivotData, opts),
3298
+ valueDecimals: 2,
3299
+ };
3300
+
3301
+ if (additionOptions && additionOptions.chart) {
3302
+ chartOptions.colors = highchartsRenderer.getColorsWithOffset(additionOptions.chart.colors_offset);
3303
+ }
3304
+
3305
+ chartOptions.plotOptions = {
3306
+ cropThreshold: 1000,
3307
+ column: {
3308
+ stacking: 'percent',
3309
+ dataLabels: {
3310
+ allowOverlap: additionOptions && additionOptions.label ? additionOptions.label.overlap : false,
3311
+ "style": highchartsRenderer.getDataLabelsStyle(additionOptions, {
3312
+ textOutline: additionOptions && additionOptions.label && additionOptions.label.shadow ?
3313
+ '1px contrast' : null
3314
+ }),
3315
+ color: 'contrast'
3316
+ }
3317
+ },
3318
+ series: {
3319
+ animation: !disableAnimation
3320
+ }
3321
+ };
3322
+
3323
+ chartOptions.plotOptions.column = highchartsRenderer.getDataLabelsOptions(additionOptions, chartOptions.plotOptions.column);
3324
+
3325
+ chartOptions.xAxis = {
3326
+ type: 'category',
3327
+ crosshair: true,
3328
+ min: 0,
3329
+ title: {
3330
+ text : additionOptions && additionOptions.axisX ? additionOptions.axisX.name : '',
3331
+ }
3332
+ };
3333
+ chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
3334
+ if (lodash.get(opts, 'paletteOptions.widgetPalette', null)) {
3335
+ const mc_palette = lodash.find(lodash.get(opts.paletteOptions, 'monochromePalettes', []), { selected: true });
3336
+ chartOptions.colors = mc_palette ? mc_palette.colors : opts.paletteOptions.widgetPalette;
3337
+ } else if (lodash.get(opts, 'paletteOptions.dashboardPalette.colors', null)) {
3338
+ chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
3339
+ }
3340
+
3341
+ chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, chartOptions.colors, null, true, true, additionOptions, opts, chartOptions, chartType);
3342
+
3343
+ // Sanitize series data for 100% stacking (convert negative values to 0)
3344
+ chartOptions.series = _sanitizeDataForPercentStacking(chartOptions.series);
3345
+
3346
+ // Override dataLabels formatter for each series to use pivot-based calculation
3347
+ // with positive-only totals (negatives treated as 0)
3348
+ chartOptions.series.forEach(series => {
3349
+ series.dataLabels = series.dataLabels || {};
3350
+ series.dataLabels.formatter = _createPercentStackedDataLabelFormatter(pivotData, additionOptions, opts);
3351
+ });
3352
+
3353
+ if (opts.selectedPoint) {
3354
+ seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
3355
+ }
3356
+
3357
+ highchartsRenderer.handleGridLines(additionOptions, chartOptions);
3358
+
3359
+ helpers.disableLegendInteractionIfRequired(chartOptions, additionOptions);
3360
+
3361
+ return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
3362
+ };
3363
+
3184
3364
  highchartsRenderer.ptRenderBar = function (pivotData, opts) {
3185
3365
  var chartOptions = {};
3186
3366
  var rowAttrs = pivotData.rowAttrs;
@@ -3379,6 +3559,115 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3379
3559
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
3380
3560
  };
3381
3561
 
3562
+ /**
3563
+ * Renders a 100% stacked bar chart where each bar represents 100%
3564
+ * and segments show their percentage contribution.
3565
+ * @param {Object} pivotData - The pivot data model
3566
+ * @param {Object} opts - Chart options
3567
+ * @returns {Object} The rendered chart element
3568
+ */
3569
+ highchartsRenderer.ptRenderStackedPercentBar = function (pivotData, opts) {
3570
+ var chartOptions = {};
3571
+ var rowAttrs = pivotData.rowAttrs;
3572
+ var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart(optionsBuilders.CHART_TYPES.BAR_CHART_STACKED_PERCENT);
3573
+
3574
+ const labelStyle = lodash.merge(
3575
+ LABEL_DEFAULT_OPTIONS.style,
3576
+ { color: lodash.get(additionOptions, `${ highchartsRenderer.getLabelOptionKey(additionOptions) }.font_color`) || LABEL_DEFAULT_OPTIONS.color },
3577
+ highchartsRenderer.getDataLabelsStyle(additionOptions)
3578
+ );
3579
+
3580
+ chartOptions.chart = {
3581
+ type: 'bar',
3582
+ zoomType: 'x'
3583
+ };
3584
+ if (disableAnimation) {
3585
+ chartOptions.chart.animation = false;
3586
+ }
3587
+ highchartsRenderer.setTitleAndSubTitle(chartOptions, opts, additionOptions);
3588
+
3589
+ // Y-axis always 0-100% for percent stacking
3590
+ chartOptions.yAxis = {
3591
+ min: 0,
3592
+ max: 100,
3593
+ title: {
3594
+ text: additionOptions && additionOptions.axisY ? additionOptions.axisY.name : ''
3595
+ },
3596
+ stackLabels: {
3597
+ enabled: false // No stack labels for 100% stacked
3598
+ },
3599
+ labels: {
3600
+ formatter: function() { return this.value + '%'; }
3601
+ }
3602
+ };
3603
+
3604
+ chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
3605
+ chartOptions.legend.reversed = true;
3606
+
3607
+ chartOptions.tooltip = {
3608
+ formatter: _createPercentStackedTooltipFormatter(pivotData, opts)
3609
+ };
3610
+
3611
+ if (additionOptions && additionOptions.chart) {
3612
+ chartOptions.colors = highchartsRenderer.getColorsWithOffset(additionOptions.chart.colors_offset);
3613
+ }
3614
+
3615
+ chartOptions.plotOptions = {
3616
+ series: {
3617
+ animation: !disableAnimation,
3618
+ stacking: 'percent',
3619
+ dataLabels: {
3620
+ allowOverlap: additionOptions && additionOptions.label ? additionOptions.label.overlap : false,
3621
+ enabled: additionOptions && additionOptions.label ? additionOptions.label.show : false,
3622
+ style: labelStyle
3623
+ }
3624
+ }
3625
+ };
3626
+
3627
+ if (opts.drillDownListFunc) {
3628
+ chartOptions.plotOptions.series.cursor = 'pointer';
3629
+ chartOptions.plotOptions.series.point = {
3630
+ events: {
3631
+ click: opts.drillDownListFunc
3632
+ }
3633
+ };
3634
+ }
3635
+
3636
+ chartOptions.xAxis = {
3637
+ categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
3638
+ title: {
3639
+ text: additionOptions && additionOptions.axisX ? additionOptions.axisX.name : ''
3640
+ },
3641
+ };
3642
+ chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
3643
+ if (lodash.get(opts, 'paletteOptions.widgetPalette', null)) {
3644
+ const mc_palette = lodash.find(lodash.get(opts.paletteOptions, 'monochromePalettes', []), { selected: true });
3645
+ chartOptions.colors = mc_palette ? mc_palette.colors : opts.paletteOptions.widgetPalette;
3646
+ } else if (lodash.get(opts, 'paletteOptions.dashboardPalette.colors', null)) {
3647
+ chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
3648
+ }
3649
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions, opts, chartOptions);
3650
+
3651
+ // Sanitize series data for 100% stacking (convert negative values to 0)
3652
+ chartOptions.series = _sanitizeDataForPercentStacking(chartOptions.series);
3653
+
3654
+ // Override dataLabels formatter for each series to use pivot-based calculation
3655
+ // with positive-only totals (negatives treated as 0)
3656
+ chartOptions.series.forEach(series => {
3657
+ series.dataLabels = series.dataLabels || {};
3658
+ series.dataLabels.formatter = _createPercentStackedDataLabelFormatter(pivotData, additionOptions, opts);
3659
+ });
3660
+
3661
+ if (opts.selectedPoint) {
3662
+ seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
3663
+ }
3664
+ highchartsRenderer.handleGridLines(additionOptions, chartOptions);
3665
+
3666
+ helpers.disableLegendInteractionIfRequired(chartOptions, additionOptions);
3667
+
3668
+ return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
3669
+ };
3670
+
3382
3671
  highchartsRenderer.ptRenderWaterfallBreakdown = function (pivotData, opts, drilldownFunc, chartType) {
3383
3672
  let chartOptions = {};
3384
3673
  const additionOptions = opts.chartOptions
@@ -5861,1535 +6150,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5861
6150
  return highchartsRenderer.chartsTypesInfo[type] ? highchartsRenderer.chartsTypesInfo[type].legendName : CHART_LEGEND_DEFAULT_LABEL;
5862
6151
  };
5863
6152
 
5864
- const suboptionsFontSizeValues = (lodash.map(lodash.fill(new Array(19), null), function (item, index) {
5865
- const fontValue = index + 6;
5866
- return { label: fontValue, value: fontValue }
5867
- }));
5868
-
5869
- highchartsRenderer.suboptions = {
5870
- 'widget_library': {
5871
- is_hidden: true,
5872
- category_class: 'google-visualization-charteditor-mini-more',
5873
- category_label: 'Widget Library',
5874
- category_type: 'widget_library',
5875
- elements: [
5876
- {
5877
- element_type: 'input',
5878
- value_name: 'categories',
5879
- element_label: 'Category',
5880
- default_value: ''
5881
- },
5882
- {
5883
- element_type: 'textarea',
5884
- value_name: 'description',
5885
- element_label: 'Description',
5886
- default_value: ''
5887
- },
5888
- {
5889
- element_type: 'tag',
5890
- element_options: {
5891
- add_new_tag: true,
5892
- searchable: true,
5893
- multiple: true
5894
- },
5895
- value_name: 'tags',
5896
- element_label: 'Labels',
5897
- default_value: []
5898
- }
5899
- ]
5900
- },
5901
- 'table_options': {
5902
- category_class: 'google-visualization-charteditor-mini-more',
5903
- category_label: 'Table',
5904
- category_type: 'table_options',
5905
- elements: [
5906
- {
5907
- element_type: 'input',
5908
- value_name: 'table_colors_offset',
5909
- element_label: 'Colors offset',
5910
- default_value: 0
5911
- },
5912
- {
5913
- element_type: 'checkbox',
5914
- element_label: 'Column totals',
5915
- value_name: 'show_column_total',
5916
- default_value: true
5917
- },
5918
- {
5919
- element_type: 'checkbox',
5920
- element_label: 'Row totals',
5921
- value_name: 'show_row_total',
5922
- default_value: true
5923
- },
5924
- {
5925
- element_type: 'checkbox',
5926
- element_label: 'Subtotals for columns',
5927
- value_name: 'show_subtotals_for_columns',
5928
- default_value: false
5929
- },
5930
- {
5931
- element_type: 'checkbox',
5932
- element_label: 'Subtotals for rows',
5933
- value_name: 'show_subtotals_for_rows',
5934
- default_value: false
5935
- },
5936
- {
5937
- element_type: 'checkbox',
5938
- element_label: 'Subtotals in brackets',
5939
- value_name: 'show_subtotals_in_brackets',
5940
- default_value: false
5941
- },
5942
- {
5943
- element_type: 'checkbox',
5944
- element_label: 'Transpose',
5945
- value_name: 'transpose_table',
5946
- default_value: false
5947
- },
5948
- {
5949
- element_type: 'checkbox',
5950
- element_label: 'Start collapsed rows <small>(old table only)</small>',
5951
- value_name: 'start_collapsed_rows',
5952
- default_value: false
5953
- },
5954
- {
5955
- element_type: 'checkbox',
5956
- element_label: 'Start collapsed columns <small>(old table only)</small>',
5957
- value_name: 'start_collapsed_columns',
5958
- default_value: false
5959
- },
5960
- {
5961
- element_type: 'checkbox',
5962
- element_label: 'Colorize headers',
5963
- value_name: 'colorize_headers',
5964
- default_value: true
5965
- },
5966
- {
5967
- element_type: 'checkbox',
5968
- element_label: 'Remove underscores',
5969
- value_name: 'remove_underscores',
5970
- default_value: true
5971
- },
5972
- {
5973
- element_type: 'checkbox',
5974
- element_label: 'Use big data table',
5975
- value_name: 'use_handsOnTable',
5976
- default_value: false
5977
- },
5978
- {
5979
- element_type: 'checkbox',
5980
- element_label: 'Use new table design',
5981
- value_name: 'use_new_table_design',
5982
- default_value: true
5983
- },
5984
- {
5985
- element_type: 'checkbox',
5986
- element_label: 'Null values appear as blank',
5987
- value_name: 'hide_nulls_in_headers',
5988
- default_value: true
5989
- },
5990
- {
5991
- element_type: 'checkbox',
5992
- element_label: 'Show All',
5993
- value_name: 'show_all',
5994
- default_value: false
5995
- },
5996
- {
5997
- element_type: 'checkbox',
5998
- element_label: 'Freeze panes <small>(old table only)</small>',
5999
- value_name: 'freeze_panes',
6000
- default_value: false
6001
- },
6002
- {
6003
- element_type: 'checkbox',
6004
- element_label: 'Eliminate grand totals for calculated values',
6005
- value_name: 'eliminate_calc_totals',
6006
- default_value: false
6007
- },
6008
- ]
6009
- },
6010
- 'table_design_options': {
6011
- category_class: 'google-visualization-charteditor-mini-more',
6012
- category_label: 'Table design',
6013
- category_type: 'table_design_options',
6014
- elements: [
6015
- {
6016
- element_type: 'devider',
6017
- element_label: 'Columns'
6018
- },
6019
- {
6020
- element_type: 'select',
6021
- value_name: 'columns_font_style',
6022
- element_label: 'Font style',
6023
- element_options: SUBOPTIONS_FONTS,
6024
- default_value: 'Poppins'
6025
- },
6026
- {
6027
- element_type: 'select',
6028
- value_name: 'columns_font_size',
6029
- element_label: 'Font size',
6030
- element_options: suboptionsFontSizeValues,
6031
- default_value: '10'
6032
- },
6033
- {
6034
- element_type: 'select',
6035
- value_name: 'columns_align_text',
6036
- element_label: 'Alignment',
6037
- element_options: [
6038
- {label: 'Left', value: 'left'},
6039
- {label: 'Center', value: 'center'},
6040
- {label: 'Right', value: 'right'}
6041
- ],
6042
- default_value: 'left'
6043
- },
6044
- {
6045
- element_type: 'devider',
6046
- element_label: 'Rows'
6047
- },
6048
- {
6049
- element_type: 'select',
6050
- value_name: 'rows_font_style',
6051
- element_label: 'Font style',
6052
- element_options: SUBOPTIONS_FONTS,
6053
- default_value: 'Poppins'
6054
- },
6055
- {
6056
- element_type: 'select',
6057
- value_name: 'rows_font_size',
6058
- element_label: 'Font size',
6059
- element_options: suboptionsFontSizeValues,
6060
- default_value: '10'
6061
- },
6062
- {
6063
- element_type: 'select',
6064
- value_name: 'rows_align_text',
6065
- element_label: 'Alignment',
6066
- element_options: [
6067
- {label: 'Left', value: 'left'},
6068
- {label: 'Center', value: 'center'},
6069
- {label: 'Right', value: 'right'}
6070
- ],
6071
- default_value: 'left'
6072
- },
6073
- {
6074
- element_type: 'devider',
6075
- element_label: 'Values'
6076
- },
6077
- {
6078
- element_type: 'select',
6079
- value_name: 'values_font_style',
6080
- element_label: 'Font style',
6081
- element_options: SUBOPTIONS_FONTS,
6082
- default_value: 'Poppins'
6083
- },
6084
- {
6085
- element_type: 'select',
6086
- value_name: 'values_font_size',
6087
- element_label: 'Font size',
6088
- element_options: suboptionsFontSizeValues,
6089
- default_value: '10'
6090
- },
6091
- {
6092
- element_type: 'select',
6093
- value_name: 'values_align_text',
6094
- element_label: 'Alignment',
6095
- element_options: [
6096
- {label: 'Left', value: 'left'},
6097
- {label: 'Center', value: 'center'},
6098
- {label: 'Right', value: 'right'}
6099
- ],
6100
- default_value: 'left'
6101
- },
6102
- {
6103
- element_type: 'devider',
6104
- element_label: 'Totals'
6105
- },
6106
- {
6107
- element_type: 'select',
6108
- value_name: 'totals_font_style',
6109
- element_label: 'Font style',
6110
- element_options: SUBOPTIONS_FONTS,
6111
- default_value: 'Poppins'
6112
- },
6113
- {
6114
- element_type: 'select',
6115
- value_name: 'totals_font_size',
6116
- element_label: 'Font size',
6117
- element_options: suboptionsFontSizeValues,
6118
- default_value: '10'
6119
- },
6120
- {
6121
- element_type: 'select',
6122
- value_name: 'totals_align_text',
6123
- element_label: 'Alignment',
6124
- element_options: [
6125
- {label: 'Left', value: 'left'},
6126
- {label: 'Center', value: 'center'},
6127
- {label: 'Right', value: 'right'}
6128
- ],
6129
- default_value: 'left'
6130
- },
6131
- ]
6132
- },
6133
- 'table_options_transpose': {
6134
- category_class: 'google-visualization-charteditor-mini-more',
6135
- category_label: 'Table',
6136
- category_type: 'table_options',
6137
- elements: [
6138
- {
6139
- element_type: 'input',
6140
- value_name: 'table_colors_offset',
6141
- element_label: 'Colors offset',
6142
- default_value: 0
6143
- },
6144
- {
6145
- element_type: 'checkbox',
6146
- element_label: 'Column totals',
6147
- value_name: 'show_column_total',
6148
- default_value: true
6149
- },
6150
- {
6151
- element_type: 'checkbox',
6152
- element_label: 'Row totals',
6153
- value_name: 'show_row_total',
6154
- default_value: true
6155
- },
6156
- {
6157
- element_type: 'checkbox',
6158
- element_label: 'Subtotals for columns',
6159
- value_name: 'show_subtotals_for_columns',
6160
- default_value: false
6161
- },
6162
- {
6163
- element_type: 'checkbox',
6164
- element_label: 'Subtotals for rows',
6165
- value_name: 'show_subtotals_for_rows',
6166
- default_value: false
6167
- },
6168
- {
6169
- element_type: 'checkbox',
6170
- element_label: 'Subtotals in brackets',
6171
- value_name: 'show_subtotals_in_brackets',
6172
- default_value: false
6173
- },
6174
- {
6175
- element_type: 'checkbox',
6176
- element_label: 'Transpose',
6177
- value_name: 'transpose_table',
6178
- default_value: false
6179
- },
6180
- {
6181
- element_type: 'checkbox',
6182
- element_label: 'Start collapsed rows <small>(old table only)</small>',
6183
- value_name: 'start_collapsed_rows',
6184
- default_value: false
6185
- },
6186
- {
6187
- element_type: 'checkbox',
6188
- element_label: 'Start collapsed columns <small>(old table only)</small>',
6189
- value_name: 'start_collapsed_columns',
6190
- default_value: false
6191
- },
6192
- {
6193
- element_type: 'checkbox',
6194
- element_label: 'Colorize headers',
6195
- value_name: 'colorize_headers',
6196
- default_value: true
6197
- },
6198
- {
6199
- element_type: 'checkbox',
6200
- element_label: 'Remove underscores',
6201
- value_name: 'remove_underscores',
6202
- default_value: true
6203
- },
6204
- {
6205
- element_type: 'checkbox',
6206
- element_label: 'Use big data table',
6207
- value_name: 'use_handsOnTable',
6208
- default_value: false
6209
- },
6210
- {
6211
- element_type: 'checkbox',
6212
- element_label: 'Use new table design',
6213
- value_name: 'use_new_table_design',
6214
- default_value: true
6215
- },
6216
- {
6217
- element_type: 'checkbox',
6218
- element_label: 'Null values appear as blank',
6219
- value_name: 'hide_nulls_in_headers',
6220
- default_value: true
6221
- },
6222
- {
6223
- element_type: 'checkbox',
6224
- element_label: 'Freeze panes <small>(old table only)</small>',
6225
- value_name: 'freeze_panes',
6226
- default_value: false
6227
- },
6228
- {
6229
- element_type: 'checkbox',
6230
- element_label: 'Eliminate grand totals for calculated values',
6231
- value_name: 'eliminate_calc_totals',
6232
- default_value: false
6233
- },
6234
- {
6235
- element_type: 'checkbox',
6236
- element_label: 'Show data in dashboard if more than 1000 rows',
6237
- value_name: 'show_more_than_thousand_rows',
6238
- default_value: false,
6239
- showFn: chartType => chartType === highchartsRenderer.CHART_TYPES.TABLE_ONLY,
6240
- disabled_fn: (value) => !!value.use_handsOnTable
6241
- },
6242
- ]
6243
- },
6244
- 'table_options_gauge': {
6245
- category_class: 'google-visualization-charteditor-mini-more',
6246
- category_label: 'Table',
6247
- category_type: 'table_options',
6248
- elements: [
6249
- {
6250
- element_type: 'input',
6251
- value_name: 'table_colors_offset',
6252
- element_label: 'Colors offset',
6253
- default_value: 0
6254
- },
6255
- {
6256
- element_type: 'checkbox',
6257
- element_label: 'Column totals',
6258
- value_name: 'show_column_total',
6259
- default_value: true
6260
- }
6261
- ]
6262
- },
6263
- 'value': {
6264
- category_class: 'google-visualization-charteditor-mini-more',
6265
- category_label: 'Value',
6266
- category_type: 'value',
6267
- elements: [{
6268
- element_type: 'radio',
6269
- value_name: 'value',
6270
- element_label: 'Aggregated',
6271
- element_options: [
6272
- {label: 'Avg', value: 'Avg'},
6273
- {label: 'Max', value: 'Max'},
6274
- {label: 'Min', value: 'Min'},
6275
- {label: 'Sum', value: 'Sum'},
6276
- {label: 'Unique', value: 'Unique'}
6277
- ],
6278
- default_value: 'Sum'
6279
- }]
6280
- },
6281
- 'range': {
6282
- category_class: 'google-visualization-charteditor-mini-more',
6283
- category_label: 'Range',
6284
- category_type: 'range',
6285
- elements: [{
6286
- element_type: 'input',
6287
- value_name: 'low',
6288
- element_label: 'Low %',
6289
- default_value: 10,
6290
- value_type: 'number'
6291
- },
6292
- {
6293
- element_type: 'input',
6294
- value_name: 'medium',
6295
- element_label: 'Medium %',
6296
- default_value: 50,
6297
- value_type: 'number'
6298
- },
6299
- {
6300
- element_type: 'input',
6301
- value_name: 'high',
6302
- element_label: 'High %',
6303
- default_value: 90,
6304
- value_type: 'number'
6305
- },
6306
- {
6307
- element_type: 'input',
6308
- value_name: 'max',
6309
- element_label: 'Max',
6310
- default_value: 1000,
6311
- value_type: 'number'
6312
- }
6313
- ]
6314
- },
6315
- 'name': {
6316
- category_class: 'google-visualization-charteditor-mini-more',
6317
- category_label: 'Name',
6318
- category_type: 'name',
6319
- elements: [{
6320
- element_type: 'input',
6321
- value_name: 'name',
6322
- element_label: 'Name',
6323
- default_value: ''
6324
- }]
6325
- },
6326
- 'subtitle': {
6327
- category_class: 'google-visualization-charteditor-mini-more',
6328
- category_label: 'Subtitle',
6329
- category_type: 'subtitle',
6330
- elements: [{
6331
- element_type: 'input',
6332
- value_name: 'subtitle',
6333
- element_label: 'Subtitle',
6334
- default_value: ''
6335
- }]
6336
- },
6337
- 'chart': {
6338
- category_class: 'google-visualization-charteditor-mini-more',
6339
- category_label: 'Chart',
6340
- category_type: 'chart',
6341
- elements: [
6342
- {
6343
- element_type: 'input',
6344
- value_name: 'colors_offset',
6345
- element_label: 'Colors offset',
6346
- default_value: 0
6347
- },
6348
- {
6349
- element_type: 'radio',
6350
- value_name: 'zoom_type',
6351
- element_label: 'Zoom type',
6352
- element_options: [
6353
- {label: 'None', value: 'None'},
6354
- {label: 'x', value: 'x'},
6355
- {label: 'y', value: 'y'},
6356
- {label: 'xy', value: 'xy'}
6357
- ],
6358
- default_value: 'None'
6359
- },
6360
- {
6361
- element_type: 'checkbox',
6362
- value_name: 'show',
6363
- element_label: 'Show grid',
6364
- default_value: true
6365
- },
6366
- {
6367
- element_type: 'checkbox',
6368
- value_name: 'dislay_empty_values',
6369
- element_label: 'Display empty values',
6370
- default_value: false
6371
- },
6372
- ]
6373
- },
6374
- 'chart_grid': {
6375
- category_class: 'google-visualization-charteditor-mini-more',
6376
- category_label: 'Chart',
6377
- category_type: 'chart',
6378
- elements: [{
6379
- element_type: 'input',
6380
- value_name: 'colors_offset',
6381
- element_label: 'Colors offset',
6382
- default_value: 0
6383
- }, {
6384
- element_type: 'checkbox',
6385
- value_name: 'show',
6386
- element_label: 'Show grid',
6387
- default_value: true
6388
- }, {
6389
- element_type: 'checkbox',
6390
- value_name: 'showAllLegends',
6391
- element_label: 'Show legends over 10',
6392
- default_value: false
6393
- },
6394
- {
6395
- element_type: 'checkbox',
6396
- value_name: 'dislay_empty_values',
6397
- element_label: 'Display empty values',
6398
- default_value: false
6399
- }
6400
- ]
6401
- },
6402
- 'chart_forecast': {
6403
- category_class: 'google-visualization-charteditor-mini-more',
6404
- category_label: 'Chart',
6405
- category_type: 'chart',
6406
- elements: [
6407
- {
6408
- element_type: 'input',
6409
- value_name: 'colors_offset',
6410
- element_label: 'Colors offset',
6411
- default_value: 0
6412
- }, {
6413
- element_type: 'checkbox',
6414
- value_name: 'show',
6415
- element_label: 'Show grid',
6416
- default_value: true
6417
- }, {
6418
- element_type: 'checkbox',
6419
- value_name: 'showAllLegends',
6420
- element_label: 'Show legends over 10',
6421
- default_value: false
6422
- },
6423
- {
6424
- element_type: 'checkbox',
6425
- value_name: 'dislay_empty_values',
6426
- element_label: 'Display empty values',
6427
- default_value: false
6428
- },
6429
- {
6430
- element_type: 'devider',
6431
- element_label: 'Chart Patterns',
6432
- },
6433
- {
6434
- element_type: 'text',
6435
- element_label: 'Forecast Chart',
6436
- value_name: 'smart_query',
6437
- default_value: true,
6438
- },
6439
- {
6440
- element_type: 'select',
6441
- value_name: 'actuals',
6442
- element_label: 'Actuals',
6443
- element_options: [
6444
- {label: 'Solid', value: 'solid'},
6445
- {label: 'Dash', value: 'dash'},
6446
- ],
6447
- default_value: 'Solid',
6448
- },
6449
- {
6450
- element_type: 'select',
6451
- value_name: 'forecast',
6452
- element_label: 'Forecast',
6453
- element_options: [
6454
- {label: 'Solid', value: 'solid'},
6455
- {label: 'Dash', value: 'dash'},
6456
- ],
6457
- default_value: 'Dash',
6458
- }
6459
- ]
6460
- },
6461
- 'total_value_label_donut': {
6462
- category_class: 'google-visualization-charteditor-mini-more',
6463
- category_label: 'Total Value Label',
6464
- category_type: 'total_value_label',
6465
- elements: [{
6466
- element_type: 'input',
6467
- value_name: 'total_value_label_text',
6468
- element_label: 'Total value label text for donut chart',
6469
- default_value: 'Total'
6470
- }]
6471
- },
6472
- 'chart_position': {
6473
- category_class: 'google-visualization-charteditor-mini-more',
6474
- category_label: 'Chart position',
6475
- category_type: 'chart_position',
6476
- elements: [
6477
- {
6478
- element_type: 'input',
6479
- value_name: 'margin_top',
6480
- element_label: 'Marging top',
6481
- default_value: 0,
6482
- },
6483
- {
6484
- element_type: 'input',
6485
- value_name: 'margin_right',
6486
- element_label: 'Marging right',
6487
- default_value: 0,
6488
- },
6489
- {
6490
- element_type: 'input',
6491
- value_name: 'margin_bottom',
6492
- element_label: 'Marging bottom',
6493
- default_value: 0,
6494
- },
6495
- {
6496
- element_type: 'input',
6497
- value_name: 'margin_left',
6498
- element_label: 'Marging left',
6499
- default_value: 0,
6500
- },
6501
- {
6502
- element_type: 'input',
6503
- value_name: 'spacing_top',
6504
- element_label: 'Spacing top',
6505
- default_value: 0,
6506
- },
6507
- {
6508
- element_type: 'input',
6509
- value_name: 'spacing_right',
6510
- element_label: 'Spacing right',
6511
- default_value: 0,
6512
- },
6513
- {
6514
- element_type: 'input',
6515
- value_name: 'spacing_bottom',
6516
- element_label: 'Spacing bottom',
6517
- default_value: 0,
6518
- },
6519
- {
6520
- element_type: 'input',
6521
- value_name: 'spacing_left',
6522
- element_label: 'Spacing left',
6523
- default_value: 0,
6524
- },
6525
- ]
6526
- },
6527
- 'label': {
6528
- category_class: 'google-visualization-charteditor-mini-more',
6529
- category_label: 'Label',
6530
- category_type: 'label',
6531
- elements: [
6532
- {
6533
- element_type: 'toggle',
6534
- element_label: 'Show',
6535
- value_name: 'show',
6536
- default_value: true,
6537
- disabled_str: '!{var}.show_out_of_x_axis && !{var}.show_out_of_data_series && !{var}.show_value',
6538
- disabled_fn: (value) => !value.show_out_of_x_axis && !value.show_out_of_data_series && !value.show_value,
6539
- },
6540
- {
6541
- element_type: 'toggle',
6542
- element_label: 'Overlap',
6543
- value_name: 'overlap',
6544
- default_value: false
6545
- },
6546
- {
6547
- element_type: 'toggle',
6548
- element_label: 'Vertical',
6549
- value_name: 'vertical',
6550
- default_value: false,
6551
- showFn: chartHasVerticalDataLabelsOption,
6552
- },
6553
- {
6554
- element_type: 'devider',
6555
- },
6556
- {
6557
- element_type: 'devider',
6558
- element_label: 'Label Style',
6559
- },
6560
- {
6561
- element_type: 'select',
6562
- value_name: 'font_style',
6563
- element_label: 'Font style',
6564
- element_options: SUBOPTIONS_FONTS,
6565
- default_value: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
6566
- },
6567
- {
6568
- element_type: 'select',
6569
- value_name: 'font_size',
6570
- element_label: 'Font size',
6571
- element_options: suboptionsFontSizeValues,
6572
- default_value: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
6573
- },
6574
- {
6575
- element_type: 'color_picker',
6576
- value_name: 'font_color',
6577
- element_label: 'Font Color',
6578
- default_value: LABEL_DEFAULT_SETTINGS.FONT_COLOR
6579
- },
6580
- {
6581
- element_type: 'devider',
6582
- },
6583
- {
6584
- element_type: 'checkbox',
6585
- element_label: 'Value',
6586
- value_name: 'show_value',
6587
- default_value: true,
6588
- clickFn: (value) => value.show = value.show ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value : value.show,
6589
- },
6590
- {
6591
- element_type: 'checkbox',
6592
- element_label: '% Out of [X Axis]',
6593
- value_name: 'show_out_of_x_axis',
6594
- default_value: false,
6595
- clickFn: (value) => value.show = value.show ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value : value.show,
6596
- },
6597
- {
6598
- element_type: 'checkbox',
6599
- element_label: '% Out of [Data Series]',
6600
- value_name: 'show_out_of_data_series',
6601
- default_value: false,
6602
- clickFn: (value) => value.show = value.show ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value : value.show,
6603
- },
6604
- ]
6605
- },
6606
- 'label_pie': {
6607
- category_class: 'google-visualization-charteditor-mini-more',
6608
- category_label: 'Label',
6609
- category_type: 'label_pie',
6610
- elements: [
6611
- {
6612
- element_type: 'toggle',
6613
- element_label: 'Show',
6614
- value_name: 'show',
6615
- default_value: false,
6616
- disabled_str: '!{var}.show_percentage_in_labels && !{var}.show_value_in_labels',
6617
- disabled_fn: (value) => !value.show_percentage_in_labels && !value.show_value_in_labels,
6618
- },
6619
- {
6620
- element_type: 'toggle',
6621
- element_label: 'Overlap',
6622
- value_name: 'overlap',
6623
- default_value: false
6624
- },
6625
- {
6626
- element_type: 'toggle',
6627
- element_label: 'Use area color',
6628
- value_name: 'use_area_color',
6629
- default_value: false
6630
- },
6631
- {
6632
- element_type: 'devider',
6633
- },
6634
- {
6635
- element_type: 'devider',
6636
- element_label: 'Label Style',
6637
- },
6638
- {
6639
- element_type: 'select',
6640
- value_name: 'font_style',
6641
- element_label: 'Font style',
6642
- element_options: SUBOPTIONS_FONTS,
6643
- default_value: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
6644
- },
6645
- {
6646
- element_type: 'select',
6647
- value_name: 'font_size',
6648
- element_label: 'Font size',
6649
- element_options: suboptionsFontSizeValues,
6650
- default_value: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
6651
- },
6652
- {
6653
- element_type: 'color_picker',
6654
- value_name: 'font_color',
6655
- element_label: 'Font Color',
6656
- default_value: LABEL_DEFAULT_SETTINGS.FONT_COLOR
6657
- },
6658
- {
6659
- element_type: 'devider',
6660
- },
6661
- {
6662
- element_type: 'checkbox',
6663
- element_label: 'Value',
6664
- value_name: 'show_value_in_labels',
6665
- default_value: true,
6666
- clickFn: (value) => value.show = value.show ? value.show_percentage_in_labels || value.show_value_in_labels : value.show,
6667
- },
6668
- {
6669
- element_type: 'checkbox',
6670
- element_label: 'Show %',
6671
- value_name: 'show_percentage_in_labels',
6672
- default_value: false,
6673
- clickFn: (value) => value.show = value.show ? value.show_percentage_in_labels || value.show_value_in_labels : value.show,
6674
- },
6675
- ]
6676
- },
6677
- 'label_gauge': {
6678
- category_class: 'google-visualization-charteditor-mini-more',
6679
- category_label: 'Label',
6680
- category_type: 'label',
6681
- elements: [
6682
- {
6683
- element_type: 'toggle',
6684
- element_label: 'Show',
6685
- value_name: 'show',
6686
- default_value: true,
6687
- },
6688
- {
6689
- element_type: 'devider',
6690
- },
6691
- {
6692
- element_type: 'devider',
6693
- element_label: 'Label Style',
6694
- },
6695
- {
6696
- element_type: 'select',
6697
- value_name: 'font_style',
6698
- element_label: 'Font style',
6699
- element_options: SUBOPTIONS_FONTS,
6700
- default_value: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
6701
- },
6702
- {
6703
- element_type: 'select',
6704
- value_name: 'font_size',
6705
- element_label: 'Font size',
6706
- element_options: suboptionsFontSizeValues,
6707
- default_value: 16,
6708
- },
6709
- {
6710
- element_type: 'color_picker',
6711
- value_name: 'font_color',
6712
- element_label: 'Font Color',
6713
- default_value: '#333'
6714
- },
6715
- {
6716
- element_type: 'devider',
6717
- },
6718
- {
6719
- element_type: 'checkbox',
6720
- element_label: 'Value % out of Goal',
6721
- value_name: 'show_percentage_in_value',
6722
- default_value: false,
6723
- },
6724
- {
6725
- element_type: 'checkbox',
6726
- element_label: 'Segment % out Goal',
6727
- value_name: 'show_percentage_in_segments',
6728
- default_value: false,
6729
- },
6730
- {
6731
- element_type: 'checkbox',
6732
- element_label: 'Show Goal label',
6733
- value_name: 'show_goal_name',
6734
- default_value: true,
6735
- },
6736
- {
6737
- element_type: 'input',
6738
- show_in_one_row: true,
6739
- element_label: 'Goal name',
6740
- value_name: 'goal_name',
6741
- default_value: 'Goal',
6742
- showFn: () => highchartsRenderer.hasFeature(FEATURES.ENABLE_GAUGE_DYNAMIC_GOAL),
6743
- },
6744
- ]
6745
- },
6746
- 'label_with_percentage': {
6747
- category_class: 'google-visualization-charteditor-mini-more',
6748
- category_label: 'Label',
6749
- category_type: 'label',
6750
- elements: [
6751
- {
6752
- element_type: 'toggle',
6753
- element_label: 'Show',
6754
- value_name: 'show',
6755
- default_value: true,
6756
- disabled_str: '!{var}.show_out_of_x_axis && !{var}.show_out_of_data_series && !{var}.show_value',
6757
- disabled_fn: (value) => !value.show_out_of_x_axis && !value.show_out_of_data_series && !value.show_value,
6758
- },
6759
- {
6760
- element_type: 'toggle',
6761
- element_label: 'Overlap',
6762
- value_name: 'overlap',
6763
- default_value: false
6764
- },
6765
- {
6766
- element_type: 'toggle',
6767
- element_label: 'Vertical',
6768
- value_name: 'vertical',
6769
- default_value: false,
6770
- showFn: chartHasVerticalDataLabelsOption,
6771
- },
6772
- {
6773
- element_type: 'toggle',
6774
- element_label: 'Shadow',
6775
- value_name: 'shadow',
6776
- default_value: false
6777
- },
6778
- {
6779
- element_type: 'toggle',
6780
- element_label: 'Hide subtotals',
6781
- value_name: 'hide_subtotals',
6782
- default_value: false
6783
- },
6784
- {
6785
- element_type: 'devider',
6786
- },
6787
- {
6788
- element_type: 'devider',
6789
- element_label: 'Label Style',
6790
- },
6791
- {
6792
- element_type: 'select',
6793
- value_name: 'font_style',
6794
- element_label: 'Font style',
6795
- element_options: SUBOPTIONS_FONTS,
6796
- default_value: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
6797
- },
6798
- {
6799
- element_type: 'select',
6800
- value_name: 'font_size',
6801
- element_label: 'Font size',
6802
- element_options: suboptionsFontSizeValues,
6803
- default_value: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
6804
- },
6805
- {
6806
- element_type: 'color_picker',
6807
- value_name: 'font_color',
6808
- element_label: 'Font Color',
6809
- default_value: LABEL_DEFAULT_SETTINGS.FONT_COLOR
6810
- },
6811
- {
6812
- element_type: 'devider',
6813
- },
6814
- {
6815
- element_type: 'checkbox',
6816
- element_label: 'Value',
6817
- value_name: 'show_value',
6818
- default_value: true,
6819
- clickFn: (value) => value.show = value.show ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value : value.show,
6820
- },
6821
- {
6822
- element_type: 'checkbox',
6823
- element_label: '% Out of [X Axis]',
6824
- value_name: 'show_out_of_x_axis',
6825
- default_value: false,
6826
- clickFn: (value) => value.show = value.show ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value : value.show,
6827
- },
6828
- {
6829
- element_type: 'checkbox',
6830
- element_label: '% Out of [Data Series]',
6831
- value_name: 'show_out_of_data_series',
6832
- default_value: false,
6833
- clickFn: (value) => value.show = value.show ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value : value.show,
6834
- },
6835
- {
6836
- element_type: 'checkbox',
6837
- element_label: 'Show total',
6838
- value_name: 'present_total',
6839
- default_value: false,
6840
- },
6841
- {
6842
- element_type: 'checkbox',
6843
- element_label: 'Show total %',
6844
- value_name: 'show_percentage',
6845
- default_value: false
6846
- },
6847
- ]
6848
- },
6849
- 'axisY': {
6850
- category_class: 'google-visualization-charteditor-mini-more',
6851
- category_label: 'Y Axis',
6852
- category_type: 'axisY',
6853
- elements: [{
6854
- element_type: 'checkbox',
6855
- value_name: 'autoylabel',
6856
- element_label: 'Auto label y axis',
6857
- default_value: true
6858
- },
6859
- {
6860
- element_type: 'input',
6861
- value_name: 'name',
6862
- element_label: 'Y axis label',
6863
- default_value: '',
6864
- onChange: (value) => value.autoylabel = false,
6865
- },
6866
- {
6867
- element_type: 'input',
6868
- value_name: 'min',
6869
- element_label: 'Min',
6870
- default_value: null
6871
- },
6872
- {
6873
- element_type: 'input',
6874
- value_name: 'max',
6875
- element_label: 'Max',
6876
- default_value: null
6877
- }
6878
- ]
6879
- },
6880
- 'axisX': {
6881
- category_class: 'google-visualization-charteditor-mini-more',
6882
- category_label: 'X Axis',
6883
- category_type: 'axisX',
6884
- elements: [
6885
- {
6886
- element_type: 'checkbox',
6887
- value_name: 'autoxlabel',
6888
- element_label: 'Auto label x axis',
6889
- default_value: true
6890
- },
6891
- {
6892
- element_type: 'input',
6893
- value_name: 'name',
6894
- element_label: 'X axis label',
6895
- default_value: '',
6896
- onChange: (value) => value.autoxlabel = false
6897
- },
6898
- {
6899
- element_type: 'input',
6900
- value_name: 'min',
6901
- element_label: 'Min',
6902
- default_value: null
6903
- },
6904
- {
6905
- element_type: 'input',
6906
- value_name: 'max',
6907
- element_label: 'Max',
6908
- default_value: null
6909
- },
6910
- {
6911
- element_type: 'input',
6912
- value_name: 'label_step',
6913
- element_label: 'Label step',
6914
- default_value: null,
6915
- label_tooltip: 'Show indicators at custom numeric interval'
6916
- },
6917
- {
6918
- element_type: 'checkbox',
6919
- value_name: 'zoom_x',
6920
- element_label: 'Zoom x',
6921
- default_value: false
6922
- }
6923
- ]
6924
- },
6925
- 'ticks': {
6926
- category_class: 'google-visualization-charteditor-mini-more',
6927
- category_label: 'Ticks',
6928
- category_type: 'ticks',
6929
- elements: [{
6930
- element_type: 'checkbox',
6931
- element_label: 'Show',
6932
- value_name: 'show',
6933
- default_value: true
6934
- }]
6935
- },
6936
- 'tooltips': {
6937
- category_class: 'google-visualization-charteditor-mini-more',
6938
- category_label: 'Tooltip',
6939
- category_type: 'tooltips',
6940
- elements: [
6941
- {
6942
- element_type: 'toggle',
6943
- element_label: 'Show',
6944
- value_name: 'show',
6945
- default_value: true,
6946
- disabled_str: '!{var}.show_out_of_x_axis && !{var}.show_out_of_data_series && !{var}.show_value && !{var}.show_x_axis && !{var}.show_data_series',
6947
- disabled_fn: (value) => !value.show_out_of_x_axis
6948
- && !value.show_out_of_data_series
6949
- && !value.show_value
6950
- && !value.show_x_axis
6951
- && !value.show_data_series,
6952
- },
6953
- {
6954
- element_type: 'devider',
6955
- },
6956
- {
6957
- element_type: 'devider',
6958
- element_label: 'Tooltip Style',
6959
- },
6960
- {
6961
- element_type: 'select',
6962
- value_name: 'font_style',
6963
- element_label: 'Font style',
6964
- element_options: SUBOPTIONS_FONTS,
6965
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_FAMILY,
6966
- },
6967
- {
6968
- element_type: 'select',
6969
- value_name: 'font_size',
6970
- element_label: 'Font size',
6971
- element_options: suboptionsFontSizeValues,
6972
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_SIZE,
6973
- },
6974
- {
6975
- element_type: 'color_picker',
6976
- value_name: 'font_color',
6977
- element_label: 'Font Color',
6978
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_COLOR
6979
- },
6980
- {
6981
- element_type: 'devider',
6982
- },
6983
- {
6984
- element_type: 'checkbox',
6985
- element_label: '[X Axis]',
6986
- value_name: 'show_x_axis',
6987
- default_value: true,
6988
- clickFn: (value) => value.show = value.show
6989
- ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value || value.show_x_axis || value.show_data_series
6990
- : value.show,
6991
- },
6992
- {
6993
- element_type: 'checkbox',
6994
- element_label: '[Data Series]',
6995
- value_name: 'show_data_series',
6996
- default_value: true,
6997
- clickFn: (value) => value.show = value.show
6998
- ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value || value.show_x_axis || value.show_data_series
6999
- : value.show,
7000
- },
7001
- {
7002
- element_type: 'checkbox',
7003
- element_label: 'Value',
7004
- value_name: 'show_value',
7005
- default_value: true,
7006
- clickFn: (value) => value.show = value.show
7007
- ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value || value.show_x_axis || value.show_data_series
7008
- : value.show,
7009
- },
7010
- {
7011
- element_type: 'checkbox',
7012
- element_label: '% Out of [X Axis]',
7013
- value_name: 'show_out_of_x_axis',
7014
- default_value: false,
7015
- clickFn: (value) => value.show = value.show
7016
- ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value || value.show_x_axis || value.show_data_series
7017
- : value.show,
7018
- },
7019
- {
7020
- element_type: 'checkbox',
7021
- element_label: '% Out of [Data Series]',
7022
- value_name: 'show_out_of_data_series',
7023
- default_value: false,
7024
- clickFn: (value) => value.show = value.show
7025
- ? value.show_out_of_x_axis || value.show_out_of_data_series || value.show_value || value.show_x_axis || value.show_data_series
7026
- : value.show,
7027
- },
7028
- ]
7029
- },
7030
- 'tooltips_pie': {
7031
- category_class: 'google-visualization-charteditor-mini-more',
7032
- category_label: 'Tooltip',
7033
- category_type: 'tooltips',
7034
- elements: [
7035
- {
7036
- element_type: 'toggle',
7037
- element_label: 'Show',
7038
- value_name: 'show',
7039
- default_value: true,
7040
- disabled_str: '!{var}.show_percentage && !{var}.show_value',
7041
- disabled_fn: (value) => !value.show_percentage && !value.show_value,
7042
- },
7043
- {
7044
- element_type: 'devider',
7045
- },
7046
- {
7047
- element_type: 'devider',
7048
- element_label: 'Tooltip Style',
7049
- },
7050
- {
7051
- element_type: 'select',
7052
- value_name: 'font_style',
7053
- element_label: 'Font style',
7054
- element_options: SUBOPTIONS_FONTS,
7055
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_FAMILY,
7056
- },
7057
- {
7058
- element_type: 'select',
7059
- value_name: 'font_size',
7060
- element_label: 'Font size',
7061
- element_options: suboptionsFontSizeValues,
7062
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_SIZE,
7063
- },
7064
- {
7065
- element_type: 'color_picker',
7066
- value_name: 'font_color',
7067
- element_label: 'Font Color',
7068
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_COLOR
7069
- },
7070
- {
7071
- element_type: 'devider',
7072
- },
7073
- {
7074
- element_type: 'checkbox',
7075
- element_label: 'Value',
7076
- value_name: 'show_value',
7077
- default_value: true,
7078
- clickFn: (value) => value.show = value.show ? value.show_percentage || value.show_value : value.show,
7079
- },
7080
- {
7081
- element_type: 'checkbox',
7082
- element_label: 'Show %',
7083
- value_name: 'show_percentage',
7084
- default_value: false,
7085
- clickFn: (value) => value.show = value.show ? value.show_percentage || value.show_value : value.show,
7086
- },
7087
- ]
7088
- },
7089
- 'tooltips_gauge': {
7090
- category_class: 'google-visualization-charteditor-mini-more',
7091
- category_label: 'Tooltip',
7092
- category_type: 'tooltips',
7093
- elements: [
7094
- {
7095
- element_type: 'toggle',
7096
- element_label: 'Show',
7097
- value_name: 'show',
7098
- default_value: true,
7099
- },
7100
- {
7101
- element_type: 'devider',
7102
- },
7103
- {
7104
- element_type: 'devider',
7105
- element_label: 'Tooltip Style',
7106
- },
7107
- {
7108
- element_type: 'select',
7109
- value_name: 'font_style',
7110
- element_label: 'Font style',
7111
- element_options: SUBOPTIONS_FONTS,
7112
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_FAMILY,
7113
- },
7114
- {
7115
- element_type: 'select',
7116
- value_name: 'font_size',
7117
- element_label: 'Font size',
7118
- element_options: suboptionsFontSizeValues,
7119
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_SIZE,
7120
- },
7121
- {
7122
- element_type: 'color_picker',
7123
- value_name: 'font_color',
7124
- element_label: 'Font Color',
7125
- default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_COLOR
7126
- },
7127
- {
7128
- element_type: 'devider',
7129
- },
7130
- {
7131
- element_type: 'checkbox',
7132
- element_label: 'Segment name',
7133
- value_name: 'show_segment_name',
7134
- default_value: true,
7135
- },
7136
- {
7137
- element_type: 'checkbox',
7138
- element_label: 'Value % out of Goal',
7139
- value_name: 'show_percentage_in_value',
7140
- default_value: true,
7141
- },
7142
- {
7143
- element_type: 'checkbox',
7144
- element_label: 'Segment % out Goal',
7145
- value_name: 'show_percentage_in_segments',
7146
- default_value: true,
7147
- },
7148
- ]
7149
- },
7150
- 'negative_number_format': {
7151
- is_hidden: true,
7152
- category_class: 'google-visualization-charteditor-mini-more',
7153
- category_label: 'Negative num',
7154
- category_type: 'negative_numbers',
7155
- elements: [{
7156
- element_type: 'radio',
7157
- value_name: 'value',
7158
- element_label: 'Show like',
7159
- element_options: [
7160
- {label: '-1234', value: 'minus'},
7161
- {label: '-1234[red]', value: 'red_minus'},
7162
- {label: '(1234)', value: 'absolute'},
7163
- {label: '(1234)[red]', value: 'red_absolute'}
7164
- ],
7165
- default_value: 'minus'
7166
- }]
7167
- },
7168
- 'delta_column': {
7169
- category_class: 'google-visualization-charteditor-mini-more',
7170
- category_label: 'Variance',
7171
- category_type: 'delta_column',
7172
- elements: [{
7173
- element_type: 'radio',
7174
- value_name: 'field',
7175
- element_label: 'Select Field',
7176
- element_options: [
7177
- {label: 'None', value: ''},
7178
- {label: 'Axis', value: 'category'},
7179
- {label: 'Legend', value: 'series'},
7180
- ],
7181
- default_value: ''
7182
- }, {
7183
- element_type: 'input',
7184
- value_name: 'name',
7185
- element_label: 'Name',
7186
- default_value: '_Variance'
7187
- }, {
7188
- element_type: 'input',
7189
- value_name: 'formula',
7190
- element_label: 'Formula',
7191
- default_value: 'x2-x1'
7192
- },
7193
- {
7194
- element_type: 'input',
7195
- value_name: 'color',
7196
- element_label: 'Color',
7197
- default_value: ''
7198
- }, {
7199
- element_type: 'radio',
7200
- value_name: 'chart',
7201
- element_label: 'Chart',
7202
- element_options: [
7203
- {label: 'Markers', value: ''},
7204
- {label: 'Line', value: 'line'},
7205
- {label: 'Smooth Line', value: 'spline'},
7206
- {label: 'Column', value: 'column'},
7207
- {label: 'Area', value: 'area'},
7208
- {label: 'Smooth Area', value: 'areaspline'},
7209
- ],
7210
- default_value: ''
7211
- }, {
7212
- element_type: 'checkbox',
7213
- element_label: 'Only variance',
7214
- value_name: 'only_variant',
7215
- default_value: false
7216
- }, {
7217
- element_type: 'checkbox',
7218
- element_label: 'Same yAxis',
7219
- value_name: 'same_yaxis',
7220
- default_value: false,
7221
- hidden: true,
7222
- }, {
7223
- element_type: 'checkbox',
7224
- element_label: 'Same xAxis',
7225
- value_name: 'same_xaxis',
7226
- default_value: false
7227
- }, {
7228
- element_type: 'checkbox',
7229
- element_label: 'Percentage',
7230
- value_name: 'is_percentage',
7231
- default_value: false,
7232
- hidden: true,
7233
- }]
7234
- },
7235
- 'delta_column_for_drill_down': {
7236
- category_class: 'google-visualization-charteditor-mini-more',
7237
- category_label: 'Variance',
7238
- category_type: 'delta_column',
7239
- elements: [{
7240
- element_type: 'radio',
7241
- value_name: 'field',
7242
- element_label: 'Select Field',
7243
- element_options: [
7244
- {label: 'None', value: ''},
7245
- {label: 'Axis', value: 'category'},
7246
- {label: 'Legend', value: 'series'},
7247
- ],
7248
- default_value: ''
7249
- }, {
7250
- element_type: 'input',
7251
- value_name: 'name',
7252
- element_label: 'Name',
7253
- default_value: '_Variance'
7254
- }, {
7255
- element_type: 'input',
7256
- value_name: 'formula',
7257
- element_label: 'Formula',
7258
- default_value: 'x2-x1'
7259
- }, {
7260
- element_type: 'input',
7261
- value_name: 'color',
7262
- element_label: 'Color',
7263
- default_value: ''
7264
- }, {
7265
- element_type: 'radio',
7266
- value_name: 'chart',
7267
- element_label: 'Chart',
7268
- element_options: [
7269
- {label: 'Markers', value: ''},
7270
- {label: 'Line', value: 'line'},
7271
- {label: 'Smooth Line', value: 'spline'},
7272
- {label: 'Column', value: 'column'},
7273
- {label: 'Area', value: 'area'},
7274
- {label: 'Smooth Area', value: 'areaspline'},
7275
- ],
7276
- default_value: ''
7277
- }, {
7278
- element_type: 'checkbox',
7279
- element_label: 'Only variance',
7280
- value_name: 'only_variant',
7281
- default_value: false
7282
- }, {
7283
- element_type: 'checkbox',
7284
- element_label: 'Same yAxis',
7285
- value_name: 'same_yaxis',
7286
- default_value: false,
7287
- hidden: true,
7288
- }, {
7289
- element_type: 'checkbox',
7290
- element_label: 'Same xAxis',
7291
- value_name: 'same_xaxis',
7292
- default_value: false
7293
- }, {
7294
- element_type: 'checkbox',
7295
- element_label: 'Percentage',
7296
- value_name: 'is_percentage',
7297
- default_value: false,
7298
- hidden: true,
7299
- }, {
7300
- element_type: 'checkbox',
7301
- element_label: 'Filter zero values',
7302
- value_name: 'is_filter_zero',
7303
- default_value: false
7304
- }]
7305
- },
7306
- 'advanced': {
7307
- category_class: 'google-visualization-charteditor-mini-more',
7308
- category_label: 'Advanced',
7309
- category_type: 'advanced',
7310
- elements: [
7311
- {
7312
- element_type: 'radio',
7313
- value_name: 'error_policy',
7314
- element_label: 'Error Policy',
7315
- element_options: [
7316
- { label: 'None', value: 'None' },
7317
- { label: 'Error', value: 'Error' },
7318
- { label: 'Zero (0)', value: '0' },
7319
- ],
7320
- default_value: 'None'
7321
- },
7322
- {
7323
- element_type: 'radio',
7324
- value_name: 'from_latest',
7325
- element_label: 'Version',
7326
- element_sub_title: 'From latest:',
7327
- element_options: [
7328
- { label: 'All time dimensions', value: '' },
7329
- { label: 'Submitted', value: 'latest_submitted' },
7330
- { label: 'Most recent time period', value: 'latest_in_last_chronology_date_dimension' },
7331
- {
7332
- label: 'Most recent time period in each filebox',
7333
- value: 'latest_in_last_chronology_date_dimension_in_every_fbs'
7334
- },
7335
- ],
7336
- default_value: ''
7337
- },
7338
- ]
7339
- },
7340
- 'legends': {
7341
- category_class: 'google-visualization-charteditor-mini-more',
7342
- category_label: 'Legends',
7343
- category_type: 'legends_position',
7344
- elements: [{
7345
- element_type: 'radio',
7346
- value_name: 'value',
7347
- element_label: 'Position',
7348
- element_options: [
7349
- {label: 'Top', value: 'top'},
7350
- {label: 'Bottom', value: 'bottom'},
7351
- {label: 'Left', value: 'left'},
7352
- {label: 'Right', value: 'right'},
7353
- {label: 'None', value: 'none'},
7354
- ],
7355
- default_value: ''
7356
- }]
7357
- },
7358
- gauge_goal: {
7359
- is_hidden: true,
7360
- categorys_class: 'google-visualization-charteditor-mini-more',
7361
- category_label: 'Gauge goal',
7362
- category_type: 'goal',
7363
- elements: [
7364
- {
7365
- element_type: 'input',
7366
- value_name: 'title',
7367
- element_label: 'Goal title',
7368
- default_value: 'Goal',
7369
- },
7370
- {
7371
- element_type: 'input',
7372
- value_name: 'value',
7373
- element_label: 'Goal value',
7374
- default_value: 1000000,
7375
- },
7376
- ],
7377
- },
7378
- gauge_segments: {
7379
- is_hidden: true,
7380
- categorys_class: 'google-visualization-charteditor-mini-more',
7381
- category_label: 'Gauge segments',
7382
- category_type: 'segments',
7383
- default_value: GAUGE_OPTIONS_DEFAULT.segments,
7384
- },
7385
- gauge_is_absolute: {
7386
- is_hidden: true,
7387
- categorys_class: 'google-visualization-charteditor-mini-more',
7388
- category_label: 'Gauge is absolute value',
7389
- category_type: 'isAbsoluteValue',
7390
- default_value: false,
7391
- }
7392
- };
6153
+ highchartsRenderer.suboptions = optionsBuilders.createDefaultSuboptions({
6154
+ CHART_TYPES: highchartsRenderer.CHART_TYPES,
6155
+ hasFeature: highchartsRenderer.hasFeature,
6156
+ ENABLE_GAUGE_DYNAMIC_GOAL: FEATURES.ENABLE_GAUGE_DYNAMIC_GOAL,
6157
+ defaultGaugeSegments: GAUGE_OPTIONS_DEFAULT.segments,
6158
+ });
7393
6159
 
7394
6160
  highchartsRenderer.chartsTypesInfo = {
7395
6161
  'waterfall-chart': {
@@ -7561,7 +6327,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7561
6327
  axisTooltipTitle: 'Drag one or more fields to create the Polygons edges.',
7562
6328
  legendTooltipTitle: 'Adding a field in this section will display data points in your chart for each item in that field.',
7563
6329
  },
7564
- 'column-chart': {
6330
+ [optionsBuilders.CHART_TYPES.COLUMN_CHART]: {
7565
6331
  name: 'Column chart',
7566
6332
  label: 'Column',
7567
6333
  title: 'Compare two or more data series in different categories.',
@@ -7573,9 +6339,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7573
6339
  axisTooltipDescription: 'To create a drill-down within this category, drag another field below the first field.',
7574
6340
  legendTooltipTitle: 'Each field in the data series will appear as a separate column in the chart.',
7575
6341
  },
7576
- 'column-chart-stacked': {
6342
+ [optionsBuilders.CHART_TYPES.COLUMN_CHART_STACKED]: {
7577
6343
  name: 'Stacked column chart',
7578
- label: 'Stacked Column',
6344
+ label: 'Stacked column',
7579
6345
  title: 'Useful for explaining part-to-whole comparisons over time, or across categories.',
7580
6346
  description: 'For example, comparison over time of expenses divided into subcategories. The chart describes both total expenses over time and the relation between the different sub-categories.',
7581
6347
  axisName: 'X - Axis',
@@ -7584,7 +6350,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7584
6350
  axisTooltipTitle: 'Drag one or more fields here to create your x-axis. Each item within the field will appear as a different column.',
7585
6351
  legendTooltipTitle: 'Each field item will appear as a different segment within the column.',
7586
6352
  },
7587
- 'bar-chart': {
6353
+ [optionsBuilders.CHART_TYPES.COLUMN_CHART_STACKED_PERCENT]: {
6354
+ name: '100% Stacked column chart',
6355
+ label: '100% Stacked column',
6356
+ title: 'Explains the percentage contribution of each value to a total across categories',
6357
+ description: 'For example, showing each department’s share of total expenses per month.',
6358
+ axisName: 'X - Axis',
6359
+ legendName: 'Data series',
6360
+ startedMessage: 'To get started, drag one field to the x-axis section, and one field to the value section. Best practice: we recommend adding one field to the data series section too.',
6361
+ axisTooltipTitle: 'Drag one or more fields here to create your x-axis. Each item within the field will appear as a different column.',
6362
+ legendTooltipTitle: 'Each field item will appear as a different segment within the column.',
6363
+ },
6364
+ [optionsBuilders.CHART_TYPES.BAR_CHART]: {
7588
6365
  name: 'Bar chart',
7589
6366
  label: 'Bar',
7590
6367
  title: 'Compare one or more data series across a given category.',
@@ -7595,9 +6372,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7595
6372
  axisTooltipTitle: 'Drag one or more fields here to create your y-axis.',
7596
6373
  legendTooltipTitle: 'Each field item will appear as a different segment within the bar.',
7597
6374
  },
7598
- 'bar-chart-stacked': {
6375
+ [optionsBuilders.CHART_TYPES.BAR_CHART_STACKED]: {
7599
6376
  name: 'Stacked bar chart',
7600
- label: 'Stacked Bar',
6377
+ label: 'Stacked bar',
7601
6378
  title: 'Good for explaining part-to-whole comparisons across a given category.',
7602
6379
  description: 'For example, compare between sales-rep contributions to the total Revenue in different regions.',
7603
6380
  axisName: 'Y - Axis',
@@ -7606,6 +6383,17 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7606
6383
  axisTooltipTitle: 'Drag one or more fields here to create your y-axis.',
7607
6384
  legendTooltipTitle: 'Each field item will appear as a different segment within the bar.',
7608
6385
  },
6386
+ [optionsBuilders.CHART_TYPES.BAR_CHART_STACKED_PERCENT]: {
6387
+ name: '100% Stacked bar chart',
6388
+ label: '100% Stacked bar',
6389
+ title: 'Explains the percentage contribution of each value to a total across categories',
6390
+ description: 'For example, showing each department’s share of total expenses per month.',
6391
+ axisName: 'Y - Axis',
6392
+ legendName: 'Data series',
6393
+ startedMessage: 'To get started, drag one field to the y-axis section, and one field to the value section. Best practice: add one field to the Categories section too.',
6394
+ axisTooltipTitle: 'Drag one or more fields here to create your y-axis.',
6395
+ legendTooltipTitle: 'Each field item will appear as a different segment within the bar.',
6396
+ },
7609
6397
  'pie-chart': {
7610
6398
  name: 'Pie chart',
7611
6399
  label: 'Pie Chart',
@@ -7955,6 +6743,26 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7955
6743
  highchartsRenderer.suboptions["advanced"],
7956
6744
  highchartsRenderer.suboptions["legends"],
7957
6745
  ]
6746
+ },
6747
+ {
6748
+ type: optionsBuilders.CHART_TYPES.COLUMN_CHART_STACKED_PERCENT,
6749
+ hidden: !environment.enableStackedPercentCharts,
6750
+ name: highchartsRenderer.chartsTypesInfo[optionsBuilders.CHART_TYPES.COLUMN_CHART_STACKED_PERCENT].name,
6751
+ class: 'google-visualization-charteditor-thumbs-columnchart-stacked-percent',
6752
+ render: highchartsRenderer.ptRenderStackedPercentColumn,
6753
+ suboptions: [
6754
+ highchartsRenderer.suboptions["axisY_percent_stacked"],
6755
+ highchartsRenderer.suboptions["axisX"],
6756
+ highchartsRenderer.suboptions["tooltips"],
6757
+ highchartsRenderer.suboptions["label_with_percentage_percent_stacked"],
6758
+ highchartsRenderer.suboptions["subtitle"],
6759
+ highchartsRenderer.suboptions["widget_library"],
6760
+ highchartsRenderer.suboptions["table_options"],
6761
+ highchartsRenderer.suboptions["table_design_options"],
6762
+ highchartsRenderer.suboptions["chart_grid"],
6763
+ highchartsRenderer.suboptions["advanced"],
6764
+ highchartsRenderer.suboptions["legends"],
6765
+ ]
7958
6766
  }
7959
6767
  ]
7960
6768
  },
@@ -8003,6 +6811,26 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8003
6811
  highchartsRenderer.suboptions["advanced"],
8004
6812
  highchartsRenderer.suboptions["legends"],
8005
6813
  ]
6814
+ },
6815
+ {
6816
+ type: optionsBuilders.CHART_TYPES.BAR_CHART_STACKED_PERCENT,
6817
+ hidden: !environment.enableStackedPercentCharts,
6818
+ name: highchartsRenderer.chartsTypesInfo[optionsBuilders.CHART_TYPES.BAR_CHART_STACKED_PERCENT].name,
6819
+ class: 'google-visualization-charteditor-thumbs-barchart-stacked-percent',
6820
+ render: highchartsRenderer.ptRenderStackedPercentBar,
6821
+ suboptions: [
6822
+ highchartsRenderer.suboptions["axisY_percent_stacked"],
6823
+ highchartsRenderer.suboptions["axisX"],
6824
+ highchartsRenderer.suboptions["tooltips"],
6825
+ highchartsRenderer.suboptions["label_with_percentage_percent_stacked"],
6826
+ highchartsRenderer.suboptions["subtitle"],
6827
+ highchartsRenderer.suboptions["widget_library"],
6828
+ highchartsRenderer.suboptions["table_options_transpose"],
6829
+ highchartsRenderer.suboptions["table_design_options"],
6830
+ highchartsRenderer.suboptions["chart_grid"],
6831
+ highchartsRenderer.suboptions["advanced"],
6832
+ highchartsRenderer.suboptions["legends"],
6833
+ ]
8006
6834
  }
8007
6835
  ]
8008
6836
  },