@coreui/angular-chartjs 4.7.8 → 5.0.0-alpha.10

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.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 creativeLabs Łukasz Holeczek
3
+ Copyright (c) 2024 creativeLabs Łukasz Holeczek
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -171,4 +171,4 @@ Thanks to all the backers and sponsors! Support this project by [becoming a back
171
171
 
172
172
  ## Copyright and license
173
173
 
174
- Copyright 2023 creativeLabs Łukasz Holeczek. Code released under the [MIT License](https://github.com/coreui/coreui-angular/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
174
+ Copyright 2024 creativeLabs Łukasz Holeczek. Code released under the [MIT License](https://github.com/coreui/coreui-angular/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
@@ -1,9 +1,9 @@
1
- import { afterNextRender, AfterRenderPhase, booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, numberAttribute, Output, ViewChild } from '@angular/core';
1
+ import { afterRender, AfterRenderPhase, booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, numberAttribute, Output, ViewChild } from '@angular/core';
2
2
  import merge from 'lodash-es/merge';
3
- import { Chart, registerables } from 'chart.js';
3
+ import { Chart as ChartJS, registerables } from 'chart.js';
4
4
  import { customTooltips as cuiCustomTooltips } from '@coreui/chartjs';
5
5
  import * as i0 from "@angular/core";
6
- Chart.register(...registerables);
6
+ ChartJS.register(...registerables);
7
7
  let nextId = 0;
8
8
  export class ChartjsComponent {
9
9
  get hostClasses() {
@@ -11,25 +11,54 @@ export class ChartjsComponent {
11
11
  'chart-wrapper': this.wrapper
12
12
  };
13
13
  }
14
- constructor(elementRef, ngZone, renderer, changeDetectorRef) {
15
- this.elementRef = elementRef;
14
+ constructor(ngZone, renderer, changeDetectorRef) {
16
15
  this.ngZone = ngZone;
17
16
  this.renderer = renderer;
18
17
  this.changeDetectorRef = changeDetectorRef;
18
+ /**
19
+ * Enables custom html based tooltips instead of standard tooltips.
20
+ * @type boolean
21
+ * @default true
22
+ */
19
23
  this.customTooltips = true;
24
+ /**
25
+ * ID attribute applied to the rendered canvas.
26
+ * @type string
27
+ */
20
28
  this.id = `c-chartjs-${nextId++}`;
29
+ /**
30
+ * The options object that is passed into the Chart.js chart.
31
+ */
32
+ this.options = {};
33
+ /**
34
+ * The plugins array that is passed into the Chart.js chart
35
+ */
21
36
  this.plugins = [];
37
+ /**
38
+ * If true, will tear down and redraw chart on all updates.
39
+ * @type boolean
40
+ * @default false
41
+ */
22
42
  this.redraw = false;
43
+ /**
44
+ * Chart.js chart type.
45
+ * @type {'line' | 'bar' | 'radar' | 'doughnut' | 'polarArea' | 'bubble' | 'pie' | 'scatter'}
46
+ */
23
47
  this.type = 'bar';
48
+ /**
49
+ * Put the chart into the wrapper div element.
50
+ * @default true
51
+ */
24
52
  this.wrapper = true;
25
53
  this.getDatasetAtEvent = new EventEmitter();
26
54
  this.getElementAtEvent = new EventEmitter();
27
55
  this.getElementsAtEvent = new EventEmitter();
28
56
  this.chartRef = new EventEmitter();
29
- afterNextRender(() => {
57
+ // todo: verify afterRender / afterNextRender for chartjs (spec fails with 17.0.10)
58
+ afterRender(() => {
30
59
  this.ctx = this.canvasElement?.nativeElement?.getContext('2d');
31
60
  this.chartRender();
32
- }, { phase: AfterRenderPhase.Read });
61
+ }, { phase: AfterRenderPhase.Write });
33
62
  }
34
63
  ngAfterViewInit() {
35
64
  this.chartRender();
@@ -58,14 +87,14 @@ export class ChartjsComponent {
58
87
  this.chartRef.emit(undefined);
59
88
  }
60
89
  chartRender() {
61
- if (!this.canvasElement?.nativeElement || !this.ctx) {
90
+ if (!this.canvasElement?.nativeElement || !this.ctx || this.chart) {
62
91
  return;
63
92
  }
64
93
  this.ngZone.runOutsideAngular(() => {
65
94
  const config = this.chartConfig();
66
95
  if (config) {
67
- setTimeout(() => {
68
- this.chart = new Chart(this.ctx, config);
96
+ this.chart = new ChartJS(this.ctx, config);
97
+ this.ngZone.run(() => {
69
98
  this.renderer.setStyle(this.canvasElement.nativeElement, 'display', 'block');
70
99
  this.changeDetectorRef.markForCheck();
71
100
  this.chartRef.emit(this.chart);
@@ -79,9 +108,7 @@ export class ChartjsComponent {
79
108
  }
80
109
  if (this.redraw) {
81
110
  this.chartDestroy();
82
- setTimeout(() => {
83
- this.chartRender();
84
- });
111
+ this.chartRender();
85
112
  return;
86
113
  }
87
114
  const config = this.chartConfig();
@@ -103,7 +130,9 @@ export class ChartjsComponent {
103
130
  setTimeout(() => {
104
131
  this.ngZone.runOutsideAngular(() => {
105
132
  this.chart?.update();
106
- this.changeDetectorRef.markForCheck();
133
+ this.ngZone.run(() => {
134
+ this.changeDetectorRef.markForCheck();
135
+ });
107
136
  });
108
137
  });
109
138
  }
@@ -117,7 +146,7 @@ export class ChartjsComponent {
117
146
  };
118
147
  }
119
148
  chartOptions() {
120
- return this.options;
149
+ return this.options ?? {};
121
150
  }
122
151
  chartConfig() {
123
152
  this.chartCustomTooltips();
@@ -131,9 +160,7 @@ export class ChartjsComponent {
131
160
  chartCustomTooltips() {
132
161
  if (this.customTooltips) {
133
162
  const options = this.options;
134
- // @ts-ignore
135
163
  const plugins = this.options?.plugins;
136
- // @ts-ignore
137
164
  const tooltip = this.options?.plugins?.tooltip;
138
165
  this.options = merge({
139
166
  ...options,
@@ -151,14 +178,15 @@ export class ChartjsComponent {
151
178
  }
152
179
  }
153
180
  ;
154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.8", type: ChartjsComponent, isStandalone: true, selector: "c-chart", inputs: { customTooltips: "customTooltips", data: "data", height: ["height", "height", (value) => numberAttribute(value, undefined)], id: "id", options: "options", plugins: "plugins", redraw: ["redraw", "redraw", booleanAttribute], type: "type", width: ["width", "width", (value) => numberAttribute(value, undefined)], wrapper: "wrapper" }, outputs: { getDatasetAtEvent: "getDatasetAtEvent", getElementAtEvent: "getElementAtEvent", getElementsAtEvent: "getElementsAtEvent", chartRef: "chartRef" }, host: { properties: { "style.height.px": "this.height", "style.width.px": "this.width", "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], exportAs: ["cChart"], usesOnChanges: true, ngImport: i0, template: "<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content></ng-content>\n</canvas>\n", styles: [":host.chart-wrapper{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
181
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsComponent, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
182
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.9", type: ChartjsComponent, isStandalone: true, selector: "c-chart", inputs: { customTooltips: ["customTooltips", "customTooltips", booleanAttribute], data: "data", height: ["height", "height", (value) => numberAttribute(value, undefined)], id: "id", options: "options", plugins: "plugins", redraw: ["redraw", "redraw", booleanAttribute], type: "type", width: ["width", "width", (value) => numberAttribute(value, undefined)], wrapper: ["wrapper", "wrapper", booleanAttribute] }, outputs: { getDatasetAtEvent: "getDatasetAtEvent", getElementAtEvent: "getElementAtEvent", getElementsAtEvent: "getElementsAtEvent", chartRef: "chartRef" }, host: { properties: { "style.height.px": "this.height", "style.width.px": "this.width", "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], exportAs: ["cChart"], usesOnChanges: true, ngImport: i0, template: "<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content />\n <!-- <ng-container *ngTemplateOutlet=\"fallbackContent\"/>-->\n</canvas>\n", styles: [":host.chart-wrapper{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
156
183
  }
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsComponent, decorators: [{
184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsComponent, decorators: [{
158
185
  type: Component,
159
- args: [{ selector: 'c-chart', exportAs: 'cChart', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content></ng-content>\n</canvas>\n", styles: [":host.chart-wrapper{display:block}\n"] }]
160
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { customTooltips: [{
161
- type: Input
186
+ args: [{ selector: 'c-chart', exportAs: 'cChart', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content />\n <!-- <ng-container *ngTemplateOutlet=\"fallbackContent\"/>-->\n</canvas>\n", styles: [":host.chart-wrapper{display:block}\n"] }]
187
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { customTooltips: [{
188
+ type: Input,
189
+ args: [{ transform: booleanAttribute }]
162
190
  }], data: [{
163
191
  type: Input
164
192
  }], height: [{
@@ -185,7 +213,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
185
213
  type: Input,
186
214
  args: [{ transform: (value) => numberAttribute(value, undefined) }]
187
215
  }], wrapper: [{
188
- type: Input
216
+ type: Input,
217
+ args: [{ transform: booleanAttribute }]
189
218
  }], getDatasetAtEvent: [{
190
219
  type: Output
191
220
  }], getElementAtEvent: [{
@@ -201,4 +230,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
201
230
  type: HostBinding,
202
231
  args: ['class']
203
232
  }] } });
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRqcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci1jaGFydGpzL3NyYy9saWIvY2hhcnRqcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci1jaGFydGpzL3NyYy9saWIvY2hhcnRqcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxlQUFlLEVBR2YsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsS0FBSyxFQUFtRCxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakcsT0FBTyxFQUFFLGNBQWMsSUFBSSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUV0RSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFFakMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBWWYsTUFBTSxPQUFPLGdCQUFnQjtJQWdDM0IsSUFDSSxXQUFXO1FBQ2IsT0FBTztZQUNMLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQ1UsVUFBc0IsRUFDdEIsTUFBYyxFQUNkLFFBQW1CLEVBQ25CLGlCQUFvQztRQUhwQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUF6Q3JDLG1CQUFjLEdBQUcsSUFBSSxDQUFD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aUJBQWlCOztzQkFDN0IsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQXNCLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBRTFFLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVrQyxNQUFNO3NCQUE3QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUU3QixJQUFJO3NCQUFaLEtBQUs7Z0JBRytFLEtBQUs7c0JBRHpGLFdBQVc7dUJBQUMsZ0JBQWdCOztzQkFDNUIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQXNCLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBRTFFLE9BQU87c0JBQWYsS0FBSztnQkFFYSxpQkFBaUI7c0JBQW5DLE1BQU07Z0JBQ1ksaUJBQWlCO3NCQUFuQyxNQUFNO2dCQUNZLGtCQUFrQjtzQkFBcEMsTUFBTTtnQkFFWSxRQUFRO3NCQUExQixNQUFNO2dCQUVxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBTXRCLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBBZnRlclJlbmRlclBoYXNlLFxuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IG1lcmdlIGZyb20gJ2xvZGFzaC1lcy9tZXJnZSc7XG5cbmltcG9ydCB7IENoYXJ0LCBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0VHlwZSwgRGVmYXVsdERhdGFQb2ludCwgcmVnaXN0ZXJhYmxlcyB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IGN1c3RvbVRvb2x0aXBzIGFzIGN1aUN1c3RvbVRvb2x0aXBzIH0gZnJvbSAnQGNvcmV1aS9jaGFydGpzJztcblxuQ2hhcnQucmVnaXN0ZXIoLi4ucmVnaXN0ZXJhYmxlcyk7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0anMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydGpzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnY0NoYXJ0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XG4gIC8vIGhvc3Q6IHsgbmdTa2lwSHlkcmF0aW9uOiAndHJ1ZScgfVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydGpzQ29tcG9uZW50PFRUeXBlIGV4dGVuZHMgQ2hhcnRUeXBlID0gQ2hhcnRUeXBlLCBURGF0YSA9IERlZmF1bHREYXRhUG9pbnQ8VFR5cGU+LCBUTGFiZWwgPSB1bmtub3duPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSBjdXN0b21Ub29sdGlwcyA9IHRydWU7XG4gIEBJbnB1dCgpIGRhdGE/OiBDaGFydENvbmZpZ3VyYXRpb248VFR5cGUsIFREYXRhLCBUTGFiZWw+WydkYXRhJ107XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQucHgnKVxuICBASW5wdXQoeyB0cmFuc2Zvcm06ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiBudW1iZXJBdHRyaWJ1dGUodmFsdWUsIHVuZGVmaW5lZCkgfSkgaGVpZ2h0Pzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIEBJbnB1dCgpIGlkID0gYGMtY2hhcnRqcy0ke25leHRJZCsrfWA7XG4gIEBJbnB1dCgpIG9wdGlvbnM/OiBDaGFydENvbmZpZ3VyYXRpb248VFR5cGUsIFREYXRhLCBUTGFiZWw+WydvcHRpb25zJ107XG4gIEBJbnB1dCgpIHBsdWdpbnM6IENoYXJ0Q29uZmlndXJhdGlvbjxUVHlwZSwgVERhdGEsIFRMYWJlbD5bJ3BsdWdpbnMnXSA9IFtdO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZWRyYXc6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSB0eXBlOiBDaGFydENvbmZpZ3VyYXRpb248VFR5cGUsIFREYXRhLCBUTGFiZWw+Wyd0eXBlJ10gPSAnYmFyJyBhcyBUVHlwZTtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoLnB4JylcbiAgQElucHV0KHsgdHJhbnNmb3JtOiAodmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gbnVtYmVyQXR0cmlidXRlKHZhbHVlLCB1bmRlZmluZWQpIH0pIHdpZHRoPzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIEBJbnB1dCgpIHdyYXBwZXIgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBnZXREYXRhc2V0QXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZ2V0RWxlbWVudEF0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGdldEVsZW1lbnRzQXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFydFJlZiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhc0VsZW1lbnQnKSBjYW52YXNFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICBjaGFydCE6IENoYXJ0PFRUeXBlLCBURGF0YSwgVExhYmVsPjtcbiAgY3R4ITogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjaGFydC13cmFwcGVyJzogdGhpcy53cmFwcGVyXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhc0VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LmdldENvbnRleHQoJzJkJyk7XG4gICAgICB0aGlzLmNoYXJ0UmVuZGVyKCk7XG4gICAgfSwgeyBwaGFzZTogQWZ0ZXJSZW5kZXJQaGFzZS5SZWFkIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhcnRSZW5kZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICYmICFjaGFuZ2VzWydkYXRhJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY2hhcnRVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYXJ0RGVzdHJveSgpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5jaGFydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFzZXRBdEV2ZW50ID0gdGhpcy5jaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKCRldmVudCwgJ2RhdGFzZXQnLCB7IGludGVyc2VjdDogdHJ1ZSB9LCBmYWxzZSk7XG4gICAgdGhpcy5nZXREYXRhc2V0QXRFdmVudC5lbWl0KGRhdGFzZXRBdEV2ZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnRBdEV2ZW50ID0gdGhpcy5jaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKCRldmVudCwgJ25lYXJlc3QnLCB7IGludGVyc2VjdDogdHJ1ZSB9LCBmYWxzZSk7XG4gICAgdGhpcy5nZXRFbGVtZW50QXRFdmVudC5lbWl0KGVsZW1lbnRBdEV2ZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnRzQXRFdmVudCA9IHRoaXMuY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZSgkZXZlbnQsICdpbmRleCcsIHsgaW50ZXJzZWN0OiB0cnVlIH0sIGZhbHNlKTtcbiAgICB0aGlzLmdldEVsZW1lbnRzQXRFdmVudC5lbWl0KGVsZW1lbnRzQXRFdmVudCk7XG4gIH1cblxuICBwdWJsaWMgY2hhcnREZXN0cm95KCkge1xuICAgIHRoaXMuY2hhcnQ/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNoYXJ0UmVmLmVtaXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFydFJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuY2FudmFzRWxlbWVudD8ubmF0aXZlRWxlbWVudCB8fCAhdGhpcy5jdHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNoYXJ0Q29uZmlnKCk7XG4gICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQodGhpcy5jdHgsIGNvbmZpZyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuY2hhcnRSZWYuZW1pdCh0aGlzLmNoYXJ0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGFydFVwZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuY2hhcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWRyYXcpIHtcbiAgICAgIHRoaXMuY2hhcnREZXN0cm95KCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGFydFJlbmRlcigpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jaGFydENvbmZpZygpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNoYXJ0Lm9wdGlvbnMgPz8ge30sIGNvbmZpZy5vcHRpb25zID8/IHt9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2hhcnQuY29uZmlnLmRhdGEpIHtcbiAgICAgIHRoaXMuY2hhcnQuY29uZmlnLmRhdGEgPSB7IC4uLmNvbmZpZy5kYXRhIH07XG4gICAgICB0aGlzLmNoYXJ0VXBkYXRlT3V0c2lkZUFuZ3VsYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNoYXJ0LmNvbmZpZy5vcHRpb25zID8/IHt9LCBjb25maWcub3B0aW9ucyA/PyB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY2hhcnQuY29uZmlnLnBsdWdpbnMgPz8gW10sIGNvbmZpZy5wbHVnaW5zID8/IFtdKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jaGFydC5jb25maWcuZGF0YSwgY29uZmlnLmRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhcnRVcGRhdGVPdXRzaWRlQW5ndWxhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFydFVwZGF0ZU91dHNpZGVBbmd1bGFyKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmNoYXJ0Py51cGRhdGUoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYXJ0VG9CYXNlNjRJbWFnZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNoYXJ0Py50b0Jhc2U2NEltYWdlKCk7XG4gIH1cblxuICBwcml2YXRlIGNoYXJ0RGF0YUNvbmZpZygpOiBDaGFydENvbmZpZ3VyYXRpb248VFR5cGUsIFREYXRhLCBUTGFiZWw+WydkYXRhJ10ge1xuICAgIHJldHVybiB7XG4gICAgICBsYWJlbHM6IHRoaXMuZGF0YT8ubGFiZWxzID8/IFtdLFxuICAgICAgZGF0YXNldHM6IHRoaXMuZGF0YT8uZGF0YXNldHMgPz8gW11cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFydE9wdGlvbnMoKTogQ2hhcnRDb25maWd1cmF0aW9uPFRUeXBlLCBURGF0YSwgVExhYmVsPlsnb3B0aW9ucyddIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFydENvbmZpZygpOiBDaGFydENvbmZpZ3VyYXRpb248VFR5cGUsIFREYXRhLCBUTGFiZWw+IHtcbiAgICB0aGlzLmNoYXJ0Q3VzdG9tVG9vbHRpcHMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogdGhpcy5jaGFydERhdGFDb25maWcoKSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuY2hhcnRPcHRpb25zKCksXG4gICAgICBwbHVnaW5zOiB0aGlzLnBsdWdpbnMsXG4gICAgICB0eXBlOiB0aGlzLnR5cGVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFydEN1c3RvbVRvb2x0aXBzKCkge1xuICAgIGlmICh0aGlzLmN1c3RvbVRvb2x0aXBzKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgcGx1Z2lucyA9IHRoaXMub3B0aW9ucz8ucGx1Z2lucztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLm9wdGlvbnM/LnBsdWdpbnM/LnRvb2x0aXA7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZSh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAuLi5wbHVnaW5zLFxuICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgIC4uLnRvb2x0aXAsXG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIG1vZGU6ICdpbmRleCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ25lYXJlc3QnLFxuICAgICAgICAgICAgZXh0ZXJuYWw6IGN1aUN1c3RvbVRvb2x0aXBzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCI8Y2FudmFzXG4gICNjYW52YXNFbGVtZW50XG4gIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcbiAgW2hlaWdodF09XCJoZWlnaHRcIlxuICBbaWRdPVwiaWRcIlxuICBbd2lkdGhdPVwid2lkdGhcIlxuICByb2xlPVwiaW1nXCJcbiAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiXG4+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvY2FudmFzPlxuIl19
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRqcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci1jaGFydGpzL3NyYy9saWIvY2hhcnRqcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci1jaGFydGpzL3NyYy9saWIvY2hhcnRqcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxlQUFlLEVBR2YsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUdwQyxPQUFPLEVBQUUsS0FBSyxJQUFJLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsSUFBSSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUV0RSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFFbkMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBWWYsTUFBTSxPQUFPLGdCQUFnQjtJQWlGM0IsSUFDSSxXQUFXO1FBQ2IsT0FBTztZQUNMLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQ21CLE1BQWMsRUFDZCxRQUFtQixFQUNuQixpQkFBb0M7UUFGcEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXpGdkQ7Ozs7V0FJRztRQUNxQyxtQkFBYyxHQUFZLElBQUksQ0FBQztRQW9CdkU7OztXQUdH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Q0FNN0QsZ0JBQWdCLDhjQzlHdEMseVFBWUE7OzJGRDhCYSxnQkFBZ0I7a0JBVjVCLFNBQVM7K0JBQ0UsU0FBUyxZQUdULFFBQVEsY0FDTixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU07bUlBV1AsY0FBYztzQkFBckQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLN0IsSUFBSTtzQkFBWixLQUFLO2dCQWErRSxNQUFNO3NCQUQxRixXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQzdCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFzQixFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFO2dCQU0xRSxFQUFFO3NCQUFWLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFPa0MsTUFBTTtzQkFBN0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFNN0IsSUFBSTtzQkFBWixLQUFLO2dCQVErRSxLQUFLO3NCQUR6RixXQUFXO3VCQUFDLGdCQUFnQjs7c0JBQzVCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFzQixFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFO2dCQU0zQyxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUVuQixpQkFBaUI7c0JBQW5DLE1BQU07Z0JBQ1ksaUJBQWlCO3NCQUFuQyxNQUFNO2dCQUNZLGtCQUFrQjtzQkFBcEMsTUFBTTtnQkFFWSxRQUFRO3NCQUExQixNQUFNO2dCQUVxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBTXRCLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYWZ0ZXJSZW5kZXIsXG4gIEFmdGVyUmVuZGVyUGhhc2UsXG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgbWVyZ2UgZnJvbSAnbG9kYXNoLWVzL21lcmdlJztcblxuaW1wb3J0IHR5cGUgeyBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0RGF0YSwgQ2hhcnRPcHRpb25zLCBDaGFydFR5cGUsIEludGVyYWN0aW9uSXRlbSwgUGx1Z2luIH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgQ2hhcnQgYXMgQ2hhcnRKUywgcmVnaXN0ZXJhYmxlcyB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IGN1c3RvbVRvb2x0aXBzIGFzIGN1aUN1c3RvbVRvb2x0aXBzIH0gZnJvbSAnQGNvcmV1aS9jaGFydGpzJztcblxuQ2hhcnRKUy5yZWdpc3RlciguLi5yZWdpc3RlcmFibGVzKTtcblxubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnRqcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0anMuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjQ2hhcnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgLy8gaG9zdDogeyBuZ1NraXBIeWRyYXRpb246ICd0cnVlJyB9XG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0anNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgY3VzdG9tIGh0bWwgYmFzZWQgdG9vbHRpcHMgaW5zdGVhZCBvZiBzdGFuZGFyZCB0b29sdGlwcy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY3VzdG9tVG9vbHRpcHM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBvYmplY3QgdGhhdCBpcyBwYXNzZWQgaW50byB0aGUgQ2hhcnQuanMgY2hhcnQgKG1vcmUgaW5mbykuXG4gICAqL1xuICBASW5wdXQoKSBkYXRhPzogQ2hhcnREYXRhO1xuXG4gIC8qKlxuICAgKiBBIGZhbGxiYWNrIHdoZW4gdGhlIGNhbnZhcyBjYW5ub3QgYmUgcmVuZGVyZWQuIENhbiBiZSB1c2VkIGZvciBhY2Nlc3NpYmxlIGNoYXJ0IGRlc2NyaXB0aW9ucy5cbiAgICovXG4gIC8vIEBJbnB1dCgpIGZhbGxiYWNrQ29udGVudD86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqXG4gICAqIEhlaWdodCBhdHRyaWJ1dGUgYXBwbGllZCB0byB0aGUgcmVuZGVyZWQgY2FudmFzLlxuICAgKiBAdHlwZSBudW1iZXIgfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgMTUwXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodC5weCcpXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IG51bWJlckF0dHJpYnV0ZSh2YWx1ZSwgdW5kZWZpbmVkKSB9KSBoZWlnaHQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElEIGF0dHJpYnV0ZSBhcHBsaWVkIHRvIHRoZSByZW5kZXJlZCBjYW52YXMuXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKi9cbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9IGBjLWNoYXJ0anMtJHtuZXh0SWQrK31gO1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9ucyBvYmplY3QgdGhhdCBpcyBwYXNzZWQgaW50byB0aGUgQ2hhcnQuanMgY2hhcnQuXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zPzogQ2hhcnRPcHRpb25zID0ge307XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW5zIGFycmF5IHRoYXQgaXMgcGFzc2VkIGludG8gdGhlIENoYXJ0LmpzIGNoYXJ0XG4gICAqL1xuICBASW5wdXQoKSBwbHVnaW5zOiBQbHVnaW5bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB3aWxsIHRlYXIgZG93biBhbmQgcmVkcmF3IGNoYXJ0IG9uIGFsbCB1cGRhdGVzLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmVkcmF3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENoYXJ0LmpzIGNoYXJ0IHR5cGUuXG4gICAqIEB0eXBlIHsnbGluZScgfCAnYmFyJyB8ICdyYWRhcicgfCAnZG91Z2hudXQnIHwgJ3BvbGFyQXJlYScgfCAnYnViYmxlJyB8ICdwaWUnIHwgJ3NjYXR0ZXInfVxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogQ2hhcnRUeXBlID0gJ2Jhcic7XG5cbiAgLyoqXG4gICAqIFdpZHRoIGF0dHJpYnV0ZSBhcHBsaWVkIHRvIHRoZSByZW5kZXJlZCBjYW52YXMuXG4gICAqIEB0eXBlIG51bWJlciB8IHVuZGVmaW5lZFxuICAgKiBAZGVmYXVsdCAzMDBcbiAgICovXG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgucHgnKVxuICBASW5wdXQoeyB0cmFuc2Zvcm06ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiBudW1iZXJBdHRyaWJ1dGUodmFsdWUsIHVuZGVmaW5lZCkgfSkgd2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFB1dCB0aGUgY2hhcnQgaW50byB0aGUgd3JhcHBlciBkaXYgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHdyYXBwZXIgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBnZXREYXRhc2V0QXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZ2V0RWxlbWVudEF0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGdldEVsZW1lbnRzQXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFydFJlZiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhc0VsZW1lbnQnKSBjYW52YXNFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICBjaGFydCE6IENoYXJ0SlM7XG4gIGN0eCE6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnY2hhcnQtd3JhcHBlcic6IHRoaXMud3JhcHBlclxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICAvLyB0b2RvOiB2ZXJpZnkgYWZ0ZXJSZW5kZXIgLyBhZnRlck5leHRSZW5kZXIgZm9yIGNoYXJ0anMgKHNwZWMgZmFpbHMgd2l0aCAxNy4wLjEwKVxuICAgIGFmdGVyUmVuZGVyKCgpID0+IHtcbiAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXNFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgdGhpcy5jaGFydFJlbmRlcigpO1xuICAgIH0sIHsgcGhhc2U6IEFmdGVyUmVuZGVyUGhhc2UuV3JpdGUgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFydFJlbmRlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgIWNoYW5nZXNbJ2RhdGEnXS5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5jaGFydFVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhcnREZXN0cm95KCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmNoYXJ0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YXNldEF0RXZlbnQ6IEludGVyYWN0aW9uSXRlbVtdID0gdGhpcy5jaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKCRldmVudCwgJ2RhdGFzZXQnLCB7IGludGVyc2VjdDogdHJ1ZSB9LCBmYWxzZSk7XG4gICAgdGhpcy5nZXREYXRhc2V0QXRFdmVudC5lbWl0KGRhdGFzZXRBdEV2ZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnRBdEV2ZW50OiBJbnRlcmFjdGlvbkl0ZW1bXSA9IHRoaXMuY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZSgkZXZlbnQsICduZWFyZXN0JywgeyBpbnRlcnNlY3Q6IHRydWUgfSwgZmFsc2UpO1xuICAgIHRoaXMuZ2V0RWxlbWVudEF0RXZlbnQuZW1pdChlbGVtZW50QXRFdmVudCk7XG5cbiAgICBjb25zdCBlbGVtZW50c0F0RXZlbnQ6IEludGVyYWN0aW9uSXRlbVtdID0gdGhpcy5jaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKCRldmVudCwgJ2luZGV4JywgeyBpbnRlcnNlY3Q6IHRydWUgfSwgZmFsc2UpO1xuICAgIHRoaXMuZ2V0RWxlbWVudHNBdEV2ZW50LmVtaXQoZWxlbWVudHNBdEV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFydERlc3Ryb3koKSB7XG4gICAgdGhpcy5jaGFydD8uZGVzdHJveSgpO1xuICAgIHRoaXMuY2hhcnRSZWYuZW1pdCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHVibGljIGNoYXJ0UmVuZGVyKCkge1xuICAgIGlmICghdGhpcy5jYW52YXNFbGVtZW50Py5uYXRpdmVFbGVtZW50IHx8ICF0aGlzLmN0eCB8fCB0aGlzLmNoYXJ0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jaGFydENvbmZpZygpO1xuICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0SlModGhpcy5jdHgsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuY2hhcnRSZWYuZW1pdCh0aGlzLmNoYXJ0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGFydFVwZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuY2hhcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWRyYXcpIHtcbiAgICAgIHRoaXMuY2hhcnREZXN0cm95KCk7XG4gICAgICB0aGlzLmNoYXJ0UmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBDaGFydENvbmZpZ3VyYXRpb24gPSB0aGlzLmNoYXJ0Q29uZmlnKCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY2hhcnQub3B0aW9ucyA/PyB7fSwgY29uZmlnLm9wdGlvbnMgPz8ge30pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jaGFydC5jb25maWcuZGF0YSkge1xuICAgICAgdGhpcy5jaGFydC5jb25maWcuZGF0YSA9IHsgLi4uY29uZmlnLmRhdGEgfTtcbiAgICAgIHRoaXMuY2hhcnRVcGRhdGVPdXRzaWRlQW5ndWxhcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY2hhcnQuY29uZmlnLm9wdGlvbnMgPz8ge30sIGNvbmZpZy5vcHRpb25zID8/IHt9KTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jaGFydC5jb25maWcucGx1Z2lucyA/PyBbXSwgY29uZmlnLnBsdWdpbnMgPz8gW10pO1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNoYXJ0LmNvbmZpZy5kYXRhLCBjb25maWcuZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFydFVwZGF0ZU91dHNpZGVBbmd1bGFyKCk7XG4gIH1cblxuICBwcml2YXRlIGNoYXJ0VXBkYXRlT3V0c2lkZUFuZ3VsYXIoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhcnQ/LnVwZGF0ZSgpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2hhcnRUb0Jhc2U2NEltYWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hhcnQ/LnRvQmFzZTY0SW1hZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhcnREYXRhQ29uZmlnKCk6IENoYXJ0RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsczogdGhpcy5kYXRhPy5sYWJlbHMgPz8gW10sXG4gICAgICBkYXRhc2V0czogdGhpcy5kYXRhPy5kYXRhc2V0cyA/PyBbXVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNoYXJ0T3B0aW9ucygpOiBDaGFydE9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMgPz8ge307XG4gIH1cblxuICBwcml2YXRlIGNoYXJ0Q29uZmlnKCk6IENoYXJ0Q29uZmlndXJhdGlvbiB7XG4gICAgdGhpcy5jaGFydEN1c3RvbVRvb2x0aXBzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHRoaXMuY2hhcnREYXRhQ29uZmlnKCksXG4gICAgICBvcHRpb25zOiB0aGlzLmNoYXJ0T3B0aW9ucygpLFxuICAgICAgcGx1Z2luczogdGhpcy5wbHVnaW5zLFxuICAgICAgdHlwZTogdGhpcy50eXBlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhcnRDdXN0b21Ub29sdGlwcygpIHtcbiAgICBpZiAodGhpcy5jdXN0b21Ub29sdGlwcykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLm9wdGlvbnM/LnBsdWdpbnM7XG4gICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5vcHRpb25zPy5wbHVnaW5zPy50b29sdGlwO1xuICAgICAgdGhpcy5vcHRpb25zID0gbWVyZ2Uoe1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgLi4ucGx1Z2lucyxcbiAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBtb2RlOiAnaW5kZXgnLFxuICAgICAgICAgICAgcG9zaXRpb246ICduZWFyZXN0JyxcbiAgICAgICAgICAgIGV4dGVybmFsOiBjdWlDdXN0b21Ub29sdGlwc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwiPGNhbnZhc1xuICAjY2FudmFzRWxlbWVudFxuICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXG4gIFtoZWlnaHRdPVwiaGVpZ2h0XCJcbiAgW2lkXT1cImlkXCJcbiAgW3dpZHRoXT1cIndpZHRoXCJcbiAgcm9sZT1cImltZ1wiXG4gIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIlxuPlxuICA8bmctY29udGVudCAvPlxuICA8IS0tICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmFsbGJhY2tDb250ZW50XCIvPi0tPlxuPC9jYW52YXM+XG4iXX0=
@@ -2,11 +2,11 @@ import { NgModule } from '@angular/core';
2
2
  import { ChartjsComponent } from './chartjs.component';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ChartjsModule {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: ChartjsModule, imports: [ChartjsComponent], exports: [ChartjsComponent] }); }
7
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsModule }); }
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.9", ngImport: i0, type: ChartjsModule, imports: [ChartjsComponent], exports: [ChartjsComponent] }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsModule }); }
8
8
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsModule, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsModule, decorators: [{
10
10
  type: NgModule,
11
11
  args: [{
12
12
  imports: [
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, AfterRenderPhase, afterNextRender, numberAttribute, booleanAttribute, Component, ChangeDetectionStrategy, Input, HostBinding, Output, ViewChild, NgModule } from '@angular/core';
2
+ import { EventEmitter, AfterRenderPhase, afterRender, booleanAttribute, numberAttribute, Component, ChangeDetectionStrategy, Input, HostBinding, Output, ViewChild, NgModule } from '@angular/core';
3
3
  import merge from 'lodash-es/merge';
4
4
  import { registerables, Chart } from 'chart.js';
5
5
  import { customTooltips } from '@coreui/chartjs';
@@ -12,25 +12,54 @@ class ChartjsComponent {
12
12
  'chart-wrapper': this.wrapper
13
13
  };
14
14
  }
15
- constructor(elementRef, ngZone, renderer, changeDetectorRef) {
16
- this.elementRef = elementRef;
15
+ constructor(ngZone, renderer, changeDetectorRef) {
17
16
  this.ngZone = ngZone;
18
17
  this.renderer = renderer;
19
18
  this.changeDetectorRef = changeDetectorRef;
19
+ /**
20
+ * Enables custom html based tooltips instead of standard tooltips.
21
+ * @type boolean
22
+ * @default true
23
+ */
20
24
  this.customTooltips = true;
25
+ /**
26
+ * ID attribute applied to the rendered canvas.
27
+ * @type string
28
+ */
21
29
  this.id = `c-chartjs-${nextId++}`;
30
+ /**
31
+ * The options object that is passed into the Chart.js chart.
32
+ */
33
+ this.options = {};
34
+ /**
35
+ * The plugins array that is passed into the Chart.js chart
36
+ */
22
37
  this.plugins = [];
38
+ /**
39
+ * If true, will tear down and redraw chart on all updates.
40
+ * @type boolean
41
+ * @default false
42
+ */
23
43
  this.redraw = false;
44
+ /**
45
+ * Chart.js chart type.
46
+ * @type {'line' | 'bar' | 'radar' | 'doughnut' | 'polarArea' | 'bubble' | 'pie' | 'scatter'}
47
+ */
24
48
  this.type = 'bar';
49
+ /**
50
+ * Put the chart into the wrapper div element.
51
+ * @default true
52
+ */
25
53
  this.wrapper = true;
26
54
  this.getDatasetAtEvent = new EventEmitter();
27
55
  this.getElementAtEvent = new EventEmitter();
28
56
  this.getElementsAtEvent = new EventEmitter();
29
57
  this.chartRef = new EventEmitter();
30
- afterNextRender(() => {
58
+ // todo: verify afterRender / afterNextRender for chartjs (spec fails with 17.0.10)
59
+ afterRender(() => {
31
60
  this.ctx = this.canvasElement?.nativeElement?.getContext('2d');
32
61
  this.chartRender();
33
- }, { phase: AfterRenderPhase.Read });
62
+ }, { phase: AfterRenderPhase.Write });
34
63
  }
35
64
  ngAfterViewInit() {
36
65
  this.chartRender();
@@ -59,14 +88,14 @@ class ChartjsComponent {
59
88
  this.chartRef.emit(undefined);
60
89
  }
61
90
  chartRender() {
62
- if (!this.canvasElement?.nativeElement || !this.ctx) {
91
+ if (!this.canvasElement?.nativeElement || !this.ctx || this.chart) {
63
92
  return;
64
93
  }
65
94
  this.ngZone.runOutsideAngular(() => {
66
95
  const config = this.chartConfig();
67
96
  if (config) {
68
- setTimeout(() => {
69
- this.chart = new Chart(this.ctx, config);
97
+ this.chart = new Chart(this.ctx, config);
98
+ this.ngZone.run(() => {
70
99
  this.renderer.setStyle(this.canvasElement.nativeElement, 'display', 'block');
71
100
  this.changeDetectorRef.markForCheck();
72
101
  this.chartRef.emit(this.chart);
@@ -80,9 +109,7 @@ class ChartjsComponent {
80
109
  }
81
110
  if (this.redraw) {
82
111
  this.chartDestroy();
83
- setTimeout(() => {
84
- this.chartRender();
85
- });
112
+ this.chartRender();
86
113
  return;
87
114
  }
88
115
  const config = this.chartConfig();
@@ -104,7 +131,9 @@ class ChartjsComponent {
104
131
  setTimeout(() => {
105
132
  this.ngZone.runOutsideAngular(() => {
106
133
  this.chart?.update();
107
- this.changeDetectorRef.markForCheck();
134
+ this.ngZone.run(() => {
135
+ this.changeDetectorRef.markForCheck();
136
+ });
108
137
  });
109
138
  });
110
139
  }
@@ -118,7 +147,7 @@ class ChartjsComponent {
118
147
  };
119
148
  }
120
149
  chartOptions() {
121
- return this.options;
150
+ return this.options ?? {};
122
151
  }
123
152
  chartConfig() {
124
153
  this.chartCustomTooltips();
@@ -132,9 +161,7 @@ class ChartjsComponent {
132
161
  chartCustomTooltips() {
133
162
  if (this.customTooltips) {
134
163
  const options = this.options;
135
- // @ts-ignore
136
164
  const plugins = this.options?.plugins;
137
- // @ts-ignore
138
165
  const tooltip = this.options?.plugins?.tooltip;
139
166
  this.options = merge({
140
167
  ...options,
@@ -152,14 +179,15 @@ class ChartjsComponent {
152
179
  }
153
180
  }
154
181
  ;
155
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
156
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.8", type: ChartjsComponent, isStandalone: true, selector: "c-chart", inputs: { customTooltips: "customTooltips", data: "data", height: ["height", "height", (value) => numberAttribute(value, undefined)], id: "id", options: "options", plugins: "plugins", redraw: ["redraw", "redraw", booleanAttribute], type: "type", width: ["width", "width", (value) => numberAttribute(value, undefined)], wrapper: "wrapper" }, outputs: { getDatasetAtEvent: "getDatasetAtEvent", getElementAtEvent: "getElementAtEvent", getElementsAtEvent: "getElementsAtEvent", chartRef: "chartRef" }, host: { properties: { "style.height.px": "this.height", "style.width.px": "this.width", "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], exportAs: ["cChart"], usesOnChanges: true, ngImport: i0, template: "<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content></ng-content>\n</canvas>\n", styles: [":host.chart-wrapper{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsComponent, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.9", type: ChartjsComponent, isStandalone: true, selector: "c-chart", inputs: { customTooltips: ["customTooltips", "customTooltips", booleanAttribute], data: "data", height: ["height", "height", (value) => numberAttribute(value, undefined)], id: "id", options: "options", plugins: "plugins", redraw: ["redraw", "redraw", booleanAttribute], type: "type", width: ["width", "width", (value) => numberAttribute(value, undefined)], wrapper: ["wrapper", "wrapper", booleanAttribute] }, outputs: { getDatasetAtEvent: "getDatasetAtEvent", getElementAtEvent: "getElementAtEvent", getElementsAtEvent: "getElementsAtEvent", chartRef: "chartRef" }, host: { properties: { "style.height.px": "this.height", "style.width.px": "this.width", "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], exportAs: ["cChart"], usesOnChanges: true, ngImport: i0, template: "<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content />\n <!-- <ng-container *ngTemplateOutlet=\"fallbackContent\"/>-->\n</canvas>\n", styles: [":host.chart-wrapper{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
157
184
  }
158
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsComponent, decorators: [{
185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsComponent, decorators: [{
159
186
  type: Component,
160
- args: [{ selector: 'c-chart', exportAs: 'cChart', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content></ng-content>\n</canvas>\n", styles: [":host.chart-wrapper{display:block}\n"] }]
161
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { customTooltips: [{
162
- type: Input
187
+ args: [{ selector: 'c-chart', exportAs: 'cChart', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content />\n <!-- <ng-container *ngTemplateOutlet=\"fallbackContent\"/>-->\n</canvas>\n", styles: [":host.chart-wrapper{display:block}\n"] }]
188
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { customTooltips: [{
189
+ type: Input,
190
+ args: [{ transform: booleanAttribute }]
163
191
  }], data: [{
164
192
  type: Input
165
193
  }], height: [{
@@ -186,7 +214,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
186
214
  type: Input,
187
215
  args: [{ transform: (value) => numberAttribute(value, undefined) }]
188
216
  }], wrapper: [{
189
- type: Input
217
+ type: Input,
218
+ args: [{ transform: booleanAttribute }]
190
219
  }], getDatasetAtEvent: [{
191
220
  type: Output
192
221
  }], getElementAtEvent: [{
@@ -204,11 +233,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
204
233
  }] } });
205
234
 
206
235
  class ChartjsModule {
207
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
208
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: ChartjsModule, imports: [ChartjsComponent], exports: [ChartjsComponent] }); }
209
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsModule }); }
236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
237
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.9", ngImport: i0, type: ChartjsModule, imports: [ChartjsComponent], exports: [ChartjsComponent] }); }
238
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsModule }); }
210
239
  }
211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ChartjsModule, decorators: [{
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChartjsModule, decorators: [{
212
241
  type: NgModule,
213
242
  args: [{
214
243
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"coreui-angular-chartjs.mjs","sources":["../../../projects/coreui-angular-chartjs/src/lib/chartjs.component.ts","../../../projects/coreui-angular-chartjs/src/lib/chartjs.component.html","../../../projects/coreui-angular-chartjs/src/lib/chartjs.module.ts","../../../projects/coreui-angular-chartjs/src/public-api.ts","../../../projects/coreui-angular-chartjs/src/coreui-angular-chartjs.ts"],"sourcesContent":["import {\n afterNextRender,\n AfterRenderPhase,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n numberAttribute,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\n\nimport merge from 'lodash-es/merge';\n\nimport { Chart, ChartConfiguration, ChartType, DefaultDataPoint, registerables } from 'chart.js';\nimport { customTooltips as cuiCustomTooltips } from '@coreui/chartjs';\n\nChart.register(...registerables);\n\nlet nextId = 0;\n\n@Component({\n selector: 'c-chart',\n templateUrl: './chartjs.component.html',\n styleUrls: ['./chartjs.component.scss'],\n exportAs: 'cChart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n // host: { ngSkipHydration: 'true' }\n})\nexport class ChartjsComponent<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown> implements AfterViewInit, OnDestroy, OnChanges {\n\n @Input() customTooltips = true;\n @Input() data?: ChartConfiguration<TType, TData, TLabel>['data'];\n\n @HostBinding('style.height.px')\n @Input({ transform: (value: string | number) => numberAttribute(value, undefined) }) height?: string | number;\n\n @Input() id = `c-chartjs-${nextId++}`;\n @Input() options?: ChartConfiguration<TType, TData, TLabel>['options'];\n @Input() plugins: ChartConfiguration<TType, TData, TLabel>['plugins'] = [];\n\n @Input({ transform: booleanAttribute }) redraw: string | boolean = false;\n\n @Input() type: ChartConfiguration<TType, TData, TLabel>['type'] = 'bar' as TType;\n\n @HostBinding('style.width.px')\n @Input({ transform: (value: string | number) => numberAttribute(value, undefined) }) width?: string | number;\n\n @Input() wrapper = true;\n\n @Output() readonly getDatasetAtEvent = new EventEmitter<any>();\n @Output() readonly getElementAtEvent = new EventEmitter<any>();\n @Output() readonly getElementsAtEvent = new EventEmitter<any>();\n\n @Output() readonly chartRef = new EventEmitter<any>();\n\n @ViewChild('canvasElement') canvasElement!: ElementRef;\n\n chart!: Chart<TType, TData, TLabel>;\n ctx!: CanvasRenderingContext2D;\n\n @HostBinding('class')\n get hostClasses() {\n return {\n 'chart-wrapper': this.wrapper\n };\n }\n\n constructor(\n private elementRef: ElementRef,\n private ngZone: NgZone,\n private renderer: Renderer2,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n afterNextRender(() => {\n this.ctx = this.canvasElement?.nativeElement?.getContext('2d');\n this.chartRender();\n }, { phase: AfterRenderPhase.Read });\n }\n\n ngAfterViewInit(): void {\n this.chartRender();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data'] && !changes['data'].firstChange) {\n this.chartUpdate();\n }\n }\n\n ngOnDestroy(): void {\n this.chartDestroy();\n }\n\n public handleClick($event: MouseEvent) {\n if (!this.chart) {\n return;\n }\n\n const datasetAtEvent = this.chart.getElementsAtEventForMode($event, 'dataset', { intersect: true }, false);\n this.getDatasetAtEvent.emit(datasetAtEvent);\n\n const elementAtEvent = this.chart.getElementsAtEventForMode($event, 'nearest', { intersect: true }, false);\n this.getElementAtEvent.emit(elementAtEvent);\n\n const elementsAtEvent = this.chart.getElementsAtEventForMode($event, 'index', { intersect: true }, false);\n this.getElementsAtEvent.emit(elementsAtEvent);\n }\n\n public chartDestroy() {\n this.chart?.destroy();\n this.chartRef.emit(undefined);\n }\n\n public chartRender() {\n if (!this.canvasElement?.nativeElement || !this.ctx) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n const config = this.chartConfig();\n if (config) {\n setTimeout(() => {\n this.chart = new Chart(this.ctx, config);\n this.renderer.setStyle(this.canvasElement.nativeElement, 'display', 'block');\n this.changeDetectorRef.markForCheck();\n this.chartRef.emit(this.chart);\n });\n }\n });\n }\n\n chartUpdate() {\n if (!this.chart) {\n return;\n }\n\n if (this.redraw) {\n this.chartDestroy();\n setTimeout(() => {\n this.chartRender();\n });\n return;\n }\n\n const config = this.chartConfig();\n\n if (this.options) {\n Object.assign(this.chart.options ?? {}, config.options ?? {});\n }\n\n if (!this.chart.config.data) {\n this.chart.config.data = { ...config.data };\n this.chartUpdateOutsideAngular();\n }\n\n if (this.chart) {\n Object.assign(this.chart.config.options ?? {}, config.options ?? {});\n Object.assign(this.chart.config.plugins ?? [], config.plugins ?? []);\n Object.assign(this.chart.config.data, config.data);\n }\n\n this.chartUpdateOutsideAngular();\n }\n\n private chartUpdateOutsideAngular() {\n setTimeout(() => {\n this.ngZone.runOutsideAngular(() => {\n this.chart?.update();\n this.changeDetectorRef.markForCheck();\n });\n });\n }\n\n public chartToBase64Image(): string | undefined {\n return this.chart?.toBase64Image();\n }\n\n private chartDataConfig(): ChartConfiguration<TType, TData, TLabel>['data'] {\n return {\n labels: this.data?.labels ?? [],\n datasets: this.data?.datasets ?? []\n };\n }\n\n private chartOptions(): ChartConfiguration<TType, TData, TLabel>['options'] {\n return this.options;\n }\n\n private chartConfig(): ChartConfiguration<TType, TData, TLabel> {\n this.chartCustomTooltips();\n return {\n data: this.chartDataConfig(),\n options: this.chartOptions(),\n plugins: this.plugins,\n type: this.type\n };\n }\n\n private chartCustomTooltips() {\n if (this.customTooltips) {\n const options = this.options;\n // @ts-ignore\n const plugins = this.options?.plugins;\n // @ts-ignore\n const tooltip = this.options?.plugins?.tooltip;\n this.options = merge({\n ...options,\n plugins: {\n ...plugins,\n tooltip: {\n ...tooltip,\n enabled: false,\n mode: 'index',\n position: 'nearest',\n external: cuiCustomTooltips\n }\n }\n });\n }\n };\n}\n","<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content></ng-content>\n</canvas>\n","import { NgModule } from '@angular/core';\nimport { ChartjsComponent } from './chartjs.component';\n\n@NgModule({\n imports: [\n ChartjsComponent\n ],\n exports: [\n ChartjsComponent\n ]\n})\nexport class ChartjsModule {}\n","/*\n * Public API Surface of coreui-angular-chartjs\n */\n\nexport * from './lib/chartjs.component';\nexport * from './lib/chartjs.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["cuiCustomTooltips"],"mappings":"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"}
1
+ {"version":3,"file":"coreui-angular-chartjs.mjs","sources":["../../../projects/coreui-angular-chartjs/src/lib/chartjs.component.ts","../../../projects/coreui-angular-chartjs/src/lib/chartjs.component.html","../../../projects/coreui-angular-chartjs/src/lib/chartjs.module.ts","../../../projects/coreui-angular-chartjs/src/public-api.ts","../../../projects/coreui-angular-chartjs/src/coreui-angular-chartjs.ts"],"sourcesContent":["import {\n afterRender,\n AfterRenderPhase,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n numberAttribute,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\n\nimport merge from 'lodash-es/merge';\n\nimport type { ChartConfiguration, ChartData, ChartOptions, ChartType, InteractionItem, Plugin } from 'chart.js';\nimport { Chart as ChartJS, registerables } from 'chart.js';\nimport { customTooltips as cuiCustomTooltips } from '@coreui/chartjs';\n\nChartJS.register(...registerables);\n\nlet nextId = 0;\n\n@Component({\n selector: 'c-chart',\n templateUrl: './chartjs.component.html',\n styleUrls: ['./chartjs.component.scss'],\n exportAs: 'cChart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n // host: { ngSkipHydration: 'true' }\n})\nexport class ChartjsComponent implements AfterViewInit, OnDestroy, OnChanges {\n\n /**\n * Enables custom html based tooltips instead of standard tooltips.\n * @type boolean\n * @default true\n */\n @Input({ transform: booleanAttribute }) customTooltips: boolean = true;\n\n /**\n * The data object that is passed into the Chart.js chart (more info).\n */\n @Input() data?: ChartData;\n\n /**\n * A fallback when the canvas cannot be rendered. Can be used for accessible chart descriptions.\n */\n // @Input() fallbackContent?: TemplateRef<any>;\n\n /**\n * Height attribute applied to the rendered canvas.\n * @type number | undefined\n * @default 150\n */\n @HostBinding('style.height.px')\n @Input({ transform: (value: string | number) => numberAttribute(value, undefined) }) height?: number;\n\n /**\n * ID attribute applied to the rendered canvas.\n * @type string\n */\n @Input() id: string = `c-chartjs-${nextId++}`;\n\n /**\n * The options object that is passed into the Chart.js chart.\n */\n @Input() options?: ChartOptions = {};\n\n /**\n * The plugins array that is passed into the Chart.js chart\n */\n @Input() plugins: Plugin[] = [];\n\n /**\n * If true, will tear down and redraw chart on all updates.\n * @type boolean\n * @default false\n */\n @Input({ transform: booleanAttribute }) redraw: boolean = false;\n\n /**\n * Chart.js chart type.\n * @type {'line' | 'bar' | 'radar' | 'doughnut' | 'polarArea' | 'bubble' | 'pie' | 'scatter'}\n */\n @Input() type: ChartType = 'bar';\n\n /**\n * Width attribute applied to the rendered canvas.\n * @type number | undefined\n * @default 300\n */\n @HostBinding('style.width.px')\n @Input({ transform: (value: string | number) => numberAttribute(value, undefined) }) width?: number;\n\n /**\n * Put the chart into the wrapper div element.\n * @default true\n */\n @Input({ transform: booleanAttribute }) wrapper = true;\n\n @Output() readonly getDatasetAtEvent = new EventEmitter<any>();\n @Output() readonly getElementAtEvent = new EventEmitter<any>();\n @Output() readonly getElementsAtEvent = new EventEmitter<any>();\n\n @Output() readonly chartRef = new EventEmitter<any>();\n\n @ViewChild('canvasElement') canvasElement!: ElementRef;\n\n chart!: ChartJS;\n ctx!: CanvasRenderingContext2D;\n\n @HostBinding('class')\n get hostClasses() {\n return {\n 'chart-wrapper': this.wrapper\n };\n }\n\n constructor(\n private readonly ngZone: NgZone,\n private readonly renderer: Renderer2,\n private readonly changeDetectorRef: ChangeDetectorRef\n ) {\n // todo: verify afterRender / afterNextRender for chartjs (spec fails with 17.0.10)\n afterRender(() => {\n this.ctx = this.canvasElement?.nativeElement?.getContext('2d');\n this.chartRender();\n }, { phase: AfterRenderPhase.Write });\n }\n\n ngAfterViewInit(): void {\n this.chartRender();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data'] && !changes['data'].firstChange) {\n this.chartUpdate();\n }\n }\n\n ngOnDestroy(): void {\n this.chartDestroy();\n }\n\n public handleClick($event: MouseEvent) {\n if (!this.chart) {\n return;\n }\n\n const datasetAtEvent: InteractionItem[] = this.chart.getElementsAtEventForMode($event, 'dataset', { intersect: true }, false);\n this.getDatasetAtEvent.emit(datasetAtEvent);\n\n const elementAtEvent: InteractionItem[] = this.chart.getElementsAtEventForMode($event, 'nearest', { intersect: true }, false);\n this.getElementAtEvent.emit(elementAtEvent);\n\n const elementsAtEvent: InteractionItem[] = this.chart.getElementsAtEventForMode($event, 'index', { intersect: true }, false);\n this.getElementsAtEvent.emit(elementsAtEvent);\n }\n\n public chartDestroy() {\n this.chart?.destroy();\n this.chartRef.emit(undefined);\n }\n\n public chartRender() {\n if (!this.canvasElement?.nativeElement || !this.ctx || this.chart) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n const config = this.chartConfig();\n if (config) {\n this.chart = new ChartJS(this.ctx, config);\n this.ngZone.run(() => {\n this.renderer.setStyle(this.canvasElement.nativeElement, 'display', 'block');\n this.changeDetectorRef.markForCheck();\n this.chartRef.emit(this.chart);\n });\n }\n });\n }\n\n chartUpdate() {\n if (!this.chart) {\n return;\n }\n\n if (this.redraw) {\n this.chartDestroy();\n this.chartRender();\n return;\n }\n\n const config: ChartConfiguration = this.chartConfig();\n\n if (this.options) {\n Object.assign(this.chart.options ?? {}, config.options ?? {});\n }\n\n if (!this.chart.config.data) {\n this.chart.config.data = { ...config.data };\n this.chartUpdateOutsideAngular();\n }\n\n if (this.chart) {\n Object.assign(this.chart.config.options ?? {}, config.options ?? {});\n Object.assign(this.chart.config.plugins ?? [], config.plugins ?? []);\n Object.assign(this.chart.config.data, config.data);\n }\n\n this.chartUpdateOutsideAngular();\n }\n\n private chartUpdateOutsideAngular() {\n setTimeout(() => {\n this.ngZone.runOutsideAngular(() => {\n this.chart?.update();\n this.ngZone.run(() => {\n this.changeDetectorRef.markForCheck();\n });\n });\n });\n }\n\n public chartToBase64Image(): string | undefined {\n return this.chart?.toBase64Image();\n }\n\n private chartDataConfig(): ChartData {\n return {\n labels: this.data?.labels ?? [],\n datasets: this.data?.datasets ?? []\n };\n }\n\n private chartOptions(): ChartOptions {\n return this.options ?? {};\n }\n\n private chartConfig(): ChartConfiguration {\n this.chartCustomTooltips();\n return {\n data: this.chartDataConfig(),\n options: this.chartOptions(),\n plugins: this.plugins,\n type: this.type\n };\n }\n\n private chartCustomTooltips() {\n if (this.customTooltips) {\n const options = this.options;\n const plugins = this.options?.plugins;\n const tooltip = this.options?.plugins?.tooltip;\n this.options = merge({\n ...options,\n plugins: {\n ...plugins,\n tooltip: {\n ...tooltip,\n enabled: false,\n mode: 'index',\n position: 'nearest',\n external: cuiCustomTooltips\n }\n }\n });\n }\n };\n}\n","<canvas\n #canvasElement\n (click)=\"handleClick($event)\"\n [height]=\"height\"\n [id]=\"id\"\n [width]=\"width\"\n role=\"img\"\n style=\"display: none;\"\n>\n <ng-content />\n <!-- <ng-container *ngTemplateOutlet=\"fallbackContent\"/>-->\n</canvas>\n","import { NgModule } from '@angular/core';\nimport { ChartjsComponent } from './chartjs.component';\n\n@NgModule({\n imports: [\n ChartjsComponent\n ],\n exports: [\n ChartjsComponent\n ]\n})\nexport class ChartjsModule {}\n","/*\n * Public API Surface of coreui-angular-chartjs\n */\n\nexport * from './lib/chartjs.component';\nexport * from './lib/chartjs.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ChartJS","cuiCustomTooltips"],"mappings":"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"}
@@ -1,32 +1,76 @@
1
1
  import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';
2
- import { Chart, ChartConfiguration, ChartType, DefaultDataPoint } from 'chart.js';
2
+ import type { ChartData, ChartOptions, ChartType, Plugin } from 'chart.js';
3
+ import { Chart as ChartJS } from 'chart.js';
3
4
  import * as i0 from "@angular/core";
4
- export declare class ChartjsComponent<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown> implements AfterViewInit, OnDestroy, OnChanges {
5
- private elementRef;
6
- private ngZone;
7
- private renderer;
8
- private changeDetectorRef;
5
+ export declare class ChartjsComponent implements AfterViewInit, OnDestroy, OnChanges {
6
+ private readonly ngZone;
7
+ private readonly renderer;
8
+ private readonly changeDetectorRef;
9
+ /**
10
+ * Enables custom html based tooltips instead of standard tooltips.
11
+ * @type boolean
12
+ * @default true
13
+ */
9
14
  customTooltips: boolean;
10
- data?: ChartConfiguration<TType, TData, TLabel>['data'];
11
- height?: string | number;
15
+ /**
16
+ * The data object that is passed into the Chart.js chart (more info).
17
+ */
18
+ data?: ChartData;
19
+ /**
20
+ * A fallback when the canvas cannot be rendered. Can be used for accessible chart descriptions.
21
+ */
22
+ /**
23
+ * Height attribute applied to the rendered canvas.
24
+ * @type number | undefined
25
+ * @default 150
26
+ */
27
+ height?: number;
28
+ /**
29
+ * ID attribute applied to the rendered canvas.
30
+ * @type string
31
+ */
12
32
  id: string;
13
- options?: ChartConfiguration<TType, TData, TLabel>['options'];
14
- plugins: ChartConfiguration<TType, TData, TLabel>['plugins'];
15
- redraw: string | boolean;
16
- type: ChartConfiguration<TType, TData, TLabel>['type'];
17
- width?: string | number;
33
+ /**
34
+ * The options object that is passed into the Chart.js chart.
35
+ */
36
+ options?: ChartOptions;
37
+ /**
38
+ * The plugins array that is passed into the Chart.js chart
39
+ */
40
+ plugins: Plugin[];
41
+ /**
42
+ * If true, will tear down and redraw chart on all updates.
43
+ * @type boolean
44
+ * @default false
45
+ */
46
+ redraw: boolean;
47
+ /**
48
+ * Chart.js chart type.
49
+ * @type {'line' | 'bar' | 'radar' | 'doughnut' | 'polarArea' | 'bubble' | 'pie' | 'scatter'}
50
+ */
51
+ type: ChartType;
52
+ /**
53
+ * Width attribute applied to the rendered canvas.
54
+ * @type number | undefined
55
+ * @default 300
56
+ */
57
+ width?: number;
58
+ /**
59
+ * Put the chart into the wrapper div element.
60
+ * @default true
61
+ */
18
62
  wrapper: boolean;
19
63
  readonly getDatasetAtEvent: EventEmitter<any>;
20
64
  readonly getElementAtEvent: EventEmitter<any>;
21
65
  readonly getElementsAtEvent: EventEmitter<any>;
22
66
  readonly chartRef: EventEmitter<any>;
23
67
  canvasElement: ElementRef;
24
- chart: Chart<TType, TData, TLabel>;
68
+ chart: ChartJS;
25
69
  ctx: CanvasRenderingContext2D;
26
70
  get hostClasses(): {
27
71
  'chart-wrapper': boolean;
28
72
  };
29
- constructor(elementRef: ElementRef, ngZone: NgZone, renderer: Renderer2, changeDetectorRef: ChangeDetectorRef);
73
+ constructor(ngZone: NgZone, renderer: Renderer2, changeDetectorRef: ChangeDetectorRef);
30
74
  ngAfterViewInit(): void;
31
75
  ngOnChanges(changes: SimpleChanges): void;
32
76
  ngOnDestroy(): void;
@@ -40,9 +84,11 @@ export declare class ChartjsComponent<TType extends ChartType = ChartType, TData
40
84
  private chartOptions;
41
85
  private chartConfig;
42
86
  private chartCustomTooltips;
43
- static ɵfac: i0.ɵɵFactoryDeclaration<ChartjsComponent<any, any, any>, never>;
44
- static ɵcmp: i0.ɵɵComponentDeclaration<ChartjsComponent<any, any, any>, "c-chart", ["cChart"], { "customTooltips": { "alias": "customTooltips"; "required": false; }; "data": { "alias": "data"; "required": false; }; "height": { "alias": "height"; "required": false; }; "id": { "alias": "id"; "required": false; }; "options": { "alias": "options"; "required": false; }; "plugins": { "alias": "plugins"; "required": false; }; "redraw": { "alias": "redraw"; "required": false; }; "type": { "alias": "type"; "required": false; }; "width": { "alias": "width"; "required": false; }; "wrapper": { "alias": "wrapper"; "required": false; }; }, { "getDatasetAtEvent": "getDatasetAtEvent"; "getElementAtEvent": "getElementAtEvent"; "getElementsAtEvent": "getElementsAtEvent"; "chartRef": "chartRef"; }, never, ["*"], true, never>;
87
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChartjsComponent, never>;
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChartjsComponent, "c-chart", ["cChart"], { "customTooltips": { "alias": "customTooltips"; "required": false; }; "data": { "alias": "data"; "required": false; }; "height": { "alias": "height"; "required": false; }; "id": { "alias": "id"; "required": false; }; "options": { "alias": "options"; "required": false; }; "plugins": { "alias": "plugins"; "required": false; }; "redraw": { "alias": "redraw"; "required": false; }; "type": { "alias": "type"; "required": false; }; "width": { "alias": "width"; "required": false; }; "wrapper": { "alias": "wrapper"; "required": false; }; }, { "getDatasetAtEvent": "getDatasetAtEvent"; "getElementAtEvent": "getElementAtEvent"; "getElementsAtEvent": "getElementsAtEvent"; "chartRef": "chartRef"; }, never, ["*"], true, never>;
89
+ static ngAcceptInputType_customTooltips: unknown;
45
90
  static ngAcceptInputType_height: string | number;
46
91
  static ngAcceptInputType_redraw: unknown;
47
92
  static ngAcceptInputType_width: string | number;
93
+ static ngAcceptInputType_wrapper: unknown;
48
94
  }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@coreui/angular-chartjs",
3
- "version": "4.7.8",
3
+ "version": "5.0.0-alpha.10",
4
4
  "description": "Angular wrapper component for Chart.js",
5
- "copyright": "Copyright 2023 creativeLabs Łukasz Holeczek",
5
+ "copyright": "Copyright 2024 creativeLabs Łukasz Holeczek",
6
6
  "license": "MIT",
7
7
  "homepage": "https://coreui.io/angular",
8
8
  "author": {
@@ -28,8 +28,8 @@
28
28
  "@angular/cdk": "^17.0.0",
29
29
  "@angular/common": "^17.0.0",
30
30
  "@angular/core": "^17.0.0",
31
- "@coreui/chartjs": "^3.0.0",
32
- "chart.js": "^3.9.1"
31
+ "@coreui/chartjs": "^4.0.0-0 || ^4.0.0",
32
+ "chart.js": "^4.4.1"
33
33
  },
34
34
  "dependencies": {
35
35
  "lodash-es": "^4.17.21",