UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

132 lines 17 kB
// © 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