@rfprodz/client-d3-charts 1.4.0 → 1.4.2
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/README.md +2 -2
- package/esm2022/lib/components/bar-chart/bar-chart.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples/chart-examples.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-bar/chart-examples-bar.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-force-directed/chart-examples-force-directed.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-gauge/chart-examples-gauge.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-line/chart-examples-line.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples-pie/chart-examples-pie.component.mjs +14 -7
- package/esm2022/lib/components/chart-examples-radar/chart-examples-radar.component.mjs +3 -3
- package/esm2022/lib/components/force-directed-chart/force-directed-chart.component.mjs +3 -3
- package/esm2022/lib/components/gauge-chart/gauge-chart.component.mjs +3 -3
- package/esm2022/lib/components/line-chart/line-chart.component.mjs +3 -3
- package/esm2022/lib/components/pie-chart/pie-chart.component.mjs +3 -3
- package/esm2022/lib/components/radar-chart/radar-chart.component.mjs +3 -3
- package/esm2022/lib/d3-charts.module.mjs +4 -4
- package/esm2022/lib/util/gauge-chart.util.mjs +36 -5
- package/fesm2022/rfprodz-client-d3-charts.mjs +88 -50
- package/fesm2022/rfprodz-client-d3-charts.mjs.map +1 -1
- package/lib/components/chart-examples-pie/chart-examples-pie.component.d.ts +4 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ import { AppD3ChartsModule } from '@rfprodz/client-d3-charts';
|
|
|
51
51
|
<app-line-chart></app-line-chart>
|
|
52
52
|
<!-- pie chart -->
|
|
53
53
|
<app-pie-chart></app-pie-chart>
|
|
54
|
-
<!--
|
|
54
|
+
<!-- gauge chart -->
|
|
55
55
|
<app-gauge-chart></app-gauge-chart>
|
|
56
56
|
<!-- radar chart -->
|
|
57
57
|
<app-radar-chart></app-radar-chart>
|
|
@@ -80,7 +80,7 @@ See the chart eamples components
|
|
|
80
80
|
import { AppChartExamplesComponent } from '@rfprodz/client-d3-charts';
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
or the [source code](https://github.com/rfprod/nx-ng-starter/blob/main/libs/client-d3-charts/src/lib/components/chart-examples/
|
|
83
|
+
or the [source code](https://github.com/rfprod/nx-ng-starter/blob/main/libs/client-d3-charts/src/lib/components/chart-examples/) of the chart examples component
|
|
84
84
|
|
|
85
85
|
## Developer commands reference
|
|
86
86
|
|
|
@@ -62,10 +62,10 @@ export class AppBarChartComponent {
|
|
|
62
62
|
this.drawChart();
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
66
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
65
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", 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: "16.2.7", 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 }); }
|
|
67
67
|
}
|
|
68
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppBarChartComponent, decorators: [{
|
|
69
69
|
type: Component,
|
|
70
70
|
args: [{ selector: 'app-bar-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"] }]
|
|
71
71
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -8,10 +8,10 @@ import * as i5 from "../chart-examples-pie/chart-examples-pie.component";
|
|
|
8
8
|
import * as i6 from "../chart-examples-gauge/chart-examples-gauge.component";
|
|
9
9
|
import * as i7 from "../chart-examples-force-directed/chart-examples-force-directed.component";
|
|
10
10
|
export class AppChartExamplesComponent {
|
|
11
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
12
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
11
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: AppChartExamplesComponent, selector: "app-chart-examples", ngImport: i0, template: "<app-chart-examples-bar></app-chart-examples-bar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-line></app-chart-examples-line>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-radar></app-chart-examples-radar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-pie></app-chart-examples-pie>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-gauge></app-chart-examples-gauge>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-force-directed></app-chart-examples-force-directed>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AppChartExamplesLineComponent, selector: "app-chart-examples-line" }, { kind: "component", type: i3.AppChartExamplesRadaraComponent, selector: "app-chart-examples-radar" }, { kind: "component", type: i4.AppChartExamplesBarComponent, selector: "app-chart-examples-bar" }, { kind: "component", type: i5.AppChartExamplesPieComponent, selector: "app-chart-examples-pie" }, { kind: "component", type: i6.AppChartExamplesGaugeComponent, selector: "app-chart-examples-gauge" }, { kind: "component", type: i7.AppChartExamplesForceDirectedComponent, selector: "app-chart-examples-force-directed" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesComponent, decorators: [{
|
|
15
15
|
type: Component,
|
|
16
16
|
args: [{ selector: 'app-chart-examples', changeDetection: ChangeDetectionStrategy.OnPush, template: "<app-chart-examples-bar></app-chart-examples-bar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-line></app-chart-examples-line>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-radar></app-chart-examples-radar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-pie></app-chart-examples-pie>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-gauge></app-chart-examples-gauge>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-force-directed></app-chart-examples-force-directed>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
17
17
|
}] });
|
|
@@ -41,10 +41,10 @@ export class AppChartExamplesBarComponent {
|
|
|
41
41
|
yAxisTitle: 'long y axis title',
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
45
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
44
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesBarComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: AppChartExamplesBarComponent, selector: "app-chart-examples-bar", ngImport: i0, template: "<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppBarChartComponent, selector: "app-bar-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
46
46
|
}
|
|
47
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesBarComponent, decorators: [{
|
|
48
48
|
type: Component,
|
|
49
49
|
args: [{ selector: 'app-chart-examples-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
50
50
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
|
|
@@ -71,10 +71,10 @@ export class AppChartExamplesForceDirectedComponent {
|
|
|
71
71
|
chartTitle: 'Example force directed chart',
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
75
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
74
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesForceDirectedComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
75
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: AppChartExamplesForceDirectedComponent, selector: "app-chart-examples-force-directed", ngImport: i0, template: "<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
76
76
|
}
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesForceDirectedComponent, decorators: [{
|
|
78
78
|
type: Component,
|
|
79
79
|
args: [{ selector: 'app-chart-examples-force-directed', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
80
80
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
|
|
@@ -70,10 +70,10 @@ export class AppChartExamplesGaugeComponent {
|
|
|
70
70
|
};
|
|
71
71
|
return options;
|
|
72
72
|
}
|
|
73
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
74
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
73
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesGaugeComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
74
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: AppChartExamplesGaugeComponent, selector: "app-chart-examples-gauge", ngImport: i0, template: "<div class=\"container\" *ngIf=\"gaugeChartConfig$ | async as config\">\n <app-gauge-chart\n [chartId]=\"'gauge-example-1'\"\n [data]=\"config.data.first\"\n [options]=\"config.options.first\"\n [value]=\"value.first\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-2'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.second\"\n [value]=\"value.second\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-3'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.third\"\n [value]=\"value.third\"\n ></app-gauge-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppGaugeChartComponent, selector: "app-gauge-chart", inputs: ["chartId", "value", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
75
75
|
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesGaugeComponent, decorators: [{
|
|
77
77
|
type: Component,
|
|
78
78
|
args: [{ selector: 'app-chart-examples-gauge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"gaugeChartConfig$ | async as config\">\n <app-gauge-chart\n [chartId]=\"'gauge-example-1'\"\n [data]=\"config.data.first\"\n [options]=\"config.options.first\"\n [value]=\"value.first\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-2'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.second\"\n [value]=\"value.second\"\n ></app-gauge-chart>\n\n <app-gauge-chart\n [chartId]=\"'gauge-example-3'\"\n [data]=\"config.data.second\"\n [options]=\"config.options.third\"\n [value]=\"value.third\"\n ></app-gauge-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
79
79
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
|
|
@@ -79,10 +79,10 @@ export class AppChartExamplesLineComponent {
|
|
|
79
79
|
dateFormat,
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
83
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
82
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesLineComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
83
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: AppChartExamplesLineComponent, selector: "app-chart-examples-line", ngImport: i0, template: "<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.optionsDateDdMmYy\"></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-4'\" [data]=\"config.data\" [options]=\"config.optionsDateMmYyyy\"></app-line-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppLineChartComponent, selector: "app-line-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
84
84
|
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesLineComponent, decorators: [{
|
|
86
86
|
type: Component,
|
|
87
87
|
args: [{ selector: 'app-chart-examples-line', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.optionsDateDdMmYy\"></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-4'\" [data]=\"config.data\" [options]=\"config.optionsDateMmYyyy\"></app-line-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
88
88
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
|
|
@@ -36,15 +36,22 @@ export class AppChartExamplesPieComponent {
|
|
|
36
36
|
* Example pie chart options.
|
|
37
37
|
*/
|
|
38
38
|
pieChartOptions() {
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
const options = {
|
|
40
|
+
first: {
|
|
41
|
+
chartTitle: 'Example pie chart 1',
|
|
42
|
+
},
|
|
43
|
+
second: {
|
|
44
|
+
chartTitle: 'Example pie chart 2',
|
|
45
|
+
innerRadius: 75,
|
|
46
|
+
},
|
|
41
47
|
};
|
|
48
|
+
return options;
|
|
42
49
|
}
|
|
43
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
44
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
50
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesPieComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: AppChartExamplesPieComponent, selector: "app-chart-examples-pie", ngImport: i0, template: "<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options.first\"></app-pie-chart>\n\n <app-pie-chart [chartId]=\"'pie-example-2'\" [data]=\"config.data\" [options]=\"config.options.second\"></app-pie-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppPieChartComponent, selector: "app-pie-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
45
52
|
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesPieComponent, decorators: [{
|
|
47
54
|
type: Component,
|
|
48
|
-
args: [{ selector: 'app-chart-examples-pie', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-pie-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
55
|
+
args: [{ selector: 'app-chart-examples-pie', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options.first\"></app-pie-chart>\n\n <app-pie-chart [chartId]=\"'pie-example-2'\" [data]=\"config.data\" [options]=\"config.options.second\"></app-pie-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
49
56
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtZXhhbXBsZXMtcGllLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2NvbXBvbmVudHMvY2hhcnQtZXhhbXBsZXMtcGllL2NoYXJ0LWV4YW1wbGVzLXBpZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0LWV4YW1wbGVzLXBpZS9jaGFydC1leGFtcGxlcy1waWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFJcEQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDOztPQUVHO0lBQ0gsSUFBWSxZQUFZO1FBQ3RCLE9BQTRCO1lBQzFCLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3BCLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3BCLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3JCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3JCLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBZ0JELFlBQTZCLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBZGxELGdCQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjthQUNuRCxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFNUYsb0JBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDckQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNwQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3hCLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDMUUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFFb0UsQ0FBQztJQUV2RTs7T0FFRztJQUNLLGVBQWU7UUFDckIsTUFBTSxPQUFPLEdBR1Q7WUFDRixLQUFLLEVBQTZCO2dCQUNoQyxVQUFVLEVBQUUscUJBQXFCO2FBQ2xDO1lBQ0QsTUFBTSxFQUE2QjtnQkFDakMsVUFBVSxFQUFFLHFCQUFxQjtnQkFDakMsV0FBVyxFQUFFLEVBQUU7YUFDaEI7U0FDRixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztpSUFoRFUsNEJBQTRCO3FIQUE1Qiw0QkFBNEIsOERDZnpDLDBVQUtBOzsyRkRVYSw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgc3dpdGNoTWFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJUGllQ2hhcnREYXRhTm9kZSwgSVBpZUNoYXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGllLWNoYXJ0LmludGVyZmFjZSc7XG5cbi8qKlxuICogUGllIGNoYXJ0IGV4YW1wbGVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hhcnQtZXhhbXBsZXMtcGllJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LWV4YW1wbGVzLXBpZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0LWV4YW1wbGVzLXBpZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwQ2hhcnRFeGFtcGxlc1BpZUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBTYW1wbGUgcGllIGNoYXJ0IGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGdldCBwaWVDaGFydERhdGEoKSB7XG4gICAgcmV0dXJuIDxJUGllQ2hhcnREYXRhTm9kZVtdPltcbiAgICAgIHsga2V5OiAnb25lJywgeTogMSB9LFxuICAgICAgeyBrZXk6ICd0d28nLCB5OiAyIH0sXG4gICAgICB7IGtleTogJ3RocmVlJywgeTogMyB9LFxuICAgICAgeyBrZXk6ICdmb3VyJywgeTogNCB9LFxuICAgICAgeyBrZXk6ICdmaXZlJywgeTogNSB9LFxuICAgICAgeyBrZXk6ICdzaXgnLCB5OiA2IH0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludCQgPSB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclxuICAgIC5vYnNlcnZlKFtCcmVha3BvaW50cy5YU21hbGwsIEJyZWFrcG9pbnRzLlNtYWxsLCBCcmVha3BvaW50cy5NZWRpdW0sIEJyZWFrcG9pbnRzLkxhcmdlLCBCcmVha3BvaW50cy5YTGFyZ2VdKVxuICAgIC5waXBlKG1hcChyZXN1bHQgPT4gT2JqZWN0LmtleXMocmVzdWx0LmJyZWFrcG9pbnRzKS5maW5kKGl0ZW0gPT4gcmVzdWx0LmJyZWFrcG9pbnRzW2l0ZW1dKSA/PyAndW5rbm93bicpKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcGllQ2hhcnRDb25maWckID0gdGhpcy5icmVha3BvaW50JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gMTAwO1xuICAgICAgcmV0dXJuIHRpbWVyKHRpbWVvdXQpLnBpcGUoXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIG1hcCgoKSA9PiAoeyBkYXRhOiB0aGlzLnBpZUNoYXJ0RGF0YSwgb3B0aW9uczogdGhpcy5waWVDaGFydE9wdGlvbnMoKSB9KSksXG4gICAgICApO1xuICAgIH0pLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHt9XG5cbiAgLyoqXG4gICAqIEV4YW1wbGUgcGllIGNoYXJ0IG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHBpZUNoYXJ0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zOiB7XG4gICAgICBmaXJzdDogUGFydGlhbDxJUGllQ2hhcnRPcHRpb25zPjtcbiAgICAgIHNlY29uZDogUGFydGlhbDxJUGllQ2hhcnRPcHRpb25zPjtcbiAgICB9ID0ge1xuICAgICAgZmlyc3Q6IDxQYXJ0aWFsPElQaWVDaGFydE9wdGlvbnM+PntcbiAgICAgICAgY2hhcnRUaXRsZTogJ0V4YW1wbGUgcGllIGNoYXJ0IDEnLFxuICAgICAgfSxcbiAgICAgIHNlY29uZDogPFBhcnRpYWw8SVBpZUNoYXJ0T3B0aW9ucz4+e1xuICAgICAgICBjaGFydFRpdGxlOiAnRXhhbXBsZSBwaWUgY2hhcnQgMicsXG4gICAgICAgIGlubmVyUmFkaXVzOiA3NSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiICpuZ0lmPVwicGllQ2hhcnRDb25maWckIHwgYXN5bmMgYXMgY29uZmlnXCI+XG4gIDxhcHAtcGllLWNoYXJ0IFtjaGFydElkXT1cIidwaWUtZXhhbXBsZS0xJ1wiIFtkYXRhXT1cImNvbmZpZy5kYXRhXCIgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnMuZmlyc3RcIj48L2FwcC1waWUtY2hhcnQ+XG5cbiAgPGFwcC1waWUtY2hhcnQgW2NoYXJ0SWRdPVwiJ3BpZS1leGFtcGxlLTInXCIgW2RhdGFdPVwiY29uZmlnLmRhdGFcIiBbb3B0aW9uc109XCJjb25maWcub3B0aW9ucy5zZWNvbmRcIj48L2FwcC1waWUtY2hhcnQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -56,10 +56,10 @@ export class AppChartExamplesRadaraComponent {
|
|
|
56
56
|
chartTitle: 'Example radar chart',
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
60
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
59
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesRadaraComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: AppChartExamplesRadaraComponent, selector: "app-chart-examples-radar", ngImport: i0, template: "<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-radar-chart>\n\n <app-radar-chart [chartId]=\"'radar-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.options\"></app-radar-chart>\n\n <app-radar-chart [chartId]=\"'radar-example-3'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AppRadarChartComponent, selector: "app-radar-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
61
|
}
|
|
62
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppChartExamplesRadaraComponent, decorators: [{
|
|
63
63
|
type: Component,
|
|
64
64
|
args: [{ selector: 'app-chart-examples-radar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-radar-chart>\n\n <app-radar-chart [chartId]=\"'radar-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.options\"></app-radar-chart>\n\n <app-radar-chart [chartId]=\"'radar-example-3'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
65
65
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
|
|
@@ -67,10 +67,10 @@ export class AppForceDirectedChartComponent {
|
|
|
67
67
|
this.drawChart();
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
71
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
70
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", 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: "16.2.7", 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 }); }
|
|
72
72
|
}
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppForceDirectedChartComponent, decorators: [{
|
|
74
74
|
type: Component,
|
|
75
75
|
args: [{ selector: 'app-force-directed-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 .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"] }]
|
|
76
76
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -70,10 +70,10 @@ export class AppGaugeChartComponent {
|
|
|
70
70
|
this.drawChart();
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
74
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
73
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", 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: "16.2.7", 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 }); }
|
|
75
75
|
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppGaugeChartComponent, decorators: [{
|
|
77
77
|
type: Component,
|
|
78
78
|
args: [{ selector: 'app-gauge-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"] }]
|
|
79
79
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -67,10 +67,10 @@ export class AppLineChartComponent {
|
|
|
67
67
|
this.drawChart();
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
71
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
70
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", 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: "16.2.7", 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
72
|
}
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppLineChartComponent, decorators: [{
|
|
74
74
|
type: Component,
|
|
75
75
|
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"] }]
|
|
76
76
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -65,10 +65,10 @@ export class AppPieChartComponent {
|
|
|
65
65
|
this.drawChart();
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
69
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
68
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", 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: "16.2.7", 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 }); }
|
|
70
70
|
}
|
|
71
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppPieChartComponent, decorators: [{
|
|
72
72
|
type: Component,
|
|
73
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
74
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -77,10 +77,10 @@ export class AppRadarChartComponent {
|
|
|
77
77
|
this.drawChart();
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
81
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
80
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppRadarChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
81
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", 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 }); }
|
|
82
82
|
}
|
|
83
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppRadarChartComponent, decorators: [{
|
|
84
84
|
type: Component,
|
|
85
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
86
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -15,8 +15,8 @@ import { AppPieChartComponent } from './components/pie-chart/pie-chart.component
|
|
|
15
15
|
import { AppRadarChartComponent } from './components/radar-chart/radar-chart.component';
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
export class AppD3ChartsModule {
|
|
18
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
19
|
-
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.
|
|
18
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppD3ChartsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
19
|
+
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.7", ngImport: i0, type: AppD3ChartsModule, declarations: [AppGaugeChartComponent,
|
|
20
20
|
AppPieChartComponent,
|
|
21
21
|
AppRadarChartComponent,
|
|
22
22
|
AppForceDirectedChartComponent,
|
|
@@ -35,9 +35,9 @@ export class AppD3ChartsModule {
|
|
|
35
35
|
AppBarChartComponent,
|
|
36
36
|
AppLineChartComponent,
|
|
37
37
|
AppChartExamplesComponent] }); }
|
|
38
|
-
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.
|
|
38
|
+
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppD3ChartsModule, imports: [CommonModule] }); }
|
|
39
39
|
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AppD3ChartsModule, decorators: [{
|
|
41
41
|
type: NgModule,
|
|
42
42
|
args: [{
|
|
43
43
|
imports: [CommonModule],
|
|
@@ -36,22 +36,41 @@ const createContainer = (container, config) => {
|
|
|
36
36
|
.select(`#${id}`)
|
|
37
37
|
.append('svg')
|
|
38
38
|
.attr('width', config.width + config.margin.left + config.margin.right)
|
|
39
|
-
.attr('height', config.height + config.margin.top + config.margin.bottom)
|
|
39
|
+
.attr('height', config.height / 2 + config.margin.top + config.margin.bottom)
|
|
40
40
|
.attr('class', id);
|
|
41
41
|
const g = svg
|
|
42
42
|
.append('g')
|
|
43
43
|
.attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);
|
|
44
44
|
return { svg, g };
|
|
45
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* Percentage to degrees converter.
|
|
48
|
+
* @param perc percentage
|
|
49
|
+
*/
|
|
46
50
|
const percToDeg = (perc) => {
|
|
47
51
|
const mod = 360;
|
|
48
52
|
return perc * mod;
|
|
49
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* Degrees to percentage converter.
|
|
56
|
+
* @param deg degrees
|
|
57
|
+
*/
|
|
50
58
|
const degToRad = (deg) => {
|
|
51
59
|
const mod = 180;
|
|
52
60
|
return (deg * Math.PI) / mod;
|
|
53
61
|
};
|
|
62
|
+
/**
|
|
63
|
+
* Repcentage to radians converter.
|
|
64
|
+
* @param perc percentage
|
|
65
|
+
*/
|
|
54
66
|
const percToRad = (perc) => degToRad(percToDeg(perc));
|
|
67
|
+
/**
|
|
68
|
+
* Draws the gauge chart sections.
|
|
69
|
+
* @param config the chart config
|
|
70
|
+
* @param arc the charts's arc
|
|
71
|
+
* @param arcs the chart's arc sections
|
|
72
|
+
* @param data the chart's data
|
|
73
|
+
*/
|
|
55
74
|
const drawSections = (config, arc, arcs, data) => {
|
|
56
75
|
let startAt = 0.75; // Start at 270deg
|
|
57
76
|
const sectionPercentage = 1 / data.length / 2;
|
|
@@ -73,6 +92,12 @@ const drawSections = (config, arc, arcs, data) => {
|
|
|
73
92
|
return arc.startAngle(arcStartRad + startPadRad).endAngle(arcEndRad - endPadRad)(datum);
|
|
74
93
|
});
|
|
75
94
|
};
|
|
95
|
+
/**
|
|
96
|
+
* Draws the guage chart labels
|
|
97
|
+
* @param arc the charts's arc
|
|
98
|
+
* @param arcs the chart's arc sections
|
|
99
|
+
* @param data the chart's data
|
|
100
|
+
*/
|
|
76
101
|
const drawLabels = (arc, arcs, data) => {
|
|
77
102
|
let startAt = 0.75; // Start at 270deg
|
|
78
103
|
const sectionPercentage = 1 / data.length / 2;
|
|
@@ -95,6 +120,12 @@ const drawLabels = (arc, arcs, data) => {
|
|
|
95
120
|
.style('font-size', '12px')
|
|
96
121
|
.text(d => d.data.y);
|
|
97
122
|
};
|
|
123
|
+
/**
|
|
124
|
+
* Draws the gauge chart value.
|
|
125
|
+
* @param config the chart config
|
|
126
|
+
* @param g the gauge chart container
|
|
127
|
+
* @param radius the chart radius
|
|
128
|
+
*/
|
|
98
129
|
const drawValue = (config, g, radius) => {
|
|
99
130
|
const mod = 20;
|
|
100
131
|
g.append('text')
|
|
@@ -102,8 +133,8 @@ const drawValue = (config, g, radius) => {
|
|
|
102
133
|
.attr('text-anchor', 'middle')
|
|
103
134
|
.attr('dx', radius / mod)
|
|
104
135
|
.attr('dy', radius / mod)
|
|
105
|
-
.style('font-size', '
|
|
106
|
-
.text(() => config.value);
|
|
136
|
+
.style('font-size', '18px')
|
|
137
|
+
.text(() => `${config.value}%`);
|
|
107
138
|
};
|
|
108
139
|
/**
|
|
109
140
|
* Draws the gauge chart.
|
|
@@ -133,7 +164,7 @@ export const drawGaugeChart = (container, data, options) => {
|
|
|
133
164
|
.attr('class', 'chart-tooltip')
|
|
134
165
|
.style('opacity', 0)
|
|
135
166
|
.attr('dx', -config.width / (2 * 2 * 2))
|
|
136
|
-
.attr('dy',
|
|
167
|
+
.attr('dy', radius / 2 - config.margin.top - config.margin.bottom)
|
|
137
168
|
.text(tooltipText)
|
|
138
169
|
.transition()
|
|
139
170
|
.duration(config.transitionDuration)
|
|
@@ -155,4 +186,4 @@ export const drawGaugeChart = (container, data, options) => {
|
|
|
155
186
|
drawValue(config, g, radius);
|
|
156
187
|
return config;
|
|
157
188
|
};
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F1Z2UtY2hhcnQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL3V0aWwvZ2F1Z2UtY2hhcnQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUF1QixNQUFNLENBQUMsTUFBTSxDQUFxQjtJQUMzRixVQUFVLEVBQUUsRUFBRTtJQUNkLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7SUFDWCxNQUFNLEVBQUU7UUFDTixHQUFHLEVBQUUsRUFBRTtRQUNQLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsRUFBRTtLQUNUO0lBQ0QsV0FBVyxFQUFFLEdBQUc7SUFDaEIsVUFBVSxFQUFFLElBQUk7SUFDaEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsS0FBSyxFQUFFLE9BQU87SUFDZCxZQUFZLEVBQUUsV0FBVztJQUN6QixLQUFLLEVBQUUsRUFBRTtDQUNWLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFxQyxFQUFFLE1BQTBCLEVBQUUsRUFBRTtJQUM1RixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUM7SUFFbkQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFD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RSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0I7SUFFRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUU3QixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5cbmltcG9ydCB7IElHYXVnZUNoYXJ0RGF0YU5vZGUsIElHYXVnZUNoYXJ0T3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ2F1Z2UtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdlbmVyYXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbi51dGlsJztcblxuLyoqXG4gKiBUaGUgZ2F1Z2UgY2hhcnQgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEdhdWdlQ2hhcnRDb25maWc6IElHYXVnZUNoYXJ0T3B0aW9ucyA9IE9iamVjdC5mcmVlemUoPElHYXVnZUNoYXJ0T3B0aW9ucz57XG4gIGNoYXJ0VGl0bGU6ICcnLFxuICB3aWR0aDogNjAwLFxuICBoZWlnaHQ6IDYwMCxcbiAgbWFyZ2luOiB7XG4gICAgdG9wOiAyMCxcbiAgICByaWdodDogMjAsXG4gICAgYm90dG9tOiAyMCxcbiAgICBsZWZ0OiAyMCxcbiAgfSxcbiAgaW5uZXJSYWRpdXM6IDEwMCwgLy8gaW5jcmVhc2UgaW5uZXIgcmFkaXVzIHRvIHJlZHVjZSB0aGlja25lc3Mgb2YgdGhlIGNoYXJ0XG4gIHNob3dMYWJlbHM6IHRydWUsXG4gIHNob3dUb29sdGlwczogdHJ1ZSxcbiAgbGFiZWxSYWRpdXNNb2RpZmllcjogNTAsXG4gIGxhYmVsVGV4dFdyYXBXaWR0aDogNjAsXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogMTAwMCxcbiAgY29sb3I6ICdncmVlbicsXG4gIGRlZmF1bHRDb2xvcjogJ2xpZ2h0Z3JheScsXG4gIHZhbHVlOiAxMCxcbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb250YWluZXIgZm9yIHRoZSBnYXVnZSBjaGFydC5cbiAqIEBwYXJhbSBjb250YWluZXIgdGhlIGNoYXJ0IGNvbnRhaW5lclxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgdGhlIG9iamVjdCB3aXRoIHRoZSBzdmcgZWxlbWVudCBhbmQgdGhlIGcgZWxlbWVudFxuICovXG5jb25zdCBjcmVhdGVDb250YWluZXIgPSAoY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiwgY29uZmlnOiBJR2F1Z2VDaGFydE9wdGlvbnMpID0+IHtcbiAgY29uc3QgaWQgPSBjb250YWluZXIubmF0aXZlRWxlbWVudC5pZCA/PyAnZ2F1Z2UtMCc7XG5cbiAgZDMuc2VsZWN0KGAjJHtpZH1gKS5zZWxlY3QoJ3N2ZycpLnJlbW92ZSgpO1xuICBjb25zdCBzdmcgPSBkM1xuICAgIC5zZWxlY3QoYCMke2lkfWApXG4gICAgLmFwcGVuZCgnc3ZnJylcbiAgICAuYXR0cignd2lkdGgnLCBjb25maWcud2lkdGggKyBjb25maWcubWFyZ2luLmxlZnQgKyBjb25maWcubWFyZ2luLnJpZ2h0KVxuICAgIC5hdHRyKCdoZWlnaHQnLCBjb25maWcuaGVpZ2h0ICsgY29uZmlnLm1hcmdpbi50b3AgKyBjb25maWcubWFyZ2luLmJvdHRvbSlcbiAgICAuYXR0cignY2xhc3MnLCBpZCk7XG4gIGNvbnN0IGcgPSBzdmdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2NvbmZpZy53aWR0aCAvIDIgKyBjb25maWcubWFyZ2luLmxlZnR9LCR7Y29uZmlnLmhlaWdodCAvIDIgKyBjb25maWcubWFyZ2luLnRvcH0pYCk7XG5cbiAgcmV0dXJuIHsgc3ZnLCBnIH07XG59O1xuXG5jb25zdCBwZXJjVG9EZWcgPSAocGVyYzogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IG1vZCA9IDM2MDtcbiAgcmV0dXJuIHBlcmMgKiBtb2Q7XG59O1xuY29uc3QgZGVnVG9SYWQgPSAoZGVnOiBudW1iZXIpID0+IHtcbiAgY29uc3QgbW9kID0gMTgwO1xuICByZXR1cm4gKGRlZyAqIE1hdGguUEkpIC8gbW9kO1xufTtcbmNvbnN0IHBlcmNUb1JhZCA9IChwZXJjOiBudW1iZXIpID0+IGRlZ1RvUmFkKHBlcmNUb0RlZyhwZXJjKSk7XG5cbmNvbnN0IGRyYXdTZWN0aW9ucyA9IChcbiAgY29uZmlnOiBJR2F1Z2VDaGFydE9wdGlvbnMsXG4gIGFyYzogZDMuQXJjPHVua25vd24sIGQzLlBpZUFyY0RhdHVtPElHYXVnZUNoYXJ0RGF0YU5vZGU+PixcbiAgYXJjczogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCBkMy5QaWVBcmNEYXR1bTxJR2F1Z2VDaGFydERhdGFOb2RlPiwgU1ZHR0VsZW1lbnQsIHVua25vd24+LFxuICBkYXRhOiBJR2F1Z2VDaGFydERhdGFOb2RlW10sXG4pID0+IHtcbiAgbGV0IHN0YXJ0QXQgPSAwLjc1OyAvLyBTdGFydCBhdCAyNzBkZWdcbiAgY29uc3Qgc2VjdGlvblBlcmNlbnRhZ2UgPSAxIC8gZGF0YS5sZW5ndGggLyAyO1xuICBjb25zdCBwYWRSYWQgPSAwLjAxO1xuXG4gIGFyY3NcbiAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAuYXR0cignZmlsbCcsIGQgPT4gKGQuZGF0YS55IDw9IGNvbmZpZy52YWx1ZSA/IGNvbmZpZy5jb2xvciA6IGNvbmZpZy5kZWZhdWx0Q29sb3IpKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHRvdGFsID0gMTAwO1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBkYXRhLmxlbmd0aCAtIDE7XG4gICAgICByZXR1cm4gKChpICsgMSkgKiBzZWN0aW9ucykgLyB0b3RhbDtcbiAgICB9KVxuICAgIC5hdHRyKCdkJywgZGF0dW0gPT4ge1xuICAgICAgY29uc3QgYXJjU3RhcnRSYWQgPSBwZXJjVG9SYWQoc3RhcnRBdCk7XG4gICAgICBjb25zdCBhcmNFbmRSYWQgPSBhcmNTdGFydFJhZCArIHBlcmNUb1JhZChzZWN0aW9uUGVyY2VudGFnZSk7XG4gICAgICBzdGFydEF0ICs9IHNlY3Rpb25QZXJjZW50YWdlO1xuXG4gICAgICBjb25zdCBzdGFydFBhZFJhZCA9IGRhdHVtLmluZGV4ID09PSAwID8gMCA6IHBhZFJhZCAvIDI7XG4gICAgICBjb25zdCBlbmRQYWRSYWQgPSBkYXR1bS5pbmRleCA9PT0gZGF0YS5sZW5ndGggPyAwIDogcGFkUmFkIC8gMjtcbiAgICAgIHJldHVybiBhcmMuc3RhcnRBbmdsZShhcmNTdGFydFJhZCArIHN0YXJ0UGFkUmFkKS5lbmRBbmdsZShhcmNFbmRSYWQgLSBlbmRQYWRSYWQpKGRhdHVtKTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGRyYXdMYWJlbHMgPSAoXG4gIGFyYzogZDMuQXJjPHVua25vd24sIGQzLlBpZUFyY0RhdHVtPElHYXVnZUNoYXJ0RGF0YU5vZGU+PixcbiAgYXJjczogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCBkMy5QaWVBcmNEYXR1bTxJR2F1Z2VDaGFydERhdGFOb2RlPiwgU1ZHR0VsZW1lbnQsIHVua25vd24+LFxuICBkYXRhOiBJR2F1Z2VDaGFydERhdGFOb2RlW10sXG4pID0+IHtcbiAgbGV0IHN0YXJ0QXQgPSAwLjc1OyAvLyBTdGFydCBhdCAyNzBkZWdcbiAgY29uc3Qgc2VjdGlvblBlcmNlbnRhZ2UgPSAxIC8gZGF0YS5sZW5ndGggLyAyO1xuICBjb25zdCBwYWRSYWQgPSAwLjAxO1xuICBjb25zdCB0ZXh0RHkgPSA1O1xuXG4gIGFyY3NcbiAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAuYXR0cignY2xhc3MnLCAnbGVnZW5kJylcbiAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAuYXR0cignZHknLCB0ZXh0RHkpXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGRhdHVtID0+IHtcbiAgICAgIGNvbnN0IGFyY1N0YXJ0UmFkID0gcGVyY1RvUmFkKHN0YXJ0QXQpO1xuICAgICAgY29uc3QgYXJjRW5kUmFkID0gYXJjU3RhcnRSYWQgKyBwZXJjVG9SYWQoc2VjdGlvblBlcmNlbnRhZ2UpO1xuICAgICAgc3RhcnRBdCArPSBzZWN0aW9uUGVyY2VudGFnZTtcblxuICAgICAgY29uc3Qgc3RhcnRQYWRSYWQgPSBkYXR1bS5pbmRleCA9PT0gMCA/IDAgOiBwYWRSYWQgLyAyO1xuICAgICAgY29uc3QgZW5kUGFkUmFkID0gZGF0dW0uaW5kZXggPT09IGRhdGEubGVuZ3RoID8gMCA6IHBhZFJhZCAvIDI7XG4gICAgICBjb25zdCBhID0gYXJjLnN0YXJ0QW5nbGUoYXJjU3RhcnRSYWQgKyBzdGFydFBhZFJhZCkuZW5kQW5nbGUoYXJjRW5kUmFkIC0gZW5kUGFkUmFkKTtcbiAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7YS5jZW50cm9pZChkYXR1bSl9KWA7XG4gICAgfSlcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcbiAgICAudGV4dChkID0+IGQuZGF0YS55KTtcbn07XG5cbmNvbnN0IGRyYXdWYWx1ZSA9IChjb25maWc6IElHYXVnZUNoYXJ0T3B0aW9ucywgZzogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCB1bmtub3duLCBIVE1MRWxlbWVudCwgdW5rbm93bj4sIHJhZGl1czogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IG1vZCA9IDIwO1xuICBnLmFwcGVuZCgndGV4dCcpXG4gICAgLmF0dHIoJ2NsYXNzJywgJ3ZhbHVlJylcbiAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAuYXR0cignZHgnLCByYWRpdXMgLyBtb2QpXG4gICAgLmF0dHIoJ2R5JywgcmFkaXVzIC8gbW9kKVxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEycHgnKVxuICAgIC50ZXh0KCgpID0+IGNvbmZpZy52YWx1ZSk7XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBnYXVnZSBjaGFydC5cbiAqIEBwYXJhbSBjb250YWluZXIgdGhlIGNoYXJ0IGNvbnRhaW5lclxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSBjaGFydCBvcHRpb25zXG4gKiBAcmV0dXJucyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY29uc3QgZHJhd0dhdWdlQ2hhcnQgPSAoXG4gIGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXG4gIGRhdGE6IElHYXVnZUNoYXJ0RGF0YU5vZGVbXSxcbiAgb3B0aW9ucz86IFBhcnRpYWw8SUdhdWdlQ2hhcnRPcHRpb25zPixcbikgPT4ge1xuICBjb25zdCBjb25maWc6IElHYXVnZUNoYXJ0T3B0aW9ucyA9IGdlbmVyYXRlQ29uZmlndXJhdGlvbjxJR2F1Z2VDaGFydE9wdGlvbnM+KGRlZmF1bHRHYXVnZUNoYXJ0Q29uZmlnLCBvcHRpb25zLCB7fSk7XG5cbiAgY29uc3QgeyBnIH0gPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCBjb25maWcpO1xuXG4gIGNvbnN0IGdhdWdlID0gZDMucGllPElHYXVnZUNoYXJ0RGF0YU5vZGU+KCkudmFsdWUoZGF0dW0gPT4gZGF0dW0ueSk7XG5cbiAgY29uc3QgcmFkaXVzID0gTWF0aC5taW4oY29uZmlnLndpZHRoLCBjb25maWcuaGVpZ2h0KSAvIDI7XG5cbiAgY29uc3QgYXJjID0gZDMuYXJjPGQzLlBpZUFyY0RhdHVtPElHYXVnZUNoYXJ0RGF0YU5vZGU+PigpLmlubmVyUmFkaXVzKGNvbmZpZy5pbm5lclJhZGl1cykub3V0ZXJSYWRpdXMocmFkaXVzKTtcblxuICBjb25zdCBhcmNzID0gZ1xuICAgIC5zZWxlY3RBbGwoJ2FyYycpXG4gICAgLmRhdGEoZ2F1Z2UoZGF0YSkpXG4gICAgLmVudGVyKClcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuYXR0cignY2xhc3MnLCAnYXJjJylcbiAgICAub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uICh0aGlzLCBldmVudDogTW91c2VFdmVudCwgZCkge1xuICAgICAgdGhpcy5zdHlsZS5vcGFjaXR5ID0gJzAuOCc7XG5cbiAgICAgIGNvbnN0IGRpc3BsYXlUb29sdGlwID0gZC5kYXRhLnkgPD0gY29uZmlnLnZhbHVlICYmIGNvbmZpZy5zaG93VG9vbHRpcHM7XG5cbiAgICAgIGlmIChkaXNwbGF5VG9vbHRpcCkge1xuICAgICAgICBjb25zdCB0b29sdGlwVGV4dCA9IGAke2QuZGF0YS5rZXl9OiAke2QuZGF0YS55fWA7XG5cbiAgICAgICAgZy5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdjaGFydC10b29sdGlwJylcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxuICAgICAgICAgIC5hdHRyKCdkeCcsIC1jb25maWcud2lkdGggLyAoMiAqIDIgKiAyKSlcbiAgICAgICAgICAuYXR0cignZHknLCBjb25maWcuaGVpZ2h0IC8gMiArIGNvbmZpZy5tYXJnaW4udG9wKVxuICAgICAgICAgIC50ZXh0KHRvb2x0aXBUZXh0KVxuICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbilcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAodGhpcywgZXZlbnQsIGQpIHtcbiAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICd1bnNldCc7XG4gICAgICBkMy5zZWxlY3RBbGwoJy5jaGFydC10b29sdGlwJylcbiAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbiAvIDIpXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXG4gICAgICAgIC5yZW1vdmUoKTtcbiAgICB9KTtcblxuICBkcmF3U2VjdGlvbnMoY29uZmlnLCBhcmMsIGFyY3MsIGRhdGEpO1xuXG4gIGlmIChjb25maWcuc2hvd0xhYmVscykge1xuICAgIGRyYXdMYWJlbHMoYXJjLCBhcmNzLCBkYXRhKTtcbiAgfVxuXG4gIGRyYXdWYWx1ZShjb25maWcsIGcsIHJhZGl1cyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F1Z2UtY2hhcnQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL3V0aWwvZ2F1Z2UtY2hhcnQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUF1QixNQUFNLENBQUMsTUFBTSxDQUFxQjtJQUMzRixVQUFVLEVBQUUsRUFBRTtJQUNkLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7SUFDWCxNQUFNLEVBQUU7UUFDTixHQUFHLEVBQUUsRUFBRTtRQUNQLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsRUFBRTtLQUNUO0lBQ0QsV0FBVyxFQUFFLEdBQUc7SUFDaEIsVUFBVSxFQUFFLElBQUk7SUFDaEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsS0FBSyxFQUFFLE9BQU87SUFDZCxZQUFZLEVBQUUsV0FBVztJQUN6QixLQUFLLEVBQUUsRUFBRTtDQUNWLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFxQyxFQUFFLE1BQTBCLEVBQUUsRUFBRTtJQUM1RixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUM7SUFFbkQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFD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QUFDO0lBRUwsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXRDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNyQixVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM3QjtJQUVELFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTdCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcblxuaW1wb3J0IHsgSUdhdWdlQ2hhcnREYXRhTm9kZSwgSUdhdWdlQ2hhcnRPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9nYXVnZS1jaGFydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2VuZXJhdGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnV0aWwnO1xuXG4vKipcbiAqIFRoZSBnYXVnZSBjaGFydCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0R2F1Z2VDaGFydENvbmZpZzogSUdhdWdlQ2hhcnRPcHRpb25zID0gT2JqZWN0LmZyZWV6ZSg8SUdhdWdlQ2hhcnRPcHRpb25zPntcbiAgY2hhcnRUaXRsZTogJycsXG4gIHdpZHRoOiA2MDAsXG4gIGhlaWdodDogNjAwLFxuICBtYXJnaW46IHtcbiAgICB0b3A6IDIwLFxuICAgIHJpZ2h0OiAyMCxcbiAgICBib3R0b206IDIwLFxuICAgIGxlZnQ6IDIwLFxuICB9LFxuICBpbm5lclJhZGl1czogMTAwLCAvLyBpbmNyZWFzZSBpbm5lciByYWRpdXMgdG8gcmVkdWNlIHRoaWNrbmVzcyBvZiB0aGUgY2hhcnRcbiAgc2hvd0xhYmVsczogdHJ1ZSxcbiAgc2hvd1Rvb2x0aXBzOiB0cnVlLFxuICBsYWJlbFJhZGl1c01vZGlmaWVyOiA1MCxcbiAgbGFiZWxUZXh0V3JhcFdpZHRoOiA2MCxcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiAxMDAwLFxuICBjb2xvcjogJ2dyZWVuJyxcbiAgZGVmYXVsdENvbG9yOiAnbGlnaHRncmF5JyxcbiAgdmFsdWU6IDEwLFxufSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnRhaW5lciBmb3IgdGhlIGdhdWdlIGNoYXJ0LlxuICogQHBhcmFtIGNvbnRhaW5lciB0aGUgY2hhcnQgY29udGFpbmVyXG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyB0aGUgb2JqZWN0IHdpdGggdGhlIHN2ZyBlbGVtZW50IGFuZCB0aGUgZyBlbGVtZW50XG4gKi9cbmNvbnN0IGNyZWF0ZUNvbnRhaW5lciA9IChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LCBjb25maWc6IElHYXVnZUNoYXJ0T3B0aW9ucykgPT4ge1xuICBjb25zdCBpZCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmlkID8/ICdnYXVnZS0wJztcblxuICBkMy5zZWxlY3QoYCMke2lkfWApLnNlbGVjdCgnc3ZnJykucmVtb3ZlKCk7XG4gIGNvbnN0IHN2ZyA9IGQzXG4gICAgLnNlbGVjdChgIyR7aWR9YClcbiAgICAuYXBwZW5kKCdzdmcnKVxuICAgIC5hdHRyKCd3aWR0aCcsIGNvbmZpZy53aWR0aCArIGNvbmZpZy5tYXJnaW4ubGVmdCArIGNvbmZpZy5tYXJnaW4ucmlnaHQpXG4gICAgLmF0dHIoJ2hlaWdodCcsIGNvbmZpZy5oZWlnaHQgLyAyICsgY29uZmlnLm1hcmdpbi50b3AgKyBjb25maWcubWFyZ2luLmJvdHRvbSlcbiAgICAuYXR0cignY2xhc3MnLCBpZCk7XG4gIGNvbnN0IGcgPSBzdmdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2NvbmZpZy53aWR0aCAvIDIgKyBjb25maWcubWFyZ2luLmxlZnR9LCR7Y29uZmlnLmhlaWdodCAvIDIgKyBjb25maWcubWFyZ2luLnRvcH0pYCk7XG5cbiAgcmV0dXJuIHsgc3ZnLCBnIH07XG59O1xuXG4vKipcbiAqIFBlcmNlbnRhZ2UgdG8gZGVncmVlcyBjb252ZXJ0ZXIuXG4gKiBAcGFyYW0gcGVyYyBwZXJjZW50YWdlXG4gKi9cbmNvbnN0IHBlcmNUb0RlZyA9IChwZXJjOiBudW1iZXIpID0+IHtcbiAgY29uc3QgbW9kID0gMzYwO1xuICByZXR1cm4gcGVyYyAqIG1vZDtcbn07XG5cbi8qKlxuICogRGVncmVlcyB0byBwZXJjZW50YWdlIGNvbnZlcnRlci5cbiAqIEBwYXJhbSBkZWcgZGVncmVlc1xuICovXG5jb25zdCBkZWdUb1JhZCA9IChkZWc6IG51bWJlcikgPT4ge1xuICBjb25zdCBtb2QgPSAxODA7XG4gIHJldHVybiAoZGVnICogTWF0aC5QSSkgLyBtb2Q7XG59O1xuXG4vKipcbiAqIFJlcGNlbnRhZ2UgdG8gcmFkaWFucyBjb252ZXJ0ZXIuXG4gKiBAcGFyYW0gcGVyYyBwZXJjZW50YWdlXG4gKi9cbmNvbnN0IHBlcmNUb1JhZCA9IChwZXJjOiBudW1iZXIpID0+IGRlZ1RvUmFkKHBlcmNUb0RlZyhwZXJjKSk7XG5cbi8qKlxuICogRHJhd3MgdGhlIGdhdWdlIGNoYXJ0IHNlY3Rpb25zLlxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlnXG4gKiBAcGFyYW0gYXJjIHRoZSBjaGFydHMncyBhcmNcbiAqIEBwYXJhbSBhcmNzIHRoZSBjaGFydCdzIGFyYyBzZWN0aW9uc1xuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0J3MgZGF0YVxuICovXG5jb25zdCBkcmF3U2VjdGlvbnMgPSAoXG4gIGNvbmZpZzogSUdhdWdlQ2hhcnRPcHRpb25zLFxuICBhcmM6IGQzLkFyYzx1bmtub3duLCBkMy5QaWVBcmNEYXR1bTxJR2F1Z2VDaGFydERhdGFOb2RlPj4sXG4gIGFyY3M6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgZDMuUGllQXJjRGF0dW08SUdhdWdlQ2hhcnREYXRhTm9kZT4sIFNWR0dFbGVtZW50LCB1bmtub3duPixcbiAgZGF0YTogSUdhdWdlQ2hhcnREYXRhTm9kZVtdLFxuKSA9PiB7XG4gIGxldCBzdGFydEF0ID0gMC43NTsgLy8gU3RhcnQgYXQgMjcwZGVnXG4gIGNvbnN0IHNlY3Rpb25QZXJjZW50YWdlID0gMSAvIGRhdGEubGVuZ3RoIC8gMjtcbiAgY29uc3QgcGFkUmFkID0gMC4wMTtcblxuICBhcmNzXG4gICAgLmFwcGVuZCgncGF0aCcpXG4gICAgLmF0dHIoJ2ZpbGwnLCBkID0+IChkLmRhdGEueSA8PSBjb25maWcudmFsdWUgPyBjb25maWcuY29sb3IgOiBjb25maWcuZGVmYXVsdENvbG9yKSlcbiAgICAuYXR0cignb3BhY2l0eScsIChkLCBpKSA9PiB7XG4gICAgICBjb25zdCB0b3RhbCA9IDEwMDtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gZGF0YS5sZW5ndGggLSAxO1xuICAgICAgcmV0dXJuICgoaSArIDEpICogc2VjdGlvbnMpIC8gdG90YWw7XG4gICAgfSlcbiAgICAuYXR0cignZCcsIGRhdHVtID0+IHtcbiAgICAgIGNvbnN0IGFyY1N0YXJ0UmFkID0gcGVyY1RvUmFkKHN0YXJ0QXQpO1xuICAgICAgY29uc3QgYXJjRW5kUmFkID0gYXJjU3RhcnRSYWQgKyBwZXJjVG9SYWQoc2VjdGlvblBlcmNlbnRhZ2UpO1xuICAgICAgc3RhcnRBdCArPSBzZWN0aW9uUGVyY2VudGFnZTtcblxuICAgICAgY29uc3Qgc3RhcnRQYWRSYWQgPSBkYXR1bS5pbmRleCA9PT0gMCA/IDAgOiBwYWRSYWQgLyAyO1xuICAgICAgY29uc3QgZW5kUGFkUmFkID0gZGF0dW0uaW5kZXggPT09IGRhdGEubGVuZ3RoID8gMCA6IHBhZFJhZCAvIDI7XG4gICAgICByZXR1cm4gYXJjLnN0YXJ0QW5nbGUoYXJjU3RhcnRSYWQgKyBzdGFydFBhZFJhZCkuZW5kQW5nbGUoYXJjRW5kUmFkIC0gZW5kUGFkUmFkKShkYXR1bSk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBndWFnZSBjaGFydCBsYWJlbHNcbiAqIEBwYXJhbSBhcmMgdGhlIGNoYXJ0cydzIGFyY1xuICogQHBhcmFtIGFyY3MgdGhlIGNoYXJ0J3MgYXJjIHNlY3Rpb25zXG4gKiBAcGFyYW0gZGF0YSB0aGUgY2hhcnQncyBkYXRhXG4gKi9cbmNvbnN0IGRyYXdMYWJlbHMgPSAoXG4gIGFyYzogZDMuQXJjPHVua25vd24sIGQzLlBpZUFyY0RhdHVtPElHYXVnZUNoYXJ0RGF0YU5vZGU+PixcbiAgYXJjczogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCBkMy5QaWVBcmNEYXR1bTxJR2F1Z2VDaGFydERhdGFOb2RlPiwgU1ZHR0VsZW1lbnQsIHVua25vd24+LFxuICBkYXRhOiBJR2F1Z2VDaGFydERhdGFOb2RlW10sXG4pID0+IHtcbiAgbGV0IHN0YXJ0QXQgPSAwLjc1OyAvLyBTdGFydCBhdCAyNzBkZWdcbiAgY29uc3Qgc2VjdGlvblBlcmNlbnRhZ2UgPSAxIC8gZGF0YS5sZW5ndGggLyAyO1xuICBjb25zdCBwYWRSYWQgPSAwLjAxO1xuICBjb25zdCB0ZXh0RHkgPSA1O1xuXG4gIGFyY3NcbiAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAuYXR0cignY2xhc3MnLCAnbGVnZW5kJylcbiAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAuYXR0cignZHknLCB0ZXh0RHkpXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGRhdHVtID0+IHtcbiAgICAgIGNvbnN0IGFyY1N0YXJ0UmFkID0gcGVyY1RvUmFkKHN0YXJ0QXQpO1xuICAgICAgY29uc3QgYXJjRW5kUmFkID0gYXJjU3RhcnRSYWQgKyBwZXJjVG9SYWQoc2VjdGlvblBlcmNlbnRhZ2UpO1xuICAgICAgc3RhcnRBdCArPSBzZWN0aW9uUGVyY2VudGFnZTtcblxuICAgICAgY29uc3Qgc3RhcnRQYWRSYWQgPSBkYXR1bS5pbmRleCA9PT0gMCA/IDAgOiBwYWRSYWQgLyAyO1xuICAgICAgY29uc3QgZW5kUGFkUmFkID0gZGF0dW0uaW5kZXggPT09IGRhdGEubGVuZ3RoID8gMCA6IHBhZFJhZCAvIDI7XG4gICAgICBjb25zdCBhID0gYXJjLnN0YXJ0QW5nbGUoYXJjU3RhcnRSYWQgKyBzdGFydFBhZFJhZCkuZW5kQW5nbGUoYXJjRW5kUmFkIC0gZW5kUGFkUmFkKTtcbiAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7YS5jZW50cm9pZChkYXR1bSl9KWA7XG4gICAgfSlcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcbiAgICAudGV4dChkID0+IGQuZGF0YS55KTtcbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIGdhdWdlIGNoYXJ0IHZhbHVlLlxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlnXG4gKiBAcGFyYW0gZyB0aGUgZ2F1Z2UgY2hhcnQgY29udGFpbmVyXG4gKiBAcGFyYW0gcmFkaXVzIHRoZSBjaGFydCByYWRpdXNcbiAqL1xuY29uc3QgZHJhd1ZhbHVlID0gKGNvbmZpZzogSUdhdWdlQ2hhcnRPcHRpb25zLCBnOiBkMy5TZWxlY3Rpb248U1ZHR0VsZW1lbnQsIHVua25vd24sIEhUTUxFbGVtZW50LCB1bmtub3duPiwgcmFkaXVzOiBudW1iZXIpID0+IHtcbiAgY29uc3QgbW9kID0gMjA7XG4gIGcuYXBwZW5kKCd0ZXh0JylcbiAgICAuYXR0cignY2xhc3MnLCAndmFsdWUnKVxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgIC5hdHRyKCdkeCcsIHJhZGl1cyAvIG1vZClcbiAgICAuYXR0cignZHknLCByYWRpdXMgLyBtb2QpXG4gICAgLnN0eWxlKCdmb250LXNpemUnLCAnMThweCcpXG4gICAgLnRleHQoKCkgPT4gYCR7Y29uZmlnLnZhbHVlfSVgKTtcbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIGdhdWdlIGNoYXJ0LlxuICogQHBhcmFtIGNvbnRhaW5lciB0aGUgY2hhcnQgY29udGFpbmVyXG4gKiBAcGFyYW0gZGF0YSB0aGUgY2hhcnQgZGF0YVxuICogQHBhcmFtIG9wdGlvbnMgdGhlIGNoYXJ0IG9wdGlvbnNcbiAqIEByZXR1cm5zIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBkcmF3R2F1Z2VDaGFydCA9IChcbiAgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcbiAgZGF0YTogSUdhdWdlQ2hhcnREYXRhTm9kZVtdLFxuICBvcHRpb25zPzogUGFydGlhbDxJR2F1Z2VDaGFydE9wdGlvbnM+LFxuKSA9PiB7XG4gIGNvbnN0IGNvbmZpZzogSUdhdWdlQ2hhcnRPcHRpb25zID0gZ2VuZXJhdGVDb25maWd1cmF0aW9uPElHYXVnZUNoYXJ0T3B0aW9ucz4oZGVmYXVsdEdhdWdlQ2hhcnRDb25maWcsIG9wdGlvbnMsIHt9KTtcblxuICBjb25zdCB7IGcgfSA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIGNvbmZpZyk7XG5cbiAgY29uc3QgZ2F1Z2UgPSBkMy5waWU8SUdhdWdlQ2hhcnREYXRhTm9kZT4oKS52YWx1ZShkYXR1bSA9PiBkYXR1bS55KTtcblxuICBjb25zdCByYWRpdXMgPSBNYXRoLm1pbihjb25maWcud2lkdGgsIGNvbmZpZy5oZWlnaHQpIC8gMjtcblxuICBjb25zdCBhcmMgPSBkMy5hcmM8ZDMuUGllQXJjRGF0dW08SUdhdWdlQ2hhcnREYXRhTm9kZT4+KCkuaW5uZXJSYWRpdXMoY29uZmlnLmlubmVyUmFkaXVzKS5vdXRlclJhZGl1cyhyYWRpdXMpO1xuXG4gIGNvbnN0IGFyY3MgPSBnXG4gICAgLnNlbGVjdEFsbCgnYXJjJylcbiAgICAuZGF0YShnYXVnZShkYXRhKSlcbiAgICAuZW50ZXIoKVxuICAgIC5hcHBlbmQoJ2cnKVxuICAgIC5hdHRyKCdjbGFzcycsICdhcmMnKVxuICAgIC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKHRoaXMsIGV2ZW50OiBNb3VzZUV2ZW50LCBkKSB7XG4gICAgICB0aGlzLnN0eWxlLm9wYWNpdHkgPSAnMC44JztcblxuICAgICAgY29uc3QgZGlzcGxheVRvb2x0aXAgPSBkLmRhdGEueSA8PSBjb25maWcudmFsdWUgJiYgY29uZmlnLnNob3dUb29sdGlwcztcblxuICAgICAgaWYgKGRpc3BsYXlUb29sdGlwKSB7XG4gICAgICAgIGNvbnN0IHRvb2x0aXBUZXh0ID0gYCR7ZC5kYXRhLmtleX06ICR7ZC5kYXRhLnl9YDtcblxuICAgICAgICBnLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2NoYXJ0LXRvb2x0aXAnKVxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXG4gICAgICAgICAgLmF0dHIoJ2R4JywgLWNvbmZpZy53aWR0aCAvICgyICogMiAqIDIpKVxuICAgICAgICAgIC5hdHRyKCdkeScsIHJhZGl1cyAvIDIgLSBjb25maWcubWFyZ2luLnRvcCAtIGNvbmZpZy5tYXJnaW4uYm90dG9tKVxuICAgICAgICAgIC50ZXh0KHRvb2x0aXBUZXh0KVxuICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbilcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAodGhpcywgZXZlbnQsIGQpIHtcbiAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICd1bnNldCc7XG4gICAgICBkMy5zZWxlY3RBbGwoJy5jaGFydC10b29sdGlwJylcbiAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbiAvIDIpXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXG4gICAgICAgIC5yZW1vdmUoKTtcbiAgICB9KTtcblxuICBkcmF3U2VjdGlvbnMoY29uZmlnLCBhcmMsIGFyY3MsIGRhdGEpO1xuXG4gIGlmIChjb25maWcuc2hvd0xhYmVscykge1xuICAgIGRyYXdMYWJlbHMoYXJjLCBhcmNzLCBkYXRhKTtcbiAgfVxuXG4gIGRyYXdWYWx1ZShjb25maWcsIGcsIHJhZGl1cyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iXX0=
|