@nova-ui/bits
Version:
SolarWinds Nova Framework
123 lines • 22.6 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 { animate, state, style, transition, trigger, } from "@angular/animations";
import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, ViewEncapsulation, } from "@angular/core";
import { Subject } from "rxjs";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../icon/icon.component";
import * as i3 from "../button/button.component";
// <example-url>./../examples/index.html#/message</example-url>
export class MessageComponent {
static { this.ICON_MAP = {
ok: "severity_ok",
warning: "severity_warning",
critical: "severity_critical",
info: "severity_info",
}; }
static { this.UNKNOWN_ICON = "severity_unknown"; }
get role() {
return this.type === "ok" || this.type === "info" ? "status" : "alert";
}
constructor(element, renderer) {
this.element = element;
this.renderer = renderer;
this.isHidden = false;
this.allowDismiss = true;
/**
* emits value when user closed message by clicking (x) button
*/
this.dismiss = new EventEmitter();
this.dismissState = "initial";
}
ngOnInit() {
if (this.manualControl) {
this.dismissSubscription = this.manualControl.subscribe((shown) => {
this.dismissState = shown ? "initial" : "dismissed";
});
}
}
ngOnDestroy() {
this.dismiss.complete();
if (this.dismissSubscription) {
this.dismissSubscription.unsubscribe();
}
}
dismissMessage() {
this.dismissState = "dismissed";
this.dismiss.emit();
}
animationFinished(event) {
if (event.toState === "dismissed") {
if (this.manualControl) {
this.isHidden = true;
}
else {
this.renderer.removeChild(this.element.nativeElement.parentNode, this.element.nativeElement);
}
}
}
animationStart(event) {
if (event.fromState === "dismissed") {
this.isHidden = false;
}
}
get messageClass() {
return this.type ? `nui-message-${this.type.toLowerCase()}` : "";
}
get icon() {
return (MessageComponent.ICON_MAP[this.type ?? ""] ||
MessageComponent.UNKNOWN_ICON);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MessageComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MessageComponent, selector: "nui-message", inputs: { type: "type", allowDismiss: "allowDismiss", manualControl: "manualControl" }, outputs: { dismiss: "dismiss" }, host: { properties: { "attr.role": "role", "class.d-none": "this.isHidden" } }, ngImport: i0, template: "<div\n [@dismiss]=\"dismissState\"\n (@dismiss.done)=\"animationFinished($event)\"\n (@dismiss.start)=\"animationStart($event)\"\n class=\"nui-flex-container nui-flex--nowrap nui-message {{ messageClass }}\"\n [ngClass]=\"{ 'nui-message-allow-dismiss': allowDismiss }\"\n>\n <nui-icon class=\"nui-message-icon\" [icon]=\"icon\"></nui-icon>\n\n <div class=\"nui-message-content\">\n <span class=\"nui-message-content-text\">\n <ng-content></ng-content>\n </span>\n </div>\n\n <div class=\"nui-message-dismiss-button\" *ngIf=\"allowDismiss\">\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n size=\"default\"\n icon=\"close\"\n (click)=\"dismissMessage()\"\n ></button>\n </div>\n</div>\n", styles: [".nui .nui-message{align-items:flex-start;border-radius:0;border:solid 1px;font-size:13px;justify-content:flex-start;margin-bottom:10px;padding:10px;position:relative}.nui .nui-message-critical{background-color:var(--nui-color-semantic-critical-bg,#fceae6);border-color:var(--nui-color-line-critical,#dd2c00);color:var(--nui-color-text-default,#111)}.nui .nui-message-warning{background-color:var(--nui-color-semantic-warning-bg,#fff9e6);border-color:var(--nui-color-line-warning,#fec405);color:var(--nui-color-text-default,#111)}.nui .nui-message-ok{background-color:var(--nui-color-semantic-ok-bg,#e6f6ee);border-color:var(--nui-color-line-ok,#00a753);color:var(--nui-color-text-default,#111)}.nui .nui-message-info{background-color:var(--nui-color-semantic-info-bg,#e8f4f7);border-color:var(--nui-color-line-info,#1c8eb1);color:var(--nui-color-text-default,#111)}.nui .nui-message-content{margin-left:10px}.nui .nui-message-content-text{vertical-align:middle}.nui .nui-message-icon{align-items:center;display:flex;height:calc(1em * 1.66666667);min-width:16px}.nui .nui-message-allow-dismiss .nui-message-content{margin-right:31px}.nui .nui-message-dismiss-button{border:none;display:block;padding:0;position:absolute;right:5px;top:calc(((1em * 1.66666667) + (10px * 2) - 16px - (1px * 2) - (6px * 2)) / 2)}.nui .nui-message-dismiss-button:hover,.nui .nui-message-dismiss-button:active,.nui .nui-message-dismiss-button:focus{background-color:var(--nui-color-bg-transparent,transparent)}.nui .nui-message .nui-icon{display:block;float:left;margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "nui-icon", inputs: ["iconColor", "brushType", "iconHoverColor", "iconSize", "cssClass", "fillContainer", "status", "childStatus", "icon", "counter"] }, { kind: "component", type: i3.ButtonComponent, selector: "[nui-button]", inputs: ["displayStyle", "icon", "iconColor", "iconRight", "isBusy", "isEmpty", "ariaLabel", "isRepeat", "size"] }], animations: [
trigger("dismiss", [
state("initial", style({})),
state("dismissed", style({
opacity: 0,
})),
transition("initial <=> dismissed", animate(`0.3s linear`)),
]),
], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MessageComponent, decorators: [{
type: Component,
args: [{ selector: "nui-message", animations: [
trigger("dismiss", [
state("initial", style({})),
state("dismissed", style({
opacity: 0,
})),
transition("initial <=> dismissed", animate(`0.3s linear`)),
]),
], encapsulation: ViewEncapsulation.None, host: { "[attr.role]": "role" }, template: "<div\n [@dismiss]=\"dismissState\"\n (@dismiss.done)=\"animationFinished($event)\"\n (@dismiss.start)=\"animationStart($event)\"\n class=\"nui-flex-container nui-flex--nowrap nui-message {{ messageClass }}\"\n [ngClass]=\"{ 'nui-message-allow-dismiss': allowDismiss }\"\n>\n <nui-icon class=\"nui-message-icon\" [icon]=\"icon\"></nui-icon>\n\n <div class=\"nui-message-content\">\n <span class=\"nui-message-content-text\">\n <ng-content></ng-content>\n </span>\n </div>\n\n <div class=\"nui-message-dismiss-button\" *ngIf=\"allowDismiss\">\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n size=\"default\"\n icon=\"close\"\n (click)=\"dismissMessage()\"\n ></button>\n </div>\n</div>\n", styles: [".nui .nui-message{align-items:flex-start;border-radius:0;border:solid 1px;font-size:13px;justify-content:flex-start;margin-bottom:10px;padding:10px;position:relative}.nui .nui-message-critical{background-color:var(--nui-color-semantic-critical-bg,#fceae6);border-color:var(--nui-color-line-critical,#dd2c00);color:var(--nui-color-text-default,#111)}.nui .nui-message-warning{background-color:var(--nui-color-semantic-warning-bg,#fff9e6);border-color:var(--nui-color-line-warning,#fec405);color:var(--nui-color-text-default,#111)}.nui .nui-message-ok{background-color:var(--nui-color-semantic-ok-bg,#e6f6ee);border-color:var(--nui-color-line-ok,#00a753);color:var(--nui-color-text-default,#111)}.nui .nui-message-info{background-color:var(--nui-color-semantic-info-bg,#e8f4f7);border-color:var(--nui-color-line-info,#1c8eb1);color:var(--nui-color-text-default,#111)}.nui .nui-message-content{margin-left:10px}.nui .nui-message-content-text{vertical-align:middle}.nui .nui-message-icon{align-items:center;display:flex;height:calc(1em * 1.66666667);min-width:16px}.nui .nui-message-allow-dismiss .nui-message-content{margin-right:31px}.nui .nui-message-dismiss-button{border:none;display:block;padding:0;position:absolute;right:5px;top:calc(((1em * 1.66666667) + (10px * 2) - 16px - (1px * 2) - (6px * 2)) / 2)}.nui .nui-message-dismiss-button:hover,.nui .nui-message-dismiss-button:active,.nui .nui-message-dismiss-button:focus{background-color:var(--nui-color-bg-transparent,transparent)}.nui .nui-message .nui-icon{display:block;float:left;margin:0}\n"] }]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { isHidden: [{
type: HostBinding,
args: ["class.d-none"]
}], type: [{
type: Input
}], allowDismiss: [{
type: Input
}], manualControl: [{
type: Input
}], dismiss: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lc3NhZ2UvbWVzc2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL21lc3NhZ2UvbWVzc2FnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUNILE9BQU8sRUFFUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFFN0MsK0RBQStEO0FBb0IvRCxNQUFNLE9BQU8sZ0JBQWdCO2FBQ1gsYUFBUSxHQUE2QjtRQUMvQyxFQUFFLEVBQUUsYUFBYTtRQUNqQixPQUFPLEVBQUUsa0JBQWtCO1FBQzNCLFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsSUFBSSxFQUFFLGVBQWU7S0FDeEIsQUFMcUIsQ0FLcEI7YUFDWSxpQkFBWSxHQUFHLGtCQUFrQixBQUFyQixDQUFzQjtJQWdCaEQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJ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SyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQzNCLEtBQUssQ0FDRCxXQUFXLEVBQ1gsS0FBSyxDQUFDO2dDQUNGLE9BQU8sRUFBRSxDQUFDOzZCQUNiLENBQUMsQ0FDTDs0QkFDRCxVQUFVLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO3lCQUM5RCxDQUFDO3FCQUNMLGlCQUVjLGlCQUFpQixDQUFDLElBQUksUUFDL0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFO3VHQVdGLFFBQVE7c0JBQXBDLFdBQVc7dUJBQUMsY0FBYztnQkFFWCxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFLVyxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7XG4gICAgYW5pbWF0ZSxcbiAgICBBbmltYXRpb25FdmVudCxcbiAgICBzdGF0ZSxcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uLFxuICAgIHRyaWdnZXIsXG59IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuXG4vLyA8ZXhhbXBsZS11cmw+Li8uLi9leGFtcGxlcy9pbmRleC5odG1sIy9tZXNzYWdlPC9leGFtcGxlLXVybD5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm51aS1tZXNzYWdlXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9tZXNzYWdlLmNvbXBvbmVudC5odG1sXCIsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKFwiZGlzbWlzc1wiLCBbXG4gICAgICAgICAgICBzdGF0ZShcImluaXRpYWxcIiwgc3R5bGUoe30pKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgIFwiZGlzbWlzc2VkXCIsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbihcImluaXRpYWwgPD0+IGRpc21pc3NlZFwiLCBhbmltYXRlKGAwLjNzIGxpbmVhcmApKSxcbiAgICAgICAgXSksXG4gICAgXSxcbiAgICBzdHlsZVVybHM6IFtcIi4vbWVzc2FnZS5jb21wb25lbnQubGVzc1wiXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgXCJbYXR0ci5yb2xlXVwiOiBcInJvbGVcIiB9LFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzdGF0aWMgSUNPTl9NQVA6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgb2s6IFwic2V2ZXJpdHlfb2tcIixcbiAgICAgICAgd2FybmluZzogXCJzZXZlcml0eV93YXJuaW5nXCIsXG4gICAgICAgIGNyaXRpY2FsOiBcInNldmVyaXR5X2NyaXRpY2FsXCIsXG4gICAgICAgIGluZm86IFwic2V2ZXJpdHlfaW5mb1wiLFxuICAgIH07XG4gICAgcHVibGljIHN0YXRpYyBVTktOT1dOX0lDT04gPSBcInNldmVyaXR5X3Vua25vd25cIjtcblxuICAgIEBIb3N0QmluZGluZyhcImNsYXNzLmQtbm9uZVwiKSBpc0hpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgcHVibGljIHR5cGU6IG51bGwgfCBcIm9rXCIgfCBcImluZm9cIiB8IFwiY3JpdGljYWxcIiB8IFwid2FybmluZ1wiO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd0Rpc21pc3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYW51YWxDb250cm9sOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gICAgLyoqXG4gICAgICogZW1pdHMgdmFsdWUgd2hlbiB1c2VyIGNsb3NlZCBtZXNzYWdlIGJ5IGNsaWNraW5nICh4KSBidXR0b25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIGRpc21pc3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwdWJsaWMgZGlzbWlzc1N0YXRlOiBcImluaXRpYWxcIiB8IFwiZGlzbWlzc2VkXCIgPSBcImluaXRpYWxcIjtcbiAgICBwcml2YXRlIGRpc21pc3NTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGdldCByb2xlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFwib2tcIiB8fCB0aGlzLnR5cGUgPT09IFwiaW5mb1wiID8gXCJzdGF0dXNcIiA6IFwiYWxlcnRcIjtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubWFudWFsQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5kaXNtaXNzU3Vic2NyaXB0aW9uID0gdGhpcy5tYW51YWxDb250cm9sLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoc2hvd246IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNtaXNzU3RhdGUgPSBzaG93biA/IFwiaW5pdGlhbFwiIDogXCJkaXNtaXNzZWRcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc21pc3MuY29tcGxldGUoKTtcbiAgICAgICAgaWYgKHRoaXMuZGlzbWlzc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kaXNtaXNzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzbWlzc01lc3NhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzbWlzc1N0YXRlID0gXCJkaXNtaXNzZWRcIjtcbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYW5pbWF0aW9uRmluaXNoZWQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC50b1N0YXRlID09PSBcImRpc21pc3NlZFwiKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYW51YWxDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0hpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhbmltYXRpb25TdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gXCJkaXNtaXNzZWRcIikge1xuICAgICAgICAgICAgdGhpcy5pc0hpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZXNzYWdlQ2xhc3MoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA/IGBudWktbWVzc2FnZS0ke3RoaXMudHlwZS50b0xvd2VyQ2FzZSgpfWAgOiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWNvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgTWVzc2FnZUNvbXBvbmVudC5JQ09OX01BUFt0aGlzLnR5cGUgPz8gXCJcIl0gfHxcbiAgICAgICAgICAgIE1lc3NhZ2VDb21wb25lbnQuVU5LTk9XTl9JQ09OXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFtAZGlzbWlzc109XCJkaXNtaXNzU3RhdGVcIlxuICAgIChAZGlzbWlzcy5kb25lKT1cImFuaW1hdGlvbkZpbmlzaGVkKCRldmVudClcIlxuICAgIChAZGlzbWlzcy5zdGFydCk9XCJhbmltYXRpb25TdGFydCgkZXZlbnQpXCJcbiAgICBjbGFzcz1cIm51aS1mbGV4LWNvbnRhaW5lciBudWktZmxleC0tbm93cmFwIG51aS1tZXNzYWdlIHt7IG1lc3NhZ2VDbGFzcyB9fVwiXG4gICAgW25nQ2xhc3NdPVwieyAnbnVpLW1lc3NhZ2UtYWxsb3ctZGlzbWlzcyc6IGFsbG93RGlzbWlzcyB9XCJcbj5cbiAgICA8bnVpLWljb24gY2xhc3M9XCJudWktbWVzc2FnZS1pY29uXCIgW2ljb25dPVwiaWNvblwiPjwvbnVpLWljb24+XG5cbiAgICA8ZGl2IGNsYXNzPVwibnVpLW1lc3NhZ2UtY29udGVudFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm51aS1tZXNzYWdlLWNvbnRlbnQtdGV4dFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibnVpLW1lc3NhZ2UtZGlzbWlzcy1idXR0b25cIiAqbmdJZj1cImFsbG93RGlzbWlzc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBudWktYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGRpc3BsYXlTdHlsZT1cImFjdGlvblwiXG4gICAgICAgICAgICBzaXplPVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBpY29uPVwiY2xvc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc21pc3NNZXNzYWdlKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==