ng-prime-tools
Version:
An advanced PrimeNG table for Angular
124 lines • 23.2 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/router";
import * as i3 from "../pt-menu-fancy/pt-menu-fancy.component";
export class PTNavbarMenuComponent {
constructor() {
this.navBarMenuConfig = {};
this.toggleSidebar = new EventEmitter();
}
// Default values as readonly variables
static { this.DEFAULT_LOGO_URL = ''; }
static { this.DEFAULT_LOGO_ALT_TEXT = 'Logo'; }
static { this.DEFAULT_LOGO_WIDTH = '40px'; }
static { this.DEFAULT_LOGO_HEIGHT = 'auto'; }
static { this.DEFAULT_APP_NAME = 'Application'; }
static { this.DEFAULT_APP_NAME_COLOR = '#000'; }
static { this.DEFAULT_APP_NAME_FONT_SIZE = '24px'; }
static { this.DEFAULT_TRANSPARENCY = '100'; }
static { this.DEFAULT_ICON_COLOR = '#333'; }
static { this.DEFAULT_TOGGLE_BUTTON_ICON = 'pi pi-bars'; }
static { this.DEFAULT_TOGGLE_BUTTON_COLOR = '#333'; }
isImageStyle(object) {
return typeof object === 'object' && 'imageUrl' in object;
}
isTextStyle(object) {
return typeof object === 'object' && 'text' in object;
}
getLogoUrl() {
return this.isImageStyle(this.navBarMenuConfig.logo)
? this.navBarMenuConfig.logo.imageUrl
: PTNavbarMenuComponent.DEFAULT_LOGO_URL;
}
getLogoAltText() {
return this.isImageStyle(this.navBarMenuConfig.logo)
? this.navBarMenuConfig.logo.altText ||
PTNavbarMenuComponent.DEFAULT_LOGO_ALT_TEXT
: PTNavbarMenuComponent.DEFAULT_LOGO_ALT_TEXT;
}
getLogoStyles() {
if (this.isImageStyle(this.navBarMenuConfig.logo)) {
return {
color: this.navBarMenuConfig.logo.color ||
PTNavbarMenuComponent.DEFAULT_ICON_COLOR,
width: this.navBarMenuConfig.logo.width ||
PTNavbarMenuComponent.DEFAULT_LOGO_WIDTH,
height: this.navBarMenuConfig.logo.height ||
PTNavbarMenuComponent.DEFAULT_LOGO_HEIGHT,
};
}
return {};
}
getAppName() {
return this.isTextStyle(this.navBarMenuConfig.appName)
? this.navBarMenuConfig.appName.text
: PTNavbarMenuComponent.DEFAULT_APP_NAME;
}
getAppNameStyles() {
if (this.isTextStyle(this.navBarMenuConfig.appName)) {
return {
color: this.navBarMenuConfig.appName.color ||
PTNavbarMenuComponent.DEFAULT_APP_NAME_COLOR,
fontSize: this.navBarMenuConfig.appName.fontSize ||
PTNavbarMenuComponent.DEFAULT_APP_NAME_FONT_SIZE,
};
}
return {
color: PTNavbarMenuComponent.DEFAULT_APP_NAME_COLOR,
fontSize: PTNavbarMenuComponent.DEFAULT_APP_NAME_FONT_SIZE,
};
}
getNavbarStyles() {
const transparency = this.navBarMenuConfig.pattern?.transparencyPercentage ||
PTNavbarMenuComponent.DEFAULT_TRANSPARENCY;
const imageUrl = this.navBarMenuConfig.pattern?.imageUrl || '';
const patternWidth = this.navBarMenuConfig.pattern?.width || '100%';
const patternHeight = this.navBarMenuConfig.pattern?.height || 'auto';
// Determine background-repeat value
const repeatX = this.navBarMenuConfig.pattern?.repeatX
? 'repeat'
: 'no-repeat';
const repeatY = this.navBarMenuConfig.pattern?.repeatY
? 'repeat'
: 'no-repeat';
const backgroundRepeat = `${repeatX} ${repeatY}`;
// Use the position directly from the pattern configuration
const backgroundPosition = this.navBarMenuConfig.pattern?.position || 'center';
// Construct the background image style with transparency
const backgroundImage = imageUrl
? `linear-gradient(rgba(255, 255, 255, ${1 - parseFloat(transparency) / 100}), rgba(255, 255, 255, ${1 - parseFloat(transparency) / 100})), url(${imageUrl})`
: '';
return {
backgroundColor: this.navBarMenuConfig.pattern ? 'transparent' : '#fff',
backgroundImage: backgroundImage,
backgroundSize: `${patternWidth} ${patternHeight}`,
backgroundPosition: backgroundPosition,
backgroundRepeat: backgroundRepeat,
};
}
toggleMenu() {
this.toggleSidebar.emit();
}
getToggleButtonIcon() {
return (this.navBarMenuConfig.toggleButtonIcon ||
PTNavbarMenuComponent.DEFAULT_TOGGLE_BUTTON_ICON);
}
getToggleButtonStyles() {
return {
color: this.navBarMenuConfig.toggleButtonColor ||
PTNavbarMenuComponent.DEFAULT_TOGGLE_BUTTON_COLOR,
};
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTNavbarMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTNavbarMenuComponent, selector: "pt-nav-bar-menu", inputs: { navBarMenuConfig: "navBarMenuConfig" }, outputs: { toggleSidebar: "toggleSidebar" }, ngImport: i0, template: "<div class=\"pt-nav-bar-menu\" [ngStyle]=\"getNavbarStyles()\">\n <div class=\"navbar-left\">\n <a\n [routerLink]=\"\n isImageStyle(navBarMenuConfig.logo)\n ? navBarMenuConfig.logo.routerLink\n : '/'\n \"\n class=\"logo-link\"\n >\n <img\n [src]=\"getLogoUrl()\"\n [alt]=\"getLogoAltText()\"\n [ngStyle]=\"getLogoStyles()\"\n class=\"navbar-logo\"\n />\n <span class=\"navbar-title\" [ngStyle]=\"getAppNameStyles()\">\n {{ getAppName() }}\n </span>\n </a>\n <!-- Toggle Button -->\n <a (click)=\"toggleMenu()\" class=\"toggle-btn\">\n <i\n [class]=\"getToggleButtonIcon()\"\n [ngStyle]=\"getToggleButtonStyles()\"\n ></i>\n </a>\n </div>\n <div class=\"navbar-right\">\n <pt-menu-fancy\n *ngFor=\"let menuConfig of navBarMenuConfig.menus\"\n [config]=\"menuConfig\"\n ></pt-menu-fancy>\n </div>\n</div>\n", styles: [".pt-nav-bar-menu{display:flex;justify-content:space-between;align-items:center;padding:10px;border-bottom:1px solid #ddd;background-color:#fff;background-size:cover;background-position:center}.pt-nav-bar-menu .navbar-left{display:flex;align-items:center}.pt-nav-bar-menu .logo-link{display:flex;align-items:center;text-decoration:none;color:inherit}.pt-nav-bar-menu .navbar-logo{margin-left:10px;margin-right:20px}.pt-nav-bar-menu .navbar-right{display:flex;align-items:center}.pt-nav-bar-menu .navbar-right a{margin-left:20px;color:#333;text-decoration:none;font-size:20px;cursor:pointer}.pt-nav-bar-menu .navbar-right a:hover{color:#000;cursor:pointer}.pt-nav-bar-menu .toggle-btn>.pi.pi-bars{font-size:1.5rem;color:#333}.pt-nav-bar-menu .toggle-btn:hover{background-color:#f1f1f1}.pt-nav-bar-menu .toggle-btn{margin-left:2rem;cursor:pointer;padding:7px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.PTMenuFancyComponent, selector: "pt-menu-fancy", inputs: ["config"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTNavbarMenuComponent, decorators: [{
type: Component,
args: [{ selector: 'pt-nav-bar-menu', template: "<div class=\"pt-nav-bar-menu\" [ngStyle]=\"getNavbarStyles()\">\n <div class=\"navbar-left\">\n <a\n [routerLink]=\"\n isImageStyle(navBarMenuConfig.logo)\n ? navBarMenuConfig.logo.routerLink\n : '/'\n \"\n class=\"logo-link\"\n >\n <img\n [src]=\"getLogoUrl()\"\n [alt]=\"getLogoAltText()\"\n [ngStyle]=\"getLogoStyles()\"\n class=\"navbar-logo\"\n />\n <span class=\"navbar-title\" [ngStyle]=\"getAppNameStyles()\">\n {{ getAppName() }}\n </span>\n </a>\n <!-- Toggle Button -->\n <a (click)=\"toggleMenu()\" class=\"toggle-btn\">\n <i\n [class]=\"getToggleButtonIcon()\"\n [ngStyle]=\"getToggleButtonStyles()\"\n ></i>\n </a>\n </div>\n <div class=\"navbar-right\">\n <pt-menu-fancy\n *ngFor=\"let menuConfig of navBarMenuConfig.menus\"\n [config]=\"menuConfig\"\n ></pt-menu-fancy>\n </div>\n</div>\n", styles: [".pt-nav-bar-menu{display:flex;justify-content:space-between;align-items:center;padding:10px;border-bottom:1px solid #ddd;background-color:#fff;background-size:cover;background-position:center}.pt-nav-bar-menu .navbar-left{display:flex;align-items:center}.pt-nav-bar-menu .logo-link{display:flex;align-items:center;text-decoration:none;color:inherit}.pt-nav-bar-menu .navbar-logo{margin-left:10px;margin-right:20px}.pt-nav-bar-menu .navbar-right{display:flex;align-items:center}.pt-nav-bar-menu .navbar-right a{margin-left:20px;color:#333;text-decoration:none;font-size:20px;cursor:pointer}.pt-nav-bar-menu .navbar-right a:hover{color:#000;cursor:pointer}.pt-nav-bar-menu .toggle-btn>.pi.pi-bars{font-size:1.5rem;color:#333}.pt-nav-bar-menu .toggle-btn:hover{background-color:#f1f1f1}.pt-nav-bar-menu .toggle-btn{margin-left:2rem;cursor:pointer;padding:7px}\n"] }]
}], propDecorators: { navBarMenuConfig: [{
type: Input
}], toggleSidebar: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtbmF2LWJhci1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtbmF2LWJhci1tZW51L3B0LW5hdi1iYXItbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LW5hdi1iYXItbWVudS9wdC1uYXYtYmFyLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRdkUsTUFBTSxPQUFPLHFCQUFxQjtJQUxsQztRQU1XLHFCQUFnQixHQUFxQixFQUFFLENBQUM7UUFFdkMsa0JBQWEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztLQXFJeEU7SUFuSUMsdUNBQXVDO2FBQ2YscUJBQWdCLEdBQVcsRUFBRSxBQUFiLENBQWM7YUFDOUIsMEJBQXFCLEdBQVcsTUFBTSxBQUFqQixDQUFrQjthQUN2Qyx1QkFBa0IsR0FBVyxNQUFNLEFBQWpCLENBQWtCO2FBQ3BDLHdCQUFtQixHQUFXLE1BQU0sQUFBakIsQ0FBa0I7YUFDckMscUJBQWdCLEdBQVcsYUFBYSxBQUF4QixDQUF5QjthQUN6QywyQkFBc0IsR0FBVyxNQUFNLEFBQWpCLENBQWtCO2FBQ3hDLCtCQUEwQixHQUFXLE1BQU0sQUFBakIsQ0FBa0I7YUFDNUMseUJBQW9CLEdBQVcsS0FBSyxBQUFoQixDQUFpQjthQUNyQyx1QkFBa0IsR0FBVyxNQUFNLEFBQWpCLENBQWtCO2FBQ3BDLCtCQUEwQixHQUFXLFlBQVksQUFBdkIsQ0FBd0I7YUFDbEQsZ0NBQTJCLEdBQVcsTUFBTSxBQUFqQixDQUFrQjtJQUVyRSxZQUFZLENBQUMsTUFBVztRQUN0QixPQUFPLE9BQU8s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O0lBQ0osQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPO1lBQ0wsS0FBSyxFQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUI7Z0JBQ3ZDLHFCQUFxQixDQUFDLDJCQUEyQjtTQUNwRCxDQUFDO0lBQ0osQ0FBQzsrR0F2SVUscUJBQXFCO21HQUFyQixxQkFBcUIsc0pDUmxDLG04QkFtQ0E7OzRGRDNCYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsaUJBQWlCOzhCQUtsQixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbWFnZVN0eWxlLCBOYXZCYXJNZW51Q29uZmlnLCBUZXh0U3R5bGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwdC1uYXYtYmFyLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtbmF2LWJhci1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHQtbmF2LWJhci1tZW51LmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUFROYXZiYXJNZW51Q29tcG9uZW50IHtcbiAgQElucHV0KCkgbmF2QmFyTWVudUNvbmZpZzogTmF2QmFyTWVudUNvbmZpZyA9IHt9O1xuXG4gIEBPdXRwdXQoKSB0b2dnbGVTaWRlYmFyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZXMgYXMgcmVhZG9ubHkgdmFyaWFibGVzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTE9HT19VUkw6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0xPR09fQUxUX1RFWFQ6IHN0cmluZyA9ICdMb2dvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9MT0dPX1dJRFRIOiBzdHJpbmcgPSAnNDBweCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTE9HT19IRUlHSFQ6IHN0cmluZyA9ICdhdXRvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BUFBfTkFNRTogc3RyaW5nID0gJ0FwcGxpY2F0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BUFBfTkFNRV9DT0xPUjogc3RyaW5nID0gJyMwMDAnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FQUF9OQU1FX0ZPTlRfU0laRTogc3RyaW5nID0gJzI0cHgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RSQU5TUEFSRU5DWTogc3RyaW5nID0gJzEwMCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSUNPTl9DT0xPUjogc3RyaW5nID0gJyMzMzMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RPR0dMRV9CVVRUT05fSUNPTjogc3RyaW5nID0gJ3BpIHBpLWJhcnMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RPR0dMRV9CVVRUT05fQ09MT1I6IHN0cmluZyA9ICcjMzMzJztcblxuICBpc0ltYWdlU3R5bGUob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgSW1hZ2VTdHlsZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmICdpbWFnZVVybCcgaW4gb2JqZWN0O1xuICB9XG5cbiAgaXNUZXh0U3R5bGUob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgVGV4dFN0eWxlIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgJ3RleHQnIGluIG9iamVjdDtcbiAgfVxuXG4gIGdldExvZ29VcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0ltYWdlU3R5bGUodGhpcy5uYXZCYXJNZW51Q29uZmlnLmxvZ28pXG4gICAgICA/IHRoaXMubmF2QmFyTWVudUNvbmZpZy5sb2dvLmltYWdlVXJsXG4gICAgICA6IFBUTmF2YmFyTWVudUNvbXBvbmVudC5ERUZBVUxUX0xPR09fVVJMO1xuICB9XG5cbiAgZ2V0TG9nb0FsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0ltYWdlU3R5bGUodGhpcy5uYXZCYXJNZW51Q29uZmlnLmxvZ28pXG4gICAgICA/IHRoaXMubmF2QmFyTWVudUNvbmZpZy5sb2dvLmFsdFRleHQgfHxcbiAgICAgICAgICBQVE5hdmJhck1lbnVDb21wb25lbnQuREVGQVVMVF9MT0dPX0FMVF9URVhUXG4gICAgICA6IFBUTmF2YmFyTWVudUNvbXBvbmVudC5ERUZBVUxUX0xPR09fQUxUX1RFWFQ7XG4gIH1cblxuICBnZXRMb2dvU3R5bGVzKCkge1xuICAgIGlmICh0aGlzLmlzSW1hZ2VTdHlsZSh0aGlzLm5hdkJhck1lbnVDb25maWcubG9nbykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOlxuICAgICAgICAgIHRoaXMubmF2QmFyTWVudUNvbmZpZy5sb2dvLmNvbG9yIHx8XG4gICAgICAgICAgUFROYXZiYXJNZW51Q29tcG9uZW50LkRFRkFVTFRfSUNPTl9DT0xPUixcbiAgICAgICAgd2lkdGg6XG4gICAgICAgICAgdGhpcy5uYXZCYXJNZW51Q29uZmlnLmxvZ28ud2lkdGggfHxcbiAgICAgICAgICBQVE5hdmJhck1lbnVDb21wb25lbnQuREVGQVVMVF9MT0dPX1dJRFRILFxuICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgdGhpcy5uYXZCYXJNZW51Q29uZmlnLmxvZ28uaGVpZ2h0IHx8XG4gICAgICAgICAgUFROYXZiYXJNZW51Q29tcG9uZW50LkRFRkFVTFRfTE9HT19IRUlHSFQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBnZXRBcHBOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNUZXh0U3R5bGUodGhpcy5uYXZCYXJNZW51Q29uZmlnLmFwcE5hbWUpXG4gICAgICA/IHRoaXMubmF2QmFyTWVudUNvbmZpZy5hcHBOYW1lLnRleHRcbiAgICAgIDogUFROYXZiYXJNZW51Q29tcG9uZW50LkRFRkFVTFRfQVBQX05BTUU7XG4gIH1cblxuICBnZXRBcHBOYW1lU3R5bGVzKCkge1xuICAgIGlmICh0aGlzLmlzVGV4dFN0eWxlKHRoaXMubmF2QmFyTWVudUNvbmZpZy5hcHBOYW1lKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6XG4gICAgICAgICAgdGhpcy5uYXZCYXJNZW51Q29uZmlnLmFwcE5hbWUuY29sb3IgfHxcbiAgICAgICAgICBQVE5hdmJhck1lbnVDb21wb25lbnQuREVGQVVMVF9BUFBfTkFNRV9DT0xPUixcbiAgICAgICAgZm9udFNpemU6XG4gICAgICAgICAgdGhpcy5uYXZCYXJNZW51Q29uZmlnLmFwcE5hbWUuZm9udFNpemUgfHxcbiAgICAgICAgICBQVE5hdmJhck1lbnVDb21wb25lbnQuREVGQVVMVF9BUFBfTkFNRV9GT05UX1NJWkUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IFBUTmF2YmFyTWVudUNvbXBvbmVudC5ERUZBVUxUX0FQUF9OQU1FX0NPTE9SLFxuICAgICAgZm9udFNpemU6IFBUTmF2YmFyTWVudUNvbXBvbmVudC5ERUZBVUxUX0FQUF9OQU1FX0ZPTlRfU0laRSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0TmF2YmFyU3R5bGVzKCkge1xuICAgIGNvbnN0IHRyYW5zcGFyZW5jeSA9XG4gICAgICB0aGlzLm5hdkJhck1lbnVDb25maWcucGF0dGVybj8udHJhbnNwYXJlbmN5UGVyY2VudGFnZSB8fFxuICAgICAgUFROYXZiYXJNZW51Q29tcG9uZW50LkRFRkFVTFRfVFJBTlNQQVJFTkNZO1xuICAgIGNvbnN0IGltYWdlVXJsID0gdGhpcy5uYXZCYXJNZW51Q29uZmlnLnBhdHRlcm4/LmltYWdlVXJsIHx8ICcnO1xuICAgIGNvbnN0IHBhdHRlcm5XaWR0aCA9IHRoaXMubmF2QmFyTWVudUNvbmZpZy5wYXR0ZXJuPy53aWR0aCB8fCAnMTAwJSc7XG4gICAgY29uc3QgcGF0dGVybkhlaWdodCA9IHRoaXMubmF2QmFyTWVudUNvbmZpZy5wYXR0ZXJuPy5oZWlnaHQgfHwgJ2F1dG8nO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGJhY2tncm91bmQtcmVwZWF0IHZhbHVlXG4gICAgY29uc3QgcmVwZWF0WCA9IHRoaXMubmF2QmFyTWVudUNvbmZpZy5wYXR0ZXJuPy5yZXBlYXRYXG4gICAgICA/ICdyZXBlYXQnXG4gICAgICA6ICduby1yZXBlYXQnO1xuICAgIGNvbnN0IHJlcGVhdFkgPSB0aGlzLm5hdkJhck1lbnVDb25maWcucGF0dGVybj8ucmVwZWF0WVxuICAgICAgPyAncmVwZWF0J1xuICAgICAgOiAnbm8tcmVwZWF0JztcbiAgICBjb25zdCBiYWNrZ3JvdW5kUmVwZWF0ID0gYCR7cmVwZWF0WH0gJHtyZXBlYXRZfWA7XG5cbiAgICAvLyBVc2UgdGhlIHBvc2l0aW9uIGRpcmVjdGx5IGZyb20gdGhlIHBhdHRlcm4gY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGJhY2tncm91bmRQb3NpdGlvbiA9XG4gICAgICB0aGlzLm5hdkJhck1lbnVDb25maWcucGF0dGVybj8ucG9zaXRpb24gfHwgJ2NlbnRlcic7XG5cbiAgICAvLyBDb25zdHJ1Y3QgdGhlIGJhY2tncm91bmQgaW1hZ2Ugc3R5bGUgd2l0aCB0cmFuc3BhcmVuY3lcbiAgICBjb25zdCBiYWNrZ3JvdW5kSW1hZ2UgPSBpbWFnZVVybFxuICAgICAgPyBgbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LCAyNTUsIDI1NSwgJHtcbiAgICAgICAgICAxIC0gcGFyc2VGbG9hdCh0cmFuc3BhcmVuY3kpIC8gMTAwXG4gICAgICAgIH0pLCByZ2JhKDI1NSwgMjU1LCAyNTUsICR7XG4gICAgICAgICAgMSAtIHBhcnNlRmxvYXQodHJhbnNwYXJlbmN5KSAvIDEwMFxuICAgICAgICB9KSksIHVybCgke2ltYWdlVXJsfSlgXG4gICAgICA6ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5uYXZCYXJNZW51Q29uZmlnLnBhdHRlcm4gPyAndHJhbnNwYXJlbnQnIDogJyNmZmYnLFxuICAgICAgYmFja2dyb3VuZEltYWdlOiBiYWNrZ3JvdW5kSW1hZ2UsXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogYCR7cGF0dGVybldpZHRofSAke3BhdHRlcm5IZWlnaHR9YCxcbiAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogYmFja2dyb3VuZFBvc2l0aW9uLFxuICAgICAgYmFja2dyb3VuZFJlcGVhdDogYmFja2dyb3VuZFJlcGVhdCxcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlTWVudSgpIHtcbiAgICB0aGlzLnRvZ2dsZVNpZGViYXIuZW1pdCgpO1xuICB9XG5cbiAgZ2V0VG9nZ2xlQnV0dG9uSWNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm5hdkJhck1lbnVDb25maWcudG9nZ2xlQnV0dG9uSWNvbiB8fFxuICAgICAgUFROYXZiYXJNZW51Q29tcG9uZW50LkRFRkFVTFRfVE9HR0xFX0JVVFRPTl9JQ09OXG4gICAgKTtcbiAgfVxuXG4gIGdldFRvZ2dsZUJ1dHRvblN0eWxlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6XG4gICAgICAgIHRoaXMubmF2QmFyTWVudUNvbmZpZy50b2dnbGVCdXR0b25Db2xvciB8fFxuICAgICAgICBQVE5hdmJhck1lbnVDb21wb25lbnQuREVGQVVMVF9UT0dHTEVfQlVUVE9OX0NPTE9SLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwdC1uYXYtYmFyLW1lbnVcIiBbbmdTdHlsZV09XCJnZXROYXZiYXJTdHlsZXMoKVwiPlxuICA8ZGl2IGNsYXNzPVwibmF2YmFyLWxlZnRcIj5cbiAgICA8YVxuICAgICAgW3JvdXRlckxpbmtdPVwiXG4gICAgICAgIGlzSW1hZ2VTdHlsZShuYXZCYXJNZW51Q29uZmlnLmxvZ28pXG4gICAgICAgICAgPyBuYXZCYXJNZW51Q29uZmlnLmxvZ28ucm91dGVyTGlua1xuICAgICAgICAgIDogJy8nXG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJsb2dvLWxpbmtcIlxuICAgID5cbiAgICAgIDxpbWdcbiAgICAgICAgW3NyY109XCJnZXRMb2dvVXJsKClcIlxuICAgICAgICBbYWx0XT1cImdldExvZ29BbHRUZXh0KClcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRMb2dvU3R5bGVzKClcIlxuICAgICAgICBjbGFzcz1cIm5hdmJhci1sb2dvXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10aXRsZVwiIFtuZ1N0eWxlXT1cImdldEFwcE5hbWVTdHlsZXMoKVwiPlxuICAgICAgICB7eyBnZXRBcHBOYW1lKCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2E+XG4gICAgPCEtLSBUb2dnbGUgQnV0dG9uIC0tPlxuICAgIDxhIChjbGljayk9XCJ0b2dnbGVNZW51KClcIiBjbGFzcz1cInRvZ2dsZS1idG5cIj5cbiAgICAgIDxpXG4gICAgICAgIFtjbGFzc109XCJnZXRUb2dnbGVCdXR0b25JY29uKClcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRUb2dnbGVCdXR0b25TdHlsZXMoKVwiXG4gICAgICA+PC9pPlxuICAgIDwvYT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJuYXZiYXItcmlnaHRcIj5cbiAgICA8cHQtbWVudS1mYW5jeVxuICAgICAgKm5nRm9yPVwibGV0IG1lbnVDb25maWcgb2YgbmF2QmFyTWVudUNvbmZpZy5tZW51c1wiXG4gICAgICBbY29uZmlnXT1cIm1lbnVDb25maWdcIlxuICAgID48L3B0LW1lbnUtZmFuY3k+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=