@tetacom/svg-charts 1.6.4 → 1.6.5
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.
|
@@ -168,7 +168,7 @@ export class ChartContainerComponent {
|
|
|
168
168
|
return item.name?.length ? item.name : index;
|
|
169
169
|
}
|
|
170
170
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ChartContainerComponent, deps: [{ token: i1.ChartService }, { token: i2.ScaleService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
171
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: ChartContainerComponent, isStandalone: true, selector: "teta-chart-container", ngImport: i0, template: "@if ({
|
|
171
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: ChartContainerComponent, isStandalone: true, selector: "teta-chart-container", ngImport: i0, template: "@if ({\n size: size | async, config: config | async, scales: scales | async, plotBands: plotBands | async, visibleRect:\n visibleRect | async\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0 &&\n item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible &&\n data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate(' + data.visibleRect.x + 'px, ' + data.visibleRect.y + 'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track $index) {\n <g\n teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"\n ></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) {\n @if (series.visible) {\n <g teta-series-host [config]=\"data.config\" [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track $index) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"\n ></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) {\n @for (plotLine of axis.plotLines; track $index) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"\n ></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"], dependencies: [{ kind: "component", type: TooltipComponent, selector: "teta-tooltip", inputs: ["size", "config"] }, { kind: "directive", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: ["config", "axis", "size"] }, { kind: "component", type: XAxisComponent, selector: "[teta-x-axis]", inputs: ["axis", "size"] }, { kind: "component", type: YAxisComponent, selector: "[teta-y-axis]", inputs: ["axis", "size"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: PlotBandComponent, selector: "[teta-plot-band]", inputs: ["plotBand", "axis", "scale", "size"] }, { kind: "component", type: GridlinesComponent, selector: "[teta-gridlines]", inputs: ["size"] }, { kind: "component", type: SeriesHostComponent, selector: "[teta-series-host]", inputs: ["config", "series"] }, { kind: "component", type: PlotlineComponent, selector: "[teta-plot-line]", inputs: ["plotLine", "size", "axis", "scale"] }, { kind: "component", type: AnnotationComponent, selector: "[teta-annotation]", inputs: ["visibleRect", "annotation"] }, { kind: "component", type: CrosshairComponent, selector: "[teta-crosshair]", inputs: ["size"] }, { kind: "directive", type: BrushableDirective, selector: "[tetaBrushable]", inputs: ["config", "axis"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
172
172
|
}
|
|
173
173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ChartContainerComponent, decorators: [{
|
|
174
174
|
type: Component,
|
|
@@ -186,6 +186,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
|
|
|
186
186
|
AnnotationComponent,
|
|
187
187
|
CrosshairComponent,
|
|
188
188
|
BrushableDirective,
|
|
189
|
-
], template: "@if ({
|
|
189
|
+
], template: "@if ({\n size: size | async, config: config | async, scales: scales | async, plotBands: plotBands | async, visibleRect:\n visibleRect | async\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0 &&\n item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible &&\n data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate(' + data.visibleRect.x + 'px, ' + data.visibleRect.y + 'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track $index) {\n <g\n teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"\n ></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) {\n @if (series.visible) {\n <g teta-series-host [config]=\"data.config\" [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track $index) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"\n ></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) {\n @for (plotLine of axis.plotLines; track $index) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"\n ></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"] }]
|
|
190
190
|
}], ctorParameters: () => [{ type: i1.ChartService }, { type: i2.ScaleService }, { type: i0.ElementRef }, { type: i0.NgZone }] });
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFD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Q2IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBdUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7OEdBaE5VLHVCQUF1QjtrR0FBdkIsdUJBQXVCLGdGQ3ZEcEMsd3hKQTRIQSxxUERwRkksZ0JBQWdCLHFGQUNoQixpQkFBaUIsK0ZBQ2pCLGNBQWMsb0ZBQ2QsY0FBYywrRUFDZCxTQUFTLHlDQUNULFlBQVksaURBQ1osaUJBQWlCLDRHQUNqQixrQkFBa0IsK0VBQ2xCLG1CQUFtQiw2RkFDbkIsaUJBQWlCLDRHQUNqQixtQkFBbUIscUdBQ25CLGtCQUFrQiwrRUFDbEIsa0JBQWtCOzsyRkFHVCx1QkFBdUI7a0JBdEJuQyxTQUFTOytCQUNFLHNCQUFzQixjQUdwQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3FCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvYnNlcnZlT24sIHNoYXJlUmVwbGF5LCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBeGlzIH0gZnJvbSAnLi4vY29yZS9heGlzL2F4aXMnO1xuaW1wb3J0IHsgQmFzZVBvaW50IH0gZnJvbSAnLi4vbW9kZWwvYmFzZS1wb2ludCc7XG5pbXBvcnQgeyBBeGlzT3JpZW50YXRpb24gfSBmcm9tICcuLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuaW1wb3J0IHsgQnJ1c2hUeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS9icnVzaC10eXBlJztcbmltcG9ydCB7IFpvb21UeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLXR5cGUnO1xuaW1wb3J0IHsgSUNoYXJ0Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHsgSVNjYWxlc01hcCB9IGZyb20gJy4uL21vZGVsL2ktc2NhbGVzLW1hcCc7XG5pbXBvcnQgeyBQbG90QmFuZCB9IGZyb20gJy4uL21vZGVsL3Bsb3QtYmFuZCc7XG5pbXBvcnQgeyBTZXJpZXMgfSBmcm9tICcuLi9tb2RlbC9zZXJpZXMnO1xuaW1wb3J0IHsgQ2hhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7IFhBeGlzQ29tcG9uZW50IH0gZnJvbSAnLi94LWF4aXMveC1heGlzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBab29tYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvem9vbWFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFlBeGlzQ29tcG9uZW50IH0gZnJvbSAnLi95LWF4aXMveS1heGlzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEtleVZhbHVlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQbG90QmFuZENvbXBvbmVudCB9IGZyb20gJy4vcGxvdGJhbmQvcGxvdC1iYW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkbGluZXNDb21wb25lbnQgfSBmcm9tICcuL2dyaWRsaW5lcy9ncmlkbGluZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNlcmllc0hvc3RDb21wb25lbnQgfSBmcm9tICcuL3Nlcmllcy1ob3N0L3Nlcmllcy1ob3N0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbG90bGluZUNvbXBvbmVudCB9IGZyb20gJy4vcGxvdGxpbmUvcGxvdGxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IEFubm90YXRpb25Db21wb25lbnQgfSBmcm9tICcuL2Fubm90YXRpb24vYW5ub3RhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3Jvc3NoYWlyQ29tcG9uZW50IH0gZnJvbSAnLi9jcm9zc2hhaXIvY3Jvc3NoYWlyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcnVzaGFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2JydXNoYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGV0YVpvbmVGdWxsIH0gZnJvbSAnLi4vLi4vb2JzZXJ2YWJsZS96b25lT2JzZXJ2YWJsZSc7XG5cbnR5cGUgT3Bwb3NpdGUgPSBib29sZWFuO1xudHlwZSBEaXNwbGF5UGxvdEJhbmQgPSB7XG4gIGF4aXM6IEF4aXM7XG4gIHBsb3RCYW5kOiBQbG90QmFuZDtcbn07XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLWNoYXJ0LWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUb29sdGlwQ29tcG9uZW50LFxuICAgIFpvb21hYmxlRGlyZWN0aXZlLFxuICAgIFhBeGlzQ29tcG9uZW50LFxuICAgIFlBeGlzQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgUGxvdEJhbmRDb21wb25lbnQsXG4gICAgR3JpZGxpbmVzQ29tcG9uZW50LFxuICAgIFNlcmllc0hvc3RDb21wb25lbnQsXG4gICAgUGxvdGxpbmVDb21wb25lbnQsXG4gICAgQW5ub3RhdGlvbkNvbXBvbmVudCxcbiAgICBDcm9zc2hhaXJDb21wb25lbnQsXG4gICAgQnJ1c2hhYmxlRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIGNvbmZpZzogT2JzZXJ2YWJsZTxJQ2hhcnRDb25maWc+O1xuICBzY2FsZXM6IE9ic2VydmFibGU8SVNjYWxlc01hcD47XG4gIHNpemU6IE9ic2VydmFibGU8RE9NUmVjdD47XG4gIHZpc2libGVSZWN0OiBPYnNlcnZhYmxlPGFueT47XG4gIGJydXNoU2NhbGU6IE9ic2VydmFibGU8YW55PjtcbiAgem9vbVR5cGUgPSBab29tVHlwZTtcbiAgcGxvdEJhbmRzOiBPYnNlcnZhYmxlPERpc3BsYXlQbG90QmFuZFtdPjtcblxuICBwcml2YXRlIF9vYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgZmlsdGVyUG9zaXRpb25NYXAgPSBuZXcgTWFwPE9wcG9zaXRlLCAoYXhpczogQXhpcykgPT4gKF86IEF4aXMpID0+IGJvb2xlYW4+KClcbiAgICAuc2V0KHRydWUsIChheGlzKSA9PiAoXzogQXhpcykgPT4gXy5vcHRpb25zLm9wcG9zaXRlICYmIF8ub3B0aW9ucy52aXNpYmxlICYmIGF4aXMuaW5kZXggPD0gXy5pbmRleClcbiAgICAuc2V0KGZhbHNlLCAoYXhpcykgPT4gKF86IEF4aXMpID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSAmJiBfLmluZGV4IDw9IGF4aXMuaW5kZXgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3NjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfem9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5fc3ZjLmNvbmZpZztcbiAgICB0aGlzLnNpemUgPSB0aGlzLl9zdmMuc2l6ZTtcblxuICAgIHRoaXMuc2NhbGVzID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSxcbiAgICAgIHRldGFab25lRnVsbCh0aGlzLl96b25lKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnBsb3RCYW5kcyA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZmlnLCB0aGlzLnNjYWxlc10pLnBpcGUoXG4gICAgICBtYXAoKFtjb25maWcsIHNjYWxlc10pID0+IHtcbiAgICAgICAgY29uc3QgYmFuZHM6IERpc3BsYXlQbG90QmFuZFtdID0gW107XG4gICAgICAgIGNvbmZpZy54QXhpcz8uZm9yRWFjaCgoYXhpcywgaW5kZXgpID0+IHtcbiAgICAgICAgICBheGlzLnBsb3RCYW5kcz8uZm9yRWFjaCgoYmFuZCkgPT4ge1xuICAgICAgICAgICAgYmFuZHMucHVzaCh7XG4gICAgICAgICAgICAgIHBsb3RCYW5kOiBiYW5kLFxuICAgICAgICAgICAgICBheGlzOiBzY2FsZXMueC5nZXQoaW5kZXgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25maWcueUF4aXM/LmZvckVhY2goKGF4aXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgYXhpcy5wbG90QmFuZHM/LmZvckVhY2goKGJhbmQpID0+IHtcbiAgICAgICAgICAgIGJhbmRzLnB1c2goe1xuICAgICAgICAgICAgICBwbG90QmFuZDogYmFuZCxcbiAgICAgICAgICAgICAgYXhpczogc2NhbGVzLnkuZ2V0KGluZGV4KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYmFuZHMuc29ydCgoYSwgYikgPT4gYS5wbG90QmFuZC5vcmRlciAtIGIucGxvdEJhbmQub3JkZXIpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5icnVzaFNjYWxlID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb25maWcpLFxuICAgICAgbWFwKChkYXRhOiBbSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbeyB4LCB5IH0sIGNvbmZpZ10gPSBkYXRhO1xuXG4gICAgICAgIHJldHVybiBjb25maWcuYnJ1c2g/LnR5cGUgPT09IEJydXNoVHlwZS54IHx8IGNvbmZpZz8uem9vbT8udHlwZSA9PT0gWm9vbVR5cGUueFxuICAgICAgICAgID8geC5nZXQoMCk/LnNjYWxlXG4gICAgICAgICAgOiB5LmdldCgwKT8uc2NhbGU7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnZpc2libGVSZWN0ID0gY29tYmluZUxhdGVzdChbdGhpcy5zaXplLCB0aGlzLnNjYWxlcywgdGhpcy5jb25maWddKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBbRE9NUmVjdCwgSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbc2l6ZSwgeyB4LCB5IH0sIGNvbmZpZ10gPSBkYXRhO1xuICAgICAgICBjb25zdCB5QXhlc0FycmF5ID0gQXJyYXkuZnJvbSh5LnZhbHVlcygpKTtcbiAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB5QXhlc0FycmF5LmZpbHRlcigoXykgPT4gXy5vcHRpb25zLm9wcG9zaXRlICE9PSB0cnVlICYmIF8ub3B0aW9ucy52aXNpYmxlKS5yZWR1Y2UodGhpcy5zdW1TaXplLCAwKTtcblxuICAgICAgICBjb25zdCByaWdodCA9IHlBeGVzQXJyYXkuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgJiYgXy5vcHRpb25zLnZpc2libGUpLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHhBeGVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgIT09IHRydWUgJiYgXy5vcHRpb25zLnZpc2libGUpXG4gICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IHRvcCA9IHhBeGVzQXJyYXkuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgJiYgXy5vcHRpb25zLnZpc2libGUpLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IGxlZnQgKyBjb25maWcuYm91bmRzPy5sZWZ0LFxuICAgICAgICAgIHk6IHRvcCArIGNvbmZpZy5ib3VuZHM/LnRvcCxcbiAgICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCAtIGxlZnQgLSByaWdodCAtIGNvbmZpZy5ib3VuZHM/LmxlZnQgLSBjb25maWcuYm91bmRzPy5yaWdodCxcbiAgICAgICAgICBoZWlnaHQ6IHNpemUuaGVpZ2h0IC0gdG9wIC0gYm90dG9tIC0gY29uZmlnLmJvdW5kcz8udG9wIC0gY29uZmlnLmJvdW5kcz8uYm90dG9tLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICB0ZXRhWm9uZUZ1bGwodGhpcy5fem9uZSksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbnRyaWVzKSB8fFxuICAgICAgICAgICFlbnRyaWVzLmxlbmd0aCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3Qud2lkdGggPD0gMCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3QuaGVpZ2h0IDw9IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N2Yy5zZXRTaXplKGVudHJpZXNbMF0uY29udGVudFJlY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdW1TaXplID0gKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZTtcblxuICBnZXRUcmFuc2xhdGUoYXhpcz86IEF4aXMsIHNpemU/OiBET01SZWN0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zY2FsZXMucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuY29uZmlnKSxcbiAgICAgIG1hcCgoZGF0YTogW0lTY2FsZXNNYXAsIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW3sgeCwgeSB9LCBjb25maWddID0gZGF0YTtcbiAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgIGNvbnN0IHlBeGVzQXJyYXkgPSBBcnJheS5mcm9tKHkudmFsdWVzKCkpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlRmlsdGVyID0gdGhpcy5maWx0ZXJQb3NpdGlvbk1hcC5nZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IG5vbk9wcG9zaXRlRmlsdGVyID0gdGhpcy5maWx0ZXJQb3NpdGlvbk1hcC5nZXQoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlT2Zmc2V0WSA9IHlBeGVzQXJyYXkuZmlsdGVyKG9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcbiAgICAgICAgY29uc3Qgbm9uT3Bwb3NpdGVPZmZzZXRZID0geUF4ZXNBcnJheS5maWx0ZXIobm9uT3Bwb3NpdGVGaWx0ZXIoYXhpcykpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlT2Zmc2V0WCA9IHhBeGVzQXJyYXkuZmlsdGVyKG9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcbiAgICAgICAgY29uc3Qgbm9uT3Bwb3NpdGVPZmZzZXRYID0geEF4ZXNBcnJheS5maWx0ZXIobm9uT3Bwb3NpdGVGaWx0ZXIoYXhpcykpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlVHJhbnNsYXRlWSA9IG9wcG9zaXRlT2Zmc2V0WS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ucmlnaHQpO1xuICAgICAgICBjb25zdCBub25PcHBpc3RlVHJhbnNsYXRlWSA9IG5vbk9wcG9zaXRlT2Zmc2V0WS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ubGVmdCk7XG5cbiAgICAgICAgY29uc3Qgb3Bwb3NpdGVUcmFuc2xhdGVYID0gb3Bwb3NpdGVPZmZzZXRYLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLCBjb25maWcuYm91bmRzPy50b3ApO1xuXG4gICAgICAgIGNvbnN0IG5vbk9wcGlzdGVUcmFuc2xhdGVYID0gbm9uT3Bwb3NpdGVPZmZzZXRYLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLFxuICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmJvdHRvbVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGxlZnQgPSB5QXhlc0FycmF5XG4gICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zLnZpc2libGUgJiYgXy5vcHRpb25zLm9wcG9zaXRlICE9PSB0cnVlKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ubGVmdCk7XG5cbiAgICAgICAgY29uc3QgdG9wID0geEF4ZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy52aXNpYmxlICYmIF8ub3B0aW9ucy5vcHBvc2l0ZSA9PT0gdHJ1ZSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsIGNvbmZpZy5ib3VuZHM/LnRvcCk7XG5cbiAgICAgICAgaWYgKGF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi54KSB7XG4gICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtsZWZ0fSwgJHtcbiAgICAgICAgICAgIGF4aXMub3B0aW9ucy5vcHBvc2l0ZSA/IG9wcG9zaXRlVHJhbnNsYXRlWCA6IHNpemUuaGVpZ2h0IC0gbm9uT3BwaXN0ZVRyYW5zbGF0ZVhcbiAgICAgICAgICB9KWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkpIHtcbiAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke2F4aXMub3B0aW9ucy5vcHBvc2l0ZSA/IHNpemUud2lkdGggLSBvcHBvc2l0ZVRyYW5zbGF0ZVkgOiBub25PcHBpc3RlVHJhbnNsYXRlWX0sICR7dG9wfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwgMCknO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHhTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+LCB5U2NhbGVzOiBNYXA8bnVtYmVyLCBBeGlzPikge1xuICAgIGNvbnN0IHggPSB4U2NhbGVzLmdldCgwKT8uc2NhbGU7XG4gICAgY29uc3QgeSA9IHlTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICB0aGlzLl9zdmMuZW1pdENoYXJ0Q2xpY2soe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHg6IHguaW52ZXJ0KGV2ZW50Lm9mZnNldFgpLFxuICAgICAgICB5OiB5LmludmVydChldmVudC5vZmZzZXRZKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgeFNjYWxlczogTWFwPG51bWJlciwgQXhpcz4sIHlTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+KSB7XG4gICAgY29uc3QgeCA9IHhTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICBjb25zdCB5ID0geVNjYWxlcy5nZXQoMCk/LnNjYWxlO1xuICAgIHRoaXMuX3N2Yy5lbWl0Q2hhcnRDb250ZXh0TWVudSh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgeDogeC5pbnZlcnQoZXZlbnQub2Zmc2V0WCksXG4gICAgICAgIHk6IHkuaW52ZXJ0KGV2ZW50Lm9mZnNldFkpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG1vdXNlTW92ZShldmVudCkge1xuICAgIHRoaXMuX3N2Yy5zZXRQb2ludGVyTW92ZShldmVudCk7XG4gIH1cblxuICBtb3VzZUxlYXZlKGV2ZW50KSB7XG4gICAgdGhpcy5fc3ZjLnNldFBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIHRyYWNrU2VyaWUoaW5kZXgsIGl0ZW06IFNlcmllczxCYXNlUG9pbnQ+KSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZT8ubGVuZ3RoID8gaXRlbS5uYW1lIDogaW5kZXg7XG4gIH1cbn1cbiIsIkBpZiAoeyBzaXplOiBzaXplIHwgYXN5bmMsIGNvbmZpZzogY29uZmlnIHwgYXN5bmMsIHNjYWxlczogc2NhbGVzIHwgYXN5bmMsIHBsb3RCYW5kczogcGxvdEJhbmRzIHwgYXN5bmMsIHZpc2libGVSZWN0OlxudmlzaWJsZVJlY3QgfCBhc3luYyB9OyBhcyBkYXRhKSB7IEBpZiAoZGF0YS5jb25maWc/LnRvb2x0aXA/LmVuYWJsZSkge1xuPHRldGEtdG9vbHRpcCBbc2l6ZV09XCJkYXRhLnNpemVcIiBbY29uZmlnXT1cImRhdGEuY29uZmlnXCI+PC90ZXRhLXRvb2x0aXA+XG59IEBpZiAoZGF0YS5zaXplPy5oZWlnaHQgPiAwICYmIGRhdGEuc2l6ZT8ud2lkdGggPiAwICYmIGRhdGEudmlzaWJsZVJlY3Q/LmhlaWdodCA+IDAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwICYmXG5kYXRhLnNjYWxlcz8ueC5zaXplID09PSBkYXRhLmNvbmZpZy54QXhpcy5sZW5ndGggJiYgZGF0YS5zY2FsZXM/Lnkuc2l6ZSA9PT0gZGF0YS5jb25maWcueUF4aXMubGVuZ3RoKSB7XG48c3ZnIGhlaWdodD1cIjEwMCVcIiB3aWR0aD1cIjEwMCVcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCI+XG4gIDxnIGNsYXNzPVwieS1heGlzLWNvbnRhaW5lclwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgZGF0YS5zY2FsZXMueSB8IGtleXZhbHVlOyB0cmFjayBpdGVtLnZhbHVlLmluZGV4KSB7IEBpZiAoaXRlbS52YWx1ZS5zZWxmU2l6ZSA+IDAgJiZcbiAgICBpdGVtLnZhbHVlLm9wdGlvbnMudmlzaWJsZSAmJiBkYXRhLnNjYWxlcy54LnNpemUgPiAwICYmIGRhdGEuc2NhbGVzLnkuc2l6ZSA+IDApIHtcbiAgICA8Z1xuICAgICAgdGV0YS15LWF4aXNcbiAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNsYXRlKGl0ZW0udmFsdWUsIGRhdGEuc2l6ZSkgfCBhc3luY1wiXG4gICAgPjwvZz5cbiAgICA8cmVjdFxuICAgICAgdGV0YVpvb21hYmxlXG4gICAgICBmaWxsLW9wYWNpdHk9XCIwXCJcbiAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgIFthdHRyLnhdPVwiaXRlbS52YWx1ZS5vcHRpb25zLm9wcG9zaXRlID8gMCA6IC1pdGVtLnZhbHVlLnNlbGZTaXplXCJcbiAgICAgIFthdHRyLnldPVwiMFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiaXRlbS52YWx1ZS5zZWxmU2l6ZVwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNsYXRlKGl0ZW0udmFsdWUsIGRhdGEuc2l6ZSkgfCBhc3luY1wiXG4gICAgPjwvcmVjdD5cbiAgICB9IH1cbiAgPC9nPlxuICA8ZyBjbGFzcz1cIngtYXhpcy1jb250YWluZXJcIj5cbiAgICBAZm9yIChpdGVtIG9mIGRhdGEuc2NhbGVzLnggfCBrZXl2YWx1ZTsgdHJhY2sgaXRlbS52YWx1ZS5pbmRleCkgeyBAaWYgKGl0ZW0udmFsdWUub3B0aW9ucy52aXNpYmxlICYmXG4gICAgZGF0YS5zY2FsZXMueC5zaXplID4gMCAmJiBkYXRhLnNjYWxlcy55LnNpemUgPiAwKSB7XG4gICAgPGdcbiAgICAgIHRldGEteC1heGlzXG4gICAgICBbYXhpc109XCJpdGVtLnZhbHVlXCJcbiAgICAgIFtzaXplXT1cImRhdGEudmlzaWJsZVJlY3RcIlxuICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIlxuICAgID48L2c+XG4gICAgPHJlY3RcbiAgICAgIHRldGFab29tYWJsZVxuICAgICAgZmlsbC1vcGFjaXR5PVwiMFwiXG4gICAgICBbYXhpc109XCJpdGVtLnZhbHVlXCJcbiAgICAgIFtjb25maWddPVwiZGF0YS5jb25maWdcIlxuICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICBbYXR0ci54XT1cIjBcIlxuICAgICAgW2F0dHIueV09XCJpdGVtLnZhbHVlLm9wdGlvbnMub3Bwb3NpdGUgPyAtaXRlbS52YWx1ZS5zZWxmU2l6ZSA6IDBcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiZGF0YS52aXNpYmxlUmVjdC53aWR0aFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaXRlbS52YWx1ZS5zZWxmU2l6ZVwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNsYXRlKGl0ZW0udmFsdWUsIGRhdGEuc2l6ZSkgfCBhc3luY1wiXG4gICAgPjwvcmVjdD5cbiAgICB9IH1cbiAgPC9nPlxuPC9zdmc+XG59IEBpZiAoZGF0YS5zaXplPy5oZWlnaHQgPiAwICYmIGRhdGEuc2l6ZT8ud2lkdGggPiAwICYmIGRhdGEudmlzaWJsZVJlY3Q/LmhlaWdodCA+IDAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwICYmXG5kYXRhLnNjYWxlcz8ueC5zaXplID09PSBkYXRhLmNvbmZpZy54QXhpcy5sZW5ndGggJiYgZGF0YS5zY2FsZXM/Lnkuc2l6ZSA9PT0gZGF0YS5jb25maWcueUF4aXMubGVuZ3RoKSB7XG48c3ZnXG4gIHRldGFab29tYWJsZVxuICB0ZXRhQnJ1c2hhYmxlXG4gIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gIFtheGlzXT1cImRhdGEuY29uZmlnPy56b29tPy50eXBlID09PSB6b29tVHlwZS54ID8gZGF0YS5zY2FsZXMueC5nZXQoMCkgOiBkYXRhLnNjYWxlcy55LmdldCgwKVwiXG4gIFthdHRyLndpZHRoXT1cImRhdGEudmlzaWJsZVJlY3Qud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwiZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICBbYXR0ci52aWV3Qm94XT1cIicwIDAgJyArIGRhdGEudmlzaWJsZVJlY3Qud2lkdGggKyAnICcgKyBkYXRhLnZpc2libGVSZWN0LmhlaWdodFwiXG4gIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgnICsgZGF0YS52aXNpYmxlUmVjdC54ICsgJ3B4LCAnICsgZGF0YS52aXNpYmxlUmVjdC55ICsgJ3B4KSdcIlxuICAoY29udGV4dG1lbnUpPVwiY29udGV4dE1lbnUoJGV2ZW50LCBkYXRhLnNjYWxlcy54LCBkYXRhLnNjYWxlcy55KVwiXG4gIChjbGljayk9XCJjbGljaygkZXZlbnQsIGRhdGEuc2NhbGVzLngsIGRhdGEuc2NhbGVzLnkpXCJcbiAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZSgkZXZlbnQpXCJcbiAgKG1vdXNlbW92ZSk9XCJtb3VzZU1vdmUoJGV2ZW50KVwiXG4+XG4gIEBpZiAoZGF0YS5jb25maWcuZ3JpZExpbmVzPy5lbmFibGUgIT09IGZhbHNlKSB7XG4gIDxnIGNsYXNzPVwiZ3JpZGxpbmVzXCIgdGV0YS1ncmlkbGluZXMgW3NpemVdPVwiZGF0YS5zaXplXCI+PC9nPlxuICB9XG4gIDxnIGNsYXNzPVwieC1heGlzLXBsb3RiYW5kLWNvbnRhaW5lclwiPlxuICAgIEBmb3IgKHBsb3RCYW5kIG9mIGRhdGEucGxvdEJhbmRzOyB0cmFjayBwbG90QmFuZCkge1xuICAgIDxnXG4gICAgICB0ZXRhLXBsb3QtYmFuZFxuICAgICAgW3Bsb3RCYW5kXT1cInBsb3RCYW5kLnBsb3RCYW5kXCJcbiAgICAgIFtzY2FsZV09XCJwbG90QmFuZC5heGlzLnNjYWxlXCJcbiAgICAgIFtzaXplXT1cImRhdGEudmlzaWJsZVJlY3RcIlxuICAgICAgW2F4aXNdPVwicGxvdEJhbmQuYXhpc1wiXG4gICAgPjwvZz5cbiAgICB9XG4gIDwvZz5cbiAgPGcgY2xhc3M9XCJzZXJpZXMtY29udGFpbmVyXCI+XG4gICAgQGZvciAoc2VyaWVzIG9mIGRhdGEuY29uZmlnLnNlcmllczsgdHJhY2sgc2VyaWVzOyApIHsgQGlmIChzZXJpZXMudmlzaWJsZSkge1xuICAgIDxnIHRldGEtc2VyaWVzLWhvc3QgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiIFtzZXJpZXNdPVwic2VyaWVzXCI+PC9nPlxuICAgIH0gfVxuICA8L2c+XG4gIDxnIGNsYXNzPVwieC1heGlzLXBsb3RsaW5lLWNvbnRhaW5lclwiPlxuICAgIEBmb3IgKGF4aXMgb2YgZGF0YS5jb25maWcueEF4aXM7IGxldCBpID0gJGluZGV4OyB0cmFjayBheGlzKSB7IEBmb3IgKHBsb3RMaW5lIG9mIGF4aXMucGxvdExpbmVzOyB0cmFjayBwbG90TGluZSkge1xuICAgIDxnXG4gICAgICB0ZXRhLXBsb3QtbGluZVxuICAgICAgW3Bsb3RMaW5lXT1cInBsb3RMaW5lXCJcbiAgICAgIFtzY2FsZV09XCJkYXRhLnNjYWxlcy54LmdldChpKS5zY2FsZVwiXG4gICAgICBbc2l6ZV09XCJkYXRhLnNpemVcIlxuICAgICAgW2F4aXNdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSlcIlxuICAgID48L2c+XG4gICAgfSB9XG4gIDwvZz5cbiAgPGcgY2xhc3M9XCJ5LWF4aXMtcGxvdGxpbmUtY29udGFpbmVyXCI+XG4gICAgQGZvciAoYXhpcyBvZiBkYXRhLmNvbmZpZy55QXhpczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGF4aXM7ICkgeyBAZm9yIChwbG90TGluZSBvZiBheGlzLnBsb3RMaW5lczsgdHJhY2sgcGxvdExpbmUpIHtcbiAgICA8Z1xuICAgICAgdGV0YS1wbG90LWxpbmVcbiAgICAgIFtwbG90TGluZV09XCJwbG90TGluZVwiXG4gICAgICBbc2NhbGVdPVwiZGF0YS5zY2FsZXMueS5nZXQoaSkuc2NhbGVcIlxuICAgICAgW3NpemVdPVwiZGF0YS5zaXplXCJcbiAgICAgIFtheGlzXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpXCJcbiAgICA+PC9nPlxuICAgIH0gfVxuICA8L2c+XG4gIDxnIGNsYXNzPVwiYW5ub3RhdGlvbnNcIj5cbiAgICBAZm9yIChhbm5vdGF0aW9uIG9mIGRhdGEuY29uZmlnLmFubm90YXRpb25zOyB0cmFjayBhbm5vdGF0aW9uKSB7XG4gICAgPGcgdGV0YS1hbm5vdGF0aW9uIFt2aXNpYmxlUmVjdF09XCJkYXRhLnZpc2libGVSZWN0XCIgW2Fubm90YXRpb25dPVwiYW5ub3RhdGlvblwiPjwvZz5cbiAgICB9XG4gIDwvZz5cbiAgQGlmIChkYXRhLmNvbmZpZy50b29sdGlwPy5zaG93Q3Jvc3NoYWlyKSB7XG4gIDxnIGNsYXNzPVwiY3Jvc3NoYWlyXCI+XG4gICAgPGcgdGV0YS1jcm9zc2hhaXIgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiPjwvZz5cbiAgPC9nPlxuICB9XG48L3N2Zz5cbn0gfVxuIl19
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFD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Q2IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBdUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7OEdBaE5VLHVCQUF1QjtrR0FBdkIsdUJBQXVCLGdGQ3ZEcEMsa2xMQTJJQSxxUERuR0ksZ0JBQWdCLHFGQUNoQixpQkFBaUIsK0ZBQ2pCLGNBQWMsb0ZBQ2QsY0FBYywrRUFDZCxTQUFTLHlDQUNULFlBQVksaURBQ1osaUJBQWlCLDRHQUNqQixrQkFBa0IsK0VBQ2xCLG1CQUFtQiw2RkFDbkIsaUJBQWlCLDRHQUNqQixtQkFBbUIscUdBQ25CLGtCQUFrQiwrRUFDbEIsa0JBQWtCOzsyRkFHVCx1QkFBdUI7a0JBdEJuQyxTQUFTOytCQUNFLHNCQUFzQixjQUdwQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3FCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvYnNlcnZlT24sIHNoYXJlUmVwbGF5LCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBeGlzIH0gZnJvbSAnLi4vY29yZS9heGlzL2F4aXMnO1xuaW1wb3J0IHsgQmFzZVBvaW50IH0gZnJvbSAnLi4vbW9kZWwvYmFzZS1wb2ludCc7XG5pbXBvcnQgeyBBeGlzT3JpZW50YXRpb24gfSBmcm9tICcuLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuaW1wb3J0IHsgQnJ1c2hUeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS9icnVzaC10eXBlJztcbmltcG9ydCB7IFpvb21UeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLXR5cGUnO1xuaW1wb3J0IHsgSUNoYXJ0Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHsgSVNjYWxlc01hcCB9IGZyb20gJy4uL21vZGVsL2ktc2NhbGVzLW1hcCc7XG5pbXBvcnQgeyBQbG90QmFuZCB9IGZyb20gJy4uL21vZGVsL3Bsb3QtYmFuZCc7XG5pbXBvcnQgeyBTZXJpZXMgfSBmcm9tICcuLi9tb2RlbC9zZXJpZXMnO1xuaW1wb3J0IHsgQ2hhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7IFhBeGlzQ29tcG9uZW50IH0gZnJvbSAnLi94LWF4aXMveC1heGlzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBab29tYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvem9vbWFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFlBeGlzQ29tcG9uZW50IH0gZnJvbSAnLi95LWF4aXMveS1heGlzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEtleVZhbHVlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQbG90QmFuZENvbXBvbmVudCB9IGZyb20gJy4vcGxvdGJhbmQvcGxvdC1iYW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkbGluZXNDb21wb25lbnQgfSBmcm9tICcuL2dyaWRsaW5lcy9ncmlkbGluZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNlcmllc0hvc3RDb21wb25lbnQgfSBmcm9tICcuL3Nlcmllcy1ob3N0L3Nlcmllcy1ob3N0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbG90bGluZUNvbXBvbmVudCB9IGZyb20gJy4vcGxvdGxpbmUvcGxvdGxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IEFubm90YXRpb25Db21wb25lbnQgfSBmcm9tICcuL2Fubm90YXRpb24vYW5ub3RhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3Jvc3NoYWlyQ29tcG9uZW50IH0gZnJvbSAnLi9jcm9zc2hhaXIvY3Jvc3NoYWlyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcnVzaGFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2JydXNoYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGV0YVpvbmVGdWxsIH0gZnJvbSAnLi4vLi4vb2JzZXJ2YWJsZS96b25lT2JzZXJ2YWJsZSc7XG5cbnR5cGUgT3Bwb3NpdGUgPSBib29sZWFuO1xudHlwZSBEaXNwbGF5UGxvdEJhbmQgPSB7XG4gIGF4aXM6IEF4aXM7XG4gIHBsb3RCYW5kOiBQbG90QmFuZDtcbn07XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLWNoYXJ0LWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUb29sdGlwQ29tcG9uZW50LFxuICAgIFpvb21hYmxlRGlyZWN0aXZlLFxuICAgIFhBeGlzQ29tcG9uZW50LFxuICAgIFlBeGlzQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgUGxvdEJhbmRDb21wb25lbnQsXG4gICAgR3JpZGxpbmVzQ29tcG9uZW50LFxuICAgIFNlcmllc0hvc3RDb21wb25lbnQsXG4gICAgUGxvdGxpbmVDb21wb25lbnQsXG4gICAgQW5ub3RhdGlvbkNvbXBvbmVudCxcbiAgICBDcm9zc2hhaXJDb21wb25lbnQsXG4gICAgQnJ1c2hhYmxlRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIGNvbmZpZzogT2JzZXJ2YWJsZTxJQ2hhcnRDb25maWc+O1xuICBzY2FsZXM6IE9ic2VydmFibGU8SVNjYWxlc01hcD47XG4gIHNpemU6IE9ic2VydmFibGU8RE9NUmVjdD47XG4gIHZpc2libGVSZWN0OiBPYnNlcnZhYmxlPGFueT47XG4gIGJydXNoU2NhbGU6IE9ic2VydmFibGU8YW55PjtcbiAgem9vbVR5cGUgPSBab29tVHlwZTtcbiAgcGxvdEJhbmRzOiBPYnNlcnZhYmxlPERpc3BsYXlQbG90QmFuZFtdPjtcblxuICBwcml2YXRlIF9vYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgZmlsdGVyUG9zaXRpb25NYXAgPSBuZXcgTWFwPE9wcG9zaXRlLCAoYXhpczogQXhpcykgPT4gKF86IEF4aXMpID0+IGJvb2xlYW4+KClcbiAgICAuc2V0KHRydWUsIChheGlzKSA9PiAoXzogQXhpcykgPT4gXy5vcHRpb25zLm9wcG9zaXRlICYmIF8ub3B0aW9ucy52aXNpYmxlICYmIGF4aXMuaW5kZXggPD0gXy5pbmRleClcbiAgICAuc2V0KGZhbHNlLCAoYXhpcykgPT4gKF86IEF4aXMpID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSAmJiBfLmluZGV4IDw9IGF4aXMuaW5kZXgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3NjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfem9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5fc3ZjLmNvbmZpZztcbiAgICB0aGlzLnNpemUgPSB0aGlzLl9zdmMuc2l6ZTtcblxuICAgIHRoaXMuc2NhbGVzID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSxcbiAgICAgIHRldGFab25lRnVsbCh0aGlzLl96b25lKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnBsb3RCYW5kcyA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZmlnLCB0aGlzLnNjYWxlc10pLnBpcGUoXG4gICAgICBtYXAoKFtjb25maWcsIHNjYWxlc10pID0+IHtcbiAgICAgICAgY29uc3QgYmFuZHM6IERpc3BsYXlQbG90QmFuZFtdID0gW107XG4gICAgICAgIGNvbmZpZy54QXhpcz8uZm9yRWFjaCgoYXhpcywgaW5kZXgpID0+IHtcbiAgICAgICAgICBheGlzLnBsb3RCYW5kcz8uZm9yRWFjaCgoYmFuZCkgPT4ge1xuICAgICAgICAgICAgYmFuZHMucHVzaCh7XG4gICAgICAgICAgICAgIHBsb3RCYW5kOiBiYW5kLFxuICAgICAgICAgICAgICBheGlzOiBzY2FsZXMueC5nZXQoaW5kZXgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25maWcueUF4aXM/LmZvckVhY2goKGF4aXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgYXhpcy5wbG90QmFuZHM/LmZvckVhY2goKGJhbmQpID0+IHtcbiAgICAgICAgICAgIGJhbmRzLnB1c2goe1xuICAgICAgICAgICAgICBwbG90QmFuZDogYmFuZCxcbiAgICAgICAgICAgICAgYXhpczogc2NhbGVzLnkuZ2V0KGluZGV4KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYmFuZHMuc29ydCgoYSwgYikgPT4gYS5wbG90QmFuZC5vcmRlciAtIGIucGxvdEJhbmQub3JkZXIpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5icnVzaFNjYWxlID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb25maWcpLFxuICAgICAgbWFwKChkYXRhOiBbSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbeyB4LCB5IH0sIGNvbmZpZ10gPSBkYXRhO1xuXG4gICAgICAgIHJldHVybiBjb25maWcuYnJ1c2g/LnR5cGUgPT09IEJydXNoVHlwZS54IHx8IGNvbmZpZz8uem9vbT8udHlwZSA9PT0gWm9vbVR5cGUueFxuICAgICAgICAgID8geC5nZXQoMCk/LnNjYWxlXG4gICAgICAgICAgOiB5LmdldCgwKT8uc2NhbGU7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnZpc2libGVSZWN0ID0gY29tYmluZUxhdGVzdChbdGhpcy5zaXplLCB0aGlzLnNjYWxlcywgdGhpcy5jb25maWddKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBbRE9NUmVjdCwgSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbc2l6ZSwgeyB4LCB5IH0sIGNvbmZpZ10gPSBkYXRhO1xuICAgICAgICBjb25zdCB5QXhlc0FycmF5ID0gQXJyYXkuZnJvbSh5LnZhbHVlcygpKTtcbiAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB5QXhlc0FycmF5LmZpbHRlcigoXykgPT4gXy5vcHRpb25zLm9wcG9zaXRlICE9PSB0cnVlICYmIF8ub3B0aW9ucy52aXNpYmxlKS5yZWR1Y2UodGhpcy5zdW1TaXplLCAwKTtcblxuICAgICAgICBjb25zdCByaWdodCA9IHlBeGVzQXJyYXkuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgJiYgXy5vcHRpb25zLnZpc2libGUpLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHhBeGVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgIT09IHRydWUgJiYgXy5vcHRpb25zLnZpc2libGUpXG4gICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IHRvcCA9IHhBeGVzQXJyYXkuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgJiYgXy5vcHRpb25zLnZpc2libGUpLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IGxlZnQgKyBjb25maWcuYm91bmRzPy5sZWZ0LFxuICAgICAgICAgIHk6IHRvcCArIGNvbmZpZy5ib3VuZHM/LnRvcCxcbiAgICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCAtIGxlZnQgLSByaWdodCAtIGNvbmZpZy5ib3VuZHM/LmxlZnQgLSBjb25maWcuYm91bmRzPy5yaWdodCxcbiAgICAgICAgICBoZWlnaHQ6IHNpemUuaGVpZ2h0IC0gdG9wIC0gYm90dG9tIC0gY29uZmlnLmJvdW5kcz8udG9wIC0gY29uZmlnLmJvdW5kcz8uYm90dG9tLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICB0ZXRhWm9uZUZ1bGwodGhpcy5fem9uZSksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbnRyaWVzKSB8fFxuICAgICAgICAgICFlbnRyaWVzLmxlbmd0aCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3Qud2lkdGggPD0gMCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3QuaGVpZ2h0IDw9IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N2Yy5zZXRTaXplKGVudHJpZXNbMF0uY29udGVudFJlY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdW1TaXplID0gKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZTtcblxuICBnZXRUcmFuc2xhdGUoYXhpcz86IEF4aXMsIHNpemU/OiBET01SZWN0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zY2FsZXMucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuY29uZmlnKSxcbiAgICAgIG1hcCgoZGF0YTogW0lTY2FsZXNNYXAsIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW3sgeCwgeSB9LCBjb25maWddID0gZGF0YTtcbiAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgIGNvbnN0IHlBeGVzQXJyYXkgPSBBcnJheS5mcm9tKHkudmFsdWVzKCkpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlRmlsdGVyID0gdGhpcy5maWx0ZXJQb3NpdGlvbk1hcC5nZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IG5vbk9wcG9zaXRlRmlsdGVyID0gdGhpcy5maWx0ZXJQb3NpdGlvbk1hcC5nZXQoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlT2Zmc2V0WSA9IHlBeGVzQXJyYXkuZmlsdGVyKG9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcbiAgICAgICAgY29uc3Qgbm9uT3Bwb3NpdGVPZmZzZXRZID0geUF4ZXNBcnJheS5maWx0ZXIobm9uT3Bwb3NpdGVGaWx0ZXIoYXhpcykpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlT2Zmc2V0WCA9IHhBeGVzQXJyYXkuZmlsdGVyKG9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcbiAgICAgICAgY29uc3Qgbm9uT3Bwb3NpdGVPZmZzZXRYID0geEF4ZXNBcnJheS5maWx0ZXIobm9uT3Bwb3NpdGVGaWx0ZXIoYXhpcykpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlVHJhbnNsYXRlWSA9IG9wcG9zaXRlT2Zmc2V0WS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ucmlnaHQpO1xuICAgICAgICBjb25zdCBub25PcHBpc3RlVHJhbnNsYXRlWSA9IG5vbk9wcG9zaXRlT2Zmc2V0WS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ubGVmdCk7XG5cbiAgICAgICAgY29uc3Qgb3Bwb3NpdGVUcmFuc2xhdGVYID0gb3Bwb3NpdGVPZmZzZXRYLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLCBjb25maWcuYm91bmRzPy50b3ApO1xuXG4gICAgICAgIGNvbnN0IG5vbk9wcGlzdGVUcmFuc2xhdGVYID0gbm9uT3Bwb3NpdGVPZmZzZXRYLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLFxuICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmJvdHRvbVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGxlZnQgPSB5QXhlc0FycmF5XG4gICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zLnZpc2libGUgJiYgXy5vcHRpb25zLm9wcG9zaXRlICE9PSB0cnVlKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ubGVmdCk7XG5cbiAgICAgICAgY29uc3QgdG9wID0geEF4ZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy52aXNpYmxlICYmIF8ub3B0aW9ucy5vcHBvc2l0ZSA9PT0gdHJ1ZSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsIGNvbmZpZy5ib3VuZHM/LnRvcCk7XG5cbiAgICAgICAgaWYgKGF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi54KSB7XG4gICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtsZWZ0fSwgJHtcbiAgICAgICAgICAgIGF4aXMub3B0aW9ucy5vcHBvc2l0ZSA/IG9wcG9zaXRlVHJhbnNsYXRlWCA6IHNpemUuaGVpZ2h0IC0gbm9uT3BwaXN0ZVRyYW5zbGF0ZVhcbiAgICAgICAgICB9KWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkpIHtcbiAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke2F4aXMub3B0aW9ucy5vcHBvc2l0ZSA/IHNpemUud2lkdGggLSBvcHBvc2l0ZVRyYW5zbGF0ZVkgOiBub25PcHBpc3RlVHJhbnNsYXRlWX0sICR7dG9wfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwgMCknO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHhTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+LCB5U2NhbGVzOiBNYXA8bnVtYmVyLCBBeGlzPikge1xuICAgIGNvbnN0IHggPSB4U2NhbGVzLmdldCgwKT8uc2NhbGU7XG4gICAgY29uc3QgeSA9IHlTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICB0aGlzLl9zdmMuZW1pdENoYXJ0Q2xpY2soe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHg6IHguaW52ZXJ0KGV2ZW50Lm9mZnNldFgpLFxuICAgICAgICB5OiB5LmludmVydChldmVudC5vZmZzZXRZKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgeFNjYWxlczogTWFwPG51bWJlciwgQXhpcz4sIHlTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+KSB7XG4gICAgY29uc3QgeCA9IHhTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICBjb25zdCB5ID0geVNjYWxlcy5nZXQoMCk/LnNjYWxlO1xuICAgIHRoaXMuX3N2Yy5lbWl0Q2hhcnRDb250ZXh0TWVudSh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgeDogeC5pbnZlcnQoZXZlbnQub2Zmc2V0WCksXG4gICAgICAgIHk6IHkuaW52ZXJ0KGV2ZW50Lm9mZnNldFkpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG1vdXNlTW92ZShldmVudCkge1xuICAgIHRoaXMuX3N2Yy5zZXRQb2ludGVyTW92ZShldmVudCk7XG4gIH1cblxuICBtb3VzZUxlYXZlKGV2ZW50KSB7XG4gICAgdGhpcy5fc3ZjLnNldFBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIHRyYWNrU2VyaWUoaW5kZXgsIGl0ZW06IFNlcmllczxCYXNlUG9pbnQ+KSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZT8ubGVuZ3RoID8gaXRlbS5uYW1lIDogaW5kZXg7XG4gIH1cbn1cbiIsIkBpZiAoe1xuICBzaXplOiBzaXplIHwgYXN5bmMsIGNvbmZpZzogY29uZmlnIHwgYXN5bmMsIHNjYWxlczogc2NhbGVzIHwgYXN5bmMsIHBsb3RCYW5kczogcGxvdEJhbmRzIHwgYXN5bmMsIHZpc2libGVSZWN0OlxuICAgIHZpc2libGVSZWN0IHwgYXN5bmNcbn07IGFzIGRhdGEpIHtcbiAgQGlmIChkYXRhLmNvbmZpZz8udG9vbHRpcD8uZW5hYmxlKSB7XG4gICAgPHRldGEtdG9vbHRpcCBbc2l6ZV09XCJkYXRhLnNpemVcIiBbY29uZmlnXT1cImRhdGEuY29uZmlnXCI+PC90ZXRhLXRvb2x0aXA+XG4gIH1cbiAgQGlmIChkYXRhLnNpemU/LmhlaWdodCA+IDAgJiYgZGF0YS5zaXplPy53aWR0aCA+IDAgJiYgZGF0YS52aXNpYmxlUmVjdD8uaGVpZ2h0ID4gMCAmJiBkYXRhLnZpc2libGVSZWN0Py53aWR0aCA+IDAgJiZcbiAgZGF0YS5zY2FsZXM/Lnguc2l6ZSA9PT0gZGF0YS5jb25maWcueEF4aXMubGVuZ3RoICYmIGRhdGEuc2NhbGVzPy55LnNpemUgPT09IGRhdGEuY29uZmlnLnlBeGlzLmxlbmd0aCkge1xuICAgIDxzdmcgaGVpZ2h0PVwiMTAwJVwiIHdpZHRoPVwiMTAwJVwiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIj5cbiAgICAgIDxnIGNsYXNzPVwieS1heGlzLWNvbnRhaW5lclwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGRhdGEuc2NhbGVzLnkgfCBrZXl2YWx1ZTsgdHJhY2sgaXRlbS52YWx1ZS5pbmRleCkge1xuICAgICAgICAgIEBpZiAoaXRlbS52YWx1ZS5zZWxmU2l6ZSA+IDAgJiZcbiAgICAgICAgICBpdGVtLnZhbHVlLm9wdGlvbnMudmlzaWJsZSAmJiBkYXRhLnNjYWxlcy54LnNpemUgPiAwICYmIGRhdGEuc2NhbGVzLnkuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgIHRldGEteS1heGlzXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIlxuICAgICAgICAgICAgPjwvZz5cbiAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgIHRldGFab29tYWJsZVxuICAgICAgICAgICAgICBmaWxsLW9wYWNpdHk9XCIwXCJcbiAgICAgICAgICAgICAgW2F4aXNdPVwiaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiZGF0YS5jb25maWdcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICAgW2F0dHIueF09XCJpdGVtLnZhbHVlLm9wdGlvbnMub3Bwb3NpdGUgPyAwIDogLWl0ZW0udmFsdWUuc2VsZlNpemVcIlxuICAgICAgICAgICAgICBbYXR0ci55XT1cIjBcIlxuICAgICAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwiZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICAgICAgICAgICAgICBbYXR0ci53aWR0aF09XCJpdGVtLnZhbHVlLnNlbGZTaXplXCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIlxuICAgICAgICAgICAgPjwvcmVjdD5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZz5cbiAgICAgIDxnIGNsYXNzPVwieC1heGlzLWNvbnRhaW5lclwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGRhdGEuc2NhbGVzLnggfCBrZXl2YWx1ZTsgdHJhY2sgaXRlbS52YWx1ZS5pbmRleCkge1xuICAgICAgICAgIEBpZiAoaXRlbS52YWx1ZS5vcHRpb25zLnZpc2libGUgJiZcbiAgICAgICAgICBkYXRhLnNjYWxlcy54LnNpemUgPiAwICYmIGRhdGEuc2NhbGVzLnkuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgIHRldGEteC1heGlzXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIlxuICAgICAgICAgICAgPjwvZz5cbiAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgIHRldGFab29tYWJsZVxuICAgICAgICAgICAgICBmaWxsLW9wYWNpdHk9XCIwXCJcbiAgICAgICAgICAgICAgW2F4aXNdPVwiaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiZGF0YS5jb25maWdcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICAgW2F0dHIueF09XCIwXCJcbiAgICAgICAgICAgICAgW2F0dHIueV09XCJpdGVtLnZhbHVlLm9wdGlvbnMub3Bwb3NpdGUgPyAtaXRlbS52YWx1ZS5zZWxmU2l6ZSA6IDBcIlxuICAgICAgICAgICAgICBbYXR0ci53aWR0aF09XCJkYXRhLnZpc2libGVSZWN0LndpZHRoXCJcbiAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIml0ZW0udmFsdWUuc2VsZlNpemVcIlxuICAgICAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNsYXRlKGl0ZW0udmFsdWUsIGRhdGEuc2l6ZSkgfCBhc3luY1wiXG4gICAgICAgICAgICA+PC9yZWN0PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9nPlxuICAgIDwvc3ZnPlxuICB9XG4gIEBpZiAoZGF0YS5zaXplPy5oZWlnaHQgPiAwICYmIGRhdGEuc2l6ZT8ud2lkdGggPiAwICYmIGRhdGEudmlzaWJsZVJlY3Q/LmhlaWdodCA+IDAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwICYmXG4gIGRhdGEuc2NhbGVzPy54LnNpemUgPT09IGRhdGEuY29uZmlnLnhBeGlzLmxlbmd0aCAmJiBkYXRhLnNjYWxlcz8ueS5zaXplID09PSBkYXRhLmNvbmZpZy55QXhpcy5sZW5ndGgpIHtcbiAgICA8c3ZnXG4gICAgICB0ZXRhWm9vbWFibGVcbiAgICAgIHRldGFCcnVzaGFibGVcbiAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgIFtheGlzXT1cImRhdGEuY29uZmlnPy56b29tPy50eXBlID09PSB6b29tVHlwZS54ID8gZGF0YS5zY2FsZXMueC5nZXQoMCkgOiBkYXRhLnNjYWxlcy55LmdldCgwKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJkYXRhLnZpc2libGVSZWN0LndpZHRoXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJkYXRhLnZpc2libGVSZWN0LmhlaWdodFwiXG4gICAgICBbYXR0ci52aWV3Qm94XT1cIicwIDAgJyArIGRhdGEudmlzaWJsZVJlY3Qud2lkdGggKyAnICcgKyBkYXRhLnZpc2libGVSZWN0LmhlaWdodFwiXG4gICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIGRhdGEudmlzaWJsZVJlY3QueCArICdweCwgJyArIGRhdGEudmlzaWJsZVJlY3QueSArICdweCknXCJcbiAgICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQsIGRhdGEuc2NhbGVzLngsIGRhdGEuc2NhbGVzLnkpXCJcbiAgICAgIChjbGljayk9XCJjbGljaygkZXZlbnQsIGRhdGEuc2NhbGVzLngsIGRhdGEuc2NhbGVzLnkpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlTGVhdmUoJGV2ZW50KVwiXG4gICAgICAobW91c2Vtb3ZlKT1cIm1vdXNlTW92ZSgkZXZlbnQpXCI+XG4gICAgICBAaWYgKGRhdGEuY29uZmlnLmdyaWRMaW5lcz8uZW5hYmxlICE9PSBmYWxzZSkge1xuICAgICAgICA8ZyBjbGFzcz1cImdyaWRsaW5lc1wiIHRldGEtZ3JpZGxpbmVzIFtzaXplXT1cImRhdGEuc2l6ZVwiPjwvZz5cbiAgICAgIH1cbiAgICAgIDxnIGNsYXNzPVwieC1heGlzLXBsb3RiYW5kLWNvbnRhaW5lclwiPlxuICAgICAgICBAZm9yIChwbG90QmFuZCBvZiBkYXRhLnBsb3RCYW5kczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGdcbiAgICAgICAgICAgIHRldGEtcGxvdC1iYW5kXG4gICAgICAgICAgICBbcGxvdEJhbmRdPVwicGxvdEJhbmQucGxvdEJhbmRcIlxuICAgICAgICAgICAgW3NjYWxlXT1cInBsb3RCYW5kLmF4aXMuc2NhbGVcIlxuICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICBbYXhpc109XCJwbG90QmFuZC5heGlzXCJcbiAgICAgICAgICA+PC9nPlxuICAgICAgICB9XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cInNlcmllcy1jb250YWluZXJcIj5cbiAgICAgICAgQGZvciAoc2VyaWVzIG9mIGRhdGEuY29uZmlnLnNlcmllczsgdHJhY2sgc2VyaWVzOyApIHtcbiAgICAgICAgICBAaWYgKHNlcmllcy52aXNpYmxlKSB7XG4gICAgICAgICAgICA8ZyB0ZXRhLXNlcmllcy1ob3N0IFtjb25maWddPVwiZGF0YS5jb25maWdcIiBbc2VyaWVzXT1cInNlcmllc1wiPjwvZz5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZz5cbiAgICAgIDxnIGNsYXNzPVwieC1heGlzLXBsb3RsaW5lLWNvbnRhaW5lclwiPlxuICAgICAgICBAZm9yIChheGlzIG9mIGRhdGEuY29uZmlnLnhBeGlzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgYXhpcykge1xuICAgICAgICAgIEBmb3IgKHBsb3RMaW5lIG9mIGF4aXMucGxvdExpbmVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgIHRldGEtcGxvdC1saW5lXG4gICAgICAgICAgICAgIFtwbG90TGluZV09XCJwbG90TGluZVwiXG4gICAgICAgICAgICAgIFtzY2FsZV09XCJkYXRhLnNjYWxlcy54LmdldChpKS5zY2FsZVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImRhdGEuc2l6ZVwiXG4gICAgICAgICAgICAgIFtheGlzXT1cImRhdGEuc2NhbGVzLnguZ2V0KGkpXCJcbiAgICAgICAgICAgID48L2c+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cInktYXhpcy1wbG90bGluZS1jb250YWluZXJcIj5cbiAgICAgICAgQGZvciAoYXhpcyBvZiBkYXRhLmNvbmZpZy55QXhpczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGF4aXM7ICkge1xuICAgICAgICAgIEBmb3IgKHBsb3RMaW5lIG9mIGF4aXMucGxvdExpbmVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgIHRldGEtcGxvdC1saW5lXG4gICAgICAgICAgICAgIFtwbG90TGluZV09XCJwbG90TGluZVwiXG4gICAgICAgICAgICAgIFtzY2FsZV09XCJkYXRhLnNjYWxlcy55LmdldChpKS5zY2FsZVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImRhdGEuc2l6ZVwiXG4gICAgICAgICAgICAgIFtheGlzXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpXCJcbiAgICAgICAgICAgID48L2c+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cImFubm90YXRpb25zXCI+XG4gICAgICAgIEBmb3IgKGFubm90YXRpb24gb2YgZGF0YS5jb25maWcuYW5ub3RhdGlvbnM7IHRyYWNrIGFubm90YXRpb24pIHtcbiAgICAgICAgICA8ZyB0ZXRhLWFubm90YXRpb24gW3Zpc2libGVSZWN0XT1cImRhdGEudmlzaWJsZVJlY3RcIiBbYW5ub3RhdGlvbl09XCJhbm5vdGF0aW9uXCI+PC9nPlxuICAgICAgICB9XG4gICAgICA8L2c+XG4gICAgICBAaWYgKGRhdGEuY29uZmlnLnRvb2x0aXA/LnNob3dDcm9zc2hhaXIpIHtcbiAgICAgICAgPGcgY2xhc3M9XCJjcm9zc2hhaXJcIj5cbiAgICAgICAgICA8ZyB0ZXRhLWNyb3NzaGFpciBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCI+PC9nPlxuICAgICAgICA8L2c+XG4gICAgICB9XG4gICAgPC9zdmc+XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2841,7 +2841,7 @@ class ChartContainerComponent {
|
|
|
2841
2841
|
return item.name?.length ? item.name : index;
|
|
2842
2842
|
}
|
|
2843
2843
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ChartContainerComponent, deps: [{ token: ChartService }, { token: ScaleService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2844
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: ChartContainerComponent, isStandalone: true, selector: "teta-chart-container", ngImport: i0, template: "@if ({
|
|
2844
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: ChartContainerComponent, isStandalone: true, selector: "teta-chart-container", ngImport: i0, template: "@if ({\n size: size | async, config: config | async, scales: scales | async, plotBands: plotBands | async, visibleRect:\n visibleRect | async\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0 &&\n item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible &&\n data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate(' + data.visibleRect.x + 'px, ' + data.visibleRect.y + 'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track $index) {\n <g\n teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"\n ></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) {\n @if (series.visible) {\n <g teta-series-host [config]=\"data.config\" [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track $index) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"\n ></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) {\n @for (plotLine of axis.plotLines; track $index) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"\n ></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"], dependencies: [{ kind: "component", type: TooltipComponent, selector: "teta-tooltip", inputs: ["size", "config"] }, { kind: "directive", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: ["config", "axis", "size"] }, { kind: "component", type: XAxisComponent, selector: "[teta-x-axis]", inputs: ["axis", "size"] }, { kind: "component", type: YAxisComponent, selector: "[teta-y-axis]", inputs: ["axis", "size"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: PlotBandComponent, selector: "[teta-plot-band]", inputs: ["plotBand", "axis", "scale", "size"] }, { kind: "component", type: GridlinesComponent, selector: "[teta-gridlines]", inputs: ["size"] }, { kind: "component", type: SeriesHostComponent, selector: "[teta-series-host]", inputs: ["config", "series"] }, { kind: "component", type: PlotlineComponent, selector: "[teta-plot-line]", inputs: ["plotLine", "size", "axis", "scale"] }, { kind: "component", type: AnnotationComponent, selector: "[teta-annotation]", inputs: ["visibleRect", "annotation"] }, { kind: "component", type: CrosshairComponent, selector: "[teta-crosshair]", inputs: ["size"] }, { kind: "directive", type: BrushableDirective, selector: "[tetaBrushable]", inputs: ["config", "axis"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2845
2845
|
}
|
|
2846
2846
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ChartContainerComponent, decorators: [{
|
|
2847
2847
|
type: Component,
|
|
@@ -2859,7 +2859,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
|
|
|
2859
2859
|
AnnotationComponent,
|
|
2860
2860
|
CrosshairComponent,
|
|
2861
2861
|
BrushableDirective,
|
|
2862
|
-
], template: "@if ({
|
|
2862
|
+
], template: "@if ({\n size: size | async, config: config | async, scales: scales | async, plotBands: plotBands | async, visibleRect:\n visibleRect | async\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0 &&\n item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible &&\n data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate(' + data.visibleRect.x + 'px, ' + data.visibleRect.y + 'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track $index) {\n <g\n teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"\n ></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) {\n @if (series.visible) {\n <g teta-series-host [config]=\"data.config\" [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track $index) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"\n ></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) {\n @for (plotLine of axis.plotLines; track $index) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"\n ></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"] }]
|
|
2863
2863
|
}], ctorParameters: () => [{ type: ChartService }, { type: ScaleService }, { type: i0.ElementRef }, { type: i0.NgZone }] });
|
|
2864
2864
|
|
|
2865
2865
|
class LegendComponent {
|