UNPKG

@nova-ui/dashboards

Version:

Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and

131 lines 17.3 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 { SpinnerSize } from "@nova-ui/bits"; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/scrolling"; import * as i2 from "@angular/common"; import * as i3 from "@nova-ui/bits"; /** * Component that provides wizard step functionality. */ export class DashwizStepComponent { constructor() { /** * Hide step */ this.hidden = false; /** * The size of the busy spinner */ this.spinnerSize = SpinnerSize.Large; /** * 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 = ""; /** * 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 (changes["stepControl"]) { this.valid.emit(this.stepControl); } } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashwizStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DashwizStepComponent, selector: "nui-dashwiz-step", inputs: { stepTemplate: "stepTemplate", stepControl: "stepControl", title: "title", nextText: "nextText", hidden: "hidden", disabled: "disabled", spinnerSize: "spinnerSize" }, outputs: { enter: "enter", valid: "valid", exit: "exit", next: "next" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"nui-dashwiz-step animated h-100\"\n [ngClass]=\"{ 'nui-dashwiz-step--active': active }\"\n nui-busy\n [busy]=\"busyConfig.busy\"\n>\n <div\n cdkScrollable\n class=\"h-100 overflow-auto configurator-scrollable\"\n >\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 [size]=\"spinnerSize\"\n >\n </nui-spinner>\n</div>\n", styles: [".nui-dashwiz-step{display:none}.nui-dashwiz-step--active{display:block}\n"], dependencies: [{ kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.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: DashwizStepComponent, decorators: [{ type: Component, args: [{ selector: "nui-dashwiz-step", template: "<div\n class=\"nui-dashwiz-step animated h-100\"\n [ngClass]=\"{ 'nui-dashwiz-step--active': active }\"\n nui-busy\n [busy]=\"busyConfig.busy\"\n>\n <div\n cdkScrollable\n class=\"h-100 overflow-auto configurator-scrollable\"\n >\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 [size]=\"spinnerSize\"\n >\n </nui-spinner>\n</div>\n", styles: [".nui-dashwiz-step{display:none}.nui-dashwiz-step--active{display:block}\n"] }] }], ctorParameters: () => [], propDecorators: { stepTemplate: [{ type: Input }], stepControl: [{ type: Input }], title: [{ type: Input }], nextText: [{ type: Input }], hidden: [{ type: Input }], disabled: [{ type: Input }], spinnerSize: [{ type: Input }], enter: [{ type: Output }], valid: [{ type: Output }], exit: [{ type: Output }], next: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaHdpei1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29uZmlndXJhdG9yL2NvbXBvbmVudHMvd2l6YXJkL2Rhc2h3aXotc3RlcC9kYXNod2l6LXN0ZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25maWd1cmF0b3IvY29tcG9uZW50cy93aXphcmQvZGFzaHdpei1zdGVwL2Rhc2h3aXotc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixXQUFXLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFJekQ7O0dBRUc7QUFNSCxNQUFNLE9BQU8sb0JBQW9CO0lBaUU3QjtRQTlDQTs7V0FFRztRQUNhLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFLL0I7O1dBRUc7UUFDYSxnQkFBVyxHQUFnQixXQUFXLENBQUMsS0FBSyxDQUFDO1FBQzdEOztXQUVHO1FBQ2MsVUFBSyxHQUNsQixJQUFJLFlBQVksRUFBcUMsQ0FBQztRQUMxRDs7V0FFRztRQUNjLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3JEOztXQUVHO1FBQ2MsU0FBSSxHQUNqQixJQUFJLFlBQVksRUFBcUMsQ0FBQztRQUMxRDs7V0FFRztRQUNjLFNBQUksR0FDakIsSUFBSSxZQUFZLEVBQXFDLENBQUM7UUFFMUQ7OztXQUdHO1FBQ0ksZUFBVSxHQUFnQjtZQUM3QixJQUFJLEVBQUUsS0FBSztTQUNkLENBQUM7UUFFSyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxNQUFNLENBQUM7UUFDZCxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBY3RCOztXQUVHO1FBQ0ksY0FBUyxHQUFHLENBQUMsS0FBa0MsRUFBUSxFQUFFO1lBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQztRQUVGOztXQUVHO1FBQ0ksYUFBUSxHQUFHLENBQUMsS0FBa0MsRUFBUSxFQUFFO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVLLGFBQVEsR0FBRyxDQUFDLEtBQWtDLEVBQVEsRUFBRTtZQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFFSyxzQkFBaUIsR0FBRyxHQUFTLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBRUsscUJBQWdCLEdBQUcsR0FBUyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQztJQXpDYSxDQUFDO0lBRVQsUUFBUTtRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUEsTUFBTSxDQUFDO0lBQ3JELENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDckMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztrSUEzRVEsb0JBQW9CO3NIQUFwQixvQkFBb0Isc1VDM0NqQywwakJBb0JBOzs0RkR1QmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNJLGtCQUFrQjt3REFVWixZQUFZO3NCQUEzQixLQUFLO2dCQUlVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBSVUsS0FBSztzQkFBcEIsS0FBSztnQkFJVSxRQUFRO3NCQUF2QixLQUFLO2dCQUlVLE1BQU07c0JBQXJCLEtBQUs7Z0JBSVUsUUFBUTtzQkFBdkIsS0FBSztnQkFJVSxXQUFXO3NCQUExQixLQUFLO2dCQUlXLEtBQUs7c0JBQXJCLE1BQU07Z0JBS1UsS0FBSztzQkFBckIsTUFBTTtnQkFJVSxJQUFJO3NCQUFwQixNQUFNO2dCQUtVLElBQUk7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IElCdXN5Q29uZmlnLCBTcGlubmVyU2l6ZSB9IGZyb20gXCJAbm92YS11aS9iaXRzXCI7XG5cbmltcG9ydCB7IElEYXNod2l6U3RlcENvbXBvbmVudCwgSURhc2h3aXpTdGVwTmF2aWdhdGVkRXZlbnQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBDb21wb25lbnQgdGhhdCBwcm92aWRlcyB3aXphcmQgc3RlcCBmdW5jdGlvbmFsaXR5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJudWktZGFzaHdpei1zdGVwXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9kYXNod2l6LXN0ZXAuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcIi4vZGFzaHdpei1zdGVwLmNvbXBvbmVudC5sZXNzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXNod2l6U3RlcENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgSURhc2h3aXpTdGVwQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlc1xue1xuICAgIC8qKlxuICAgICAqIFRlbXBsYXRlIGZvciBzdGVwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzdGVwVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKlxuICAgICAqIENoZWNrIGlzIGZvcm0gaW5zaWRlIHN0ZXAgdmFsaWQuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHN0ZXBDb250cm9sPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgdGl0bGUgb2YgdGhlIHN0ZXAuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHRpdGxlOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRGVmYXVsdDonTmV4dCcuIFRleHQgZm9yIHRoZSBOZXh0IGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbmV4dFRleHQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBIaWRlIHN0ZXBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZGVuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgc3RlcFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIGJ1c3kgc3Bpbm5lclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzcGlubmVyU2l6ZTogU3Bpbm5lclNpemUgPSBTcGlubmVyU2l6ZS5MYXJnZTtcbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZWQgd2hlbiB0aGUgc3RlcCBpcyBlbnRlcmVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgZW50ZXIgPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPElEYXNod2l6U3RlcE5hdmlnYXRlZEV2ZW50IHwgdm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZWQgd2hlbiB2YWxpZGl0eSBvZiB0aGUgc3RlcCBpcyBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgdmFsaWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGVkIHdoZW4gdGhlIHN0ZXAgaXMgZXhpdGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgZXhpdCA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8SURhc2h3aXpTdGVwTmF2aWdhdGVkRXZlbnQgfCB2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlZCB3aGVuIHRyeWluZyB0byBnbyB0byB0aGUgbmV4dCBzdGVwLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgbmV4dCA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8SURhc2h3aXpTdGVwTmF2aWdhdGVkRXZlbnQgfCB2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBPcHRpb25zIGZvciBidXN5IHN0YXRlLiBEZWZhdWx0OiBubyBidXN5IHN0YXRlLCB3aXRoIGNsZWFyIGVtcHR5IGJ1c3kgY29tcG9uZW50IHdoZW4gc2V0IHRvIHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgYnVzeUNvbmZpZzogSUJ1c3lDb25maWcgPSB7XG4gICAgICAgIGJ1c3k6IGZhbHNlLFxuICAgIH07XG5cbiAgICBwdWJsaWMgdmlzaXRlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBhY3RpdmUgPSBmYWxzZTtcbiAgICBwdWJsaWMgY29tcGxldGUgPSBmYWxzZTtcbiAgICBwdWJsaWMgaWNvbiA9IFwic3RlcFwiO1xuICAgIHB1YmxpYyBpY29uQ29sb3IgPSBcIlwiO1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5leHRUZXh0ID0gdGhpcy5uZXh0VGV4dCB8fCAkbG9jYWxpemVgTmV4dGA7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbXCJzdGVwQ29udHJvbFwiXSkge1xuICAgICAgICAgICAgdGhpcy52YWxpZC5lbWl0KHRoaXMuc3RlcENvbnRyb2wpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGZsYWdzIGZvciBzdGVwIGVudGVyaW5nIGFuZCBlbWl0cyBlbnRlciBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBlbnRlclN0ZXAgPSAoZXZlbnQ/OiBJRGFzaHdpelN0ZXBOYXZpZ2F0ZWRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmVudGVyLmVtaXQoZXZlbnQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZmxhZ3MgZm9yIHN0ZXAgZXhpdGluZyBhbmQgZW1pdHMgZXhpdCBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBleGl0U3RlcCA9IChldmVudD86IElEYXNod2l6U3RlcE5hdmlnYXRlZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZXhpdC5lbWl0KGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcHVibGljIG5leHRTdGVwID0gKGV2ZW50PzogSURhc2h3aXpTdGVwTmF2aWdhdGVkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5uZXh0LmVtaXQoZXZlbnQpO1xuICAgIH07XG5cbiAgICBwdWJsaWMgYXBwbHlFbnRlcmluZ1N0ZXAgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pY29uID0gXCJzdGVwLWFjdGl2ZVwiO1xuICAgICAgICB0aGlzLmljb25Db2xvciA9IFwiYmxhY2tcIjtcbiAgICB9O1xuXG4gICAgcHVibGljIGFwcGx5RXhpdGluZ1N0ZXAgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmlzaXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaWNvbiA9IFwic3RlcC1jb21wbGV0ZVwiO1xuICAgICAgICB0aGlzLmljb25Db2xvciA9IFwiXCI7XG4gICAgfTtcbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cIm51aS1kYXNod2l6LXN0ZXAgYW5pbWF0ZWQgaC0xMDBcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ251aS1kYXNod2l6LXN0ZXAtLWFjdGl2ZSc6IGFjdGl2ZSB9XCJcbiAgICBudWktYnVzeVxuICAgIFtidXN5XT1cImJ1c3lDb25maWcuYnVzeVwiXG4+XG4gICAgPGRpdlxuICAgICAgICBjZGtTY3JvbGxhYmxlXG4gICAgICAgIGNsYXNzPVwiaC0xMDAgb3ZlcmZsb3ctYXV0byBjb25maWd1cmF0b3Itc2Nyb2xsYWJsZVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG51aS1zcGlubmVyXG4gICAgICAgIFtwZXJjZW50XT1cImJ1c3lDb25maWcucGVyY2VudFwiXG4gICAgICAgIFthbGxvd0NhbmNlbF09XCJidXN5Q29uZmlnLmFsbG93Q2FuY2VsXCJcbiAgICAgICAgW21lc3NhZ2VdPVwiYnVzeUNvbmZpZy5tZXNzYWdlXCJcbiAgICAgICAgW3NpemVdPVwic3Bpbm5lclNpemVcIlxuICAgID5cbiAgICA8L251aS1zcGlubmVyPlxuPC9kaXY+XG4iXX0=