UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

289 lines 19.3 kB
/** * @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=