@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
159 lines • 21.1 kB
JavaScript
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