@rfprodz/client-d3-charts 1.0.0
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 +21 -0
- package/README.md +88 -0
- package/esm2020/index.mjs +5 -0
- package/esm2020/lib/client-d3-charts.module.mjs +47 -0
- package/esm2020/lib/components/bar-chart/bar-chart.component.mjs +87 -0
- package/esm2020/lib/components/chart-examples/chart-examples.component.mjs +181 -0
- package/esm2020/lib/components/force-directed-chart/force-directed-chart.component.mjs +92 -0
- package/esm2020/lib/components/index.mjs +7 -0
- package/esm2020/lib/components/line-chart/line-chart.component.mjs +91 -0
- package/esm2020/lib/components/pie-chart/pie-chart.component.mjs +90 -0
- package/esm2020/lib/components/radar-chart/radar-chart.component.mjs +102 -0
- package/esm2020/lib/interfaces/bar-chart.interface.mjs +2 -0
- package/esm2020/lib/interfaces/force-directed-chart.interface.mjs +2 -0
- package/esm2020/lib/interfaces/index.mjs +6 -0
- package/esm2020/lib/interfaces/line-chart.interface.mjs +2 -0
- package/esm2020/lib/interfaces/pie-chart.interface.mjs +2 -0
- package/esm2020/lib/interfaces/radar-chart.interface.mjs +2 -0
- package/esm2020/lib/providers/d3-chart-factory.provider.mjs +18 -0
- package/esm2020/lib/util/bar-chart.util.mjs +255 -0
- package/esm2020/lib/util/configuration.util.mjs +31 -0
- package/esm2020/lib/util/force-directed-chart.util.mjs +255 -0
- package/esm2020/lib/util/index.mjs +6 -0
- package/esm2020/lib/util/line-chart.util.mjs +266 -0
- package/esm2020/lib/util/pie-chart.util.mjs +89 -0
- package/esm2020/lib/util/radar-chart.util.mjs +295 -0
- package/esm2020/rfprodz-client-d3-charts.mjs +5 -0
- package/fesm2015/rfprodz-client-d3-charts.mjs +1868 -0
- package/fesm2015/rfprodz-client-d3-charts.mjs.map +1 -0
- package/fesm2020/rfprodz-client-d3-charts.mjs +1855 -0
- package/fesm2020/rfprodz-client-d3-charts.mjs.map +1 -0
- package/index.d.ts +4 -0
- package/lib/client-d3-charts.module.d.ts +13 -0
- package/lib/components/bar-chart/bar-chart.component.d.ts +49 -0
- package/lib/components/chart-examples/chart-examples.component.d.ts +60 -0
- package/lib/components/force-directed-chart/force-directed-chart.component.d.ts +49 -0
- package/lib/components/index.d.ts +6 -0
- package/lib/components/line-chart/line-chart.component.d.ts +49 -0
- package/lib/components/pie-chart/pie-chart.component.d.ts +49 -0
- package/lib/components/radar-chart/radar-chart.component.d.ts +49 -0
- package/lib/interfaces/bar-chart.interface.d.ts +25 -0
- package/lib/interfaces/force-directed-chart.interface.d.ts +50 -0
- package/lib/interfaces/index.d.ts +5 -0
- package/lib/interfaces/line-chart.interface.d.ts +28 -0
- package/lib/interfaces/pie-chart.interface.d.ts +19 -0
- package/lib/interfaces/radar-chart.interface.d.ts +30 -0
- package/lib/providers/d3-chart-factory.provider.d.ts +15 -0
- package/lib/util/bar-chart.util.d.ts +14 -0
- package/lib/util/configuration.util.d.ts +7 -0
- package/lib/util/force-directed-chart.util.d.ts +14 -0
- package/lib/util/index.d.ts +5 -0
- package/lib/util/line-chart.util.d.ts +14 -0
- package/lib/util/pie-chart.util.d.ts +14 -0
- package/lib/util/radar-chart.util.d.ts +14 -0
- package/package.json +53 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild, } from '@angular/core';
|
|
3
|
+
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
|
+
import { defaultLineChartConfig } from '../../util';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class AppLineChartComponent {
|
|
7
|
+
constructor(doc, d3Factory) {
|
|
8
|
+
this.doc = doc;
|
|
9
|
+
this.d3Factory = d3Factory;
|
|
10
|
+
/**
|
|
11
|
+
* The chart id.
|
|
12
|
+
*/
|
|
13
|
+
this.chartId = 'line-0';
|
|
14
|
+
/**
|
|
15
|
+
* The chart data.
|
|
16
|
+
*/
|
|
17
|
+
this.data = [];
|
|
18
|
+
/**
|
|
19
|
+
* The chart options.
|
|
20
|
+
*/
|
|
21
|
+
this.options = {};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The chart options constructor.
|
|
25
|
+
* @returns chart options
|
|
26
|
+
*/
|
|
27
|
+
chartOptions() {
|
|
28
|
+
const bodyWidthAdjustment = 10;
|
|
29
|
+
const width = Math.min(this.options.width ?? defaultLineChartConfig.width, this.doc.body.clientWidth - defaultLineChartConfig.margin.left - defaultLineChartConfig.margin.right - bodyWidthAdjustment);
|
|
30
|
+
const xTicksScale = 50;
|
|
31
|
+
const ticks = {
|
|
32
|
+
x: width / xTicksScale,
|
|
33
|
+
y: Math.max(...this.data.map(item => item.value)),
|
|
34
|
+
};
|
|
35
|
+
const height = Math.min(this.options.height ?? width, this.doc.body.clientWidth - defaultLineChartConfig.margin.top - defaultLineChartConfig.margin.bottom - bodyWidthAdjustment);
|
|
36
|
+
const options = {
|
|
37
|
+
width,
|
|
38
|
+
height,
|
|
39
|
+
ticks,
|
|
40
|
+
...this.options,
|
|
41
|
+
};
|
|
42
|
+
return options;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Draws the chart.
|
|
46
|
+
*/
|
|
47
|
+
drawChart() {
|
|
48
|
+
if (typeof this.container !== 'undefined') {
|
|
49
|
+
const options = this.chartOptions();
|
|
50
|
+
this.d3Factory.drawLineChart(this.container, this.data, options);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Actually draws the chart after the component view is initialized.
|
|
55
|
+
*/
|
|
56
|
+
ngAfterViewInit() {
|
|
57
|
+
this.drawChart();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Redraws the chart on changes.
|
|
61
|
+
*/
|
|
62
|
+
ngOnChanges(changes) {
|
|
63
|
+
const data = changes.data?.currentValue;
|
|
64
|
+
const options = changes.options?.currentValue;
|
|
65
|
+
if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {
|
|
66
|
+
this.drawChart();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** @nocollapse */ AppLineChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppLineChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component });
|
|
71
|
+
/** @nocollapse */ AppLineChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", 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 });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppLineChartComponent, decorators: [{
|
|
73
|
+
type: Component,
|
|
74
|
+
args: [{ selector: 'app-line-chart', changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
|
|
75
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
76
|
+
type: Inject,
|
|
77
|
+
args: [DOCUMENT]
|
|
78
|
+
}] }, { type: undefined, decorators: [{
|
|
79
|
+
type: Inject,
|
|
80
|
+
args: [D3_CHART_FACTORY]
|
|
81
|
+
}] }]; }, propDecorators: { chartId: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], data: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], options: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], container: [{
|
|
88
|
+
type: ViewChild,
|
|
89
|
+
args: ['container']
|
|
90
|
+
}] } });
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2xpbmUtY2hhcnQvbGluZS1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2xpbmUtY2hhcnQvbGluZS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBYXBELE1BQU0sT0FBTyxxQkFBcUI7SUFxQmhDLFlBQStDLEdBQWEsRUFBNkMsU0FBMEI7UUFBcEYsUUFBRyxHQUFILEdBQUcsQ0FBVTtRQUE2QyxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQXBCbkk7O1dBRUc7UUFDYSxZQUFPLEdBQUcsUUFBUSxDQUFDO1FBRW5DOztXQUVHO1FBQ2EsU0FBSSxHQUFtQixFQUFFLENBQUM7UUFFMUM7O1dBRUc7UUFDYSxZQUFPLEdBQStCLEVBQUUsQ0FBQztJQU82RSxDQUFDO0lBRXZJOzs7T0FHRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksc0JBQXNCLENBQUMsS0FBSyxFQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUMzSCxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUErQjtZQUN4QyxDQUFDLEVBQUUsS0FBSyxHQUFHLFdBQVc7WUFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsRCxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxFQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUMzSCxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQStCO1lBQzFDLEtBQUs7WUFDTCxNQUFNO1lBQ04sS0FBSztZQUNMLEdBQUcsSUFBSSxDQUFDLE9BQU87U0FDaEIsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVM7UUFDZixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxNQUFNLElBQUksR0FBMkIsT0FBTyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQStCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1FBQzFFLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRTtZQUMxRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDOztxSUE3RVUscUJBQXFCLGtCQXFCWixRQUFRLGFBQTBDLGdCQUFnQjt5SEFyQjNFLHFCQUFxQixxUEM1QmxDLG1FQUNBOzJGRDJCYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07MERBdUJLLFFBQVE7MEJBQS9DLE1BQU07MkJBQUMsUUFBUTs7MEJBQW1DLE1BQU07MkJBQUMsZ0JBQWdCOzRDQWpCdEUsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxJQUFJO3NCQUFuQixLQUFLO2dCQUtVLE9BQU87c0JBQXRCLEtBQUs7Z0JBS21DLFNBQVM7c0JBQWpELFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJTGluZUNoYXJ0RGF0YU5vZGUsIElMaW5lQ2hhcnRPcHRpb25zLCBUTGluZUNoYXJ0RGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbGluZS1jaGFydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRDNfQ0hBUlRfRkFDVE9SWSwgSUQzQ2hhcnRGYWN0b3J5IH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL2QzLWNoYXJ0LWZhY3RvcnkucHJvdmlkZXInO1xuaW1wb3J0IHsgZGVmYXVsdExpbmVDaGFydENvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbnRlcmZhY2UgSUlucHV0Q2hhbmdlcyB7XG4gIGRhdGE/OiBTaW1wbGVDaGFuZ2UgfCBudWxsO1xuICBvcHRpb25zPzogU2ltcGxlQ2hhbmdlIHwgbnVsbDtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxpbmUtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluZS1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpbmUtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcExpbmVDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgY2hhcnQgaWQuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY2hhcnRJZCA9ICdsaW5lLTAnO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhcnQgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhOiBUTGluZUNoYXJ0RGF0YSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhcnQgb3B0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBQYXJ0aWFsPElMaW5lQ2hhcnRPcHRpb25zPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBEMyBjaGFydCB2aWV3IGNoaWxkIHJlZmVyZW5jZS5cbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2M6IERvY3VtZW50LCBASW5qZWN0KEQzX0NIQVJUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgZDNGYWN0b3J5OiBJRDNDaGFydEZhY3RvcnkpIHt9XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFydCBvcHRpb25zIGNvbnN0cnVjdG9yLlxuICAgKiBAcmV0dXJucyBjaGFydCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGNoYXJ0T3B0aW9ucygpIHtcbiAgICBjb25zdCBib2R5V2lkdGhBZGp1c3RtZW50ID0gMTA7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbihcbiAgICAgIHRoaXMub3B0aW9ucy53aWR0aCA/PyBkZWZhdWx0TGluZUNoYXJ0Q29uZmlnLndpZHRoLFxuICAgICAgdGhpcy5kb2MuYm9keS5jbGllbnRXaWR0aCAtIGRlZmF1bHRMaW5lQ2hhcnRDb25maWcubWFyZ2luLmxlZnQgLSBkZWZhdWx0TGluZUNoYXJ0Q29uZmlnLm1hcmdpbi5yaWdodCAtIGJvZHlXaWR0aEFkanVzdG1lbnQsXG4gICAgKTtcbiAgICBjb25zdCB4VGlja3NTY2FsZSA9IDUwO1xuICAgIGNvbnN0IHRpY2tzOiBJTGluZUNoYXJ0T3B0aW9uc1sndGlja3MnXSA9IHtcbiAgICAgIHg6IHdpZHRoIC8geFRpY2tzU2NhbGUsXG4gICAgICB5OiBNYXRoLm1heCguLi50aGlzLmRhdGEubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSkpLFxuICAgIH07XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5taW4oXG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID8/IHdpZHRoLFxuICAgICAgdGhpcy5kb2MuYm9keS5jbGllbnRXaWR0aCAtIGRlZmF1bHRMaW5lQ2hhcnRDb25maWcubWFyZ2luLnRvcCAtIGRlZmF1bHRMaW5lQ2hhcnRDb25maWcubWFyZ2luLmJvdHRvbSAtIGJvZHlXaWR0aEFkanVzdG1lbnQsXG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25zOiBQYXJ0aWFsPElMaW5lQ2hhcnRPcHRpb25zPiA9IHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdGlja3MsXG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3cyB0aGUgY2hhcnQuXG4gICAqL1xuICBwcml2YXRlIGRyYXdDaGFydCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY29udGFpbmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY2hhcnRPcHRpb25zKCk7XG4gICAgICB0aGlzLmQzRmFjdG9yeS5kcmF3TGluZUNoYXJ0KHRoaXMuY29udGFpbmVyLCB0aGlzLmRhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxseSBkcmF3cyB0aGUgY2hhcnQgYWZ0ZXIgdGhlIGNvbXBvbmVudCB2aWV3IGlzIGluaXRpYWxpemVkLlxuICAgKi9cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdDaGFydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhd3MgdGhlIGNoYXJ0IG9uIGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogSUlucHV0Q2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IElMaW5lQ2hhcnREYXRhTm9kZVtdW10gPSBjaGFuZ2VzLmRhdGE/LmN1cnJlbnRWYWx1ZTtcbiAgICBjb25zdCBvcHRpb25zOiBQYXJ0aWFsPElMaW5lQ2hhcnRPcHRpb25zPiA9IGNoYW5nZXMub3B0aW9ucz8uY3VycmVudFZhbHVlO1xuICAgIGlmICgodHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnICYmIGRhdGEgIT09IG51bGwpIHx8ICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkpIHtcbiAgICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgaWQ9XCJ7eyBjaGFydElkIH19XCIgI2NvbnRhaW5lcj48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild, } from '@angular/core';
|
|
3
|
+
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AppPieChartComponent {
|
|
6
|
+
constructor(doc, d3Factory) {
|
|
7
|
+
this.doc = doc;
|
|
8
|
+
this.d3Factory = d3Factory;
|
|
9
|
+
/**
|
|
10
|
+
* The chart id.
|
|
11
|
+
*/
|
|
12
|
+
this.chartId = 'pie-0';
|
|
13
|
+
/**
|
|
14
|
+
* The chart data.
|
|
15
|
+
*/
|
|
16
|
+
this.data = [];
|
|
17
|
+
/**
|
|
18
|
+
* The chart options.
|
|
19
|
+
*/
|
|
20
|
+
this.options = {};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The chart options constructor.
|
|
24
|
+
* @returns chart options
|
|
25
|
+
*/
|
|
26
|
+
chartOptions() {
|
|
27
|
+
const margin = { top: 50, right: 50, bottom: 50, left: 50 };
|
|
28
|
+
const minWidth = 350;
|
|
29
|
+
const modifiers = {
|
|
30
|
+
width: 10,
|
|
31
|
+
height: 20,
|
|
32
|
+
};
|
|
33
|
+
const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;
|
|
34
|
+
const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);
|
|
35
|
+
const options = {
|
|
36
|
+
width,
|
|
37
|
+
height,
|
|
38
|
+
margin,
|
|
39
|
+
...this.options,
|
|
40
|
+
};
|
|
41
|
+
return options;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Draws the chart.
|
|
45
|
+
*/
|
|
46
|
+
drawChart() {
|
|
47
|
+
if (typeof this.container !== 'undefined') {
|
|
48
|
+
const options = this.chartOptions();
|
|
49
|
+
this.d3Factory.drawPieChart(this.container, this.data, options);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Actually draws the chart after the component view is initialized.
|
|
54
|
+
*/
|
|
55
|
+
ngAfterViewInit() {
|
|
56
|
+
this.drawChart();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Redraws the chart on changes.
|
|
60
|
+
*/
|
|
61
|
+
ngOnChanges(changes) {
|
|
62
|
+
const data = changes.data?.currentValue;
|
|
63
|
+
const options = changes.options?.currentValue;
|
|
64
|
+
if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {
|
|
65
|
+
this.drawChart();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** @nocollapse */ AppPieChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppPieChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component });
|
|
70
|
+
/** @nocollapse */ AppPieChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", 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 });
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppPieChartComponent, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{ selector: 'app-pie-chart', changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
|
|
74
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
75
|
+
type: Inject,
|
|
76
|
+
args: [DOCUMENT]
|
|
77
|
+
}] }, { type: undefined, decorators: [{
|
|
78
|
+
type: Inject,
|
|
79
|
+
args: [D3_CHART_FACTORY]
|
|
80
|
+
}] }]; }, propDecorators: { chartId: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], data: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], options: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], container: [{
|
|
87
|
+
type: ViewChild,
|
|
88
|
+
args: ['container']
|
|
89
|
+
}] } });
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2NvbXBvbmVudHMvcGllLWNoYXJ0L3BpZS1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL3BpZS1jaGFydC9waWUtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0sMkNBQTJDLENBQUM7O0FBYTlGLE1BQU0sT0FBTyxvQkFBb0I7SUFxQi9CLFlBQStDLEdBQWEsRUFBNkMsU0FBMEI7UUFBcEYsUUFBRyxHQUFILEdBQUcsQ0FBVTtRQUE2QyxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQXBCbkk7O1dBRUc7UUFDYSxZQUFPLEdBQUcsT0FBTyxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsU0FBSSxHQUF3QixFQUFFLENBQUM7UUFFL0M7O1dBRUc7UUFDYSxZQUFPLEdBQThCLEVBQUUsQ0FBQztJQU84RSxDQUFDO0lBRXZJOzs7T0FHRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxNQUFNLEdBQStCLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3hGLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLFNBQVMsR0FBRztZQUNoQixLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzNHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNHLE1BQU0sT0FBTyxHQUE4QjtZQUN6QyxLQUFLO1lBQ0wsTUFBTTtZQUNOLE1BQU07WUFDTixHQUFHLElBQUksQ0FBQyxPQUFPO1NBQ2hCLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxTQUFTO1FBQ2YsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsTUFBTSxJQUFJLEdBQW9DLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO1FBQ3pFLE1BQU0sT0FBTyxHQUE4QixPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDMUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQzs7b0lBdkVVLG9CQUFvQixrQkFxQlgsUUFBUSxhQUEwQyxnQkFBZ0I7d0hBckIzRSxvQkFBb0Isb1BDM0JqQyxrS0FLQTsyRkRzQmEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTTswREF1QkssUUFBUTswQkFBL0MsTUFBTTsyQkFBQyxRQUFROzswQkFBbUMsTUFBTTsyQkFBQyxnQkFBZ0I7NENBakJ0RSxPQUFPO3NCQUF0QixLQUFLO2dCQUtVLElBQUk7c0JBQW5CLEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLbUMsU0FBUztzQkFBakQsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElQaWVDaGFydERhdGFOb2RlLCBJUGllQ2hhcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9waWUtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEQzX0NIQVJUX0ZBQ1RPUlksIElEM0NoYXJ0RmFjdG9yeSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9kMy1jaGFydC1mYWN0b3J5LnByb3ZpZGVyJztcblxuaW50ZXJmYWNlIElJbnB1dENoYW5nZXMge1xuICBkYXRhPzogU2ltcGxlQ2hhbmdlIHwgbnVsbDtcbiAgb3B0aW9ucz86IFNpbXBsZUNoYW5nZSB8IG51bGw7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1waWUtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGllLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGllLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBQaWVDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgY2hhcnQgaWQuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY2hhcnRJZCA9ICdwaWUtMCc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFydCBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRhdGE6IElQaWVDaGFydERhdGFOb2RlW10gPSBbXTtcblxuICAvKipcbiAgICogVGhlIGNoYXJ0IG9wdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogUGFydGlhbDxJUGllQ2hhcnRPcHRpb25zPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBEMyBjaGFydCB2aWV3IGNoaWxkIHJlZmVyZW5jZS5cbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2M6IERvY3VtZW50LCBASW5qZWN0KEQzX0NIQVJUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgZDNGYWN0b3J5OiBJRDNDaGFydEZhY3RvcnkpIHt9XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFydCBvcHRpb25zIGNvbnN0cnVjdG9yLlxuICAgKiBAcmV0dXJucyBjaGFydCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGNoYXJ0T3B0aW9ucygpIHtcbiAgICBjb25zdCBtYXJnaW46IElQaWVDaGFydE9wdGlvbnNbJ21hcmdpbiddID0geyB0b3A6IDUwLCByaWdodDogNTAsIGJvdHRvbTogNTAsIGxlZnQ6IDUwIH07XG4gICAgY29uc3QgbWluV2lkdGggPSAzNTA7XG4gICAgY29uc3QgbW9kaWZpZXJzID0ge1xuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0OiAyMCxcbiAgICB9O1xuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5taW4obWluV2lkdGgsIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBtb2RpZmllcnMud2lkdGgpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5taW4od2lkdGgsIHRoaXMuZG9jLmJvZHkuY2xpZW50SGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b20gLSBtb2RpZmllcnMuaGVpZ2h0KTtcbiAgICBjb25zdCBvcHRpb25zOiBQYXJ0aWFsPElQaWVDaGFydE9wdGlvbnM+ID0ge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBtYXJnaW4sXG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3cyB0aGUgY2hhcnQuXG4gICAqL1xuICBwcml2YXRlIGRyYXdDaGFydCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY29udGFpbmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY2hhcnRPcHRpb25zKCk7XG4gICAgICB0aGlzLmQzRmFjdG9yeS5kcmF3UGllQ2hhcnQodGhpcy5jb250YWluZXIsIHRoaXMuZGF0YSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjdHVhbGx5IGRyYXdzIHRoZSBjaGFydCBhZnRlciB0aGUgY29tcG9uZW50IHZpZXcgaXMgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3cyB0aGUgY2hhcnQgb24gY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBJSW5wdXRDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogSVBpZUNoYXJ0RGF0YU5vZGVbXSB8IHVuZGVmaW5lZCA9IGNoYW5nZXMuZGF0YT8uY3VycmVudFZhbHVlO1xuICAgIGNvbnN0IG9wdGlvbnM6IFBhcnRpYWw8SVBpZUNoYXJ0T3B0aW9ucz4gPSBjaGFuZ2VzLm9wdGlvbnM/LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAoKHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhICE9PSBudWxsKSB8fCAodHlwZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMgIT09IG51bGwpKSB7XG4gICAgICB0aGlzLmRyYXdDaGFydCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8ZGl2IGlkPVwie3sgY2hhcnRJZCB9fVwiICNjb250YWluZXI+PC9kaXY+XG5cbiAgPHNtYWxsIGNsYXNzPVwiY29udGFpbmVyLS1jaGFydC10aXRsZVwiPnt7IG9wdGlvbnMuY2hhcnRUaXRsZSB9fTwvc21hbGw+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild, } from '@angular/core';
|
|
3
|
+
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
|
+
import { defaultRadarChartConfig } from '../../util';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class AppRadarChartComponent {
|
|
7
|
+
constructor(doc, d3Factory) {
|
|
8
|
+
this.doc = doc;
|
|
9
|
+
this.d3Factory = d3Factory;
|
|
10
|
+
/**
|
|
11
|
+
* The chart id.
|
|
12
|
+
*/
|
|
13
|
+
this.chartId = 'radar-0';
|
|
14
|
+
/**
|
|
15
|
+
* The chart data.
|
|
16
|
+
*/
|
|
17
|
+
this.data = [[]];
|
|
18
|
+
/**
|
|
19
|
+
* The chart options.
|
|
20
|
+
*/
|
|
21
|
+
this.options = {};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The chart options constructor.
|
|
25
|
+
* @returns chart options
|
|
26
|
+
*/
|
|
27
|
+
chartOptions() {
|
|
28
|
+
const xsOffset = 500;
|
|
29
|
+
const smOffset = 800;
|
|
30
|
+
const mdOffset = 1024;
|
|
31
|
+
const labelFactorDefault = 1.15;
|
|
32
|
+
const labelFactorMd = 1.15;
|
|
33
|
+
const labelFactorSm = 1.15;
|
|
34
|
+
const labelFactorXs = 1.4;
|
|
35
|
+
const wrapWidthDefault = 85;
|
|
36
|
+
const wrapWidthMd = 80;
|
|
37
|
+
const wrapWidthXs = 70;
|
|
38
|
+
const bodyWidthAdjustment = 10;
|
|
39
|
+
const width = Math.min(this.options.width ?? defaultRadarChartConfig.width, this.doc.body.clientWidth - defaultRadarChartConfig.margin.left - defaultRadarChartConfig.margin.right - bodyWidthAdjustment);
|
|
40
|
+
const height = Math.min(width, this.doc.body.clientHeight - defaultRadarChartConfig.margin.top - defaultRadarChartConfig.margin.bottom - bodyWidthAdjustment);
|
|
41
|
+
const labelFactor = width <= xsOffset ? labelFactorXs : width <= smOffset ? labelFactorSm : width <= mdOffset ? labelFactorMd : labelFactorDefault;
|
|
42
|
+
const labelTextWrapWidth = width <= xsOffset ? wrapWidthXs : width <= mdOffset ? wrapWidthMd : wrapWidthDefault;
|
|
43
|
+
const options = {
|
|
44
|
+
width,
|
|
45
|
+
height,
|
|
46
|
+
maxValue: this.data[0].reduce((accumulator, item) => (item.value > accumulator ? item.value : accumulator), 0) + 1,
|
|
47
|
+
levels: 5,
|
|
48
|
+
roundStrokes: true,
|
|
49
|
+
labelFactor,
|
|
50
|
+
labelTextWrapWidth,
|
|
51
|
+
...this.options,
|
|
52
|
+
};
|
|
53
|
+
return options;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Draws the chart.
|
|
57
|
+
*/
|
|
58
|
+
drawChart() {
|
|
59
|
+
if (typeof this.container !== 'undefined') {
|
|
60
|
+
const options = this.chartOptions();
|
|
61
|
+
this.d3Factory.drawRadarChart(this.container, this.data, options);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Actually draws the chart after the component view is initialized.
|
|
66
|
+
*/
|
|
67
|
+
ngAfterViewInit() {
|
|
68
|
+
this.drawChart();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Redraws the chart on changes.
|
|
72
|
+
*/
|
|
73
|
+
ngOnChanges(changes) {
|
|
74
|
+
const currentValue = changes.data?.currentValue;
|
|
75
|
+
const options = changes.options?.currentValue;
|
|
76
|
+
if ((typeof currentValue !== 'undefined' && currentValue !== null) || (typeof options !== 'undefined' && options !== null)) {
|
|
77
|
+
this.drawChart();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** @nocollapse */ AppRadarChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppRadarChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component });
|
|
82
|
+
/** @nocollapse */ AppRadarChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AppRadarChartComponent, selector: "app-radar-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 });
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppRadarChartComponent, decorators: [{
|
|
84
|
+
type: Component,
|
|
85
|
+
args: [{ selector: 'app-radar-chart', changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
|
|
86
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
87
|
+
type: Inject,
|
|
88
|
+
args: [DOCUMENT]
|
|
89
|
+
}] }, { type: undefined, decorators: [{
|
|
90
|
+
type: Inject,
|
|
91
|
+
args: [D3_CHART_FACTORY]
|
|
92
|
+
}] }]; }, propDecorators: { chartId: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], data: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], options: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], container: [{
|
|
99
|
+
type: ViewChild,
|
|
100
|
+
args: ['container']
|
|
101
|
+
}] } });
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkYXItY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9yYWRhci1jaGFydC9yYWRhci1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL3JhZGFyLWNoYXJ0L3JhZGFyLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLDJDQUEyQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFhckQsTUFBTSxPQUFPLHNCQUFzQjtJQXFCakMsWUFBK0MsR0FBYSxFQUE2QyxTQUEwQjtRQUFwRixRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQTZDLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBcEJuSTs7V0FFRztRQUNhLFlBQU8sR0FBRyxTQUFTLENBQUM7UUFFcEM7O1dBRUc7UUFDYSxTQUFJLEdBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFckQ7O1dBRUc7UUFDYSxZQUFPLEdBQWdDLEVBQUUsQ0FBQztJQU80RSxDQUFDO0lBRXZJOzs7T0FHRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDaEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQztRQUMzQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7UUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDNUIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLEVBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQzdILENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNyQixLQUFLLEVBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FDOUgsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUNmLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pJLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ2hILE1BQU0sT0FBTyxHQUFnQztZQUMzQyxLQUFLO1lBQ0wsTUFBTTtZQUNOLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDbEgsTUFBTSxFQUFFLENBQUM7WUFDVCxZQUFZLEVBQUUsSUFBSTtZQUNsQixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLEdBQUcsSUFBSSxDQUFDLE9BQU87U0FDaEIsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVM7UUFDZixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxNQUFNLFlBQVksR0FBNEIsT0FBTyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7UUFDekUsTUFBTSxPQUFPLEdBQWdDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1FBQzNFLElBQUksQ0FBQyxPQUFPLFlBQVksS0FBSyxXQUFXLElBQUksWUFBWSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRTtZQUMxSCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDOztzSUF6RlUsc0JBQXNCLGtCQXFCYixRQUFRLGFBQTBDLGdCQUFnQjswSEFyQjNFLHNCQUFzQixzUEM1Qm5DLG1FQUNBOzJGRDJCYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07MERBdUJLLFFBQVE7MEJBQS9DLE1BQU07MkJBQUMsUUFBUTs7MEJBQW1DLE1BQU07MkJBQUMsZ0JBQWdCOzRDQWpCdEUsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxJQUFJO3NCQUFuQixLQUFLO2dCQUtVLE9BQU87c0JBQXRCLEtBQUs7Z0JBS21DLFNBQVM7c0JBQWpELFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJUmFkYXJDaGFydERhdGFOb2RlLCBJUmFkYXJDaGFydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JhZGFyLWNoYXJ0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEM19DSEFSVF9GQUNUT1JZLCBJRDNDaGFydEZhY3RvcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvZDMtY2hhcnQtZmFjdG9yeS5wcm92aWRlcic7XG5pbXBvcnQgeyBkZWZhdWx0UmFkYXJDaGFydENvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbnRlcmZhY2UgSUlucHV0Q2hhbmdlcyB7XG4gIGRhdGE/OiBTaW1wbGVDaGFuZ2UgfCBudWxsO1xuICBvcHRpb25zPzogU2ltcGxlQ2hhbmdlIHwgbnVsbDtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJhZGFyLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGFyLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkYXItY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcFJhZGFyQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogVGhlIGNoYXJ0IGlkLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNoYXJ0SWQgPSAncmFkYXItMCc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFydCBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRhdGE6IElSYWRhckNoYXJ0RGF0YU5vZGVbXVtdID0gW1tdXTtcblxuICAvKipcbiAgICogVGhlIGNoYXJ0IG9wdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogUGFydGlhbDxJUmFkYXJDaGFydE9wdGlvbnM+ID0ge307XG5cbiAgLyoqXG4gICAqIEQzIGNoYXJ0IHZpZXcgY2hpbGQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvYzogRG9jdW1lbnQsIEBJbmplY3QoRDNfQ0hBUlRfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBkM0ZhY3Rvcnk6IElEM0NoYXJ0RmFjdG9yeSkge31cblxuICAvKipcbiAgICogVGhlIGNoYXJ0IG9wdGlvbnMgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIGNoYXJ0IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY2hhcnRPcHRpb25zKCkge1xuICAgIGNvbnN0IHhzT2Zmc2V0ID0gNTAwO1xuICAgIGNvbnN0IHNtT2Zmc2V0ID0gODAwO1xuICAgIGNvbnN0IG1kT2Zmc2V0ID0gMTAyNDtcbiAgICBjb25zdCBsYWJlbEZhY3RvckRlZmF1bHQgPSAxLjE1O1xuICAgIGNvbnN0IGxhYmVsRmFjdG9yTWQgPSAxLjE1O1xuICAgIGNvbnN0IGxhYmVsRmFjdG9yU20gPSAxLjE1O1xuICAgIGNvbnN0IGxhYmVsRmFjdG9yWHMgPSAxLjQ7XG4gICAgY29uc3Qgd3JhcFdpZHRoRGVmYXVsdCA9IDg1O1xuICAgIGNvbnN0IHdyYXBXaWR0aE1kID0gODA7XG4gICAgY29uc3Qgd3JhcFdpZHRoWHMgPSA3MDtcbiAgICBjb25zdCBib2R5V2lkdGhBZGp1c3RtZW50ID0gMTA7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbihcbiAgICAgIHRoaXMub3B0aW9ucy53aWR0aCA/PyBkZWZhdWx0UmFkYXJDaGFydENvbmZpZy53aWR0aCxcbiAgICAgIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBkZWZhdWx0UmFkYXJDaGFydENvbmZpZy5tYXJnaW4ubGVmdCAtIGRlZmF1bHRSYWRhckNoYXJ0Q29uZmlnLm1hcmdpbi5yaWdodCAtIGJvZHlXaWR0aEFkanVzdG1lbnQsXG4gICAgKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1pbihcbiAgICAgIHdpZHRoLFxuICAgICAgdGhpcy5kb2MuYm9keS5jbGllbnRIZWlnaHQgLSBkZWZhdWx0UmFkYXJDaGFydENvbmZpZy5tYXJnaW4udG9wIC0gZGVmYXVsdFJhZGFyQ2hhcnRDb25maWcubWFyZ2luLmJvdHRvbSAtIGJvZHlXaWR0aEFkanVzdG1lbnQsXG4gICAgKTtcbiAgICBjb25zdCBsYWJlbEZhY3RvciA9XG4gICAgICB3aWR0aCA8PSB4c09mZnNldCA/IGxhYmVsRmFjdG9yWHMgOiB3aWR0aCA8PSBzbU9mZnNldCA/IGxhYmVsRmFjdG9yU20gOiB3aWR0aCA8PSBtZE9mZnNldCA/IGxhYmVsRmFjdG9yTWQgOiBsYWJlbEZhY3RvckRlZmF1bHQ7XG4gICAgY29uc3QgbGFiZWxUZXh0V3JhcFdpZHRoID0gd2lkdGggPD0geHNPZmZzZXQgPyB3cmFwV2lkdGhYcyA6IHdpZHRoIDw9IG1kT2Zmc2V0ID8gd3JhcFdpZHRoTWQgOiB3cmFwV2lkdGhEZWZhdWx0O1xuICAgIGNvbnN0IG9wdGlvbnM6IFBhcnRpYWw8SVJhZGFyQ2hhcnRPcHRpb25zPiA9IHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgbWF4VmFsdWU6IHRoaXMuZGF0YVswXS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBpdGVtKSA9PiAoaXRlbS52YWx1ZSA+IGFjY3VtdWxhdG9yID8gaXRlbS52YWx1ZSA6IGFjY3VtdWxhdG9yKSwgMCkgKyAxLFxuICAgICAgbGV2ZWxzOiA1LFxuICAgICAgcm91bmRTdHJva2VzOiB0cnVlLFxuICAgICAgbGFiZWxGYWN0b3IsXG4gICAgICBsYWJlbFRleHRXcmFwV2lkdGgsXG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3cyB0aGUgY2hhcnQuXG4gICAqL1xuICBwcml2YXRlIGRyYXdDaGFydCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY29udGFpbmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY2hhcnRPcHRpb25zKCk7XG4gICAgICB0aGlzLmQzRmFjdG9yeS5kcmF3UmFkYXJDaGFydCh0aGlzLmNvbnRhaW5lciwgdGhpcy5kYXRhLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsbHkgZHJhd3MgdGhlIGNoYXJ0IGFmdGVyIHRoZSBjb21wb25lbnQgdmlldyBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3Q2hhcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXdzIHRoZSBjaGFydCBvbiBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IElJbnB1dENoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWU6IElSYWRhckNoYXJ0RGF0YU5vZGVbXVtdID0gY2hhbmdlcy5kYXRhPy5jdXJyZW50VmFsdWU7XG4gICAgY29uc3Qgb3B0aW9uczogUGFydGlhbDxJUmFkYXJDaGFydE9wdGlvbnM+ID0gY2hhbmdlcy5vcHRpb25zPy5jdXJyZW50VmFsdWU7XG4gICAgaWYgKCh0eXBlb2YgY3VycmVudFZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiBjdXJyZW50VmFsdWUgIT09IG51bGwpIHx8ICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkpIHtcbiAgICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgaWQ9XCJ7eyBjaGFydElkIH19XCIgI2NvbnRhaW5lcj48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWNoYXJ0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2ludGVyZmFjZXMvYmFyLWNoYXJ0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCYXJDaGFydERhdGFOb2RlIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgVEJhckNoYXJ0RGF0YSA9IElCYXJDaGFydERhdGFOb2RlW107XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhckNoYXJ0T3B0aW9ucyB7XG4gIGNoYXJ0VGl0bGU6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG1hcmdpbjoge1xuICAgIHRvcDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICB9O1xuICB0cmFuc2l0aW9uRHVyYXRpb246IG51bWJlcjtcbiAgeEF4aXNQYWRkaW5nOiBudW1iZXI7XG4gIHhBeGlzVGl0bGU6IHN0cmluZztcbiAgeUF4aXNUaXRsZTogc3RyaW5nO1xuICB5QXhpc1RpY2tzOiBudW1iZXI7XG4gIGRpc3BsYXlBeGlzTGFiZWxzOiBib29sZWFuO1xuICBsYWJlbFRleHRXcmFwV2lkdGg6IG51bWJlcjtcbiAgY29sb3I6IGQzLlNjYWxlT3JkaW5hbDxzdHJpbmcsIHN0cmluZz47XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtZGlyZWN0ZWQtY2hhcnQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvaW50ZXJmYWNlcy9mb3JjZS1kaXJlY3RlZC1jaGFydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRm9yY2VEaXJlY3RlZEdyYXBoRG9tYWluIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JjZURpcmVjdGVkR3JhcGhFbnRpdHkge1xuICBpbmRleDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRvbWFpbnM6IHN0cmluZ1tdO1xuICBpbWc6IHN0cmluZztcbiAgbGlua3NDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZSBleHRlbmRzIGQzLlNpbXVsYXRpb25Ob2RlRGF0dW0ge1xuICBpbmRleDogbnVtYmVyO1xuICBkb21haW5zPzogc3RyaW5nW107XG4gIHZhbHVlPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBpbWc/OiBzdHJpbmc7XG4gIGxpbmtzQ291bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEge1xuICBkb21haW5zOiBJRm9yY2VEaXJlY3RlZEdyYXBoRG9tYWluW107XG4gIGVudGl0aWVzOiBJRm9yY2VEaXJlY3RlZEdyYXBoRW50aXR5W107XG4gIGxpbmtzOiBkMy5TaW11bGF0aW9uTGlua0RhdHVtPElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZT5bXTtcbiAgbm9kZXM6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhTm9kZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zIHtcbiAgY2hhcnRUaXRsZTogc3RyaW5nO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgY2VudGVyQ2FsY01vZDogbnVtYmVyO1xuICBjaGFyZ2U6IHtcbiAgICBzdHJlbmd0aDogbnVtYmVyO1xuICAgIHRoZXRhOiBudW1iZXI7XG4gICAgZGlzdGFuY2VNYXg6IG51bWJlcjtcbiAgfTtcbiAgZGlzdGFuY2U6IG51bWJlcjtcbiAgZm9udFNpemU6IG51bWJlcjtcbiAgY29sbGlzaW9uUmFkaXVzOiBudW1iZXI7XG4gIG1hcmdpbjoge1xuICAgIHRvcDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICB9O1xuICBzdHJva2VXaWR0aDogbnVtYmVyO1xuICBsYWJlbFRleHRXcmFwV2lkdGg6IG51bWJlcjtcbiAgY29sb3I6IGQzLlNjYWxlT3JkaW5hbDxzdHJpbmcsIHN0cmluZz47XG59XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './bar-chart.interface';
|
|
2
|
+
export * from './force-directed-chart.interface';
|
|
3
|
+
export * from './line-chart.interface';
|
|
4
|
+
export * from './pie-chart.interface';
|
|
5
|
+
export * from './radar-chart.interface';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmFyLWNoYXJ0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZvcmNlLWRpcmVjdGVkLWNoYXJ0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpbmUtY2hhcnQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGllLWNoYXJ0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3JhZGFyLWNoYXJ0LmludGVyZmFjZSc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9pbnRlcmZhY2VzL2xpbmUtY2hhcnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpbmVDaGFydERhdGFOb2RlIHtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFRMaW5lQ2hhcnREYXRhID0gSUxpbmVDaGFydERhdGFOb2RlW107XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpbmVDaGFydE9wdGlvbnMge1xuICBjaGFydFRpdGxlOiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBtYXJnaW46IHtcbiAgICB0b3A6IG51bWJlcjtcbiAgICByaWdodDogbnVtYmVyO1xuICAgIGJvdHRvbTogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcbiAgfTtcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBudW1iZXI7XG4gIGRvdFJhZGl1czogbnVtYmVyO1xuICB4QXhpc1RpdGxlOiBzdHJpbmc7XG4gIHlBeGlzVGl0bGU6IHN0cmluZztcbiAgdGlja3M6IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9O1xuICBkaXNwbGF5QXhpc0xhYmVsczogYm9vbGVhbjtcbiAgbGFiZWxUZXh0V3JhcFdpZHRoOiBudW1iZXI7XG4gIGNvbG9yOiBkMy5TY2FsZU9yZGluYWw8c3RyaW5nLCBzdHJpbmc+O1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllLWNoYXJ0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2ludGVyZmFjZXMvcGllLWNoYXJ0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJUGllQ2hhcnREYXRhTm9kZSB7XG4gIGtleTogc3RyaW5nO1xuICB5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBpZUNoYXJ0T3B0aW9ucyB7XG4gIGNoYXJ0VGl0bGU6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG1hcmdpbjoge1xuICAgIHRvcDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICB9O1xuICBpbm5lclJhZGl1czogbnVtYmVyO1xuICBsYWJlbFJhZGl1c01vZGlmaWVyOiBudW1iZXI7XG4gIGxhYmVsVGV4dFdyYXBXaWR0aDogbnVtYmVyO1xuICBjb2xvcjogZDMuU2NhbGVPcmRpbmFsPHN0cmluZywgc3RyaW5nPjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkYXItY2hhcnQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvaW50ZXJmYWNlcy9yYWRhci1jaGFydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcblxuZXhwb3J0IGludGVyZmFjZSBJUmFkYXJDaGFydERhdGFOb2RlIHtcbiAgYXhpczogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICB1bml0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFRSYWRhckNoYXJ0RGF0YSA9IElSYWRhckNoYXJ0RGF0YU5vZGVbXVtdO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSYWRhckNoYXJ0T3B0aW9ucyB7XG4gIGNoYXJ0VGl0bGU6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG1hcmdpbjoge1xuICAgIHRvcDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICB9O1xuICBtYXhWYWx1ZTogbnVtYmVyO1xuICBsZXZlbHM6IG51bWJlcjtcbiAgbGluZUZhY3RvcjogbnVtYmVyO1xuICBsYWJlbEZhY3RvcjogbnVtYmVyO1xuICBsYWJlbFRleHRXcmFwV2lkdGg6IG51bWJlcjtcbiAgb3BhY2l0eUFyZWE6IG51bWJlcjtcbiAgZG90UmFkaXVzOiBudW1iZXI7XG4gIG9wYWNpdHlDaXJjbGVzOiBudW1iZXI7XG4gIHN0cm9rZVdpZHRoOiBudW1iZXI7XG4gIHJvdW5kU3Ryb2tlczogYm9vbGVhbjtcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBudW1iZXI7XG4gIGNvbG9yOiBkMy5TY2FsZU9yZGluYWw8c3RyaW5nLCBzdHJpbmc+O1xufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { drawBarChart } from '../util/bar-chart.util';
|
|
3
|
+
import { drawForceDirectedChart } from '../util/force-directed-chart.util';
|
|
4
|
+
import { drawLineChart } from '../util/line-chart.util';
|
|
5
|
+
import { drawPieChart } from '../util/pie-chart.util';
|
|
6
|
+
import { drawRadarChart } from '../util/radar-chart.util';
|
|
7
|
+
export const d3ChartFactory = () => ({
|
|
8
|
+
drawPieChart,
|
|
9
|
+
drawRadarChart,
|
|
10
|
+
drawBarChart,
|
|
11
|
+
drawLineChart,
|
|
12
|
+
drawForceDirectedChart,
|
|
13
|
+
});
|
|
14
|
+
export const D3_CHART_FACTORY = new InjectionToken('D3_CHART_FACTORY', {
|
|
15
|
+
providedIn: 'root',
|
|
16
|
+
factory: d3ChartFactory,
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZDMtY2hhcnQtZmFjdG9yeS5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL3Byb3ZpZGVycy9kMy1jaGFydC1mYWN0b3J5LnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBVTFELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFvQixFQUFFLENBQUMsQ0FBQztJQUNwRCxZQUFZO0lBQ1osY0FBYztJQUNkLFlBQVk7SUFDWixhQUFhO0lBQ2Isc0JBQXNCO0NBQ3ZCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFDLGtCQUFrQixFQUFFO0lBQ3JFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxjQUFjO0NBQ3hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGRyYXdCYXJDaGFydCB9IGZyb20gJy4uL3V0aWwvYmFyLWNoYXJ0LnV0aWwnO1xuaW1wb3J0IHsgZHJhd0ZvcmNlRGlyZWN0ZWRDaGFydCB9IGZyb20gJy4uL3V0aWwvZm9yY2UtZGlyZWN0ZWQtY2hhcnQudXRpbCc7XG5pbXBvcnQgeyBkcmF3TGluZUNoYXJ0IH0gZnJvbSAnLi4vdXRpbC9saW5lLWNoYXJ0LnV0aWwnO1xuaW1wb3J0IHsgZHJhd1BpZUNoYXJ0IH0gZnJvbSAnLi4vdXRpbC9waWUtY2hhcnQudXRpbCc7XG5pbXBvcnQgeyBkcmF3UmFkYXJDaGFydCB9IGZyb20gJy4uL3V0aWwvcmFkYXItY2hhcnQudXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUQzQ2hhcnRGYWN0b3J5IHtcbiAgZHJhd1BpZUNoYXJ0OiB0eXBlb2YgZHJhd1BpZUNoYXJ0O1xuICBkcmF3UmFkYXJDaGFydDogdHlwZW9mIGRyYXdSYWRhckNoYXJ0O1xuICBkcmF3QmFyQ2hhcnQ6IHR5cGVvZiBkcmF3QmFyQ2hhcnQ7XG4gIGRyYXdMaW5lQ2hhcnQ6IHR5cGVvZiBkcmF3TGluZUNoYXJ0O1xuICBkcmF3Rm9yY2VEaXJlY3RlZENoYXJ0OiB0eXBlb2YgZHJhd0ZvcmNlRGlyZWN0ZWRDaGFydDtcbn1cblxuZXhwb3J0IGNvbnN0IGQzQ2hhcnRGYWN0b3J5ID0gKCk6IElEM0NoYXJ0RmFjdG9yeSA9PiAoe1xuICBkcmF3UGllQ2hhcnQsXG4gIGRyYXdSYWRhckNoYXJ0LFxuICBkcmF3QmFyQ2hhcnQsXG4gIGRyYXdMaW5lQ2hhcnQsXG4gIGRyYXdGb3JjZURpcmVjdGVkQ2hhcnQsXG59KTtcblxuZXhwb3J0IGNvbnN0IEQzX0NIQVJUX0ZBQ1RPUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0QzX0NIQVJUX0ZBQ1RPUlknLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogZDNDaGFydEZhY3RvcnksXG59KTtcbiJdfQ==
|