ng-devui
Version:
DevUI components based on Angular
82 lines • 21.5 kB
JavaScript
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=