theme-lib
Version:
This is a simple example Angular Library published to npm.
289 lines • 19.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { Component, ContentChildren, HostBinding, Input, QueryList, } from '@angular/core';
import { NbStepComponent } from './step.component';
/** @enum {string} */
var NbStepperOrientation = {
VERTICAL: 'vertical',
HORIZONTAL: 'horizontal',
};
export { NbStepperOrientation };
/*
* Stepper component
*
* @stacked-example(Showcase, stepper/stepper-showcase.component)
*
* ### Installation
*
* Import `NbStepperModule` to your feature module.
* ```ts
* @NgModule({
* imports: [
* // ...
* NbStepperModule,
* ],
* })
* export class PageModule { }
* ```
* ### Usage
*
* If step label is string you can pass it as `label` attribute. Otherwise ng-template should be used:
* ```html
* // ...
* <nb-stepper orientation="horizontal">
* <nb-step label="step number one">
* // ... step content here
* <nb-step>
* <nb-step label="stepLabel">
* <ng-template #stepLabel>
* <div>
* step number two
* </div>
* </ng-template>
* // ... step content here
* <nb-step>
* </nb-stepper>
* ```
* Specify `[stepControl]="form"` and user can navigates only if submit previous step's form.
* ```html
* // ...
* <nb-stepper orientation="horizontal">
* <nb-step label="step number one" [stepControl]="form">
* <form [formGroup]="form">
* // ...
* </form>
* <nb-step>
* // ...
* </nb-stepper>
* ```
*
* @stacked-example(Validation, stepper/stepper-validation.component)
*
* Stepper component has two layout options - `vertical` & `horizontal`
* @stacked-example(Vertical, stepper/stepper-vertical.component)
*
* @styles
*
* stepper-index-size:
* stepper-label-font-size:
* stepper-label-font-weight:
* stepper-accent-color:
* stepper-completed-fg:
* stepper-fg:
* stepper-completed-icon-size:
* stepper-completed-icon-weight:
*/
var NbStepperComponent = /** @class */ (function () {
function NbStepperComponent() {
/*
* Stepper orientation - `horizontal`|`vertical`
* @type {string}
*/
this.orientation = NbStepperOrientation.HORIZONTAL;
this.index = 0;
}
Object.defineProperty(NbStepperComponent.prototype, "vertical", {
get: /**
* @return {?}
*/
function () {
return this.orientation === NbStepperOrientation.VERTICAL;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbStepperComponent.prototype, "horizontal", {
get: /**
* @return {?}
*/
function () {
return this.orientation === NbStepperOrientation.HORIZONTAL;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbStepperComponent.prototype, "selectedIndex", {
/*
* Selected step index
*
* @type {boolean}
*/
get: /*
* Selected step index
*
* @type {boolean}
*/
/**
* @return {?}
*/
function () {
return this.index;
},
set: /**
* @param {?} index
* @return {?}
*/
function (index) {
if (this.steps) {
if (this.index !== index && this.isStepValid(index)) {
this.index = index;
}
}
else {
this.index = index;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbStepperComponent.prototype, "selected", {
/*
* Selected step component
*
* @type {boolean}
*/
get: /*
* Selected step component
*
* @type {boolean}
*/
/**
* @return {?}
*/
function () {
return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;
},
set: /**
* @param {?} step
* @return {?}
*/
function (step) {
this.selectedIndex = this.steps ? this.steps.toArray().indexOf(step) : -1;
},
enumerable: true,
configurable: true
});
/*
* Navigate to next step
* */
/*
* Navigate to next step
* */
/**
* @return {?}
*/
NbStepperComponent.prototype.next = /*
* Navigate to next step
* */
/**
* @return {?}
*/
function () {
this.selectedIndex = Math.min(this.index + 1, this.steps.length - 1);
};
/*
* Navigate to previous step
* */
/*
* Navigate to previous step
* */
/**
* @return {?}
*/
NbStepperComponent.prototype.previous = /*
* Navigate to previous step
* */
/**
* @return {?}
*/
function () {
this.selectedIndex = Math.max(this.index - 1, 0);
};
/*
* Reset stepper and stepControls to initial state
* */
/*
* Reset stepper and stepControls to initial state
* */
/**
* @return {?}
*/
NbStepperComponent.prototype.reset = /*
* Reset stepper and stepControls to initial state
* */
/**
* @return {?}
*/
function () {
this.selectedIndex = 0;
this.steps.forEach(function (step) { return step.reset(); });
};
/**
* @param {?} step
* @return {?}
*/
NbStepperComponent.prototype.isStepSelected = /**
* @param {?} step
* @return {?}
*/
function (step) {
return this.index === this.steps.toArray().indexOf(step);
};
/**
* @private
* @param {?} index
* @return {?}
*/
NbStepperComponent.prototype.isStepValid = /**
* @private
* @param {?} index
* @return {?}
*/
function (index) {
/** @type {?} */
var steps = this.steps.toArray();
steps[this.index].interacted = true;
if (index >= this.index && index > 0) {
/** @type {?} */
var currentStep = steps[this.index];
return currentStep.completed;
}
return true;
};
NbStepperComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-stepper',
template: "<ng-template><ng-content select=\"nb-step\"></ng-content></ng-template>\r\n<div class=\"header\">\r\n <ng-container *ngFor=\"let step of steps; let index = index; let first = first\">\r\n\r\n <div *ngIf=\"!first && !step.hidden\"\r\n [class.connector-past]=\"index < selectedIndex\"\r\n class=\"connector\"></div>\r\n\r\n <div *ngIf=\"!step.hidden\" class=\"step\"\r\n [class.selected]=\"isStepSelected(step)\"\r\n [class.completed]=\"!isStepSelected(step) && step.completed\"\r\n (click)=\"step.select()\">\r\n <div class=\"label-index\">\r\n <span *ngIf=\"!step.completed || isStepSelected(step)\">{{ index + 1 }}</span>\r\n <i *ngIf=\"!isStepSelected(step) && step.completed\" class=\"icon nb-checkmark\"></i>\r\n </div>\r\n <div class=\"label\">\r\n <ng-container *ngIf=\"step.isLabelTemplate\">\r\n <ng-container *ngTemplateOutlet=\"step.label\"></ng-container>\r\n </ng-container>\r\n <span *ngIf=\"!step.isLabelTemplate\">{{ step.label }}</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n<div class=\"step-content\">\r\n <ng-container [ngTemplateOutlet]=\"selected?.content\"></ng-container>\r\n</div>\r\n",
styles: [":host.horizontal .header .step{flex-direction:column}:host.horizontal .header .connector{height:2px}:host.vertical{display:flex;height:100%}:host.vertical .header{flex-direction:column}:host.vertical .header .label{margin:0 10px}:host.vertical .header .connector{width:2px}.header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px}.header .connector{flex:auto}.header .step{display:flex;align-items:center;cursor:pointer}.header .label-index{margin-bottom:10px;display:flex;justify-content:center;align-items:center}.header .label{width:-webkit-max-content;width:-moz-max-content;width:max-content}"]
}] }
];
NbStepperComponent.propDecorators = {
steps: [{ type: ContentChildren, args: [NbStepComponent,] }],
vertical: [{ type: HostBinding, args: ['class.vertical',] }],
horizontal: [{ type: HostBinding, args: ['class.horizontal',] }],
selectedIndex: [{ type: Input }],
selected: [{ type: Input }],
orientation: [{ type: Input }]
};
return NbStepperComponent;
}());
export { NbStepperComponent };
if (false) {
/** @type {?} */
NbStepperComponent.prototype.steps;
/** @type {?} */
NbStepperComponent.prototype.orientation;
/**
* @type {?}
* @private
*/
NbStepperComponent.prototype.index;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9zdGVwcGVyL3N0ZXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUFFLFdBQVcsRUFDNUIsS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztJQUdqRCxVQUFXLFVBQVU7SUFDckIsWUFBYSxZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9FM0I7SUFBQTs7Ozs7UUF5RFcsZ0JBQVcsR0FBVyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7UUFFdkQsVUFBSyxHQUFHLENBQUMsQ0FBQztJQXdDcEIsQ0FBQztJQTFGQyxzQkFDSSx3Q0FBUTs7OztRQURaO1lBRUUsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztRQUM1RCxDQUFDOzs7T0FBQTtJQUVELHNCQUNJLDBDQUFVOzs7O1FBRGQ7WUFFRSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssb0JBQW9CLENBQUMsVUFBVSxDQUFDO1FBQzlELENBQUM7OztPQUFBO0lBT0Qsc0JBQ0ksNkNBQWE7UUFOakI7Ozs7V0FJRzs7Ozs7Ozs7O1FBQ0g7WUFFRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQzs7Ozs7UUFFRCxVQUFrQixLQUFhO1lBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2lCQUNwQjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQ3BCO1FBQ0gsQ0FBQzs7O09BVkE7SUFpQkQsc0JBQ0ksd0NBQVE7UUFOWjs7OztXQUlHOzs7Ozs7Ozs7UUFDSDtZQUVFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMzRSxDQUFDOzs7OztRQUVELFVBQWEsSUFBcUI7WUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQzs7O09BSkE7SUFjRDs7U0FFSzs7Ozs7OztJQUNMLGlDQUFJOzs7Ozs7SUFBSjtRQUNFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O1NBRUs7Ozs7Ozs7SUFDTCxxQ0FBUTs7Ozs7O0lBQVI7UUFDRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOztTQUVLOzs7Ozs7O0lBQ0wsa0NBQUs7Ozs7OztJQUFMO1FBQ0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQVosQ0FBWSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7Ozs7SUFFRCwyQ0FBYzs7OztJQUFkLFVBQWUsSUFBcUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7Ozs7OztJQUVPLHdDQUFXOzs7OztJQUFuQixVQUFvQixLQUFhOztZQUN6QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7UUFFbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXBDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTs7Z0JBQzlCLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNyQyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUM7U0FDOUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O2dCQWxHRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBRXRCLHF1Q0FBdUM7O2lCQUN4Qzs7O3dCQUdFLGVBQWUsU0FBQyxlQUFlOzJCQUUvQixXQUFXLFNBQUMsZ0JBQWdCOzZCQUs1QixXQUFXLFNBQUMsa0JBQWtCO2dDQVU5QixLQUFLOzJCQW9CTCxLQUFLOzhCQWFMLEtBQUs7O0lBMENSLHlCQUFDO0NBQUEsQUFuR0QsSUFtR0M7U0E5Rlksa0JBQWtCOzs7SUFFN0IsbUNBQW9FOztJQWtEcEUseUNBQStEOzs7OztJQUUvRCxtQ0FBa0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLCBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBRdWVyeUxpc3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5iU3RlcENvbXBvbmVudCB9IGZyb20gJy4vc3RlcC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGVudW0gTmJTdGVwcGVyT3JpZW50YXRpb24ge1xyXG4gIFZFUlRJQ0FMID0gJ3ZlcnRpY2FsJyxcclxuICBIT1JJWk9OVEFMID0gJ2hvcml6b250YWwnLFxyXG59XHJcblxyXG4vKlxyXG4gKiBTdGVwcGVyIGNvbXBvbmVudFxyXG4gKlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKFNob3djYXNlLCBzdGVwcGVyL3N0ZXBwZXItc2hvd2Nhc2UuY29tcG9uZW50KVxyXG4gKlxyXG4gKiAjIyMgSW5zdGFsbGF0aW9uXHJcbiAqXHJcbiAqIEltcG9ydCBgTmJTdGVwcGVyTW9kdWxlYCB0byB5b3VyIGZlYXR1cmUgbW9kdWxlLlxyXG4gKiBgYGB0c1xyXG4gKiBATmdNb2R1bGUoe1xyXG4gKiAgIGltcG9ydHM6IFtcclxuICogICBcdC8vIC4uLlxyXG4gKiAgICAgTmJTdGVwcGVyTW9kdWxlLFxyXG4gKiAgIF0sXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBQYWdlTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICogIyMjIFVzYWdlXHJcbiAqXHJcbiAqIElmIHN0ZXAgbGFiZWwgaXMgc3RyaW5nIHlvdSBjYW4gcGFzcyBpdCBhcyBgbGFiZWxgIGF0dHJpYnV0ZS4gT3RoZXJ3aXNlIG5nLXRlbXBsYXRlIHNob3VsZCBiZSB1c2VkOlxyXG4gKiBgYGBodG1sXHJcbiAqIC8vIC4uLlxyXG4gKiA8bmItc3RlcHBlciBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIj5cclxuICogICA8bmItc3RlcCBsYWJlbD1cInN0ZXAgbnVtYmVyIG9uZVwiPlxyXG4gKiAgICAgICAvLyAuLi4gc3RlcCBjb250ZW50IGhlcmVcclxuICogICA8bmItc3RlcD5cclxuICogICA8bmItc3RlcCBsYWJlbD1cInN0ZXBMYWJlbFwiPlxyXG4gKiAgICAgICA8bmctdGVtcGxhdGUgI3N0ZXBMYWJlbD5cclxuICogICAgICAgICAgIDxkaXY+XHJcbiAqICAgICAgICAgICAgICAgc3RlcCBudW1iZXIgdHdvXHJcbiAqICAgICAgICAgICA8L2Rpdj5cclxuICogICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICogICAgICAgLy8gLi4uIHN0ZXAgY29udGVudCBoZXJlXHJcbiAqICAgPG5iLXN0ZXA+XHJcbiAqIDwvbmItc3RlcHBlcj5cclxuICogYGBgXHJcbiAqIFNwZWNpZnkgYFtzdGVwQ29udHJvbF09XCJmb3JtXCJgIGFuZCB1c2VyIGNhbiBuYXZpZ2F0ZXMgb25seSBpZiBzdWJtaXQgcHJldmlvdXMgc3RlcCdzIGZvcm0uXHJcbiAqIGBgYGh0bWxcclxuICogLy8gLi4uXHJcbiAqIDxuYi1zdGVwcGVyICBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIj5cclxuICogICA8bmItc3RlcCBsYWJlbD1cInN0ZXAgbnVtYmVyIG9uZVwiIFtzdGVwQ29udHJvbF09XCJmb3JtXCI+XHJcbiAqICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICogICAgICAgLy8gLi4uXHJcbiAqICAgICA8L2Zvcm0+XHJcbiAqICAgPG5iLXN0ZXA+XHJcbiAqICAgIC8vIC4uLlxyXG4gKiA8L25iLXN0ZXBwZXI+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKFZhbGlkYXRpb24sIHN0ZXBwZXIvc3RlcHBlci12YWxpZGF0aW9uLmNvbXBvbmVudClcclxuICpcclxuICogU3RlcHBlciBjb21wb25lbnQgaGFzIHR3byBsYXlvdXQgb3B0aW9ucyAtIGB2ZXJ0aWNhbGAgJiBgaG9yaXpvbnRhbGBcclxuICogQHN0YWNrZWQtZXhhbXBsZShWZXJ0aWNhbCwgc3RlcHBlci9zdGVwcGVyLXZlcnRpY2FsLmNvbXBvbmVudClcclxuICpcclxuICogQHN0eWxlc1xyXG4gKlxyXG4gKiBzdGVwcGVyLWluZGV4LXNpemU6XHJcbiAqIHN0ZXBwZXItbGFiZWwtZm9udC1zaXplOlxyXG4gKiBzdGVwcGVyLWxhYmVsLWZvbnQtd2VpZ2h0OlxyXG4gKiBzdGVwcGVyLWFjY2VudC1jb2xvcjpcclxuICogc3RlcHBlci1jb21wbGV0ZWQtZmc6XHJcbiAqIHN0ZXBwZXItZmc6XHJcbiAqIHN0ZXBwZXItY29tcGxldGVkLWljb24tc2l6ZTpcclxuICogc3RlcHBlci1jb21wbGV0ZWQtaWNvbi13ZWlnaHQ6XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLXN0ZXBwZXInLFxyXG4gIHN0eWxlVXJsczogWycuL3N0ZXBwZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcHBlci5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYlN0ZXBwZXJDb21wb25lbnQge1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKE5iU3RlcENvbXBvbmVudCkgc3RlcHM6IFF1ZXJ5TGlzdDxOYlN0ZXBDb21wb25lbnQ+O1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnZlcnRpY2FsJylcclxuICBnZXQgdmVydGljYWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gTmJTdGVwcGVyT3JpZW50YXRpb24uVkVSVElDQUw7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhvcml6b250YWwnKVxyXG4gIGdldCBob3Jpem9udGFsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09IE5iU3RlcHBlck9yaWVudGF0aW9uLkhPUklaT05UQUw7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFNlbGVjdGVkIHN0ZXAgaW5kZXhcclxuICAgKlxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnN0ZXBzKSB7XHJcbiAgICAgIGlmICh0aGlzLmluZGV4ICE9PSBpbmRleCAmJiB0aGlzLmlzU3RlcFZhbGlkKGluZGV4KSkge1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBTZWxlY3RlZCBzdGVwIGNvbXBvbmVudFxyXG4gICAqXHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBnZXQgc2VsZWN0ZWQoKTogTmJTdGVwQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnN0ZXBzID8gdGhpcy5zdGVwcy50b0FycmF5KClbdGhpcy5zZWxlY3RlZEluZGV4XSA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RlZChzdGVwOiBOYlN0ZXBDb21wb25lbnQpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuc3RlcHMgPyB0aGlzLnN0ZXBzLnRvQXJyYXkoKS5pbmRleE9mKHN0ZXApIDogLTE7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFN0ZXBwZXIgb3JpZW50YXRpb24gLSBgaG9yaXpvbnRhbGB8YHZlcnRpY2FsYFxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgb3JpZW50YXRpb246IHN0cmluZyA9IE5iU3RlcHBlck9yaWVudGF0aW9uLkhPUklaT05UQUw7XHJcblxyXG4gIHByaXZhdGUgaW5kZXggPSAwO1xyXG5cclxuICAvKlxyXG4gICAqIE5hdmlnYXRlIHRvIG5leHQgc3RlcFxyXG4gICAqICovXHJcbiAgbmV4dCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IE1hdGgubWluKHRoaXMuaW5kZXggKyAxLCB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBzdGVwXHJcbiAgICogKi9cclxuICBwcmV2aW91cygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IE1hdGgubWF4KHRoaXMuaW5kZXggLSAxLCAwKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogUmVzZXQgc3RlcHBlciBhbmQgc3RlcENvbnRyb2xzIHRvIGluaXRpYWwgc3RhdGVcclxuICAgKiAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgIHRoaXMuc3RlcHMuZm9yRWFjaChzdGVwID0+IHN0ZXAucmVzZXQoKSk7XHJcbiAgfVxyXG5cclxuICBpc1N0ZXBTZWxlY3RlZChzdGVwOiBOYlN0ZXBDb21wb25lbnQpIHtcclxuICAgIHJldHVybiB0aGlzLmluZGV4ID09PSB0aGlzLnN0ZXBzLnRvQXJyYXkoKS5pbmRleE9mKHN0ZXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1N0ZXBWYWxpZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMuc3RlcHMudG9BcnJheSgpO1xyXG5cclxuICAgIHN0ZXBzW3RoaXMuaW5kZXhdLmludGVyYWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgIGlmIChpbmRleCA+PSB0aGlzLmluZGV4ICYmIGluZGV4ID4gMCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHN0ZXBzW3RoaXMuaW5kZXhdO1xyXG4gICAgICByZXR1cm4gY3VycmVudFN0ZXAuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG4iXX0=