@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 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
- <!-- pie chart -->
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/chart-examples.component.ts) of the chart examples component
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.6", 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.6", 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 }); }
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.6", ngImport: i0, type: AppBarChartComponent, decorators: [{
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.6", ngImport: i0, type: AppChartExamplesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", 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 }); }
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.6", ngImport: i0, type: AppChartExamplesComponent, decorators: [{
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.6", 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.6", 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 }); }
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.6", ngImport: i0, type: AppChartExamplesBarComponent, decorators: [{
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.6", 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.6", 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 }); }
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.6", ngImport: i0, type: AppChartExamplesForceDirectedComponent, decorators: [{
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.6", 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.6", 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 }); }
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.6", ngImport: i0, type: AppChartExamplesGaugeComponent, decorators: [{
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.6", 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.6", 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 }); }
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.6", ngImport: i0, type: AppChartExamplesLineComponent, decorators: [{
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
- return {
40
- chartTitle: 'Example pie chart',
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.6", ngImport: i0, type: AppChartExamplesPieComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
44
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", 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\"></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 }); }
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.6", ngImport: i0, type: AppChartExamplesPieComponent, decorators: [{
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtZXhhbXBsZXMtcGllLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2NvbXBvbmVudHMvY2hhcnQtZXhhbXBsZXMtcGllL2NoYXJ0LWV4YW1wbGVzLXBpZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0LWV4YW1wbGVzLXBpZS9jaGFydC1leGFtcGxlcy1waWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFJcEQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDOztPQUVHO0lBQ0gsSUFBWSxZQUFZO1FBQ3RCLE9BQTRCO1lBQzFCLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3BCLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3BCLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3JCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3JCLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBZ0JELFlBQTZCLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBZGxELGdCQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjthQUNuRCxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFNUYsb0JBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDckQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNwQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3hCLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDMUUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFFb0UsQ0FBQztJQUV2RTs7T0FFRztJQUNLLGVBQWU7UUFDckIsT0FBa0M7WUFDaEMsVUFBVSxFQUFFLG1CQUFtQjtTQUNoQyxDQUFDO0lBQ0osQ0FBQztpSUF0Q1UsNEJBQTRCO3FIQUE1Qiw0QkFBNEIsOERDZnpDLHNNQUdBOzsyRkRZYSw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgc3dpdGNoTWFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJUGllQ2hhcnREYXRhTm9kZSwgSVBpZUNoYXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGllLWNoYXJ0LmludGVyZmFjZSc7XG5cbi8qKlxuICogUGllIGNoYXJ0IGV4YW1wbGVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hhcnQtZXhhbXBsZXMtcGllJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LWV4YW1wbGVzLXBpZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0LWV4YW1wbGVzLXBpZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwQ2hhcnRFeGFtcGxlc1BpZUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBTYW1wbGUgcGllIGNoYXJ0IGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGdldCBwaWVDaGFydERhdGEoKSB7XG4gICAgcmV0dXJuIDxJUGllQ2hhcnREYXRhTm9kZVtdPltcbiAgICAgIHsga2V5OiAnb25lJywgeTogMSB9LFxuICAgICAgeyBrZXk6ICd0d28nLCB5OiAyIH0sXG4gICAgICB7IGtleTogJ3RocmVlJywgeTogMyB9LFxuICAgICAgeyBrZXk6ICdmb3VyJywgeTogNCB9LFxuICAgICAgeyBrZXk6ICdmaXZlJywgeTogNSB9LFxuICAgICAgeyBrZXk6ICdzaXgnLCB5OiA2IH0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludCQgPSB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclxuICAgIC5vYnNlcnZlKFtCcmVha3BvaW50cy5YU21hbGwsIEJyZWFrcG9pbnRzLlNtYWxsLCBCcmVha3BvaW50cy5NZWRpdW0sIEJyZWFrcG9pbnRzLkxhcmdlLCBCcmVha3BvaW50cy5YTGFyZ2VdKVxuICAgIC5waXBlKG1hcChyZXN1bHQgPT4gT2JqZWN0LmtleXMocmVzdWx0LmJyZWFrcG9pbnRzKS5maW5kKGl0ZW0gPT4gcmVzdWx0LmJyZWFrcG9pbnRzW2l0ZW1dKSA/PyAndW5rbm93bicpKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcGllQ2hhcnRDb25maWckID0gdGhpcy5icmVha3BvaW50JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gMTAwO1xuICAgICAgcmV0dXJuIHRpbWVyKHRpbWVvdXQpLnBpcGUoXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIG1hcCgoKSA9PiAoeyBkYXRhOiB0aGlzLnBpZUNoYXJ0RGF0YSwgb3B0aW9uczogdGhpcy5waWVDaGFydE9wdGlvbnMoKSB9KSksXG4gICAgICApO1xuICAgIH0pLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHt9XG5cbiAgLyoqXG4gICAqIEV4YW1wbGUgcGllIGNoYXJ0IG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHBpZUNoYXJ0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gPFBhcnRpYWw8SVBpZUNoYXJ0T3B0aW9ucz4+e1xuICAgICAgY2hhcnRUaXRsZTogJ0V4YW1wbGUgcGllIGNoYXJ0JyxcbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgKm5nSWY9XCJwaWVDaGFydENvbmZpZyQgfCBhc3luYyBhcyBjb25maWdcIj5cbiAgPGFwcC1waWUtY2hhcnQgW2NoYXJ0SWRdPVwiJ3BpZS1leGFtcGxlLTEnXCIgW2RhdGFdPVwiY29uZmlnLmRhdGFcIiBbb3B0aW9uc109XCJjb25maWcub3B0aW9uc1wiPjwvYXBwLXBpZS1jaGFydD5cbjwvZGl2PlxuIl19
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.6", 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.6", 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 }); }
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.6", ngImport: i0, type: AppChartExamplesRadaraComponent, decorators: [{
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.6", 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.6", 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 }); }
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.6", ngImport: i0, type: AppForceDirectedChartComponent, decorators: [{
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.6", 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.6", 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 }); }
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.6", ngImport: i0, type: AppGaugeChartComponent, decorators: [{
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.6", 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.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 }); }
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.6", ngImport: i0, type: AppLineChartComponent, decorators: [{
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.6", 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.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 }); }
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.6", ngImport: i0, type: AppPieChartComponent, decorators: [{
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.6", 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.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 }); }
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.6", ngImport: i0, type: AppRadarChartComponent, decorators: [{
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.6", ngImport: i0, type: AppD3ChartsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.6", ngImport: i0, type: AppD3ChartsModule, declarations: [AppGaugeChartComponent,
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.6", ngImport: i0, type: AppD3ChartsModule, imports: [CommonModule] }); }
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.6", ngImport: i0, type: AppD3ChartsModule, decorators: [{
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', '12px')
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', config.height / 2 + config.margin.top)
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F1Z2UtY2hhcnQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL3V0aWwvZ2F1Z2UtY2hhcnQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUF1QixNQUFNLENBQUMsTUFBTSxDQUFxQjtJQUMzRixVQUFVLEVBQUUsRUFBRTtJQUNkLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7SUFDWCxNQUFNLEVBQUU7UUFDTixHQUFHLEVBQUUsRUFBRTtRQUNQLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsRUFBRTtLQUNUO0lBQ0QsV0FBVyxFQUFFLEdBQUc7SUFDaEIsVUFBVSxFQUFFLElBQUk7SUFDaEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsS0FBSyxFQUFFLE9BQU87SUFDZCxZQUFZLEVBQUUsV0FBVztJQUN6QixLQUFLLEVBQUUsRUFBRTtDQUNWLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFxQyxFQUFFLE1BQTBCLEVBQUUsRUFBRTtJQUM1RixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUM7SUFFbkQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNDLE1BQU0sR0FBRyxHQUFHLEVBQUU7U0FDWCxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztTQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3RFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDNUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQixNQUFNLENBQUMsR0FBRyxHQUFHO1NBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFFckgsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNoQixPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUMvQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDaEIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFOUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxZQUFZLEdBQUcsQ0FDbkIsTUFBMEIsRUFDMUIsR0FBeUQsRUFDekQsSUFBMEYsRUFDMUYsSUFBMkIsRUFDM0IsRUFBRTtJQUNGLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLGtCQUFrQjtJQUN0QyxNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFFcEIsSUFBSTtTQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbEYsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN0QyxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLGlCQUFpQixDQUFDO1FBRTdCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDL0QsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFGLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUNqQixHQUF5RCxFQUN6RCxJQUEwRixFQUMxRixJQUEyQixFQUMzQixFQUFFO0lBQ0YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsa0JBQWtCO0lBQ3RDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztJQUNwQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFakIsSUFBSTtTQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDZCxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztTQUN2QixJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztTQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztTQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLGlCQUFpQixDQUFDO1FBRTdCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUNwRixPQUFPLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzNDLENBQUMsQ0FBQztTQUNELEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO1NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQTBCLEVBQUUsQ0FBMkQsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUM1SCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDZixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUNiLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1NBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO1NBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDeEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7U0FDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQzVCLFNBQXFDLEVBQ3JDLElBQTJCLEVBQzNCLE9BQXFDLEVBQ3JDLEVBQUU7SUFDRixNQUFNLE1BQU0sR0FBdUIscUJBQXFCLENBQXFCLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVuSCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVqRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxFQUF1QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVwRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV6RCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUF1QyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlHLE1BQU0sSUFBSSxHQUFHLENBQUM7U0FDWCxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakIsS0FBSyxFQUFFO1NBQ1AsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1NBQ3BCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsVUFBZ0IsS0FBaUIsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUUzQixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFFdkUsSUFBSSxjQUFjLEVBQUU7WUFDbEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRWpELENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNiLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDO2lCQUM5QixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztpQkFDbkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUN2QyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7aUJBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUM7aUJBQ2pCLFVBQVUsRUFBRTtpQkFDWixRQUFRLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO2lCQUNuQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFnQixLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDN0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQzthQUMzQixVQUFVLEVBQUU7YUFDWixRQUFRLENBQUMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQzthQUN2QyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQzthQUNuQixNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0lBRUwsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXRDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNyQixVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM3QjtJQUVELFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTdCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcblxuaW1wb3J0IHsgSUdhdWdlQ2hhcnREYXRhTm9kZSwgSUdhdWdlQ2hhcnRPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9nYXVnZS1jaGFydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2VuZXJhdGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnV0aWwnO1xuXG4vKipcbiAqIFRoZSBnYXVnZSBjaGFydCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0R2F1Z2VDaGFydENvbmZpZzogSUdhdWdlQ2hhcnRPcHRpb25zID0gT2JqZWN0LmZyZWV6ZSg8SUdhdWdlQ2hhcnRPcHRpb25zPntcbiAgY2hhcnRUaXRsZTogJycsXG4gIHdpZHRoOiA2MDAsXG4gIGhlaWdodDogNjAwLFxuICBtYXJnaW46IHtcbiAgICB0b3A6IDIwLFxuICAgIHJpZ2h0OiAyMCxcbiAgICBib3R0b206IDIwLFxuICAgIGxlZnQ6IDIwLFxuICB9LFxuICBpbm5lclJhZGl1czogMTAwLCAvLyBpbmNyZWFzZSBpbm5lciByYWRpdXMgdG8gcmVkdWNlIHRoaWNrbmVzcyBvZiB0aGUgY2hhcnRcbiAgc2hvd0xhYmVsczogdHJ1ZSxcbiAgc2hvd1Rvb2x0aXBzOiB0cnVlLFxuICBsYWJlbFJhZGl1c01vZGlmaWVyOiA1MCxcbiAgbGFiZWxUZXh0V3JhcFdpZHRoOiA2MCxcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiAxMDAwLFxuICBjb2xvcjogJ2dyZWVuJyxcbiAgZGVmYXVsdENvbG9yOiAnbGlnaHRncmF5JyxcbiAgdmFsdWU6IDEwLFxufSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnRhaW5lciBmb3IgdGhlIGdhdWdlIGNoYXJ0LlxuICogQHBhcmFtIGNvbnRhaW5lciB0aGUgY2hhcnQgY29udGFpbmVyXG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyB0aGUgb2JqZWN0IHdpdGggdGhlIHN2ZyBlbGVtZW50IGFuZCB0aGUgZyBlbGVtZW50XG4gKi9cbmNvbnN0IGNyZWF0ZUNvbnRhaW5lciA9IChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LCBjb25maWc6IElHYXVnZUNoYXJ0T3B0aW9ucykgPT4ge1xuICBjb25zdCBpZCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmlkID8/ICdnYXVnZS0wJztcblxuICBkMy5zZWxlY3QoYCMke2lkfWApLnNlbGVjdCgnc3ZnJykucmVtb3ZlKCk7XG4gIGNvbnN0IHN2ZyA9IGQzXG4gICAgLnNlbGVjdChgIyR7aWR9YClcbiAgICAuYXBwZW5kKCdzdmcnKVxuICAgIC5hdHRyKCd3aWR0aCcsIGNvbmZpZy53aWR0aCArIGNvbmZpZy5tYXJnaW4ubGVmdCArIGNvbmZpZy5tYXJnaW4ucmlnaHQpXG4gICAgLmF0dHIoJ2hlaWdodCcsIGNvbmZpZy5oZWlnaHQgLyAyICsgY29uZmlnLm1hcmdpbi50b3AgKyBjb25maWcubWFyZ2luLmJvdHRvbSlcbiAgICAuYXR0cignY2xhc3MnLCBpZCk7XG4gIGNvbnN0IGcgPSBzdmdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2NvbmZpZy53aWR0aCAvIDIgKyBjb25maWcubWFyZ2luLmxlZnR9LCR7Y29uZmlnLmhlaWdodCAvIDIgKyBjb25maWcubWFyZ2luLnRvcH0pYCk7XG5cbiAgcmV0dXJuIHsgc3ZnLCBnIH07XG59O1xuXG4vKipcbiAqIFBlcmNlbnRhZ2UgdG8gZGVncmVlcyBjb252ZXJ0ZXIuXG4gKiBAcGFyYW0gcGVyYyBwZXJjZW50YWdlXG4gKi9cbmNvbnN0IHBlcmNUb0RlZyA9IChwZXJjOiBudW1iZXIpID0+IHtcbiAgY29uc3QgbW9kID0gMzYwO1xuICByZXR1cm4gcGVyYyAqIG1vZDtcbn07XG5cbi8qKlxuICogRGVncmVlcyB0byBwZXJjZW50YWdlIGNvbnZlcnRlci5cbiAqIEBwYXJhbSBkZWcgZGVncmVlc1xuICovXG5jb25zdCBkZWdUb1JhZCA9IChkZWc6IG51bWJlcikgPT4ge1xuICBjb25zdCBtb2QgPSAxODA7XG4gIHJldHVybiAoZGVnICogTWF0aC5QSSkgLyBtb2Q7XG59O1xuXG4vKipcbiAqIFJlcGNlbnRhZ2UgdG8gcmFkaWFucyBjb252ZXJ0ZXIuXG4gKiBAcGFyYW0gcGVyYyBwZXJjZW50YWdlXG4gKi9cbmNvbnN0IHBlcmNUb1JhZCA9IChwZXJjOiBudW1iZXIpID0+IGRlZ1RvUmFkKHBlcmNUb0RlZyhwZXJjKSk7XG5cbi8qKlxuICogRHJhd3MgdGhlIGdhdWdlIGNoYXJ0IHNlY3Rpb25zLlxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlnXG4gKiBAcGFyYW0gYXJjIHRoZSBjaGFydHMncyBhcmNcbiAqIEBwYXJhbSBhcmNzIHRoZSBjaGFydCdzIGFyYyBzZWN0aW9uc1xuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0J3MgZGF0YVxuICovXG5jb25zdCBkcmF3U2VjdGlvbnMgPSAoXG4gIGNvbmZpZzogSUdhdWdlQ2hhcnRPcHRpb25zLFxuICBhcmM6IGQzLkFyYzx1bmtub3duLCBkMy5QaWVBcmNEYXR1bTxJR2F1Z2VDaGFydERhdGFOb2RlPj4sXG4gIGFyY3M6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgZDMuUGllQXJjRGF0dW08SUdhdWdlQ2hhcnREYXRhTm9kZT4sIFNWR0dFbGVtZW50LCB1bmtub3duPixcbiAgZGF0YTogSUdhdWdlQ2hhcnREYXRhTm9kZVtdLFxuKSA9PiB7XG4gIGxldCBzdGFydEF0ID0gMC43NTsgLy8gU3RhcnQgYXQgMjcwZGVnXG4gIGNvbnN0IHNlY3Rpb25QZXJjZW50YWdlID0gMSAvIGRhdGEubGVuZ3RoIC8gMjtcbiAgY29uc3QgcGFkUmFkID0gMC4wMTtcblxuICBhcmNzXG4gICAgLmFwcGVuZCgncGF0aCcpXG4gICAgLmF0dHIoJ2ZpbGwnLCBkID0+IChkLmRhdGEueSA8PSBjb25maWcudmFsdWUgPyBjb25maWcuY29sb3IgOiBjb25maWcuZGVmYXVsdENvbG9yKSlcbiAgICAuYXR0cignb3BhY2l0eScsIChkLCBpKSA9PiB7XG4gICAgICBjb25zdCB0b3RhbCA9IDEwMDtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gZGF0YS5sZW5ndGggLSAxO1xuICAgICAgcmV0dXJuICgoaSArIDEpICogc2VjdGlvbnMpIC8gdG90YWw7XG4gICAgfSlcbiAgICAuYXR0cignZCcsIGRhdHVtID0+IHtcbiAgICAgIGNvbnN0IGFyY1N0YXJ0UmFkID0gcGVyY1RvUmFkKHN0YXJ0QXQpO1xuICAgICAgY29uc3QgYXJjRW5kUmFkID0gYXJjU3RhcnRSYWQgKyBwZXJjVG9SYWQoc2VjdGlvblBlcmNlbnRhZ2UpO1xuICAgICAgc3RhcnRBdCArPSBzZWN0aW9uUGVyY2VudGFnZTtcblxuICAgICAgY29uc3Qgc3RhcnRQYWRSYWQgPSBkYXR1bS5pbmRleCA9PT0gMCA/IDAgOiBwYWRSYWQgLyAyO1xuICAgICAgY29uc3QgZW5kUGFkUmFkID0gZGF0dW0uaW5kZXggPT09IGRhdGEubGVuZ3RoID8gMCA6IHBhZFJhZCAvIDI7XG4gICAgICByZXR1cm4gYXJjLnN0YXJ0QW5nbGUoYXJjU3RhcnRSYWQgKyBzdGFydFBhZFJhZCkuZW5kQW5nbGUoYXJjRW5kUmFkIC0gZW5kUGFkUmFkKShkYXR1bSk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBndWFnZSBjaGFydCBsYWJlbHNcbiAqIEBwYXJhbSBhcmMgdGhlIGNoYXJ0cydzIGFyY1xuICogQHBhcmFtIGFyY3MgdGhlIGNoYXJ0J3MgYXJjIHNlY3Rpb25zXG4gKiBAcGFyYW0gZGF0YSB0aGUgY2hhcnQncyBkYXRhXG4gKi9cbmNvbnN0IGRyYXdMYWJlbHMgPSAoXG4gIGFyYzogZDMuQXJjPHVua25vd24sIGQzLlBpZUFyY0RhdHVtPElHYXVnZUNoYXJ0RGF0YU5vZGU+PixcbiAgYXJjczogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCBkMy5QaWVBcmNEYXR1bTxJR2F1Z2VDaGFydERhdGFOb2RlPiwgU1ZHR0VsZW1lbnQsIHVua25vd24+LFxuICBkYXRhOiBJR2F1Z2VDaGFydERhdGFOb2RlW10sXG4pID0+IHtcbiAgbGV0IHN0YXJ0QXQgPSAwLjc1OyAvLyBTdGFydCBhdCAyNzBkZWdcbiAgY29uc3Qgc2VjdGlvblBlcmNlbnRhZ2UgPSAxIC8gZGF0YS5sZW5ndGggLyAyO1xuICBjb25zdCBwYWRSYWQgPSAwLjAxO1xuICBjb25zdCB0ZXh0RHkgPSA1O1xuXG4gIGFyY3NcbiAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAuYXR0cignY2xhc3MnLCAnbGVnZW5kJylcbiAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAuYXR0cignZHknLCB0ZXh0RHkpXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGRhdHVtID0+IHtcbiAgICAgIGNvbnN0IGFyY1N0YXJ0UmFkID0gcGVyY1RvUmFkKHN0YXJ0QXQpO1xuICAgICAgY29uc3QgYXJjRW5kUmFkID0gYXJjU3RhcnRSYWQgKyBwZXJjVG9SYWQoc2VjdGlvblBlcmNlbnRhZ2UpO1xuICAgICAgc3RhcnRBdCArPSBzZWN0aW9uUGVyY2VudGFnZTtcblxuICAgICAgY29uc3Qgc3RhcnRQYWRSYWQgPSBkYXR1bS5pbmRleCA9PT0gMCA/IDAgOiBwYWRSYWQgLyAyO1xuICAgICAgY29uc3QgZW5kUGFkUmFkID0gZGF0dW0uaW5kZXggPT09IGRhdGEubGVuZ3RoID8gMCA6IHBhZFJhZCAvIDI7XG4gICAgICBjb25zdCBhID0gYXJjLnN0YXJ0QW5nbGUoYXJjU3RhcnRSYWQgKyBzdGFydFBhZFJhZCkuZW5kQW5nbGUoYXJjRW5kUmFkIC0gZW5kUGFkUmFkKTtcbiAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7YS5jZW50cm9pZChkYXR1bSl9KWA7XG4gICAgfSlcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcbiAgICAudGV4dChkID0+IGQuZGF0YS55KTtcbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIGdhdWdlIGNoYXJ0IHZhbHVlLlxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlnXG4gKiBAcGFyYW0gZyB0aGUgZ2F1Z2UgY2hhcnQgY29udGFpbmVyXG4gKiBAcGFyYW0gcmFkaXVzIHRoZSBjaGFydCByYWRpdXNcbiAqL1xuY29uc3QgZHJhd1ZhbHVlID0gKGNvbmZpZzogSUdhdWdlQ2hhcnRPcHRpb25zLCBnOiBkMy5TZWxlY3Rpb248U1ZHR0VsZW1lbnQsIHVua25vd24sIEhUTUxFbGVtZW50LCB1bmtub3duPiwgcmFkaXVzOiBudW1iZXIpID0+IHtcbiAgY29uc3QgbW9kID0gMjA7XG4gIGcuYXBwZW5kKCd0ZXh0JylcbiAgICAuYXR0cignY2xhc3MnLCAndmFsdWUnKVxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgIC5hdHRyKCdkeCcsIHJhZGl1cyAvIG1vZClcbiAgICAuYXR0cignZHknLCByYWRpdXMgLyBtb2QpXG4gICAgLnN0eWxlKCdmb250LXNpemUnLCAnMThweCcpXG4gICAgLnRleHQoKCkgPT4gYCR7Y29uZmlnLnZhbHVlfSVgKTtcbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIGdhdWdlIGNoYXJ0LlxuICogQHBhcmFtIGNvbnRhaW5lciB0aGUgY2hhcnQgY29udGFpbmVyXG4gKiBAcGFyYW0gZGF0YSB0aGUgY2hhcnQgZGF0YVxuICogQHBhcmFtIG9wdGlvbnMgdGhlIGNoYXJ0IG9wdGlvbnNcbiAqIEByZXR1cm5zIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBkcmF3R2F1Z2VDaGFydCA9IChcbiAgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcbiAgZGF0YTogSUdhdWdlQ2hhcnREYXRhTm9kZVtdLFxuICBvcHRpb25zPzogUGFydGlhbDxJR2F1Z2VDaGFydE9wdGlvbnM+LFxuKSA9PiB7XG4gIGNvbnN0IGNvbmZpZzogSUdhdWdlQ2hhcnRPcHRpb25zID0gZ2VuZXJhdGVDb25maWd1cmF0aW9uPElHYXVnZUNoYXJ0T3B0aW9ucz4oZGVmYXVsdEdhdWdlQ2hhcnRDb25maWcsIG9wdGlvbnMsIHt9KTtcblxuICBjb25zdCB7IGcgfSA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIGNvbmZpZyk7XG5cbiAgY29uc3QgZ2F1Z2UgPSBkMy5waWU8SUdhdWdlQ2hhcnREYXRhTm9kZT4oKS52YWx1ZShkYXR1bSA9PiBkYXR1bS55KTtcblxuICBjb25zdCByYWRpdXMgPSBNYXRoLm1pbihjb25maWcud2lkdGgsIGNvbmZpZy5oZWlnaHQpIC8gMjtcblxuICBjb25zdCBhcmMgPSBkMy5hcmM8ZDMuUGllQXJjRGF0dW08SUdhdWdlQ2hhcnREYXRhTm9kZT4+KCkuaW5uZXJSYWRpdXMoY29uZmlnLmlubmVyUmFkaXVzKS5vdXRlclJhZGl1cyhyYWRpdXMpO1xuXG4gIGNvbnN0IGFyY3MgPSBnXG4gICAgLnNlbGVjdEFsbCgnYXJjJylcbiAgICAuZGF0YShnYXVnZShkYXRhKSlcbiAgICAuZW50ZXIoKVxuICAgIC5hcHBlbmQoJ2cnKVxuICAgIC5hdHRyKCdjbGFzcycsICdhcmMnKVxuICAgIC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKHRoaXMsIGV2ZW50OiBNb3VzZUV2ZW50LCBkKSB7XG4gICAgICB0aGlzLnN0eWxlLm9wYWNpdHkgPSAnMC44JztcblxuICAgICAgY29uc3QgZGlzcGxheVRvb2x0aXAgPSBkLmRhdGEueSA8PSBjb25maWcudmFsdWUgJiYgY29uZmlnLnNob3dUb29sdGlwcztcblxuICAgICAgaWYgKGRpc3BsYXlUb29sdGlwKSB7XG4gICAgICAgIGNvbnN0IHRvb2x0aXBUZXh0ID0gYCR7ZC5kYXRhLmtleX06ICR7ZC5kYXRhLnl9YDtcblxuICAgICAgICBnLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2NoYXJ0LXRvb2x0aXAnKVxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXG4gICAgICAgICAgLmF0dHIoJ2R4JywgLWNvbmZpZy53aWR0aCAvICgyICogMiAqIDIpKVxuICAgICAgICAgIC5hdHRyKCdkeScsIHJhZGl1cyAvIDIgLSBjb25maWcubWFyZ2luLnRvcCAtIGNvbmZpZy5tYXJnaW4uYm90dG9tKVxuICAgICAgICAgIC50ZXh0KHRvb2x0aXBUZXh0KVxuICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbilcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAodGhpcywgZXZlbnQsIGQpIHtcbiAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICd1bnNldCc7XG4gICAgICBkMy5zZWxlY3RBbGwoJy5jaGFydC10b29sdGlwJylcbiAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbiAvIDIpXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXG4gICAgICAgIC5yZW1vdmUoKTtcbiAgICB9KTtcblxuICBkcmF3U2VjdGlvbnMoY29uZmlnLCBhcmMsIGFyY3MsIGRhdGEpO1xuXG4gIGlmIChjb25maWcuc2hvd0xhYmVscykge1xuICAgIGRyYXdMYWJlbHMoYXJjLCBhcmNzLCBkYXRhKTtcbiAgfVxuXG4gIGRyYXdWYWx1ZShjb25maWcsIGcsIHJhZGl1cyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iXX0=