@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
94 lines • 15.7 kB
JavaScript
import { Component, ContentChild, Directive, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
import { sidePanelStateAnimation } from '../side-panel/side-panel-animations';
import { SidePanelComponent } from '../side-panel/side-panel.component';
import { SidePanelService } from '../side-panel/side-panel.service';
import * as i0 from "@angular/core";
import * as i1 from "../../directives/accessibility/focus-indicator/focus-indicator.directive";
import * as i2 from "../../directives/focus-if/focus-if.directive";
import * as i3 from "../icon/icon.component";
export class ItemDisplayPanelContentDirective {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ItemDisplayPanelContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: ItemDisplayPanelContentDirective, selector: "[uxItemDisplayPanelContent]", ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ItemDisplayPanelContentDirective, decorators: [{
type: Directive,
args: [{
selector: '[uxItemDisplayPanelContent]'
}]
}] });
export class ItemDisplayPanelFooterDirective {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ItemDisplayPanelFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: ItemDisplayPanelFooterDirective, selector: "[uxItemDisplayPanelFooter]", ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ItemDisplayPanelFooterDirective, decorators: [{
type: Directive,
args: [{
selector: '[uxItemDisplayPanelFooter]'
}]
}] });
export class ItemDisplayPanelComponent extends SidePanelComponent {
get preventClose() {
return !this.closeOnExternalClick;
}
set preventClose(value) {
this.closeOnExternalClick = !value;
}
set visible(visible) {
this.open = visible;
}
get visible() {
return this.open;
}
constructor() {
super();
this.boxShadow = true;
this.closeVisible = true;
/** Defines the aria-label for the close button */
this.closeAriaLabel = 'Close';
this.shadow = false;
this.visibleChange = new EventEmitter();
this.animate = false;
this.closeOnExternalClick = true;
}
ngOnInit() {
super.ngOnInit();
this.service.open$.pipe(distinctUntilChanged(), takeUntil(this._onDestroy)).subscribe(isVisible => this.visibleChange.emit(isVisible));
}
focus() {
if (this.panel) {
this.panel.nativeElement.focus();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ItemDisplayPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: ItemDisplayPanelComponent, selector: "ux-item-display-panel", inputs: { header: "header", boxShadow: "boxShadow", closeVisible: "closeVisible", preventClose: "preventClose", closeAriaLabel: "closeAriaLabel", shadow: "shadow", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, host: { classAttribute: "ux-side-panel ux-item-display-panel" }, providers: [SidePanelService], queries: [{ propertyName: "footer", first: true, predicate: ItemDisplayPanelFooterDirective, descendants: true }], viewQueries: [{ propertyName: "panel", first: true, predicate: ["panel"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "@if (open) {\n <div class=\"ux-side-panel-host ux-item-display-panel\" #panel\n [class.box-shadow]=\"boxShadow\"\n [style.position]=\"position\"\n [style.width]=\"hostWidth\"\n [style.top]=\"cssTop\"\n [@panelState]=\"animationPanelState\"\n [tabindex]=\"open ? 0 : -1\"\n [focusIf]=\"open && focusOnShow\"\n >\n <div class=\"ux-side-panel-header\" [class.item-display-panel-shadow]=\"shadow\">\n <h3>{{ header }}</h3>\n @if (closeVisible) {\n <button\n uxFocusIndicator\n [attr.aria-label]=\"closeAriaLabel\"\n type=\"button\"\n class=\"btn btn-lg btn-link btn-icon button-secondary\"\n (click)=\"visible = false\">\n <ux-icon name=\"close\"></ux-icon>\n </button>\n }\n </div>\n <div class=\"ux-side-panel-content\">\n <ng-content select=\"[uxItemDisplayPanelContent]\"></ng-content>\n </div>\n @if (footer) {\n <div class=\"ux-side-panel-footer\">\n <ng-content select=\"[uxItemDisplayPanelFooter]\"></ng-content>\n </div>\n }\n </div>\n}\n", dependencies: [{ kind: "directive", type: i1.FocusIndicatorDirective, selector: "[uxFocusIndicator]", inputs: ["checkChildren", "mouseFocusIndicator", "touchFocusIndicator", "keyboardFocusIndicator", "programmaticFocusIndicator"], outputs: ["indicator"], exportAs: ["ux-focus-indicator"] }, { kind: "directive", type: i2.FocusIfDirective, selector: "[focusIf]", inputs: ["focusIfDelay", "focusIfScroll", "focusIf"] }, { kind: "component", type: i3.IconComponent, selector: "ux-icon", inputs: ["name", "size", "rotate", "flipHorizontal", "flipVertical"] }], animations: [sidePanelStateAnimation] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ItemDisplayPanelComponent, decorators: [{
type: Component,
args: [{ selector: 'ux-item-display-panel', providers: [SidePanelService], animations: [sidePanelStateAnimation], host: {
'class': 'ux-side-panel ux-item-display-panel'
}, template: "@if (open) {\n <div class=\"ux-side-panel-host ux-item-display-panel\" #panel\n [class.box-shadow]=\"boxShadow\"\n [style.position]=\"position\"\n [style.width]=\"hostWidth\"\n [style.top]=\"cssTop\"\n [@panelState]=\"animationPanelState\"\n [tabindex]=\"open ? 0 : -1\"\n [focusIf]=\"open && focusOnShow\"\n >\n <div class=\"ux-side-panel-header\" [class.item-display-panel-shadow]=\"shadow\">\n <h3>{{ header }}</h3>\n @if (closeVisible) {\n <button\n uxFocusIndicator\n [attr.aria-label]=\"closeAriaLabel\"\n type=\"button\"\n class=\"btn btn-lg btn-link btn-icon button-secondary\"\n (click)=\"visible = false\">\n <ux-icon name=\"close\"></ux-icon>\n </button>\n }\n </div>\n <div class=\"ux-side-panel-content\">\n <ng-content select=\"[uxItemDisplayPanelContent]\"></ng-content>\n </div>\n @if (footer) {\n <div class=\"ux-side-panel-footer\">\n <ng-content select=\"[uxItemDisplayPanelFooter]\"></ng-content>\n </div>\n }\n </div>\n}\n" }]
}], ctorParameters: () => [], propDecorators: { header: [{
type: Input
}], boxShadow: [{
type: Input
}], closeVisible: [{
type: Input
}], preventClose: [{
type: Input
}], closeAriaLabel: [{
type: Input
}], shadow: [{
type: Input
}], visibleChange: [{
type: Output
}], footer: [{
type: ContentChild,
args: [ItemDisplayPanelFooterDirective, { static: false }]
}], panel: [{
type: ViewChild,
args: ['panel', { static: true }]
}], visible: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1kaXNwbGF5LXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2l0ZW0tZGlzcGxheS1wYW5lbC9pdGVtLWRpc3BsYXktcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvaXRlbS1kaXNwbGF5LXBhbmVsL2l0ZW0tZGlzcGxheS1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7QUFLcEUsTUFBTSxPQUFPLGdDQUFnQzsrR0FBaEMsZ0NBQWdDO21HQUFoQyxnQ0FBZ0M7OzRGQUFoQyxnQ0FBZ0M7a0JBSDVDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDZCQUE2QjtpQkFDMUM7O0FBTUQsTUFBTSxPQUFPLCtCQUErQjsrR0FBL0IsK0JBQStCO21HQUEvQiwrQkFBK0I7OzRGQUEvQiwrQkFBK0I7a0JBSDNDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDRCQUE0QjtpQkFDekM7O0FBWUQsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGtCQUFrQjtJQVE3RCxJQUFJLFlBQVk7UUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUNJLFlBQVksQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBYUQsSUFDSSxPQUFPLENBQUMsT0FBZ0I7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQWxDSCxjQUFTLEdBQVksSUFBSSxDQUFDO1FBRTFCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBV3RDLGtEQUFrRDtRQUN6QyxtQkFBYyxHQUFXLE9BQU8sQ0FBQztRQUVqQyxXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXZCLGtCQUFhLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFrQnpFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0ksQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDTCxDQUFDOytHQXJEUSx5QkFBeUI7bUdBQXpCLHlCQUF5Qix3VkFOdkIsQ0FBQyxnQkFBZ0IsQ0FBQyw4REE4QmYsK0JBQStCLHFMQ2pEakQsc2tDQWlDQSwyakJEYmdCLENBQUMsdUJBQXVCLENBQUM7OzRGQUs1Qix5QkFBeUI7a0JBVHJDLFNBQVM7K0JBQ0ksdUJBQXVCLGFBRXRCLENBQUMsZ0JBQWdCLENBQUMsY0FDakIsQ0FBQyx1QkFBdUIsQ0FBQyxRQUMvQjt3QkFDRixPQUFPLEVBQUUscUNBQXFDO3FCQUNqRDt3REFJUSxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQU9GLFlBQVk7c0JBRGYsS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUUyRCxNQUFNO3NCQUF2RSxZQUFZO3VCQUFDLCtCQUErQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFMUIsS0FBSztzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdoQyxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgc2lkZVBhbmVsU3RhdGVBbmltYXRpb24gfSBmcm9tICcuLi9zaWRlLXBhbmVsL3NpZGUtcGFuZWwtYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTaWRlUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9zaWRlLXBhbmVsL3NpZGUtcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IFNpZGVQYW5lbFNlcnZpY2UgfSBmcm9tICcuLi9zaWRlLXBhbmVsL3NpZGUtcGFuZWwuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3V4SXRlbURpc3BsYXlQYW5lbENvbnRlbnRdJ1xufSlcbmV4cG9ydCBjbGFzcyBJdGVtRGlzcGxheVBhbmVsQ29udGVudERpcmVjdGl2ZSB7IH1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdXhJdGVtRGlzcGxheVBhbmVsRm9vdGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgSXRlbURpc3BsYXlQYW5lbEZvb3RlckRpcmVjdGl2ZSB7IH1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1eC1pdGVtLWRpc3BsYXktcGFuZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pdGVtLWRpc3BsYXktcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1NpZGVQYW5lbFNlcnZpY2VdLFxuICAgIGFuaW1hdGlvbnM6IFtzaWRlUGFuZWxTdGF0ZUFuaW1hdGlvbl0sXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAndXgtc2lkZS1wYW5lbCB1eC1pdGVtLWRpc3BsYXktcGFuZWwnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBJdGVtRGlzcGxheVBhbmVsQ29tcG9uZW50IGV4dGVuZHMgU2lkZVBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpIGhlYWRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgYm94U2hhZG93OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGNsb3NlVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBnZXQgcHJldmVudENsb3NlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuY2xvc2VPbkV4dGVybmFsQ2xpY2s7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJldmVudENsb3NlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY2xvc2VPbkV4dGVybmFsQ2xpY2sgPSAhdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIERlZmluZXMgdGhlIGFyaWEtbGFiZWwgZm9yIHRoZSBjbG9zZSBidXR0b24gKi9cbiAgICBASW5wdXQoKSBjbG9zZUFyaWFMYWJlbDogc3RyaW5nID0gJ0Nsb3NlJztcblxuICAgIEBJbnB1dCgpIHNoYWRvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoSXRlbURpc3BsYXlQYW5lbEZvb3RlckRpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pIGZvb3RlcjogSXRlbURpc3BsYXlQYW5lbEZvb3RlckRpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoJ3BhbmVsJywgeyBzdGF0aWM6IHRydWUgfSkgcGFuZWw6IEVsZW1lbnRSZWY7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5vcGVuID0gdmlzaWJsZTtcbiAgICB9XG5cbiAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbjtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmFuaW1hdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbG9zZU9uRXh0ZXJuYWxDbGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuc2VydmljZS5vcGVuJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoaXNWaXNpYmxlID0+IHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGlzVmlzaWJsZSkpO1xuICAgIH1cblxuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG59IiwiQGlmIChvcGVuKSB7XG4gIDxkaXYgY2xhc3M9XCJ1eC1zaWRlLXBhbmVsLWhvc3QgdXgtaXRlbS1kaXNwbGF5LXBhbmVsXCIgI3BhbmVsXG4gICAgW2NsYXNzLmJveC1zaGFkb3ddPVwiYm94U2hhZG93XCJcbiAgICBbc3R5bGUucG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgIFtzdHlsZS53aWR0aF09XCJob3N0V2lkdGhcIlxuICAgIFtzdHlsZS50b3BdPVwiY3NzVG9wXCJcbiAgICBbQHBhbmVsU3RhdGVdPVwiYW5pbWF0aW9uUGFuZWxTdGF0ZVwiXG4gICAgW3RhYmluZGV4XT1cIm9wZW4gPyAwIDogLTFcIlxuICAgIFtmb2N1c0lmXT1cIm9wZW4gJiYgZm9jdXNPblNob3dcIlxuICAgID5cbiAgICA8ZGl2IGNsYXNzPVwidXgtc2lkZS1wYW5lbC1oZWFkZXJcIiBbY2xhc3MuaXRlbS1kaXNwbGF5LXBhbmVsLXNoYWRvd109XCJzaGFkb3dcIj5cbiAgICAgIDxoMz57eyBoZWFkZXIgfX08L2gzPlxuICAgICAgQGlmIChjbG9zZVZpc2libGUpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHV4Rm9jdXNJbmRpY2F0b3JcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNsb3NlQXJpYUxhYmVsXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGcgYnRuLWxpbmsgYnRuLWljb24gYnV0dG9uLXNlY29uZGFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cInZpc2libGUgPSBmYWxzZVwiPlxuICAgICAgICAgIDx1eC1pY29uIG5hbWU9XCJjbG9zZVwiPjwvdXgtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInV4LXNpZGUtcGFuZWwtY29udGVudFwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3V4SXRlbURpc3BsYXlQYW5lbENvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIEBpZiAoZm9vdGVyKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidXgtc2lkZS1wYW5lbC1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3V4SXRlbURpc3BsYXlQYW5lbEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19