UNPKG

ng-devui

Version:

DevUI components based on Angular

82 lines 21.5 kB
import { __decorate, __metadata } from "tslib"; import { transition, trigger } from '@angular/animations'; import { Component, ContentChild, EventEmitter, Input, Output } from '@angular/core'; import { DevConfigService, expandCollapseForDomDestroy, WithConfig } from 'ng-devui/utils'; import { PanelBodyComponent } from './panel-body.component'; import { PanelFooterComponent } from './panel-footer.component'; import { PanelHeaderComponent } from './panel-header.component'; import * as i0 from "@angular/core"; import * as i1 from "ng-devui/utils"; import * as i2 from "@angular/common"; export class PanelComponent { constructor(devConfigService) { this.devConfigService = devConfigService; this.type = 'default'; this.hasLeftPadding = true; this.showAnimation = true; this.toggle = new EventEmitter(); } toggleBody() { this.canToggle().then((val) => { if (!val) { return; } if (this.isCollapsed !== undefined) { this.isCollapsed = !this.isCollapsed; this.toggle.emit(this.isCollapsed); } }); } canToggle() { let changeResult = Promise.resolve(true); if (this.beforeToggle) { const result = this.beforeToggle(this.isCollapsed); if (typeof result !== 'undefined') { if (result.then) { changeResult = result; } else if (result.subscribe) { changeResult = result.toPromise(); } else { changeResult = Promise.resolve(result); } } } return changeResult; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PanelComponent, deps: [{ token: i1.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PanelComponent, selector: "d-panel", inputs: { type: "type", cssClass: "cssClass", isCollapsed: "isCollapsed", hasLeftPadding: "hasLeftPadding", showAnimation: "showAnimation", beforeToggle: "beforeToggle" }, outputs: { toggle: "toggle" }, queries: [{ propertyName: "panelHeader", first: true, predicate: PanelHeaderComponent, descendants: true }, { propertyName: "panelFooter", first: true, predicate: PanelFooterComponent, descendants: true }, { propertyName: "panelBody", first: true, predicate: PanelBodyComponent, descendants: true }], ngImport: i0, template: "<div class=\"devui-panel devui-panel-{{ type }} {{ cssClass }}\" [@noAnimation]>\n <div class=\"devui-panel-heading\" (click)=\"toggleBody()\" [style.cursor]=\"isCollapsed !== undefined ? 'pointer' : null\">\n <ng-content select=\"d-panel-header\"></ng-content>\n </div>\n <div\n class=\"devui-panel-body\"\n [ngClass]=\"{ 'devui-panel-body-collapse': isCollapsed !== undefined, 'has-left-padding': hasLeftPadding }\"\n @collapseForDomDestroy\n [@.disabled]=\"!showAnimation\"\n *ngIf=\"isCollapsed === undefined || isCollapsed\"\n >\n <ng-container *ngIf=\"panelFooter || panelHeader || panelBody; else elseTemplate\">\n <ng-template [ngTemplateOutlet]=\"panelBodyTpl\"></ng-template>\n </ng-container>\n <ng-template #elseTemplate>\n <div class=\"d-panel-body\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n </div>\n <div class=\"devui-panel-footer\" *ngIf=\"panelFooter\">\n <ng-content select=\"d-panel-footer\"></ng-content>\n </div>\n</div>\n\n<ng-template #panelBodyTpl>\n <ng-content select=\"d-panel-body\"></ng-content>\n</ng-template>\n", styles: [":host ::ng-deep{display:block}:host ::ng-deep .devui-panel{line-height:1.5;background-color:var(--devui-base-bg, #ffffff)}:host ::ng-deep .devui-panel .devui-panel-heading{padding:12px 20px;color:var(--devui-text, #191919)}:host ::ng-deep .devui-panel .devui-panel-heading d-panel-header{line-height:1.5}:host ::ng-deep .devui-panel .devui-panel-body{display:flex;position:relative;border-top:1px solid var(--devui-dividing-line, #f0f0f0)}:host ::ng-deep .devui-panel .devui-panel-body .d-panel-body{line-height:1.5;padding:20px;background:var(--devui-base-bg, #ffffff);flex:1}:host ::ng-deep .devui-panel .devui-panel-body.devui-panel-body-collapse:before{content:none}:host ::ng-deep .devui-panel .devui-panel-body.devui-panel-body-collapse .d-panel-body{border-left:none}:host ::ng-deep .devui-panel .devui-panel-body.devui-panel-body-collapse.has-left-padding:before{content:\"\";width:30px;height:100%}:host ::ng-deep .devui-panel .devui-panel-body.devui-panel-body-collapse.has-left-padding .d-panel-body{border-left:2px solid var(--devui-dividing-line, #f0f0f0)}:host ::ng-deep .devui-panel .devui-panel-footer{padding:12px 20px;color:var(--devui-text, #191919);background-color:var(--devui-area, #f3f3f3)}:host ::ng-deep .devui-panel .devui-panel-footer d-panel-footer{line-height:1.5}:host ::ng-deep .devui-panel.devui-panel-default .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-default .devui-panel-body,:host ::ng-deep .devui-panel.devui-panel-common .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-common .devui-panel-body{background-color:var(--devui-default-bg, #fafafa)}:host ::ng-deep .devui-panel.devui-panel-primary .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-primary .devui-panel-body{background-color:var(--devui-primary-bg, #e6eeff)}:host ::ng-deep .devui-panel.devui-panel-primary .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-primary-line, #0a59f7)}:host ::ng-deep .devui-panel.devui-panel-info .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-info .devui-panel-body{background-color:var(--devui-info-bg, #cedefd)}:host ::ng-deep .devui-panel.devui-panel-info .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-info-line, #0a59f7)}:host ::ng-deep .devui-panel.devui-panel-success .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-success .devui-panel-body{background-color:var(--devui-success-bg, #bcf2db)}:host ::ng-deep .devui-panel.devui-panel-success .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-success-line, #09aa71)}:host ::ng-deep .devui-panel.devui-panel-warning .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-warning .devui-panel-body{background-color:var(--devui-warning-bg, #fde2bd)}:host ::ng-deep .devui-panel.devui-panel-warning .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-warning-line, #f4840c)}:host ::ng-deep .devui-panel.devui-panel-danger .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-danger .devui-panel-body{background-color:var(--devui-danger-bg, #fabdc1)}:host ::ng-deep .devui-panel.devui-panel-danger .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-danger-line, #e02128)}:host ::ng-deep .devui-panel.devui-panel-ghost .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-ghost .devui-panel-body{background-color:transparent;border:none;padding:0}:host ::ng-deep .devui-panel.devui-panel-ghost .d-panel-body{padding:16px 20px}:host ::ng-deep .devui-panel.devui-panel-ghost .devui-panel-body-collapse.has-left-padding:before{display:none}:host ::ng-deep .devui-panel.devui-panel-ghost .devui-panel-body-collapse.has-left-padding .d-panel-body{border:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [trigger('noAnimation', [transition(':enter', [])]), expandCollapseForDomDestroy] }); } } __decorate([ WithConfig(), __metadata("design:type", Object) ], PanelComponent.prototype, "showAnimation", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PanelComponent, decorators: [{ type: Component, args: [{ selector: 'd-panel', animations: [trigger('noAnimation', [transition(':enter', [])]), expandCollapseForDomDestroy], template: "<div class=\"devui-panel devui-panel-{{ type }} {{ cssClass }}\" [@noAnimation]>\n <div class=\"devui-panel-heading\" (click)=\"toggleBody()\" [style.cursor]=\"isCollapsed !== undefined ? 'pointer' : null\">\n <ng-content select=\"d-panel-header\"></ng-content>\n </div>\n <div\n class=\"devui-panel-body\"\n [ngClass]=\"{ 'devui-panel-body-collapse': isCollapsed !== undefined, 'has-left-padding': hasLeftPadding }\"\n @collapseForDomDestroy\n [@.disabled]=\"!showAnimation\"\n *ngIf=\"isCollapsed === undefined || isCollapsed\"\n >\n <ng-container *ngIf=\"panelFooter || panelHeader || panelBody; else elseTemplate\">\n <ng-template [ngTemplateOutlet]=\"panelBodyTpl\"></ng-template>\n </ng-container>\n <ng-template #elseTemplate>\n <div class=\"d-panel-body\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n </div>\n <div class=\"devui-panel-footer\" *ngIf=\"panelFooter\">\n <ng-content select=\"d-panel-footer\"></ng-content>\n </div>\n</div>\n\n<ng-template #panelBodyTpl>\n <ng-content select=\"d-panel-body\"></ng-content>\n</ng-template>\n", styles: [":host ::ng-deep{display:block}:host ::ng-deep .devui-panel{line-height:1.5;background-color:var(--devui-base-bg, #ffffff)}:host ::ng-deep .devui-panel .devui-panel-heading{padding:12px 20px;color:var(--devui-text, #191919)}:host ::ng-deep .devui-panel .devui-panel-heading d-panel-header{line-height:1.5}:host ::ng-deep .devui-panel .devui-panel-body{display:flex;position:relative;border-top:1px solid var(--devui-dividing-line, #f0f0f0)}:host ::ng-deep .devui-panel .devui-panel-body .d-panel-body{line-height:1.5;padding:20px;background:var(--devui-base-bg, #ffffff);flex:1}:host ::ng-deep .devui-panel .devui-panel-body.devui-panel-body-collapse:before{content:none}:host ::ng-deep .devui-panel .devui-panel-body.devui-panel-body-collapse .d-panel-body{border-left:none}:host ::ng-deep .devui-panel .devui-panel-body.devui-panel-body-collapse.has-left-padding:before{content:\"\";width:30px;height:100%}:host ::ng-deep .devui-panel .devui-panel-body.devui-panel-body-collapse.has-left-padding .d-panel-body{border-left:2px solid var(--devui-dividing-line, #f0f0f0)}:host ::ng-deep .devui-panel .devui-panel-footer{padding:12px 20px;color:var(--devui-text, #191919);background-color:var(--devui-area, #f3f3f3)}:host ::ng-deep .devui-panel .devui-panel-footer d-panel-footer{line-height:1.5}:host ::ng-deep .devui-panel.devui-panel-default .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-default .devui-panel-body,:host ::ng-deep .devui-panel.devui-panel-common .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-common .devui-panel-body{background-color:var(--devui-default-bg, #fafafa)}:host ::ng-deep .devui-panel.devui-panel-primary .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-primary .devui-panel-body{background-color:var(--devui-primary-bg, #e6eeff)}:host ::ng-deep .devui-panel.devui-panel-primary .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-primary-line, #0a59f7)}:host ::ng-deep .devui-panel.devui-panel-info .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-info .devui-panel-body{background-color:var(--devui-info-bg, #cedefd)}:host ::ng-deep .devui-panel.devui-panel-info .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-info-line, #0a59f7)}:host ::ng-deep .devui-panel.devui-panel-success .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-success .devui-panel-body{background-color:var(--devui-success-bg, #bcf2db)}:host ::ng-deep .devui-panel.devui-panel-success .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-success-line, #09aa71)}:host ::ng-deep .devui-panel.devui-panel-warning .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-warning .devui-panel-body{background-color:var(--devui-warning-bg, #fde2bd)}:host ::ng-deep .devui-panel.devui-panel-warning .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-warning-line, #f4840c)}:host ::ng-deep .devui-panel.devui-panel-danger .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-danger .devui-panel-body{background-color:var(--devui-danger-bg, #fabdc1)}:host ::ng-deep .devui-panel.devui-panel-danger .devui-panel-body-collapse.has-left-padding .d-panel-body{border-color:var(--devui-danger-line, #e02128)}:host ::ng-deep .devui-panel.devui-panel-ghost .devui-panel-heading,:host ::ng-deep .devui-panel.devui-panel-ghost .devui-panel-body{background-color:transparent;border:none;padding:0}:host ::ng-deep .devui-panel.devui-panel-ghost .d-panel-body{padding:16px 20px}:host ::ng-deep .devui-panel.devui-panel-ghost .devui-panel-body-collapse.has-left-padding:before{display:none}:host ::ng-deep .devui-panel.devui-panel-ghost .devui-panel-body-collapse.has-left-padding .d-panel-body{border:none}\n"] }] }], ctorParameters: () => [{ type: i1.DevConfigService }], propDecorators: { type: [{ type: Input }], cssClass: [{ type: Input }], isCollapsed: [{ type: Input }], hasLeftPadding: [{ type: Input }], showAnimation: [{ type: Input }], beforeToggle: [{ type: Input }], toggle: [{ type: Output }], panelHeader: [{ type: ContentChild, args: [PanelHeaderComponent] }], panelFooter: [{ type: ContentChild, args: [PanelFooterComponent] }], panelBody: [{ type: ContentChild, args: [PanelBodyComponent] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvcGFuZWwvcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvcGFuZWwvcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDJCQUEyQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBU2hFLE1BQU0sT0FBTyxjQUFjO0lBV3pCLFlBQW9CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBVjdDLFNBQUksR0FBYyxTQUFTLENBQUM7UUFHNUIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDUixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVsQyxXQUFNLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7SUFJWCxDQUFDO0lBQzVELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixNQUFNLE1BQU0sR0FBUSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4RCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDaEIsWUFBWSxHQUFHLE1BQU0sQ0FBQztnQkFDeEIsQ0FBQztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDNUIsWUFBWSxHQUFJLE1BQThCLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzdELENBQUM7cUJBQU0sQ0FBQztvQkFDTixZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQzsrR0F6Q1UsY0FBYzttR0FBZCxjQUFjLG1TQVFYLG9CQUFvQiw4RUFDcEIsb0JBQW9CLDRFQUNwQixrQkFBa0IsZ0RDbENsQyxtbUNBNEJBLDJtSUROYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSwyQkFBMkIsQ0FBQzs7QUFPdEU7SUFBYixVQUFVLEVBQUU7O3FEQUFzQjs0RkFMakMsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxTQUFTLGNBR1AsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsMkJBQTJCLENBQUM7cUZBR3BGLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDaUIsYUFBYTtzQkFBbkMsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDNkIsV0FBVztzQkFBOUMsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBQ0UsV0FBVztzQkFBOUMsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBQ0EsU0FBUztzQkFBMUMsWUFBWTt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0cmFuc2l0aW9uLFxuICB0cmlnZ2VyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERldkNvbmZpZ1NlcnZpY2UsIGV4cGFuZENvbGxhcHNlRm9yRG9tRGVzdHJveSwgV2l0aENvbmZpZyB9IGZyb20gJ25nLWRldnVpL3V0aWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBhbmVsQm9keUNvbXBvbmVudCB9IGZyb20gJy4vcGFuZWwtYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFuZWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuL3BhbmVsLWZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFuZWxIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3BhbmVsLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFuZWxUeXBlIH0gZnJvbSAnLi9wYW5lbC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2QtcGFuZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYW5lbC5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbdHJpZ2dlcignbm9BbmltYXRpb24nLCBbdHJhbnNpdGlvbignOmVudGVyJywgW10pXSksIGV4cGFuZENvbGxhcHNlRm9yRG9tRGVzdHJveV0sXG59KVxuZXhwb3J0IGNsYXNzIFBhbmVsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdHlwZTogUGFuZWxUeXBlID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBjc3NDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgaGFzTGVmdFBhZGRpbmcgPSB0cnVlO1xuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIHNob3dBbmltYXRpb24gPSB0cnVlO1xuICBASW5wdXQoKSBiZWZvcmVUb2dnbGU6ICh2YWx1ZSkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBAT3V0cHV0KCkgdG9nZ2xlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBDb250ZW50Q2hpbGQoUGFuZWxIZWFkZXJDb21wb25lbnQpIHBhbmVsSGVhZGVyO1xuICBAQ29udGVudENoaWxkKFBhbmVsRm9vdGVyQ29tcG9uZW50KSBwYW5lbEZvb3RlcjtcbiAgQENvbnRlbnRDaGlsZChQYW5lbEJvZHlDb21wb25lbnQpIHBhbmVsQm9keTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkZXZDb25maWdTZXJ2aWNlOiBEZXZDb25maWdTZXJ2aWNlKSB7ICB9XG4gIHRvZ2dsZUJvZHkoKSB7XG4gICAgdGhpcy5jYW5Ub2dnbGUoKS50aGVuKCh2YWwpID0+IHtcbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuICAgICAgICB0aGlzLnRvZ2dsZS5lbWl0KHRoaXMuaXNDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuVG9nZ2xlKCkge1xuICAgIGxldCBjaGFuZ2VSZXN1bHQgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5iZWZvcmVUb2dnbGUpIHtcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gdGhpcy5iZWZvcmVUb2dnbGUodGhpcy5pc0NvbGxhcHNlZCk7XG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKHJlc3VsdC50aGVuKSB7XG4gICAgICAgICAgY2hhbmdlUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zdWJzY3JpYmUpIHtcbiAgICAgICAgICBjaGFuZ2VSZXN1bHQgPSAocmVzdWx0IGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pLnRvUHJvbWlzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYW5nZVJlc3VsdCA9IFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZVJlc3VsdDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRldnVpLXBhbmVsIGRldnVpLXBhbmVsLXt7IHR5cGUgfX0ge3sgY3NzQ2xhc3MgfX1cIiBbQG5vQW5pbWF0aW9uXT5cbiAgPGRpdiBjbGFzcz1cImRldnVpLXBhbmVsLWhlYWRpbmdcIiAoY2xpY2spPVwidG9nZ2xlQm9keSgpXCIgW3N0eWxlLmN1cnNvcl09XCJpc0NvbGxhcHNlZCAhPT0gdW5kZWZpbmVkID8gJ3BvaW50ZXInIDogbnVsbFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImQtcGFuZWwtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZGV2dWktcGFuZWwtYm9keVwiXG4gICAgW25nQ2xhc3NdPVwieyAnZGV2dWktcGFuZWwtYm9keS1jb2xsYXBzZSc6IGlzQ29sbGFwc2VkICE9PSB1bmRlZmluZWQsICdoYXMtbGVmdC1wYWRkaW5nJzogaGFzTGVmdFBhZGRpbmcgfVwiXG4gICAgQGNvbGxhcHNlRm9yRG9tRGVzdHJveVxuICAgIFtALmRpc2FibGVkXT1cIiFzaG93QW5pbWF0aW9uXCJcbiAgICAqbmdJZj1cImlzQ29sbGFwc2VkID09PSB1bmRlZmluZWQgfHwgaXNDb2xsYXBzZWRcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsRm9vdGVyIHx8IHBhbmVsSGVhZGVyIHx8IHBhbmVsQm9keTsgZWxzZSBlbHNlVGVtcGxhdGVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwYW5lbEJvZHlUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cImQtcGFuZWwtYm9keVwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImRldnVpLXBhbmVsLWZvb3RlclwiICpuZ0lmPVwicGFuZWxGb290ZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkLXBhbmVsLWZvb3RlclwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNwYW5lbEJvZHlUcGw+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImQtcGFuZWwtYm9keVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=