@rfprodz/client-d3-charts 1.4.11 → 1.4.12
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/esm2022/lib/components/_base/chart.base.mjs +4 -0
- package/esm2022/lib/components/bar-chart/bar-chart.component.mjs +17 -25
- package/esm2022/lib/components/force-directed-chart/force-directed-chart.component.mjs +17 -25
- package/esm2022/lib/components/gauge-chart/gauge-chart.component.mjs +18 -28
- package/esm2022/lib/components/line-chart/line-chart.component.mjs +17 -25
- package/esm2022/lib/components/pie-chart/pie-chart.component.mjs +17 -25
- package/esm2022/lib/components/radar-chart/radar-chart.component.mjs +17 -25
- package/esm2022/lib/interfaces/line-chart.interface.mjs +1 -1
- package/esm2022/lib/interfaces/pie-chart.interface.mjs +1 -1
- package/esm2022/lib/interfaces/radar-chart.interface.mjs +1 -1
- package/esm2022/lib/providers/d3-chart-factory.provider.mjs +3 -1
- package/fesm2022/rfprodz-client-d3-charts.mjs +97 -147
- package/fesm2022/rfprodz-client-d3-charts.mjs.map +1 -1
- package/lib/components/_base/chart.base.d.ts +16 -0
- package/lib/components/bar-chart/bar-chart.component.d.ts +22 -30
- package/lib/components/force-directed-chart/force-directed-chart.component.d.ts +22 -30
- package/lib/components/gauge-chart/gauge-chart.component.d.ts +23 -33
- package/lib/components/line-chart/line-chart.component.d.ts +22 -30
- package/lib/components/pie-chart/pie-chart.component.d.ts +22 -30
- package/lib/components/radar-chart/radar-chart.component.d.ts +22 -30
- package/lib/interfaces/line-chart.interface.d.ts +24 -0
- package/lib/interfaces/pie-chart.interface.d.ts +4 -0
- package/lib/interfaces/radar-chart.interface.d.ts +19 -1
- package/lib/providers/d3-chart-factory.provider.d.ts +3 -0
- package/package.json +1 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** D3 chart base class. */
|
|
2
|
+
export class AppD3ChartBase {
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2NvbXBvbmVudHMvX2Jhc2UvY2hhcnQuYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSwyQkFBMkI7QUFDM0IsTUFBTSxPQUFnQixjQUFjO0NBa0JuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqIEQzIGNoYXJ0IGJhc2UgY2xhc3MuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwRDNDaGFydEJhc2U8VCwgTz4ge1xuICAvKiogQSBjaGFydCBpZC4gKi9cbiAgcHVibGljIGFic3RyYWN0IGNoYXJ0SWQ6IHN0cmluZztcblxuICAvKiogQSBjaGFydCBkYXRhLiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZGF0YTogVDtcblxuICAvKiogQSBjaGFydCBvcHRpb25zLiAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgb3B0aW9uczogTztcblxuICAvKiogRDMgY2hhcnQgdmlldyBjaGlsZCByZWZlcmVuY2UuICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvKiogVGhlIGNoYXJ0IG9wdGlvbnMgY29uc3RydWN0b3IuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjaGFydE9wdGlvbnMoKTogTztcblxuICAvKiogRHJhd3MgdGhlIGNoYXJ0LiAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZHJhd0NoYXJ0KCk6IHZvaWQ7XG59XG4iXX0=
|
|
@@ -2,28 +2,26 @@ import { DOCUMENT } from '@angular/common';
|
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild } from '@angular/core';
|
|
3
3
|
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
4
|
import { defaultBarChartConfig } from '../../util/bar-chart.util';
|
|
5
|
+
import { AppD3ChartBase } from '../_base/chart.base';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
|
-
|
|
7
|
+
/** The bar chart component. */
|
|
8
|
+
export class AppBarChartComponent extends AppD3ChartBase {
|
|
9
|
+
/**
|
|
10
|
+
* @param doc The web page's Document object.
|
|
11
|
+
* @param d3Factory D3 chart factory.
|
|
12
|
+
*/
|
|
7
13
|
constructor(doc, d3Factory) {
|
|
14
|
+
super();
|
|
8
15
|
this.doc = doc;
|
|
9
16
|
this.d3Factory = d3Factory;
|
|
10
|
-
/**
|
|
11
|
-
* The chart id.
|
|
12
|
-
*/
|
|
17
|
+
/** The chart id. */
|
|
13
18
|
this.chartId = 'bar-0';
|
|
14
|
-
/**
|
|
15
|
-
* The chart data.
|
|
16
|
-
*/
|
|
19
|
+
/** The chart data. */
|
|
17
20
|
this.data = [];
|
|
18
|
-
/**
|
|
19
|
-
* The chart options.
|
|
20
|
-
*/
|
|
21
|
+
/** The chart options. */
|
|
21
22
|
this.options = {};
|
|
22
23
|
}
|
|
23
|
-
/**
|
|
24
|
-
* The chart options constructor.
|
|
25
|
-
* @returns chart options
|
|
26
|
-
*/
|
|
24
|
+
/** The chart options constructor. */
|
|
27
25
|
chartOptions() {
|
|
28
26
|
const bodyWidthAdjustment = 10;
|
|
29
27
|
const width = Math.min(this.options.width ?? defaultBarChartConfig.width, this.doc.body.clientWidth - defaultBarChartConfig.margin.left - defaultBarChartConfig.margin.right - bodyWidthAdjustment);
|
|
@@ -37,24 +35,18 @@ export class AppBarChartComponent {
|
|
|
37
35
|
};
|
|
38
36
|
return options;
|
|
39
37
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Draws the chart.
|
|
42
|
-
*/
|
|
38
|
+
/** Draws the chart. */
|
|
43
39
|
drawChart() {
|
|
44
40
|
if (typeof this.container !== 'undefined') {
|
|
45
41
|
const options = this.chartOptions();
|
|
46
42
|
this.d3Factory.drawBarChart(this.container, this.data, options);
|
|
47
43
|
}
|
|
48
44
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Actually draws the chart after the component view is initialized.
|
|
51
|
-
*/
|
|
45
|
+
/** Actually draws the chart after the component view is initialized. */
|
|
52
46
|
ngAfterViewInit() {
|
|
53
47
|
this.drawChart();
|
|
54
48
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Redraws the chart on changes.
|
|
57
|
-
*/
|
|
49
|
+
/** Redraws the chart on changes. */
|
|
58
50
|
ngOnChanges(changes) {
|
|
59
51
|
const data = changes.data?.currentValue;
|
|
60
52
|
const options = changes.options?.currentValue;
|
|
@@ -63,7 +55,7 @@ export class AppBarChartComponent {
|
|
|
63
55
|
}
|
|
64
56
|
}
|
|
65
57
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppBarChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
66
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppBarChartComponent, selector: "app-bar-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
58
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppBarChartComponent, selector: "app-bar-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
67
59
|
}
|
|
68
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppBarChartComponent, decorators: [{
|
|
69
61
|
type: Component,
|
|
@@ -84,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
|
|
|
84
76
|
type: ViewChild,
|
|
85
77
|
args: ['container']
|
|
86
78
|
}] } });
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2NvbXBvbmVudHMvYmFyLWNoYXJ0L2Jhci1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2Jhci1jaGFydC9iYXItY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUluSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0sMkNBQTJDLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUtyRCwrQkFBK0I7QUFPL0IsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGNBQXFDO0lBYTdFOzs7T0FHRztJQUNILFlBQ3FDLEdBQWEsRUFDTCxTQUEwQjtRQUVyRSxLQUFLLEVBQUUsQ0FBQztRQUgyQixRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQ0wsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFsQnZFLG9CQUFvQjtRQUNKLFlBQU8sR0FBRyxPQUFPLENBQUM7UUFFbEMsc0JBQXNCO1FBQ04sU0FBSSxHQUFhLEVBQUUsQ0FBQztRQUVwQyx5QkFBeUI7UUFDVCxZQUFPLEdBQWdCLEVBQUUsQ0FBQztJQWMxQyxDQUFDO0lBRUQscUNBQXFDO0lBQzNCLFlBQVk7UUFDcEIsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUN6SCxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxFQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUN6SCxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxPQUFPLEdBQWdCO1lBQzNCLEtBQUs7WUFDTCxNQUFNO1lBQ04sVUFBVTtZQUNWLEdBQUcsSUFBSSxDQUFDLE9BQU87U0FDaEIsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx1QkFBdUI7SUFDYixTQUFTO1FBQ2pCLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUNqRSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0NBQW9DO0lBQzdCLFdBQVcsQ0FBQyxPQUEyQjtRQUM1QyxNQUFNLElBQUksR0FBYSxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBZ0IsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQzFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7aUlBakVVLG9CQUFvQixrQkFrQnJCLFFBQVEsYUFDUixnQkFBZ0I7cUhBbkJmLG9CQUFvQiwyUUNuQmpDLG1FQUNBOzsyRkRrQmEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTTs7MEJBb0I1QyxNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsZ0JBQWdCO3lDQWpCVixPQUFPO3NCQUF0QixLQUFLO2dCQUdVLElBQUk7c0JBQW5CLEtBQUs7Z0JBR1UsT0FBTztzQkFBdEIsS0FBSztnQkFHa0MsU0FBUztzQkFBaEQsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSUJhckNoYXJ0T3B0aW9ucywgVEJhckNoYXJ0RGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYmFyLWNoYXJ0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ2hhcnRJbnB1dENoYW5nZXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NoYXJ0LWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRDNfQ0hBUlRfRkFDVE9SWSwgSUQzQ2hhcnRGYWN0b3J5IH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL2QzLWNoYXJ0LWZhY3RvcnkucHJvdmlkZXInO1xuaW1wb3J0IHsgZGVmYXVsdEJhckNoYXJ0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbC9iYXItY2hhcnQudXRpbCc7XG5pbXBvcnQgeyBBcHBEM0NoYXJ0QmFzZSB9IGZyb20gJy4uL19iYXNlL2NoYXJ0LmJhc2UnO1xuXG50eXBlIFRCYXJEYXRhID0gVEJhckNoYXJ0RGF0YTtcbnR5cGUgVEJhck9wdGlvbnMgPSBQYXJ0aWFsPElCYXJDaGFydE9wdGlvbnM+O1xuXG4vKiogVGhlIGJhciBjaGFydCBjb21wb25lbnQuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYmFyLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhci1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Jhci1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwQmFyQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBBcHBEM0NoYXJ0QmFzZTxUQmFyRGF0YSwgVEJhck9wdGlvbnM+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIFRoZSBjaGFydCBpZC4gKi9cbiAgQElucHV0KCkgcHVibGljIGNoYXJ0SWQgPSAnYmFyLTAnO1xuXG4gIC8qKiBUaGUgY2hhcnQgZGF0YS4gKi9cbiAgQElucHV0KCkgcHVibGljIGRhdGE6IFRCYXJEYXRhID0gW107XG5cbiAgLyoqIFRoZSBjaGFydCBvcHRpb25zLiAqL1xuICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogVEJhck9wdGlvbnMgPSB7fTtcblxuICAvKiogRDMgY2hhcnQgdmlldyBjaGlsZCByZWZlcmVuY2UuICovXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHB1YmxpYyByZWFkb25seSBjb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvKipcbiAgICogQHBhcmFtIGRvYyBUaGUgd2ViIHBhZ2UncyBEb2N1bWVudCBvYmplY3QuXG4gICAqIEBwYXJhbSBkM0ZhY3RvcnkgRDMgY2hhcnQgZmFjdG9yeS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jOiBEb2N1bWVudCxcbiAgICBASW5qZWN0KEQzX0NIQVJUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgZDNGYWN0b3J5OiBJRDNDaGFydEZhY3RvcnksXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKiogVGhlIGNoYXJ0IG9wdGlvbnMgY29uc3RydWN0b3IuICovXG4gIHByb3RlY3RlZCBjaGFydE9wdGlvbnMoKTogVEJhck9wdGlvbnMge1xuICAgIGNvbnN0IGJvZHlXaWR0aEFkanVzdG1lbnQgPSAxMDtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKFxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID8/IGRlZmF1bHRCYXJDaGFydENvbmZpZy53aWR0aCxcbiAgICAgIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBkZWZhdWx0QmFyQ2hhcnRDb25maWcubWFyZ2luLmxlZnQgLSBkZWZhdWx0QmFyQ2hhcnRDb25maWcubWFyZ2luLnJpZ2h0IC0gYm9keVdpZHRoQWRqdXN0bWVudCxcbiAgICApO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWluKFxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA/PyB3aWR0aCxcbiAgICAgIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBkZWZhdWx0QmFyQ2hhcnRDb25maWcubWFyZ2luLnRvcCAtIGRlZmF1bHRCYXJDaGFydENvbmZpZy5tYXJnaW4uYm90dG9tIC0gYm9keVdpZHRoQWRqdXN0bWVudCxcbiAgICApO1xuICAgIGNvbnN0IHlBeGlzVGlja3MgPSBNYXRoLm1heCguLi50aGlzLmRhdGEubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSkpO1xuICAgIGNvbnN0IG9wdGlvbnM6IFRCYXJPcHRpb25zID0ge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICB5QXhpc1RpY2tzLFxuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgIH07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKiogRHJhd3MgdGhlIGNoYXJ0LiAqL1xuICBwcm90ZWN0ZWQgZHJhd0NoYXJ0KCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb250YWluZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jaGFydE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuZDNGYWN0b3J5LmRyYXdCYXJDaGFydCh0aGlzLmNvbnRhaW5lciwgdGhpcy5kYXRhLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWN0dWFsbHkgZHJhd3MgdGhlIGNoYXJ0IGFmdGVyIHRoZSBjb21wb25lbnQgdmlldyBpcyBpbml0aWFsaXplZC4gKi9cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdDaGFydCgpO1xuICB9XG5cbiAgLyoqIFJlZHJhd3MgdGhlIGNoYXJ0IG9uIGNoYW5nZXMuICovXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBJQ2hhcnRJbnB1dENoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBUQmFyRGF0YSA9IGNoYW5nZXMuZGF0YT8uY3VycmVudFZhbHVlO1xuICAgIGNvbnN0IG9wdGlvbnM6IFRCYXJPcHRpb25zID0gY2hhbmdlcy5vcHRpb25zPy5jdXJyZW50VmFsdWU7XG4gICAgaWYgKCh0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSAhPT0gbnVsbCkgfHwgKHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiBvcHRpb25zICE9PSBudWxsKSkge1xuICAgICAgdGhpcy5kcmF3Q2hhcnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBpZD1cInt7IGNoYXJ0SWQgfX1cIiAjY29udGFpbmVyPjwvZGl2PlxuIl19
|
|
@@ -1,33 +1,31 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild } from '@angular/core';
|
|
3
3
|
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
|
+
import { AppD3ChartBase } from '../_base/chart.base';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
|
|
6
|
+
/** The force directed chart component. */
|
|
7
|
+
export class AppForceDirectedChartComponent extends AppD3ChartBase {
|
|
8
|
+
/**
|
|
9
|
+
* @param doc The web page's Document object.
|
|
10
|
+
* @param d3Factory D3 chart factory.
|
|
11
|
+
*/
|
|
6
12
|
constructor(doc, d3Factory) {
|
|
13
|
+
super();
|
|
7
14
|
this.doc = doc;
|
|
8
15
|
this.d3Factory = d3Factory;
|
|
9
|
-
/**
|
|
10
|
-
* The chart identifier.
|
|
11
|
-
*/
|
|
16
|
+
/** The chart identifier. */
|
|
12
17
|
this.chartId = 'force-0';
|
|
13
|
-
/**
|
|
14
|
-
* The chart data.
|
|
15
|
-
*/
|
|
18
|
+
/** The chart data. */
|
|
16
19
|
this.data = {
|
|
17
20
|
domains: [],
|
|
18
21
|
entities: [],
|
|
19
22
|
links: [],
|
|
20
23
|
nodes: [],
|
|
21
24
|
};
|
|
22
|
-
/**
|
|
23
|
-
* The chart options.
|
|
24
|
-
*/
|
|
25
|
+
/** The chart options. */
|
|
25
26
|
this.options = {};
|
|
26
27
|
}
|
|
27
|
-
/**
|
|
28
|
-
* The chart options constructor.
|
|
29
|
-
* @returns chart options
|
|
30
|
-
*/
|
|
28
|
+
/** The chart options constructor. */
|
|
31
29
|
chartOptions() {
|
|
32
30
|
const margin = { top: 50, right: 50, bottom: 50, left: 50 };
|
|
33
31
|
const minWidth = 350;
|
|
@@ -40,24 +38,18 @@ export class AppForceDirectedChartComponent {
|
|
|
40
38
|
const options = { width, height, margin, ...this.options };
|
|
41
39
|
return options;
|
|
42
40
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Draws the chart.
|
|
45
|
-
*/
|
|
41
|
+
/** Draws the chart. */
|
|
46
42
|
drawChart() {
|
|
47
43
|
if (typeof this.container !== 'undefined') {
|
|
48
44
|
const options = this.chartOptions();
|
|
49
45
|
this.d3Factory.drawForceDirectedChart(this.container, this.data, options);
|
|
50
46
|
}
|
|
51
47
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Actually draws the chart after the component view is initialized.
|
|
54
|
-
*/
|
|
48
|
+
/** Actually draws the chart after the component view is initialized. */
|
|
55
49
|
ngAfterViewInit() {
|
|
56
50
|
this.drawChart();
|
|
57
51
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Redraws the chart on changes.
|
|
60
|
-
*/
|
|
52
|
+
/** Redraws the chart on changes. */
|
|
61
53
|
ngOnChanges(changes) {
|
|
62
54
|
const prevData = changes.data?.previousValue;
|
|
63
55
|
const nextData = changes.data?.currentValue;
|
|
@@ -68,7 +60,7 @@ export class AppForceDirectedChartComponent {
|
|
|
68
60
|
}
|
|
69
61
|
}
|
|
70
62
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppForceDirectedChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
63
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
72
64
|
}
|
|
73
65
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppForceDirectedChartComponent, decorators: [{
|
|
74
66
|
type: Component,
|
|
@@ -89,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
|
|
|
89
81
|
type: ViewChild,
|
|
90
82
|
args: ['container']
|
|
91
83
|
}] } });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtZGlyZWN0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9mb3JjZS1kaXJlY3RlZC1jaGFydC9mb3JjZS1kaXJlY3RlZC1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2ZvcmNlLWRpcmVjdGVkLWNoYXJ0L2ZvcmNlLWRpcmVjdGVkLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkksT0FBTyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLDJDQUEyQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLckQsMENBQTBDO0FBTzFDLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxjQUF5QztJQWtCM0Y7OztPQUdHO0lBQ0gsWUFDcUMsR0FBYSxFQUNMLFNBQTBCO1FBRXJFLEtBQUssRUFBRSxDQUFDO1FBSDJCLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDTCxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQXZCdkUsNEJBQTRCO1FBQ1osWUFBTyxHQUFHLFNBQVMsQ0FBQztRQUVwQyxzQkFBc0I7UUFDTixTQUFJLEdBQWU7WUFDakMsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBRUYseUJBQXlCO1FBQ1QsWUFBTyxHQUFrQixFQUFFLENBQUM7SUFjNUMsQ0FBQztJQUVELHFDQUFxQztJQUMzQixZQUFZO1FBQ3BCLE1BQU0sTUFBTSxHQUE0QixFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNyRixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDckIsTUFBTSxTQUFTLEdBQUc7WUFDaEIsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzRyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRyxNQUFNLE9BQU8sR0FBa0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxRSxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsdUJBQXVCO0lBQ2IsU0FBUztRQUNqQixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUNqRSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0NBQW9DO0lBQzdCLFdBQVcsQ0FBQyxPQUEyQjtRQUM1QyxNQUFNLFFBQVEsR0FBMkIsT0FBTyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7UUFDckUsTUFBTSxRQUFRLEdBQTJCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO1FBQ3BFLE1BQU0sT0FBTyxHQUFrQixPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztRQUM3RCxJQUNFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzFHLENBQUMsT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFDcEQ7WUFDQSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO2lJQW5FVSw4QkFBOEIsa0JBdUIvQixRQUFRLGFBQ1IsZ0JBQWdCO3FIQXhCZiw4QkFBOEIsc1JDbEIzQyxrS0FLQTs7MkZEYWEsOEJBQThCO2tCQU4xQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTTs7MEJBeUI1QyxNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsZ0JBQWdCO3lDQXRCVixPQUFPO3NCQUF0QixLQUFLO2dCQUdVLElBQUk7c0JBQW5CLEtBQUs7Z0JBUVUsT0FBTztzQkFBdEIsS0FBSztnQkFHa0MsU0FBUztzQkFBaEQsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSUNoYXJ0SW5wdXRDaGFuZ2VzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jaGFydC1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhLCBJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZm9yY2UtZGlyZWN0ZWQtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEQzX0NIQVJUX0ZBQ1RPUlksIElEM0NoYXJ0RmFjdG9yeSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9kMy1jaGFydC1mYWN0b3J5LnByb3ZpZGVyJztcbmltcG9ydCB7IEFwcEQzQ2hhcnRCYXNlIH0gZnJvbSAnLi4vX2Jhc2UvY2hhcnQuYmFzZSc7XG5cbnR5cGUgVEZvcmNlRGF0YSA9IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhO1xudHlwZSBURm9yY2VPcHRpb25zID0gUGFydGlhbDxJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucz47XG5cbi8qKiBUaGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQgY29tcG9uZW50LiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZvcmNlLWRpcmVjdGVkLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZvcmNlLWRpcmVjdGVkLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9yY2UtZGlyZWN0ZWQtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcEZvcmNlRGlyZWN0ZWRDaGFydENvbXBvbmVudCBleHRlbmRzIEFwcEQzQ2hhcnRCYXNlPFRGb3JjZURhdGEsIFRGb3JjZU9wdGlvbnM+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIFRoZSBjaGFydCBpZGVudGlmaWVyLiAqL1xuICBASW5wdXQoKSBwdWJsaWMgY2hhcnRJZCA9ICdmb3JjZS0wJztcblxuICAvKiogVGhlIGNoYXJ0IGRhdGEuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhOiBURm9yY2VEYXRhID0ge1xuICAgIGRvbWFpbnM6IFtdLFxuICAgIGVudGl0aWVzOiBbXSxcbiAgICBsaW5rczogW10sXG4gICAgbm9kZXM6IFtdLFxuICB9O1xuXG4gIC8qKiBUaGUgY2hhcnQgb3B0aW9ucy4gKi9cbiAgQElucHV0KCkgcHVibGljIG9wdGlvbnM6IFRGb3JjZU9wdGlvbnMgPSB7fTtcblxuICAvKiogVGhlIGNoYXJ0IGNvbnRhaW5lciB2aWV3IGNoaWxkIHJlZmVyZW5jZS4gKi9cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gZG9jIFRoZSB3ZWIgcGFnZSdzIERvY3VtZW50IG9iamVjdC5cbiAgICogQHBhcmFtIGQzRmFjdG9yeSBEMyBjaGFydCBmYWN0b3J5LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2M6IERvY3VtZW50LFxuICAgIEBJbmplY3QoRDNfQ0hBUlRfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBkM0ZhY3Rvcnk6IElEM0NoYXJ0RmFjdG9yeSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKiBUaGUgY2hhcnQgb3B0aW9ucyBjb25zdHJ1Y3Rvci4gKi9cbiAgcHJvdGVjdGVkIGNoYXJ0T3B0aW9ucygpOiBURm9yY2VPcHRpb25zIHtcbiAgICBjb25zdCBtYXJnaW46IFRGb3JjZU9wdGlvbnNbJ21hcmdpbiddID0geyB0b3A6IDUwLCByaWdodDogNTAsIGJvdHRvbTogNTAsIGxlZnQ6IDUwIH07XG4gICAgY29uc3QgbWluV2lkdGggPSAzNTA7XG4gICAgY29uc3QgbW9kaWZpZXJzID0ge1xuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0OiAyMCxcbiAgICB9O1xuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5taW4obWluV2lkdGgsIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBtb2RpZmllcnMud2lkdGgpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5taW4od2lkdGgsIHRoaXMuZG9jLmJvZHkuY2xpZW50SGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b20gLSBtb2RpZmllcnMuaGVpZ2h0KTtcbiAgICBjb25zdCBvcHRpb25zOiBURm9yY2VPcHRpb25zID0geyB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIC4uLnRoaXMub3B0aW9ucyB9O1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqIERyYXdzIHRoZSBjaGFydC4gKi9cbiAgcHJvdGVjdGVkIGRyYXdDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY29udGFpbmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY2hhcnRPcHRpb25zKCk7XG4gICAgICB0aGlzLmQzRmFjdG9yeS5kcmF3Rm9yY2VEaXJlY3RlZENoYXJ0KHRoaXMuY29udGFpbmVyLCB0aGlzLmRhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBY3R1YWxseSBkcmF3cyB0aGUgY2hhcnQgYWZ0ZXIgdGhlIGNvbXBvbmVudCB2aWV3IGlzIGluaXRpYWxpemVkLiAqL1xuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gIH1cblxuICAvKiogUmVkcmF3cyB0aGUgY2hhcnQgb24gY2hhbmdlcy4gKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IElDaGFydElucHV0Q2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZEYXRhOiBURm9yY2VEYXRhIHwgdW5kZWZpbmVkID0gY2hhbmdlcy5kYXRhPy5wcmV2aW91c1ZhbHVlO1xuICAgIGNvbnN0IG5leHREYXRhOiBURm9yY2VEYXRhIHwgdW5kZWZpbmVkID0gY2hhbmdlcy5kYXRhPy5jdXJyZW50VmFsdWU7XG4gICAgY29uc3Qgb3B0aW9uczogVEZvcmNlT3B0aW9ucyA9IGNoYW5nZXMub3B0aW9ucz8uY3VycmVudFZhbHVlO1xuICAgIGlmIChcbiAgICAgIChCb29sZWFuKGNoYW5nZXMuZGF0YT8uY3VycmVudFZhbHVlKSAmJiAocHJldkRhdGE/Lm5vZGVzID8/IFtdKS5sZW5ndGggIT09IChuZXh0RGF0YT8ubm9kZXMgPz8gW10pLmxlbmd0aCkgfHxcbiAgICAgICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucyAhPT0gbnVsbClcbiAgICApIHtcbiAgICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxkaXYgaWQ9XCJ7eyBjaGFydElkIH19XCIgI2NvbnRhaW5lcj48L2Rpdj5cblxuICA8c21hbGwgY2xhc3M9XCJjb250YWluZXItLWNoYXJ0LXRpdGxlXCI+e3sgb3B0aW9ucy5jaGFydFRpdGxlIH19PC9zbWFsbD5cbjwvZGl2PlxuIl19
|
|
@@ -1,32 +1,28 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild } from '@angular/core';
|
|
3
3
|
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
|
+
import { AppD3ChartBase } from '../_base/chart.base';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
|
|
6
|
+
/** The gauge chart component. */
|
|
7
|
+
export class AppGaugeChartComponent extends AppD3ChartBase {
|
|
8
|
+
/**
|
|
9
|
+
* @param doc The web page's Document object.
|
|
10
|
+
* @param d3Factory D3 chart factory.
|
|
11
|
+
*/
|
|
6
12
|
constructor(doc, d3Factory) {
|
|
13
|
+
super();
|
|
7
14
|
this.doc = doc;
|
|
8
15
|
this.d3Factory = d3Factory;
|
|
9
|
-
/**
|
|
10
|
-
* The chart id.
|
|
11
|
-
*/
|
|
16
|
+
/** The chart id. */
|
|
12
17
|
this.chartId = 'gauge-0';
|
|
13
|
-
/**
|
|
14
|
-
* The value of the gauge chart.
|
|
15
|
-
*/
|
|
18
|
+
/** The value of the gauge chart. */
|
|
16
19
|
this.value = 0;
|
|
17
|
-
/**
|
|
18
|
-
* The chart data.
|
|
19
|
-
*/
|
|
20
|
+
/** The chart data. */
|
|
20
21
|
this.data = [];
|
|
21
|
-
/**
|
|
22
|
-
* The chart options.
|
|
23
|
-
*/
|
|
22
|
+
/** The chart options. */
|
|
24
23
|
this.options = {};
|
|
25
24
|
}
|
|
26
|
-
/**
|
|
27
|
-
* The chart options constructor.
|
|
28
|
-
* @returns chart options
|
|
29
|
-
*/
|
|
25
|
+
/** The chart options constructor. */
|
|
30
26
|
chartOptions() {
|
|
31
27
|
const margin = { top: 50, right: 50, bottom: 50, left: 50 };
|
|
32
28
|
const minWidth = 350;
|
|
@@ -45,24 +41,18 @@ export class AppGaugeChartComponent {
|
|
|
45
41
|
};
|
|
46
42
|
return options;
|
|
47
43
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Draws the chart.
|
|
50
|
-
*/
|
|
44
|
+
/** Draws the chart. */
|
|
51
45
|
drawChart() {
|
|
52
46
|
if (typeof this.container !== 'undefined') {
|
|
53
47
|
const options = this.chartOptions();
|
|
54
48
|
this.d3Factory.drawGaugeChart(this.container, this.data, options);
|
|
55
49
|
}
|
|
56
50
|
}
|
|
57
|
-
/**
|
|
58
|
-
* Actually draws the chart after the component view is initialized.
|
|
59
|
-
*/
|
|
51
|
+
/** Actually draws the chart after the component view is initialized. */
|
|
60
52
|
ngAfterViewInit() {
|
|
61
53
|
this.drawChart();
|
|
62
54
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Redraws the chart on changes.
|
|
65
|
-
*/
|
|
55
|
+
/** Redraws the chart on changes. */
|
|
66
56
|
ngOnChanges(changes) {
|
|
67
57
|
const data = changes.data?.currentValue;
|
|
68
58
|
const options = changes.options?.currentValue;
|
|
@@ -71,7 +61,7 @@ export class AppGaugeChartComponent {
|
|
|
71
61
|
}
|
|
72
62
|
}
|
|
73
63
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppGaugeChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
74
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppGaugeChartComponent, selector: "app-gauge-chart", inputs: { chartId: "chartId", value: "value", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
64
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppGaugeChartComponent, selector: "app-gauge-chart", inputs: { chartId: "chartId", value: "value", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
75
65
|
}
|
|
76
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppGaugeChartComponent, decorators: [{
|
|
77
67
|
type: Component,
|
|
@@ -94,4 +84,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
|
|
|
94
84
|
type: ViewChild,
|
|
95
85
|
args: ['container']
|
|
96
86
|
}] } });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F1Z2UtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9nYXVnZS1jaGFydC9nYXVnZS1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2dhdWdlLWNoYXJ0L2dhdWdlLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkksT0FBTyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLDJDQUEyQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLckQsaUNBQWlDO0FBT2pDLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxjQUF5QztJQWdCbkY7OztPQUdHO0lBQ0gsWUFDcUMsR0FBYSxFQUNMLFNBQTBCO1FBRXJFLEtBQUssRUFBRSxDQUFDO1FBSDJCLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDTCxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQXJCdkUsb0JBQW9CO1FBQ0osWUFBTyxHQUFHLFNBQVMsQ0FBQztRQUVwQyxvQ0FBb0M7UUFDcEIsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUUxQixzQkFBc0I7UUFDTixTQUFJLEdBQWUsRUFBRSxDQUFDO1FBRXRDLHlCQUF5QjtRQUNULFlBQU8sR0FBa0IsRUFBRSxDQUFDO0lBYzVDLENBQUM7SUFFRCxxQ0FBcUM7SUFDM0IsWUFBWTtRQUNwQixNQUFNLE1BQU0sR0FBNEIsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDckYsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLEVBQUU7U0FDWCxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0csTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0csTUFBTSxPQUFPLEdBQWtCO1lBQzdCLEtBQUs7WUFDTCxNQUFNO1lBQ04sTUFBTTtZQUNOLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx1QkFBdUI7SUFDYixTQUFTO1FBQ2pCLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUNqRSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0NBQW9DO0lBQzdCLFdBQVcsQ0FBQyxPQUEyQjtRQUM1QyxNQUFNLElBQUksR0FBMkIsT0FBTyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQWtCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRTtZQUMxRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO2lJQW5FVSxzQkFBc0Isa0JBcUJ2QixRQUFRLGFBQ1IsZ0JBQWdCO3FIQXRCZixzQkFBc0IsNlJDbEJuQyxrS0FLQTs7MkZEYWEsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzswQkF1QjVDLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxnQkFBZ0I7eUNBcEJWLE9BQU87c0JBQXRCLEtBQUs7Z0JBR1UsS0FBSztzQkFBcEIsS0FBSztnQkFHVSxJQUFJO3NCQUFuQixLQUFLO2dCQUdVLE9BQU87c0JBQXRCLEtBQUs7Z0JBR2tDLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElDaGFydElucHV0Q2hhbmdlcyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hhcnQtY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR2F1Z2VDaGFydERhdGFOb2RlLCBJR2F1Z2VDaGFydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2dhdWdlLWNoYXJ0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEM19DSEFSVF9GQUNUT1JZLCBJRDNDaGFydEZhY3RvcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvZDMtY2hhcnQtZmFjdG9yeS5wcm92aWRlcic7XG5pbXBvcnQgeyBBcHBEM0NoYXJ0QmFzZSB9IGZyb20gJy4uL19iYXNlL2NoYXJ0LmJhc2UnO1xuXG50eXBlIFRHYXVnZURhdGEgPSBJR2F1Z2VDaGFydERhdGFOb2RlW107XG50eXBlIFRHYXVnZU9wdGlvbnMgPSBQYXJ0aWFsPElHYXVnZUNoYXJ0T3B0aW9ucz47XG5cbi8qKiBUaGUgZ2F1Z2UgY2hhcnQgY29tcG9uZW50LiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdhdWdlLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dhdWdlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2F1Z2UtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcEdhdWdlQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBBcHBEM0NoYXJ0QmFzZTxUR2F1Z2VEYXRhLCBUR2F1Z2VPcHRpb25zPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBUaGUgY2hhcnQgaWQuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjaGFydElkID0gJ2dhdWdlLTAnO1xuXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIGdhdWdlIGNoYXJ0LiAqL1xuICBASW5wdXQoKSBwdWJsaWMgdmFsdWUgPSAwO1xuXG4gIC8qKiBUaGUgY2hhcnQgZGF0YS4gKi9cbiAgQElucHV0KCkgcHVibGljIGRhdGE6IFRHYXVnZURhdGEgPSBbXTtcblxuICAvKiogVGhlIGNoYXJ0IG9wdGlvbnMuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBUR2F1Z2VPcHRpb25zID0ge307XG5cbiAgLyoqIEQzIGNoYXJ0IHZpZXcgY2hpbGQgcmVmZXJlbmNlLiAqL1xuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBkb2MgVGhlIHdlYiBwYWdlJ3MgRG9jdW1lbnQgb2JqZWN0LlxuICAgKiBAcGFyYW0gZDNGYWN0b3J5IEQzIGNoYXJ0IGZhY3RvcnkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvYzogRG9jdW1lbnQsXG4gICAgQEluamVjdChEM19DSEFSVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGQzRmFjdG9yeTogSUQzQ2hhcnRGYWN0b3J5LFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqIFRoZSBjaGFydCBvcHRpb25zIGNvbnN0cnVjdG9yLiAqL1xuICBwcm90ZWN0ZWQgY2hhcnRPcHRpb25zKCk6IFRHYXVnZU9wdGlvbnMge1xuICAgIGNvbnN0IG1hcmdpbjogVEdhdWdlT3B0aW9uc1snbWFyZ2luJ10gPSB7IHRvcDogNTAsIHJpZ2h0OiA1MCwgYm90dG9tOiA1MCwgbGVmdDogNTAgfTtcbiAgICBjb25zdCBtaW5XaWR0aCA9IDM1MDtcbiAgICBjb25zdCBtb2RpZmllcnMgPSB7XG4gICAgICB3aWR0aDogMTAsXG4gICAgICBoZWlnaHQ6IDIwLFxuICAgIH07XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbihtaW5XaWR0aCwgdGhpcy5kb2MuYm9keS5jbGllbnRXaWR0aCAtIG1vZGlmaWVycy53aWR0aCkgLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1pbih3aWR0aCwgdGhpcy5kb2MuYm9keS5jbGllbnRIZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIG1vZGlmaWVycy5oZWlnaHQpO1xuICAgIGNvbnN0IG9wdGlvbnM6IFRHYXVnZU9wdGlvbnMgPSB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIG1hcmdpbixcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgIH07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKiogRHJhd3MgdGhlIGNoYXJ0LiAqL1xuICBwcm90ZWN0ZWQgZHJhd0NoYXJ0KCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb250YWluZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jaGFydE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuZDNGYWN0b3J5LmRyYXdHYXVnZUNoYXJ0KHRoaXMuY29udGFpbmVyLCB0aGlzLmRhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBY3R1YWxseSBkcmF3cyB0aGUgY2hhcnQgYWZ0ZXIgdGhlIGNvbXBvbmVudCB2aWV3IGlzIGluaXRpYWxpemVkLiAqL1xuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gIH1cblxuICAvKiogUmVkcmF3cyB0aGUgY2hhcnQgb24gY2hhbmdlcy4gKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IElDaGFydElucHV0Q2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IFRHYXVnZURhdGEgfCB1bmRlZmluZWQgPSBjaGFuZ2VzLmRhdGE/LmN1cnJlbnRWYWx1ZTtcbiAgICBjb25zdCBvcHRpb25zOiBUR2F1Z2VPcHRpb25zID0gY2hhbmdlcy5vcHRpb25zPy5jdXJyZW50VmFsdWU7XG4gICAgaWYgKCh0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSAhPT0gbnVsbCkgfHwgKHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiBvcHRpb25zICE9PSBudWxsKSkge1xuICAgICAgdGhpcy5kcmF3Q2hhcnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgPGRpdiBpZD1cInt7IGNoYXJ0SWQgfX1cIiAjY29udGFpbmVyPjwvZGl2PlxuXG4gIDxzbWFsbCBjbGFzcz1cImNvbnRhaW5lci0tY2hhcnQtdGl0bGVcIj57eyBvcHRpb25zLmNoYXJ0VGl0bGUgfX08L3NtYWxsPlxuPC9kaXY+XG4iXX0=
|
|
@@ -2,28 +2,26 @@ import { DOCUMENT } from '@angular/common';
|
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild } from '@angular/core';
|
|
3
3
|
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
4
|
import { defaultLineChartConfig } from '../../util/line-chart.util';
|
|
5
|
+
import { AppD3ChartBase } from '../_base/chart.base';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
|
-
|
|
7
|
+
/** The line chart component. */
|
|
8
|
+
export class AppLineChartComponent extends AppD3ChartBase {
|
|
9
|
+
/**
|
|
10
|
+
* @param doc The web page's Document object.
|
|
11
|
+
* @param d3Factory D3 chart factory.
|
|
12
|
+
*/
|
|
7
13
|
constructor(doc, d3Factory) {
|
|
14
|
+
super();
|
|
8
15
|
this.doc = doc;
|
|
9
16
|
this.d3Factory = d3Factory;
|
|
10
|
-
/**
|
|
11
|
-
* The chart id.
|
|
12
|
-
*/
|
|
17
|
+
/** The chart id. */
|
|
13
18
|
this.chartId = 'line-0';
|
|
14
|
-
/**
|
|
15
|
-
* The chart data.
|
|
16
|
-
*/
|
|
19
|
+
/** The chart data. */
|
|
17
20
|
this.data = [];
|
|
18
|
-
/**
|
|
19
|
-
* The chart options.
|
|
20
|
-
*/
|
|
21
|
+
/** The chart options. */
|
|
21
22
|
this.options = {};
|
|
22
23
|
}
|
|
23
|
-
/**
|
|
24
|
-
* The chart options constructor.
|
|
25
|
-
* @returns chart options
|
|
26
|
-
*/
|
|
24
|
+
/** The chart options constructor. */
|
|
27
25
|
chartOptions() {
|
|
28
26
|
const bodyWidthAdjustment = 10;
|
|
29
27
|
const width = Math.min(this.options.width ?? defaultLineChartConfig.width, this.doc.body.clientWidth - defaultLineChartConfig.margin.left - defaultLineChartConfig.margin.right - bodyWidthAdjustment);
|
|
@@ -42,24 +40,18 @@ export class AppLineChartComponent {
|
|
|
42
40
|
};
|
|
43
41
|
return options;
|
|
44
42
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Draws the chart.
|
|
47
|
-
*/
|
|
43
|
+
/** Draws the chart. */
|
|
48
44
|
drawChart() {
|
|
49
45
|
if (typeof this.container !== 'undefined') {
|
|
50
46
|
const options = this.chartOptions();
|
|
51
47
|
this.d3Factory.drawLineChart(this.container, [...this.data], options);
|
|
52
48
|
}
|
|
53
49
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Actually draws the chart after the component view is initialized.
|
|
56
|
-
*/
|
|
50
|
+
/** Actually draws the chart after the component view is initialized. */
|
|
57
51
|
ngAfterViewInit() {
|
|
58
52
|
this.drawChart();
|
|
59
53
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Redraws the chart on changes.
|
|
62
|
-
*/
|
|
54
|
+
/** Redraws the chart on changes. */
|
|
63
55
|
ngOnChanges(changes) {
|
|
64
56
|
const data = changes.data?.currentValue;
|
|
65
57
|
const options = changes.options?.currentValue;
|
|
@@ -68,7 +60,7 @@ export class AppLineChartComponent {
|
|
|
68
60
|
}
|
|
69
61
|
}
|
|
70
62
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppLineChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppLineChartComponent, selector: "app-line-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
63
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppLineChartComponent, selector: "app-line-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
72
64
|
}
|
|
73
65
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppLineChartComponent, decorators: [{
|
|
74
66
|
type: Component,
|
|
@@ -89,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
|
|
|
89
81
|
type: ViewChild,
|
|
90
82
|
args: ['container']
|
|
91
83
|
}] } });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2xpbmUtY2hhcnQvbGluZS1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2xpbmUtY2hhcnQvbGluZS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSW5JLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBS3JELGdDQUFnQztBQU9oQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsY0FBdUM7SUFhaEY7OztPQUdHO0lBQ0gsWUFDcUMsR0FBYSxFQUNMLFNBQTBCO1FBRXJFLEtBQUssRUFBRSxDQUFDO1FBSDJCLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDTCxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQWxCdkUsb0JBQW9CO1FBQ0osWUFBTyxHQUFHLFFBQVEsQ0FBQztRQUVuQyxzQkFBc0I7UUFDTixTQUFJLEdBQWMsRUFBRSxDQUFDO1FBRXJDLHlCQUF5QjtRQUNULFlBQU8sR0FBaUIsRUFBRSxDQUFDO0lBYzNDLENBQUM7SUFFRCxxQ0FBcUM7SUFDM0IsWUFBWTtRQUNwQixNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLEVBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQzNILENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxLQUFLLEVBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQzNILENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUEwQjtZQUNuQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxXQUFXO1lBQy9DLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksTUFBTSxHQUFHLFdBQVc7U0FDakQsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFpQjtZQUM1QixHQUFHLElBQUksQ0FBQyxPQUFPO1lBQ2YsS0FBSztZQUNMLE1BQU07WUFDTixLQUFLO1NBQ04sQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx1QkFBdUI7SUFDYixTQUFTO1FBQ2pCLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUNqRSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0NBQW9DO0lBQzdCLFdBQVcsQ0FBQyxPQUEyQjtRQUM1QyxNQUFNLElBQUksR0FBYyxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBaUIsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQzFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7aUlBdEVVLHFCQUFxQixrQkFrQnRCLFFBQVEsYUFDUixnQkFBZ0I7cUhBbkJmLHFCQUFxQiw0UUNuQmxDLG1FQUNBOzsyRkRrQmEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNOzswQkFvQjVDLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxnQkFBZ0I7eUNBakJWLE9BQU87c0JBQXRCLEtBQUs7Z0JBR1UsSUFBSTtzQkFBbkIsS0FBSztnQkFHVSxPQUFPO3NCQUF0QixLQUFLO2dCQUdrQyxTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJQ2hhcnRJbnB1dENoYW5nZXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NoYXJ0LWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUxpbmVDaGFydE9wdGlvbnMsIFRMaW5lQ2hhcnREYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9saW5lLWNoYXJ0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEM19DSEFSVF9GQUNUT1JZLCBJRDNDaGFydEZhY3RvcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvZDMtY2hhcnQtZmFjdG9yeS5wcm92aWRlcic7XG5pbXBvcnQgeyBkZWZhdWx0TGluZUNoYXJ0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbC9saW5lLWNoYXJ0LnV0aWwnO1xuaW1wb3J0IHsgQXBwRDNDaGFydEJhc2UgfSBmcm9tICcuLi9fYmFzZS9jaGFydC5iYXNlJztcblxudHlwZSBUTGluZURhdGEgPSBUTGluZUNoYXJ0RGF0YVtdO1xudHlwZSBUTGluZU9wdGlvbnMgPSBQYXJ0aWFsPElMaW5lQ2hhcnRPcHRpb25zPjtcblxuLyoqIFRoZSBsaW5lIGNoYXJ0IGNvbXBvbmVudC4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1saW5lLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmUtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saW5lLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBMaW5lQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBBcHBEM0NoYXJ0QmFzZTxUTGluZURhdGEsIFRMaW5lT3B0aW9ucz4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAvKiogVGhlIGNoYXJ0IGlkLiAqL1xuICBASW5wdXQoKSBwdWJsaWMgY2hhcnRJZCA9ICdsaW5lLTAnO1xuXG4gIC8qKiBUaGUgY2hhcnQgZGF0YS4gKi9cbiAgQElucHV0KCkgcHVibGljIGRhdGE6IFRMaW5lRGF0YSA9IFtdO1xuXG4gIC8qKiBUaGUgY2hhcnQgb3B0aW9ucy4gKi9cbiAgQElucHV0KCkgcHVibGljIG9wdGlvbnM6IFRMaW5lT3B0aW9ucyA9IHt9O1xuXG4gIC8qKiBEMyBjaGFydCB2aWV3IGNoaWxkIHJlZmVyZW5jZS4gKi9cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gZG9jIFRoZSB3ZWIgcGFnZSdzIERvY3VtZW50IG9iamVjdC5cbiAgICogQHBhcmFtIGQzRmFjdG9yeSBEMyBjaGFydCBmYWN0b3J5LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2M6IERvY3VtZW50LFxuICAgIEBJbmplY3QoRDNfQ0hBUlRfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBkM0ZhY3Rvcnk6IElEM0NoYXJ0RmFjdG9yeSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKiBUaGUgY2hhcnQgb3B0aW9ucyBjb25zdHJ1Y3Rvci4gKi9cbiAgcHJvdGVjdGVkIGNoYXJ0T3B0aW9ucygpOiBUTGluZU9wdGlvbnMge1xuICAgIGNvbnN0IGJvZHlXaWR0aEFkanVzdG1lbnQgPSAxMDtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKFxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID8/IGRlZmF1bHRMaW5lQ2hhcnRDb25maWcud2lkdGgsXG4gICAgICB0aGlzLmRvYy5ib2R5LmNsaWVudFdpZHRoIC0gZGVmYXVsdExpbmVDaGFydENvbmZpZy5tYXJnaW4ubGVmdCAtIGRlZmF1bHRMaW5lQ2hhcnRDb25maWcubWFyZ2luLnJpZ2h0IC0gYm9keVdpZHRoQWRqdXN0bWVudCxcbiAgICApO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWluKFxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA/PyB3aWR0aCxcbiAgICAgIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBkZWZhdWx0TGluZUNoYXJ0Q29uZmlnLm1hcmdpbi50b3AgLSBkZWZhdWx0TGluZUNoYXJ0Q29uZmlnLm1hcmdpbi5ib3R0b20gLSBib2R5V2lkdGhBZGp1c3RtZW50LFxuICAgICk7XG4gICAgY29uc3QgeFRpY2tzU2NhbGUgPSA3NTtcbiAgICBjb25zdCB5VGlja3NTY2FsZSA9IDI1O1xuICAgIGNvbnN0IHRpY2tzOiBUTGluZU9wdGlvbnNbJ3RpY2tzJ10gPSB7XG4gICAgICB4OiB0aGlzLm9wdGlvbnMudGlja3M/LnggPz8gd2lkdGggLyB4VGlja3NTY2FsZSxcbiAgICAgIHk6IHRoaXMub3B0aW9ucy50aWNrcz8ueSA/PyBoZWlnaHQgLyB5VGlja3NTY2FsZSxcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnM6IFRMaW5lT3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdGlja3MsXG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKiBEcmF3cyB0aGUgY2hhcnQuICovXG4gIHByb3RlY3RlZCBkcmF3Q2hhcnQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRhaW5lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmNoYXJ0T3B0aW9ucygpO1xuICAgICAgdGhpcy5kM0ZhY3RvcnkuZHJhd0xpbmVDaGFydCh0aGlzLmNvbnRhaW5lciwgWy4uLnRoaXMuZGF0YV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBY3R1YWxseSBkcmF3cyB0aGUgY2hhcnQgYWZ0ZXIgdGhlIGNvbXBvbmVudCB2aWV3IGlzIGluaXRpYWxpemVkLiAqL1xuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gIH1cblxuICAvKiogUmVkcmF3cyB0aGUgY2hhcnQgb24gY2hhbmdlcy4gKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IElDaGFydElucHV0Q2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IFRMaW5lRGF0YSA9IGNoYW5nZXMuZGF0YT8uY3VycmVudFZhbHVlO1xuICAgIGNvbnN0IG9wdGlvbnM6IFRMaW5lT3B0aW9ucyA9IGNoYW5nZXMub3B0aW9ucz8uY3VycmVudFZhbHVlO1xuICAgIGlmICgodHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnICYmIGRhdGEgIT09IG51bGwpIHx8ICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkpIHtcbiAgICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgaWQ9XCJ7eyBjaGFydElkIH19XCIgI2NvbnRhaW5lcj48L2Rpdj5cbiJdfQ==
|
|
@@ -1,28 +1,26 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild } from '@angular/core';
|
|
3
3
|
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
|
+
import { AppD3ChartBase } from '../_base/chart.base';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
|
|
6
|
+
/** The pie chart component. */
|
|
7
|
+
export class AppPieChartComponent extends AppD3ChartBase {
|
|
8
|
+
/**
|
|
9
|
+
* @param doc The web page's Document object.
|
|
10
|
+
* @param d3Factory D3 chart factory.
|
|
11
|
+
*/
|
|
6
12
|
constructor(doc, d3Factory) {
|
|
13
|
+
super();
|
|
7
14
|
this.doc = doc;
|
|
8
15
|
this.d3Factory = d3Factory;
|
|
9
|
-
/**
|
|
10
|
-
* The chart id.
|
|
11
|
-
*/
|
|
16
|
+
/** The chart id. */
|
|
12
17
|
this.chartId = 'pie-0';
|
|
13
|
-
/**
|
|
14
|
-
* The chart data.
|
|
15
|
-
*/
|
|
18
|
+
/** The chart data. */
|
|
16
19
|
this.data = [];
|
|
17
|
-
/**
|
|
18
|
-
* The chart options.
|
|
19
|
-
*/
|
|
20
|
+
/** The chart options. */
|
|
20
21
|
this.options = {};
|
|
21
22
|
}
|
|
22
|
-
/**
|
|
23
|
-
* The chart options constructor.
|
|
24
|
-
* @returns chart options
|
|
25
|
-
*/
|
|
23
|
+
/** The chart options constructor. */
|
|
26
24
|
chartOptions() {
|
|
27
25
|
const margin = { top: 50, right: 50, bottom: 50, left: 50 };
|
|
28
26
|
const minWidth = 350;
|
|
@@ -40,24 +38,18 @@ export class AppPieChartComponent {
|
|
|
40
38
|
};
|
|
41
39
|
return options;
|
|
42
40
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Draws the chart.
|
|
45
|
-
*/
|
|
41
|
+
/** Draws the chart. */
|
|
46
42
|
drawChart() {
|
|
47
43
|
if (typeof this.container !== 'undefined') {
|
|
48
44
|
const options = this.chartOptions();
|
|
49
45
|
this.d3Factory.drawPieChart(this.container, this.data, options);
|
|
50
46
|
}
|
|
51
47
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Actually draws the chart after the component view is initialized.
|
|
54
|
-
*/
|
|
48
|
+
/** Actually draws the chart after the component view is initialized. */
|
|
55
49
|
ngAfterViewInit() {
|
|
56
50
|
this.drawChart();
|
|
57
51
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Redraws the chart on changes.
|
|
60
|
-
*/
|
|
52
|
+
/** Redraws the chart on changes. */
|
|
61
53
|
ngOnChanges(changes) {
|
|
62
54
|
const data = changes.data?.currentValue;
|
|
63
55
|
const options = changes.options?.currentValue;
|
|
@@ -66,7 +58,7 @@ export class AppPieChartComponent {
|
|
|
66
58
|
}
|
|
67
59
|
}
|
|
68
60
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppPieChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
69
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppPieChartComponent, selector: "app-pie-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: AppPieChartComponent, selector: "app-pie-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
70
62
|
}
|
|
71
63
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AppPieChartComponent, decorators: [{
|
|
72
64
|
type: Component,
|
|
@@ -87,4 +79,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
|
|
|
87
79
|
type: ViewChild,
|
|
88
80
|
args: ['container']
|
|
89
81
|
}] } });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2NvbXBvbmVudHMvcGllLWNoYXJ0L3BpZS1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL3BpZS1jaGFydC9waWUtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUluSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0sMkNBQTJDLENBQUM7QUFDOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUtyRCwrQkFBK0I7QUFPL0IsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGNBQXFDO0lBYTdFOzs7T0FHRztJQUNILFlBQ3FDLEdBQWEsRUFDTCxTQUEwQjtRQUVyRSxLQUFLLEVBQUUsQ0FBQztRQUgyQixRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQ0wsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFsQnZFLG9CQUFvQjtRQUNKLFlBQU8sR0FBRyxPQUFPLENBQUM7UUFFbEMsc0JBQXNCO1FBQ04sU0FBSSxHQUFhLEVBQUUsQ0FBQztRQUVwQyx5QkFBeUI7UUFDVCxZQUFPLEdBQWdCLEVBQUUsQ0FBQztJQWMxQyxDQUFDO0lBRUQscUNBQXFDO0lBQzNCLFlBQVk7UUFDcEIsTUFBTSxNQUFNLEdBQTBCLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ25GLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLFNBQVMsR0FBRztZQUNoQixLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzNHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNHLE1BQU0sT0FBTyxHQUFnQjtZQUMzQixLQUFLO1lBQ0wsTUFBTTtZQUNOLE1BQU07WUFDTixHQUFHLElBQUksQ0FBQyxPQUFPO1NBQ2hCLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsdUJBQXVCO0lBQ2IsU0FBUztRQUNqQixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCx3RUFBd0U7SUFDakUsZUFBZTtRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELG9DQUFvQztJQUM3QixXQUFXLENBQUMsT0FBMkI7UUFDNUMsTUFBTSxJQUFJLEdBQXlCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUFnQixPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDMUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztpSUEvRFUsb0JBQW9CLGtCQWtCckIsUUFBUSxhQUNSLGdCQUFnQjtxSEFuQmYsb0JBQW9CLDJRQ2xCakMsa0tBS0E7OzJGRGFhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU07OzBCQW9CNUMsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLGdCQUFnQjt5Q0FqQlYsT0FBTztzQkFBdEIsS0FBSztnQkFHVSxJQUFJO3NCQUFuQixLQUFLO2dCQUdVLE9BQU87c0JBQXRCLEtBQUs7Z0JBR2tDLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElDaGFydElucHV0Q2hhbmdlcyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hhcnQtY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUGllQ2hhcnREYXRhTm9kZSwgSVBpZUNoYXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGllLWNoYXJ0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEM19DSEFSVF9GQUNUT1JZLCBJRDNDaGFydEZhY3RvcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvZDMtY2hhcnQtZmFjdG9yeS5wcm92aWRlcic7XG5pbXBvcnQgeyBBcHBEM0NoYXJ0QmFzZSB9IGZyb20gJy4uL19iYXNlL2NoYXJ0LmJhc2UnO1xuXG50eXBlIFRQaWVEYXRhID0gSVBpZUNoYXJ0RGF0YU5vZGVbXTtcbnR5cGUgVFBpZU9wdGlvbnMgPSBQYXJ0aWFsPElQaWVDaGFydE9wdGlvbnM+O1xuXG4vKiogVGhlIHBpZSBjaGFydCBjb21wb25lbnQuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcGllLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpZS1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BpZS1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwUGllQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBBcHBEM0NoYXJ0QmFzZTxUUGllRGF0YSwgVFBpZU9wdGlvbnM+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIFRoZSBjaGFydCBpZC4gKi9cbiAgQElucHV0KCkgcHVibGljIGNoYXJ0SWQgPSAncGllLTAnO1xuXG4gIC8qKiBUaGUgY2hhcnQgZGF0YS4gKi9cbiAgQElucHV0KCkgcHVibGljIGRhdGE6IFRQaWVEYXRhID0gW107XG5cbiAgLyoqIFRoZSBjaGFydCBvcHRpb25zLiAqL1xuICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogVFBpZU9wdGlvbnMgPSB7fTtcblxuICAvKiogRDMgY2hhcnQgdmlldyBjaGlsZCByZWZlcmVuY2UuICovXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHB1YmxpYyByZWFkb25seSBjb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvKipcbiAgICogQHBhcmFtIGRvYyBUaGUgd2ViIHBhZ2UncyBEb2N1bWVudCBvYmplY3QuXG4gICAqIEBwYXJhbSBkM0ZhY3RvcnkgRDMgY2hhcnQgZmFjdG9yeS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jOiBEb2N1bWVudCxcbiAgICBASW5qZWN0KEQzX0NIQVJUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgZDNGYWN0b3J5OiBJRDNDaGFydEZhY3RvcnksXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKiogVGhlIGNoYXJ0IG9wdGlvbnMgY29uc3RydWN0b3IuICovXG4gIHByb3RlY3RlZCBjaGFydE9wdGlvbnMoKTogVFBpZU9wdGlvbnMge1xuICAgIGNvbnN0IG1hcmdpbjogVFBpZU9wdGlvbnNbJ21hcmdpbiddID0geyB0b3A6IDUwLCByaWdodDogNTAsIGJvdHRvbTogNTAsIGxlZnQ6IDUwIH07XG4gICAgY29uc3QgbWluV2lkdGggPSAzNTA7XG4gICAgY29uc3QgbW9kaWZpZXJzID0ge1xuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0OiAyMCxcbiAgICB9O1xuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5taW4obWluV2lkdGgsIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBtb2RpZmllcnMud2lkdGgpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5taW4od2lkdGgsIHRoaXMuZG9jLmJvZHkuY2xpZW50SGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b20gLSBtb2RpZmllcnMuaGVpZ2h0KTtcbiAgICBjb25zdCBvcHRpb25zOiBUUGllT3B0aW9ucyA9IHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgbWFyZ2luLFxuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgIH07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKiogRHJhd3MgdGhlIGNoYXJ0LiAqL1xuICBwcm90ZWN0ZWQgZHJhd0NoYXJ0KCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb250YWluZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jaGFydE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuZDNGYWN0b3J5LmRyYXdQaWVDaGFydCh0aGlzLmNvbnRhaW5lciwgdGhpcy5kYXRhLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWN0dWFsbHkgZHJhd3MgdGhlIGNoYXJ0IGFmdGVyIHRoZSBjb21wb25lbnQgdmlldyBpcyBpbml0aWFsaXplZC4gKi9cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdDaGFydCgpO1xuICB9XG5cbiAgLyoqIFJlZHJhd3MgdGhlIGNoYXJ0IG9uIGNoYW5nZXMuICovXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBJQ2hhcnRJbnB1dENoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBUUGllRGF0YSB8IHVuZGVmaW5lZCA9IGNoYW5nZXMuZGF0YT8uY3VycmVudFZhbHVlO1xuICAgIGNvbnN0IG9wdGlvbnM6IFRQaWVPcHRpb25zID0gY2hhbmdlcy5vcHRpb25zPy5jdXJyZW50VmFsdWU7XG4gICAgaWYgKCh0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSAhPT0gbnVsbCkgfHwgKHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiBvcHRpb25zICE9PSBudWxsKSkge1xuICAgICAgdGhpcy5kcmF3Q2hhcnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgPGRpdiBpZD1cInt7IGNoYXJ0SWQgfX1cIiAjY29udGFpbmVyPjwvZGl2PlxuXG4gIDxzbWFsbCBjbGFzcz1cImNvbnRhaW5lci0tY2hhcnQtdGl0bGVcIj57eyBvcHRpb25zLmNoYXJ0VGl0bGUgfX08L3NtYWxsPlxuPC9kaXY+XG4iXX0=
|