@nova-ui/bits
Version:
SolarWinds Nova Framework
132 lines • 17 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { Component, EventEmitter, Input, Output, TemplateRef, } from "@angular/core";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../busy/busy.component";
import * as i3 from "../spinner/spinner.component";
/**
* Component that provides wizard step functionality.
*/
export class WizardStepComponent {
constructor() {
/**
* Hide step
*/
this.hidden = false;
/**
* Evaluated when the step is entered.
*/
this.enter = new EventEmitter();
/**
* Evaluated when validity of the step is changed.
*/
this.valid = new EventEmitter();
/**
* Evaluated when the step is exited.
*/
this.exit = new EventEmitter();
/**
* Evaluated when trying to go to the next step.
*/
this.next = new EventEmitter();
/**
*
* Options for busy state. Default: no busy state, with clear empty busy component when set to true
*/
this.busyConfig = {
busy: false,
};
this.visited = false;
this.active = false;
this.complete = false;
this.icon = "step";
this.iconColor = "";
this.inputsList = [];
/**
* Set flags for step entering and emits enter event
*/
this.enterStep = (event) => {
this.enter.emit(event);
};
/**
* Set flags for step exiting and emits exit event
*/
this.exitStep = (event) => {
this.exit.emit(event);
};
this.nextStep = (event) => {
this.next.emit(event);
};
this.applyEnteringStep = () => {
this.active = true;
this.icon = "step-active";
this.iconColor = "black";
};
this.applyExitingStep = () => {
this.active = false;
this.visited = true;
this.icon = "step-complete";
this.iconColor = "";
};
}
ngOnInit() {
this.nextText = this.nextText || $localize `Next`;
}
ngOnChanges(changes) {
if (this.inputsList.length === 0) {
this.inputsList = Object.keys(changes);
}
if (changes["stepControl"]) {
this.valid.emit(this.stepControl);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WizardStepComponent, selector: "nui-wizard-step", inputs: { stepTemplate: "stepTemplate", stepControl: "stepControl", title: "title", shortTitle: "shortTitle", description: "description", nextText: "nextText", hidden: "hidden", disabled: "disabled" }, outputs: { enter: "enter", valid: "valid", exit: "exit", next: "next" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"nui-wizard__step animated\"\n [ngClass]=\"{ 'nui-wizard__step--active': active }\"\n nui-busy\n [busy]=\"busyConfig.busy\"\n>\n <div>\n <h2 class=\"nui-wizard__step-title\">{{ title }}</h2>\n <ng-container *ngTemplateOutlet=\"stepTemplate\"></ng-container>\n </div>\n <nui-spinner\n [percent]=\"busyConfig.percent\"\n [allowCancel]=\"busyConfig.allowCancel\"\n [message]=\"busyConfig.message\"\n >\n </nui-spinner>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.BusyComponent, selector: "[nui-busy]", inputs: ["busy", "disableTabNavigation"] }, { kind: "component", type: i3.SpinnerComponent, selector: "nui-spinner", inputs: ["percent", "show", "delay", "allowCancel", "message", "helpText", "ariaLabel", "size"], outputs: ["cancel"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardStepComponent, decorators: [{
type: Component,
args: [{ selector: "nui-wizard-step", template: "<div\n class=\"nui-wizard__step animated\"\n [ngClass]=\"{ 'nui-wizard__step--active': active }\"\n nui-busy\n [busy]=\"busyConfig.busy\"\n>\n <div>\n <h2 class=\"nui-wizard__step-title\">{{ title }}</h2>\n <ng-container *ngTemplateOutlet=\"stepTemplate\"></ng-container>\n </div>\n <nui-spinner\n [percent]=\"busyConfig.percent\"\n [allowCancel]=\"busyConfig.allowCancel\"\n [message]=\"busyConfig.message\"\n >\n </nui-spinner>\n</div>\n" }]
}], ctorParameters: () => [], propDecorators: { stepTemplate: [{
type: Input
}], stepControl: [{
type: Input
}], title: [{
type: Input
}], shortTitle: [{
type: Input
}], description: [{
type: Input
}], nextText: [{
type: Input
}], hidden: [{
type: Input
}], disabled: [{
type: Input
}], enter: [{
type: Output
}], valid: [{
type: Output
}], exit: [{
type: Output
}], next: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi93aXphcmQvd2l6YXJkLXN0ZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2xpYi93aXphcmQvd2l6YXJkLXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDOzs7OztBQUt2Qjs7R0FFRztBQUtILE1BQU0sT0FBTyxtQkFBbUI7SUF3RTVCO1FBekNBOztXQUVHO1FBQ2EsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUsvQjs7V0FFRztRQUNjLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBZ0MsQ0FBQztRQUMxRTs7V0FFRztRQUNjLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXJEOztXQUVHO1FBQ2MsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFnQyxDQUFDO1FBQ3pFOztXQUVHO1FBQ2MsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFnQyxDQUFDO1FBRXpFOzs7V0FHRztRQUNJLGVBQVUsR0FBZ0I7WUFDN0IsSUFBSSxFQUFFLEtBQUs7U0FDZCxDQUFDO1FBRUssWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixTQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ2QsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFpQmpDOztXQUVHO1FBQ0ksY0FBUyxHQUFHLENBQUMsS0FBNkIsRUFBUSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQztRQUVGOztXQUVHO1FBQ0ksYUFBUSxHQUFHLENBQUMsS0FBNkIsRUFBUSxFQUFFO1lBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVLLGFBQVEsR0FBRyxDQUFDLEtBQTZCLEVBQVEsRUFBRTtZQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFFSyxzQkFBaUIsR0FBRyxHQUFTLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBRUsscUJBQWdCLEdBQUcsR0FBUyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQztJQTVDYSxDQUFDO0lBRVQsUUFBUTtRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUEsTUFBTSxDQUFDO0lBQ3JELENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQzsrR0FyRlEsbUJBQW1CO21HQUFuQixtQkFBbUIsK1ZDekNoQyx1ZkFpQkE7OzRGRHdCYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0ksaUJBQWlCO3dEQVNYLFlBQVk7c0JBQTNCLEtBQUs7Z0JBSVUsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxLQUFLO3NCQUFwQixLQUFLO2dCQUtVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxRQUFRO3NCQUF2QixLQUFLO2dCQUlVLE1BQU07c0JBQXJCLEtBQUs7Z0JBSVUsUUFBUTtzQkFBdkIsS0FBSztnQkFJVyxLQUFLO3NCQUFyQixNQUFNO2dCQUlVLEtBQUs7c0JBQXJCLE1BQU07Z0JBS1UsSUFBSTtzQkFBcEIsTUFBTTtnQkFJVSxJQUFJO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBJV2l6YXJkU2VsZWN0aW9uRXZlbnQsIElXaXphcmRTdGVwQ29tcG9uZW50IH0gZnJvbSBcIi4vcHVibGljLWFwaVwiO1xuaW1wb3J0IHsgSUJ1c3lDb25maWcgfSBmcm9tIFwiLi4vYnVzeS9wdWJsaWMtYXBpXCI7XG5cbi8qKlxuICogQ29tcG9uZW50IHRoYXQgcHJvdmlkZXMgd2l6YXJkIHN0ZXAgZnVuY3Rpb25hbGl0eS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibnVpLXdpemFyZC1zdGVwXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi93aXphcmQtc3RlcC5jb21wb25lbnQuaHRtbFwiLFxufSlcbmV4cG9ydCBjbGFzcyBXaXphcmRTdGVwQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBJV2l6YXJkU3RlcENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBmb3Igc3RlcC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc3RlcFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKlxuICAgICAqIENoZWNrIGlzIGZvcm0gaW5zaWRlIHN0ZXAgdmFsaWQuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHN0ZXBDb250cm9sPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgc3RlcC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgbW9yZSBjb21wYWN0IGZvcm0gb2YgdGhlIHRpdGxlIChleDogXCJFVUxBXCIpLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG9ydFRpdGxlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGVwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQ6J05leHQnLiBUZXh0IGZvciB0aGUgTmV4dCBidXR0b24uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG5leHRUZXh0OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogSGlkZSBzdGVwXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGhpZGRlbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHN0ZXBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlZCB3aGVuIHRoZSBzdGVwIGlzIGVudGVyZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SVdpemFyZFNlbGVjdGlvbkV2ZW50IHwgdm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZWQgd2hlbiB2YWxpZGl0eSBvZiB0aGUgc3RlcCBpcyBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgdmFsaWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZWQgd2hlbiB0aGUgc3RlcCBpcyBleGl0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBleGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJV2l6YXJkU2VsZWN0aW9uRXZlbnQgfCB2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlZCB3aGVuIHRyeWluZyB0byBnbyB0byB0aGUgbmV4dCBzdGVwLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgbmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8SVdpemFyZFNlbGVjdGlvbkV2ZW50IHwgdm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogT3B0aW9ucyBmb3IgYnVzeSBzdGF0ZS4gRGVmYXVsdDogbm8gYnVzeSBzdGF0ZSwgd2l0aCBjbGVhciBlbXB0eSBidXN5IGNvbXBvbmVudCB3aGVuIHNldCB0byB0cnVlXG4gICAgICovXG4gICAgcHVibGljIGJ1c3lDb25maWc6IElCdXN5Q29uZmlnID0ge1xuICAgICAgICBidXN5OiBmYWxzZSxcbiAgICB9O1xuXG4gICAgcHVibGljIHZpc2l0ZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgYWN0aXZlID0gZmFsc2U7XG4gICAgcHVibGljIGNvbXBsZXRlID0gZmFsc2U7XG4gICAgcHVibGljIGljb24gPSBcInN0ZXBcIjtcbiAgICBwdWJsaWMgaWNvbkNvbG9yID0gXCJcIjtcbiAgICBwdWJsaWMgaW5wdXRzTGlzdDogc3RyaW5nW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZXh0VGV4dCA9IHRoaXMubmV4dFRleHQgfHwgJGxvY2FsaXplYE5leHRgO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0c0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0c0xpc3QgPSBPYmplY3Qua2V5cyhjaGFuZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlc1tcInN0ZXBDb250cm9sXCJdKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkLmVtaXQodGhpcy5zdGVwQ29udHJvbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZmxhZ3MgZm9yIHN0ZXAgZW50ZXJpbmcgYW5kIGVtaXRzIGVudGVyIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIGVudGVyU3RlcCA9IChldmVudD86IElXaXphcmRTZWxlY3Rpb25FdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmVudGVyLmVtaXQoZXZlbnQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZmxhZ3MgZm9yIHN0ZXAgZXhpdGluZyBhbmQgZW1pdHMgZXhpdCBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBleGl0U3RlcCA9IChldmVudD86IElXaXphcmRTZWxlY3Rpb25FdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmV4aXQuZW1pdChldmVudCk7XG4gICAgfTtcblxuICAgIHB1YmxpYyBuZXh0U3RlcCA9IChldmVudD86IElXaXphcmRTZWxlY3Rpb25FdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLm5leHQuZW1pdChldmVudCk7XG4gICAgfTtcblxuICAgIHB1YmxpYyBhcHBseUVudGVyaW5nU3RlcCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmljb24gPSBcInN0ZXAtYWN0aXZlXCI7XG4gICAgICAgIHRoaXMuaWNvbkNvbG9yID0gXCJibGFja1wiO1xuICAgIH07XG5cbiAgICBwdWJsaWMgYXBwbHlFeGl0aW5nU3RlcCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52aXNpdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pY29uID0gXCJzdGVwLWNvbXBsZXRlXCI7XG4gICAgICAgIHRoaXMuaWNvbkNvbG9yID0gXCJcIjtcbiAgICB9O1xufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwibnVpLXdpemFyZF9fc3RlcCBhbmltYXRlZFwiXG4gICAgW25nQ2xhc3NdPVwieyAnbnVpLXdpemFyZF9fc3RlcC0tYWN0aXZlJzogYWN0aXZlIH1cIlxuICAgIG51aS1idXN5XG4gICAgW2J1c3ldPVwiYnVzeUNvbmZpZy5idXN5XCJcbj5cbiAgICA8ZGl2PlxuICAgICAgICA8aDIgY2xhc3M9XCJudWktd2l6YXJkX19zdGVwLXRpdGxlXCI+e3sgdGl0bGUgfX08L2gyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG51aS1zcGlubmVyXG4gICAgICAgIFtwZXJjZW50XT1cImJ1c3lDb25maWcucGVyY2VudFwiXG4gICAgICAgIFthbGxvd0NhbmNlbF09XCJidXN5Q29uZmlnLmFsbG93Q2FuY2VsXCJcbiAgICAgICAgW21lc3NhZ2VdPVwiYnVzeUNvbmZpZy5tZXNzYWdlXCJcbiAgICA+XG4gICAgPC9udWktc3Bpbm5lcj5cbjwvZGl2PlxuIl19