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
JavaScript
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()\"></sb-icon>\n <sb-icon\n [ngClass]=\"className + '__spinner-control'\"\n (mousedown)=\"handleMouseDownDecrease()\"\n (mouseup)=\"handleMouseUp()\"></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()\"></sb-icon>\n <sb-icon\n [ngClass]=\"className + '__spinner-control'\"\n (mousedown)=\"handleMouseDownDecrease()\"\n (mouseup)=\"handleMouseUp()\"></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