UNPKG

@iotize/ionic

Version:

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

159 lines 21.1 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, NgZone, PLATFORM_ID, } from '@angular/core'; import { ModalController } from '@ionic/angular'; import { NumberCardComponent } from '@swimlane/ngx-charts'; 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"; /** * @deprecated it will probably be removed as it's not very usefull */ let TapVariableNumberChartComponent = class TapVariableNumberChartComponent extends NumberCardComponent { modalController; showDetails = false; cardColor = '#232837'; showExportButton = false; exportedFileName; set label(indexOrArray) { this.chartModel.initLabel(indexOrArray); } colorScheme = { domain: [ '#5AA454', '#E44D25', '#CFC0BB', '#7aa3e5', '#a8385d', '#aae3f5', '#5DADE2', '#9B59B6', '#F39C12', '#5AA454', '#A10A28', '#C7B42C', '#AAAAAA', ], }; set variable(variableOrArray) { this.input = this.chartModel.initVariable(variableOrArray); } set input(inputs) { this.subscription = this.chartModel .defineInputStreamSingle(inputs, false, 0) .subscribe((result) => { let index = 0; for (const item of result) { if (!this.results[index]) { if (item.value !== this.results[index].value) { this.results = result; } } else { this.results = result; } index++; } this.resizeComponent(); this.loaded = true; }); } results = [ { name: '---', value: 0, extra: 0, }, ]; subscription; innerWidth; innerHeight; loaded = false; chartModel = new ChartDataModel(); constructor(myChartElement, zone, cd, platformId, modalController) { super(myChartElement, zone, cd, platformId); this.modalController = modalController; } onSelect(event) { if (typeof event === 'object') { if (this.showDetails) { this.chartModel .showDetail(event, this.modalController, TapVariableDataPopupComponent) .catch((err) => { console.warn('Failed to show value detail', err); }); } } } ngAfterViewInit() { this.innerWidth = window.innerWidth; this.resizeComponent(); } resizeComponent() { if (this.innerWidth <= 400) { this.innerWidth = 400; } this.innerHeight = (150 * this.results.length) / (this.innerWidth / 300); if (this.results.length === 1) { this.innerHeight = 150; } else { if (this.innerHeight <= 210) { this.innerHeight = 210; } } this.cd.detectChanges(); } onResize(event) { this.innerWidth = window.innerWidth; this.resizeComponent(); } ngOnDestroy() { this.subscription?.unsubscribe(); this.chartModel.destroyCurrentSub(); } /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariableNumberChartComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }, { token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TapVariableNumberChartComponent, selector: "tap-variable-number-chart", inputs: { showDetails: "showDetails", cardColor: "cardColor", showExportButton: "showExportButton", exportedFileName: "exportedFileName", label: "label", colorScheme: "colorScheme", variable: "variable", input: "input" }, host: { listeners: { "window:resize": "onResize($event)" } }, usesInheritance: true, ngImport: i0, template: "<div #containerRef style=\"width: 100%; overflow: auto; position: relative\">\n <ngx-charts-number-card\n #charts\n [view]=\"[containerRef.offsetWidth, innerHeight]\"\n [scheme]=\"colorScheme\"\n [results]=\"results\"\n [cardColor]=\"cardColor\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-number-card>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n *ngIf=\"showExportButton\"\n [exportedFileName]=\"exportedFileName\"\n [dataToExport]=\"results\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: [":host ::ng-deep rect.card{min-height:250!important;min-width:250!important;margin:500px!important}@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}#exportFabButton{position:absolute;top:10px;right:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.NumberCardComponent, selector: "ngx-charts-number-card", inputs: ["cardColor", "bandColor", "emptyColor", "innerPadding", "textColor", "valueFormatting", "labelFormatting", "designatedTotal"] }, { kind: "directive", type: i4.ExportDataDirective, selector: "[tapExportData]", inputs: ["exportedFileName", "dataToExport", "format"], outputs: ["exportDataError"] }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }; TapVariableNumberChartComponent = __decorate([ MonitoringAppGenComponent({ constraints: { isNumber: 'YES', }, }), __metadata("design:paramtypes", [ElementRef, NgZone, ChangeDetectorRef, String, ModalController]) ], TapVariableNumberChartComponent); export { TapVariableNumberChartComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariableNumberChartComponent, decorators: [{ type: Component, args: [{ selector: 'tap-variable-number-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #containerRef style=\"width: 100%; overflow: auto; position: relative\">\n <ngx-charts-number-card\n #charts\n [view]=\"[containerRef.offsetWidth, innerHeight]\"\n [scheme]=\"colorScheme\"\n [results]=\"results\"\n [cardColor]=\"cardColor\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-number-card>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n *ngIf=\"showExportButton\"\n [exportedFileName]=\"exportedFileName\"\n [dataToExport]=\"results\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: [":host ::ng-deep rect.card{min-height:250!important;min-width:250!important;margin:500px!important}@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}#exportFabButton{position:absolute;top:10px;right:10px}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i1.ModalController }], propDecorators: { showDetails: [{ type: Input }], cardColor: [{ type: Input }], showExportButton: [{ type: Input }], exportedFileName: [{ type: Input }], label: [{ type: Input }], colorScheme: [{ type: Input }], variable: [{ type: Input }], input: [{ type: Input }], onResize: [{ type: HostListener, args: ['window:resize', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLW51bWJlci1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvbW9uaXRvcmluZy9zcmMvbGliL3VpLWNvbXBvbmVudHMvdGFwLXZhcmlhYmxlLW51bWJlci1jaGFydC90YXAtdmFyaWFibGUtbnVtYmVyLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtbnVtYmVyLWNoYXJ0L3RhcC12YXJpYWJsZS1udW1iZXItY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFM0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEUsT0FBTyxFQUNMLGNBQWMsR0FHZixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7QUFFN0c7O0dBRUc7QUFZSSxJQUFNLCtCQUErQixHQUFyQyxNQUFNLCtCQUNYLFNBQVEsbUJBQW1CO0lBd0ZqQjtJQXBGVixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBR3BCLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFHdEIsZ0JBQWdCLEdBQVksS0FBSyxD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QTVJWSwrQkFBK0I7a0JBTjNDLFNBQVM7K0JBQ0UsMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNOzswQkEwRjVDLE1BQU07MkJBQUMsV0FBVzt1RUFuRnJCLFdBQVc7c0JBRFYsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSUYsS0FBSztzQkFEUixLQUFLO2dCQU1OLFdBQVc7c0JBRFYsS0FBSztnQkFvQkYsUUFBUTtzQkFEWCxLQUFLO2dCQVFGLEtBQUs7c0JBRFIsS0FBSztnQkFvRk4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBBYnN0cmFjdFZhcmlhYmxlIH0gZnJvbSAnQGlvdGl6ZS90YXAvZGF0YSc7XG5pbXBvcnQgeyBOdW1iZXJDYXJkQ29tcG9uZW50IH0gZnJvbSAnQHN3aW1sYW5lL25neC1jaGFydHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb25pdG9yaW5nQXBwR2VuQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBDaGFydERhdGFNb2RlbCxcbiAgQ2hhcnRJbnB1dFNpbmdsZSxcbiAgQ2hhcnRJbnB1dFN0cmVhbVZhcixcbn0gZnJvbSAnLi4vQ2hhcnREYXRhTW9kZWwnO1xuaW1wb3J0IHsgT25DaGFydFNlbGVjdEV2ZW50IH0gZnJvbSAnLi4vc2hhcmVkLXR5cGVzJztcbmltcG9ydCB7IFRhcFZhcmlhYmxlRGF0YVBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFwLXZhcmlhYmxlLWRhdGEtcG9wdXAvdGFwLXZhcmlhYmxlLWRhdGEtcG9wdXAuY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBpdCB3aWxsIHByb2JhYmx5IGJlIHJlbW92ZWQgYXMgaXQncyBub3QgdmVyeSB1c2VmdWxsXG4gKi9cbkBNb25pdG9yaW5nQXBwR2VuQ29tcG9uZW50KHtcbiAgY29uc3RyYWludHM6IHtcbiAgICBpc051bWJlcjogJ1lFUycsXG4gIH0sXG59KVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFwLXZhcmlhYmxlLW51bWJlci1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXAtdmFyaWFibGUtbnVtYmVyLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFwLXZhcmlhYmxlLW51bWJlci1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFwVmFyaWFibGVOdW1iZXJDaGFydENvbXBvbmVudFxuICBleHRlbmRzIE51bWJlckNhcmRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KClcbiAgc2hvd0RldGFpbHMgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBjYXJkQ29sb3IgPSAnIzIzMjgzNyc7XG5cbiAgQElucHV0KClcbiAgc2hvd0V4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGV4cG9ydGVkRmlsZU5hbWU/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgc2V0IGxhYmVsKGluZGV4T3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBGdW5jdGlvbikge1xuICAgIHRoaXMuY2hhcnRNb2RlbC5pbml0TGFiZWwoaW5kZXhPckFycmF5KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGNvbG9yU2NoZW1lID0ge1xuICAgIGRvbWFpbjogW1xuICAgICAgJyM1QUE0NTQnLFxuICAgICAgJyNFNDREMjUnLFxuICAgICAgJyNDRkMwQkInLFxuICAgICAgJyM3YWEzZTUnLFxuICAgICAgJyNhODM4NWQnLFxuICAgICAgJyNhYWUzZjUnLFxuICAgICAgJyM1REFERTInLFxuICAgICAgJyM5QjU5QjYnLFxuICAgICAgJyNGMzlDMTInLFxuICAgICAgJyM1QUE0NTQnLFxuICAgICAgJyNBMTBBMjgnLFxuICAgICAgJyNDN0I0MkMnLFxuICAgICAgJyNBQUFBQUEnLFxuICAgIF0sXG4gIH07XG5cbiAgQElucHV0KClcbiAgc2V0IHZhcmlhYmxlKFxuICAgIHZhcmlhYmxlT3JBcnJheTogQWJzdHJhY3RWYXJpYWJsZTxudW1iZXIgfCBudW1iZXJbXT4gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5pbnB1dCA9IHRoaXMuY2hhcnRNb2RlbC5pbml0VmFyaWFibGUodmFyaWFibGVPckFycmF5KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBpbnB1dChpbnB1dHM6IENoYXJ0SW5wdXRTdHJlYW1WYXJbXSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFydE1vZGVsXG4gICAgICAuZGVmaW5lSW5wdXRTdHJlYW1TaW5nbGUoaW5wdXRzLCBmYWxzZSwgMClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogQ2hhcnRJbnB1dFNpbmdsZVtdKSA9PiB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiByZXN1bHQgYXMgQ2hhcnRJbnB1dFNpbmdsZVtdKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnJlc3VsdHNbaW5kZXhdKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAhPT0gdGhpcy5yZXN1bHRzW2luZGV4XS52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHQgYXMgQ2hhcnRJbnB1dFNpbmdsZVtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHQgYXMgQ2hhcnRJbnB1dFNpbmdsZVtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzaXplQ29tcG9uZW50KCk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVzdWx0czogQ2hhcnRJbnB1dFNpbmdsZVtdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICctLS0nLFxuICAgICAgdmFsdWU6IDAsXG4gICAgICBleHRyYTogMCxcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIGlubmVyV2lkdGghOiBudW1iZXI7XG4gIGlubmVySGVpZ2h0PzogbnVtYmVyO1xuICBsb2FkZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNoYXJ0TW9kZWw6IENoYXJ0RGF0YU1vZGVsID0gbmV3IENoYXJ0RGF0YU1vZGVsKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbXlDaGFydEVsZW1lbnQ6IEVsZW1lbnRSZWY8YW55PixcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyXG4gICkge1xuICAgIHN1cGVyKG15Q2hhcnRFbGVtZW50LCB6b25lLCBjZCwgcGxhdGZvcm1JZCk7XG4gIH1cblxuICBvblNlbGVjdChldmVudDogT25DaGFydFNlbGVjdEV2ZW50KSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZXRhaWxzKSB7XG4gICAgICAgIHRoaXMuY2hhcnRNb2RlbFxuICAgICAgICAgIC5zaG93RGV0YWlsKFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICB0aGlzLm1vZGFsQ29udHJvbGxlcixcbiAgICAgICAgICAgIFRhcFZhcmlhYmxlRGF0YVBvcHVwQ29tcG9uZW50XG4gICAgICAgICAgKVxuICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzaG93IHZhbHVlIGRldGFpbCcsIGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHRoaXMucmVzaXplQ29tcG9uZW50KCk7XG4gIH1cblxuICByZXNpemVDb21wb25lbnQoKSB7XG4gICAgaWYgKHRoaXMuaW5uZXJXaWR0aCA8PSA0MDApIHtcbiAgICAgIHRoaXMuaW5uZXJXaWR0aCA9IDQwMDtcbiAgICB9XG4gICAgdGhpcy5pbm5lckhlaWdodCA9ICgxNTAgKiB0aGlzLnJlc3VsdHMubGVuZ3RoKSAvICh0aGlzLmlubmVyV2lkdGggLyAzMDApO1xuICAgIGlmICh0aGlzLnJlc3VsdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmlubmVySGVpZ2h0ID0gMTUwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pbm5lckhlaWdodCA8PSAyMTApIHtcbiAgICAgICAgdGhpcy5pbm5lckhlaWdodCA9IDIxMDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25SZXNpemUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHRoaXMucmVzaXplQ29tcG9uZW50KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYXJ0TW9kZWwuZGVzdHJveUN1cnJlbnRTdWIoKTtcbiAgfVxufVxuIiwiPGRpdiAjY29udGFpbmVyUmVmIHN0eWxlPVwid2lkdGg6IDEwMCU7IG92ZXJmbG93OiBhdXRvOyBwb3NpdGlvbjogcmVsYXRpdmVcIj5cbiAgPG5neC1jaGFydHMtbnVtYmVyLWNhcmRcbiAgICAjY2hhcnRzXG4gICAgW3ZpZXddPVwiW2NvbnRhaW5lclJlZi5vZmZzZXRXaWR0aCwgaW5uZXJIZWlnaHRdXCJcbiAgICBbc2NoZW1lXT1cImNvbG9yU2NoZW1lXCJcbiAgICBbcmVzdWx0c109XCJyZXN1bHRzXCJcbiAgICBbY2FyZENvbG9yXT1cImNhcmRDb2xvclwiXG4gICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgPlxuICA8L25neC1jaGFydHMtbnVtYmVyLWNhcmQ+XG4gIDxpb24tZmFiLWJ1dHRvblxuICAgIGlkPVwiZXhwb3J0RmFiQnV0dG9uXCJcbiAgICBzaXplPVwic21hbGxcIlxuICAgIHRhcEV4cG9ydERhdGFcbiAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgIFtleHBvcnRlZEZpbGVOYW1lXT1cImV4cG9ydGVkRmlsZU5hbWVcIlxuICAgIFtkYXRhVG9FeHBvcnRdPVwicmVzdWx0c1wiXG4gID5cbiAgICA8aW9uLWljb24gbmFtZT1cImRvd25sb2FkXCI+PC9pb24taWNvbj5cbiAgPC9pb24tZmFiLWJ1dHRvbj5cbjwvZGl2PlxuIl19