@netgrif/components
Version:
Netgrif Application Engine frontend Angular components
89 lines • 60.6 kB
JavaScript
import { Component } from '@angular/core';
import { AbstractNavigationDoubleDrawerComponent } from '@netgrif/components-core';
import { animate, state, style, transition, trigger } from "@angular/animations";
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "@angular/cdk/layout";
import * as i3 from "@netgrif/components-core";
import * as i4 from "@ngx-translate/core";
import * as i5 from "@angular/common";
import * as i6 from "@ngbracket/ngx-layout";
import * as i7 from "@ngbracket/ngx-layout/extended";
import * as i8 from "@angular/material/button";
import * as i9 from "@angular/material/icon";
import * as i10 from "@angular/material/menu";
import * as i11 from "@angular/material/progress-spinner";
import * as i12 from "@angular/material/sidenav";
import * as i13 from "@angular/material/toolbar";
import * as i14 from "@angular/material/tooltip";
import * as i15 from "../quick-panel/components/language-selector/language-selector.component";
import * as i16 from "angular-resizable-element";
export class NavigationDoubleDrawerComponent extends AbstractNavigationDoubleDrawerComponent {
isSectionOpen = {
folders: true,
views: true
};
constructor(_router, _activatedRoute, _breakpoint, _languageService, _translateService, _userService, _log, _config, _pathService, _caseResourceService, _impersonationUserSelect, _impersonation, _navigationService) {
super(_router, _activatedRoute, _breakpoint, _languageService, _translateService, _userService, _log, _config, _pathService, _caseResourceService, _impersonationUserSelect, _impersonation, _navigationService);
}
toggleSection(section) {
this.isSectionOpen[section] = !this.isSectionOpen[section];
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavigationDoubleDrawerComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.BreakpointObserver }, { token: i3.LanguageService }, { token: i4.TranslateService }, { token: i3.UserService }, { token: i3.LoggerService }, { token: i3.ConfigurationService }, { token: i3.PathService }, { token: i3.CaseResourceService }, { token: i3.ImpersonationUserSelectService }, { token: i3.ImpersonationService }, { token: i3.DoubleDrawerNavigationService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NavigationDoubleDrawerComponent, selector: "nc-navigation-double-drawer", usesInheritance: true, ngImport: i0, template: "<div class=\"drawer-control rail-color height-60\" [ngClass]=\"{'index-menu': !configLeftMenu.opened}\"\n fxLayoutAlign=\"center center\" fxHide.lt-md>\n <button mat-icon-button (click)=\"toggleMenu()\" class=\"menu-button mat-typography menu-font-color\">\n <mat-icon>menu</mat-icon>\n </button>\n</div>\n\n<mat-toolbar fxHide.gt-sm class=\"toolbar\">\n <mat-toolbar-row fxLayout=\"row\" fxLayoutAlign=\"space-between stretch\">\n <div fxFlex fxLayoutAlign=\"start center\">\n <button mat-icon-button (click)=\"toggleMenu()\">\n <mat-icon>menu</mat-icon>\n </button>\n </div>\n <div fxLayoutAlign=\"center center\" fxFlex>\n <img #logo [alt]=\"imageAlt\" [src]=\"image\" class=\"logoimg-tool\"\n [routerLink]=\"imageRouterLink !== undefined ? imageRouterLink : []\">\n </div>\n <div fxFlex></div>\n </mat-toolbar-row>\n</mat-toolbar>\n<mat-spinner *ngIf=\"!logo\"></mat-spinner>\n<mat-sidenav-container class=\"rail-container deny-select\">\n <mat-sidenav mode=\"side\" [(opened)]=\"configLeftMenu.opened\" position=\"start\"\n [disableClose]=\"configLeftMenu.disableClose\"\n class=\"rail-content\">\n\n <div fxLayout=\"column\" class=\"rail-color\" fxFlex>\n\n <div *ngTemplateOutlet=\"portalLeftMenu || defaultLeftSide\"></div>\n\n <div fxFlex></div>\n\n <mat-menu #userRailMenu=\"matMenu\">\n <div mat-menu-item role=\"menuitem\" class=\"large-menu-item\" fxLayout=\"row\" fxFlexAlign=\"center center\"\n [routerLink]=\"profileRouterLink\" routerLinkActive=\"active-tree-node\">\n <mat-icon class=\"margin-auto\" fxFlex>face</mat-icon>\n <div class=\"large-menu-item\" fxLayout=\"column\" fxFlexAlign=\"start center\" fxFlex>\n <span *ngIf=\"!user.isImpersonating()\" class=\"large-menu-item-text\"\n fxFlex=\"50\">{{ user.fullName }}</span>\n <span *ngIf=\"user.isImpersonating()\" class=\"large-menu-item-text\"\n fxFlex=\"50\">{{ user.fullName }} ({{ user.getSelfOrImpersonated().fullName }})</span>\n <span class=\"large-menu-item-text\" style=\"font-size: 12px;\" fxFlex=\"50\">{{ user.email }}</span>\n </div>\n </div>\n <button *ngIf=\"includeImpersonation && !user.isImpersonating()\" mat-menu-item (click)=\"impersonate()\">\n <mat-icon>supervisor_account</mat-icon>\n <span>{{ 'side-menu.impersonation.submit' | translate }}</span>\n </button>\n <button *ngIf=\"includeImpersonation && user.isImpersonating()\" mat-menu-item\n (click)=\"stopImpersonating()\">\n <mat-icon>clear</mat-icon>\n <span>{{ 'side-menu.impersonation.cease' | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"logout()\">\n <mat-icon>exit_to_app</mat-icon>\n <span>{{ 'toolbar.menu.logout' | translate }}</span>\n </button>\n </mat-menu>\n <button *ngIf=\"includeUser\" mat-icon-button [matMenuTriggerFor]=\"userRailMenu\"\n class=\"menu-button mat-typography menu-font-color\"\n [matTooltip]=\"user.fullName\"\n [matTooltipPosition]=\"'right'\">\n <mat-icon>account_circle</mat-icon>\n </button>\n\n <div *ngIf=\"includeLanguage\" [ngClass]=\"{'margin-bottom-x2 menu-button': hideMoreMenu}\" fxLayout=\"row\" class=\"icon-container\">\n <nc-language-selector fxLayout=\"row\" ></nc-language-selector>\n </div>\n\n <mat-menu #railMenu=\"matMenu\">\n <button *ngFor='let item of hiddenCustomItems$ | async; trackBy: itemsTrackBy' mat-menu-item\n [routerLink]='item.routing.path' routerLinkActive=\"active-tree-node\">\n <mat-icon>{{ item.navigation.icon }}</mat-icon>\n <span>{{ item.navigation.title }}</span>\n </button>\n </mat-menu>\n <!-- <div fxLayout=\"row\" class=\"margin-bottom-x2 icon-container\" matTooltip=\"Otvori\u0165 menu\"-->\n <!-- matTooltipPosition=\"right\"-->\n <!-- fxLayoutAlign=\"center center\">-->\n <!-- <button mat-icon-button [matMenuTriggerFor]=\"railMenu\">-->\n <!-- <mat-icon class=\"icon-large sidemenu-icon\">more_vert</mat-icon>-->\n <!-- </button>-->\n <!-- </div>-->\n <button *ngIf=\"!hideMoreMenu\" mat-icon-button [matMenuTriggerFor]=\"railMenu\"\n class=\"menu-button mat-typography menu-font-color margin-bottom-x2\"\n [matTooltip]=\"'toolbar.menu.open' | translate\"\n matTooltipPosition=\"right\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"first-content index-menu\" >\n <mat-sidenav-container class=\"drawer-container\" (backdropClick)=\"toggleLeftMenu()\">\n <mat-sidenav [mode]=\"configRightMenu.mode\" [(opened)]=\"configRightMenu.opened\" position=\"start\"\n [disableClose]=\"configRightMenu.disableClose\"\n class=\"drawer-content\"\n mwlResizable\n (resizing)=\"onResizeEvent($event)\"\n [style.width.px]=\"configRightMenu.width\">\n\n <div *ngTemplateOutlet=\"portalRightMenu || defaultRightSide\"></div>\n\n </mat-sidenav>\n\n <mat-sidenav-content class=\"content-color\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n</mat-sidenav-container>\n\n<ng-template #defaultLeftSide>\n\n <div class=\"height-60 border-bottom\" fxLayoutAlign=\"center center\" fxHide.lt-md>\n <button mat-icon-button (click)=\"toggleRightMenu()\" class=\"menu-button mat-typography menu-font-color\">\n <mat-icon>menu</mat-icon>\n </button>\n </div>\n\n <button mat-icon-button (click)=\"onHomeClick()\"\n class=\"menu-button mat-typography menu-font-color margin-top-default\"\n [matTooltip]=\"'toolbar.menu.home' | translate\"\n matTooltipPosition=\"right\">\n <mat-icon>home</mat-icon>\n </button>\n\n <button *ngIf='!isOnZeroLevel() && (canGoBackLoading$ | async) === false' mat-icon-button (click)=\"onBackClick()\"\n class=\"menu-button mat-typography menu-font-color\" [matTooltip]=\"'toolbar.menu.back' | translate\"\n matTooltipPosition=\"right\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <div *ngIf=\"(canGoBackLoading$ | async)\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"margin-top-default\">\n <mat-spinner color=\"primary\" diameter=\"30\" mode=\"indeterminate\"></mat-spinner>\n </div>\n\n <div class=\"margin-top-x2\"></div>\n\n <button *ngFor='let folder of leftItems; trackBy: itemsTrackBy' mat-icon-button (click)=\"onItemClick(folder)\"\n class=\"menu-button mat-typography menu-font-color\" [matTooltip]=\"folder.navigation.title\" [matTooltipPosition]=\"'right'\"\n [ngClass]=\"isItemAndPathEqual(folder, currentPath) ? 'rail-selected-color' : 'menu-font-color'\" [routerLink]=\"folder.routing.path\"\n routerLinkActive=\"active\">\n <mat-icon>{{ folder.navigation.icon }}</mat-icon>\n </button>\n\n <div *ngIf=\"(leftLoading$ | async)\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"margin-top-default\">\n <mat-spinner color=\"primary\" diameter=\"30\" mode=\"indeterminate\"></mat-spinner>\n </div>\n</ng-template>\n\n<ng-template #defaultRightSide>\n <div class=\"logo border-bottom\" fxLayoutAlign=\"center center\" fxHide.lt-md>\n <img *ngIf=\"image !== undefined\" [alt]=\"imageAlt\" [src]=\"image\" class=\"logoimg\"\n [routerLink]=\"imageRouterLink !== undefined ? imageRouterLink : []\">\n </div>\n <div *ngIf=\"(rightLoading$ | async) === false && (pathResolverLoading$ | async) === false\">\n <div fxLayout=\"column\" fxLayoutAlign=\"end end\" class=\"order-icon-wrapper\">\n <button mat-icon-button fxLayout=\"column\" fxLayoutAlign=\"center center\"\n class=\"mat-button mat-typography menu-font-color order-icon\" (click)=\"switchOrder()\"\n [matTooltip]=\"isAscending() ? ('dynamicNavigation.ascending' | translate) : ('dynamicNavigation.descending' | translate)\">\n <mat-icon>{{ isAscending() ? \"expand_more\" : \"expand_less\" }}</mat-icon>\n </button>\n </div>\n <div *ngFor='let item of rightItems$ | async; trackBy: itemsTrackBy' (click)=\"onItemClick(item)\"\n class=\"tree-node mat-typography mat-body-2\" fxLayoutAlign=\"start center\" [routerLink]='item.routing.path'\n routerLinkActive=\"active-tree-node\">\n <mat-icon class=\"tree-node-icon\">{{ item.navigation.icon }}</mat-icon>\n <span>{{ item.navigation.title }}</span>\n <span class=\"menu-item-focus-overlay\"></span>\n </div>\n <div *ngIf=\"moreItems.length > 0\">\n <button mat-button color=\"primary\"\n (click)=\"loadMoreItems()\">{{ 'dynamicNavigation.loadMoreItems' | translate }}\n </button>\n </div>\n </div>\n <div *ngIf=\"(rightLoading$ | async) || (pathResolverLoading$ | async)\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"margin-top-default\">\n <mat-spinner color=\"primary\" diameter=\"40\" mode=\"indeterminate\"></mat-spinner>\n </div>\n</ng-template>\n", styles: [".rail-container{height:100%}.rail-content{width:52px;min-width:52px;border-right:none!important}.drawer-container{height:100%}.menu-button{margin:0 auto;border-radius:8px}.drawer-content{width:300px;min-width:300px;box-shadow:0 2px 4px #0d2d3c29,0 4px 8px #546e7a29}.height-60{height:60px}.drawer-control{position:absolute;box-shadow:0 2px 4px #0d2d3c29,0 4px 8px #546e7a29}.index-menu{z-index:2}.first-content{box-shadow:0 2px 4px #0d2d3c29,0 4px 8px #546e7a29}.border-bottom{border-bottom:1px solid #E2E8F0}.logo{height:60px}.logo-closed{width:60px!important}.logoimg{margin-left:auto;margin-right:auto;height:35px;outline:none!important;cursor:pointer}.icon-large{height:40px;width:40px;font-size:40px;color:#000000b3}.icon-container{outline:none!important;height:40px}.icon-large:hover{cursor:pointer}.menu-font-color{color:#000000b3!important}.margin-top-65{margin-top:49px}.margin-auto{margin:auto}.padding-top-65{padding-top:49px}.padding-top-8{padding-top:8px}.margin-bottom-x2{margin-bottom:16px}.tree-node{outline:none!important;cursor:pointer;padding:10px 8px;margin:0 8px;color:#000000b3;position:relative;border-radius:8px;font-weight:500;font-size:14px;line-height:20px;letter-spacing:.1px}.tree-node mat-icon.tree-node-icon{height:24px;width:24px;font-size:24px;margin-right:4px}.tree-node .tree-node-label{height:24px;font-size:16px}.tree-node .margin-component{width:8px;margin-right:4px}.tree-node .menu-item-focus-overlay{opacity:0;position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:#000;transition:opacity .2s cubic-bezier(.35,0,.25,1),background-color .2s cubic-bezier(.35,0,.25,1)}.tree-node:hover .menu-item-focus-overlay{opacity:.04}.margin-top-default{margin-top:8px}.margin-top-x2{margin-top:16px}.logoimg-tool{height:33px;outline:none!important;cursor:pointer;background:#fafafa}.toolbar{min-height:50px!important;height:50px;border-bottom:1px solid #E2E8F0}@media screen and (max-width: 959.99px){.rail-container{height:calc(100% - 50px)}.rail-content{width:52px;min-width:52px;top:0;border-right:none!important}.margin-top-65{margin-top:16px}.padding-top-65{padding-top:16px}}.profile-tooltip{font-size:20px}.sidemenu-icon{line-height:unset!important}.line{width:calc(100% - 16px);padding-left:8px;padding-right:8px;flex:1}.headline-text{font-weight:400;font-size:12px;line-height:16px;letter-spacing:.4px;padding-top:4px}.headline-padding{padding:0 8px}.large-menu-item{height:64px;line-height:64px}.large-menu-item-text{line-height:32px}.cursor-pointer{cursor:pointer}.box-container{box-sizing:content-box;display:block;overflow:hidden}.content-color{background-color:#f8fafc}.expansion-indicator{color:#00000080;margin-right:10px}.expansion-indicator:after{border-style:solid;border-width:0 2px 2px 0;content:\"\";display:inline-block;padding:3px;vertical-align:middle;transform:rotate(45deg)}.order-icon{transform:scale(.7)}.order-text{color:#000000b3}.order-icon-wrapper{margin-bottom:0}.deny-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i6.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i6.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i6.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i7.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i12.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i12.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i12.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i13.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i13.MatToolbarRow, selector: "mat-toolbar-row", exportAs: ["matToolbarRow"] }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i15.LanguageSelectorComponent, selector: "nc-language-selector" }, { kind: "directive", type: i16.ResizableDirective, selector: "[mwlResizable]", inputs: ["validateResize", "enableGhostResize", "resizeSnapGrid", "resizeCursors", "ghostElementPositioning", "allowNegativeResizes", "mouseMoveThrottleMS"], outputs: ["resizeStart", "resizing", "resizeEnd"], exportAs: ["mwlResizable"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], animations: [
trigger('sectionExpansion', [
state('expanded, void', style({
height: '*',
visibility: 'visible'
})),
state('collapsed', style({
height: '0px',
visibility: 'hidden'
})),
transition('expanded <=> collapsed, void => expanded', [
animate('225ms cubic-bezier(0.4,0.0,0.2,1)')
])
]),
trigger('indicatorRotate', [
state('expanded, void', style({
transform: 'rotate(180deg)'
})),
state('collapsed', style({
transform: 'rotate(0deg)'
})),
transition('expanded <=> collapsed, void => expanded', [
animate('225ms cubic-bezier(0.4,0.0,0.2,1)')
])
])
] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavigationDoubleDrawerComponent, decorators: [{
type: Component,
args: [{ selector: 'nc-navigation-double-drawer', animations: [
trigger('sectionExpansion', [
state('expanded, void', style({
height: '*',
visibility: 'visible'
})),
state('collapsed', style({
height: '0px',
visibility: 'hidden'
})),
transition('expanded <=> collapsed, void => expanded', [
animate('225ms cubic-bezier(0.4,0.0,0.2,1)')
])
]),
trigger('indicatorRotate', [
state('expanded, void', style({
transform: 'rotate(180deg)'
})),
state('collapsed', style({
transform: 'rotate(0deg)'
})),
transition('expanded <=> collapsed, void => expanded', [
animate('225ms cubic-bezier(0.4,0.0,0.2,1)')
])
])
], template: "<div class=\"drawer-control rail-color height-60\" [ngClass]=\"{'index-menu': !configLeftMenu.opened}\"\n fxLayoutAlign=\"center center\" fxHide.lt-md>\n <button mat-icon-button (click)=\"toggleMenu()\" class=\"menu-button mat-typography menu-font-color\">\n <mat-icon>menu</mat-icon>\n </button>\n</div>\n\n<mat-toolbar fxHide.gt-sm class=\"toolbar\">\n <mat-toolbar-row fxLayout=\"row\" fxLayoutAlign=\"space-between stretch\">\n <div fxFlex fxLayoutAlign=\"start center\">\n <button mat-icon-button (click)=\"toggleMenu()\">\n <mat-icon>menu</mat-icon>\n </button>\n </div>\n <div fxLayoutAlign=\"center center\" fxFlex>\n <img #logo [alt]=\"imageAlt\" [src]=\"image\" class=\"logoimg-tool\"\n [routerLink]=\"imageRouterLink !== undefined ? imageRouterLink : []\">\n </div>\n <div fxFlex></div>\n </mat-toolbar-row>\n</mat-toolbar>\n<mat-spinner *ngIf=\"!logo\"></mat-spinner>\n<mat-sidenav-container class=\"rail-container deny-select\">\n <mat-sidenav mode=\"side\" [(opened)]=\"configLeftMenu.opened\" position=\"start\"\n [disableClose]=\"configLeftMenu.disableClose\"\n class=\"rail-content\">\n\n <div fxLayout=\"column\" class=\"rail-color\" fxFlex>\n\n <div *ngTemplateOutlet=\"portalLeftMenu || defaultLeftSide\"></div>\n\n <div fxFlex></div>\n\n <mat-menu #userRailMenu=\"matMenu\">\n <div mat-menu-item role=\"menuitem\" class=\"large-menu-item\" fxLayout=\"row\" fxFlexAlign=\"center center\"\n [routerLink]=\"profileRouterLink\" routerLinkActive=\"active-tree-node\">\n <mat-icon class=\"margin-auto\" fxFlex>face</mat-icon>\n <div class=\"large-menu-item\" fxLayout=\"column\" fxFlexAlign=\"start center\" fxFlex>\n <span *ngIf=\"!user.isImpersonating()\" class=\"large-menu-item-text\"\n fxFlex=\"50\">{{ user.fullName }}</span>\n <span *ngIf=\"user.isImpersonating()\" class=\"large-menu-item-text\"\n fxFlex=\"50\">{{ user.fullName }} ({{ user.getSelfOrImpersonated().fullName }})</span>\n <span class=\"large-menu-item-text\" style=\"font-size: 12px;\" fxFlex=\"50\">{{ user.email }}</span>\n </div>\n </div>\n <button *ngIf=\"includeImpersonation && !user.isImpersonating()\" mat-menu-item (click)=\"impersonate()\">\n <mat-icon>supervisor_account</mat-icon>\n <span>{{ 'side-menu.impersonation.submit' | translate }}</span>\n </button>\n <button *ngIf=\"includeImpersonation && user.isImpersonating()\" mat-menu-item\n (click)=\"stopImpersonating()\">\n <mat-icon>clear</mat-icon>\n <span>{{ 'side-menu.impersonation.cease' | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"logout()\">\n <mat-icon>exit_to_app</mat-icon>\n <span>{{ 'toolbar.menu.logout' | translate }}</span>\n </button>\n </mat-menu>\n <button *ngIf=\"includeUser\" mat-icon-button [matMenuTriggerFor]=\"userRailMenu\"\n class=\"menu-button mat-typography menu-font-color\"\n [matTooltip]=\"user.fullName\"\n [matTooltipPosition]=\"'right'\">\n <mat-icon>account_circle</mat-icon>\n </button>\n\n <div *ngIf=\"includeLanguage\" [ngClass]=\"{'margin-bottom-x2 menu-button': hideMoreMenu}\" fxLayout=\"row\" class=\"icon-container\">\n <nc-language-selector fxLayout=\"row\" ></nc-language-selector>\n </div>\n\n <mat-menu #railMenu=\"matMenu\">\n <button *ngFor='let item of hiddenCustomItems$ | async; trackBy: itemsTrackBy' mat-menu-item\n [routerLink]='item.routing.path' routerLinkActive=\"active-tree-node\">\n <mat-icon>{{ item.navigation.icon }}</mat-icon>\n <span>{{ item.navigation.title }}</span>\n </button>\n </mat-menu>\n <!-- <div fxLayout=\"row\" class=\"margin-bottom-x2 icon-container\" matTooltip=\"Otvori\u0165 menu\"-->\n <!-- matTooltipPosition=\"right\"-->\n <!-- fxLayoutAlign=\"center center\">-->\n <!-- <button mat-icon-button [matMenuTriggerFor]=\"railMenu\">-->\n <!-- <mat-icon class=\"icon-large sidemenu-icon\">more_vert</mat-icon>-->\n <!-- </button>-->\n <!-- </div>-->\n <button *ngIf=\"!hideMoreMenu\" mat-icon-button [matMenuTriggerFor]=\"railMenu\"\n class=\"menu-button mat-typography menu-font-color margin-bottom-x2\"\n [matTooltip]=\"'toolbar.menu.open' | translate\"\n matTooltipPosition=\"right\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"first-content index-menu\" >\n <mat-sidenav-container class=\"drawer-container\" (backdropClick)=\"toggleLeftMenu()\">\n <mat-sidenav [mode]=\"configRightMenu.mode\" [(opened)]=\"configRightMenu.opened\" position=\"start\"\n [disableClose]=\"configRightMenu.disableClose\"\n class=\"drawer-content\"\n mwlResizable\n (resizing)=\"onResizeEvent($event)\"\n [style.width.px]=\"configRightMenu.width\">\n\n <div *ngTemplateOutlet=\"portalRightMenu || defaultRightSide\"></div>\n\n </mat-sidenav>\n\n <mat-sidenav-content class=\"content-color\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n</mat-sidenav-container>\n\n<ng-template #defaultLeftSide>\n\n <div class=\"height-60 border-bottom\" fxLayoutAlign=\"center center\" fxHide.lt-md>\n <button mat-icon-button (click)=\"toggleRightMenu()\" class=\"menu-button mat-typography menu-font-color\">\n <mat-icon>menu</mat-icon>\n </button>\n </div>\n\n <button mat-icon-button (click)=\"onHomeClick()\"\n class=\"menu-button mat-typography menu-font-color margin-top-default\"\n [matTooltip]=\"'toolbar.menu.home' | translate\"\n matTooltipPosition=\"right\">\n <mat-icon>home</mat-icon>\n </button>\n\n <button *ngIf='!isOnZeroLevel() && (canGoBackLoading$ | async) === false' mat-icon-button (click)=\"onBackClick()\"\n class=\"menu-button mat-typography menu-font-color\" [matTooltip]=\"'toolbar.menu.back' | translate\"\n matTooltipPosition=\"right\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <div *ngIf=\"(canGoBackLoading$ | async)\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"margin-top-default\">\n <mat-spinner color=\"primary\" diameter=\"30\" mode=\"indeterminate\"></mat-spinner>\n </div>\n\n <div class=\"margin-top-x2\"></div>\n\n <button *ngFor='let folder of leftItems; trackBy: itemsTrackBy' mat-icon-button (click)=\"onItemClick(folder)\"\n class=\"menu-button mat-typography menu-font-color\" [matTooltip]=\"folder.navigation.title\" [matTooltipPosition]=\"'right'\"\n [ngClass]=\"isItemAndPathEqual(folder, currentPath) ? 'rail-selected-color' : 'menu-font-color'\" [routerLink]=\"folder.routing.path\"\n routerLinkActive=\"active\">\n <mat-icon>{{ folder.navigation.icon }}</mat-icon>\n </button>\n\n <div *ngIf=\"(leftLoading$ | async)\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"margin-top-default\">\n <mat-spinner color=\"primary\" diameter=\"30\" mode=\"indeterminate\"></mat-spinner>\n </div>\n</ng-template>\n\n<ng-template #defaultRightSide>\n <div class=\"logo border-bottom\" fxLayoutAlign=\"center center\" fxHide.lt-md>\n <img *ngIf=\"image !== undefined\" [alt]=\"imageAlt\" [src]=\"image\" class=\"logoimg\"\n [routerLink]=\"imageRouterLink !== undefined ? imageRouterLink : []\">\n </div>\n <div *ngIf=\"(rightLoading$ | async) === false && (pathResolverLoading$ | async) === false\">\n <div fxLayout=\"column\" fxLayoutAlign=\"end end\" class=\"order-icon-wrapper\">\n <button mat-icon-button fxLayout=\"column\" fxLayoutAlign=\"center center\"\n class=\"mat-button mat-typography menu-font-color order-icon\" (click)=\"switchOrder()\"\n [matTooltip]=\"isAscending() ? ('dynamicNavigation.ascending' | translate) : ('dynamicNavigation.descending' | translate)\">\n <mat-icon>{{ isAscending() ? \"expand_more\" : \"expand_less\" }}</mat-icon>\n </button>\n </div>\n <div *ngFor='let item of rightItems$ | async; trackBy: itemsTrackBy' (click)=\"onItemClick(item)\"\n class=\"tree-node mat-typography mat-body-2\" fxLayoutAlign=\"start center\" [routerLink]='item.routing.path'\n routerLinkActive=\"active-tree-node\">\n <mat-icon class=\"tree-node-icon\">{{ item.navigation.icon }}</mat-icon>\n <span>{{ item.navigation.title }}</span>\n <span class=\"menu-item-focus-overlay\"></span>\n </div>\n <div *ngIf=\"moreItems.length > 0\">\n <button mat-button color=\"primary\"\n (click)=\"loadMoreItems()\">{{ 'dynamicNavigation.loadMoreItems' | translate }}\n </button>\n </div>\n </div>\n <div *ngIf=\"(rightLoading$ | async) || (pathResolverLoading$ | async)\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"margin-top-default\">\n <mat-spinner color=\"primary\" diameter=\"40\" mode=\"indeterminate\"></mat-spinner>\n </div>\n</ng-template>\n", styles: [".rail-container{height:100%}.rail-content{width:52px;min-width:52px;border-right:none!important}.drawer-container{height:100%}.menu-button{margin:0 auto;border-radius:8px}.drawer-content{width:300px;min-width:300px;box-shadow:0 2px 4px #0d2d3c29,0 4px 8px #546e7a29}.height-60{height:60px}.drawer-control{position:absolute;box-shadow:0 2px 4px #0d2d3c29,0 4px 8px #546e7a29}.index-menu{z-index:2}.first-content{box-shadow:0 2px 4px #0d2d3c29,0 4px 8px #546e7a29}.border-bottom{border-bottom:1px solid #E2E8F0}.logo{height:60px}.logo-closed{width:60px!important}.logoimg{margin-left:auto;margin-right:auto;height:35px;outline:none!important;cursor:pointer}.icon-large{height:40px;width:40px;font-size:40px;color:#000000b3}.icon-container{outline:none!important;height:40px}.icon-large:hover{cursor:pointer}.menu-font-color{color:#000000b3!important}.margin-top-65{margin-top:49px}.margin-auto{margin:auto}.padding-top-65{padding-top:49px}.padding-top-8{padding-top:8px}.margin-bottom-x2{margin-bottom:16px}.tree-node{outline:none!important;cursor:pointer;padding:10px 8px;margin:0 8px;color:#000000b3;position:relative;border-radius:8px;font-weight:500;font-size:14px;line-height:20px;letter-spacing:.1px}.tree-node mat-icon.tree-node-icon{height:24px;width:24px;font-size:24px;margin-right:4px}.tree-node .tree-node-label{height:24px;font-size:16px}.tree-node .margin-component{width:8px;margin-right:4px}.tree-node .menu-item-focus-overlay{opacity:0;position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:#000;transition:opacity .2s cubic-bezier(.35,0,.25,1),background-color .2s cubic-bezier(.35,0,.25,1)}.tree-node:hover .menu-item-focus-overlay{opacity:.04}.margin-top-default{margin-top:8px}.margin-top-x2{margin-top:16px}.logoimg-tool{height:33px;outline:none!important;cursor:pointer;background:#fafafa}.toolbar{min-height:50px!important;height:50px;border-bottom:1px solid #E2E8F0}@media screen and (max-width: 959.99px){.rail-container{height:calc(100% - 50px)}.rail-content{width:52px;min-width:52px;top:0;border-right:none!important}.margin-top-65{margin-top:16px}.padding-top-65{padding-top:16px}}.profile-tooltip{font-size:20px}.sidemenu-icon{line-height:unset!important}.line{width:calc(100% - 16px);padding-left:8px;padding-right:8px;flex:1}.headline-text{font-weight:400;font-size:12px;line-height:16px;letter-spacing:.4px;padding-top:4px}.headline-padding{padding:0 8px}.large-menu-item{height:64px;line-height:64px}.large-menu-item-text{line-height:32px}.cursor-pointer{cursor:pointer}.box-container{box-sizing:content-box;display:block;overflow:hidden}.content-color{background-color:#f8fafc}.expansion-indicator{color:#00000080;margin-right:10px}.expansion-indicator:after{border-style:solid;border-width:0 2px 2px 0;content:\"\";display:inline-block;padding:3px;vertical-align:middle;transform:rotate(45deg)}.order-icon{transform:scale(.7)}.order-text{color:#000000b3}.order-icon-wrapper{margin-bottom:0}.deny-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}\n"] }]
}], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.BreakpointObserver }, { type: i3.LanguageService }, { type: i4.TranslateService }, { type: i3.UserService }, { type: i3.LoggerService }, { type: i3.ConfigurationService }, { type: i3.PathService }, { type: i3.CaseResourceService }, { type: i3.ImpersonationUserSelectService }, { type: i3.ImpersonationService }, { type: i3.DoubleDrawerNavigationService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy9zcmMvbGliL25hdmlnYXRpb24vbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci9uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd4QyxPQUFPLEVBTUgsdUNBQXVDLEVBUTFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0MvRSxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsdUNBQXVDO0lBRWpGLGFBQWEsR0FBRztRQUNuQixPQUFPLEVBQUUsSUFBSTtRQUNiLEtBQUssRUFBRSxJQUFJO0tBQ2QsQ0FBQztJQUVGLFlBQVksT0FBZSxFQUNmLGVBQStCLEVBQy9CLFdBQStCLEVBQy9CLGdCQUFpQyxFQUNqQyxpQkFBbUMsRUFDbkMsWUFBeUIsRUFDekIsSUFBbUIsRUFDbkIsT0FBNkIsRUFDN0IsWUFBeUIsRUFDekIsb0JBQXlDLEVBQ3pDLHdCQUF3RCxFQUN4RCxjQUFvQyxFQUNwQyxrQkFBaUQ7UUFDekQsS0FBSyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFDMUYsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDeEgsQ0FBQztJQUVNLGFBQWEsQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7d0dBMUJRLCtCQUErQjs0RkFBL0IsK0JBQStCLDBGQ3BENUMsaWhVQXFMQSxnNVVENUpnQjtZQUNSLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDeEIsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztvQkFDMUIsTUFBTSxFQUFFLEdBQUc7b0JBQ1gsVUFBVSxFQUFFLFNBQVM7aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztvQkFDckIsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsVUFBVSxFQUFFLFFBQVE7aUJBQ3ZCLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsMENBQTBDLEVBQUU7b0JBQ25ELE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDL0MsQ0FBQzthQUNMLENBQUM7WUFDRixPQUFPLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3ZCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7b0JBQzFCLFNBQVMsRUFBRSxnQkFBZ0I7aUJBQzlCLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztvQkFDckIsU0FBUyxFQUFFLGNBQWM7aUJBQzVCLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsMENBQTBDLEVBQUU7b0JBQ25ELE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDL0MsQ0FBQzthQUNMLENBQUM7U0FDTDs7NEZBRVEsK0JBQStCO2tCQS9CM0MsU0FBUzsrQkFDSSw2QkFBNkIsY0FHM0I7d0JBQ1IsT0FBTyxDQUFDLGtCQUFrQixFQUFFOzRCQUN4QixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO2dDQUMxQixNQUFNLEVBQUUsR0FBRztnQ0FDWCxVQUFVLEVBQUUsU0FBUzs2QkFDeEIsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO2dDQUNyQixNQUFNLEVBQUUsS0FBSztnQ0FDYixVQUFVLEVBQUUsUUFBUTs2QkFDdkIsQ0FBQyxDQUFDOzRCQUNILFVBQVUsQ0FBQywwQ0FBMEMsRUFBRTtnQ0FDbkQsT0FBTyxDQUFDLG1DQUFtQyxDQUFDOzZCQUMvQyxDQUFDO3lCQUNMLENBQUM7d0JBQ0YsT0FBTyxDQUFDLGlCQUFpQixFQUFFOzRCQUN2QixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO2dDQUMxQixTQUFTLEVBQUUsZ0JBQWdCOzZCQUM5QixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7Z0NBQ3JCLFNBQVMsRUFBRSxjQUFjOzZCQUM1QixDQUFDLENBQUM7NEJBQ0gsVUFBVSxDQUFDLDBDQUEwQyxFQUFFO2dDQUNuRCxPQUFPLENBQUMsbUNBQW1DLENBQUM7NkJBQy9DLENBQUM7eUJBQ0wsQ0FBQztxQkFDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7XG4gICAgQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIFBhdGhTZXJ2aWNlLFxuICAgIExvZ2dlclNlcnZpY2UsXG4gICAgVXNlclNlcnZpY2UsXG4gICAgQWJzdHJhY3ROYXZpZ2F0aW9uRG91YmxlRHJhd2VyQ29tcG9uZW50LFxuICAgIER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2UsXG4gICAgQWNjZXNzU2VydmljZSxcbiAgICBJbXBlcnNvbmF0aW9uVXNlclNlbGVjdFNlcnZpY2UsXG4gICAgSW1wZXJzb25hdGlvblNlcnZpY2UsXG4gICAgQ2FzZVJlc291cmNlU2VydmljZSxcbiAgICBSZWRpcmVjdFNlcnZpY2UsXG4gICAgRG91YmxlRHJhd2VyTmF2aWdhdGlvblNlcnZpY2Vcbn0gZnJvbSAnQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlJztcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jLW5hdmlnYXRpb24tZG91YmxlLWRyYXdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzZWN0aW9uRXhwYW5zaW9uJywgW1xuICAgICAgICAgICAgc3RhdGUoJ2V4cGFuZGVkLCB2b2lkJywgc3R5bGUoe1xuICAgICAgICAgICAgICAgIGhlaWdodDogJyonLFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJ1xuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcwcHgnLFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkLCB2b2lkID0+IGV4cGFuZGVkJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKScpXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgdHJpZ2dlcignaW5kaWNhdG9yUm90YXRlJywgW1xuICAgICAgICAgICAgc3RhdGUoJ2V4cGFuZGVkLCB2b2lkJywgc3R5bGUoe1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgxODBkZWcpJ1xuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoMGRlZyknXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkLCB2b2lkID0+IGV4cGFuZGVkJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKScpXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbkRvdWJsZURyYXdlckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvbkRvdWJsZURyYXdlckNvbXBvbmVudCB7XG5cbiAgICBwdWJsaWMgaXNTZWN0aW9uT3BlbiA9IHtcbiAgICAgICAgZm9sZGVyczogdHJ1ZSxcbiAgICAgICAgdmlld3M6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgX2JyZWFrcG9pbnQ6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICAgICAgICAgICAgICBfbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIF9jb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIF9wYXRoU2VydmljZTogUGF0aFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgX2Nhc2VSZXNvdXJjZVNlcnZpY2U6IENhc2VSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgX2ltcGVyc29uYXRpb25Vc2VyU2VsZWN0OiBJbXBlcnNvbmF0aW9uVXNlclNlbGVjdFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgX2ltcGVyc29uYXRpb246IEltcGVyc29uYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIF9uYXZpZ2F0aW9uU2VydmljZTogRG91YmxlRHJhd2VyTmF2aWdhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoX3JvdXRlciwgX2FjdGl2YXRlZFJvdXRlLCBfYnJlYWtwb2ludCwgX2xhbmd1YWdlU2VydmljZSwgX3RyYW5zbGF0ZVNlcnZpY2UsIF91c2VyU2VydmljZSxcbiAgICAgICAgICAgIF9sb2csIF9jb25maWcsIF9wYXRoU2VydmljZSwgX2Nhc2VSZXNvdXJjZVNlcnZpY2UsIF9pbXBlcnNvbmF0aW9uVXNlclNlbGVjdCwgX2ltcGVyc29uYXRpb24sIF9uYXZpZ2F0aW9uU2VydmljZSlcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlU2VjdGlvbihzZWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NlY3Rpb25PcGVuW3NlY3Rpb25dID0gIXRoaXMuaXNTZWN0aW9uT3BlbltzZWN0aW9uXTtcbiAgICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkcmF3ZXItY29udHJvbCByYWlsLWNvbG9yIGhlaWdodC02MFwiIFtuZ0NsYXNzXT1cInsnaW5kZXgtbWVudSc6ICFjb25maWdMZWZ0TWVudS5vcGVuZWR9XCJcbiAgICAgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeEhpZGUubHQtbWQ+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiIGNsYXNzPVwibWVudS1idXR0b24gbWF0LXR5cG9ncmFwaHkgbWVudS1mb250LWNvbG9yXCI+XG4gICAgICAgIDxtYXQtaWNvbj5tZW51PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48bWF0LXRvb2xiYXIgZnhIaWRlLmd0LXNtIGNsYXNzPVwidG9vbGJhclwiPlxuICAgIDxtYXQtdG9vbGJhci1yb3cgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBzdHJldGNoXCI+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVNZW51KClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeEZsZXg+XG4gICAgICAgICAgICA8aW1nICNsb2dvIFthbHRdPVwiaW1hZ2VBbHRcIiBbc3JjXT1cImltYWdlXCIgY2xhc3M9XCJsb2dvaW1nLXRvb2xcIlxuICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpbWFnZVJvdXRlckxpbmsgIT09IHVuZGVmaW5lZCA/IGltYWdlUm91dGVyTGluayA6IFtdXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleD48L2Rpdj5cbiAgICA8L21hdC10b29sYmFyLXJvdz5cbjwvbWF0LXRvb2xiYXI+XG48bWF0LXNwaW5uZXIgKm5nSWY9XCIhbG9nb1wiPjwvbWF0LXNwaW5uZXI+XG48bWF0LXNpZGVuYXYtY29udGFpbmVyIGNsYXNzPVwicmFpbC1jb250YWluZXIgZGVueS1zZWxlY3RcIj5cbiAgICA8bWF0LXNpZGVuYXYgbW9kZT1cInNpZGVcIiBbKG9wZW5lZCldPVwiY29uZmlnTGVmdE1lbnUub3BlbmVkXCIgcG9zaXRpb249XCJzdGFydFwiXG4gICAgICAgICAgICAgICAgIFtkaXNhYmxlQ2xvc2VdPVwiY29uZmlnTGVmdE1lbnUuZGlzYWJsZUNsb3NlXCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJyYWlsLWNvbnRlbnRcIj5cblxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJyYWlsLWNvbG9yXCIgZnhGbGV4PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ1RlbXBsYXRlT3V0bGV0PVwicG9ydGFsTGVmdE1lbnUgfHwgZGVmYXVsdExlZnRTaWRlXCI+PC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICAgICAgICA8bWF0LW1lbnUgI3VzZXJSYWlsTWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdC1tZW51LWl0ZW0gcm9sZT1cIm1lbnVpdGVtXCIgY2xhc3M9XCJsYXJnZS1tZW51LWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4RmxleEFsaWduPVwiY2VudGVyIGNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJwcm9maWxlUm91dGVyTGlua1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmUtdHJlZS1ub2RlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1hdXRvXCIgZnhGbGV4PmZhY2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFyZ2UtbWVudS1pdGVtXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZsZXhBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXVzZXIuaXNJbXBlcnNvbmF0aW5nKClcIiBjbGFzcz1cImxhcmdlLW1lbnUtaXRlbS10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ4RmxleD1cIjUwXCI+e3sgdXNlci5mdWxsTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidXNlci5pc0ltcGVyc29uYXRpbmcoKVwiIGNsYXNzPVwibGFyZ2UtbWVudS1pdGVtLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PVwiNTBcIj57eyB1c2VyLmZ1bGxOYW1lIH19ICh7eyB1c2VyLmdldFNlbGZPckltcGVyc29uYXRlZCgpLmZ1bGxOYW1lIH19KTwvc3Bhbj5cbiAgICAg