theme-lib
Version:
This is a simple example Angular Library published to npm.
225 lines • 17 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} */
const 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:
*/
export class NbStepperComponent {
constructor() {
/*
* Stepper orientation - `horizontal`|`vertical`
* @type {string}
*/
this.orientation = NbStepperOrientation.HORIZONTAL;
this.index = 0;
}
/**
* @return {?}
*/
get vertical() {
return this.orientation === NbStepperOrientation.VERTICAL;
}
/**
* @return {?}
*/
get horizontal() {
return this.orientation === NbStepperOrientation.HORIZONTAL;
}
/*
* Selected step index
*
* @type {boolean}
*/
/**
* @return {?}
*/
get selectedIndex() {
return this.index;
}
/**
* @param {?} index
* @return {?}
*/
set selectedIndex(index) {
if (this.steps) {
if (this.index !== index && this.isStepValid(index)) {
this.index = index;
}
}
else {
this.index = index;
}
}
/*
* Selected step component
*
* @type {boolean}
*/
/**
* @return {?}
*/
get selected() {
return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;
}
/**
* @param {?} step
* @return {?}
*/
set selected(step) {
this.selectedIndex = this.steps ? this.steps.toArray().indexOf(step) : -1;
}
/*
* Navigate to next step
* */
/**
* @return {?}
*/
next() {
this.selectedIndex = Math.min(this.index + 1, this.steps.length - 1);
}
/*
* Navigate to previous step
* */
/**
* @return {?}
*/
previous() {
this.selectedIndex = Math.max(this.index - 1, 0);
}
/*
* Reset stepper and stepControls to initial state
* */
/**
* @return {?}
*/
reset() {
this.selectedIndex = 0;
this.steps.forEach(step => step.reset());
}
/**
* @param {?} step
* @return {?}
*/
isStepSelected(step) {
return this.index === this.steps.toArray().indexOf(step);
}
/**
* @private
* @param {?} index
* @return {?}
*/
isStepValid(index) {
/** @type {?} */
const steps = this.steps.toArray();
steps[this.index].interacted = true;
if (index >= this.index && index > 0) {
/** @type {?} */
const 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 }]
};
if (false) {
/** @type {?} */
NbStepperComponent.prototype.steps;
/** @type {?} */
NbStepperComponent.prototype.orientation;
/**
* @type {?}
* @private
*/
NbStepperComponent.prototype.index;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9zdGVwcGVyL3N0ZXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUFFLFdBQVcsRUFDNUIsS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztJQUdqRCxVQUFXLFVBQVU7SUFDckIsWUFBYSxZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlFM0IsTUFBTSxPQUFPLGtCQUFrQjtJQUwvQjs7Ozs7UUF5RFcsZ0JBQVcsR0FBVyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7UUFFdkQsVUFBSyxHQUFHLENBQUMsQ0FBQztJQXdDcEIsQ0FBQzs7OztJQTFGQyxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssb0JBQW9CLENBQUMsUUFBUSxDQUFDO0lBQzVELENBQUM7Ozs7SUFFRCxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssb0JBQW9CLENBQUMsVUFBVSxDQUFDO0lBQzlELENBQUM7Ozs7Ozs7OztJQU9ELElBQ0ksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDOzs7OztJQUVELElBQUksYUFBYSxDQUFDLEtBQWE7UUFDN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNwQjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNwQjtJQUNILENBQUM7Ozs7Ozs7OztJQU9ELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMzRSxDQUFDOzs7OztJQUVELElBQUksUUFBUSxDQUFDLElBQXFCO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Ozs7Ozs7SUFhRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Ozs7Ozs7SUFLRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7Ozs7Ozs7SUFLRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7OztJQUVELGNBQWMsQ0FBQyxJQUFxQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7Ozs7O0lBRU8sV0FBVyxDQUFDLEtBQWE7O2NBQ3pCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtRQUVsQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFcEMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFOztrQkFDOUIsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3JDLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztTQUM5QjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7O1lBbEdGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFFdEIscXVDQUF1Qzs7YUFDeEM7OztvQkFHRSxlQUFlLFNBQUMsZUFBZTt1QkFFL0IsV0FBVyxTQUFDLGdCQUFnQjt5QkFLNUIsV0FBVyxTQUFDLGtCQUFrQjs0QkFVOUIsS0FBSzt1QkFvQkwsS0FBSzswQkFhTCxLQUFLOzs7O0lBbEROLG1DQUFvRTs7SUFrRHBFLHlDQUErRDs7Ozs7SUFFL0QsbUNBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbiwgSG9zdEJpbmRpbmcsXHJcbiAgSW5wdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYlN0ZXBDb21wb25lbnQgfSBmcm9tICcuL3N0ZXAuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBlbnVtIE5iU3RlcHBlck9yaWVudGF0aW9uIHtcclxuICBWRVJUSUNBTCA9ICd2ZXJ0aWNhbCcsXHJcbiAgSE9SSVpPTlRBTCA9ICdob3Jpem9udGFsJyxcclxufVxyXG5cclxuLypcclxuICogU3RlcHBlciBjb21wb25lbnRcclxuICpcclxuICogQHN0YWNrZWQtZXhhbXBsZShTaG93Y2FzZSwgc3RlcHBlci9zdGVwcGVyLXNob3djYXNlLmNvbXBvbmVudClcclxuICpcclxuICogIyMjIEluc3RhbGxhdGlvblxyXG4gKlxyXG4gKiBJbXBvcnQgYE5iU3RlcHBlck1vZHVsZWAgdG8geW91ciBmZWF0dXJlIG1vZHVsZS5cclxuICogYGBgdHNcclxuICogQE5nTW9kdWxlKHtcclxuICogICBpbXBvcnRzOiBbXHJcbiAqICAgXHQvLyAuLi5cclxuICogICAgIE5iU3RlcHBlck1vZHVsZSxcclxuICogICBdLFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgUGFnZU1vZHVsZSB7IH1cclxuICogYGBgXHJcbiAqICMjIyBVc2FnZVxyXG4gKlxyXG4gKiBJZiBzdGVwIGxhYmVsIGlzIHN0cmluZyB5b3UgY2FuIHBhc3MgaXQgYXMgYGxhYmVsYCBhdHRyaWJ1dGUuIE90aGVyd2lzZSBuZy10ZW1wbGF0ZSBzaG91bGQgYmUgdXNlZDpcclxuICogYGBgaHRtbFxyXG4gKiAvLyAuLi5cclxuICogPG5iLXN0ZXBwZXIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCI+XHJcbiAqICAgPG5iLXN0ZXAgbGFiZWw9XCJzdGVwIG51bWJlciBvbmVcIj5cclxuICogICAgICAgLy8gLi4uIHN0ZXAgY29udGVudCBoZXJlXHJcbiAqICAgPG5iLXN0ZXA+XHJcbiAqICAgPG5iLXN0ZXAgbGFiZWw9XCJzdGVwTGFiZWxcIj5cclxuICogICAgICAgPG5nLXRlbXBsYXRlICNzdGVwTGFiZWw+XHJcbiAqICAgICAgICAgICA8ZGl2PlxyXG4gKiAgICAgICAgICAgICAgIHN0ZXAgbnVtYmVyIHR3b1xyXG4gKiAgICAgICAgICAgPC9kaXY+XHJcbiAqICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAqICAgICAgIC8vIC4uLiBzdGVwIGNvbnRlbnQgaGVyZVxyXG4gKiAgIDxuYi1zdGVwPlxyXG4gKiA8L25iLXN0ZXBwZXI+XHJcbiAqIGBgYFxyXG4gKiBTcGVjaWZ5IGBbc3RlcENvbnRyb2xdPVwiZm9ybVwiYCBhbmQgdXNlciBjYW4gbmF2aWdhdGVzIG9ubHkgaWYgc3VibWl0IHByZXZpb3VzIHN0ZXAncyBmb3JtLlxyXG4gKiBgYGBodG1sXHJcbiAqIC8vIC4uLlxyXG4gKiA8bmItc3RlcHBlciAgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCI+XHJcbiAqICAgPG5iLXN0ZXAgbGFiZWw9XCJzdGVwIG51bWJlciBvbmVcIiBbc3RlcENvbnRyb2xdPVwiZm9ybVwiPlxyXG4gKiAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAqICAgICAgIC8vIC4uLlxyXG4gKiAgICAgPC9mb3JtPlxyXG4gKiAgIDxuYi1zdGVwPlxyXG4gKiAgICAvLyAuLi5cclxuICogPC9uYi1zdGVwcGVyPlxyXG4gKiBgYGBcclxuICpcclxuICogQHN0YWNrZWQtZXhhbXBsZShWYWxpZGF0aW9uLCBzdGVwcGVyL3N0ZXBwZXItdmFsaWRhdGlvbi5jb21wb25lbnQpXHJcbiAqXHJcbiAqIFN0ZXBwZXIgY29tcG9uZW50IGhhcyB0d28gbGF5b3V0IG9wdGlvbnMgLSBgdmVydGljYWxgICYgYGhvcml6b250YWxgXHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoVmVydGljYWwsIHN0ZXBwZXIvc3RlcHBlci12ZXJ0aWNhbC5jb21wb25lbnQpXHJcbiAqXHJcbiAqIEBzdHlsZXNcclxuICpcclxuICogc3RlcHBlci1pbmRleC1zaXplOlxyXG4gKiBzdGVwcGVyLWxhYmVsLWZvbnQtc2l6ZTpcclxuICogc3RlcHBlci1sYWJlbC1mb250LXdlaWdodDpcclxuICogc3RlcHBlci1hY2NlbnQtY29sb3I6XHJcbiAqIHN0ZXBwZXItY29tcGxldGVkLWZnOlxyXG4gKiBzdGVwcGVyLWZnOlxyXG4gKiBzdGVwcGVyLWNvbXBsZXRlZC1pY29uLXNpemU6XHJcbiAqIHN0ZXBwZXItY29tcGxldGVkLWljb24td2VpZ2h0OlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduYi1zdGVwcGVyJyxcclxuICBzdHlsZVVybHM6IFsnLi9zdGVwcGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXBwZXIuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJTdGVwcGVyQ29tcG9uZW50IHtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihOYlN0ZXBDb21wb25lbnQpIHN0ZXBzOiBRdWVyeUxpc3Q8TmJTdGVwQ29tcG9uZW50PjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy52ZXJ0aWNhbCcpXHJcbiAgZ2V0IHZlcnRpY2FsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09IE5iU3RlcHBlck9yaWVudGF0aW9uLlZFUlRJQ0FMO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ob3Jpem9udGFsJylcclxuICBnZXQgaG9yaXpvbnRhbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSBOYlN0ZXBwZXJPcmllbnRhdGlvbi5IT1JJWk9OVEFMO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBTZWxlY3RlZCBzdGVwIGluZGV4XHJcbiAgICpcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zdGVwcykge1xyXG4gICAgICBpZiAodGhpcy5pbmRleCAhPT0gaW5kZXggJiYgdGhpcy5pc1N0ZXBWYWxpZChpbmRleCkpIHtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogU2VsZWN0ZWQgc3RlcCBjb21wb25lbnRcclxuICAgKlxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNlbGVjdGVkKCk6IE5iU3RlcENvbXBvbmVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGVwcyA/IHRoaXMuc3RlcHMudG9BcnJheSgpW3RoaXMuc2VsZWN0ZWRJbmRleF0gOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWQoc3RlcDogTmJTdGVwQ29tcG9uZW50KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnN0ZXBzID8gdGhpcy5zdGVwcy50b0FycmF5KCkuaW5kZXhPZihzdGVwKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBTdGVwcGVyIG9yaWVudGF0aW9uIC0gYGhvcml6b250YWxgfGB2ZXJ0aWNhbGBcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG9yaWVudGF0aW9uOiBzdHJpbmcgPSBOYlN0ZXBwZXJPcmllbnRhdGlvbi5IT1JJWk9OVEFMO1xyXG5cclxuICBwcml2YXRlIGluZGV4ID0gMDtcclxuXHJcbiAgLypcclxuICAgKiBOYXZpZ2F0ZSB0byBuZXh0IHN0ZXBcclxuICAgKiAqL1xyXG4gIG5leHQoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4ICsgMSwgdGhpcy5zdGVwcy5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogTmF2aWdhdGUgdG8gcHJldmlvdXMgc3RlcFxyXG4gICAqICovXHJcbiAgcHJldmlvdXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBNYXRoLm1heCh0aGlzLmluZGV4IC0gMSwgMCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFJlc2V0IHN0ZXBwZXIgYW5kIHN0ZXBDb250cm9scyB0byBpbml0aWFsIHN0YXRlXHJcbiAgICogKi9cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICB0aGlzLnN0ZXBzLmZvckVhY2goc3RlcCA9PiBzdGVwLnJlc2V0KCkpO1xyXG4gIH1cclxuXHJcbiAgaXNTdGVwU2VsZWN0ZWQoc3RlcDogTmJTdGVwQ29tcG9uZW50KSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gdGhpcy5zdGVwcy50b0FycmF5KCkuaW5kZXhPZihzdGVwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNTdGVwVmFsaWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0ZXBzLnRvQXJyYXkoKTtcclxuXHJcbiAgICBzdGVwc1t0aGlzLmluZGV4XS5pbnRlcmFjdGVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoaW5kZXggPj0gdGhpcy5pbmRleCAmJiBpbmRleCA+IDApIHtcclxuICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSBzdGVwc1t0aGlzLmluZGV4XTtcclxuICAgICAgcmV0dXJuIGN1cnJlbnRTdGVwLmNvbXBsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19