ets-fe-ng-sdk 17.0.374 → 17.0.376

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -25,7 +25,9 @@ export class VerticalNavComponent {
25
25
  this.router = inject(Router);
26
26
  this.shouldShowChildInput = input();
27
27
  this.shouldShowChild = computed(() => this.shouldShowChildInput() || (() => true));
28
- this.title = input();
28
+ this.toolbarTitle = input();
29
+ this.toolbarLogo = input();
30
+ this.toolbarLogoStyle = input();
29
31
  this.fixedTopGap = input();
30
32
  this.sidenavTemplate = input();
31
33
  this.toolbarTemplate = input();
@@ -62,7 +64,7 @@ export class VerticalNavComponent {
62
64
  }
63
65
  }
64
66
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: VerticalNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: VerticalNavComponent, isStandalone: true, selector: "vertical-nav", inputs: { shouldShowChildInput: { classPropertyName: "shouldShowChildInput", publicName: "shouldShowChildInput", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, fixedTopGap: { classPropertyName: "fixedTopGap", publicName: "fixedTopGap", isSignal: true, isRequired: false, transformFunction: null }, sidenavTemplate: { classPropertyName: "sidenavTemplate", publicName: "sidenavTemplate", isSignal: true, isRequired: false, transformFunction: null }, toolbarTemplate: { classPropertyName: "toolbarTemplate", publicName: "toolbarTemplate", isSignal: true, isRequired: false, transformFunction: null }, toolbarEndTemplate: { classPropertyName: "toolbarEndTemplate", publicName: "toolbarEndTemplate", isSignal: true, isRequired: false, transformFunction: null }, bodyTemplate: { classPropertyName: "bodyTemplate", publicName: "bodyTemplate", isSignal: true, isRequired: false, transformFunction: null }, useToolbar: { classPropertyName: "useToolbar", publicName: "useToolbar", isSignal: true, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: true, isRequired: false, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "drawer", first: true, predicate: ["snav"], descendants: true, isSignal: true }, { propertyName: "toolbarContRef", first: true, predicate: ["toolbarCont"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"vertical-nav\" [class.vertical-nav-is-mobile]=\"uS.isMobileSignal()\">\n @if (useToolbar()) {\n <div #toolbarCont>\n @if (toolbarTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarTemplate()\" />\n } @else {\n <mat-toolbar\n color=\"primary\"\n class=\"vertical-nav-toolbar bg-primary d-flex justify-content-between\">\n <div class=\"d-flex align-items-center w-100\">\n <button mat-icon-button (click)=\"snav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n @if (title()) {\n <h1 class=\"vertical-nav-app-name\">{{ title() | appTranslate | async }}</h1>\n }\n </div>\n <div>\n @if (toolbarEndTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarEndTemplate()\" />\n }\n </div>\n </mat-toolbar>\n }\n </div>\n }\n\n <mat-sidenav-container [id]=\"id()\" class=\"vertical-nav-container\">\n <mat-sidenav\n class=\"side-w\"\n [ngClass]=\"{ mobile: this.uS.isMobileSignal() }\"\n #snav\n [mode]=\"uS.isMobileSignal() ? 'over' : 'side'\"\n [opened]=\"!uS.isMobileSignal() && showMenu()\"\n [fixedInViewport]=\"uS.isMobileSignal()\"\n [fixedTopGap]=\"fixedTopGap() || toolbarContRef()?.nativeElement?.offsetHeight || 0\"\n [hidden]=\"!showMenu()\">\n <div class=\"vertical-nav-side-padding\">\n @if (sidenavTemplate()) {\n <ng-container *ngTemplateOutlet=\"sidenavTemplate()\" />\n } @else {\n <mat-tree\n [dataSource]=\"dataSource()\"\n [treeControl]=\"treeControl()\"\n class=\"vertical-nav-tree\">\n <!-- This is the tree node template for leaf nodes -->\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild()\"\n class=\"expandable-node\">\n <div class=\"mat-tree-node\">\n <button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n class=\"menu-btn level{{ node.level }}\">\n <div class=\"row\">\n <div class=\"col\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </div>\n <div class=\"col-auto\">\n <span\n class=\"fa {{\n treeControl().isExpanded(node) ? 'fa-chevron-down' : 'fa-chevron-right'\n }} \"></span>\n </div>\n </div>\n </button>\n </div>\n <div>\n <!-- There is inline padding applied to this div using styles.\n This padding value depends on the mat-icon-button width. -->\n <div\n [class.vertical-nav-tree-invisible]=\"!treeControl().isExpanded(node)\"\n role=\"group\"\n class=\"group\">\n <ng-container matTreeNodeOutlet />\n </div>\n </div>\n </mat-nested-tree-node>\n <!-- There is inline padding applied to this node using styles.\n This padding value depends on the mat-icon-button width. -->\n <mat-tree-node\n *matTreeNodeDef=\"let node; when: shouldShowChild()\"\n matTreeNodeToggle\n class=\"single-node level{{ node.level }}\">\n <a [routerLink]=\"node.link\" class=\"d-block w-100\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </a>\n </mat-tree-node>\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodeToggle\n class=\"single-node restricted level{{ node.level }}\" />\n </mat-tree>\n }\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"vertical-nav-body\">\n @if (bodyTemplate()) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n } @else {\n <ng-content />\n }\n </mat-sidenav-content>\n </mat-sidenav-container>\n</div>\n", styles: [".menu{background-color:#fff}.vertical-nav{display:flex;flex-direction:column;height:100%}.vertical-nav.fullScreen{position:absolute;inset:0}h1.vertical-nav-app-name{margin-left:8px}.vertical-nav-container{flex:1}.vertical-nav-is-mobile .vertical-nav-toolbar{position:fixed;z-index:2}.vertical-nav-is-mobile .vertical-nav-container{flex:1 0 auto}.mat-drawer-container{background-color:unset}.mat-drawer-content{background-color:#e9e9e9}.expandable-node button{width:100%;border-radius:0;text-align:left}.single-node button{width:24px}.level0{border-bottom:1px solid rgba(141,141,141,.231372549)}.side-w{width:auto;margin:10px;border-radius:16px}.side-w.mobile{width:90%;margin:0;border-radius:0}.vertical-nav-tree-invisible{display:none}.vertical-nav-tree ul,.vertical-nav-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.vertical-nav-tree div[role=group]{border-radius:var(--borderRadius);background-color:#ffffff57}.vertical-nav-tree div[role=group]>.mat-tree-node{padding:10px 20px}a{color:inherit}.restricted{display:none}mat-sidenav.mat-drawer.mat-drawer-opened.mat-drawer-side.mat-sidenav{min-width:200px;overflow-x:auto;white-space:nowrap}.menu-btn{background-color:#ffffff57;border-radius:var(--borderRadius)!important;padding:10px 20px;color:#2b2b2b;border:none}.expandable-node .group{border:1px solid rgba(0,0,0,.11)!important}.profile{position:sticky;bottom:0;right:0;left:0;background-color:var(--primary);background-image:linear-gradient(45deg,#ffffffa8,#ffffffa8);padding:10px}.vertical-nav-side-padding{padding:var(--space-8)}\n"], dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i4.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i4.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i4.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i5.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i5.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i5.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i5.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i5.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i5.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: VerticalNavComponent, isStandalone: true, selector: "vertical-nav", inputs: { shouldShowChildInput: { classPropertyName: "shouldShowChildInput", publicName: "shouldShowChildInput", isSignal: true, isRequired: false, transformFunction: null }, toolbarTitle: { classPropertyName: "toolbarTitle", publicName: "toolbarTitle", isSignal: true, isRequired: false, transformFunction: null }, toolbarLogo: { classPropertyName: "toolbarLogo", publicName: "toolbarLogo", isSignal: true, isRequired: false, transformFunction: null }, toolbarLogoStyle: { classPropertyName: "toolbarLogoStyle", publicName: "toolbarLogoStyle", isSignal: true, isRequired: false, transformFunction: null }, fixedTopGap: { classPropertyName: "fixedTopGap", publicName: "fixedTopGap", isSignal: true, isRequired: false, transformFunction: null }, sidenavTemplate: { classPropertyName: "sidenavTemplate", publicName: "sidenavTemplate", isSignal: true, isRequired: false, transformFunction: null }, toolbarTemplate: { classPropertyName: "toolbarTemplate", publicName: "toolbarTemplate", isSignal: true, isRequired: false, transformFunction: null }, toolbarEndTemplate: { classPropertyName: "toolbarEndTemplate", publicName: "toolbarEndTemplate", isSignal: true, isRequired: false, transformFunction: null }, bodyTemplate: { classPropertyName: "bodyTemplate", publicName: "bodyTemplate", isSignal: true, isRequired: false, transformFunction: null }, useToolbar: { classPropertyName: "useToolbar", publicName: "useToolbar", isSignal: true, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: true, isRequired: false, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "drawer", first: true, predicate: ["snav"], descendants: true, isSignal: true }, { propertyName: "toolbarContRef", first: true, predicate: ["toolbarCont"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"vertical-nav\" [class.vertical-nav-is-mobile]=\"uS.isMobileSignal()\">\n @if (useToolbar()) {\n <div #toolbarCont>\n @if (toolbarTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarTemplate()\" />\n } @else {\n <mat-toolbar\n color=\"primary\"\n class=\"vertical-nav-toolbar bg-primary d-flex justify-content-between\">\n <div class=\"d-flex align-items-center w-100\">\n <button mat-icon-button (click)=\"snav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n @if (toolbarLogo()) {\n <img [src]=\"toolbarLogo()\" [ngStyle]=\"toolbarLogoStyle()\" alt=\"toolbar logo\" class=\"toolbarLogo\" />\n }\n @if (toolbarTitle()) {\n <h1 class=\"vertical-nav-app-name\">{{ toolbarTitle() | appTranslate | async }}</h1>\n }\n </div>\n <div>\n @if (toolbarEndTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarEndTemplate()\" />\n }\n </div>\n </mat-toolbar>\n }\n </div>\n }\n\n <mat-sidenav-container [id]=\"id()\" class=\"vertical-nav-container\">\n <mat-sidenav\n class=\"side-w\"\n [ngClass]=\"{ mobile: this.uS.isMobileSignal() }\"\n #snav\n [mode]=\"uS.isMobileSignal() ? 'over' : 'side'\"\n [opened]=\"!uS.isMobileSignal() && showMenu()\"\n [fixedInViewport]=\"uS.isMobileSignal()\"\n [fixedTopGap]=\"fixedTopGap() || toolbarContRef()?.nativeElement?.offsetHeight || 0\"\n [hidden]=\"!showMenu()\">\n <div class=\"vertical-nav-side-padding\">\n @if (sidenavTemplate()) {\n <ng-container *ngTemplateOutlet=\"sidenavTemplate()\" />\n } @else {\n <mat-tree\n [dataSource]=\"dataSource()\"\n [treeControl]=\"treeControl()\"\n class=\"vertical-nav-tree\">\n <!-- This is the tree node template for leaf nodes -->\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild()\"\n class=\"expandable-node\">\n <div class=\"mat-tree-node\">\n <button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n class=\"menu-btn level{{ node.level }}\">\n <div class=\"row\">\n <div class=\"col\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </div>\n <div class=\"col-auto\">\n <span\n class=\"fa {{\n treeControl().isExpanded(node) ? 'fa-chevron-down' : 'fa-chevron-right'\n }} \"></span>\n </div>\n </div>\n </button>\n </div>\n <div>\n <!-- There is inline padding applied to this div using styles.\n This padding value depends on the mat-icon-button width. -->\n <div\n [class.vertical-nav-tree-invisible]=\"!treeControl().isExpanded(node)\"\n role=\"group\"\n class=\"group\">\n <ng-container matTreeNodeOutlet />\n </div>\n </div>\n </mat-nested-tree-node>\n <!-- There is inline padding applied to this node using styles.\n This padding value depends on the mat-icon-button width. -->\n <mat-tree-node\n *matTreeNodeDef=\"let node; when: shouldShowChild()\"\n matTreeNodeToggle\n class=\"single-node level{{ node.level }}\">\n <a [routerLink]=\"node.link\" class=\"d-block w-100\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </a>\n </mat-tree-node>\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodeToggle\n class=\"single-node restricted level{{ node.level }}\" />\n </mat-tree>\n }\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"vertical-nav-body\">\n @if (bodyTemplate()) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n } @else {\n <ng-content />\n }\n </mat-sidenav-content>\n </mat-sidenav-container>\n</div>\n", styles: [".menu{background-color:#fff}.vertical-nav{display:flex;flex-direction:column;height:100%}.vertical-nav.fullScreen{position:absolute;inset:0}.toolbarLogo{--toolbarLogoDimen:50px;height:var(--toolbarLogoDimen)}h1.vertical-nav-app-name{margin-left:8px}.vertical-nav-container{flex:1}.vertical-nav-is-mobile .vertical-nav-toolbar{position:fixed;z-index:2}.vertical-nav-is-mobile .vertical-nav-container{flex:1 0 auto}.mat-drawer-container{background-color:unset}.mat-drawer-content{background-color:#e9e9e9}.expandable-node button{width:100%;border-radius:0;text-align:left}.single-node button{width:24px}.level0{border-bottom:1px solid rgba(141,141,141,.231372549)}.side-w{width:auto;margin:10px;border-radius:16px}.side-w.mobile{width:90%;margin:0;border-radius:0}.vertical-nav-tree-invisible{display:none}.vertical-nav-tree ul,.vertical-nav-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.vertical-nav-tree div[role=group]{border-radius:var(--borderRadius);background-color:#ffffff57}.vertical-nav-tree div[role=group]>.mat-tree-node{padding:10px 20px}a{color:inherit}.restricted{display:none}mat-sidenav.mat-drawer.mat-drawer-opened.mat-drawer-side.mat-sidenav{min-width:200px;overflow-x:auto;white-space:nowrap}.menu-btn{background-color:#ffffff57;border-radius:var(--borderRadius)!important;padding:10px 20px;color:#2b2b2b;border:none}.expandable-node .group{border:1px solid rgba(0,0,0,.11)!important}.profile{position:sticky;bottom:0;right:0;left:0;background-color:var(--primary);background-image:linear-gradient(45deg,#ffffffa8,#ffffffa8);padding:10px}.vertical-nav-side-padding{padding:var(--space-8)}\n"], dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i4.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i4.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i4.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i5.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i5.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i5.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i5.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i5.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i5.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
66
68
  }
67
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: VerticalNavComponent, decorators: [{
68
70
  type: Component,
@@ -77,6 +79,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
77
79
  ImageLoaderDirective,
78
80
  CommonModule,
79
81
  TranslatePipe,
80
- ], template: "<div class=\"vertical-nav\" [class.vertical-nav-is-mobile]=\"uS.isMobileSignal()\">\n @if (useToolbar()) {\n <div #toolbarCont>\n @if (toolbarTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarTemplate()\" />\n } @else {\n <mat-toolbar\n color=\"primary\"\n class=\"vertical-nav-toolbar bg-primary d-flex justify-content-between\">\n <div class=\"d-flex align-items-center w-100\">\n <button mat-icon-button (click)=\"snav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n @if (title()) {\n <h1 class=\"vertical-nav-app-name\">{{ title() | appTranslate | async }}</h1>\n }\n </div>\n <div>\n @if (toolbarEndTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarEndTemplate()\" />\n }\n </div>\n </mat-toolbar>\n }\n </div>\n }\n\n <mat-sidenav-container [id]=\"id()\" class=\"vertical-nav-container\">\n <mat-sidenav\n class=\"side-w\"\n [ngClass]=\"{ mobile: this.uS.isMobileSignal() }\"\n #snav\n [mode]=\"uS.isMobileSignal() ? 'over' : 'side'\"\n [opened]=\"!uS.isMobileSignal() && showMenu()\"\n [fixedInViewport]=\"uS.isMobileSignal()\"\n [fixedTopGap]=\"fixedTopGap() || toolbarContRef()?.nativeElement?.offsetHeight || 0\"\n [hidden]=\"!showMenu()\">\n <div class=\"vertical-nav-side-padding\">\n @if (sidenavTemplate()) {\n <ng-container *ngTemplateOutlet=\"sidenavTemplate()\" />\n } @else {\n <mat-tree\n [dataSource]=\"dataSource()\"\n [treeControl]=\"treeControl()\"\n class=\"vertical-nav-tree\">\n <!-- This is the tree node template for leaf nodes -->\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild()\"\n class=\"expandable-node\">\n <div class=\"mat-tree-node\">\n <button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n class=\"menu-btn level{{ node.level }}\">\n <div class=\"row\">\n <div class=\"col\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </div>\n <div class=\"col-auto\">\n <span\n class=\"fa {{\n treeControl().isExpanded(node) ? 'fa-chevron-down' : 'fa-chevron-right'\n }} \"></span>\n </div>\n </div>\n </button>\n </div>\n <div>\n <!-- There is inline padding applied to this div using styles.\n This padding value depends on the mat-icon-button width. -->\n <div\n [class.vertical-nav-tree-invisible]=\"!treeControl().isExpanded(node)\"\n role=\"group\"\n class=\"group\">\n <ng-container matTreeNodeOutlet />\n </div>\n </div>\n </mat-nested-tree-node>\n <!-- There is inline padding applied to this node using styles.\n This padding value depends on the mat-icon-button width. -->\n <mat-tree-node\n *matTreeNodeDef=\"let node; when: shouldShowChild()\"\n matTreeNodeToggle\n class=\"single-node level{{ node.level }}\">\n <a [routerLink]=\"node.link\" class=\"d-block w-100\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </a>\n </mat-tree-node>\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodeToggle\n class=\"single-node restricted level{{ node.level }}\" />\n </mat-tree>\n }\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"vertical-nav-body\">\n @if (bodyTemplate()) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n } @else {\n <ng-content />\n }\n </mat-sidenav-content>\n </mat-sidenav-container>\n</div>\n", styles: [".menu{background-color:#fff}.vertical-nav{display:flex;flex-direction:column;height:100%}.vertical-nav.fullScreen{position:absolute;inset:0}h1.vertical-nav-app-name{margin-left:8px}.vertical-nav-container{flex:1}.vertical-nav-is-mobile .vertical-nav-toolbar{position:fixed;z-index:2}.vertical-nav-is-mobile .vertical-nav-container{flex:1 0 auto}.mat-drawer-container{background-color:unset}.mat-drawer-content{background-color:#e9e9e9}.expandable-node button{width:100%;border-radius:0;text-align:left}.single-node button{width:24px}.level0{border-bottom:1px solid rgba(141,141,141,.231372549)}.side-w{width:auto;margin:10px;border-radius:16px}.side-w.mobile{width:90%;margin:0;border-radius:0}.vertical-nav-tree-invisible{display:none}.vertical-nav-tree ul,.vertical-nav-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.vertical-nav-tree div[role=group]{border-radius:var(--borderRadius);background-color:#ffffff57}.vertical-nav-tree div[role=group]>.mat-tree-node{padding:10px 20px}a{color:inherit}.restricted{display:none}mat-sidenav.mat-drawer.mat-drawer-opened.mat-drawer-side.mat-sidenav{min-width:200px;overflow-x:auto;white-space:nowrap}.menu-btn{background-color:#ffffff57;border-radius:var(--borderRadius)!important;padding:10px 20px;color:#2b2b2b;border:none}.expandable-node .group{border:1px solid rgba(0,0,0,.11)!important}.profile{position:sticky;bottom:0;right:0;left:0;background-color:var(--primary);background-image:linear-gradient(45deg,#ffffffa8,#ffffffa8);padding:10px}.vertical-nav-side-padding{padding:var(--space-8)}\n"] }]
82
+ ], template: "<div class=\"vertical-nav\" [class.vertical-nav-is-mobile]=\"uS.isMobileSignal()\">\n @if (useToolbar()) {\n <div #toolbarCont>\n @if (toolbarTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarTemplate()\" />\n } @else {\n <mat-toolbar\n color=\"primary\"\n class=\"vertical-nav-toolbar bg-primary d-flex justify-content-between\">\n <div class=\"d-flex align-items-center w-100\">\n <button mat-icon-button (click)=\"snav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n @if (toolbarLogo()) {\n <img [src]=\"toolbarLogo()\" [ngStyle]=\"toolbarLogoStyle()\" alt=\"toolbar logo\" class=\"toolbarLogo\" />\n }\n @if (toolbarTitle()) {\n <h1 class=\"vertical-nav-app-name\">{{ toolbarTitle() | appTranslate | async }}</h1>\n }\n </div>\n <div>\n @if (toolbarEndTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarEndTemplate()\" />\n }\n </div>\n </mat-toolbar>\n }\n </div>\n }\n\n <mat-sidenav-container [id]=\"id()\" class=\"vertical-nav-container\">\n <mat-sidenav\n class=\"side-w\"\n [ngClass]=\"{ mobile: this.uS.isMobileSignal() }\"\n #snav\n [mode]=\"uS.isMobileSignal() ? 'over' : 'side'\"\n [opened]=\"!uS.isMobileSignal() && showMenu()\"\n [fixedInViewport]=\"uS.isMobileSignal()\"\n [fixedTopGap]=\"fixedTopGap() || toolbarContRef()?.nativeElement?.offsetHeight || 0\"\n [hidden]=\"!showMenu()\">\n <div class=\"vertical-nav-side-padding\">\n @if (sidenavTemplate()) {\n <ng-container *ngTemplateOutlet=\"sidenavTemplate()\" />\n } @else {\n <mat-tree\n [dataSource]=\"dataSource()\"\n [treeControl]=\"treeControl()\"\n class=\"vertical-nav-tree\">\n <!-- This is the tree node template for leaf nodes -->\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild()\"\n class=\"expandable-node\">\n <div class=\"mat-tree-node\">\n <button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n class=\"menu-btn level{{ node.level }}\">\n <div class=\"row\">\n <div class=\"col\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </div>\n <div class=\"col-auto\">\n <span\n class=\"fa {{\n treeControl().isExpanded(node) ? 'fa-chevron-down' : 'fa-chevron-right'\n }} \"></span>\n </div>\n </div>\n </button>\n </div>\n <div>\n <!-- There is inline padding applied to this div using styles.\n This padding value depends on the mat-icon-button width. -->\n <div\n [class.vertical-nav-tree-invisible]=\"!treeControl().isExpanded(node)\"\n role=\"group\"\n class=\"group\">\n <ng-container matTreeNodeOutlet />\n </div>\n </div>\n </mat-nested-tree-node>\n <!-- There is inline padding applied to this node using styles.\n This padding value depends on the mat-icon-button width. -->\n <mat-tree-node\n *matTreeNodeDef=\"let node; when: shouldShowChild()\"\n matTreeNodeToggle\n class=\"single-node level{{ node.level }}\">\n <a [routerLink]=\"node.link\" class=\"d-block w-100\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </a>\n </mat-tree-node>\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodeToggle\n class=\"single-node restricted level{{ node.level }}\" />\n </mat-tree>\n }\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"vertical-nav-body\">\n @if (bodyTemplate()) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n } @else {\n <ng-content />\n }\n </mat-sidenav-content>\n </mat-sidenav-container>\n</div>\n", styles: [".menu{background-color:#fff}.vertical-nav{display:flex;flex-direction:column;height:100%}.vertical-nav.fullScreen{position:absolute;inset:0}.toolbarLogo{--toolbarLogoDimen:50px;height:var(--toolbarLogoDimen)}h1.vertical-nav-app-name{margin-left:8px}.vertical-nav-container{flex:1}.vertical-nav-is-mobile .vertical-nav-toolbar{position:fixed;z-index:2}.vertical-nav-is-mobile .vertical-nav-container{flex:1 0 auto}.mat-drawer-container{background-color:unset}.mat-drawer-content{background-color:#e9e9e9}.expandable-node button{width:100%;border-radius:0;text-align:left}.single-node button{width:24px}.level0{border-bottom:1px solid rgba(141,141,141,.231372549)}.side-w{width:auto;margin:10px;border-radius:16px}.side-w.mobile{width:90%;margin:0;border-radius:0}.vertical-nav-tree-invisible{display:none}.vertical-nav-tree ul,.vertical-nav-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.vertical-nav-tree div[role=group]{border-radius:var(--borderRadius);background-color:#ffffff57}.vertical-nav-tree div[role=group]>.mat-tree-node{padding:10px 20px}a{color:inherit}.restricted{display:none}mat-sidenav.mat-drawer.mat-drawer-opened.mat-drawer-side.mat-sidenav{min-width:200px;overflow-x:auto;white-space:nowrap}.menu-btn{background-color:#ffffff57;border-radius:var(--borderRadius)!important;padding:10px 20px;color:#2b2b2b;border:none}.expandable-node .group{border:1px solid rgba(0,0,0,.11)!important}.profile{position:sticky;bottom:0;right:0;left:0;background-color:var(--primary);background-image:linear-gradient(45deg,#ffffffa8,#ffffffa8);padding:10px}.vertical-nav-side-padding{padding:var(--space-8)}\n"] }]
81
83
  }], ctorParameters: () => [] });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwtbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy92ZXJ0aWNhbC1uYXYvdmVydGljYWwtbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy92ZXJ0aWNhbC1uYXYvdmVydGljYWwtbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxTQUFTLEVBS1QsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFFTix1QkFBdUIsR0FDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBYyxnQkFBZ0IsRUFB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RER4RUksZ0JBQWdCLGdKQUNoQixlQUFlLDJJQUNmLGFBQWEsbUxBQ2IsZ0JBQWdCLDBZQUNoQixhQUFhLG92QkFDYixVQUFVLG1PQUNWLGFBQWEsOEJBRWIsWUFBWSxvVkFDWixhQUFhOzsyRkFHSixvQkFBb0I7a0JBbkJoQyxTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLFlBQVk7d0JBQ1osYUFBYTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lZGlhTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgY29tcHV0ZWQsXG4gIHZpZXdDaGlsZCxcbiAgc2lnbmFsLFxuICBFbGVtZW50UmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREcmF3ZXIsIE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlLCBNYXRUcmVlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IFBTIGZyb20gJ3BlcmZlY3Qtc2Nyb2xsYmFyJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBJbWFnZUxvYWRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9kaXJlY3RpdmVzL2luZGV4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0VG9vbGJhciwgTWF0VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXInO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdJZiwgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZXJ0aWNhbC1uYXYnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmVydGljYWwtbmF2LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmVydGljYWwtbmF2LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0VG9vbGJhck1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRTaWRlbmF2TW9kdWxlLFxuICAgIE1hdFRyZWVNb2R1bGUsXG4gICAgUm91dGVyTGluayxcbiAgICBNYXRNZW51TW9kdWxlLFxuICAgIEltYWdlTG9hZGVyRGlyZWN0aXZlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBWZXJ0aWNhbE5hdkNvbXBvbmVudCB7XG4gIHB1YmxpYyB1UyA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIHB1YmxpYyByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICBzaG91bGRTaG93Q2hpbGRJbnB1dCA9IGlucHV0PChfOiBudW1iZXIsIG5vZGU6IElNZW51SXRlbSkgPT4gYm9vbGVhbj4oKTtcbiAgc2hvdWxkU2hvd0NoaWxkID0gY29tcHV0ZWQ8KF86IG51bWJlciwgbm9kZTogSU1lbnVJdGVtKSA9PiBib29sZWFuPihcbiAgICAoKSA9PiB0aGlzLnNob3VsZFNob3dDaGlsZElucHV0KCkgfHwgKCgpID0+IHRydWUpLFxuICApO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZml4ZWRUb3BHYXAgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IHNpZGVuYXZUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG4gIHJlYWRvbmx5IHRvb2xiYXJUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG4gIC8qKlRoaXMgb25seSB3b3JrcyB3aGVuIHRoZSB0b29sYmFyVGVtcGxhdGUgaXMgbm90IHNldCAqL1xuICByZWFkb25seSB0b29sYmFyRW5kVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICByZWFkb25seSBib2R5VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICByZWFkb25seSB1c2VUb29sYmFyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHNob3dNZW51ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbWVudUl0ZW1zID0gaW5wdXQ8SU1lbnVJdGVtW10+KCk7XG5cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkcyA9IG5ldyBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxJTWVudUl0ZW0+KCksXG4gICAgICBtZW51ID0gdGhpcy5tZW51SXRlbXMoKTtcblxuICAgIGlmICghbWVudT8ubGVuZ3RoKSByZXR1cm4gZHM7XG4gICAgbWVudS5mb3JFYWNoKCh4KSA9PiAoeC5sZXZlbCA9IDApKTtcbiAgICBkcy5kYXRhID0gbWVudTtcbiAgICByZXR1cm4gZHM7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlkID0gc2lnbmFsKCdtYXRTaWRlTmF2JyArIHRoaXMudVMuZ2VuUmFuZG9tSUQpO1xuICByZWFkb25seSB0cmVlQ29udHJvbCA9IHNpZ25hbChuZXcgTmVzdGVkVHJlZUNvbnRyb2w8SU1lbnVJdGVtPigobm9kZSkgPT4gbm9kZS5jaGlsZHJlbikpO1xuXG4gIHJlYWRvbmx5IGRyYXdlciA9IHZpZXdDaGlsZDxNYXREcmF3ZXIgfCB1bmRlZmluZWQ+KCdzbmF2Jyk7XG4gIHJlYWRvbmx5IHRvb2xiYXJDb250UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PigndG9vbGJhckNvbnQnKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KGAjJHt0aGlzLmlkKCl9IC5tYXQtZHJhd2VyLWlubmVyLWNvbnRhaW5lcmApO1xuICAgIGlmIChkb2MpIHtcbiAgICAgIGRvYy5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICBjb25zdCBwcyA9IG5ldyBQUyhkb2MsIHtcbiAgICAgICAgd2hlZWxTcGVlZDogMC41LFxuICAgICAgICBzd2lwZUVhc2luZzogZmFsc2UsXG4gICAgICAgIHdoZWVsUHJvcGFnYXRpb246IHRydWUsXG4gICAgICAgIG1pblNjcm9sbGJhckxlbmd0aDogNDAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWFkb25seSBoYXNDaGlsZCA9IHNpZ25hbChcbiAgICAoXzogbnVtYmVyLCBub2RlOiBJTWVudUl0ZW0pID0+IG5vZGUuaGFzU3ViICYmIHRoaXMuc2hvdWxkU2hvd0NoaWxkKCkoXywgbm9kZSksXG4gICk7XG59XG5pbnRlcmZhY2UgSU1lbnVJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluazogc3RyaW5nO1xuICBoYXNTdWI/OiBib29sZWFuO1xuICBpY29uPzogc3RyaW5nO1xuICBsZXZlbD86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogSU1lbnVJdGVtW107XG59XG4iLCI8ZGl2IGNsYXNzPVwidmVydGljYWwtbmF2XCIgW2NsYXNzLnZlcnRpY2FsLW5hdi1pcy1tb2JpbGVdPVwidVMuaXNNb2JpbGVTaWduYWwoKVwiPlxuICBAaWYgKHVzZVRvb2xiYXIoKSkge1xuICAgIDxkaXYgI3Rvb2xiYXJDb250PlxuICAgICAgQGlmICh0b29sYmFyVGVtcGxhdGUoKSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9vbGJhclRlbXBsYXRlKClcIiAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxtYXQtdG9vbGJhclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgY2xhc3M9XCJ2ZXJ0aWNhbC1uYXYtdG9vbGJhciBiZy1wcmltYXJ5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic25hdi50b2dnbGUoKVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAodGl0bGUoKSkge1xuICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJ2ZXJ0aWNhbC1uYXYtYXBwLW5hbWVcIj57eyB0aXRsZSgpIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX08L2gxPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAaWYgKHRvb2xiYXJFbmRUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyRW5kVGVtcGxhdGUoKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cblxuICA8bWF0LXNpZGVuYXYtY29udGFpbmVyIFtpZF09XCJpZCgpXCIgY2xhc3M9XCJ2ZXJ0aWNhbC1uYXYtY29udGFpbmVyXCI+XG4gICAgPG1hdC1zaWRlbmF2XG4gICAgICBjbGFzcz1cInNpZGUtd1wiXG4gICAgICBbbmdDbGFzc109XCJ7IG1vYmlsZTogdGhpcy51Uy5pc01vYmlsZVNpZ25hbCgpIH1cIlxuICAgICAgI3NuYXZcbiAgICAgIFttb2RlXT1cInVTLmlzTW9iaWxlU2lnbmFsKCkgPyAnb3ZlcicgOiAnc2lkZSdcIlxuICAgICAgW29wZW5lZF09XCIhdVMuaXNNb2JpbGVTaWduYWwoKSAmJiBzaG93TWVudSgpXCJcbiAgICAgIFtmaXhlZEluVmlld3BvcnRdPVwidVMuaXNNb2JpbGVTaWduYWwoKVwiXG4gICAgICBbZml4ZWRUb3BHYXBdPVwiZml4ZWRUb3BHYXAoKSB8fCB0b29sYmFyQ29udFJlZigpPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQgfHwgMFwiXG4gICAgICBbaGlkZGVuXT1cIiFzaG93TWVudSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtbmF2LXNpZGUtcGFkZGluZ1wiPlxuICAgICAgICBAaWYgKHNpZGVuYXZUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVuYXZUZW1wbGF0ZSgpXCIgLz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPG1hdC10cmVlXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlKClcIlxuICAgICAgICAgICAgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ2ZXJ0aWNhbC1uYXYtdHJlZVwiPlxuICAgICAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGxlYWYgbm9kZXMgLS0+XG4gICAgICAgICAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cbiAgICAgICAgICAgIDxtYXQtbmVzdGVkLXRyZWUtbm9kZVxuICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGQoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXhwYW5kYWJsZS1ub2RlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtdHJlZS1ub2RlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1idG4gbGV2ZWx7eyBub2RlLmxldmVsIH19XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IG5vZGUuaWNvbiB9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLmxhYmVsIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVDb250cm9sKCkuaXNFeHBhbmRlZChub2RlKSA/ICdmYS1jaGV2cm9uLWRvd24nIDogJ2ZhLWNoZXZyb24tcmlnaHQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgaXMgaW5saW5lIHBhZGRpbmcgYXBwbGllZCB0byB0aGlzIGRpdiB1c2luZyBzdHlsZXMuXG4gICAgICAgICAgICBUaGlzIHBhZGRpbmcgdmFsdWUgZGVwZW5kcyBvbiB0aGUgbWF0LWljb24tYnV0dG9uIHdpZHRoLiAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnZlcnRpY2FsLW5hdi10cmVlLWludmlzaWJsZV09XCIhdHJlZUNvbnRyb2woKS5pc0V4cGFuZGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdFRyZWVOb2RlT3V0bGV0IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtbmVzdGVkLXRyZWUtbm9kZT5cbiAgICAgICAgICAgIDwhLS0gVGhlcmUgaXMgaW5saW5lIHBhZGRpbmcgYXBwbGllZCB0byB0aGlzIG5vZGUgdXNpbmcgc3R5bGVzLlxuICAgIFRoaXMgcGFkZGluZyB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBtYXQtaWNvbi1idXR0b24gd2lkdGguIC0tPlxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IHNob3VsZFNob3dDaGlsZCgpXCJcbiAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaW5nbGUtbm9kZSBsZXZlbHt7IG5vZGUubGV2ZWwgfX1cIj5cbiAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwibm9kZS5saW5rXCIgY2xhc3M9XCJkLWJsb2NrIHctMTAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBub2RlLmljb24gfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAge3sgbm9kZS5sYWJlbCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cbiAgICAgICAgICAgIDxtYXQtdHJlZS1ub2RlXG4gICAgICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcbiAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaW5nbGUtbm9kZSByZXN0cmljdGVkIGxldmVse3sgbm9kZS5sZXZlbCB9fVwiIC8+XG4gICAgICAgICAgPC9tYXQtdHJlZT5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtc2lkZW5hdj5cblxuICAgIDxtYXQtc2lkZW5hdi1jb250ZW50IGNsYXNzPVwidmVydGljYWwtbmF2LWJvZHlcIj5cbiAgICAgIEBpZiAoYm9keVRlbXBsYXRlKCkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZSgpXCIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgfVxuICAgIDwvbWF0LXNpZGVuYXYtY29udGVudD5cbiAgPC9tYXQtc2lkZW5hdi1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwtbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy92ZXJ0aWNhbC1uYXYvdmVydGljYWwtbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy92ZXJ0aWNhbC1uYXYvdmVydGljYWwtbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxTQUFTLEVBS1QsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFFTix1QkFBdUIsR0FDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBYyxnQkFBZ0IsRUFB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Q0FBQztTQUNKO0lBQ0gsQ0FBQzs4R0FsRFUsb0JBQW9CO2tHQUFwQixvQkFBb0IsdS9EQ2xEakMsNC9JQWdIQSw4b0REMUVJLGdCQUFnQixnSkFDaEIsZUFBZSwySUFDZixhQUFhLG1MQUNiLGdCQUFnQiwwWUFDaEIsYUFBYSxvdkJBQ2IsVUFBVSxtT0FDVixhQUFhLDhCQUViLFlBQVkseWFBQ1osYUFBYTs7MkZBR0osb0JBQW9CO2tCQW5CaEMsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixVQUFVO3dCQUNWLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixZQUFZO3dCQUNaLGFBQWE7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZWRpYU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIGNvbXB1dGVkLFxuICB2aWV3Q2hpbGQsXG4gIHNpZ25hbCxcbiAgRWxlbWVudFJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RHJhd2VyLCBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQgeyBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZSwgTWF0VHJlZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgUm91dGVyLCBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBQUyBmcm9tICdwZXJmZWN0LXNjcm9sbGJhcic7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgSW1hZ2VMb2FkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvZGlyZWN0aXZlcy9pbmRleC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdFRvb2xiYXIsIE1hdFRvb2xiYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sYmFyJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nSWYsIEFzeW5jUGlwZSwgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IElPYmplY3RMaXRlcmFsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVydGljYWwtbmF2JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZlcnRpY2FsLW5hdi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZlcnRpY2FsLW5hdi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdFRvb2xiYXJNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0U2lkZW5hdk1vZHVsZSxcbiAgICBNYXRUcmVlTW9kdWxlLFxuICAgIFJvdXRlckxpbmssXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBJbWFnZUxvYWRlckRpcmVjdGl2ZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmVydGljYWxOYXZDb21wb25lbnQge1xuICBwdWJsaWMgdVMgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgc2hvdWxkU2hvd0NoaWxkSW5wdXQgPSBpbnB1dDwoXzogbnVtYmVyLCBub2RlOiBJTWVudUl0ZW0pID0+IGJvb2xlYW4+KCk7XG4gIHNob3VsZFNob3dDaGlsZCA9IGNvbXB1dGVkPChfOiBudW1iZXIsIG5vZGU6IElNZW51SXRlbSkgPT4gYm9vbGVhbj4oXG4gICAgKCkgPT4gdGhpcy5zaG91bGRTaG93Q2hpbGRJbnB1dCgpIHx8ICgoKSA9PiB0cnVlKSxcbiAgKTtcbiAgcmVhZG9ubHkgdG9vbGJhclRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSB0b29sYmFyTG9nbyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgdG9vbGJhckxvZ29TdHlsZSA9IGlucHV0PElPYmplY3RMaXRlcmFsPigpO1xuICByZWFkb25seSBmaXhlZFRvcEdhcCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgc2lkZW5hdlRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcbiAgcmVhZG9ubHkgdG9vbGJhclRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcbiAgLyoqVGhpcyBvbmx5IHdvcmtzIHdoZW4gdGhlIHRvb2xiYXJUZW1wbGF0ZSBpcyBub3Qgc2V0ICovXG4gIHJlYWRvbmx5IHRvb2xiYXJFbmRUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG4gIHJlYWRvbmx5IGJvZHlUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG4gIHJlYWRvbmx5IHVzZVRvb2xiYXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2hvd01lbnUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBtZW51SXRlbXMgPSBpbnB1dDxJTWVudUl0ZW1bXT4oKTtcblxuICByZWFkb25seSBkYXRhU291cmNlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gbmV3IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPElNZW51SXRlbT4oKSxcbiAgICAgIG1lbnUgPSB0aGlzLm1lbnVJdGVtcygpO1xuXG4gICAgaWYgKCFtZW51Py5sZW5ndGgpIHJldHVybiBkcztcbiAgICBtZW51LmZvckVhY2goKHgpID0+ICh4LmxldmVsID0gMCkpO1xuICAgIGRzLmRhdGEgPSBtZW51O1xuICAgIHJldHVybiBkcztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaWQgPSBzaWduYWwoJ21hdFNpZGVOYXYnICsgdGhpcy51Uy5nZW5SYW5kb21JRCk7XG4gIHJlYWRvbmx5IHRyZWVDb250cm9sID0gc2lnbmFsKG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxJTWVudUl0ZW0+KChub2RlKSA9PiBub2RlLmNoaWxkcmVuKSk7XG5cbiAgcmVhZG9ubHkgZHJhd2VyID0gdmlld0NoaWxkPE1hdERyYXdlciB8IHVuZGVmaW5lZD4oJ3NuYXYnKTtcbiAgcmVhZG9ubHkgdG9vbGJhckNvbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCd0b29sYmFyQ29udCcpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZG9jID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oYCMke3RoaXMuaWQoKX0gLm1hdC1kcmF3ZXItaW5uZXItY29udGFpbmVyYCk7XG4gICAgaWYgKGRvYykge1xuICAgICAgZG9jLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICAgIGNvbnN0IHBzID0gbmV3IFBTKGRvYywge1xuICAgICAgICB3aGVlbFNwZWVkOiAwLjUsXG4gICAgICAgIHN3aXBlRWFzaW5nOiBmYWxzZSxcbiAgICAgICAgd2hlZWxQcm9wYWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgbWluU2Nyb2xsYmFyTGVuZ3RoOiA0MCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IGhhc0NoaWxkID0gc2lnbmFsKFxuICAgIChfOiBudW1iZXIsIG5vZGU6IElNZW51SXRlbSkgPT4gbm9kZS5oYXNTdWIgJiYgdGhpcy5zaG91bGRTaG93Q2hpbGQoKShfLCBub2RlKSxcbiAgKTtcbn1cbmludGVyZmFjZSBJTWVudUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBsaW5rOiBzdHJpbmc7XG4gIGhhc1N1Yj86IGJvb2xlYW47XG4gIGljb24/OiBzdHJpbmc7XG4gIGxldmVsPzogbnVtYmVyO1xuICBpZD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBJTWVudUl0ZW1bXTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1uYXZcIiBbY2xhc3MudmVydGljYWwtbmF2LWlzLW1vYmlsZV09XCJ1Uy5pc01vYmlsZVNpZ25hbCgpXCI+XG4gIEBpZiAodXNlVG9vbGJhcigpKSB7XG4gICAgPGRpdiAjdG9vbGJhckNvbnQ+XG4gICAgICBAaWYgKHRvb2xiYXJUZW1wbGF0ZSgpKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGUoKVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPG1hdC10b29sYmFyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICBjbGFzcz1cInZlcnRpY2FsLW5hdi10b29sYmFyIGJnLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzbmF2LnRvZ2dsZSgpXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5tZW51PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgQGlmICh0b29sYmFyTG9nbygpKSB7XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJ0b29sYmFyTG9nbygpXCIgW25nU3R5bGVdPVwidG9vbGJhckxvZ29TdHlsZSgpXCIgYWx0PVwidG9vbGJhciBsb2dvXCIgY2xhc3M9XCJ0b29sYmFyTG9nb1wiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHRvb2xiYXJUaXRsZSgpKSB7XG4gICAgICAgICAgICAgIDxoMSBjbGFzcz1cInZlcnRpY2FsLW5hdi1hcHAtbmFtZVwiPnt7IHRvb2xiYXJUaXRsZSgpIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX08L2gxPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAaWYgKHRvb2xiYXJFbmRUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyRW5kVGVtcGxhdGUoKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cblxuICA8bWF0LXNpZGVuYXYtY29udGFpbmVyIFtpZF09XCJpZCgpXCIgY2xhc3M9XCJ2ZXJ0aWNhbC1uYXYtY29udGFpbmVyXCI+XG4gICAgPG1hdC1zaWRlbmF2XG4gICAgICBjbGFzcz1cInNpZGUtd1wiXG4gICAgICBbbmdDbGFzc109XCJ7IG1vYmlsZTogdGhpcy51Uy5pc01vYmlsZVNpZ25hbCgpIH1cIlxuICAgICAgI3NuYXZcbiAgICAgIFttb2RlXT1cInVTLmlzTW9iaWxlU2lnbmFsKCkgPyAnb3ZlcicgOiAnc2lkZSdcIlxuICAgICAgW29wZW5lZF09XCIhdVMuaXNNb2JpbGVTaWduYWwoKSAmJiBzaG93TWVudSgpXCJcbiAgICAgIFtmaXhlZEluVmlld3BvcnRdPVwidVMuaXNNb2JpbGVTaWduYWwoKVwiXG4gICAgICBbZml4ZWRUb3BHYXBdPVwiZml4ZWRUb3BHYXAoKSB8fCB0b29sYmFyQ29udFJlZigpPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQgfHwgMFwiXG4gICAgICBbaGlkZGVuXT1cIiFzaG93TWVudSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtbmF2LXNpZGUtcGFkZGluZ1wiPlxuICAgICAgICBAaWYgKHNpZGVuYXZUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVuYXZUZW1wbGF0ZSgpXCIgLz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPG1hdC10cmVlXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlKClcIlxuICAgICAgICAgICAgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ2ZXJ0aWNhbC1uYXYtdHJlZVwiPlxuICAgICAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGxlYWYgbm9kZXMgLS0+XG4gICAgICAgICAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cbiAgICAgICAgICAgIDxtYXQtbmVzdGVkLXRyZWUtbm9kZVxuICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGQoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXhwYW5kYWJsZS1ub2RlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtdHJlZS1ub2RlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1idG4gbGV2ZWx7eyBub2RlLmxldmVsIH19XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IG5vZGUuaWNvbiB9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLmxhYmVsIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVDb250cm9sKCkuaXNFeHBhbmRlZChub2RlKSA/ICdmYS1jaGV2cm9uLWRvd24nIDogJ2ZhLWNoZXZyb24tcmlnaHQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgaXMgaW5saW5lIHBhZGRpbmcgYXBwbGllZCB0byB0aGlzIGRpdiB1c2luZyBzdHlsZXMuXG4gICAgICAgICAgICBUaGlzIHBhZGRpbmcgdmFsdWUgZGVwZW5kcyBvbiB0aGUgbWF0LWljb24tYnV0dG9uIHdpZHRoLiAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnZlcnRpY2FsLW5hdi10cmVlLWludmlzaWJsZV09XCIhdHJlZUNvbnRyb2woKS5pc0V4cGFuZGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdFRyZWVOb2RlT3V0bGV0IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtbmVzdGVkLXRyZWUtbm9kZT5cbiAgICAgICAgICAgIDwhLS0gVGhlcmUgaXMgaW5saW5lIHBhZGRpbmcgYXBwbGllZCB0byB0aGlzIG5vZGUgdXNpbmcgc3R5bGVzLlxuICAgIFRoaXMgcGFkZGluZyB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBtYXQtaWNvbi1idXR0b24gd2lkdGguIC0tPlxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IHNob3VsZFNob3dDaGlsZCgpXCJcbiAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaW5nbGUtbm9kZSBsZXZlbHt7IG5vZGUubGV2ZWwgfX1cIj5cbiAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwibm9kZS5saW5rXCIgY2xhc3M9XCJkLWJsb2NrIHctMTAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBub2RlLmljb24gfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAge3sgbm9kZS5sYWJlbCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cbiAgICAgICAgICAgIDxtYXQtdHJlZS1ub2RlXG4gICAgICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcbiAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaW5nbGUtbm9kZSByZXN0cmljdGVkIGxldmVse3sgbm9kZS5sZXZlbCB9fVwiIC8+XG4gICAgICAgICAgPC9tYXQtdHJlZT5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtc2lkZW5hdj5cblxuICAgIDxtYXQtc2lkZW5hdi1jb250ZW50IGNsYXNzPVwidmVydGljYWwtbmF2LWJvZHlcIj5cbiAgICAgIEBpZiAoYm9keVRlbXBsYXRlKCkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZSgpXCIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgfVxuICAgIDwvbWF0LXNpZGVuYXYtY29udGVudD5cbiAgPC9tYXQtc2lkZW5hdi1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
@@ -15614,7 +15614,9 @@ class VerticalNavComponent {
15614
15614
  this.router = inject(Router);
15615
15615
  this.shouldShowChildInput = input();
15616
15616
  this.shouldShowChild = computed(() => this.shouldShowChildInput() || (() => true));
15617
- this.title = input();
15617
+ this.toolbarTitle = input();
15618
+ this.toolbarLogo = input();
15619
+ this.toolbarLogoStyle = input();
15618
15620
  this.fixedTopGap = input();
15619
15621
  this.sidenavTemplate = input();
15620
15622
  this.toolbarTemplate = input();
@@ -15651,7 +15653,7 @@ class VerticalNavComponent {
15651
15653
  }
15652
15654
  }
15653
15655
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: VerticalNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15654
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: VerticalNavComponent, isStandalone: true, selector: "vertical-nav", inputs: { shouldShowChildInput: { classPropertyName: "shouldShowChildInput", publicName: "shouldShowChildInput", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, fixedTopGap: { classPropertyName: "fixedTopGap", publicName: "fixedTopGap", isSignal: true, isRequired: false, transformFunction: null }, sidenavTemplate: { classPropertyName: "sidenavTemplate", publicName: "sidenavTemplate", isSignal: true, isRequired: false, transformFunction: null }, toolbarTemplate: { classPropertyName: "toolbarTemplate", publicName: "toolbarTemplate", isSignal: true, isRequired: false, transformFunction: null }, toolbarEndTemplate: { classPropertyName: "toolbarEndTemplate", publicName: "toolbarEndTemplate", isSignal: true, isRequired: false, transformFunction: null }, bodyTemplate: { classPropertyName: "bodyTemplate", publicName: "bodyTemplate", isSignal: true, isRequired: false, transformFunction: null }, useToolbar: { classPropertyName: "useToolbar", publicName: "useToolbar", isSignal: true, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: true, isRequired: false, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "drawer", first: true, predicate: ["snav"], descendants: true, isSignal: true }, { propertyName: "toolbarContRef", first: true, predicate: ["toolbarCont"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"vertical-nav\" [class.vertical-nav-is-mobile]=\"uS.isMobileSignal()\">\n @if (useToolbar()) {\n <div #toolbarCont>\n @if (toolbarTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarTemplate()\" />\n } @else {\n <mat-toolbar\n color=\"primary\"\n class=\"vertical-nav-toolbar bg-primary d-flex justify-content-between\">\n <div class=\"d-flex align-items-center w-100\">\n <button mat-icon-button (click)=\"snav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n @if (title()) {\n <h1 class=\"vertical-nav-app-name\">{{ title() | appTranslate | async }}</h1>\n }\n </div>\n <div>\n @if (toolbarEndTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarEndTemplate()\" />\n }\n </div>\n </mat-toolbar>\n }\n </div>\n }\n\n <mat-sidenav-container [id]=\"id()\" class=\"vertical-nav-container\">\n <mat-sidenav\n class=\"side-w\"\n [ngClass]=\"{ mobile: this.uS.isMobileSignal() }\"\n #snav\n [mode]=\"uS.isMobileSignal() ? 'over' : 'side'\"\n [opened]=\"!uS.isMobileSignal() && showMenu()\"\n [fixedInViewport]=\"uS.isMobileSignal()\"\n [fixedTopGap]=\"fixedTopGap() || toolbarContRef()?.nativeElement?.offsetHeight || 0\"\n [hidden]=\"!showMenu()\">\n <div class=\"vertical-nav-side-padding\">\n @if (sidenavTemplate()) {\n <ng-container *ngTemplateOutlet=\"sidenavTemplate()\" />\n } @else {\n <mat-tree\n [dataSource]=\"dataSource()\"\n [treeControl]=\"treeControl()\"\n class=\"vertical-nav-tree\">\n <!-- This is the tree node template for leaf nodes -->\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild()\"\n class=\"expandable-node\">\n <div class=\"mat-tree-node\">\n <button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n class=\"menu-btn level{{ node.level }}\">\n <div class=\"row\">\n <div class=\"col\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </div>\n <div class=\"col-auto\">\n <span\n class=\"fa {{\n treeControl().isExpanded(node) ? 'fa-chevron-down' : 'fa-chevron-right'\n }} \"></span>\n </div>\n </div>\n </button>\n </div>\n <div>\n <!-- There is inline padding applied to this div using styles.\n This padding value depends on the mat-icon-button width. -->\n <div\n [class.vertical-nav-tree-invisible]=\"!treeControl().isExpanded(node)\"\n role=\"group\"\n class=\"group\">\n <ng-container matTreeNodeOutlet />\n </div>\n </div>\n </mat-nested-tree-node>\n <!-- There is inline padding applied to this node using styles.\n This padding value depends on the mat-icon-button width. -->\n <mat-tree-node\n *matTreeNodeDef=\"let node; when: shouldShowChild()\"\n matTreeNodeToggle\n class=\"single-node level{{ node.level }}\">\n <a [routerLink]=\"node.link\" class=\"d-block w-100\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </a>\n </mat-tree-node>\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodeToggle\n class=\"single-node restricted level{{ node.level }}\" />\n </mat-tree>\n }\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"vertical-nav-body\">\n @if (bodyTemplate()) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n } @else {\n <ng-content />\n }\n </mat-sidenav-content>\n </mat-sidenav-container>\n</div>\n", styles: [".menu{background-color:#fff}.vertical-nav{display:flex;flex-direction:column;height:100%}.vertical-nav.fullScreen{position:absolute;inset:0}h1.vertical-nav-app-name{margin-left:8px}.vertical-nav-container{flex:1}.vertical-nav-is-mobile .vertical-nav-toolbar{position:fixed;z-index:2}.vertical-nav-is-mobile .vertical-nav-container{flex:1 0 auto}.mat-drawer-container{background-color:unset}.mat-drawer-content{background-color:#e9e9e9}.expandable-node button{width:100%;border-radius:0;text-align:left}.single-node button{width:24px}.level0{border-bottom:1px solid rgba(141,141,141,.231372549)}.side-w{width:auto;margin:10px;border-radius:16px}.side-w.mobile{width:90%;margin:0;border-radius:0}.vertical-nav-tree-invisible{display:none}.vertical-nav-tree ul,.vertical-nav-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.vertical-nav-tree div[role=group]{border-radius:var(--borderRadius);background-color:#ffffff57}.vertical-nav-tree div[role=group]>.mat-tree-node{padding:10px 20px}a{color:inherit}.restricted{display:none}mat-sidenav.mat-drawer.mat-drawer-opened.mat-drawer-side.mat-sidenav{min-width:200px;overflow-x:auto;white-space:nowrap}.menu-btn{background-color:#ffffff57;border-radius:var(--borderRadius)!important;padding:10px 20px;color:#2b2b2b;border:none}.expandable-node .group{border:1px solid rgba(0,0,0,.11)!important}.profile{position:sticky;bottom:0;right:0;left:0;background-color:var(--primary);background-image:linear-gradient(45deg,#ffffffa8,#ffffffa8);padding:10px}.vertical-nav-side-padding{padding:var(--space-8)}\n"], dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$6.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i4.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i4.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i4.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i5$1.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i5$1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i5$1.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i5$1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i5$1.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i5$1.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
15656
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: VerticalNavComponent, isStandalone: true, selector: "vertical-nav", inputs: { shouldShowChildInput: { classPropertyName: "shouldShowChildInput", publicName: "shouldShowChildInput", isSignal: true, isRequired: false, transformFunction: null }, toolbarTitle: { classPropertyName: "toolbarTitle", publicName: "toolbarTitle", isSignal: true, isRequired: false, transformFunction: null }, toolbarLogo: { classPropertyName: "toolbarLogo", publicName: "toolbarLogo", isSignal: true, isRequired: false, transformFunction: null }, toolbarLogoStyle: { classPropertyName: "toolbarLogoStyle", publicName: "toolbarLogoStyle", isSignal: true, isRequired: false, transformFunction: null }, fixedTopGap: { classPropertyName: "fixedTopGap", publicName: "fixedTopGap", isSignal: true, isRequired: false, transformFunction: null }, sidenavTemplate: { classPropertyName: "sidenavTemplate", publicName: "sidenavTemplate", isSignal: true, isRequired: false, transformFunction: null }, toolbarTemplate: { classPropertyName: "toolbarTemplate", publicName: "toolbarTemplate", isSignal: true, isRequired: false, transformFunction: null }, toolbarEndTemplate: { classPropertyName: "toolbarEndTemplate", publicName: "toolbarEndTemplate", isSignal: true, isRequired: false, transformFunction: null }, bodyTemplate: { classPropertyName: "bodyTemplate", publicName: "bodyTemplate", isSignal: true, isRequired: false, transformFunction: null }, useToolbar: { classPropertyName: "useToolbar", publicName: "useToolbar", isSignal: true, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: true, isRequired: false, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "drawer", first: true, predicate: ["snav"], descendants: true, isSignal: true }, { propertyName: "toolbarContRef", first: true, predicate: ["toolbarCont"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"vertical-nav\" [class.vertical-nav-is-mobile]=\"uS.isMobileSignal()\">\n @if (useToolbar()) {\n <div #toolbarCont>\n @if (toolbarTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarTemplate()\" />\n } @else {\n <mat-toolbar\n color=\"primary\"\n class=\"vertical-nav-toolbar bg-primary d-flex justify-content-between\">\n <div class=\"d-flex align-items-center w-100\">\n <button mat-icon-button (click)=\"snav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n @if (toolbarLogo()) {\n <img [src]=\"toolbarLogo()\" [ngStyle]=\"toolbarLogoStyle()\" alt=\"toolbar logo\" class=\"toolbarLogo\" />\n }\n @if (toolbarTitle()) {\n <h1 class=\"vertical-nav-app-name\">{{ toolbarTitle() | appTranslate | async }}</h1>\n }\n </div>\n <div>\n @if (toolbarEndTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarEndTemplate()\" />\n }\n </div>\n </mat-toolbar>\n }\n </div>\n }\n\n <mat-sidenav-container [id]=\"id()\" class=\"vertical-nav-container\">\n <mat-sidenav\n class=\"side-w\"\n [ngClass]=\"{ mobile: this.uS.isMobileSignal() }\"\n #snav\n [mode]=\"uS.isMobileSignal() ? 'over' : 'side'\"\n [opened]=\"!uS.isMobileSignal() && showMenu()\"\n [fixedInViewport]=\"uS.isMobileSignal()\"\n [fixedTopGap]=\"fixedTopGap() || toolbarContRef()?.nativeElement?.offsetHeight || 0\"\n [hidden]=\"!showMenu()\">\n <div class=\"vertical-nav-side-padding\">\n @if (sidenavTemplate()) {\n <ng-container *ngTemplateOutlet=\"sidenavTemplate()\" />\n } @else {\n <mat-tree\n [dataSource]=\"dataSource()\"\n [treeControl]=\"treeControl()\"\n class=\"vertical-nav-tree\">\n <!-- This is the tree node template for leaf nodes -->\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild()\"\n class=\"expandable-node\">\n <div class=\"mat-tree-node\">\n <button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n class=\"menu-btn level{{ node.level }}\">\n <div class=\"row\">\n <div class=\"col\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </div>\n <div class=\"col-auto\">\n <span\n class=\"fa {{\n treeControl().isExpanded(node) ? 'fa-chevron-down' : 'fa-chevron-right'\n }} \"></span>\n </div>\n </div>\n </button>\n </div>\n <div>\n <!-- There is inline padding applied to this div using styles.\n This padding value depends on the mat-icon-button width. -->\n <div\n [class.vertical-nav-tree-invisible]=\"!treeControl().isExpanded(node)\"\n role=\"group\"\n class=\"group\">\n <ng-container matTreeNodeOutlet />\n </div>\n </div>\n </mat-nested-tree-node>\n <!-- There is inline padding applied to this node using styles.\n This padding value depends on the mat-icon-button width. -->\n <mat-tree-node\n *matTreeNodeDef=\"let node; when: shouldShowChild()\"\n matTreeNodeToggle\n class=\"single-node level{{ node.level }}\">\n <a [routerLink]=\"node.link\" class=\"d-block w-100\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </a>\n </mat-tree-node>\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodeToggle\n class=\"single-node restricted level{{ node.level }}\" />\n </mat-tree>\n }\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"vertical-nav-body\">\n @if (bodyTemplate()) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n } @else {\n <ng-content />\n }\n </mat-sidenav-content>\n </mat-sidenav-container>\n</div>\n", styles: [".menu{background-color:#fff}.vertical-nav{display:flex;flex-direction:column;height:100%}.vertical-nav.fullScreen{position:absolute;inset:0}.toolbarLogo{--toolbarLogoDimen:50px;height:var(--toolbarLogoDimen)}h1.vertical-nav-app-name{margin-left:8px}.vertical-nav-container{flex:1}.vertical-nav-is-mobile .vertical-nav-toolbar{position:fixed;z-index:2}.vertical-nav-is-mobile .vertical-nav-container{flex:1 0 auto}.mat-drawer-container{background-color:unset}.mat-drawer-content{background-color:#e9e9e9}.expandable-node button{width:100%;border-radius:0;text-align:left}.single-node button{width:24px}.level0{border-bottom:1px solid rgba(141,141,141,.231372549)}.side-w{width:auto;margin:10px;border-radius:16px}.side-w.mobile{width:90%;margin:0;border-radius:0}.vertical-nav-tree-invisible{display:none}.vertical-nav-tree ul,.vertical-nav-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.vertical-nav-tree div[role=group]{border-radius:var(--borderRadius);background-color:#ffffff57}.vertical-nav-tree div[role=group]>.mat-tree-node{padding:10px 20px}a{color:inherit}.restricted{display:none}mat-sidenav.mat-drawer.mat-drawer-opened.mat-drawer-side.mat-sidenav{min-width:200px;overflow-x:auto;white-space:nowrap}.menu-btn{background-color:#ffffff57;border-radius:var(--borderRadius)!important;padding:10px 20px;color:#2b2b2b;border:none}.expandable-node .group{border:1px solid rgba(0,0,0,.11)!important}.profile{position:sticky;bottom:0;right:0;left:0;background-color:var(--primary);background-image:linear-gradient(45deg,#ffffffa8,#ffffffa8);padding:10px}.vertical-nav-side-padding{padding:var(--space-8)}\n"], dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$6.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i4.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i4.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i4.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i5$1.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i5$1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i5$1.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i5$1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i5$1.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i5$1.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
15655
15657
  }
15656
15658
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: VerticalNavComponent, decorators: [{
15657
15659
  type: Component,
@@ -15666,7 +15668,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
15666
15668
  ImageLoaderDirective,
15667
15669
  CommonModule,
15668
15670
  TranslatePipe,
15669
- ], template: "<div class=\"vertical-nav\" [class.vertical-nav-is-mobile]=\"uS.isMobileSignal()\">\n @if (useToolbar()) {\n <div #toolbarCont>\n @if (toolbarTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarTemplate()\" />\n } @else {\n <mat-toolbar\n color=\"primary\"\n class=\"vertical-nav-toolbar bg-primary d-flex justify-content-between\">\n <div class=\"d-flex align-items-center w-100\">\n <button mat-icon-button (click)=\"snav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n @if (title()) {\n <h1 class=\"vertical-nav-app-name\">{{ title() | appTranslate | async }}</h1>\n }\n </div>\n <div>\n @if (toolbarEndTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarEndTemplate()\" />\n }\n </div>\n </mat-toolbar>\n }\n </div>\n }\n\n <mat-sidenav-container [id]=\"id()\" class=\"vertical-nav-container\">\n <mat-sidenav\n class=\"side-w\"\n [ngClass]=\"{ mobile: this.uS.isMobileSignal() }\"\n #snav\n [mode]=\"uS.isMobileSignal() ? 'over' : 'side'\"\n [opened]=\"!uS.isMobileSignal() && showMenu()\"\n [fixedInViewport]=\"uS.isMobileSignal()\"\n [fixedTopGap]=\"fixedTopGap() || toolbarContRef()?.nativeElement?.offsetHeight || 0\"\n [hidden]=\"!showMenu()\">\n <div class=\"vertical-nav-side-padding\">\n @if (sidenavTemplate()) {\n <ng-container *ngTemplateOutlet=\"sidenavTemplate()\" />\n } @else {\n <mat-tree\n [dataSource]=\"dataSource()\"\n [treeControl]=\"treeControl()\"\n class=\"vertical-nav-tree\">\n <!-- This is the tree node template for leaf nodes -->\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild()\"\n class=\"expandable-node\">\n <div class=\"mat-tree-node\">\n <button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n class=\"menu-btn level{{ node.level }}\">\n <div class=\"row\">\n <div class=\"col\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </div>\n <div class=\"col-auto\">\n <span\n class=\"fa {{\n treeControl().isExpanded(node) ? 'fa-chevron-down' : 'fa-chevron-right'\n }} \"></span>\n </div>\n </div>\n </button>\n </div>\n <div>\n <!-- There is inline padding applied to this div using styles.\n This padding value depends on the mat-icon-button width. -->\n <div\n [class.vertical-nav-tree-invisible]=\"!treeControl().isExpanded(node)\"\n role=\"group\"\n class=\"group\">\n <ng-container matTreeNodeOutlet />\n </div>\n </div>\n </mat-nested-tree-node>\n <!-- There is inline padding applied to this node using styles.\n This padding value depends on the mat-icon-button width. -->\n <mat-tree-node\n *matTreeNodeDef=\"let node; when: shouldShowChild()\"\n matTreeNodeToggle\n class=\"single-node level{{ node.level }}\">\n <a [routerLink]=\"node.link\" class=\"d-block w-100\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </a>\n </mat-tree-node>\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodeToggle\n class=\"single-node restricted level{{ node.level }}\" />\n </mat-tree>\n }\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"vertical-nav-body\">\n @if (bodyTemplate()) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n } @else {\n <ng-content />\n }\n </mat-sidenav-content>\n </mat-sidenav-container>\n</div>\n", styles: [".menu{background-color:#fff}.vertical-nav{display:flex;flex-direction:column;height:100%}.vertical-nav.fullScreen{position:absolute;inset:0}h1.vertical-nav-app-name{margin-left:8px}.vertical-nav-container{flex:1}.vertical-nav-is-mobile .vertical-nav-toolbar{position:fixed;z-index:2}.vertical-nav-is-mobile .vertical-nav-container{flex:1 0 auto}.mat-drawer-container{background-color:unset}.mat-drawer-content{background-color:#e9e9e9}.expandable-node button{width:100%;border-radius:0;text-align:left}.single-node button{width:24px}.level0{border-bottom:1px solid rgba(141,141,141,.231372549)}.side-w{width:auto;margin:10px;border-radius:16px}.side-w.mobile{width:90%;margin:0;border-radius:0}.vertical-nav-tree-invisible{display:none}.vertical-nav-tree ul,.vertical-nav-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.vertical-nav-tree div[role=group]{border-radius:var(--borderRadius);background-color:#ffffff57}.vertical-nav-tree div[role=group]>.mat-tree-node{padding:10px 20px}a{color:inherit}.restricted{display:none}mat-sidenav.mat-drawer.mat-drawer-opened.mat-drawer-side.mat-sidenav{min-width:200px;overflow-x:auto;white-space:nowrap}.menu-btn{background-color:#ffffff57;border-radius:var(--borderRadius)!important;padding:10px 20px;color:#2b2b2b;border:none}.expandable-node .group{border:1px solid rgba(0,0,0,.11)!important}.profile{position:sticky;bottom:0;right:0;left:0;background-color:var(--primary);background-image:linear-gradient(45deg,#ffffffa8,#ffffffa8);padding:10px}.vertical-nav-side-padding{padding:var(--space-8)}\n"] }]
15671
+ ], template: "<div class=\"vertical-nav\" [class.vertical-nav-is-mobile]=\"uS.isMobileSignal()\">\n @if (useToolbar()) {\n <div #toolbarCont>\n @if (toolbarTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarTemplate()\" />\n } @else {\n <mat-toolbar\n color=\"primary\"\n class=\"vertical-nav-toolbar bg-primary d-flex justify-content-between\">\n <div class=\"d-flex align-items-center w-100\">\n <button mat-icon-button (click)=\"snav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n @if (toolbarLogo()) {\n <img [src]=\"toolbarLogo()\" [ngStyle]=\"toolbarLogoStyle()\" alt=\"toolbar logo\" class=\"toolbarLogo\" />\n }\n @if (toolbarTitle()) {\n <h1 class=\"vertical-nav-app-name\">{{ toolbarTitle() | appTranslate | async }}</h1>\n }\n </div>\n <div>\n @if (toolbarEndTemplate()) {\n <ng-container *ngTemplateOutlet=\"toolbarEndTemplate()\" />\n }\n </div>\n </mat-toolbar>\n }\n </div>\n }\n\n <mat-sidenav-container [id]=\"id()\" class=\"vertical-nav-container\">\n <mat-sidenav\n class=\"side-w\"\n [ngClass]=\"{ mobile: this.uS.isMobileSignal() }\"\n #snav\n [mode]=\"uS.isMobileSignal() ? 'over' : 'side'\"\n [opened]=\"!uS.isMobileSignal() && showMenu()\"\n [fixedInViewport]=\"uS.isMobileSignal()\"\n [fixedTopGap]=\"fixedTopGap() || toolbarContRef()?.nativeElement?.offsetHeight || 0\"\n [hidden]=\"!showMenu()\">\n <div class=\"vertical-nav-side-padding\">\n @if (sidenavTemplate()) {\n <ng-container *ngTemplateOutlet=\"sidenavTemplate()\" />\n } @else {\n <mat-tree\n [dataSource]=\"dataSource()\"\n [treeControl]=\"treeControl()\"\n class=\"vertical-nav-tree\">\n <!-- This is the tree node template for leaf nodes -->\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild()\"\n class=\"expandable-node\">\n <div class=\"mat-tree-node\">\n <button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n class=\"menu-btn level{{ node.level }}\">\n <div class=\"row\">\n <div class=\"col\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </div>\n <div class=\"col-auto\">\n <span\n class=\"fa {{\n treeControl().isExpanded(node) ? 'fa-chevron-down' : 'fa-chevron-right'\n }} \"></span>\n </div>\n </div>\n </button>\n </div>\n <div>\n <!-- There is inline padding applied to this div using styles.\n This padding value depends on the mat-icon-button width. -->\n <div\n [class.vertical-nav-tree-invisible]=\"!treeControl().isExpanded(node)\"\n role=\"group\"\n class=\"group\">\n <ng-container matTreeNodeOutlet />\n </div>\n </div>\n </mat-nested-tree-node>\n <!-- There is inline padding applied to this node using styles.\n This padding value depends on the mat-icon-button width. -->\n <mat-tree-node\n *matTreeNodeDef=\"let node; when: shouldShowChild()\"\n matTreeNodeToggle\n class=\"single-node level{{ node.level }}\">\n <a [routerLink]=\"node.link\" class=\"d-block w-100\">\n <span class=\"{{ node.icon }}\"></span>\n {{ node.label | appTranslate | async }}\n </a>\n </mat-tree-node>\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodeToggle\n class=\"single-node restricted level{{ node.level }}\" />\n </mat-tree>\n }\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"vertical-nav-body\">\n @if (bodyTemplate()) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n } @else {\n <ng-content />\n }\n </mat-sidenav-content>\n </mat-sidenav-container>\n</div>\n", styles: [".menu{background-color:#fff}.vertical-nav{display:flex;flex-direction:column;height:100%}.vertical-nav.fullScreen{position:absolute;inset:0}.toolbarLogo{--toolbarLogoDimen:50px;height:var(--toolbarLogoDimen)}h1.vertical-nav-app-name{margin-left:8px}.vertical-nav-container{flex:1}.vertical-nav-is-mobile .vertical-nav-toolbar{position:fixed;z-index:2}.vertical-nav-is-mobile .vertical-nav-container{flex:1 0 auto}.mat-drawer-container{background-color:unset}.mat-drawer-content{background-color:#e9e9e9}.expandable-node button{width:100%;border-radius:0;text-align:left}.single-node button{width:24px}.level0{border-bottom:1px solid rgba(141,141,141,.231372549)}.side-w{width:auto;margin:10px;border-radius:16px}.side-w.mobile{width:90%;margin:0;border-radius:0}.vertical-nav-tree-invisible{display:none}.vertical-nav-tree ul,.vertical-nav-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.vertical-nav-tree div[role=group]{border-radius:var(--borderRadius);background-color:#ffffff57}.vertical-nav-tree div[role=group]>.mat-tree-node{padding:10px 20px}a{color:inherit}.restricted{display:none}mat-sidenav.mat-drawer.mat-drawer-opened.mat-drawer-side.mat-sidenav{min-width:200px;overflow-x:auto;white-space:nowrap}.menu-btn{background-color:#ffffff57;border-radius:var(--borderRadius)!important;padding:10px 20px;color:#2b2b2b;border:none}.expandable-node .group{border:1px solid rgba(0,0,0,.11)!important}.profile{position:sticky;bottom:0;right:0;left:0;background-color:var(--primary);background-image:linear-gradient(45deg,#ffffffa8,#ffffffa8);padding:10px}.vertical-nav-side-padding{padding:var(--space-8)}\n"] }]
15670
15672
  }], ctorParameters: () => [] });
15671
15673
 
15672
15674
  class TextAreaModalComponent {