UNPKG

sb-element

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.1. It is a component library constructed around the SCSS library [Sb-Theming](https://github.com/SeverinBuchser/SbTheming) and supports [Angular Schematics]

177 lines 23.8 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { Color, mixinClassName, mixinColor, mixinDisable, mixinFocus, mixinSize, Size } from '../../../core'; import * as i0 from "@angular/core"; import * as i1 from "../../../core"; import * as i2 from "../../../icon/icon/icon.component"; import * as i3 from "@angular/forms"; import * as i4 from "@angular/common"; const SbNumberInputCoreCore = mixinDisable(mixinFocus(mixinSize(mixinColor(mixinClassName(class { constructor(_elementRef, _themeService) { this._elementRef = _elementRef; this._themeService = _themeService; } }, 'sb-input-core'), Color.PRIMARY), Size.MEDIUM))); export class SbNumberInputCoreComponent extends SbNumberInputCoreCore { constructor(elementRef, themeService) { super(elementRef, themeService); this.placeholder = ''; this.min = Number.MIN_SAFE_INTEGER; this.max = Number.MAX_SAFE_INTEGER; this.prefixIcon = ''; this.suffixIcon = ''; this.overflow = new EventEmitter(); this.underflow = new EventEmitter(); this.intervals = new Array(); this.isMouseDown = false; this.steps = 0; this.speed = 0; this.delta = 1; this.innerValue = undefined; this.onChange = () => { }; this.onTouch = () => { }; this.increase = () => { let newValue; if (this.value != undefined) { newValue = this.value + this.delta; } else if (this.max >= 0) { newValue = 0; } else { newValue = this.max; } if (newValue > this.max) { newValue = this.min; this.steps = 0; this.speed = 0; this.delta = 1; this.overflow.emit(); } this.steps++; this.value = newValue; }; this.decrease = () => { let newValue; if (this.value != undefined) { newValue = this.value - this.delta; } else if (this.min <= 0) { newValue = 0; } else { newValue = this.min; } if (newValue < this.min) { newValue = this.max; this.steps = 0; this.speed = 0; this.delta = 1; this.underflow.emit(); } this.steps++; this.value = newValue; }; } set value(value) { this.writeValue(value); this.onChange(value); } get value() { return this.innerValue; } handleMouseDownIncrease() { this.handleMouseDown(this.increase); } handleMouseDownDecrease() { this.handleMouseDown(this.decrease); } handleMouseDown(stepFunction) { this.isMouseDown = true; stepFunction(); this.wait(400).then(() => { if (this.isMouseDown) { this.intervals.push(setInterval(() => { stepFunction(); this.updateSpeed(); }, 30)); } }); } updateSpeed() { if (this.speed < SbNumberInputCoreComponent.MAX_SPEED && this.steps == SbNumberInputCoreComponent.MAX_STEP) { this.speed += 1; this.delta = Math.pow(SbNumberInputCoreComponent.SPEED_FACTOR, this.speed); this.steps = 0; } } handleMouseUp() { this.isMouseDown = false; this.intervals.forEach((interval) => clearInterval(interval)); this.steps = 0; this.speed = 0; this.delta = 1; } async wait(time) { return new Promise(resolve => { let timeout = setTimeout(() => { resolve(); clearTimeout(timeout); }, time); }); } getPlaceholderClasses() { let classes = new Array(); classes.push(this.className + '__placeholder'); classes.push(this.value || this.value == 0 || this.focused ? 'top' : ''); return classes; } writeValue(value) { if (value !== this.innerValue && !this.disabled) { this.innerValue = value; } } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouch = fn; } onBlur() { this.onTouch(); } } SbNumberInputCoreComponent.SPEED_FACTOR = 2; SbNumberInputCoreComponent.MAX_SPEED = 10; SbNumberInputCoreComponent.MAX_STEP = Math.pow(SbNumberInputCoreComponent.SPEED_FACTOR, 7); SbNumberInputCoreComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbNumberInputCoreComponent, deps: [{ token: i0.ElementRef }, { token: i1.SbThemeService }], target: i0.ɵɵFactoryTarget.Component }); SbNumberInputCoreComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: SbNumberInputCoreComponent, selector: "sb-input-core[type=number]", inputs: { size: "size", color: "color", disabled: "disabled", placeholder: "placeholder", min: "min", max: "max", prefixIcon: "prefixIcon", suffixIcon: "suffixIcon" }, outputs: { focus: "focus", blur: "blur", overflow: "overflow", underflow: "underflow" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SbNumberInputCoreComponent, multi: true }], usesInheritance: true, ngImport: i0, template: "<input\n type=\"number\"\n [(ngModel)]=\"value\"\n [spellcheck]=\"false\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\">\n<div [ngClass]=\"getPlaceholderClasses()\">\n {{ placeholder }}\n</div>\n<div [ngClass]=\"className + '__spinner-controls'\">\n <sb-icon\n [ngClass]=\"className + '__spinner-control'\"\n (mousedown)=\"handleMouseDownIncrease()\"\n (mouseup)=\"handleMouseUp()\">&#xe5e1;</sb-icon>\n <sb-icon\n [ngClass]=\"className + '__spinner-control'\"\n (mousedown)=\"handleMouseDownDecrease()\"\n (mouseup)=\"handleMouseUp()\">&#xe2ea;</sb-icon>\n</div>\n", components: [{ type: i2.SbIconComponent, selector: "sb-icon", inputs: ["size", "color", "icon", "isOutline"] }], directives: [{ type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbNumberInputCoreComponent, decorators: [{ type: Component, args: [{ selector: 'sb-input-core[type=number]', inputs: [ 'size', 'color', 'disabled' ], outputs: [ 'focus', 'blur' ], providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SbNumberInputCoreComponent, multi: true }], template: "<input\n type=\"number\"\n [(ngModel)]=\"value\"\n [spellcheck]=\"false\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\">\n<div [ngClass]=\"getPlaceholderClasses()\">\n {{ placeholder }}\n</div>\n<div [ngClass]=\"className + '__spinner-controls'\">\n <sb-icon\n [ngClass]=\"className + '__spinner-control'\"\n (mousedown)=\"handleMouseDownIncrease()\"\n (mouseup)=\"handleMouseUp()\">&#xe5e1;</sb-icon>\n <sb-icon\n [ngClass]=\"className + '__spinner-control'\"\n (mousedown)=\"handleMouseDownDecrease()\"\n (mouseup)=\"handleMouseUp()\">&#xe2ea;</sb-icon>\n</div>\n" }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SbThemeService }]; }, propDecorators: { placeholder: [{ type: Input }], min: [{ type: Input }], max: [{ type: Input }], prefixIcon: [{ type: Input }], suffixIcon: [{ type: Input }], overflow: [{ type: Output }], underflow: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWlucHV0LWNvcmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc2ItZWxlbWVudC9zcmMvbGliL2Zvcm1zL251bWJlci1pbnB1dC9udW1iZXItaW5wdXQtY29yZS9udW1iZXItaW5wdXQtY29yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zYi1lbGVtZW50L3NyYy9saWIvZm9ybXMvbnVtYmVyLWlucHV0L251bWJlci1pbnB1dC1jb3JlL251bWJlci1pbnB1dC1jb3JlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQWtCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFFN0gsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQ3hDLFVBQVUsQ0FDUixTQUFTLENBQ1AsVUFBVSxDQUNSLGNBQWMsQ0FDWjtJQUNFLFlBQ1MsV0FBdUIsRUFDdkIsYUFBNkI7UUFEN0IsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWdCO0lBQUcsQ0FBQztDQUMzQyxFQUFFLGVBQWUsQ0FDbkIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUNqQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQ2YsQ0FDRixDQUNGLENBQUM7QUFvQkYsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHFCQUFxQjtJQTJDbkUsWUFDRSxVQUFzQixFQUN0QixZQUE0QjtRQUU1QixLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVks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QUFBLENBQUMsQ0FBQztJQUMxRSxpQkFBaUIsQ0FBQyxFQUFPLElBQVUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sS0FBVyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUEsQ0FBQyxDQUFDOztBQWxJekIsdUNBQVksR0FBVyxDQUFFLENBQUE7QUFDekIsb0NBQVMsR0FBVyxFQUFHLENBQUE7QUFDdkIsbUNBQVEsR0FBWSxJQUFJLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUUsQ0FBQTt1SEF4QjdFLDBCQUEwQjsyR0FBMUIsMEJBQTBCLHNUQU4xQixDQUFDO1lBQ1YsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxpRENwQ0osc29CQW9CQTsyRkRrQmEsMEJBQTBCO2tCQWxCdEMsU0FBUzsrQkFDRSw0QkFBNEIsVUFFOUI7d0JBQ04sTUFBTTt3QkFDTixPQUFPO3dCQUNQLFVBQVU7cUJBQ1gsV0FDUTt3QkFDUCxPQUFPO3dCQUNQLE1BQU07cUJBQ1AsYUFDVSxDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsNEJBQTRCOzRCQUN2QyxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDOzhIQUtLLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsR0FBRztzQkFEVCxLQUFLO2dCQUdDLEdBQUc7c0JBRFQsS0FBSztnQkFJQyxVQUFVO3NCQURoQixLQUFLO2dCQUdDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxNQUFNO2dCQUdBLFNBQVM7c0JBRGYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2xvciwgbWl4aW5DbGFzc05hbWUsIG1peGluQ29sb3IsIG1peGluRGlzYWJsZSwgbWl4aW5Gb2N1cywgbWl4aW5TaXplLCBTaXplLCBTYlRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuXG5jb25zdCBTYk51bWJlcklucHV0Q29yZUNvcmUgPSBtaXhpbkRpc2FibGUoXG4gIG1peGluRm9jdXMoXG4gICAgbWl4aW5TaXplKFxuICAgICAgbWl4aW5Db2xvcihcbiAgICAgICAgbWl4aW5DbGFzc05hbWUoXG4gICAgICAgICAgY2xhc3Mge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICAgIHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHVibGljIF90aGVtZVNlcnZpY2U6IFNiVGhlbWVTZXJ2aWNlKSB7fVxuICAgICAgICAgIH0sICdzYi1pbnB1dC1jb3JlJ1xuICAgICAgICApLCBDb2xvci5QUklNQVJZXG4gICAgICApLCBTaXplLk1FRElVTVxuICAgIClcbiAgKVxuKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItaW5wdXQtY29yZVt0eXBlPW51bWJlcl0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbnVtYmVyLWlucHV0LWNvcmUuY29tcG9uZW50Lmh0bWwnLFxuICBpbnB1dHM6IFtcbiAgICAnc2l6ZScsXG4gICAgJ2NvbG9yJyxcbiAgICAnZGlzYWJsZWQnXG4gIF0sXG4gIG91dHB1dHM6IFtcbiAgICAnZm9jdXMnLFxuICAgICdibHVyJ1xuICBdLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IFNiTnVtYmVySW5wdXRDb3JlQ29tcG9uZW50LFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIFNiTnVtYmVySW5wdXRDb3JlQ29tcG9uZW50IGV4dGVuZHMgU2JOdW1iZXJJbnB1dENvcmVDb3JlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1pbjogbnVtYmVyID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXg6IG51bWJlciA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwcmVmaXhJY29uOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KClcbiAgcHVibGljIHN1ZmZpeEljb246IHN0cmluZyA9ICcnO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb3ZlcmZsb3c6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpXG4gIHB1YmxpYyB1bmRlcmZsb3c6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIGludGVydmFsczogQXJyYXk8bnVtYmVyPiA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gIHByaXZhdGUgaXNNb3VzZURvd246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgU1BFRURfRkFDVE9SOiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHN0YXRpYyBNQVhfU1BFRUQ6IG51bWJlciA9IDEwO1xuICBwcml2YXRlIHN0YXRpYyBNQVhfU1RFUDogbnVtYmVyID0gIE1hdGgucG93KFNiTnVtYmVySW5wdXRDb3JlQ29tcG9uZW50LlNQRUVEX0ZBQ1RPUiwgNyk7XG4gIHByaXZhdGUgc3RlcHM6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgc3BlZWQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgZGVsdGE6IG51bWJlciA9IDE7XG5cbiAgcHJpdmF0ZSBpbm5lclZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2g6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHRoZW1lU2VydmljZTogU2JUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgdGhlbWVTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVNb3VzZURvd25JbmNyZWFzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZU1vdXNlRG93bih0aGlzLmluY3JlYXNlKVxuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vdXNlRG93bkRlY3JlYXNlKCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTW91c2VEb3duKHRoaXMuZGVjcmVhc2UpXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1vdXNlRG93bihzdGVwRnVuY3Rpb246ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmlzTW91c2VEb3duID0gdHJ1ZTtcbiAgICBzdGVwRnVuY3Rpb24oKTtcbiAgICB0aGlzLndhaXQoNDAwKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzTW91c2VEb3duKSB7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWxzLnB1c2goc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgIHN0ZXBGdW5jdGlvbigpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3BlZWQoKTtcbiAgICAgICAgfSwgMzApKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTcGVlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zcGVlZCA8IFNiTnVtYmVySW5wdXRDb3JlQ29tcG9uZW50Lk1BWF9TUEVFRCAmJlxuICAgICAgdGhpcy5zdGVwcyA9PSBTYk51bWJlcklucHV0Q29yZUNvbXBvbmVudC5NQVhfU1RFUCkge1xuICAgICAgdGhpcy5zcGVlZCArPSAxO1xuICAgICAgdGhpcy5kZWx0YSA9IE1hdGgucG93KFNiTnVtYmVySW5wdXRDb3JlQ29tcG9uZW50LlNQRUVEX0ZBQ1RPUiwgdGhpcy5zcGVlZClcbiAgICAgIHRoaXMuc3RlcHMgPSAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVhc2UgPSAoKSA9PiB7XG4gICAgbGV0IG5ld1ZhbHVlOiBudW1iZXI7XG4gICAgaWYgKHRoaXMudmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWUgKyB0aGlzLmRlbHRhO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tYXggPj0gMCkge1xuICAgICAgbmV3VmFsdWUgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMubWF4O1xuICAgIH1cbiAgICBpZiAobmV3VmFsdWUgPiB0aGlzLm1heCkge1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgIHRoaXMuc3RlcHMgPSAwO1xuICAgICAgdGhpcy5zcGVlZCA9IDA7XG4gICAgICB0aGlzLmRlbHRhID0gMTtcbiAgICAgIHRoaXMub3ZlcmZsb3cuZW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLnN0ZXBzKys7XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWNyZWFzZSA9ICgpID0+IHtcbiAgICBsZXQgbmV3VmFsdWU6IG51bWJlcjtcbiAgICBpZiAodGhpcy52YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZSAtIHRoaXMuZGVsdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1pbiA8PSAwKSB7XG4gICAgICBuZXdWYWx1ZSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5taW47XG4gICAgfVxuICAgIGlmIChuZXdWYWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMubWF4O1xuICAgICAgdGhpcy5zdGVwcyA9IDA7XG4gICAgICB0aGlzLnNwZWVkID0gMDtcbiAgICAgIHRoaXMuZGVsdGEgPSAxO1xuICAgICAgdGhpcy51bmRlcmZsb3cuZW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLnN0ZXBzKys7XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vdXNlVXAoKTogdm9pZCB7XG4gICAgdGhpcy5pc01vdXNlRG93biA9IGZhbHNlO1xuICAgIHRoaXMuaW50ZXJ2YWxzLmZvckVhY2goKGludGVydmFsOiBudW1iZXIpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpKTtcbiAgICB0aGlzLnN0ZXBzID0gMDtcbiAgICB0aGlzLnNwZWVkID0gMDtcbiAgICB0aGlzLmRlbHRhID0gMTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdCh0aW1lOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICBsZXQgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH0sIHRpbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFBsYWNlaG9sZGVyQ2xhc3NlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBsZXQgY2xhc3NlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgY2xhc3Nlcy5wdXNoKHRoaXMuY2xhc3NOYW1lICsgJ19fcGxhY2Vob2xkZXInKVxuICAgIGNsYXNzZXMucHVzaCh0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUgPT0gMCB8fCB0aGlzLmZvY3VzZWQgPyAndG9wJyA6ICcnKVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pbm5lclZhbHVlICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuIH1cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoID0gZm4gfVxuICBwdWJsaWMgb25CbHVyKCk6IHZvaWQgeyB0aGlzLm9uVG91Y2goKSB9XG5cbn1cbiIsIjxpbnB1dFxuICB0eXBlPVwibnVtYmVyXCJcbiAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gIFtzcGVsbGNoZWNrXT1cImZhbHNlXCJcbiAgKGJsdXIpPVwic2V0Rm9jdXNlZFN0YXRlKGZhbHNlKVwiXG4gIChmb2N1cyk9XCJzZXRGb2N1c2VkU3RhdGUodHJ1ZSlcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbjxkaXYgW25nQ2xhc3NdPVwiZ2V0UGxhY2Vob2xkZXJDbGFzc2VzKClcIj5cbiAge3sgcGxhY2Vob2xkZXIgfX1cbjwvZGl2PlxuPGRpdiBbbmdDbGFzc109XCJjbGFzc05hbWUgKyAnX19zcGlubmVyLWNvbnRyb2xzJ1wiPlxuICA8c2ItaWNvblxuICAgIFtuZ0NsYXNzXT1cImNsYXNzTmFtZSArICdfX3NwaW5uZXItY29udHJvbCdcIlxuICAgIChtb3VzZWRvd24pPVwiaGFuZGxlTW91c2VEb3duSW5jcmVhc2UoKVwiXG4gICAgKG1vdXNldXApPVwiaGFuZGxlTW91c2VVcCgpXCI+JiN4ZTVlMTs8L3NiLWljb24+XG4gIDxzYi1pY29uXG4gICAgW25nQ2xhc3NdPVwiY2xhc3NOYW1lICsgJ19fc3Bpbm5lci1jb250cm9sJ1wiXG4gICAgKG1vdXNlZG93bik9XCJoYW5kbGVNb3VzZURvd25EZWNyZWFzZSgpXCJcbiAgICAobW91c2V1cCk9XCJoYW5kbGVNb3VzZVVwKClcIj4mI3hlMmVhOzwvc2ItaWNvbj5cbjwvZGl2PlxuIl19