@agorapulse/ui-charts 18.0.7 → 18.0.8

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.
Binary file
@@ -1,45 +1,75 @@
1
1
  import { ChartColors } from '../chart-colors';
2
2
  import { ChartOptions, mergeDeep } from '../chart-options';
3
+ const HEATMAP_CONSTANTS = {
4
+ CHART_HEIGHT: 680,
5
+ MARGIN_BOTTOM: 100,
6
+ GRID_LINE_WIDTH: 2,
7
+ BORDER_WIDTH: 1,
8
+ FONT_SIZE: '13px',
9
+ HEADER_FONT_SIZE: '12px',
10
+ TOOLTIP_FONT_SIZE: '14px',
11
+ LEGEND_SYMBOL_WIDTH: 300,
12
+ LEGEND_SYMBOL_HEIGHT: 10,
13
+ TICK_INTERVAL: 3,
14
+ DEFAULT_TICK_AMOUNT: 6,
15
+ DEFAULT_MAX_VALUE: 3,
16
+ MIN_VALUE: 0,
17
+ FONT_WEIGHT: 'normal'
18
+ };
19
+ const COLORS = {
20
+ WHITE: '#FFFFFF',
21
+ GRID_LINE: 'white',
22
+ NULL_COLOR: 'white',
23
+ DEFAULT_FONT_COLOR: '#858FA1'
24
+ };
3
25
  export class ChartHeatmapOptions extends ChartOptions {
4
26
  static build(options) {
5
27
  const defaultHeatmapOptions = {
6
28
  chart: {
7
29
  type: 'heatmap',
8
- height: 600,
30
+ height: HEATMAP_CONSTANTS.CHART_HEIGHT,
31
+ marginBottom: HEATMAP_CONSTANTS.MARGIN_BOTTOM
9
32
  },
10
33
  colorAxis: {
11
34
  allowDecimals: false,
12
- gridLineWidth: 2,
13
- gridLineColor: 'white',
14
- min: 0,
35
+ gridLineWidth: HEATMAP_CONSTANTS.GRID_LINE_WIDTH,
36
+ gridLineColor: COLORS.GRID_LINE,
37
+ min: HEATMAP_CONSTANTS.MIN_VALUE,
38
+ minColor: COLORS.WHITE,
15
39
  labels: {
16
40
  style: {
17
- fontSize: '12px',
41
+ fontWeight: HEATMAP_CONSTANTS.FONT_WEIGHT,
42
+ fontSize: HEATMAP_CONSTANTS.FONT_SIZE,
43
+ color: COLORS.DEFAULT_FONT_COLOR,
18
44
  },
45
+ overflow: 'allow',
19
46
  },
20
47
  },
21
48
  legend: {
22
- enabled: false,
49
+ enabled: true,
50
+ layout: 'horizontal',
51
+ align: 'center',
52
+ verticalAlign: 'bottom',
53
+ symbolWidth: HEATMAP_CONSTANTS.LEGEND_SYMBOL_WIDTH,
54
+ symbolHeight: HEATMAP_CONSTANTS.LEGEND_SYMBOL_HEIGHT
23
55
  },
24
56
  plotOptions: {
25
57
  heatmap: {
26
58
  borderColor: ChartColors.GREY_COLORS[10],
27
- borderWidth: 1,
28
- nullColor: 'white',
59
+ borderWidth: HEATMAP_CONSTANTS.BORDER_WIDTH,
60
+ nullColor: COLORS.NULL_COLOR,
29
61
  },
30
62
  },
31
63
  tooltip: {
32
64
  headerFormat: '',
33
65
  pointFormat: `<div style="border-bottom: 1px solid ${ChartColors.GREY_COLORS[10]}; padding: 0 8px 7px">` +
34
- `<span style="font-size: 12px; color: ${ChartColors.GREY_COLORS[60]}">{point.tooltipHeaderLabel}</span></div>` +
35
- `<div style="font-size: 14px; color: ${ChartColors.GREY_COLORS[100]}; margin: 6px 8px 0 8px;">` +
66
+ `<span style="font-size: ${HEATMAP_CONSTANTS.HEADER_FONT_SIZE}; color: ${ChartColors.GREY_COLORS[60]}">{point.tooltipHeaderLabel}</span></div>` +
67
+ `<div style="font-size: ${HEATMAP_CONSTANTS.TOOLTIP_FONT_SIZE}; color: ${ChartColors.GREY_COLORS[100]}; margin: 6px 8px 0 8px;">` +
36
68
  `<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.value}{point.unit}</b></div>`,
37
69
  },
38
70
  xAxis: {
39
71
  labels: {
40
- formatter: function () {
41
- return this.value.toString();
42
- },
72
+ formatter: this.createXAxisFormatter(),
43
73
  },
44
74
  lineWidth: 1,
45
75
  tickWidth: 0,
@@ -47,21 +77,73 @@ export class ChartHeatmapOptions extends ChartOptions {
47
77
  },
48
78
  yAxis: {
49
79
  lineWidth: 0,
50
- tickInterval: 3,
80
+ tickInterval: HEATMAP_CONSTANTS.TICK_INTERVAL,
51
81
  reversed: true,
52
82
  visible: true,
53
83
  },
54
84
  };
55
85
  return super.build(mergeDeep(defaultHeatmapOptions, options));
56
86
  }
57
- static configureHeatmap(categoriesX, categoriesY, series, options, labelDateFormat) {
58
- super.configure(series, options, undefined, labelDateFormat);
59
- if (categoriesX && categoriesX.length) {
87
+ static createColorAxisFormatter(leastLabel, mostLabel) {
88
+ return function () {
89
+ if (this.value === this.axis.min) {
90
+ return leastLabel;
91
+ }
92
+ if (this.value === this.axis.max) {
93
+ return mostLabel;
94
+ }
95
+ return '';
96
+ };
97
+ }
98
+ static createXAxisFormatter() {
99
+ return function () {
100
+ return this.value.toString();
101
+ };
102
+ }
103
+ static configureHeatmap(categoriesX, categoriesY, series, options, color, leastLabel, mostLabel, labelDateFormat) {
104
+ super.configure(series, options, color, labelDateFormat);
105
+ this.setAxisCategories(options, categoriesX, categoriesY);
106
+ const points = series[0].data;
107
+ const maxValue = points.reduce((max, point) => Math.max(max, point.value), 0);
108
+ this.configureColorAxis(options, color, leastLabel, mostLabel, maxValue);
109
+ this.configureLegend(options);
110
+ }
111
+ static setAxisCategories(options, categoriesX, categoriesY) {
112
+ if (categoriesX?.length) {
60
113
  options.xAxis.categories = categoriesX;
61
114
  }
62
- if (categoriesY && categoriesY.length) {
115
+ if (categoriesY?.length) {
63
116
  options.yAxis.categories = categoriesY;
64
117
  }
65
118
  }
119
+ static configureColorAxis(options, color, leastLabel, mostLabel, maxValue) {
120
+ const tickPositions = this.buildTickPositions(maxValue);
121
+ options.colorAxis = {
122
+ ...(options.colorAxis || {}),
123
+ min: HEATMAP_CONSTANTS.MIN_VALUE,
124
+ max: HEATMAP_CONSTANTS.DEFAULT_MAX_VALUE,
125
+ tickPositions,
126
+ maxColor: ChartColors.getChartColors(color)[100],
127
+ labels: {
128
+ ...(options.colorAxis?.labels || {}),
129
+ formatter: this.createColorAxisFormatter(leastLabel, mostLabel)
130
+ }
131
+ };
132
+ }
133
+ static configureLegend(options) {
134
+ options.legend = {
135
+ ...options.legend,
136
+ enabled: true,
137
+ };
138
+ }
139
+ static buildTickPositions(maxValue) {
140
+ const tickAmount = HEATMAP_CONSTANTS.DEFAULT_TICK_AMOUNT;
141
+ // Calculate the step between each tick
142
+ // We subtract 1 from tickAmount so that the last tick is exactly at maxValue
143
+ const step = maxValue / (tickAmount - 1);
144
+ // Generate an array of positions for the ticks
145
+ // Each position is calculated as i * step and rounded to 2 decimal places
146
+ return Array.from({ length: tickAmount }, (_, i) => parseFloat((i * step).toFixed(2)));
147
+ }
66
148
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVhdG1hcC1vcHRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS1jaGFydHMvc3JjL2xpYi9jaGFydC1oZWF0bWFwL2NoYXJ0LWhlYXRtYXAtb3B0aW9ucy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsWUFBWTtJQUNqRCxNQUFNLENBQVUsS0FBSyxDQUFDLE9BQTJCO1FBQzdDLE1BQU0scUJBQXFCLEdBQXVCO1lBQzlDLEtBQUssRUFBRTtnQkFDSCxJQUFJLEVBQUUsU0FBUztnQkFDZixNQUFNLEVBQUUsR0FBRzthQUNkO1lBQ0QsU0FBUyxFQUFFO2dCQUNQLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixhQUFhLEVBQUUsQ0FBQztnQkFDaEIsYUFBYSxFQUFFLE9BQU87Z0JBQ3RCLEdBQUcsRUFBRSxDQUFDO2dCQUNOLE1BQU0sRUFBRTtvQkFDSixLQUFLLEVBQUU7d0JBQ0gsUUFBUSxFQUFFLE1BQU07cUJBQ25CO2lCQUNKO2FBQ0o7WUFDRCxNQUFNLEVBQUU7Z0JBQ0osT0FBTyxFQUFFLEtBQUs7YUFDakI7WUFDRCxXQUFXLEVBQUU7Z0JBQ1QsT0FBTyxFQUFFO29CQUNMLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDeEMsV0FBVyxFQUFFLENBQUM7b0JBQ2QsU0FBUyxFQUFFLE9BQU87aUJBQ3JCO2FBQ0o7WUFDRCxPQUFPLEVBQUU7Z0JBQ0wsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLFdBQVcsRUFDUCx3Q0FBd0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsd0JBQXdCO29CQUMzRix3Q0FBd0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsMkNBQTJDO29CQUM5Ryx1Q0FBdUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsNEJBQTRCO29CQUMvRix1R0FBdUc7YUFDOUc7WUFDRCxLQUFLLEVBQUU7Z0JBQ0gsTUFBTSxFQUFFO29CQUNKLFNBQVMsRUFBRTt3QkFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2pDLENBQUM7aUJBQ0o7Z0JBQ0QsU0FBUyxFQUFFLENBQUM7Z0JBQ1osU0FBUyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxFQUFFLElBQUk7YUFDaEI7WUFDRCxLQUFLLEVBQUU7Z0JBQ0gsU0FBUyxFQUFFLENBQUM7Z0JBQ1osWUFBWSxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsT0FBTyxFQUFFLElBQUk7YUFDaEI7U0FDSixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQ25CLFdBQXFCLEVBQ3JCLFdBQXFCLEVBQ3JCLE1BQXNDLEVBQ3RDLE9BQTJCLEVBQzNCLGVBQXdCO1FBRXhCLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDN0QsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxLQUFpQyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsS0FBaUMsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBIaWdoY2hhcnRzIGZyb20gJ2hpZ2hjaGFydHMnO1xuaW1wb3J0IHsgQ2hhcnRDb2xvcnMgfSBmcm9tICcuLi9jaGFydC1jb2xvcnMnO1xuaW1wb3J0IHsgQ2hhcnRPcHRpb25zLCBtZXJnZURlZXAgfSBmcm9tICcuLi9jaGFydC1vcHRpb25zJztcblxuZXhwb3J0IGNsYXNzIENoYXJ0SGVhdG1hcE9wdGlvbnMgZXh0ZW5kcyBDaGFydE9wdGlvbnMge1xuICAgIHN0YXRpYyBvdmVycmlkZSBidWlsZChvcHRpb25zOiBIaWdoY2hhcnRzLk9wdGlvbnMpOiBIaWdoY2hhcnRzLk9wdGlvbnMge1xuICAgICAgICBjb25zdCBkZWZhdWx0SGVhdG1hcE9wdGlvbnM6IEhpZ2hjaGFydHMuT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNoYXJ0OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2hlYXRtYXAnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbG9yQXhpczoge1xuICAgICAgICAgICAgICAgIGFsbG93RGVjaW1hbHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGdyaWRMaW5lV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgZ3JpZExpbmVDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGxvdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBoZWF0bWFwOiB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBDaGFydENvbG9ycy5HUkVZX0NPTE9SU1sxMF0sXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICAgICAgICBudWxsQ29sb3I6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyRm9ybWF0OiAnJyxcbiAgICAgICAgICAgICAgICBwb2ludEZvcm1hdDpcbiAgICAgICAgICAgICAgICAgICAgYDxkaXYgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtDaGFydENvbG9ycy5HUkVZX0NPTE9SU1sxMF19OyBwYWRkaW5nOiAwIDhweCA3cHhcIj5gICtcbiAgICAgICAgICAgICAgICAgICAgYDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4OyBjb2xvcjogJHtDaGFydENvbG9ycy5HUkVZX0NPTE9SU1s2MF19XCI+e3BvaW50LnRvb2x0aXBIZWFkZXJMYWJlbH08L3NwYW4+PC9kaXY+YCArXG4gICAgICAgICAgICAgICAgICAgIGA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBjb2xvcjogJHtDaGFydENvbG9ycy5HUkVZX0NPTE9SU1sxMDBdfTsgbWFyZ2luOiA2cHggOHB4IDAgOHB4O1wiPmAgK1xuICAgICAgICAgICAgICAgICAgICBgPHNwYW4gc3R5bGU9XCJjb2xvcjp7cG9pbnQuY29sb3J9XCI+XFx1MjVDRjwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50LnZhbHVlfXtwb2ludC51bml0fTwvYj48L2Rpdj5gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhBeGlzOiB7XG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogMSxcbiAgICAgICAgICAgICAgICB0aWNrV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5QXhpczoge1xuICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogMCxcbiAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw6IDMsXG4gICAgICAgICAgICAgICAgcmV2ZXJzZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5idWlsZChtZXJnZURlZXAoZGVmYXVsdEhlYXRtYXBPcHRpb25zLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvbmZpZ3VyZUhlYXRtYXAoXG4gICAgICAgIGNhdGVnb3JpZXNYOiBzdHJpbmdbXSxcbiAgICAgICAgY2F0ZWdvcmllc1k6IHN0cmluZ1tdLFxuICAgICAgICBzZXJpZXM6IEhpZ2hjaGFydHMuU2VyaWVzT3B0aW9uc1R5cGVbXSxcbiAgICAgICAgb3B0aW9uczogSGlnaGNoYXJ0cy5PcHRpb25zLFxuICAgICAgICBsYWJlbERhdGVGb3JtYXQ/OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgc3VwZXIuY29uZmlndXJlKHNlcmllcywgb3B0aW9ucywgdW5kZWZpbmVkLCBsYWJlbERhdGVGb3JtYXQpO1xuICAgICAgICBpZiAoY2F0ZWdvcmllc1ggJiYgY2F0ZWdvcmllc1gubGVuZ3RoKSB7XG4gICAgICAgICAgICAob3B0aW9ucy54QXhpcyBhcyBIaWdoY2hhcnRzLlhBeGlzT3B0aW9ucykuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXNYO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYXRlZ29yaWVzWSAmJiBjYXRlZ29yaWVzWS5sZW5ndGgpIHtcbiAgICAgICAgICAgIChvcHRpb25zLnlBeGlzIGFzIEhpZ2hjaGFydHMuWUF4aXNPcHRpb25zKS5jYXRlZ29yaWVzID0gY2F0ZWdvcmllc1k7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVhdG1hcC1vcHRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS1jaGFydHMvc3JjL2xpYi9jaGFydC1oZWF0bWFwL2NoYXJ0LWhlYXRtYXAtb3B0aW9ucy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQVN6RCxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLFlBQVksRUFBRSxHQUFHO0lBQ2pCLGFBQWEsRUFBRSxHQUFHO0lBQ2xCLGVBQWUsRUFBRSxDQUFDO0lBQ2xCLFlBQVksRUFBRSxDQUFDO0lBQ2YsU0FBUyxFQUFFLE1BQU07SUFDakIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixpQkFBaUIsRUFBRSxNQUFNO0lBQ3pCLG1CQUFtQixFQUFFLEdBQUc7SUFDeEIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QixhQUFhLEVBQUUsQ0FBQztJQUNoQixtQkFBbUIsRUFBRSxDQUFDO0lBQ3RCLGlCQUFpQixFQUFFLENBQUM7SUFDcEIsU0FBUyxFQUFFLENBQUM7SUFDWixXQUFXLEVBQUUsUUFBUTtDQUNmLENBQUM7QUFFWCxNQUFNLE1BQU0sR0FBRztJQUNYLEtBQUssRUFBRSxTQUFTO0lBQ2hCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFVBQVUsRUFBRSxPQUFPO0lBQ25CLGtCQUFrQixFQUFFLFNBQVM7Q0FDdkIsQ0FBQztBQUVYLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxZQUFZO0lBQ2pELE1BQU0sQ0FBVSxLQUFLLENBQUMsT0FBZ0I7UUFDbEMsTUFBTSxxQkFBcUIsR0FBWTtZQUNuQyxLQUFLLEVBQUU7Z0JBQ0gsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsTUFBTSxFQUFFLGlCQUFpQixDQUFDLFlBQVk7Z0JB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IjpbImltcG9ydCB7Q2hhcnRDb2xvciwgQ2hhcnRDb2xvcnN9IGZyb20gJy4uL2NoYXJ0LWNvbG9ycyc7XG5pbXBvcnQge0NoYXJ0T3B0aW9ucywgbWVyZ2VEZWVwfSBmcm9tICcuLi9jaGFydC1vcHRpb25zJztcbmltcG9ydCB0eXBlIHtcbiAgICBBeGlzTGFiZWxzRm9ybWF0dGVyQ2FsbGJhY2tGdW5jdGlvbiwgQ29sb3JBeGlzT3B0aW9ucyxcbiAgICBPcHRpb25zLFxuICAgIFNlcmllc0xpbmVPcHRpb25zLFxuICAgIFNlcmllc09wdGlvbnNUeXBlLFxuICAgIFhBeGlzT3B0aW9ucywgWUF4aXNPcHRpb25zXG59IGZyb20gJ2hpZ2hjaGFydHMnO1xuXG5jb25zdCBIRUFUTUFQX0NPTlNUQU5UUyA9IHtcbiAgICBDSEFSVF9IRUlHSFQ6IDY4MCxcbiAgICBNQVJHSU5fQk9UVE9NOiAxMDAsXG4gICAgR1JJRF9MSU5FX1dJRFRIOiAyLFxuICAgIEJPUkRFUl9XSURUSDogMSxcbiAgICBGT05UX1NJWkU6ICcxM3B4JyxcbiAgICBIRUFERVJfRk9OVF9TSVpFOiAnMTJweCcsXG4gICAgVE9PTFRJUF9GT05UX1NJWkU6ICcxNHB4JyxcbiAgICBMRUdFTkRfU1lNQk9MX1dJRFRIOiAzMDAsXG4gICAgTEVHRU5EX1NZTUJPTF9IRUlHSFQ6IDEwLFxuICAgIFRJQ0tfSU5URVJWQUw6IDMsXG4gICAgREVGQVVMVF9USUNLX0FNT1VOVDogNixcbiAgICBERUZBVUxUX01BWF9WQUxVRTogMyxcbiAgICBNSU5fVkFMVUU6IDAsXG4gICAgRk9OVF9XRUlHSFQ6ICdub3JtYWwnXG59IGFzIGNvbnN0O1xuXG5jb25zdCBDT0xPUlMgPSB7XG4gICAgV0hJVEU6ICcjRkZGRkZGJyxcbiAgICBHUklEX0xJTkU6ICd3aGl0ZScsXG4gICAgTlVMTF9DT0xPUjogJ3doaXRlJyxcbiAgICBERUZBVUxUX0ZPTlRfQ09MT1I6ICcjODU4RkExJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIENoYXJ0SGVhdG1hcE9wdGlvbnMgZXh0ZW5kcyBDaGFydE9wdGlvbnMge1xuICAgIHN0YXRpYyBvdmVycmlkZSBidWlsZChvcHRpb25zOiBPcHRpb25zKTogT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRIZWF0bWFwT3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNoYXJ0OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2hlYXRtYXAnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogSEVBVE1BUF9DT05TVEFOVFMuQ0hBUlRfSEVJR0hULFxuICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogSEVBVE1BUF9DT05TVEFOVFMuTUFSR0lOX0JPVFRPTVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbG9yQXhpczoge1xuICAgICAgICAgICAgICAgIGFsbG93RGVjaW1hbHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGdyaWRMaW5lV2lkdGg6IEhFQVRNQVBfQ09OU1RBTlRTLkdSSURfTElORV9XSURUSCxcbiAgICAgICAgICAgICAgICBncmlkTGluZUNvbG9yOiBDT0xPUlMuR1JJRF9MSU5FLFxuICAgICAgICAgICAgICAgIG1pbjogSEVBVE1BUF9DT05TVEFOVFMuTUlOX1ZBTFVFLFxuICAgICAgICAgICAgICAgIG1pbkNvbG9yOiBDT0xPUlMuV0hJVEUsXG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBIRUFUTUFQX0NPTlNUQU5UUy5GT05UX1dFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBIRUFUTUFQX0NPTlNUQU5UUy5GT05UX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogQ09MT1JTLkRFRkFVTFRfRk9OVF9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdhbGxvdycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxheW91dDogJ2hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIGFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICBzeW1ib2xXaWR0aDogSEVBVE1BUF9DT05TVEFOVFMuTEVHRU5EX1NZTUJPTF9XSURUSCxcbiAgICAgICAgICAgICAgICBzeW1ib2xIZWlnaHQ6IEhFQVRNQVBfQ09OU1RBTlRTLkxFR0VORF9TWU1CT0xfSEVJR0hUXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGxvdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBoZWF0bWFwOiB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBDaGFydENvbG9ycy5HUkVZX0NPTE9SU1sxMF0sXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiBIRUFUTUFQX0NPTlNUQU5UUy5CT1JERVJfV0lEVEgsXG4gICAgICAgICAgICAgICAgICAgIG51bGxDb2xvcjogQ09MT1JTLk5VTExfQ09MT1IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyRm9ybWF0OiAnJyxcbiAgICAgICAgICAgICAgICBwb2ludEZvcm1hdDpcbiAgICAgICAgICAgICAgICAgICAgYDxkaXYgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtDaGFydENvbG9ycy5HUkVZX0NPTE9SU1sxMF19OyBwYWRkaW5nOiAwIDhweCA3cHhcIj5gICtcbiAgICAgICAgICAgICAgICAgICAgYDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAke0hFQVRNQVBfQ09OU1RBTlRTLkhFQURFUl9GT05UX1NJWkV9OyBjb2xvcjogJHtDaGFydENvbG9ycy5HUkVZX0NPTE9SU1s2MF19XCI+e3BvaW50LnRvb2x0aXBIZWFkZXJMYWJlbH08L3NwYW4+PC9kaXY+YCArXG4gICAgICAgICAgICAgICAgICAgIGA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAke0hFQVRNQVBfQ09OU1RBTlRTLlRPT0xUSVBfRk9OVF9TSVpFfTsgY29sb3I6ICR7Q2hhcnRDb2xvcnMuR1JFWV9DT0xPUlNbMTAwXX07IG1hcmdpbjogNnB4IDhweCAwIDhweDtcIj5gICtcbiAgICAgICAgICAgICAgICAgICAgYDxzcGFuIHN0eWxlPVwiY29sb3I6e3BvaW50LmNvbG9yfVwiPlxcdTI1Q0Y8L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC52YWx1ZX17cG9pbnQudW5pdH08L2I+PC9kaXY+YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeEF4aXM6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IHRoaXMuY3JlYXRlWEF4aXNGb3JtYXR0ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbGluZVdpZHRoOiAxLFxuICAgICAgICAgICAgICAgICAgICB0aWNrV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB5QXhpczoge1xuICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRpY2tJbnRlcnZhbDogSEVBVE1BUF9DT05TVEFOVFMuVElDS19JTlRFUlZBTCxcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmJ1aWxkKG1lcmdlRGVlcChkZWZhdWx0SGVhdG1hcE9wdGlvbnMsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVDb2xvckF4aXNGb3JtYXR0ZXIobGVhc3RMYWJlbDogc3RyaW5nLCBtb3N0TGFiZWw6IHN0cmluZyk6IEF4aXNMYWJlbHNGb3JtYXR0ZXJDYWxsYmFja0Z1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSB0aGlzLmF4aXMubWluKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlYXN0TGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gdGhpcy5heGlzLm1heCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb3N0TGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlWEF4aXNGb3JtYXR0ZXIoKTogQXhpc0xhYmVsc0Zvcm1hdHRlckNhbGxiYWNrRnVuY3Rpb24ge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29uZmlndXJlSGVhdG1hcChcbiAgICAgICAgY2F0ZWdvcmllc1g6IHN0cmluZ1tdLFxuICAgICAgICBjYXRlZ29yaWVzWTogc3RyaW5nW10sXG4gICAgICAgIHNlcmllczogU2VyaWVzT3B0aW9uc1R5cGVbXSxcbiAgICAgICAgb3B0aW9uczogT3B0aW9ucyxcbiAgICAgICAgY29sb3I6IENoYXJ0Q29sb3IsXG4gICAgICAgIGxlYXN0TGFiZWw6IHN0cmluZyxcbiAgICAgICAgbW9zdExhYmVsOiBzdHJpbmcsXG4gICAgICAgIGxhYmVsRGF0ZUZvcm1hdD86IHN0cmluZyxcbiAgICApOiB2b2lkIHtcblxuICAgICAgICBzdXBlci5jb25maWd1cmUoc2VyaWVzLCBvcHRpb25zLCBjb2xvciwgbGFiZWxEYXRlRm9ybWF0KTtcblxuICAgICAgICB0aGlzLnNldEF4aXNDYXRlZ29yaWVzKG9wdGlvbnMsIGNhdGVnb3JpZXNYLCBjYXRlZ29yaWVzWSk7XG5cbiAgICAgICAgY29uc3QgcG9pbnRzID0gKHNlcmllc1swXSBhcyBTZXJpZXNMaW5lT3B0aW9ucykuZGF0YSBhcyB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHZhbHVlOiBudW1iZXJ9W107XG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gcG9pbnRzLnJlZHVjZSgobWF4LCBwb2ludCkgPT4gTWF0aC5tYXgobWF4LCBwb2ludC52YWx1ZSksIDApO1xuXG4gICAgICAgIHRoaXMuY29uZmlndXJlQ29sb3JBeGlzKG9wdGlvbnMsIGNvbG9yLCBsZWFzdExhYmVsLCBtb3N0TGFiZWwsIG1heFZhbHVlKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVMZWdlbmQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2V0QXhpc0NhdGVnb3JpZXMob3B0aW9uczogT3B0aW9ucywgY2F0ZWdvcmllc1g6IHN0cmluZ1tdLCBjYXRlZ29yaWVzWTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNhdGVnb3JpZXNYPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIChvcHRpb25zLnhBeGlzIGFzIFhBeGlzT3B0aW9ucykuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXNYO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYXRlZ29yaWVzWT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAob3B0aW9ucy55QXhpcyBhcyBZQXhpc09wdGlvbnMpLmNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzWTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvbmZpZ3VyZUNvbG9yQXhpcyhvcHRpb25zOiBPcHRpb25zLCBjb2xvcjogQ2hhcnRDb2xvciwgbGVhc3RMYWJlbDogc3RyaW5nLCBtb3N0TGFiZWw6IHN0cmluZywgbWF4VmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0aWNrUG9zaXRpb25zID0gdGhpcy5idWlsZFRpY2tQb3NpdGlvbnMobWF4VmFsdWUpO1xuXG4gICAgICAgIG9wdGlvbnMuY29sb3JBeGlzID0ge1xuICAgICAgICAgICAgLi4uKG9wdGlvbnMuY29sb3JBeGlzIHx8IHt9KSxcbiAgICAgICAgICAgIG1pbjogSEVBVE1BUF9DT05TVEFOVFMuTUlOX1ZBTFVFLFxuICAgICAgICAgICAgbWF4OiBIRUFUTUFQX0NPTlNUQU5UUy5ERUZBVUxUX01BWF9WQUxVRSxcbiAgICAgICAgICAgIHRpY2tQb3NpdGlvbnMsXG4gICAgICAgICAgICBtYXhDb2xvcjogQ2hhcnRDb2xvcnMuZ2V0Q2hhcnRDb2xvcnMoY29sb3IpWzEwMF0sXG4gICAgICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgICAgICAuLi4oKG9wdGlvbnMuY29sb3JBeGlzIGFzIENvbG9yQXhpc09wdGlvbnMpPy5sYWJlbHMgfHwge30pLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogdGhpcy5jcmVhdGVDb2xvckF4aXNGb3JtYXR0ZXIobGVhc3RMYWJlbCwgbW9zdExhYmVsKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvbmZpZ3VyZUxlZ2VuZChvcHRpb25zOiBPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIG9wdGlvbnMubGVnZW5kID0ge1xuICAgICAgICAgICAgLi4ub3B0aW9ucy5sZWdlbmQsXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGJ1aWxkVGlja1Bvc2l0aW9ucyhtYXhWYWx1ZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICBjb25zdCB0aWNrQW1vdW50ID0gSEVBVE1BUF9DT05TVEFOVFMuREVGQVVMVF9USUNLX0FNT1VOVDtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHN0ZXAgYmV0d2VlbiBlYWNoIHRpY2tcbiAgICAgICAgLy8gV2Ugc3VidHJhY3QgMSBmcm9tIHRpY2tBbW91bnQgc28gdGhhdCB0aGUgbGFzdCB0aWNrIGlzIGV4YWN0bHkgYXQgbWF4VmFsdWVcbiAgICAgICAgY29uc3Qgc3RlcCA9IG1heFZhbHVlIC8gKHRpY2tBbW91bnQgLSAxKTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBwb3NpdGlvbnMgZm9yIHRoZSB0aWNrc1xuICAgICAgICAvLyBFYWNoIHBvc2l0aW9uIGlzIGNhbGN1bGF0ZWQgYXMgaSAqIHN0ZXAgYW5kIHJvdW5kZWQgdG8gMiBkZWNpbWFsIHBsYWNlc1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOiB0aWNrQW1vdW50fSwgKF8sIGkpID0+IHBhcnNlRmxvYXQoKGkgKiBzdGVwKS50b0ZpeGVkKDIpKSk7XG4gICAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, input, Input } from '@angular/core';
2
2
  import { mapChart } from 'highcharts/highmaps';
3
3
  import { AbstractChartComponent } from '../abstract-chart.component';
4
4
  import { ChartHeatmapOptions } from './chart-heatmap-options.model';
@@ -7,15 +7,16 @@ export class ChartHeatmapComponent extends AbstractChartComponent {
7
7
  categoriesX = [];
8
8
  categoriesY = [];
9
9
  series = [];
10
+ legendLabels = input.required();
10
11
  initChart() {
11
12
  if (this.series) {
12
13
  const chartOptions = ChartHeatmapOptions.build(this.chartOptions);
13
- ChartHeatmapOptions.configureHeatmap(this.categoriesX, this.categoriesY, this.series, chartOptions, this.labelDateFormat);
14
+ ChartHeatmapOptions.configureHeatmap(this.categoriesX, this.categoriesY, this.series, chartOptions, this.color, this.legendLabels().least, this.legendLabels().most, this.labelDateFormat);
14
15
  mapChart(this.chartRef.nativeElement, chartOptions);
15
16
  }
16
17
  }
17
18
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ChartHeatmapComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ChartHeatmapComponent, isStandalone: true, selector: "ap-chart-heatmap", inputs: { categoriesX: "categoriesX", categoriesY: "categoriesY", series: "series" }, usesInheritance: true, ngImport: i0, template: "<div #chart></div>\n" });
19
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.9", type: ChartHeatmapComponent, isStandalone: true, selector: "ap-chart-heatmap", inputs: { categoriesX: { classPropertyName: "categoriesX", publicName: "categoriesX", isSignal: false, isRequired: false, transformFunction: null }, categoriesY: { classPropertyName: "categoriesY", publicName: "categoriesY", isSignal: false, isRequired: false, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: false, isRequired: false, transformFunction: null }, legendLabels: { classPropertyName: "legendLabels", publicName: "legendLabels", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div #chart></div>\n" });
19
20
  }
20
21
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ChartHeatmapComponent, decorators: [{
21
22
  type: Component,
@@ -27,4 +28,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
27
28
  }], series: [{
28
29
  type: Input
29
30
  }] } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVhdG1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNoYXJ0cy9zcmMvbGliL2NoYXJ0LWhlYXRtYXAvY2hhcnQtaGVhdG1hcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNoYXJ0cy9zcmMvbGliL2NoYXJ0LWhlYXRtYXAvY2hhcnQtaGVhdG1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQXdCLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQU9wRSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsc0JBQXNCO0lBQ3BELFdBQVcsR0FBYSxFQUFFLENBQUM7SUFDM0IsV0FBVyxHQUFhLEVBQUUsQ0FBQztJQUNsQixNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUV0RCxTQUFTO1FBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xFLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUgsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDTCxDQUFDO3VHQVhRLHFCQUFxQjsyRkFBckIscUJBQXFCLHlMQ1ZsQyxzQkFDQTs7MkZEU2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLGtCQUFrQixjQUVoQixJQUFJOzhCQUdQLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDWSxNQUFNO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VyaWVzSGVhdG1hcE9wdGlvbnMsIG1hcENoYXJ0IH0gZnJvbSAnaGlnaGNoYXJ0cy9oaWdobWFwcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3QtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IENoYXJ0SGVhdG1hcE9wdGlvbnMgfSBmcm9tICcuL2NoYXJ0LWhlYXRtYXAtb3B0aW9ucy5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXAtY2hhcnQtaGVhdG1hcCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LWhlYXRtYXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0SGVhdG1hcENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q2hhcnRDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIGNhdGVnb3JpZXNYOiBzdHJpbmdbXSA9IFtdO1xuICAgIEBJbnB1dCgpIGNhdGVnb3JpZXNZOiBzdHJpbmdbXSA9IFtdO1xuICAgIEBJbnB1dCgpIG92ZXJyaWRlIHNlcmllczogU2VyaWVzSGVhdG1hcE9wdGlvbnNbXSA9IFtdO1xuXG4gICAgaW5pdENoYXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZXJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXJ0T3B0aW9ucyA9IENoYXJ0SGVhdG1hcE9wdGlvbnMuYnVpbGQodGhpcy5jaGFydE9wdGlvbnMpO1xuICAgICAgICAgICAgQ2hhcnRIZWF0bWFwT3B0aW9ucy5jb25maWd1cmVIZWF0bWFwKHRoaXMuY2F0ZWdvcmllc1gsIHRoaXMuY2F0ZWdvcmllc1ksIHRoaXMuc2VyaWVzLCBjaGFydE9wdGlvbnMsIHRoaXMubGFiZWxEYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIG1hcENoYXJ0KHRoaXMuY2hhcnRSZWYubmF0aXZlRWxlbWVudCwgY2hhcnRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgI2NoYXJ0PjwvZGl2PlxuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVhdG1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNoYXJ0cy9zcmMvbGliL2NoYXJ0LWhlYXRtYXAvY2hhcnQtaGVhdG1hcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNoYXJ0cy9zcmMvbGliL2NoYXJ0LWhlYXRtYXAvY2hhcnQtaGVhdG1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQVNwRSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsc0JBQXNCO0lBQ3BELFdBQVcsR0FBYSxFQUFFLENBQUM7SUFDM0IsV0FBVyxHQUFhLEVBQUUsQ0FBQztJQUNsQixNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUV0RCxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUUzRCxTQUFTO1FBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xFLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUwsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDTCxDQUFDO3VHQWJRLHFCQUFxQjsyRkFBckIscUJBQXFCLDZvQkNibEMsc0JBQ0E7OzJGRFlhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxrQkFBa0IsY0FFaEIsSUFBSTs4QkFHUCxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ1ksTUFBTTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBpbnB1dCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwQ2hhcnQgfSBmcm9tICdoaWdoY2hhcnRzL2hpZ2htYXBzJztcbmltcG9ydCB7IFNlcmllc0hlYXRtYXBPcHRpb25zIH0gZnJvbSAnaGlnaGNoYXJ0cyc7XG5pbXBvcnQgeyBBYnN0cmFjdENoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3QtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IENoYXJ0SGVhdG1hcE9wdGlvbnMgfSBmcm9tICcuL2NoYXJ0LWhlYXRtYXAtb3B0aW9ucy5tb2RlbCc7XG5cbnR5cGUgTGFiZWxLZXlzID0gJ2xlYXN0JyB8ICdtb3N0JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcC1jaGFydC1oZWF0bWFwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQtaGVhdG1hcC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRIZWF0bWFwQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDaGFydENvbXBvbmVudCB7XG4gICAgQElucHV0KCkgY2F0ZWdvcmllc1g6IHN0cmluZ1tdID0gW107XG4gICAgQElucHV0KCkgY2F0ZWdvcmllc1k6IHN0cmluZ1tdID0gW107XG4gICAgQElucHV0KCkgb3ZlcnJpZGUgc2VyaWVzOiBTZXJpZXNIZWF0bWFwT3B0aW9uc1tdID0gW107XG5cbiAgICBsZWdlbmRMYWJlbHMgPSBpbnB1dC5yZXF1aXJlZDxSZWNvcmQ8TGFiZWxLZXlzLCBzdHJpbmc+PigpO1xuXG4gICAgaW5pdENoYXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZXJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXJ0T3B0aW9ucyA9IENoYXJ0SGVhdG1hcE9wdGlvbnMuYnVpbGQodGhpcy5jaGFydE9wdGlvbnMpO1xuICAgICAgICAgICAgQ2hhcnRIZWF0bWFwT3B0aW9ucy5jb25maWd1cmVIZWF0bWFwKHRoaXMuY2F0ZWdvcmllc1gsIHRoaXMuY2F0ZWdvcmllc1ksIHRoaXMuc2VyaWVzLCBjaGFydE9wdGlvbnMsIHRoaXMuY29sb3IsIHRoaXMubGVnZW5kTGFiZWxzKCkubGVhc3QgLCB0aGlzLmxlZ2VuZExhYmVscygpLm1vc3QsIHRoaXMubGFiZWxEYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIG1hcENoYXJ0KHRoaXMuY2hhcnRSZWYubmF0aXZlRWxlbWVudCwgY2hhcnRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgI2NoYXJ0PjwvZGl2PlxuIl19
@@ -1,7 +1,7 @@
1
1
  import * as Highcharts from 'highcharts';
2
2
  import { dateFormat, Chart } from 'highcharts';
3
3
  import * as i0 from '@angular/core';
4
- import { Input, ViewChild, Directive, Component, EventEmitter, Output, ChangeDetectionStrategy, input, effect } from '@angular/core';
4
+ import { Input, ViewChild, Directive, Component, EventEmitter, Output, input, ChangeDetectionStrategy, effect } from '@angular/core';
5
5
  import { mapChart } from 'highcharts/highmaps';
6
6
  import * as i1 from '@angular/common';
7
7
  import { CommonModule } from '@angular/common';
@@ -766,46 +766,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
766
766
  type: Output
767
767
  }] } });
768
768
 
769
+ const HEATMAP_CONSTANTS = {
770
+ CHART_HEIGHT: 680,
771
+ MARGIN_BOTTOM: 100,
772
+ GRID_LINE_WIDTH: 2,
773
+ BORDER_WIDTH: 1,
774
+ FONT_SIZE: '13px',
775
+ HEADER_FONT_SIZE: '12px',
776
+ TOOLTIP_FONT_SIZE: '14px',
777
+ LEGEND_SYMBOL_WIDTH: 300,
778
+ LEGEND_SYMBOL_HEIGHT: 10,
779
+ TICK_INTERVAL: 3,
780
+ DEFAULT_TICK_AMOUNT: 6,
781
+ DEFAULT_MAX_VALUE: 3,
782
+ MIN_VALUE: 0,
783
+ FONT_WEIGHT: 'normal'
784
+ };
785
+ const COLORS = {
786
+ WHITE: '#FFFFFF',
787
+ GRID_LINE: 'white',
788
+ NULL_COLOR: 'white',
789
+ DEFAULT_FONT_COLOR: '#858FA1'
790
+ };
769
791
  class ChartHeatmapOptions extends ChartOptions {
770
792
  static build(options) {
771
793
  const defaultHeatmapOptions = {
772
794
  chart: {
773
795
  type: 'heatmap',
774
- height: 600,
796
+ height: HEATMAP_CONSTANTS.CHART_HEIGHT,
797
+ marginBottom: HEATMAP_CONSTANTS.MARGIN_BOTTOM
775
798
  },
776
799
  colorAxis: {
777
800
  allowDecimals: false,
778
- gridLineWidth: 2,
779
- gridLineColor: 'white',
780
- min: 0,
801
+ gridLineWidth: HEATMAP_CONSTANTS.GRID_LINE_WIDTH,
802
+ gridLineColor: COLORS.GRID_LINE,
803
+ min: HEATMAP_CONSTANTS.MIN_VALUE,
804
+ minColor: COLORS.WHITE,
781
805
  labels: {
782
806
  style: {
783
- fontSize: '12px',
807
+ fontWeight: HEATMAP_CONSTANTS.FONT_WEIGHT,
808
+ fontSize: HEATMAP_CONSTANTS.FONT_SIZE,
809
+ color: COLORS.DEFAULT_FONT_COLOR,
784
810
  },
811
+ overflow: 'allow',
785
812
  },
786
813
  },
787
814
  legend: {
788
- enabled: false,
815
+ enabled: true,
816
+ layout: 'horizontal',
817
+ align: 'center',
818
+ verticalAlign: 'bottom',
819
+ symbolWidth: HEATMAP_CONSTANTS.LEGEND_SYMBOL_WIDTH,
820
+ symbolHeight: HEATMAP_CONSTANTS.LEGEND_SYMBOL_HEIGHT
789
821
  },
790
822
  plotOptions: {
791
823
  heatmap: {
792
824
  borderColor: ChartColors.GREY_COLORS[10],
793
- borderWidth: 1,
794
- nullColor: 'white',
825
+ borderWidth: HEATMAP_CONSTANTS.BORDER_WIDTH,
826
+ nullColor: COLORS.NULL_COLOR,
795
827
  },
796
828
  },
797
829
  tooltip: {
798
830
  headerFormat: '',
799
831
  pointFormat: `<div style="border-bottom: 1px solid ${ChartColors.GREY_COLORS[10]}; padding: 0 8px 7px">` +
800
- `<span style="font-size: 12px; color: ${ChartColors.GREY_COLORS[60]}">{point.tooltipHeaderLabel}</span></div>` +
801
- `<div style="font-size: 14px; color: ${ChartColors.GREY_COLORS[100]}; margin: 6px 8px 0 8px;">` +
832
+ `<span style="font-size: ${HEATMAP_CONSTANTS.HEADER_FONT_SIZE}; color: ${ChartColors.GREY_COLORS[60]}">{point.tooltipHeaderLabel}</span></div>` +
833
+ `<div style="font-size: ${HEATMAP_CONSTANTS.TOOLTIP_FONT_SIZE}; color: ${ChartColors.GREY_COLORS[100]}; margin: 6px 8px 0 8px;">` +
802
834
  `<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.value}{point.unit}</b></div>`,
803
835
  },
804
836
  xAxis: {
805
837
  labels: {
806
- formatter: function () {
807
- return this.value.toString();
808
- },
838
+ formatter: this.createXAxisFormatter(),
809
839
  },
810
840
  lineWidth: 1,
811
841
  tickWidth: 0,
@@ -813,37 +843,90 @@ class ChartHeatmapOptions extends ChartOptions {
813
843
  },
814
844
  yAxis: {
815
845
  lineWidth: 0,
816
- tickInterval: 3,
846
+ tickInterval: HEATMAP_CONSTANTS.TICK_INTERVAL,
817
847
  reversed: true,
818
848
  visible: true,
819
849
  },
820
850
  };
821
851
  return super.build(mergeDeep(defaultHeatmapOptions, options));
822
852
  }
823
- static configureHeatmap(categoriesX, categoriesY, series, options, labelDateFormat) {
824
- super.configure(series, options, undefined, labelDateFormat);
825
- if (categoriesX && categoriesX.length) {
853
+ static createColorAxisFormatter(leastLabel, mostLabel) {
854
+ return function () {
855
+ if (this.value === this.axis.min) {
856
+ return leastLabel;
857
+ }
858
+ if (this.value === this.axis.max) {
859
+ return mostLabel;
860
+ }
861
+ return '';
862
+ };
863
+ }
864
+ static createXAxisFormatter() {
865
+ return function () {
866
+ return this.value.toString();
867
+ };
868
+ }
869
+ static configureHeatmap(categoriesX, categoriesY, series, options, color, leastLabel, mostLabel, labelDateFormat) {
870
+ super.configure(series, options, color, labelDateFormat);
871
+ this.setAxisCategories(options, categoriesX, categoriesY);
872
+ const points = series[0].data;
873
+ const maxValue = points.reduce((max, point) => Math.max(max, point.value), 0);
874
+ this.configureColorAxis(options, color, leastLabel, mostLabel, maxValue);
875
+ this.configureLegend(options);
876
+ }
877
+ static setAxisCategories(options, categoriesX, categoriesY) {
878
+ if (categoriesX?.length) {
826
879
  options.xAxis.categories = categoriesX;
827
880
  }
828
- if (categoriesY && categoriesY.length) {
881
+ if (categoriesY?.length) {
829
882
  options.yAxis.categories = categoriesY;
830
883
  }
831
884
  }
885
+ static configureColorAxis(options, color, leastLabel, mostLabel, maxValue) {
886
+ const tickPositions = this.buildTickPositions(maxValue);
887
+ options.colorAxis = {
888
+ ...(options.colorAxis || {}),
889
+ min: HEATMAP_CONSTANTS.MIN_VALUE,
890
+ max: HEATMAP_CONSTANTS.DEFAULT_MAX_VALUE,
891
+ tickPositions,
892
+ maxColor: ChartColors.getChartColors(color)[100],
893
+ labels: {
894
+ ...(options.colorAxis?.labels || {}),
895
+ formatter: this.createColorAxisFormatter(leastLabel, mostLabel)
896
+ }
897
+ };
898
+ }
899
+ static configureLegend(options) {
900
+ options.legend = {
901
+ ...options.legend,
902
+ enabled: true,
903
+ };
904
+ }
905
+ static buildTickPositions(maxValue) {
906
+ const tickAmount = HEATMAP_CONSTANTS.DEFAULT_TICK_AMOUNT;
907
+ // Calculate the step between each tick
908
+ // We subtract 1 from tickAmount so that the last tick is exactly at maxValue
909
+ const step = maxValue / (tickAmount - 1);
910
+ // Generate an array of positions for the ticks
911
+ // Each position is calculated as i * step and rounded to 2 decimal places
912
+ return Array.from({ length: tickAmount }, (_, i) => parseFloat((i * step).toFixed(2)));
913
+ }
832
914
  }
833
915
 
834
916
  class ChartHeatmapComponent extends AbstractChartComponent {
835
917
  categoriesX = [];
836
918
  categoriesY = [];
837
919
  series = [];
920
+ legendLabels = input.required();
838
921
  initChart() {
839
922
  if (this.series) {
840
923
  const chartOptions = ChartHeatmapOptions.build(this.chartOptions);
841
- ChartHeatmapOptions.configureHeatmap(this.categoriesX, this.categoriesY, this.series, chartOptions, this.labelDateFormat);
924
+ ChartHeatmapOptions.configureHeatmap(this.categoriesX, this.categoriesY, this.series, chartOptions, this.color, this.legendLabels().least, this.legendLabels().most, this.labelDateFormat);
842
925
  mapChart(this.chartRef.nativeElement, chartOptions);
843
926
  }
844
927
  }
845
928
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ChartHeatmapComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
846
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ChartHeatmapComponent, isStandalone: true, selector: "ap-chart-heatmap", inputs: { categoriesX: "categoriesX", categoriesY: "categoriesY", series: "series" }, usesInheritance: true, ngImport: i0, template: "<div #chart></div>\n" });
929
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.9", type: ChartHeatmapComponent, isStandalone: true, selector: "ap-chart-heatmap", inputs: { categoriesX: { classPropertyName: "categoriesX", publicName: "categoriesX", isSignal: false, isRequired: false, transformFunction: null }, categoriesY: { classPropertyName: "categoriesY", publicName: "categoriesY", isSignal: false, isRequired: false, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: false, isRequired: false, transformFunction: null }, legendLabels: { classPropertyName: "legendLabels", publicName: "legendLabels", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div #chart></div>\n" });
847
930
  }
848
931
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ChartHeatmapComponent, decorators: [{
849
932
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"agorapulse-ui-charts.mjs","sources":["../../../libs/ui-charts/src/lib/highcharts-border-radius-plugin.ts","../../../libs/ui-charts/src/lib/chart-colors.ts","../../../libs/ui-charts/src/lib/abstract-chart.component.ts","../../../libs/ui-charts/src/lib/chart-options.ts","../../../libs/ui-charts/src/lib/chart-bar/chart-bar-options.model.ts","../../../libs/ui-charts/src/lib/chart-bar/chart-bar.component.ts","../../../libs/ui-charts/src/lib/chart-bar/chart-bar.component.html","../../../libs/ui-charts/src/lib/chart-column/chart-column-options.model.ts","../../../libs/ui-charts/src/lib/chart-column/chart-column.component.ts","../../../libs/ui-charts/src/lib/chart-column/chart-column.component.html","../../../libs/ui-charts/src/lib/chart-heatmap/chart-heatmap-options.model.ts","../../../libs/ui-charts/src/lib/chart-heatmap/chart-heatmap.component.ts","../../../libs/ui-charts/src/lib/chart-heatmap/chart-heatmap.component.html","../../../libs/ui-charts/src/lib/chart-metric.ts","../../../libs/ui-charts/src/lib/chart-metrics-list/chart-metrics-list.component.ts","../../../libs/ui-charts/src/lib/chart-metrics-list/chart-metrics-list.component.html","../../../libs/ui-charts/src/lib/chart-mixed/chart-mixed-options.model.ts","../../../libs/ui-charts/src/lib/chart-mixed/chart-mixed.component.ts","../../../libs/ui-charts/src/lib/chart-mixed/chart-mixed.component.html","../../../libs/ui-charts/src/lib/chart-pie/chart-pie-options.model.ts","../../../libs/ui-charts/src/lib/chart-pie/chart-pie.component.ts","../../../libs/ui-charts/src/lib/chart-pie/chart-pie.component.html","../../../libs/ui-charts/src/lib/chart-spline/chart-spline-options.model.ts","../../../libs/ui-charts/src/lib/chart-spline/chart-spline.component.ts","../../../libs/ui-charts/src/lib/chart-spline/chart-spline.component.html","../../../libs/ui-charts/index.ts","../../../libs/ui-charts/agorapulse-ui-charts.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nexport const borderRadiusPlugin = function (H: any) {\n if (H.borderRadiusPlugininitialized) {\n return;\n }\n H.borderRadiusPlugininitialized = true;\n\n H.wrap(H.seriesTypes.column.prototype, 'translate', function (proceed: any) {\n // @ts-ignore\n const options = this.options;\n const topMargin = options.topMargin || 0;\n const bottomMargin = options.bottomMargin || 0;\n const borderRadiusTopLeftSettings = options.borderRadiusTopLeft;\n const borderRadiusTopRightSettings = options.borderRadiusTopRight;\n const borderRadiusBottomLeftSettings = options.borderRadiusBottomLeft;\n const borderRadiusBottomRightSettings = options.borderRadiusBottomRight;\n // @ts-ignore\n proceed.call(this);\n\n // @ts-ignore\n if (!this.points) {\n return;\n }\n\n if (\n borderRadiusTopLeftSettings ||\n borderRadiusTopRightSettings ||\n borderRadiusBottomLeftSettings ||\n borderRadiusBottomRightSettings\n ) {\n // @ts-ignore\n this.points.forEach(function (point) {\n roundPoint(\n borderRadiusTopLeftSettings,\n borderRadiusTopRightSettings,\n borderRadiusBottomLeftSettings,\n borderRadiusBottomRightSettings,\n point,\n H,\n topMargin,\n bottomMargin\n );\n });\n }\n });\n};\n\nfunction roundPoint(\n borderRadiusTopLeftSettings: string | any[],\n borderRadiusTopRightSettings: string | any[],\n borderRadiusBottomLeftSettings: string | any[],\n borderRadiusBottomRightSettings: string | any[],\n point: { shapeArgs: { width?: any; height?: any; x?: any; y?: any; d?: any[] }; index: string | number; dlBox: any; shapeType: string },\n H: { relativeLength: (arg0: any, arg1: any) => any },\n topMargin: any,\n bottomMargin: any\n) {\n const w = point.shapeArgs.width;\n const h = point.shapeArgs.height;\n const x = point.shapeArgs.x;\n const y = point.shapeArgs.y;\n const borderRadiusTopLeft = borderRadiusTopLeftSettings?.length\n ? (borderRadiusTopLeftSettings as any)[point.index]\n : borderRadiusTopLeftSettings || 0;\n const borderRadiusTopRight = borderRadiusTopRightSettings?.length\n ? (borderRadiusTopRightSettings as any)[point.index]\n : borderRadiusTopRightSettings || 0;\n const borderRadiusBottomLeft = borderRadiusBottomLeftSettings?.length\n ? (borderRadiusBottomLeftSettings as any)[point.index]\n : borderRadiusBottomLeftSettings || 0;\n const borderRadiusBottomRight = borderRadiusBottomRightSettings?.length\n ? (borderRadiusBottomRightSettings as any)[point.index]\n : borderRadiusBottomRightSettings || 0;\n\n let radiusTopLeft = H.relativeLength(borderRadiusTopLeft, w);\n let radiusTopRight = H.relativeLength(borderRadiusTopRight, w);\n let radiusBottomRight = H.relativeLength(borderRadiusBottomRight, w);\n let radiusBottomLeft = H.relativeLength(borderRadiusBottomLeft, w);\n\n const maxR = Math.min(w, h) / 2;\n\n radiusTopLeft = radiusTopLeft > maxR ? maxR : radiusTopLeft;\n radiusTopRight = radiusTopRight > maxR ? maxR : radiusTopRight;\n radiusBottomRight = radiusBottomRight > maxR ? maxR : radiusBottomRight;\n radiusBottomLeft = radiusBottomLeft > maxR ? maxR : radiusBottomLeft;\n\n point.dlBox = point.shapeArgs;\n\n point.shapeType = 'path';\n point.shapeArgs = {\n d: [\n 'M',\n x + radiusTopLeft,\n y + topMargin,\n 'L',\n x + w - radiusTopRight,\n y + topMargin,\n 'C',\n x + w - radiusTopRight / 2,\n y,\n x + w,\n y + radiusTopRight / 2,\n x + w,\n y + radiusTopRight,\n 'L',\n x + w,\n y + h - radiusBottomRight,\n 'C',\n x + w,\n y + h - radiusBottomRight / 2,\n x + w - radiusBottomRight / 2,\n y + h,\n x + w - radiusBottomRight,\n y + h + bottomMargin,\n 'L',\n x + radiusBottomLeft,\n y + h + bottomMargin,\n 'C',\n x + radiusBottomLeft / 2,\n y + h,\n x,\n y + h - radiusBottomLeft / 2,\n x,\n y + h - radiusBottomLeft,\n 'L',\n x,\n y + radiusTopLeft,\n 'C',\n x,\n y + radiusTopLeft / 2,\n x + radiusTopLeft / 2,\n y,\n x + radiusTopLeft,\n y,\n 'Z',\n ],\n };\n}\n","export enum ChartColor {\n Grey,\n Orange,\n SoftBlue,\n ElectricBlue,\n Purple,\n Green,\n}\n\nexport class ChartColors {\n static readonly SOFT_BLUE_COLORS = {\n '10': '#EFF5FC',\n '20': '#DFEDFA',\n '40': '#C0DBF4',\n '60': '#A0C8EF',\n '85': '#78B1E8',\n '100': '#61A4E4',\n '150': '#2873BA',\n };\n static readonly ELECTRIC_BLUE_COLORS = {\n '10': '#e8f4ff',\n '20': '#d1e8ff',\n '40': '#a2d1ff',\n '60': '#74bbfe',\n '85': '#3a9efe',\n '100': '#178dfe',\n '150': '#0e72d6',\n };\n static readonly ORANGE_COLORS = {\n '10': '#FFEFE9',\n '20': '#FFE1D4',\n '40': '#FFC2A8',\n '60': '#FFA47D',\n '85': '#FF7E46',\n '100': '#FF6726',\n '150': '#C83E07',\n };\n static readonly GREEN_COLORS = {\n '10': '#ECF7ED',\n '20': '#DAF1DD',\n '40': '#B5E3BB',\n '60': '#8FD498',\n '85': '#61C26D',\n '100': '#45B854',\n '150': '#0F821D',\n };\n static readonly PURPLE_COLORS = {\n '10': '#EFEDF8',\n '20': '#E0DDF2',\n '40': '#C1BBE6',\n '60': '#A398D9',\n '85': '#7C6DC9',\n '100': '#6554C0',\n '150': '#3C2C95',\n };\n static readonly GREY_COLORS = {\n '5': '#F5F5F7',\n '10': '#EAECEF',\n '20': '#D6DAE0',\n '40': '#AEB5C1',\n '60': '#858FA1',\n '85': '#5D6A82',\n '100': '#344563',\n '150': '#212E44',\n };\n\n static readonly RED_COLORS = {\n '80': '#F17171',\n '150': '#D80505'\n };\n\n static readonly SOFT_RED_COLORS = {\n 100: '#ff5353',\n 85: '#ff6d6d',\n 60: '#ff9898',\n 10: '#fff9f9',\n };\n\n static readonly BLACK_COLOR: string = '#000000';\n static readonly LIMIT_COLOR: string = '#E81313';\n static readonly WHITE_COLOR: string = '#FFFFFF';\n\n static getChartColors(color: ChartColor | undefined): { [shade: string]: string } {\n switch (color) {\n case ChartColor.Orange:\n return this.ORANGE_COLORS;\n case ChartColor.SoftBlue:\n return this.SOFT_BLUE_COLORS;\n case ChartColor.ElectricBlue:\n return this.ELECTRIC_BLUE_COLORS;\n case ChartColor.Purple:\n return this.PURPLE_COLORS;\n case ChartColor.Green:\n return this.GREEN_COLORS;\n default:\n return this.GREY_COLORS;\n }\n }\n\n static getColors(seriesCount: number, color: ChartColor | undefined): string[] {\n const colors = this.getChartColors(color);\n switch (seriesCount) {\n case 1:\n return [colors[100]];\n case 2:\n return [colors[40], colors[100]];\n case 3:\n return [colors[20], colors[60], colors[100]];\n case 4:\n return [colors[20], colors[40], colors[60], colors[100]];\n case 5:\n return [colors[20], colors[40], colors[60], colors[100], colors[150]];\n default:\n return [colors[20], colors[40], colors[60], colors[85], colors[100], colors[150]];\n }\n }\n}\n","import { AfterViewChecked, Directive, ElementRef, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { Chart, Options, SeriesOptions } from 'highcharts';\nimport { ChartColor } from './chart-colors';\n\n@Directive() // Required since Angular10 for DI to work (must be decorated to use Angular features)\nexport abstract class AbstractChartComponent implements AfterViewChecked, OnChanges {\n @ViewChild('chart') chartRef!: ElementRef;\n\n @Input() chartOptions: Options = {}; // https://api.highcharts.com/highcharts/\n @Input() color: ChartColor = ChartColor.ElectricBlue;\n @Input() labelDateFormat = '%m/%d';\n @Input() series: SeriesOptions[] = [];\n\n protected chart!: Chart;\n private lastWidth = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes.series && !changes.series.firstChange) || (changes.color && !changes.color.firstChange)) {\n this.initChart();\n }\n }\n\n ngAfterViewChecked(): void {\n if (this.chartRef && (this.chartRef.nativeElement.clientWidth !== this.lastWidth || this.lastWidth === 0)) {\n this.lastWidth = this.chartRef.nativeElement.clientWidth;\n if (this.chart) {\n this.chart.reflow();\n } else if (this.series && this.series.length) {\n this.initChart();\n }\n }\n }\n\n abstract initChart(): void;\n}\n","import { Chart, dateFormat, Options, Series, SeriesOptionsType } from 'highcharts';\nimport { ChartColor, ChartColors } from './chart-colors';\nimport { SeriesRoundedColumnOptions } from './highchart-series.model';\n\nexport class ChartOptions {\n static readonly DEFAULT_DATE_FORMAT: string = '%A, %b %e, %Y';\n static readonly DEFAULT_OPTIONS: Options = {\n /*lang: {\n decimalPoint: (manager && manager.locale !== 'en') ? ',' : '.',\n resetZoom: resetZoomLabel,\n resetZoomTitle: resetZoomHtmlTitle,\n shortMonths: [\n shortJanuary, shortFebruary, shortMarch, shortApril, shortMay, shortJune,\n shortJuly, shortAugust, shortSeptember, shortOctober, shortNovember, shortDecember\n ],\n thousandsSep: (manager && manager.locale !== 'en') ? ' ' : ',',\n weekdays: this.weekDays,\n zoomIn: zoomInHtmlTitle,\n zoomOut: zoomOutHtmlTitle\n },*/\n chart: {\n spacingRight: 20,\n zooming: {\n type: 'xy',\n resetButton: {\n theme: {\n fill: ChartColors.WHITE_COLOR,\n r: 4,\n style: {\n color: ChartColors.GREY_COLORS[100],\n fontSize: '12px',\n },\n states: {\n hover: {\n fill: ChartColors.GREY_COLORS[5],\n },\n },\n },\n },\n },\n panning: {\n enabled: true,\n },\n panKey: 'shift',\n style: {\n fontFamily: \"Averta, 'Open Sans', Helvetica, sans-serif\",\n },\n },\n colorAxis: {\n labels: {\n style: {\n color: ChartColors.GREY_COLORS[60],\n },\n },\n },\n credits: {\n enabled: false,\n },\n legend: {\n borderWidth: 0,\n itemStyle: {\n color: ChartColors.GREY_COLORS[60],\n fontSize: '14px',\n fontWeight: 'normal',\n },\n itemHoverStyle: {\n color: ChartColors.GREY_COLORS[100],\n fontWeight: 'bold',\n },\n },\n plotOptions: {\n series: {\n states: {\n hover: {\n brightness: 0,\n },\n },\n connectNulls: true,\n lineWidth: 4,\n },\n },\n navigation: {\n buttonOptions: {\n y: 0,\n },\n },\n title: {\n text: undefined,\n },\n tooltip: {\n backgroundColor: ChartColors.WHITE_COLOR,\n borderRadius: 4,\n borderWidth: 0,\n dateTimeLabelFormats: {\n day: ChartOptions.DEFAULT_DATE_FORMAT,\n week: ChartOptions.DEFAULT_DATE_FORMAT,\n },\n shadow: {\n color: ChartColors.BLACK_COLOR,\n offsetX: 0,\n offsetY: 2,\n opacity: 0.02,\n width: 6,\n },\n split: false,\n shared: true,\n useHTML: true,\n headerFormat:\n `<div style=\"border-bottom: 1px solid ${ChartColors.GREY_COLORS[10]}; padding: 0 8px 7px\">` +\n `<span style=\"font-size: 12px; color: ${ChartColors.GREY_COLORS[60]}\">{point.key}</span></div>`,\n pointFormat:\n `<div style=\"font-size: 14px; color: ${ChartColors.GREY_COLORS[100]}; margin: 6px 8px 0 8px;\">` +\n '<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.y}</b></div>',\n },\n xAxis: {\n gridLineColor: ChartColors.GREY_COLORS[10],\n lineColor: ChartColors.GREY_COLORS[10],\n tickColor: ChartColors.GREY_COLORS[10],\n gridLineWidth: 1,\n title: {\n text: null,\n },\n labels: {\n style: {\n color: ChartColors.GREY_COLORS[85],\n fontSize: '12px',\n },\n },\n },\n yAxis: {\n allowDecimals: false,\n gridLineColor: ChartColors.GREY_COLORS[10],\n lineColor: ChartColors.GREY_COLORS[10],\n gridLineWidth: 1,\n title: {\n text: null,\n },\n labels: {\n style: {\n color: ChartColors.GREY_COLORS[85],\n fontSize: '12px',\n },\n },\n },\n };\n\n static build(options: Options): Options {\n return mergeDeep(ChartOptions.DEFAULT_OPTIONS, options);\n }\n\n static configure(series: SeriesOptionsType[], options: Options, color: ChartColor | undefined, labelDateFormat?: string) {\n // Configure axis\n options.xAxis = mergeDeep(\n {\n labels: {\n formatter: function (): string {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return dateFormat(labelDateFormat ?? '%m/%d', this.value);\n },\n },\n //minTickInterval: 24 * 60 * 60 * 1000 // One day\n },\n options.xAxis\n );\n // Configure series\n if (series?.length) {\n options.series = series;\n if (options.legend) {\n options.legend.enabled = series.length >= 2;\n }\n options.colors = ChartColors.getColors(series.length, color);\n }\n }\n\n static redrawWithHighestEdgesRounded(chart: Chart): void {\n chart.series.forEach((serie, serieIndex: number, arr) => {\n ChartOptions.roundHighestSerie(arr, serie.options as SeriesRoundedColumnOptions, serieIndex);\n });\n chart.redraw(true);\n }\n\n static roundHighestSerie(series: Series[], serie: SeriesRoundedColumnOptions, serieIndex: number): void {\n const roundedOptionMap: number[] = [];\n let borderRadius = 0;\n if (serie.data) {\n serie.data.forEach((point, columnIndex) => {\n // Check if all previous stacked data at the same abscissa (located higher on the graph) are missing or have a value of 0\n // if so, it means that this point is the visual top of the column, so we should round it\n const roundedColumnEnabled = series.slice(0, serieIndex).every(otherSerie => {\n if (!otherSerie.visible) {\n return true;\n }\n const pointAtSameAbscissa = (otherSerie.options as SeriesRoundedColumnOptions).data?.find(\n otherPoint => (otherPoint as [number | string, number | null])[0] === (point as [number | string, number | null])[0]\n );\n return !pointAtSameAbscissa || (pointAtSameAbscissa as [number | string, number | null])[1] === 0;\n });\n borderRadius = roundedColumnEnabled ? 100 : 0;\n roundedOptionMap[columnIndex] = borderRadius;\n });\n serie.borderRadiusTopLeft = roundedOptionMap;\n serie.borderRadiusTopRight = roundedOptionMap;\n }\n }\n\n static redrawWithHighestEdgesRoundedForStackedBarChart(chart: Chart): void {\n const seriesOptions = chart.series[0]?.options as SeriesRoundedColumnOptions;\n if (seriesOptions.data) {\n const globalRoundedMap: boolean[] = Array(seriesOptions.data.length).fill(false);\n chart.series.forEach(serie => ChartOptions.roundHighestSeriesForStackedBarChart(serie, globalRoundedMap));\n chart.redraw(true);\n }\n }\n\n static roundHighestSeriesForStackedBarChart(serie: Series, globalRoundedMap: boolean[]): void {\n if (globalRoundedMap.every(rounded => rounded)) {\n return;\n }\n const serieOptions = (serie.options as SeriesRoundedColumnOptions);\n if (serieOptions.data && serie.visible) {\n const borderRadiusMap: number[] = Array(serieOptions.data.length).fill(0);\n serieOptions.data.forEach((point, columnIndex) => {\n const value = point as number;\n if (!globalRoundedMap[columnIndex] && value != null && value > 0) {\n globalRoundedMap[columnIndex] = true;\n borderRadiusMap[columnIndex] = 100;\n }\n });\n serieOptions.borderRadiusTopLeft = borderRadiusMap;\n serieOptions.borderRadiusTopRight = borderRadiusMap;\n }\n }\n}\n\nexport function isObject(item: any) {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\n\nexport function mergeDeep(target: any, source: any) {\n const output = deepCopy(target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!(key in target)) Object.assign(output, { [key]: source[key] });\n else output[key] = mergeDeep(target[key], source[key]);\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n}\n\nfunction deepCopy(source: any) {\n if (typeof source !== 'object' || source === null) {\n return source; // Return the value if source is not an object\n }\n // Create an array or object to hold the values\n const newObject = Array.isArray(source) ? [] : {};\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n // Recursively (deep) copy for nested objects, including arrays\n (newObject as any)[key] = deepCopy(source[key]);\n }\n }\n return newObject;\n}\n","import { Options, SeriesBarOptions, XAxisOptions, YAxisOptions } from 'highcharts';\nimport { ChartOptions, mergeDeep } from '../chart-options';\nimport { ChartColor } from './../chart-colors';\nimport { PlotRoundedSeriesOptions, SeriesRoundedBarOptions } from './../highchart-series.model';\n\nexport class ChartBarOptions extends ChartOptions {\n static buildBars(options: Options, selectiveRoundingEnabled: boolean): Options {\n const defaultColumnOptions: Options = {\n chart: {\n type: 'bar',\n },\n legend: {\n symbolHeight: 10,\n },\n xAxis: {\n categories: undefined,\n gridLineWidth: 0,\n lineWidth: 0,\n reversed: false,\n tickWidth: 0,\n labels: {\n align: 'center',\n formatter(): string {\n if (this.value && this.value.toString().length > 16) {\n return this.value.toString().substring(0, 15) + '...';\n }\n return this.value.toString();\n },\n style: {\n width: 100,\n },\n },\n type: 'category',\n },\n yAxis: {\n type: 'linear',\n minTickInterval: 1,\n },\n plotOptions: {\n bar: {\n maxPointWidth: 18,\n pointWidth: 20,\n },\n series: {\n borderWidth: 0,\n }\n },\n };\n defaultColumnOptions.plotOptions ??= {};\n if (selectiveRoundingEnabled) {\n defaultColumnOptions.plotOptions.bar ??= {};\n defaultColumnOptions.plotOptions.bar.stacking = 'normal';\n defaultColumnOptions.plotOptions.bar.events = {\n hide(): void {\n ChartOptions.redrawWithHighestEdgesRoundedForStackedBarChart(this.chart);\n },\n show(): void {\n ChartOptions.redrawWithHighestEdgesRoundedForStackedBarChart(this.chart);\n },\n };\n } else {\n const seriesOptions: PlotRoundedSeriesOptions = {\n borderRadiusTopLeft: 100,\n borderRadiusTopRight: 100,\n };\n defaultColumnOptions.plotOptions.series = seriesOptions;\n }\n return super.build(mergeDeep(defaultColumnOptions, options));\n }\n\n static configureBar(\n series: SeriesBarOptions[],\n categories: string[],\n options: Options,\n opposite: boolean,\n color: ChartColor,\n labelDateFormat?: string\n ): void {\n ChartOptions.configure(series, options, color, labelDateFormat);\n if (categories && categories.length) {\n (options.xAxis as XAxisOptions).categories = categories;\n }\n if (opposite && series.length === 2) {\n const negativeSerie = series[0] as SeriesRoundedBarOptions;\n negativeSerie.borderRadiusBottomLeft = 100;\n negativeSerie.borderRadiusBottomRight = 100;\n negativeSerie.borderRadiusTopLeft = 0;\n negativeSerie.borderRadiusTopRight = 0;\n negativeSerie.data = negativeSerie.data?.map((point: any) => {\n if (point && isNaN(point)) {\n return {\n ...point,\n y: -Math.abs(point.y),\n };\n } else if (!isNaN(point)) {\n return -Math.abs(point);\n }\n return point;\n });\n if (options.plotOptions?.series) {\n options.plotOptions.series.stacking = 'normal';\n }\n const yAxisLabels = (options.yAxis as YAxisOptions).labels;\n if (yAxisLabels) {\n yAxisLabels.formatter = function (): string {\n return Math.abs(+this.value) + '%';\n };\n }\n if (options.tooltip) {\n options.tooltip.pointFormatter = function (): string {\n return `<div style=\"font-size: 14px; color: #344563; margin: 6px 8px 0 8px;\"><span style=\"color:${\n this.color\n };\">\\u25CF</span> ${this.series.name}: <b>${Math.abs(this.y ?? 0) + '%'}</b></div>`;\n };\n }\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { Chart, SeriesBarOptions } from 'highcharts';\nimport { ChartOptions } from '../../..';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartBarOptions } from './chart-bar-options.model';\n\n@Component({\n selector: 'ap-chart-bar',\n templateUrl: './chart-bar.component.html',\n standalone: true,\n})\nexport class ChartBarComponent extends AbstractChartComponent {\n @Input() categories: string[] = [];\n @Input() opposite: boolean = false;\n @Input() stacked: boolean = false;\n @Input() override series: SeriesBarOptions[] = [];\n\n initChart(): void {\n if (this.series) {\n const selectiveRoundingEnabled = this.stacked && !this.opposite;\n const chartOptions = ChartBarOptions.buildBars(this.chartOptions, selectiveRoundingEnabled);\n ChartBarOptions.configureBar(this.series, this.categories, chartOptions, this.opposite, this.color, this.labelDateFormat);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n if (this.chart && selectiveRoundingEnabled) {\n ChartOptions.redrawWithHighestEdgesRoundedForStackedBarChart(this.chart);\n }\n }\n }\n}\n","<div #chart></div>\n","import { dateFormat, Options } from 'highcharts';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nexport class ChartColumnOptions extends ChartOptions {\n static buildColumn(options: Options, simple: boolean): Options {\n const defaultColumnOptions: Options = {\n chart: {\n type: 'column',\n },\n legend: {\n symbolHeight: 10,\n },\n plotOptions: {\n column: {\n stacking: 'normal',\n borderWidth: 0,\n maxPointWidth: 20,\n events: {\n hide(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n show(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n },\n },\n },\n xAxis: {\n type: 'datetime',\n },\n };\n const simpleColumnOptions: Options = {\n chart: {\n type: 'column',\n height: '80px',\n },\n credits: {\n enabled: false,\n },\n plotOptions: {\n column: {\n events: {\n hide(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n show(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n },\n },\n },\n xAxis: {\n type: 'datetime',\n crosshair: true,\n labels: {\n enabled: false,\n formatter(): string {\n return dateFormat('%m/%d', +this.value);\n },\n },\n lineWidth: 0,\n tickWidth: 0,\n gridLineWidth: 0,\n },\n yAxis: {\n min: 0,\n labels: {\n enabled: false,\n },\n gridLineWidth: 0,\n },\n };\n return super.build(mergeDeep(simple ? simpleColumnOptions : defaultColumnOptions, options));\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Chart, SeriesColumnOptions } from 'highcharts';\nimport { ChartOptions } from '../../..';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartColumnOptions } from './chart-column-options.model';\n\n@Component({\n selector: 'ap-chart-column',\n templateUrl: './chart-column.component.html',\n standalone: true,\n})\nexport class ChartColumnComponent extends AbstractChartComponent {\n @Input() override series: SeriesColumnOptions[] = [];\n @Input() simple = false;\n @Output() chartInitialized: EventEmitter<Chart> = new EventEmitter();\n\n initChart(): void {\n if (this.series) {\n const chartOptions = ChartColumnOptions.buildColumn(this.chartOptions, this.simple);\n ChartColumnOptions.configure(this.series, chartOptions, this.color, this.labelDateFormat);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n if (this.chart) {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n }\n this.chartInitialized.emit(this.chart);\n }\n }\n}\n","<div #chart></div>\n","import * as Highcharts from 'highcharts';\nimport { ChartColors } from '../chart-colors';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nexport class ChartHeatmapOptions extends ChartOptions {\n static override build(options: Highcharts.Options): Highcharts.Options {\n const defaultHeatmapOptions: Highcharts.Options = {\n chart: {\n type: 'heatmap',\n height: 600,\n },\n colorAxis: {\n allowDecimals: false,\n gridLineWidth: 2,\n gridLineColor: 'white',\n min: 0,\n labels: {\n style: {\n fontSize: '12px',\n },\n },\n },\n legend: {\n enabled: false,\n },\n plotOptions: {\n heatmap: {\n borderColor: ChartColors.GREY_COLORS[10],\n borderWidth: 1,\n nullColor: 'white',\n },\n },\n tooltip: {\n headerFormat: '',\n pointFormat:\n `<div style=\"border-bottom: 1px solid ${ChartColors.GREY_COLORS[10]}; padding: 0 8px 7px\">` +\n `<span style=\"font-size: 12px; color: ${ChartColors.GREY_COLORS[60]}\">{point.tooltipHeaderLabel}</span></div>` +\n `<div style=\"font-size: 14px; color: ${ChartColors.GREY_COLORS[100]}; margin: 6px 8px 0 8px;\">` +\n `<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.value}{point.unit}</b></div>`,\n },\n xAxis: {\n labels: {\n formatter: function () {\n return this.value.toString();\n },\n },\n lineWidth: 1,\n tickWidth: 0,\n visible: true,\n },\n yAxis: {\n lineWidth: 0,\n tickInterval: 3,\n reversed: true,\n visible: true,\n },\n };\n return super.build(mergeDeep(defaultHeatmapOptions, options));\n }\n\n static configureHeatmap(\n categoriesX: string[],\n categoriesY: string[],\n series: Highcharts.SeriesOptionsType[],\n options: Highcharts.Options,\n labelDateFormat?: string\n ) {\n super.configure(series, options, undefined, labelDateFormat);\n if (categoriesX && categoriesX.length) {\n (options.xAxis as Highcharts.XAxisOptions).categories = categoriesX;\n }\n if (categoriesY && categoriesY.length) {\n (options.yAxis as Highcharts.YAxisOptions).categories = categoriesY;\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { SeriesHeatmapOptions, mapChart } from 'highcharts/highmaps';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartHeatmapOptions } from './chart-heatmap-options.model';\n\n@Component({\n selector: 'ap-chart-heatmap',\n templateUrl: './chart-heatmap.component.html',\n standalone: true,\n})\nexport class ChartHeatmapComponent extends AbstractChartComponent {\n @Input() categoriesX: string[] = [];\n @Input() categoriesY: string[] = [];\n @Input() override series: SeriesHeatmapOptions[] = [];\n\n initChart(): void {\n if (this.series) {\n const chartOptions = ChartHeatmapOptions.build(this.chartOptions);\n ChartHeatmapOptions.configureHeatmap(this.categoriesX, this.categoriesY, this.series, chartOptions, this.labelDateFormat);\n mapChart(this.chartRef.nativeElement, chartOptions);\n }\n }\n}\n","<div #chart></div>\n","export enum ChartMetricType {\n default,\n total,\n}\n\nexport class ChartMetric {\n children?: ChartMetric[];\n name = '';\n type?: ChartMetricType;\n value = 0;\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatListModule } from '@angular/material/list';\nimport { ChartMetric, ChartMetricType } from '../chart-metric';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-chart-metrics-list',\n styleUrls: ['chart-metrics-list.component.scss'],\n templateUrl: 'chart-metrics-list.component.html',\n standalone: true,\n imports: [CommonModule, MatListModule, MatDividerModule],\n})\nexport class ChartMetricsListComponent {\n @Input({\n required: true,\n })\n metrics: ChartMetric[] = [];\n @Input() locale = 'en';\n\n ChartMetricType = ChartMetricType;\n digitsInfo = '1.0-1';\n}\n","<mat-list>\n @if (metrics) {\n @for (metric of metrics; track metric; let i = $index) {\n <mat-list-item [ngClass]=\"{ 'chart-metric-total': metric.type === ChartMetricType.total }\">\n @if (!metric.children) {\n <div class=\"chart-metric-name metric-label\">\n {{ metric.name }}\n </div>\n }\n @if (metric.children) {\n <div class=\"chart-metric-name\">\n <span class=\"metric-label\">\n {{ metric.name }}\n </span>\n <span class=\"chart-metric-children\">\n @for (item of metric.children; track item) {\n <span>\n <span class=\"child-label\">{{ item.name }}</span>\n :\n <span class=\"child-value\">{{ item.value }}</span>\n </span>\n }\n </span>\n </div>\n }\n <div class=\"chart-metric-value metric-label\">\n {{ metric.value | number: digitsInfo : locale }}\n </div>\n </mat-list-item>\n }\n }\n</mat-list>\n","import { Options } from 'highcharts';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nexport class ChartMixedOptions extends ChartOptions {\n static buildMixed(options: Options, singleDayEnabled: boolean): Options {\n const defaultOptions: Options = {\n chart: {\n type: 'column',\n },\n legend: {\n symbolHeight: 10,\n },\n plotOptions: {\n series: {\n marker: {\n enabled: singleDayEnabled,\n radius: singleDayEnabled ? 5 : 2,\n symbol: 'circle',\n },\n },\n column: {\n stacking: 'normal',\n borderWidth: 0,\n maxPointWidth: 20,\n events: {\n hide(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n show(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n },\n },\n },\n xAxis: {\n type: 'datetime',\n },\n };\n return super.build(mergeDeep(defaultOptions, options));\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { Chart, SeriesOptionsType, SeriesSplineOptions } from 'highcharts';\nimport { ChartOptions } from '../../..';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartMixedOptions } from './chart-mixed-options.model';\n\n@Component({\n selector: 'ap-chart-mixed',\n templateUrl: './chart-mixed.component.html',\n standalone: true,\n})\nexport class ChartMixedComponent extends AbstractChartComponent {\n @Input() override series: SeriesOptionsType[] = [];\n\n initChart(): void {\n if (this.series) {\n const singleDayEnabled = (this.series.find(serie => serie.type === 'spline') as SeriesSplineOptions)?.data?.length === 1;\n const chartOptions = ChartMixedOptions.buildMixed(this.chartOptions, singleDayEnabled);\n ChartMixedOptions.configure(this.series, chartOptions, this.color, this.labelDateFormat);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n if (this.chart) {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n }\n }\n }\n}\n","<div #chart></div>\n","import { Options, PointOptionsObject, SeriesPieDataLabelsOptionsObject, SeriesPieOptions } from 'highcharts';\nimport { ChartColors } from '../chart-colors';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nconst NAME_MAX_LENGTH = 30;\nconst RIGHT_TO_LEFT_CHARACTERS = /[\\p{Script=Arabic}\\p{Script=Hebrew}\\p{Script=Syriac}\\p{Script=Thaana}\\p{Script=Nko}\\p{Script=Samaritan}\\p{Script=Mandaic}]/u; // Hebrew, Arabic, and other RTL characters\nconst RIGHT_TO_LEFT_EMBEDDING_CHARACTER = '\\u202B'; // Right-to-left embedding character\n\nexport class ChartPieOptions extends ChartOptions {\n static buildPie(options: Options, innerLabels: boolean): Options {\n const defaultPieOptions: Options = {\n chart: {\n type: 'pie',\n plotBackgroundColor: undefined,\n plotBorderWidth: undefined,\n plotShadow: false,\n },\n plotOptions: {\n pie: {\n dataLabels: {\n distance: innerLabels ? -40 : 30,\n useHTML: true,\n },\n innerSize: '50%',\n },\n series: {\n allowPointSelect: !innerLabels,\n dataLabels: innerLabels\n ? {\n format: '{point.percentage:.1f}%',\n style: {\n fontSize: '16px',\n color: 'white',\n textOutline: '0',\n },\n }\n : {\n formatter: function () {\n const name = this.point.name.length > NAME_MAX_LENGTH ? this.point.name.substring(0, NAME_MAX_LENGTH) + '...' : this.point.name;\n const roundedPercentage = Math.round((this.point.percentage ?? 0) * 10) / 10 + '%';\n // Add right-to-left embedding character only if the first character is a right-to-left character\n const prefix = RIGHT_TO_LEFT_CHARACTERS.test(this.point.name.charAt(0)) ? RIGHT_TO_LEFT_EMBEDDING_CHARACTER : '';\n return prefix + name + ': ' + roundedPercentage\n },\n style: {\n fontSize: '12px',\n color: ChartColors.GREY_COLORS[60],\n },\n },\n showInLegend: innerLabels,\n states: {\n inactive: {\n opacity: 1,\n },\n },\n },\n },\n tooltip: {\n outside: true,\n },\n legend: innerLabels\n ? {\n symbolHeight: 10,\n enabled: true,\n }\n : {},\n };\n return super.build(mergeDeep(defaultPieOptions, options));\n }\n\n static configurePie(\n series: SeriesPieOptions[],\n options: Options,\n colors: string[],\n labelDateFormat: string,\n innerLabels: boolean,\n mouseEventEnabled = true\n ): void {\n super.configure(series, options, undefined, labelDateFormat);\n if (innerLabels && options.legend) {\n options.legend.enabled = true;\n }\n if (series && series.length > 0 && series[0]) {\n options.colors = colors;\n if (mouseEventEnabled && options.plotOptions?.pie) {\n this.resetColors(series[0].data as PointOptionsObject[], innerLabels);\n options.plotOptions.pie.point ??= {};\n options.plotOptions.pie.point.events ??= {};\n options.plotOptions.pie.events ??= {};\n this.configureEnteringASlice(options, innerLabels);\n this.configureLeavingASlice(options, innerLabels);\n this.configureLeavingTheWholePie(options, innerLabels);\n }\n }\n }\n\n private static resetColors(points: PointOptionsObject[], innerLabels: boolean) {\n points?.forEach(point => {\n delete point?.color;\n if (innerLabels) {\n delete (point.dataLabels as SeriesPieDataLabelsOptionsObject)?.style?.color;\n }\n });\n }\n\n private static configureEnteringASlice(options: Options, innerLabels: boolean) {\n if (options.plotOptions?.pie?.point?.events) {\n options.plotOptions.pie.point.events.mouseOver = function (): void {\n this.series.chart.series[0].points.forEach(point => {\n if (point.index !== this.index) {\n point.update(\n {\n color: ChartColors.GREY_COLORS[5],\n },\n false\n );\n if (innerLabels) {\n point.update(\n {\n dataLabels: {\n style: {\n color: ChartColors.GREY_COLORS[20],\n },\n },\n },\n false\n );\n }\n }\n });\n this.series.chart.redraw(false);\n };\n }\n }\n\n private static configureLeavingASlice(options: Options, innerLabels: boolean) {\n if (options.plotOptions?.pie?.point?.events) {\n options.plotOptions.pie.point.events.mouseOut = function (): void {\n this.series.chart.series[0].points.forEach((point, i) => {\n if (point.index !== this.index) {\n point.update(\n {\n color: options.colors?.[i % options.colors.length],\n },\n false\n );\n if (innerLabels) {\n point.update(\n {\n dataLabels: {\n style: {\n color: 'white',\n },\n },\n },\n false\n );\n }\n }\n });\n };\n }\n }\n\n private static configureLeavingTheWholePie(options: Options, innerLabels: boolean) {\n if (options.plotOptions?.pie?.events) {\n options.plotOptions.pie.events.mouseOut = function (): void {\n this.chart.series[0].points.forEach((point, i) => {\n point.update(\n {\n color: options.colors?.[i % options.colors.length],\n },\n false\n );\n if (innerLabels) {\n point.update(\n {\n dataLabels: {\n style: {\n color: 'white',\n },\n },\n },\n false\n );\n }\n });\n this.chart.redraw();\n };\n }\n }\n}\n","import { Component, effect, input, Input } from '@angular/core';\nimport { Chart, SeriesPieOptions } from 'highcharts';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartColors } from '../chart-colors';\nimport { ChartPieOptions } from './chart-pie-options.model';\n\n@Component({\n selector: 'ap-chart-pie',\n templateUrl: './chart-pie.component.html',\n standalone: true,\n})\nexport class ChartPieComponent extends AbstractChartComponent {\n @Input() innerLabels = false;\n @Input() mouseEventEnabled = true;\n @Input() override series: SeriesPieOptions[] = [];\n colors = input<string[]>();\n\n constructor() {\n super();\n effect(() => {\n this.colors();\n this.initChart();\n });\n }\n\n initChart(): void {\n if (this.series) {\n const chartOptions = ChartPieOptions.buildPie(this.chartOptions, this.innerLabels);\n let colors = this.colors();\n if (!colors?.length) {\n colors = ChartColors.getColors(this.series[0].data?.length ?? 0, this.color);\n }\n ChartPieOptions.configurePie(this.series, chartOptions, colors, this.labelDateFormat, this.innerLabels, this.mouseEventEnabled);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n }\n }\n}\n","<div #chart></div>\n","import { Options } from 'highcharts';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nexport class ChartSplineOptions extends ChartOptions {\n static buildSpline(options: Options, singleDayEnabled: boolean): Options {\n const defaultSplineOptions: Options = {\n chart: {\n type: 'spline',\n },\n plotOptions: {\n series: {\n marker: {\n enabled: singleDayEnabled,\n radius: singleDayEnabled ? 5 : 2,\n symbol: 'circle',\n },\n },\n },\n xAxis: {\n type: 'datetime',\n },\n };\n return super.build(mergeDeep(defaultSplineOptions, options));\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Chart, SeriesSplineOptions } from 'highcharts';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartSplineOptions } from './chart-spline-options.model';\n\n@Component({\n selector: 'ap-chart-spline',\n templateUrl: './chart-spline.component.html',\n standalone: true,\n})\nexport class ChartSplineComponent extends AbstractChartComponent {\n @Input() override series: SeriesSplineOptions[] = [];\n @Output() chartInitialized: EventEmitter<Chart> = new EventEmitter();\n\n initChart(): void {\n if (this.series) {\n const chartOptions = ChartSplineOptions.buildSpline(this.chartOptions, this.series[0].data?.length === 1);\n ChartSplineOptions.configure(this.series, chartOptions, this.color, this.labelDateFormat);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n this.chartInitialized.emit(this.chart);\n }\n }\n}\n","<div #chart></div>\n","/*\n * Public API Surface of ui-charts\n */\n\nimport * as Highcharts from 'highcharts';\nimport { borderRadiusPlugin } from './src/lib/highcharts-border-radius-plugin';\n\nborderRadiusPlugin(Highcharts);\n\nexport { AbstractChartComponent } from './src/lib/abstract-chart.component';\nexport { ChartBarComponent } from './src/lib/chart-bar/chart-bar.component';\nexport { ChartColor, ChartColors } from './src/lib/chart-colors';\nexport { ChartColumnComponent } from './src/lib/chart-column/chart-column.component';\nexport { ChartHeatmapComponent } from './src/lib/chart-heatmap/chart-heatmap.component';\nexport { ChartMetric, ChartMetricType } from './src/lib/chart-metric';\nexport { ChartMetricsListComponent } from './src/lib/chart-metrics-list/chart-metrics-list.component';\nexport { ChartMixedComponent } from './src/lib/chart-mixed/chart-mixed.component';\nexport { ChartOptions, mergeDeep } from './src/lib/chart-options';\nexport { ChartPieComponent } from './src/lib/chart-pie/chart-pie.component';\nexport { ChartSplineComponent } from './src/lib/chart-spline/chart-spline.component';\n\nexport { borderRadiusPlugin } from './src/lib/highcharts-border-radius-plugin';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agorapulse-ui-charts.mjs","sources":["../../../libs/ui-charts/src/lib/highcharts-border-radius-plugin.ts","../../../libs/ui-charts/src/lib/chart-colors.ts","../../../libs/ui-charts/src/lib/abstract-chart.component.ts","../../../libs/ui-charts/src/lib/chart-options.ts","../../../libs/ui-charts/src/lib/chart-bar/chart-bar-options.model.ts","../../../libs/ui-charts/src/lib/chart-bar/chart-bar.component.ts","../../../libs/ui-charts/src/lib/chart-bar/chart-bar.component.html","../../../libs/ui-charts/src/lib/chart-column/chart-column-options.model.ts","../../../libs/ui-charts/src/lib/chart-column/chart-column.component.ts","../../../libs/ui-charts/src/lib/chart-column/chart-column.component.html","../../../libs/ui-charts/src/lib/chart-heatmap/chart-heatmap-options.model.ts","../../../libs/ui-charts/src/lib/chart-heatmap/chart-heatmap.component.ts","../../../libs/ui-charts/src/lib/chart-heatmap/chart-heatmap.component.html","../../../libs/ui-charts/src/lib/chart-metric.ts","../../../libs/ui-charts/src/lib/chart-metrics-list/chart-metrics-list.component.ts","../../../libs/ui-charts/src/lib/chart-metrics-list/chart-metrics-list.component.html","../../../libs/ui-charts/src/lib/chart-mixed/chart-mixed-options.model.ts","../../../libs/ui-charts/src/lib/chart-mixed/chart-mixed.component.ts","../../../libs/ui-charts/src/lib/chart-mixed/chart-mixed.component.html","../../../libs/ui-charts/src/lib/chart-pie/chart-pie-options.model.ts","../../../libs/ui-charts/src/lib/chart-pie/chart-pie.component.ts","../../../libs/ui-charts/src/lib/chart-pie/chart-pie.component.html","../../../libs/ui-charts/src/lib/chart-spline/chart-spline-options.model.ts","../../../libs/ui-charts/src/lib/chart-spline/chart-spline.component.ts","../../../libs/ui-charts/src/lib/chart-spline/chart-spline.component.html","../../../libs/ui-charts/index.ts","../../../libs/ui-charts/agorapulse-ui-charts.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nexport const borderRadiusPlugin = function (H: any) {\n if (H.borderRadiusPlugininitialized) {\n return;\n }\n H.borderRadiusPlugininitialized = true;\n\n H.wrap(H.seriesTypes.column.prototype, 'translate', function (proceed: any) {\n // @ts-ignore\n const options = this.options;\n const topMargin = options.topMargin || 0;\n const bottomMargin = options.bottomMargin || 0;\n const borderRadiusTopLeftSettings = options.borderRadiusTopLeft;\n const borderRadiusTopRightSettings = options.borderRadiusTopRight;\n const borderRadiusBottomLeftSettings = options.borderRadiusBottomLeft;\n const borderRadiusBottomRightSettings = options.borderRadiusBottomRight;\n // @ts-ignore\n proceed.call(this);\n\n // @ts-ignore\n if (!this.points) {\n return;\n }\n\n if (\n borderRadiusTopLeftSettings ||\n borderRadiusTopRightSettings ||\n borderRadiusBottomLeftSettings ||\n borderRadiusBottomRightSettings\n ) {\n // @ts-ignore\n this.points.forEach(function (point) {\n roundPoint(\n borderRadiusTopLeftSettings,\n borderRadiusTopRightSettings,\n borderRadiusBottomLeftSettings,\n borderRadiusBottomRightSettings,\n point,\n H,\n topMargin,\n bottomMargin\n );\n });\n }\n });\n};\n\nfunction roundPoint(\n borderRadiusTopLeftSettings: string | any[],\n borderRadiusTopRightSettings: string | any[],\n borderRadiusBottomLeftSettings: string | any[],\n borderRadiusBottomRightSettings: string | any[],\n point: { shapeArgs: { width?: any; height?: any; x?: any; y?: any; d?: any[] }; index: string | number; dlBox: any; shapeType: string },\n H: { relativeLength: (arg0: any, arg1: any) => any },\n topMargin: any,\n bottomMargin: any\n) {\n const w = point.shapeArgs.width;\n const h = point.shapeArgs.height;\n const x = point.shapeArgs.x;\n const y = point.shapeArgs.y;\n const borderRadiusTopLeft = borderRadiusTopLeftSettings?.length\n ? (borderRadiusTopLeftSettings as any)[point.index]\n : borderRadiusTopLeftSettings || 0;\n const borderRadiusTopRight = borderRadiusTopRightSettings?.length\n ? (borderRadiusTopRightSettings as any)[point.index]\n : borderRadiusTopRightSettings || 0;\n const borderRadiusBottomLeft = borderRadiusBottomLeftSettings?.length\n ? (borderRadiusBottomLeftSettings as any)[point.index]\n : borderRadiusBottomLeftSettings || 0;\n const borderRadiusBottomRight = borderRadiusBottomRightSettings?.length\n ? (borderRadiusBottomRightSettings as any)[point.index]\n : borderRadiusBottomRightSettings || 0;\n\n let radiusTopLeft = H.relativeLength(borderRadiusTopLeft, w);\n let radiusTopRight = H.relativeLength(borderRadiusTopRight, w);\n let radiusBottomRight = H.relativeLength(borderRadiusBottomRight, w);\n let radiusBottomLeft = H.relativeLength(borderRadiusBottomLeft, w);\n\n const maxR = Math.min(w, h) / 2;\n\n radiusTopLeft = radiusTopLeft > maxR ? maxR : radiusTopLeft;\n radiusTopRight = radiusTopRight > maxR ? maxR : radiusTopRight;\n radiusBottomRight = radiusBottomRight > maxR ? maxR : radiusBottomRight;\n radiusBottomLeft = radiusBottomLeft > maxR ? maxR : radiusBottomLeft;\n\n point.dlBox = point.shapeArgs;\n\n point.shapeType = 'path';\n point.shapeArgs = {\n d: [\n 'M',\n x + radiusTopLeft,\n y + topMargin,\n 'L',\n x + w - radiusTopRight,\n y + topMargin,\n 'C',\n x + w - radiusTopRight / 2,\n y,\n x + w,\n y + radiusTopRight / 2,\n x + w,\n y + radiusTopRight,\n 'L',\n x + w,\n y + h - radiusBottomRight,\n 'C',\n x + w,\n y + h - radiusBottomRight / 2,\n x + w - radiusBottomRight / 2,\n y + h,\n x + w - radiusBottomRight,\n y + h + bottomMargin,\n 'L',\n x + radiusBottomLeft,\n y + h + bottomMargin,\n 'C',\n x + radiusBottomLeft / 2,\n y + h,\n x,\n y + h - radiusBottomLeft / 2,\n x,\n y + h - radiusBottomLeft,\n 'L',\n x,\n y + radiusTopLeft,\n 'C',\n x,\n y + radiusTopLeft / 2,\n x + radiusTopLeft / 2,\n y,\n x + radiusTopLeft,\n y,\n 'Z',\n ],\n };\n}\n","export enum ChartColor {\n Grey,\n Orange,\n SoftBlue,\n ElectricBlue,\n Purple,\n Green,\n}\n\nexport class ChartColors {\n static readonly SOFT_BLUE_COLORS = {\n '10': '#EFF5FC',\n '20': '#DFEDFA',\n '40': '#C0DBF4',\n '60': '#A0C8EF',\n '85': '#78B1E8',\n '100': '#61A4E4',\n '150': '#2873BA',\n };\n static readonly ELECTRIC_BLUE_COLORS = {\n '10': '#e8f4ff',\n '20': '#d1e8ff',\n '40': '#a2d1ff',\n '60': '#74bbfe',\n '85': '#3a9efe',\n '100': '#178dfe',\n '150': '#0e72d6',\n };\n static readonly ORANGE_COLORS = {\n '10': '#FFEFE9',\n '20': '#FFE1D4',\n '40': '#FFC2A8',\n '60': '#FFA47D',\n '85': '#FF7E46',\n '100': '#FF6726',\n '150': '#C83E07',\n };\n static readonly GREEN_COLORS = {\n '10': '#ECF7ED',\n '20': '#DAF1DD',\n '40': '#B5E3BB',\n '60': '#8FD498',\n '85': '#61C26D',\n '100': '#45B854',\n '150': '#0F821D',\n };\n static readonly PURPLE_COLORS = {\n '10': '#EFEDF8',\n '20': '#E0DDF2',\n '40': '#C1BBE6',\n '60': '#A398D9',\n '85': '#7C6DC9',\n '100': '#6554C0',\n '150': '#3C2C95',\n };\n static readonly GREY_COLORS = {\n '5': '#F5F5F7',\n '10': '#EAECEF',\n '20': '#D6DAE0',\n '40': '#AEB5C1',\n '60': '#858FA1',\n '85': '#5D6A82',\n '100': '#344563',\n '150': '#212E44',\n };\n\n static readonly RED_COLORS = {\n '80': '#F17171',\n '150': '#D80505'\n };\n\n static readonly SOFT_RED_COLORS = {\n 100: '#ff5353',\n 85: '#ff6d6d',\n 60: '#ff9898',\n 10: '#fff9f9',\n };\n\n static readonly BLACK_COLOR: string = '#000000';\n static readonly LIMIT_COLOR: string = '#E81313';\n static readonly WHITE_COLOR: string = '#FFFFFF';\n\n static getChartColors(color: ChartColor | undefined): { [shade: string]: string } {\n switch (color) {\n case ChartColor.Orange:\n return this.ORANGE_COLORS;\n case ChartColor.SoftBlue:\n return this.SOFT_BLUE_COLORS;\n case ChartColor.ElectricBlue:\n return this.ELECTRIC_BLUE_COLORS;\n case ChartColor.Purple:\n return this.PURPLE_COLORS;\n case ChartColor.Green:\n return this.GREEN_COLORS;\n default:\n return this.GREY_COLORS;\n }\n }\n\n static getColors(seriesCount: number, color: ChartColor | undefined): string[] {\n const colors = this.getChartColors(color);\n switch (seriesCount) {\n case 1:\n return [colors[100]];\n case 2:\n return [colors[40], colors[100]];\n case 3:\n return [colors[20], colors[60], colors[100]];\n case 4:\n return [colors[20], colors[40], colors[60], colors[100]];\n case 5:\n return [colors[20], colors[40], colors[60], colors[100], colors[150]];\n default:\n return [colors[20], colors[40], colors[60], colors[85], colors[100], colors[150]];\n }\n }\n}\n","import { AfterViewChecked, Directive, ElementRef, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { Chart, Options, SeriesOptions } from 'highcharts';\nimport { ChartColor } from './chart-colors';\n\n@Directive() // Required since Angular10 for DI to work (must be decorated to use Angular features)\nexport abstract class AbstractChartComponent implements AfterViewChecked, OnChanges {\n @ViewChild('chart') chartRef!: ElementRef;\n\n @Input() chartOptions: Options = {}; // https://api.highcharts.com/highcharts/\n @Input() color: ChartColor = ChartColor.ElectricBlue;\n @Input() labelDateFormat = '%m/%d';\n @Input() series: SeriesOptions[] = [];\n\n protected chart!: Chart;\n private lastWidth = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes.series && !changes.series.firstChange) || (changes.color && !changes.color.firstChange)) {\n this.initChart();\n }\n }\n\n ngAfterViewChecked(): void {\n if (this.chartRef && (this.chartRef.nativeElement.clientWidth !== this.lastWidth || this.lastWidth === 0)) {\n this.lastWidth = this.chartRef.nativeElement.clientWidth;\n if (this.chart) {\n this.chart.reflow();\n } else if (this.series && this.series.length) {\n this.initChart();\n }\n }\n }\n\n abstract initChart(): void;\n}\n","import { Chart, dateFormat, Options, Series, SeriesOptionsType } from 'highcharts';\nimport { ChartColor, ChartColors } from './chart-colors';\nimport { SeriesRoundedColumnOptions } from './highchart-series.model';\n\nexport class ChartOptions {\n static readonly DEFAULT_DATE_FORMAT: string = '%A, %b %e, %Y';\n static readonly DEFAULT_OPTIONS: Options = {\n /*lang: {\n decimalPoint: (manager && manager.locale !== 'en') ? ',' : '.',\n resetZoom: resetZoomLabel,\n resetZoomTitle: resetZoomHtmlTitle,\n shortMonths: [\n shortJanuary, shortFebruary, shortMarch, shortApril, shortMay, shortJune,\n shortJuly, shortAugust, shortSeptember, shortOctober, shortNovember, shortDecember\n ],\n thousandsSep: (manager && manager.locale !== 'en') ? ' ' : ',',\n weekdays: this.weekDays,\n zoomIn: zoomInHtmlTitle,\n zoomOut: zoomOutHtmlTitle\n },*/\n chart: {\n spacingRight: 20,\n zooming: {\n type: 'xy',\n resetButton: {\n theme: {\n fill: ChartColors.WHITE_COLOR,\n r: 4,\n style: {\n color: ChartColors.GREY_COLORS[100],\n fontSize: '12px',\n },\n states: {\n hover: {\n fill: ChartColors.GREY_COLORS[5],\n },\n },\n },\n },\n },\n panning: {\n enabled: true,\n },\n panKey: 'shift',\n style: {\n fontFamily: \"Averta, 'Open Sans', Helvetica, sans-serif\",\n },\n },\n colorAxis: {\n labels: {\n style: {\n color: ChartColors.GREY_COLORS[60],\n },\n },\n },\n credits: {\n enabled: false,\n },\n legend: {\n borderWidth: 0,\n itemStyle: {\n color: ChartColors.GREY_COLORS[60],\n fontSize: '14px',\n fontWeight: 'normal',\n },\n itemHoverStyle: {\n color: ChartColors.GREY_COLORS[100],\n fontWeight: 'bold',\n },\n },\n plotOptions: {\n series: {\n states: {\n hover: {\n brightness: 0,\n },\n },\n connectNulls: true,\n lineWidth: 4,\n },\n },\n navigation: {\n buttonOptions: {\n y: 0,\n },\n },\n title: {\n text: undefined,\n },\n tooltip: {\n backgroundColor: ChartColors.WHITE_COLOR,\n borderRadius: 4,\n borderWidth: 0,\n dateTimeLabelFormats: {\n day: ChartOptions.DEFAULT_DATE_FORMAT,\n week: ChartOptions.DEFAULT_DATE_FORMAT,\n },\n shadow: {\n color: ChartColors.BLACK_COLOR,\n offsetX: 0,\n offsetY: 2,\n opacity: 0.02,\n width: 6,\n },\n split: false,\n shared: true,\n useHTML: true,\n headerFormat:\n `<div style=\"border-bottom: 1px solid ${ChartColors.GREY_COLORS[10]}; padding: 0 8px 7px\">` +\n `<span style=\"font-size: 12px; color: ${ChartColors.GREY_COLORS[60]}\">{point.key}</span></div>`,\n pointFormat:\n `<div style=\"font-size: 14px; color: ${ChartColors.GREY_COLORS[100]}; margin: 6px 8px 0 8px;\">` +\n '<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.y}</b></div>',\n },\n xAxis: {\n gridLineColor: ChartColors.GREY_COLORS[10],\n lineColor: ChartColors.GREY_COLORS[10],\n tickColor: ChartColors.GREY_COLORS[10],\n gridLineWidth: 1,\n title: {\n text: null,\n },\n labels: {\n style: {\n color: ChartColors.GREY_COLORS[85],\n fontSize: '12px',\n },\n },\n },\n yAxis: {\n allowDecimals: false,\n gridLineColor: ChartColors.GREY_COLORS[10],\n lineColor: ChartColors.GREY_COLORS[10],\n gridLineWidth: 1,\n title: {\n text: null,\n },\n labels: {\n style: {\n color: ChartColors.GREY_COLORS[85],\n fontSize: '12px',\n },\n },\n },\n };\n\n static build(options: Options): Options {\n return mergeDeep(ChartOptions.DEFAULT_OPTIONS, options);\n }\n\n static configure(series: SeriesOptionsType[], options: Options, color: ChartColor | undefined, labelDateFormat?: string) {\n // Configure axis\n options.xAxis = mergeDeep(\n {\n labels: {\n formatter: function (): string {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return dateFormat(labelDateFormat ?? '%m/%d', this.value);\n },\n },\n //minTickInterval: 24 * 60 * 60 * 1000 // One day\n },\n options.xAxis\n );\n // Configure series\n if (series?.length) {\n options.series = series;\n if (options.legend) {\n options.legend.enabled = series.length >= 2;\n }\n options.colors = ChartColors.getColors(series.length, color);\n }\n }\n\n static redrawWithHighestEdgesRounded(chart: Chart): void {\n chart.series.forEach((serie, serieIndex: number, arr) => {\n ChartOptions.roundHighestSerie(arr, serie.options as SeriesRoundedColumnOptions, serieIndex);\n });\n chart.redraw(true);\n }\n\n static roundHighestSerie(series: Series[], serie: SeriesRoundedColumnOptions, serieIndex: number): void {\n const roundedOptionMap: number[] = [];\n let borderRadius = 0;\n if (serie.data) {\n serie.data.forEach((point, columnIndex) => {\n // Check if all previous stacked data at the same abscissa (located higher on the graph) are missing or have a value of 0\n // if so, it means that this point is the visual top of the column, so we should round it\n const roundedColumnEnabled = series.slice(0, serieIndex).every(otherSerie => {\n if (!otherSerie.visible) {\n return true;\n }\n const pointAtSameAbscissa = (otherSerie.options as SeriesRoundedColumnOptions).data?.find(\n otherPoint => (otherPoint as [number | string, number | null])[0] === (point as [number | string, number | null])[0]\n );\n return !pointAtSameAbscissa || (pointAtSameAbscissa as [number | string, number | null])[1] === 0;\n });\n borderRadius = roundedColumnEnabled ? 100 : 0;\n roundedOptionMap[columnIndex] = borderRadius;\n });\n serie.borderRadiusTopLeft = roundedOptionMap;\n serie.borderRadiusTopRight = roundedOptionMap;\n }\n }\n\n static redrawWithHighestEdgesRoundedForStackedBarChart(chart: Chart): void {\n const seriesOptions = chart.series[0]?.options as SeriesRoundedColumnOptions;\n if (seriesOptions.data) {\n const globalRoundedMap: boolean[] = Array(seriesOptions.data.length).fill(false);\n chart.series.forEach(serie => ChartOptions.roundHighestSeriesForStackedBarChart(serie, globalRoundedMap));\n chart.redraw(true);\n }\n }\n\n static roundHighestSeriesForStackedBarChart(serie: Series, globalRoundedMap: boolean[]): void {\n if (globalRoundedMap.every(rounded => rounded)) {\n return;\n }\n const serieOptions = (serie.options as SeriesRoundedColumnOptions);\n if (serieOptions.data && serie.visible) {\n const borderRadiusMap: number[] = Array(serieOptions.data.length).fill(0);\n serieOptions.data.forEach((point, columnIndex) => {\n const value = point as number;\n if (!globalRoundedMap[columnIndex] && value != null && value > 0) {\n globalRoundedMap[columnIndex] = true;\n borderRadiusMap[columnIndex] = 100;\n }\n });\n serieOptions.borderRadiusTopLeft = borderRadiusMap;\n serieOptions.borderRadiusTopRight = borderRadiusMap;\n }\n }\n}\n\nexport function isObject(item: any) {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\n\nexport function mergeDeep(target: any, source: any) {\n const output = deepCopy(target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!(key in target)) Object.assign(output, { [key]: source[key] });\n else output[key] = mergeDeep(target[key], source[key]);\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n}\n\nfunction deepCopy(source: any) {\n if (typeof source !== 'object' || source === null) {\n return source; // Return the value if source is not an object\n }\n // Create an array or object to hold the values\n const newObject = Array.isArray(source) ? [] : {};\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n // Recursively (deep) copy for nested objects, including arrays\n (newObject as any)[key] = deepCopy(source[key]);\n }\n }\n return newObject;\n}\n","import { Options, SeriesBarOptions, XAxisOptions, YAxisOptions } from 'highcharts';\nimport { ChartOptions, mergeDeep } from '../chart-options';\nimport { ChartColor } from './../chart-colors';\nimport { PlotRoundedSeriesOptions, SeriesRoundedBarOptions } from './../highchart-series.model';\n\nexport class ChartBarOptions extends ChartOptions {\n static buildBars(options: Options, selectiveRoundingEnabled: boolean): Options {\n const defaultColumnOptions: Options = {\n chart: {\n type: 'bar',\n },\n legend: {\n symbolHeight: 10,\n },\n xAxis: {\n categories: undefined,\n gridLineWidth: 0,\n lineWidth: 0,\n reversed: false,\n tickWidth: 0,\n labels: {\n align: 'center',\n formatter(): string {\n if (this.value && this.value.toString().length > 16) {\n return this.value.toString().substring(0, 15) + '...';\n }\n return this.value.toString();\n },\n style: {\n width: 100,\n },\n },\n type: 'category',\n },\n yAxis: {\n type: 'linear',\n minTickInterval: 1,\n },\n plotOptions: {\n bar: {\n maxPointWidth: 18,\n pointWidth: 20,\n },\n series: {\n borderWidth: 0,\n }\n },\n };\n defaultColumnOptions.plotOptions ??= {};\n if (selectiveRoundingEnabled) {\n defaultColumnOptions.plotOptions.bar ??= {};\n defaultColumnOptions.plotOptions.bar.stacking = 'normal';\n defaultColumnOptions.plotOptions.bar.events = {\n hide(): void {\n ChartOptions.redrawWithHighestEdgesRoundedForStackedBarChart(this.chart);\n },\n show(): void {\n ChartOptions.redrawWithHighestEdgesRoundedForStackedBarChart(this.chart);\n },\n };\n } else {\n const seriesOptions: PlotRoundedSeriesOptions = {\n borderRadiusTopLeft: 100,\n borderRadiusTopRight: 100,\n };\n defaultColumnOptions.plotOptions.series = seriesOptions;\n }\n return super.build(mergeDeep(defaultColumnOptions, options));\n }\n\n static configureBar(\n series: SeriesBarOptions[],\n categories: string[],\n options: Options,\n opposite: boolean,\n color: ChartColor,\n labelDateFormat?: string\n ): void {\n ChartOptions.configure(series, options, color, labelDateFormat);\n if (categories && categories.length) {\n (options.xAxis as XAxisOptions).categories = categories;\n }\n if (opposite && series.length === 2) {\n const negativeSerie = series[0] as SeriesRoundedBarOptions;\n negativeSerie.borderRadiusBottomLeft = 100;\n negativeSerie.borderRadiusBottomRight = 100;\n negativeSerie.borderRadiusTopLeft = 0;\n negativeSerie.borderRadiusTopRight = 0;\n negativeSerie.data = negativeSerie.data?.map((point: any) => {\n if (point && isNaN(point)) {\n return {\n ...point,\n y: -Math.abs(point.y),\n };\n } else if (!isNaN(point)) {\n return -Math.abs(point);\n }\n return point;\n });\n if (options.plotOptions?.series) {\n options.plotOptions.series.stacking = 'normal';\n }\n const yAxisLabels = (options.yAxis as YAxisOptions).labels;\n if (yAxisLabels) {\n yAxisLabels.formatter = function (): string {\n return Math.abs(+this.value) + '%';\n };\n }\n if (options.tooltip) {\n options.tooltip.pointFormatter = function (): string {\n return `<div style=\"font-size: 14px; color: #344563; margin: 6px 8px 0 8px;\"><span style=\"color:${\n this.color\n };\">\\u25CF</span> ${this.series.name}: <b>${Math.abs(this.y ?? 0) + '%'}</b></div>`;\n };\n }\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { Chart, SeriesBarOptions } from 'highcharts';\nimport { ChartOptions } from '../../..';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartBarOptions } from './chart-bar-options.model';\n\n@Component({\n selector: 'ap-chart-bar',\n templateUrl: './chart-bar.component.html',\n standalone: true,\n})\nexport class ChartBarComponent extends AbstractChartComponent {\n @Input() categories: string[] = [];\n @Input() opposite: boolean = false;\n @Input() stacked: boolean = false;\n @Input() override series: SeriesBarOptions[] = [];\n\n initChart(): void {\n if (this.series) {\n const selectiveRoundingEnabled = this.stacked && !this.opposite;\n const chartOptions = ChartBarOptions.buildBars(this.chartOptions, selectiveRoundingEnabled);\n ChartBarOptions.configureBar(this.series, this.categories, chartOptions, this.opposite, this.color, this.labelDateFormat);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n if (this.chart && selectiveRoundingEnabled) {\n ChartOptions.redrawWithHighestEdgesRoundedForStackedBarChart(this.chart);\n }\n }\n }\n}\n","<div #chart></div>\n","import { dateFormat, Options } from 'highcharts';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nexport class ChartColumnOptions extends ChartOptions {\n static buildColumn(options: Options, simple: boolean): Options {\n const defaultColumnOptions: Options = {\n chart: {\n type: 'column',\n },\n legend: {\n symbolHeight: 10,\n },\n plotOptions: {\n column: {\n stacking: 'normal',\n borderWidth: 0,\n maxPointWidth: 20,\n events: {\n hide(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n show(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n },\n },\n },\n xAxis: {\n type: 'datetime',\n },\n };\n const simpleColumnOptions: Options = {\n chart: {\n type: 'column',\n height: '80px',\n },\n credits: {\n enabled: false,\n },\n plotOptions: {\n column: {\n events: {\n hide(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n show(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n },\n },\n },\n xAxis: {\n type: 'datetime',\n crosshair: true,\n labels: {\n enabled: false,\n formatter(): string {\n return dateFormat('%m/%d', +this.value);\n },\n },\n lineWidth: 0,\n tickWidth: 0,\n gridLineWidth: 0,\n },\n yAxis: {\n min: 0,\n labels: {\n enabled: false,\n },\n gridLineWidth: 0,\n },\n };\n return super.build(mergeDeep(simple ? simpleColumnOptions : defaultColumnOptions, options));\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Chart, SeriesColumnOptions } from 'highcharts';\nimport { ChartOptions } from '../../..';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartColumnOptions } from './chart-column-options.model';\n\n@Component({\n selector: 'ap-chart-column',\n templateUrl: './chart-column.component.html',\n standalone: true,\n})\nexport class ChartColumnComponent extends AbstractChartComponent {\n @Input() override series: SeriesColumnOptions[] = [];\n @Input() simple = false;\n @Output() chartInitialized: EventEmitter<Chart> = new EventEmitter();\n\n initChart(): void {\n if (this.series) {\n const chartOptions = ChartColumnOptions.buildColumn(this.chartOptions, this.simple);\n ChartColumnOptions.configure(this.series, chartOptions, this.color, this.labelDateFormat);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n if (this.chart) {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n }\n this.chartInitialized.emit(this.chart);\n }\n }\n}\n","<div #chart></div>\n","import {ChartColor, ChartColors} from '../chart-colors';\nimport {ChartOptions, mergeDeep} from '../chart-options';\nimport type {\n AxisLabelsFormatterCallbackFunction, ColorAxisOptions,\n Options,\n SeriesLineOptions,\n SeriesOptionsType,\n XAxisOptions, YAxisOptions\n} from 'highcharts';\n\nconst HEATMAP_CONSTANTS = {\n CHART_HEIGHT: 680,\n MARGIN_BOTTOM: 100,\n GRID_LINE_WIDTH: 2,\n BORDER_WIDTH: 1,\n FONT_SIZE: '13px',\n HEADER_FONT_SIZE: '12px',\n TOOLTIP_FONT_SIZE: '14px',\n LEGEND_SYMBOL_WIDTH: 300,\n LEGEND_SYMBOL_HEIGHT: 10,\n TICK_INTERVAL: 3,\n DEFAULT_TICK_AMOUNT: 6,\n DEFAULT_MAX_VALUE: 3,\n MIN_VALUE: 0,\n FONT_WEIGHT: 'normal'\n} as const;\n\nconst COLORS = {\n WHITE: '#FFFFFF',\n GRID_LINE: 'white',\n NULL_COLOR: 'white',\n DEFAULT_FONT_COLOR: '#858FA1'\n} as const;\n\nexport class ChartHeatmapOptions extends ChartOptions {\n static override build(options: Options): Options {\n const defaultHeatmapOptions: Options = {\n chart: {\n type: 'heatmap',\n height: HEATMAP_CONSTANTS.CHART_HEIGHT,\n marginBottom: HEATMAP_CONSTANTS.MARGIN_BOTTOM\n },\n colorAxis: {\n allowDecimals: false,\n gridLineWidth: HEATMAP_CONSTANTS.GRID_LINE_WIDTH,\n gridLineColor: COLORS.GRID_LINE,\n min: HEATMAP_CONSTANTS.MIN_VALUE,\n minColor: COLORS.WHITE,\n labels: {\n style: {\n fontWeight: HEATMAP_CONSTANTS.FONT_WEIGHT,\n fontSize: HEATMAP_CONSTANTS.FONT_SIZE,\n color: COLORS.DEFAULT_FONT_COLOR,\n },\n overflow: 'allow',\n },\n },\n legend: {\n enabled: true,\n layout: 'horizontal',\n align: 'center',\n verticalAlign: 'bottom',\n symbolWidth: HEATMAP_CONSTANTS.LEGEND_SYMBOL_WIDTH,\n symbolHeight: HEATMAP_CONSTANTS.LEGEND_SYMBOL_HEIGHT\n },\n plotOptions: {\n heatmap: {\n borderColor: ChartColors.GREY_COLORS[10],\n borderWidth: HEATMAP_CONSTANTS.BORDER_WIDTH,\n nullColor: COLORS.NULL_COLOR,\n },\n },\n tooltip: {\n headerFormat: '',\n pointFormat:\n `<div style=\"border-bottom: 1px solid ${ChartColors.GREY_COLORS[10]}; padding: 0 8px 7px\">` +\n `<span style=\"font-size: ${HEATMAP_CONSTANTS.HEADER_FONT_SIZE}; color: ${ChartColors.GREY_COLORS[60]}\">{point.tooltipHeaderLabel}</span></div>` +\n `<div style=\"font-size: ${HEATMAP_CONSTANTS.TOOLTIP_FONT_SIZE}; color: ${ChartColors.GREY_COLORS[100]}; margin: 6px 8px 0 8px;\">` +\n `<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.value}{point.unit}</b></div>`,\n },\n xAxis: {\n labels: {\n formatter: this.createXAxisFormatter(),\n },\n lineWidth: 1,\n tickWidth: 0,\n visible: true,\n },\n yAxis: {\n lineWidth: 0,\n tickInterval: HEATMAP_CONSTANTS.TICK_INTERVAL,\n reversed: true,\n visible: true,\n },\n };\n return super.build(mergeDeep(defaultHeatmapOptions, options));\n }\n\n private static createColorAxisFormatter(leastLabel: string, mostLabel: string): AxisLabelsFormatterCallbackFunction {\n return function () {\n if (this.value === this.axis.min) {\n return leastLabel;\n }\n if (this.value === this.axis.max) {\n return mostLabel;\n }\n return '';\n };\n }\n\n private static createXAxisFormatter(): AxisLabelsFormatterCallbackFunction {\n return function () {\n return this.value.toString();\n };\n }\n\n static configureHeatmap(\n categoriesX: string[],\n categoriesY: string[],\n series: SeriesOptionsType[],\n options: Options,\n color: ChartColor,\n leastLabel: string,\n mostLabel: string,\n labelDateFormat?: string,\n ): void {\n\n super.configure(series, options, color, labelDateFormat);\n\n this.setAxisCategories(options, categoriesX, categoriesY);\n\n const points = (series[0] as SeriesLineOptions).data as {x: number, y: number, value: number}[];\n const maxValue = points.reduce((max, point) => Math.max(max, point.value), 0);\n\n this.configureColorAxis(options, color, leastLabel, mostLabel, maxValue);\n this.configureLegend(options);\n }\n\n private static setAxisCategories(options: Options, categoriesX: string[], categoriesY: string[]): void {\n if (categoriesX?.length) {\n (options.xAxis as XAxisOptions).categories = categoriesX;\n }\n if (categoriesY?.length) {\n (options.yAxis as YAxisOptions).categories = categoriesY;\n }\n }\n\n private static configureColorAxis(options: Options, color: ChartColor, leastLabel: string, mostLabel: string, maxValue: number): void {\n const tickPositions = this.buildTickPositions(maxValue);\n\n options.colorAxis = {\n ...(options.colorAxis || {}),\n min: HEATMAP_CONSTANTS.MIN_VALUE,\n max: HEATMAP_CONSTANTS.DEFAULT_MAX_VALUE,\n tickPositions,\n maxColor: ChartColors.getChartColors(color)[100],\n labels: {\n ...((options.colorAxis as ColorAxisOptions)?.labels || {}),\n formatter: this.createColorAxisFormatter(leastLabel, mostLabel)\n }\n };\n }\n\n private static configureLegend(options: Options): void {\n options.legend = {\n ...options.legend,\n enabled: true,\n };\n }\n\n private static buildTickPositions(maxValue: number): number[] {\n const tickAmount = HEATMAP_CONSTANTS.DEFAULT_TICK_AMOUNT;\n\n // Calculate the step between each tick\n // We subtract 1 from tickAmount so that the last tick is exactly at maxValue\n const step = maxValue / (tickAmount - 1);\n\n // Generate an array of positions for the ticks\n // Each position is calculated as i * step and rounded to 2 decimal places\n return Array.from({length: tickAmount}, (_, i) => parseFloat((i * step).toFixed(2)));\n }\n}\n","import {Component, input, Input} from '@angular/core';\nimport { mapChart } from 'highcharts/highmaps';\nimport { SeriesHeatmapOptions } from 'highcharts';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartHeatmapOptions } from './chart-heatmap-options.model';\n\ntype LabelKeys = 'least' | 'most';\n\n@Component({\n selector: 'ap-chart-heatmap',\n templateUrl: './chart-heatmap.component.html',\n standalone: true,\n})\nexport class ChartHeatmapComponent extends AbstractChartComponent {\n @Input() categoriesX: string[] = [];\n @Input() categoriesY: string[] = [];\n @Input() override series: SeriesHeatmapOptions[] = [];\n\n legendLabels = input.required<Record<LabelKeys, string>>();\n\n initChart(): void {\n if (this.series) {\n const chartOptions = ChartHeatmapOptions.build(this.chartOptions);\n ChartHeatmapOptions.configureHeatmap(this.categoriesX, this.categoriesY, this.series, chartOptions, this.color, this.legendLabels().least , this.legendLabels().most, this.labelDateFormat);\n mapChart(this.chartRef.nativeElement, chartOptions);\n }\n }\n}\n","<div #chart></div>\n","export enum ChartMetricType {\n default,\n total,\n}\n\nexport class ChartMetric {\n children?: ChartMetric[];\n name = '';\n type?: ChartMetricType;\n value = 0;\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatListModule } from '@angular/material/list';\nimport { ChartMetric, ChartMetricType } from '../chart-metric';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-chart-metrics-list',\n styleUrls: ['chart-metrics-list.component.scss'],\n templateUrl: 'chart-metrics-list.component.html',\n standalone: true,\n imports: [CommonModule, MatListModule, MatDividerModule],\n})\nexport class ChartMetricsListComponent {\n @Input({\n required: true,\n })\n metrics: ChartMetric[] = [];\n @Input() locale = 'en';\n\n ChartMetricType = ChartMetricType;\n digitsInfo = '1.0-1';\n}\n","<mat-list>\n @if (metrics) {\n @for (metric of metrics; track metric; let i = $index) {\n <mat-list-item [ngClass]=\"{ 'chart-metric-total': metric.type === ChartMetricType.total }\">\n @if (!metric.children) {\n <div class=\"chart-metric-name metric-label\">\n {{ metric.name }}\n </div>\n }\n @if (metric.children) {\n <div class=\"chart-metric-name\">\n <span class=\"metric-label\">\n {{ metric.name }}\n </span>\n <span class=\"chart-metric-children\">\n @for (item of metric.children; track item) {\n <span>\n <span class=\"child-label\">{{ item.name }}</span>\n :\n <span class=\"child-value\">{{ item.value }}</span>\n </span>\n }\n </span>\n </div>\n }\n <div class=\"chart-metric-value metric-label\">\n {{ metric.value | number: digitsInfo : locale }}\n </div>\n </mat-list-item>\n }\n }\n</mat-list>\n","import { Options } from 'highcharts';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nexport class ChartMixedOptions extends ChartOptions {\n static buildMixed(options: Options, singleDayEnabled: boolean): Options {\n const defaultOptions: Options = {\n chart: {\n type: 'column',\n },\n legend: {\n symbolHeight: 10,\n },\n plotOptions: {\n series: {\n marker: {\n enabled: singleDayEnabled,\n radius: singleDayEnabled ? 5 : 2,\n symbol: 'circle',\n },\n },\n column: {\n stacking: 'normal',\n borderWidth: 0,\n maxPointWidth: 20,\n events: {\n hide(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n show(): void {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n },\n },\n },\n },\n xAxis: {\n type: 'datetime',\n },\n };\n return super.build(mergeDeep(defaultOptions, options));\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { Chart, SeriesOptionsType, SeriesSplineOptions } from 'highcharts';\nimport { ChartOptions } from '../../..';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartMixedOptions } from './chart-mixed-options.model';\n\n@Component({\n selector: 'ap-chart-mixed',\n templateUrl: './chart-mixed.component.html',\n standalone: true,\n})\nexport class ChartMixedComponent extends AbstractChartComponent {\n @Input() override series: SeriesOptionsType[] = [];\n\n initChart(): void {\n if (this.series) {\n const singleDayEnabled = (this.series.find(serie => serie.type === 'spline') as SeriesSplineOptions)?.data?.length === 1;\n const chartOptions = ChartMixedOptions.buildMixed(this.chartOptions, singleDayEnabled);\n ChartMixedOptions.configure(this.series, chartOptions, this.color, this.labelDateFormat);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n if (this.chart) {\n ChartOptions.redrawWithHighestEdgesRounded(this.chart);\n }\n }\n }\n}\n","<div #chart></div>\n","import { Options, PointOptionsObject, SeriesPieDataLabelsOptionsObject, SeriesPieOptions } from 'highcharts';\nimport { ChartColors } from '../chart-colors';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nconst NAME_MAX_LENGTH = 30;\nconst RIGHT_TO_LEFT_CHARACTERS = /[\\p{Script=Arabic}\\p{Script=Hebrew}\\p{Script=Syriac}\\p{Script=Thaana}\\p{Script=Nko}\\p{Script=Samaritan}\\p{Script=Mandaic}]/u; // Hebrew, Arabic, and other RTL characters\nconst RIGHT_TO_LEFT_EMBEDDING_CHARACTER = '\\u202B'; // Right-to-left embedding character\n\nexport class ChartPieOptions extends ChartOptions {\n static buildPie(options: Options, innerLabels: boolean): Options {\n const defaultPieOptions: Options = {\n chart: {\n type: 'pie',\n plotBackgroundColor: undefined,\n plotBorderWidth: undefined,\n plotShadow: false,\n },\n plotOptions: {\n pie: {\n dataLabels: {\n distance: innerLabels ? -40 : 30,\n useHTML: true,\n },\n innerSize: '50%',\n },\n series: {\n allowPointSelect: !innerLabels,\n dataLabels: innerLabels\n ? {\n format: '{point.percentage:.1f}%',\n style: {\n fontSize: '16px',\n color: 'white',\n textOutline: '0',\n },\n }\n : {\n formatter: function () {\n const name = this.point.name.length > NAME_MAX_LENGTH ? this.point.name.substring(0, NAME_MAX_LENGTH) + '...' : this.point.name;\n const roundedPercentage = Math.round((this.point.percentage ?? 0) * 10) / 10 + '%';\n // Add right-to-left embedding character only if the first character is a right-to-left character\n const prefix = RIGHT_TO_LEFT_CHARACTERS.test(this.point.name.charAt(0)) ? RIGHT_TO_LEFT_EMBEDDING_CHARACTER : '';\n return prefix + name + ': ' + roundedPercentage\n },\n style: {\n fontSize: '12px',\n color: ChartColors.GREY_COLORS[60],\n },\n },\n showInLegend: innerLabels,\n states: {\n inactive: {\n opacity: 1,\n },\n },\n },\n },\n tooltip: {\n outside: true,\n },\n legend: innerLabels\n ? {\n symbolHeight: 10,\n enabled: true,\n }\n : {},\n };\n return super.build(mergeDeep(defaultPieOptions, options));\n }\n\n static configurePie(\n series: SeriesPieOptions[],\n options: Options,\n colors: string[],\n labelDateFormat: string,\n innerLabels: boolean,\n mouseEventEnabled = true\n ): void {\n super.configure(series, options, undefined, labelDateFormat);\n if (innerLabels && options.legend) {\n options.legend.enabled = true;\n }\n if (series && series.length > 0 && series[0]) {\n options.colors = colors;\n if (mouseEventEnabled && options.plotOptions?.pie) {\n this.resetColors(series[0].data as PointOptionsObject[], innerLabels);\n options.plotOptions.pie.point ??= {};\n options.plotOptions.pie.point.events ??= {};\n options.plotOptions.pie.events ??= {};\n this.configureEnteringASlice(options, innerLabels);\n this.configureLeavingASlice(options, innerLabels);\n this.configureLeavingTheWholePie(options, innerLabels);\n }\n }\n }\n\n private static resetColors(points: PointOptionsObject[], innerLabels: boolean) {\n points?.forEach(point => {\n delete point?.color;\n if (innerLabels) {\n delete (point.dataLabels as SeriesPieDataLabelsOptionsObject)?.style?.color;\n }\n });\n }\n\n private static configureEnteringASlice(options: Options, innerLabels: boolean) {\n if (options.plotOptions?.pie?.point?.events) {\n options.plotOptions.pie.point.events.mouseOver = function (): void {\n this.series.chart.series[0].points.forEach(point => {\n if (point.index !== this.index) {\n point.update(\n {\n color: ChartColors.GREY_COLORS[5],\n },\n false\n );\n if (innerLabels) {\n point.update(\n {\n dataLabels: {\n style: {\n color: ChartColors.GREY_COLORS[20],\n },\n },\n },\n false\n );\n }\n }\n });\n this.series.chart.redraw(false);\n };\n }\n }\n\n private static configureLeavingASlice(options: Options, innerLabels: boolean) {\n if (options.plotOptions?.pie?.point?.events) {\n options.plotOptions.pie.point.events.mouseOut = function (): void {\n this.series.chart.series[0].points.forEach((point, i) => {\n if (point.index !== this.index) {\n point.update(\n {\n color: options.colors?.[i % options.colors.length],\n },\n false\n );\n if (innerLabels) {\n point.update(\n {\n dataLabels: {\n style: {\n color: 'white',\n },\n },\n },\n false\n );\n }\n }\n });\n };\n }\n }\n\n private static configureLeavingTheWholePie(options: Options, innerLabels: boolean) {\n if (options.plotOptions?.pie?.events) {\n options.plotOptions.pie.events.mouseOut = function (): void {\n this.chart.series[0].points.forEach((point, i) => {\n point.update(\n {\n color: options.colors?.[i % options.colors.length],\n },\n false\n );\n if (innerLabels) {\n point.update(\n {\n dataLabels: {\n style: {\n color: 'white',\n },\n },\n },\n false\n );\n }\n });\n this.chart.redraw();\n };\n }\n }\n}\n","import { Component, effect, input, Input } from '@angular/core';\nimport { Chart, SeriesPieOptions } from 'highcharts';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartColors } from '../chart-colors';\nimport { ChartPieOptions } from './chart-pie-options.model';\n\n@Component({\n selector: 'ap-chart-pie',\n templateUrl: './chart-pie.component.html',\n standalone: true,\n})\nexport class ChartPieComponent extends AbstractChartComponent {\n @Input() innerLabels = false;\n @Input() mouseEventEnabled = true;\n @Input() override series: SeriesPieOptions[] = [];\n colors = input<string[]>();\n\n constructor() {\n super();\n effect(() => {\n this.colors();\n this.initChart();\n });\n }\n\n initChart(): void {\n if (this.series) {\n const chartOptions = ChartPieOptions.buildPie(this.chartOptions, this.innerLabels);\n let colors = this.colors();\n if (!colors?.length) {\n colors = ChartColors.getColors(this.series[0].data?.length ?? 0, this.color);\n }\n ChartPieOptions.configurePie(this.series, chartOptions, colors, this.labelDateFormat, this.innerLabels, this.mouseEventEnabled);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n }\n }\n}\n","<div #chart></div>\n","import { Options } from 'highcharts';\nimport { ChartOptions, mergeDeep } from '../chart-options';\n\nexport class ChartSplineOptions extends ChartOptions {\n static buildSpline(options: Options, singleDayEnabled: boolean): Options {\n const defaultSplineOptions: Options = {\n chart: {\n type: 'spline',\n },\n plotOptions: {\n series: {\n marker: {\n enabled: singleDayEnabled,\n radius: singleDayEnabled ? 5 : 2,\n symbol: 'circle',\n },\n },\n },\n xAxis: {\n type: 'datetime',\n },\n };\n return super.build(mergeDeep(defaultSplineOptions, options));\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Chart, SeriesSplineOptions } from 'highcharts';\nimport { AbstractChartComponent } from '../abstract-chart.component';\nimport { ChartSplineOptions } from './chart-spline-options.model';\n\n@Component({\n selector: 'ap-chart-spline',\n templateUrl: './chart-spline.component.html',\n standalone: true,\n})\nexport class ChartSplineComponent extends AbstractChartComponent {\n @Input() override series: SeriesSplineOptions[] = [];\n @Output() chartInitialized: EventEmitter<Chart> = new EventEmitter();\n\n initChart(): void {\n if (this.series) {\n const chartOptions = ChartSplineOptions.buildSpline(this.chartOptions, this.series[0].data?.length === 1);\n ChartSplineOptions.configure(this.series, chartOptions, this.color, this.labelDateFormat);\n this.chart = new Chart(this.chartRef.nativeElement, chartOptions);\n this.chartInitialized.emit(this.chart);\n }\n }\n}\n","<div #chart></div>\n","/*\n * Public API Surface of ui-charts\n */\n\nimport * as Highcharts from 'highcharts';\nimport { borderRadiusPlugin } from './src/lib/highcharts-border-radius-plugin';\n\nborderRadiusPlugin(Highcharts);\n\nexport { AbstractChartComponent } from './src/lib/abstract-chart.component';\nexport { ChartBarComponent } from './src/lib/chart-bar/chart-bar.component';\nexport { ChartColor, ChartColors } from './src/lib/chart-colors';\nexport { ChartColumnComponent } from './src/lib/chart-column/chart-column.component';\nexport { ChartHeatmapComponent } from './src/lib/chart-heatmap/chart-heatmap.component';\nexport { ChartMetric, ChartMetricType } from './src/lib/chart-metric';\nexport { ChartMetricsListComponent } from './src/lib/chart-metrics-list/chart-metrics-list.component';\nexport { ChartMixedComponent } from './src/lib/chart-mixed/chart-mixed.component';\nexport { ChartOptions, mergeDeep } from './src/lib/chart-options';\nexport { ChartPieComponent } from './src/lib/chart-pie/chart-pie.component';\nexport { ChartSplineComponent } from './src/lib/chart-spline/chart-spline.component';\n\nexport { borderRadiusPlugin } from './src/lib/highcharts-border-radius-plugin';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@agorapulse/ui-charts",
3
3
  "description": "Agorapulse UI Charts Components Library",
4
- "version": "18.0.7",
4
+ "version": "18.0.8",
5
5
  "author": "Benoit Hediard",
6
6
  "repository": {
7
7
  "type": "git",
@@ -1,6 +1,13 @@
1
- import * as Highcharts from 'highcharts';
1
+ import { ChartColor } from '../chart-colors';
2
2
  import { ChartOptions } from '../chart-options';
3
+ import type { Options, SeriesOptionsType } from 'highcharts';
3
4
  export declare class ChartHeatmapOptions extends ChartOptions {
4
- static build(options: Highcharts.Options): Highcharts.Options;
5
- static configureHeatmap(categoriesX: string[], categoriesY: string[], series: Highcharts.SeriesOptionsType[], options: Highcharts.Options, labelDateFormat?: string): void;
5
+ static build(options: Options): Options;
6
+ private static createColorAxisFormatter;
7
+ private static createXAxisFormatter;
8
+ static configureHeatmap(categoriesX: string[], categoriesY: string[], series: SeriesOptionsType[], options: Options, color: ChartColor, leastLabel: string, mostLabel: string, labelDateFormat?: string): void;
9
+ private static setAxisCategories;
10
+ private static configureColorAxis;
11
+ private static configureLegend;
12
+ private static buildTickPositions;
6
13
  }
@@ -1,11 +1,14 @@
1
- import { SeriesHeatmapOptions } from 'highcharts/highmaps';
1
+ import { SeriesHeatmapOptions } from 'highcharts';
2
2
  import { AbstractChartComponent } from '../abstract-chart.component';
3
3
  import * as i0 from "@angular/core";
4
+ type LabelKeys = 'least' | 'most';
4
5
  export declare class ChartHeatmapComponent extends AbstractChartComponent {
5
6
  categoriesX: string[];
6
7
  categoriesY: string[];
7
8
  series: SeriesHeatmapOptions[];
9
+ legendLabels: import("@angular/core").InputSignal<Record<LabelKeys, string>>;
8
10
  initChart(): void;
9
11
  static ɵfac: i0.ɵɵFactoryDeclaration<ChartHeatmapComponent, never>;
10
- static ɵcmp: i0.ɵɵComponentDeclaration<ChartHeatmapComponent, "ap-chart-heatmap", never, { "categoriesX": { "alias": "categoriesX"; "required": false; }; "categoriesY": { "alias": "categoriesY"; "required": false; }; "series": { "alias": "series"; "required": false; }; }, {}, never, never, true, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChartHeatmapComponent, "ap-chart-heatmap", never, { "categoriesX": { "alias": "categoriesX"; "required": false; }; "categoriesY": { "alias": "categoriesY"; "required": false; }; "series": { "alias": "series"; "required": false; }; "legendLabels": { "alias": "legendLabels"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
11
13
  }
14
+ export {};
Binary file