UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

134 lines 19.9 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectorRef, Component, ElementRef, Inject, Input, NgZone, PLATFORM_ID, ViewEncapsulation, } from '@angular/core'; import { ModalController } from '@ionic/angular'; import { PieChartComponent } from '@swimlane/ngx-charts'; import { BehaviorSubject, Subject, combineLatest } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { MonitoringAppGenComponent } from '../../metadata/decorators'; import { ChartDataModel, } from '../ChartDataModel'; import { TapVariableDataPopupComponent } from '../tap-variable-data-popup/tap-variable-data-popup.component'; import * as i0 from "@angular/core"; import * as i1 from "@ionic/angular"; import * as i2 from "@angular/common"; import * as i3 from "@swimlane/ngx-charts"; import * as i4 from "../../ui-directive/export-data.directive"; let TapVariablePieChartAdvancedComponent = class TapVariablePieChartAdvancedComponent extends PieChartComponent { set variable(variableOrArray) { this.input = this.chartModel.initVariable(variableOrArray); } set history(enable) { this._history.next(enable); } set valueCountLimit(limit) { if (limit === undefined) { limit = 30; } this._valueCountLimit.next(limit); } set label(indexOrArray) { this.chartModel.initLabel(indexOrArray); } set input(inputs) { this._input.next(inputs); } ngOnInit() { combineLatest([this._valueCountLimit, this._input, this._history]) .pipe(takeUntil(this.destroyed)) .subscribe(([valueCountLimit, input, history]) => { this.chartModel.destroyCurrentSub(); this.subscription = this.chartModel .defineInputStreamSingle(input, history, valueCountLimit) .subscribe((result) => { this.results = result; }); this.cd.detectChanges(); }); } constructor(myChartElement, zone, cd, platformId, modalController) { super(myChartElement, zone, cd, platformId); this.modalController = modalController; this.showDetails = false; this.showExportButton = false; this.colorScheme = { domain: [ '#5DADE2', '#9B59B6', '#F39C12', '#5AA454', '#A10A28', '#C7B42C', '#AAAAAA', ], }; this._history = new BehaviorSubject(true); this._valueCountLimit = new BehaviorSubject(30); this._input = new BehaviorSubject([]); this.destroyed = new Subject(); this.results = [ { name: '---', value: 0, extra: 0, }, ]; this.chartModel = new ChartDataModel(); } ngAfterViewChecked() { this.cd.detectChanges(); } onSelect(event) { if (typeof event === 'object') { if (this.showDetails) { this.chartModel .showDetail(event, this.modalController, TapVariableDataPopupComponent) .catch((err) => { console.log(err); }); } } } ngOnDestroy() { this.subscription?.unsubscribe(); this.chartModel.destroyCurrentSub(); } }; /** @nocollapse */ TapVariablePieChartAdvancedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePieChartAdvancedComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }, { token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TapVariablePieChartAdvancedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TapVariablePieChartAdvancedComponent, selector: "tap-variable-pie-chart-advanced", inputs: { showDetails: "showDetails", showExportButton: "showExportButton", exportedFileName: "exportedFileName", variable: "variable", history: "history", valueCountLimit: "valueCountLimit", label: "label", colorScheme: "colorScheme", input: "input" }, usesInheritance: true, ngImport: i0, template: "<div #containerRef style=\"width: 100%; position: relative\">\n <ngx-charts-advanced-pie-chart\n #charts\n [view]=\"[containerRef.offsetWidth, containerRef.offsetHeight]\"\n [scheme]=\"colorScheme\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-advanced-pie-chart>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n [dataToExport]=\"results\"\n [exportedFileName]=\"exportedFileName\"\n *ngIf=\"showExportButton\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: [".legend-items{padding-top:10px!important;padding-bottom:10px!important}#exportFabButton{position:absolute;top:50px;right:10px}@media (prefers-color-scheme: dark){.legend-item{color:#ccc!important}.legend-item:hover{color:#fff!important}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AdvancedPieChartComponent, selector: "ngx-charts-advanced-pie-chart", inputs: ["gradient", "activeEntries", "tooltipDisabled", "tooltipText", "label", "valueFormatting", "nameFormatting", "percentageFormatting"], outputs: ["activate", "deactivate"] }, { kind: "component", type: i1.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i4.ExportDataDirective, selector: "[tapExportData]", inputs: ["exportedFileName", "dataToExport", "format"], outputs: ["exportDataError"] }], encapsulation: i0.ViewEncapsulation.None }); TapVariablePieChartAdvancedComponent = __decorate([ MonitoringAppGenComponent({ constraints: { isNumber: 'YES', isArray: 'YES', }, }), __metadata("design:paramtypes", [ElementRef, NgZone, ChangeDetectorRef, String, ModalController]) ], TapVariablePieChartAdvancedComponent); export { TapVariablePieChartAdvancedComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePieChartAdvancedComponent, decorators: [{ type: Component, args: [{ selector: 'tap-variable-pie-chart-advanced', encapsulation: ViewEncapsulation.None, template: "<div #containerRef style=\"width: 100%; position: relative\">\n <ngx-charts-advanced-pie-chart\n #charts\n [view]=\"[containerRef.offsetWidth, containerRef.offsetHeight]\"\n [scheme]=\"colorScheme\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-advanced-pie-chart>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n [dataToExport]=\"results\"\n [exportedFileName]=\"exportedFileName\"\n *ngIf=\"showExportButton\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: [".legend-items{padding-top:10px!important;padding-bottom:10px!important}#exportFabButton{position:absolute;top:50px;right:10px}@media (prefers-color-scheme: dark){.legend-item{color:#ccc!important}.legend-item:hover{color:#fff!important}}\n"] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i1.ModalController }]; }, propDecorators: { showDetails: [{ type: Input }], showExportButton: [{ type: Input }], exportedFileName: [{ type: Input }], variable: [{ type: Input }], history: [{ type: Input }], valueCountLimit: [{ type: Input }], label: [{ type: Input }], colorScheme: [{ type: Input }], input: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXBpZS1jaGFydC1hZHZhbmNlZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvbW9uaXRvcmluZy9zcmMvbGliL3VpLWNvbXBvbmVudHMvdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1hZHZhbmNlZC90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWFkdmFuY2VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWFkdmFuY2VkL3RhcC12YXJpYWJsZS1waWUtY2hhcnQtYWR2YW5jZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsY0FBYyxHQUdmLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOERBQThELENBQUM7Ozs7OztBQWN0RyxJQUFNLG9DQUFvQyxHQUExQyxNQUFNLG9DQUNYLFNBQVEsaUJBQWlCO0lBWXpCLElBQ0ksUUFBUSxDQUNWLGVBQWdFO1FBRWhFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQ0ksT0FBTyxDQUFDLE1BQWU7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQ0ksZUFBZSxDQUFDLEtBQXlCO1FBQzNDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxZQUFzRDtRQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBcUJELElBQ0ksS0FBSyxDQUFDLE1BQTZCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFJRCxRQUFRO1FBQ04sYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVO2lCQUNoQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQztpQkFDeEQsU0FBUyxDQUFDLENBQUMsTUFBMEIsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQTRCLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQWNELFlBQ0UsY0FBK0IsRUFDL0IsSUFBWSxFQUNaLEVBQXFCLEVBQ0EsVUFBa0IsRUFDL0IsZUFBZ0M7UUFFeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRnBDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQTFGMUMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFHN0IscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBK0JsQyxnQkFBVyxHQUFHO1lBQ1osTUFBTSxFQUFFO2dCQUNOLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxTQUFTO2dCQUNULFNBQVM7YUFDVjtTQUNGLENBQUM7UUFFTSxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFOUMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFFbkQsV0FBTSxHQUFHLElBQUksZUFBZSxDQUF3QixFQUFFLENBQUMsQ0FBQztRQU94RCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQWdCeEMsWUFBTyxHQUF1QjtZQUM1QjtnQkFDRSxJQUFJLEVBQUUsS0FBSztnQkFDWCxLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsQ0FBQzthQUNUO1NBQ0YsQ0FBQztRQUVNLGVBQVUsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQVkxRCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUF5QjtRQUNoQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVO3FCQUNaLFVBQVUsQ0FDVCxLQUFLLEVBQ0wsSUFBSSxDQUFDLGVBQWUsRUFDcEIsNkJBQTZCLENBQzlCO3FCQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDRjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDdEMsQ0FBQzs7cUpBM0hVLG9DQUFvQyxtR0E4RnJDLFdBQVc7eUlBOUZWLG9DQUFvQyw0VkN2Q2pELDZrQkFvQkE7QURtQmEsb0NBQW9DO0lBWmhELHlCQUF5QixDQUFDO1FBQ3pCLFdBQVcsRUFBRTtZQUNYLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLEtBQUs7U0FDZjtLQUNGLENBQUM7cUNBa0drQixVQUFVO1FBQ3BCLE1BQU07UUFDUixpQkFBaUIsVUFFSSxlQUFlO0dBL0YvQixvQ0FBb0MsQ0E0SGhEO1NBNUhZLG9DQUFvQzs0RkFBcEMsb0NBQW9DO2tCQU5oRCxTQUFTOytCQUNFLGlDQUFpQyxpQkFHNUIsaUJBQWlCLENBQUMsSUFBSTs7MEJBZ0dsQyxNQUFNOzJCQUFDLFdBQVc7MEVBekZyQixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSUYsUUFBUTtzQkFEWCxLQUFLO2dCQVFGLE9BQU87c0JBRFYsS0FBSztnQkFNRixlQUFlO3NCQURsQixLQUFLO2dCQVNGLEtBQUs7c0JBRFIsS0FBSztnQkFNTixXQUFXO3NCQURWLEtBQUs7Z0JBb0JGLEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFBMQVRGT1JNX0lELFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBBYnN0cmFjdFZhcmlhYmxlIH0gZnJvbSAnQGlvdGl6ZS90YXAvZGF0YSc7XG5pbXBvcnQgeyBQaWVDaGFydENvbXBvbmVudCB9IGZyb20gJ0Bzd2ltbGFuZS9uZ3gtY2hhcnRzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb25pdG9yaW5nQXBwR2VuQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBDaGFydERhdGFNb2RlbCxcbiAgQ2hhcnRJbnB1dFNpbmdsZSxcbiAgQ2hhcnRJbnB1dFN0cmVhbVZhcixcbn0gZnJvbSAnLi4vQ2hhcnREYXRhTW9kZWwnO1xuaW1wb3J0IHsgT25DaGFydFNlbGVjdEV2ZW50IH0gZnJvbSAnLi4vc2hhcmVkLXR5cGVzJztcbmltcG9ydCB7IFRhcFZhcmlhYmxlRGF0YVBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFwLXZhcmlhYmxlLWRhdGEtcG9wdXAvdGFwLXZhcmlhYmxlLWRhdGEtcG9wdXAuY29tcG9uZW50JztcblxuQE1vbml0b3JpbmdBcHBHZW5Db21wb25lbnQoe1xuICBjb25zdHJhaW50czoge1xuICAgIGlzTnVtYmVyOiAnWUVTJyxcbiAgICBpc0FycmF5OiAnWUVTJyxcbiAgfSxcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXAtdmFyaWFibGUtcGllLWNoYXJ0LWFkdmFuY2VkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhcC12YXJpYWJsZS1waWUtY2hhcnQtYWR2YW5jZWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWFkdmFuY2VkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFRhcFZhcmlhYmxlUGllQ2hhcnRBZHZhbmNlZENvbXBvbmVudFxuICBleHRlbmRzIFBpZUNoYXJ0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkluaXRcbntcbiAgQElucHV0KClcbiAgc2hvd0RldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZXhwb3J0ZWRGaWxlTmFtZT86IHN0cmluZztcblxuICBASW5wdXQoKVxuICBzZXQgdmFyaWFibGUoXG4gICAgdmFyaWFibGVPckFycmF5OiBBYnN0cmFjdFZhcmlhYmxlPG51bWJlciB8IG51bWJlcltdPiB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLmlucHV0ID0gdGhpcy5jaGFydE1vZGVsLmluaXRWYXJpYWJsZSh2YXJpYWJsZU9yQXJyYXkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGhpc3RvcnkoZW5hYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGlzdG9yeS5uZXh0KGVuYWJsZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWVDb3VudExpbWl0KGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGltaXQgPSAzMDtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWVDb3VudExpbWl0Lm5leHQobGltaXQpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGxhYmVsKGluZGV4T3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBGdW5jdGlvbikge1xuICAgIHRoaXMuY2hhcnRNb2RlbC5pbml0TGFiZWwoaW5kZXhPckFycmF5KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGNvbG9yU2NoZW1lID0ge1xuICAgIGRvbWFpbjogW1xuICAgICAgJyM1REFERTInLFxuICAgICAgJyM5QjU5QjYnLFxuICAgICAgJyNGMzlDMTInLFxuICAgICAgJyM1QUE0NTQnLFxuICAgICAgJyNBMTBBMjgnLFxuICAgICAgJyNDN0I0MkMnLFxuICAgICAgJyNBQUFBQUEnLFxuICAgIF0sXG4gIH07XG5cbiAgcHJpdmF0ZSBfaGlzdG9yeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSBfdmFsdWVDb3VudExpbWl0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDMwKTtcblxuICBwcml2YXRlIF9pbnB1dCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnRJbnB1dFN0cmVhbVZhcltdPihbXSk7XG5cbiAgQElucHV0KClcbiAgc2V0IGlucHV0KGlucHV0czogQ2hhcnRJbnB1dFN0cmVhbVZhcltdKSB7XG4gICAgdGhpcy5faW5wdXQubmV4dChpbnB1dHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3ZhbHVlQ291bnRMaW1pdCwgdGhpcy5faW5wdXQsIHRoaXMuX2hpc3RvcnldKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgIC5zdWJzY3JpYmUoKFt2YWx1ZUNvdW50TGltaXQsIGlucHV0LCBoaXN0b3J5XSkgPT4ge1xuICAgICAgICB0aGlzLmNoYXJ0TW9kZWwuZGVzdHJveUN1cnJlbnRTdWIoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYXJ0TW9kZWxcbiAgICAgICAgICAuZGVmaW5lSW5wdXRTdHJlYW1TaW5nbGUoaW5wdXQsIGhpc3RvcnksIHZhbHVlQ291bnRMaW1pdClcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IENoYXJ0SW5wdXRTaW5nbGVbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gcmVzdWx0IGFzIENoYXJ0SW5wdXRTaW5nbGVbXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc3VsdHM6IENoYXJ0SW5wdXRTaW5nbGVbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnLS0tJyxcbiAgICAgIHZhbHVlOiAwLFxuICAgICAgZXh0cmE6IDAsXG4gICAgfSxcbiAgXTtcblxuICBwcml2YXRlIGNoYXJ0TW9kZWw6IENoYXJ0RGF0YU1vZGVsID0gbmV3IENoYXJ0RGF0YU1vZGVsKCk7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbXlDaGFydEVsZW1lbnQ6IEVsZW1lbnRSZWY8YW55PixcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyXG4gICkge1xuICAgIHN1cGVyKG15Q2hhcnRFbGVtZW50LCB6b25lLCBjZCwgcGxhdGZvcm1JZCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblNlbGVjdChldmVudDogT25DaGFydFNlbGVjdEV2ZW50KSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZXRhaWxzKSB7XG4gICAgICAgIHRoaXMuY2hhcnRNb2RlbFxuICAgICAgICAgIC5zaG93RGV0YWlsKFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICB0aGlzLm1vZGFsQ29udHJvbGxlcixcbiAgICAgICAgICAgIFRhcFZhcmlhYmxlRGF0YVBvcHVwQ29tcG9uZW50XG4gICAgICAgICAgKVxuICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhcnRNb2RlbC5kZXN0cm95Q3VycmVudFN1YigpO1xuICB9XG59XG4iLCI8ZGl2ICNjb250YWluZXJSZWYgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcG9zaXRpb246IHJlbGF0aXZlXCI+XG4gIDxuZ3gtY2hhcnRzLWFkdmFuY2VkLXBpZS1jaGFydFxuICAgICNjaGFydHNcbiAgICBbdmlld109XCJbY29udGFpbmVyUmVmLm9mZnNldFdpZHRoLCBjb250YWluZXJSZWYub2Zmc2V0SGVpZ2h0XVwiXG4gICAgW3NjaGVtZV09XCJjb2xvclNjaGVtZVwiXG4gICAgW3Jlc3VsdHNdPVwicmVzdWx0c1wiXG4gICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgPlxuICA8L25neC1jaGFydHMtYWR2YW5jZWQtcGllLWNoYXJ0PlxuICA8aW9uLWZhYi1idXR0b25cbiAgICBpZD1cImV4cG9ydEZhYkJ1dHRvblwiXG4gICAgc2l6ZT1cInNtYWxsXCJcbiAgICB0YXBFeHBvcnREYXRhXG4gICAgW2RhdGFUb0V4cG9ydF09XCJyZXN1bHRzXCJcbiAgICBbZXhwb3J0ZWRGaWxlTmFtZV09XCJleHBvcnRlZEZpbGVOYW1lXCJcbiAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICA+XG4gICAgPGlvbi1pY29uIG5hbWU9XCJkb3dubG9hZFwiPjwvaW9uLWljb24+XG4gIDwvaW9uLWZhYi1idXR0b24+XG48L2Rpdj5cbiJdfQ==