@onemrvapublic/design-system 20.1.0-develop.2 → 20.1.0

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.
Files changed (60) hide show
  1. package/fesm2022/onemrvapublic-design-system-flag-icon.mjs +3 -3
  2. package/fesm2022/onemrvapublic-design-system-layout.mjs +166 -110
  3. package/fesm2022/onemrvapublic-design-system-layout.mjs.map +1 -1
  4. package/fesm2022/onemrvapublic-design-system-mat-address.mjs +3 -3
  5. package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs +7 -7
  6. package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs +10 -10
  7. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs +6 -6
  8. package/fesm2022/onemrvapublic-design-system-mat-choice-chip.mjs +3 -3
  9. package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +3 -3
  10. package/fesm2022/onemrvapublic-design-system-mat-country-item.mjs +3 -3
  11. package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs +3 -3
  12. package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs +3 -3
  13. package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs +19 -19
  14. package/fesm2022/onemrvapublic-design-system-mat-input-address.mjs +6 -6
  15. package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs +3 -3
  16. package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs +3 -3
  17. package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs +3 -3
  18. package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs +3 -3
  19. package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs +6 -6
  20. package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs +7 -7
  21. package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs +7 -7
  22. package/fesm2022/onemrvapublic-design-system-mat-navigation.mjs +169 -0
  23. package/fesm2022/onemrvapublic-design-system-mat-navigation.mjs.map +1 -0
  24. package/fesm2022/onemrvapublic-design-system-mat-notification.mjs +3 -3
  25. package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs +7 -7
  26. package/fesm2022/onemrvapublic-design-system-mat-panel.mjs +19 -19
  27. package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs +13 -13
  28. package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs +3 -3
  29. package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs +13 -13
  30. package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs +7 -7
  31. package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs +7 -7
  32. package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs +7 -7
  33. package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs +10 -10
  34. package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs +7 -7
  35. package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs +7 -7
  36. package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs +9 -9
  37. package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs +16 -16
  38. package/fesm2022/onemrvapublic-design-system-mat-timepicker.mjs +22 -22
  39. package/fesm2022/onemrvapublic-design-system-mat-timepicker.mjs.map +1 -1
  40. package/fesm2022/onemrvapublic-design-system-mat-toast.mjs +8 -8
  41. package/fesm2022/onemrvapublic-design-system-mat-toast.mjs.map +1 -1
  42. package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs +10 -10
  43. package/fesm2022/onemrvapublic-design-system-page-error.mjs +6 -6
  44. package/fesm2022/onemrvapublic-design-system-page-not-found.mjs +16 -16
  45. package/fesm2022/onemrvapublic-design-system-shared.mjs +71 -70
  46. package/fesm2022/onemrvapublic-design-system-shared.mjs.map +1 -1
  47. package/fesm2022/onemrvapublic-design-system.mjs +720 -513
  48. package/fesm2022/onemrvapublic-design-system.mjs.map +1 -1
  49. package/index.d.ts +121 -62
  50. package/layout/index.d.ts +55 -43
  51. package/layout/src/components/layout/layout.component.scss +4 -2
  52. package/layout/src/components/layout-drawer-title/layout-drawer-title.component.scss +1 -0
  53. package/layout/src/components/layout-left-sidenav/layout-left-sidenav.component.scss +4 -0
  54. package/layout/src/components/layout-sidenav/layout-sidenav.component.scss +21 -0
  55. package/mat-navigation/index.d.ts +54 -0
  56. package/mat-navigation/src/mat-navigation-item/onemrva-mat-navigation-item.component.scss +70 -0
  57. package/mat-navigation/src/mat-navigation-tree/onemrva-mat-navigation-tree.component.scss +0 -0
  58. package/mat-navigation/src/onemrva-mat-navigation.component.scss +34 -0
  59. package/package.json +5 -1
  60. package/shared/index.d.ts +1 -1
@@ -1,21 +1,29 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, TemplateRef, ContentChildren, Input, ViewChild, Component, DestroyRef, ViewContainerRef, DOCUMENT, Directive, Injectable, EventEmitter, signal, isDevMode, Output, ContentChild, Pipe, NgModule } from '@angular/core';
2
+ import { inject, ChangeDetectorRef, TemplateRef, ContentChildren, Input, ViewChild, Component, DestroyRef, ViewContainerRef, DOCUMENT, Directive, signal, Injectable, EventEmitter, isDevMode, Output, ContentChild, Pipe, NgModule } from '@angular/core';
3
3
  import { Router, RouterLink, RouterLinkActive, RouterModule } from '@angular/router';
4
- import { NgTemplateOutlet, NgClass, DOCUMENT as DOCUMENT$1, AsyncPipe, NgStyle, CommonModule } from '@angular/common';
4
+ import { NgTemplateOutlet, NgClass, DOCUMENT as DOCUMENT$1, NgStyle, CommonModule } from '@angular/common';
5
5
  import { MatIcon, MatIconModule } from '@angular/material/icon';
6
6
  import { MatMenu, MatMenuTrigger, MatMenuItem, MatMenuModule } from '@angular/material/menu';
7
7
  import { TranslateService, TranslatePipe, TranslateModule } from '@ngx-translate/core';
8
- import { startWith, map, Subject, takeUntil, BehaviorSubject } from 'rxjs';
8
+ import { Subject, takeUntil, startWith, BehaviorSubject } from 'rxjs';
9
9
  import { BreakpointObserver, Breakpoints, LayoutModule } from '@angular/cdk/layout';
10
+ import * as i2$1 from '@angular/material/sidenav';
10
11
  import { MatDrawer, MatDrawerContainer, MatSidenavModule } from '@angular/material/sidenav';
11
12
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
12
13
  import { trigger, state, transition, style, animate } from '@angular/animations';
13
14
  import { MatIconButton, MatFabButton, MatButtonModule } from '@angular/material/button';
14
- import { MatTabGroup, MatTab, MatTabLabel, MatTabNav, MatTabLink, MatTabNavPanel, MatTabsModule } from '@angular/material/tabs';
15
- import { MatDivider, MatDividerModule } from '@angular/material/divider';
15
+ import { OnemrvaMatNavigationComponent } from '@onemrvapublic/design-system/mat-navigation';
16
+ import * as i1 from '@angular/material/form-field';
17
+ import { MatFormFieldModule } from '@angular/material/form-field';
18
+ import * as i2 from '@angular/material/select';
19
+ import { MatSelectModule } from '@angular/material/select';
20
+ import * as i3 from '@angular/forms';
21
+ import { FormsModule } from '@angular/forms';
16
22
  import { OnemRvaCDNService, OnemRvaSizeDirective, OnemRvaColorDirective } from '@onemrvapublic/design-system/shared';
17
23
  import { MatToolbar, MatToolbarModule } from '@angular/material/toolbar';
18
- import * as i1 from '@onemrvapublic/design-system/mat-avatar';
24
+ import { MatTabNav, MatTabLink, MatTabNavPanel, MatTabsModule } from '@angular/material/tabs';
25
+ import { MatDivider, MatDividerModule } from '@angular/material/divider';
26
+ import * as i1$1 from '@onemrvapublic/design-system/mat-avatar';
19
27
  import { OnemrvaMatAvatarModule } from '@onemrvapublic/design-system/mat-avatar';
20
28
  import { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';
21
29
  import { MatRipple } from '@angular/material/core';
@@ -28,6 +36,9 @@ class LayoutSubrouteComponent {
28
36
  this.router = inject(Router);
29
37
  }
30
38
  ngAfterViewInit() {
39
+ if (this.label === undefined) {
40
+ console.error('ONEM/RVA DESIGN SYSTEM ERROR : Since 20.1.0 , you must add a label attribute to the onemrva-layout-route', this.routerLink);
41
+ }
31
42
  this.cd.detectChanges();
32
43
  }
33
44
  hasSubroutes() {
@@ -52,12 +63,12 @@ class LayoutSubrouteComponent {
52
63
  return false;
53
64
  }
54
65
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutSubrouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutSubrouteComponent, isStandalone: true, selector: "onemrva-layout-subroute", inputs: { customNgClass: "customNgClass", routerLink: "routerLink", routerLinkActiveOptions: "routerLinkActiveOptions", dataCy: "dataCy" }, queries: [{ propertyName: "subroutes", predicate: LayoutSubrouteComponent }], viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<ng-template>\n <ng-content></ng-content>\n</ng-template>\n" }); }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutSubrouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutSubrouteComponent, isStandalone: true, selector: "onemrva-layout-subroute", inputs: { customNgClass: "customNgClass", routerLink: "routerLink", routerLinkActiveOptions: "routerLinkActiveOptions", dataCy: "dataCy", label: "label", icon: "icon" }, queries: [{ propertyName: "subroutes", predicate: LayoutSubrouteComponent }], viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<ng-template>\n {{ label }}\n</ng-template>\n" }); }
57
68
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutSubrouteComponent, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutSubrouteComponent, decorators: [{
59
70
  type: Component,
60
- args: [{ selector: 'onemrva-layout-subroute', standalone: true, template: "<ng-template>\n <ng-content></ng-content>\n</ng-template>\n" }]
71
+ args: [{ selector: 'onemrva-layout-subroute', standalone: true, template: "<ng-template>\n {{ label }}\n</ng-template>\n" }]
61
72
  }], propDecorators: { customNgClass: [{
62
73
  type: Input
63
74
  }], template: [{
@@ -69,6 +80,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
69
80
  type: Input
70
81
  }], dataCy: [{
71
82
  type: Input
83
+ }], label: [{
84
+ type: Input
85
+ }], icon: [{
86
+ type: Input
72
87
  }], subroutes: [{
73
88
  type: ContentChildren,
74
89
  args: [LayoutSubrouteComponent]
@@ -77,8 +92,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
77
92
  class LayoutRouteComponent {
78
93
  constructor() {
79
94
  this.template = null;
80
- this.mobileTemplate = null;
81
- this.contentTemplate = null;
82
95
  this.cd = inject(ChangeDetectorRef);
83
96
  this.router = inject(Router);
84
97
  }
@@ -87,6 +100,9 @@ class LayoutRouteComponent {
87
100
  }
88
101
  ngAfterViewInit() {
89
102
  this.cd.detectChanges();
103
+ if (this.label === undefined) {
104
+ console.error('ONEM/RVA DESIGN SYSTEM ERROR : Since 20.1.0 , you must add a label attribute to the onemrva-layout-route', this.routerLink);
105
+ }
90
106
  }
91
107
  isRouteActive() {
92
108
  if (this.routerLink === null || this.routerLink === undefined) {
@@ -99,10 +115,10 @@ class LayoutRouteComponent {
99
115
  }
100
116
  return false;
101
117
  }
102
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
103
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: LayoutRouteComponent, isStandalone: true, selector: "onemrva-layout-route", inputs: { customNgClass: "customNgClass", routerLink: "routerLink", routerLinkActiveOptions: "routerLinkActiveOptions", dataCy: "dataCy", baseRouteForActiveMenu: "baseRouteForActiveMenu", label: "label" }, queries: [{ propertyName: "subroutes", predicate: LayoutSubrouteComponent }], viewQueries: [{ propertyName: "template", first: true, predicate: ["navTpl"], descendants: true }, { propertyName: "mobileTemplate", first: true, predicate: ["navMblTpl"], descendants: true }, { propertyName: "contentTemplate", first: true, predicate: ["contentTpl"], descendants: true }], ngImport: i0, template: "<ng-template #navTpl>\n @if (!hasSubroutes()) {\n <ng-container *ngTemplateOutlet=\"contentTmpl\"></ng-container>\n }\n\n @if (hasSubroutes()) {\n <span role=\"button\" [matMenuTriggerFor]=\"menu\">\n {{ label }}\n </span>\n <mat-icon [matMenuTriggerFor]=\"menu\">expand_more</mat-icon>\n <mat-menu #menu>\n @for (e of subroutes?.toArray(); track e.routerLink) {\n @if (!e.hasSubroutes()) {\n <button\n mat-menu-item\n [routerLink]=\"e.routerLink\"\n routerLinkActive=\"active\"\n [attr.data-cy]=\"e.dataCy\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\"></ng-container>\n }\n </button>\n }\n @if (e.hasSubroutes()) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"submenu\"\n [ngClass]=\"{ active: e.hasActiveSubroute() }\"\n [attr.data-cy]=\"e.dataCy\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\"></ng-container>\n }\n </button>\n <mat-menu #submenu>\n @for (es of e.subroutes?.toArray(); track es.routerLink) {\n <button\n mat-menu-item\n [routerLink]=\"es.routerLink\"\n routerLinkActive=\"active\"\n >\n @if (es.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\">\n </ng-container>\n }\n </button>\n }\n </mat-menu>\n }\n }\n </mat-menu>\n }\n</ng-template>\n\n<ng-template #navMblTpl>\n <ng-container *ngTemplateOutlet=\"contentTmpl\"></ng-container>\n</ng-template>\n\n<ng-template #contentTmpl>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: LayoutRouteComponent, isStandalone: true, selector: "onemrva-layout-route", inputs: { customNgClass: "customNgClass", routerLink: "routerLink", routerLinkActiveOptions: "routerLinkActiveOptions", dataCy: "dataCy", baseRouteForActiveMenu: "baseRouteForActiveMenu", label: "label", icon: "icon" }, queries: [{ propertyName: "subroutes", predicate: LayoutSubrouteComponent }], viewQueries: [{ propertyName: "template", first: true, predicate: ["navTpl"], descendants: true }], ngImport: i0, template: "<ng-template #navTpl>\n @if (!hasSubroutes()) {\n {{ label }}\n } @else if (hasSubroutes()) {\n <span role=\"button\" [matMenuTriggerFor]=\"menu\">\n {{ label }}\n </span>\n <mat-icon [matMenuTriggerFor]=\"menu\">expand_more</mat-icon>\n <mat-menu #menu>\n @for (e of subroutes?.toArray(); track e.routerLink) {\n @if (!e.hasSubroutes()) {\n <button\n mat-menu-item\n [routerLink]=\"e.routerLink\"\n routerLinkActive=\"active\"\n [attr.data-cy]=\"e.dataCy\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\"></ng-container>\n }\n </button>\n }\n @if (e.hasSubroutes()) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"submenu\"\n [ngClass]=\"{ active: e.hasActiveSubroute() }\"\n [attr.data-cy]=\"e.dataCy\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\"></ng-container>\n }\n </button>\n <mat-menu #submenu>\n @for (es of e.subroutes?.toArray(); track es.routerLink) {\n <button\n mat-menu-item\n [routerLink]=\"es.routerLink\"\n routerLinkActive=\"active\"\n >\n @if (es.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\">\n </ng-container>\n }\n </button>\n }\n </mat-menu>\n }\n }\n </mat-menu>\n }\n</ng-template>\n", dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
104
120
  }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutRouteComponent, decorators: [{
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutRouteComponent, decorators: [{
106
122
  type: Component,
107
123
  args: [{ selector: 'onemrva-layout-route', standalone: true, imports: [
108
124
  MatIcon,
@@ -113,18 +129,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
113
129
  RouterLinkActive,
114
130
  NgTemplateOutlet,
115
131
  NgClass,
116
- ], template: "<ng-template #navTpl>\n @if (!hasSubroutes()) {\n <ng-container *ngTemplateOutlet=\"contentTmpl\"></ng-container>\n }\n\n @if (hasSubroutes()) {\n <span role=\"button\" [matMenuTriggerFor]=\"menu\">\n {{ label }}\n </span>\n <mat-icon [matMenuTriggerFor]=\"menu\">expand_more</mat-icon>\n <mat-menu #menu>\n @for (e of subroutes?.toArray(); track e.routerLink) {\n @if (!e.hasSubroutes()) {\n <button\n mat-menu-item\n [routerLink]=\"e.routerLink\"\n routerLinkActive=\"active\"\n [attr.data-cy]=\"e.dataCy\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\"></ng-container>\n }\n </button>\n }\n @if (e.hasSubroutes()) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"submenu\"\n [ngClass]=\"{ active: e.hasActiveSubroute() }\"\n [attr.data-cy]=\"e.dataCy\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\"></ng-container>\n }\n </button>\n <mat-menu #submenu>\n @for (es of e.subroutes?.toArray(); track es.routerLink) {\n <button\n mat-menu-item\n [routerLink]=\"es.routerLink\"\n routerLinkActive=\"active\"\n >\n @if (es.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\">\n </ng-container>\n }\n </button>\n }\n </mat-menu>\n }\n }\n </mat-menu>\n }\n</ng-template>\n\n<ng-template #navMblTpl>\n <ng-container *ngTemplateOutlet=\"contentTmpl\"></ng-container>\n</ng-template>\n\n<ng-template #contentTmpl>\n <ng-content></ng-content>\n</ng-template>\n" }]
132
+ ], template: "<ng-template #navTpl>\n @if (!hasSubroutes()) {\n {{ label }}\n } @else if (hasSubroutes()) {\n <span role=\"button\" [matMenuTriggerFor]=\"menu\">\n {{ label }}\n </span>\n <mat-icon [matMenuTriggerFor]=\"menu\">expand_more</mat-icon>\n <mat-menu #menu>\n @for (e of subroutes?.toArray(); track e.routerLink) {\n @if (!e.hasSubroutes()) {\n <button\n mat-menu-item\n [routerLink]=\"e.routerLink\"\n routerLinkActive=\"active\"\n [attr.data-cy]=\"e.dataCy\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\"></ng-container>\n }\n </button>\n }\n @if (e.hasSubroutes()) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"submenu\"\n [ngClass]=\"{ active: e.hasActiveSubroute() }\"\n [attr.data-cy]=\"e.dataCy\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\"></ng-container>\n }\n </button>\n <mat-menu #submenu>\n @for (es of e.subroutes?.toArray(); track es.routerLink) {\n <button\n mat-menu-item\n [routerLink]=\"es.routerLink\"\n routerLinkActive=\"active\"\n >\n @if (es.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\">\n </ng-container>\n }\n </button>\n }\n </mat-menu>\n }\n }\n </mat-menu>\n }\n</ng-template>\n" }]
117
133
  }], propDecorators: { customNgClass: [{
118
134
  type: Input
119
135
  }], template: [{
120
136
  type: ViewChild,
121
137
  args: ['navTpl']
122
- }], mobileTemplate: [{
123
- type: ViewChild,
124
- args: ['navMblTpl']
125
- }], contentTemplate: [{
126
- type: ViewChild,
127
- args: ['contentTpl']
128
138
  }], routerLink: [{
129
139
  type: Input
130
140
  }], routerLinkActiveOptions: [{
@@ -135,6 +145,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
135
145
  type: Input
136
146
  }], label: [{
137
147
  type: Input
148
+ }], icon: [{
149
+ type: Input
138
150
  }], subroutes: [{
139
151
  type: ContentChildren,
140
152
  args: [LayoutSubrouteComponent]
@@ -147,10 +159,10 @@ class LayoutContentComponent {
147
159
  ngAfterViewInit() {
148
160
  this.cd.detectChanges();
149
161
  }
150
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
151
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutContentComponent, isStandalone: true, selector: "onemrva-layout-content", inputs: { customNgClass: "customNgClass" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
162
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
163
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutContentComponent, isStandalone: true, selector: "onemrva-layout-content", inputs: { customNgClass: "customNgClass" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
152
164
  }
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutContentComponent, decorators: [{
165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutContentComponent, decorators: [{
154
166
  type: Component,
155
167
  args: [{
156
168
  selector: 'onemrva-layout-content',
@@ -171,10 +183,10 @@ class LayoutTitleComponent {
171
183
  ngAfterViewInit() {
172
184
  this.cd.detectChanges();
173
185
  }
174
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
175
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutTitleComponent, isStandalone: true, selector: "onemrva-layout-title", inputs: { customNgClass: "customNgClass" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutTitleComponent, isStandalone: true, selector: "onemrva-layout-title", inputs: { customNgClass: "customNgClass" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
176
188
  }
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutTitleComponent, decorators: [{
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutTitleComponent, decorators: [{
178
190
  type: Component,
179
191
  args: [{
180
192
  selector: 'onemrva-layout-title',
@@ -197,10 +209,10 @@ var Environment;
197
209
  })(Environment || (Environment = {}));
198
210
 
199
211
  class LayoutFooterComponent {
200
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
201
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutFooterComponent, isStandalone: true, selector: "onemrva-layout-footer", viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
212
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
213
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutFooterComponent, isStandalone: true, selector: "onemrva-layout-footer", viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
202
214
  }
203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutFooterComponent, decorators: [{
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutFooterComponent, decorators: [{
204
216
  type: Component,
205
217
  args: [{
206
218
  selector: 'onemrva-layout-footer',
@@ -219,10 +231,10 @@ class LayoutLoginMenuComponent {
219
231
  ngAfterViewInit() {
220
232
  this.cd.detectChanges();
221
233
  }
222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutLoginMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
223
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutLoginMenuComponent, isStandalone: true, selector: "onemrva-layout-login-menu", inputs: { customNgClass: "customNgClass" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
234
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutLoginMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutLoginMenuComponent, isStandalone: true, selector: "onemrva-layout-login-menu", inputs: { customNgClass: "customNgClass" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
224
236
  }
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutLoginMenuComponent, decorators: [{
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutLoginMenuComponent, decorators: [{
226
238
  type: Component,
227
239
  args: [{
228
240
  selector: 'onemrva-layout-login-menu',
@@ -263,10 +275,10 @@ class DrawerHostDirective {
263
275
  this.bodyClass();
264
276
  });
265
277
  }
266
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: DrawerHostDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
267
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.2", type: DrawerHostDirective, isStandalone: true, selector: "[drawerhost]", ngImport: i0 }); }
278
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DrawerHostDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
279
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.4", type: DrawerHostDirective, isStandalone: true, selector: "[drawerhost]", ngImport: i0 }); }
268
280
  }
269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: DrawerHostDirective, decorators: [{
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DrawerHostDirective, decorators: [{
270
282
  type: Directive,
271
283
  args: [{
272
284
  selector: '[drawerhost]',
@@ -276,16 +288,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
276
288
 
277
289
  class OnemrvaDrawerService {
278
290
  constructor() {
279
- this.hasBackdrop = false;
291
+ this.hasBackdrop = signal(true, ...(ngDevMode ? [{ debugName: "hasBackdrop" }] : []));
292
+ this.size = signal('', ...(ngDevMode ? [{ debugName: "size" }] : []));
293
+ this.isSide = false;
280
294
  }
281
- toggle() {
295
+ toggle(isSide = false) {
282
296
  if (!this.drawer)
283
297
  return;
298
+ this.isSide = isSide;
284
299
  this.drawer?.toggle();
285
300
  }
286
- open() {
301
+ open(isSide = false) {
287
302
  if (!this.drawer)
288
303
  return;
304
+ this.isSide = isSide;
289
305
  this.drawer?.open();
290
306
  }
291
307
  close() {
@@ -293,10 +309,19 @@ class OnemrvaDrawerService {
293
309
  return;
294
310
  this.drawer?.close();
295
311
  }
296
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: OnemrvaDrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
297
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: OnemrvaDrawerService, providedIn: 'root' }); }
312
+ classes() {
313
+ if (this.isSide) {
314
+ return [this.size(), 'side-menu'];
315
+ }
316
+ return [this.size()];
317
+ }
318
+ setDrawer(drawer) {
319
+ this.drawer = drawer;
320
+ }
321
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: OnemrvaDrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
322
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: OnemrvaDrawerService, providedIn: 'root' }); }
298
323
  }
299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: OnemrvaDrawerService, decorators: [{
324
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: OnemrvaDrawerService, decorators: [{
300
325
  type: Injectable,
301
326
  args: [{
302
327
  providedIn: 'root',
@@ -305,31 +330,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
305
330
 
306
331
  class LayoutSidenavComponent {
307
332
  constructor() {
333
+ this.languages = [];
334
+ this.items = [];
308
335
  this.translateService = inject(TranslateService);
309
336
  this.document = inject(DOCUMENT$1);
310
337
  this.drawerService = inject(OnemrvaDrawerService);
311
- this.selectedLanguageIndex$ = this.translateService.onLangChange.pipe(startWith(null), map(() => this.languages.findIndex(l => l.code === this.translateService.currentLang)));
312
338
  }
313
339
  ngOnInit() {
340
+ this.currentLanguage = this.languages.filter(l => l.code == this.translateService.currentLang)[0];
314
341
  if (this.routes)
315
342
  this.helpMenuOpen = this.routes.map(route => route.hasSubroutes()
316
343
  ? ['out', ...route.subroutes.map(() => 'out')]
317
344
  : ['in']);
345
+ // Replace your existing items population with:
346
+ this.items = this.populateItemsRecursively(this.routes);
318
347
  }
319
- changeLanguage(index) {
320
- const language = this.languages[index];
321
- this.translateService.use(language.code);
322
- this.document.documentElement.lang = language.code;
348
+ changeLanguage(event) {
349
+ this.translateService.use(event.value.code);
350
+ this.document.documentElement.lang = event.value.code;
323
351
  }
324
352
  close() {
325
353
  this.drawerService.close();
326
354
  }
327
- openSubmenu(index, subIdx = 0) {
328
- this.helpMenuOpen[index][subIdx] =
329
- this.helpMenuOpen[index][subIdx] === 'out' ? 'in' : 'out';
355
+ populateItemsRecursively(routes) {
356
+ const items = [];
357
+ if (routes === undefined)
358
+ routes = [];
359
+ const routeArray = Array.isArray(routes) ? routes : routes.toArray();
360
+ for (const route of routeArray) {
361
+ const navItem = {
362
+ routerLink: typeof route.routerLink === 'string' ? route.routerLink : undefined,
363
+ label: this.getRouteLabel(route),
364
+ icon: route.icon, // LayoutSubrouteComponent doesn't have icon, so cast to any
365
+ dataCy: route.dataCy,
366
+ };
367
+ // Recursively populate children if subroutes exist
368
+ if (route.hasSubroutes() && route.subroutes) {
369
+ navItem.children = this.populateItemsRecursively(route.subroutes);
370
+ }
371
+ items.push(navItem);
372
+ }
373
+ return items;
330
374
  }
331
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutSidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
332
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: LayoutSidenavComponent, isStandalone: true, selector: "onemrva-layout-sidenav", inputs: { isSmall: "isSmall", languages: "languages", routes: "routes" }, ngImport: i0, template: "@if (\n isSmall && (routes?.toArray()?.length || (languages && languages.length > 1))\n) {\n <ng-container>\n <button\n type=\"button\"\n mat-icon-button\n class=\"float-right\"\n (click)=\"close()\"\n data-cy=\"smallDeviceMenu\"\n attr.aria-label=\"{{ 'layout.menu' | translate }}\"\n >\n <mat-icon>close</mat-icon>\n </button>\n @if (isSmall && languages && languages.length > 1) {\n <ng-container>\n <mat-tab-group\n class=\"language-tabs\"\n [selectedIndex]=\"selectedLanguageIndex$ | async\"\n (selectedIndexChange)=\"changeLanguage($event)\"\n >\n @for (lang of languages; track lang.code) {\n <mat-tab>\n <div *matTabLabel [attr.data-cy]=\"'language_' + lang.code\">\n {{ lang.label }}\n </div>\n </mat-tab>\n }\n </mat-tab-group>\n </ng-container>\n }\n @if (isSmall && routes?.toArray()?.length) {\n <ng-container>\n @if (languages && languages.length > 1) {\n <mat-divider\n style=\"align-self: stretch; margin-bottom: 10px\"\n ></mat-divider>\n }\n <div>\n @for (\n e of routes?.toArray();\n track e.routerLink;\n let rtidx = $index\n ) {\n @if (!e.hasSubroutes()) {\n <ng-container>\n <button\n [routerLink]=\"e.routerLink\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n routerLinkActive=\"active\"\n class=\"mobile-menu-item\"\n >\n @if (e.mobileTemplate; as routeTemplate) {\n <ng-container\n *ngTemplateOutlet=\"routeTemplate\"\n ></ng-container>\n }\n </button>\n </ng-container>\n }\n @if (e.hasSubroutes()) {\n <ng-container>\n <button\n [routerLink]=\"e.routerLink\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n routerLinkActive=\"active\"\n class=\"mobile-menu-item\"\n (click)=\"openSubmenu(rtidx)\"\n [attr.data-cy]=\"e.dataCy\"\n >\n {{ e.label }}\n <mat-icon>expand_more</mat-icon>\n </button>\n <div [@slideInOut]=\"helpMenuOpen[rtidx][0]\">\n @for (\n es of e.subroutes?.toArray();\n track es.dataCy;\n let j = $index\n ) {\n <button\n [routerLink]=\"es.routerLink\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n routerLinkActive=\"active\"\n class=\"mobile-menu-item\"\n (click)=\"openSubmenu(rtidx, j + 1)\"\n [attr.data-cy]=\"es.dataCy\"\n >\n @if (es.template; as routeTemplate) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"routeTemplate\"\n ></ng-container>\n </ng-container>\n }\n @if (es.hasSubroutes()) {\n <mat-icon>expand_more</mat-icon>\n }\n </button>\n <div [@slideInOut]=\"helpMenuOpen[rtidx][j + 1]\">\n @for (ess of es.subroutes?.toArray(); track ess.dataCy) {\n <button\n [routerLink]=\"ess.routerLink\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n routerLinkActive=\"active\"\n class=\"mobile-menu-item\"\n [attr.data-cy]=\"ess.dataCy\"\n >\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n @if (ess.template; as routeTemplate) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"routeTemplate\"\n ></ng-container>\n </ng-container>\n }\n </button>\n }\n </div>\n }\n </div>\n </ng-container>\n }\n }\n </div>\n </ng-container>\n }\n </ng-container>\n}\n", styles: [":host{min-width:250px}:host .mobile-menu-item{display:flex;width:100%;background:var(--mat-sys-background);padding:var(--spacer);border:none;box-shadow:none;font-size:1.2rem;align-items:center;text-align:left}:host .mobile-menu-item:active,:host .mobile-menu-item.active{border-right:4px solid var(--mat-sys-secondary);font-weight:700!important}:host .mobile-menu-item mat-icon{margin-left:4px}\n"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [
375
+ getRouteLabel(route) {
376
+ // Check if it's a LayoutRouteComponent with label property
377
+ if ('label' in route && route.label) {
378
+ return route.label;
379
+ }
380
+ return 'Unnamed Route';
381
+ }
382
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutSidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
383
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: LayoutSidenavComponent, isStandalone: true, selector: "onemrva-layout-sidenav", inputs: { isSmall: "isSmall", routes: "routes", languages: "languages" }, ngImport: i0, template: "@if (\n isSmall && (routes?.toArray()?.length || (languages && languages.length > 1))\n) {\n <div class=\"sidebar\">\n @if (isSmall && routes?.toArray()?.length) {\n <div class=\"navigation\">\n <div class=\"close-button\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"close()\"\n data-cy=\"smallDeviceMenu\"\n attr.aria-label=\"{{ 'layout.menu' | translate }}\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <onemrva-mat-navigation [items]=\"items\"></onemrva-mat-navigation>\n </div>\n @if (languages && languages.length > 1) {\n <div class=\"language-selector\">\n <mat-form-field>\n <mat-select\n [ngModel]=\"currentLanguage\"\n (selectionChange)=\"changeLanguage($event)\"\n >\n @for (lang of languages; track lang.code) {\n <mat-option\n [value]=\"lang\"\n [attr.data-cy]=\"'language_' + lang.code\"\n >\n {{ lang.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n }\n </div>\n}\n", styles: [":host{min-width:250px}:host .close-button{display:flex;justify-content:flex-end;padding:var(--spacer)}:host .mobile-menu-item{display:flex;width:100%;background:var(--mat-sys-background);padding:var(--spacer);border:none;box-shadow:none;font-size:1.2rem;align-items:center;text-align:left}:host .mobile-menu-item:active,:host .mobile-menu-item.active{border-right:4px solid var(--mat-sys-secondary);font-weight:700!important}:host .mobile-menu-item mat-icon{margin-left:4px}:host .sidebar{overflow:scroll;display:flex;flex-direction:column;justify-content:space-between;height:100vh}:host .sidebar .language-selector{margin:var(--double-spacer);bottom:0}:host .sidebar .language-selector mat-form-field{width:100%}\n"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: OnemrvaMatNavigationComponent, selector: "onemrva-mat-navigation", inputs: ["items", "level", "translate"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], animations: [
333
384
  trigger('slideInOut', [
334
385
  state('in', style({
335
386
  overflow: 'hidden',
@@ -345,7 +396,7 @@ class LayoutSidenavComponent {
345
396
  ]),
346
397
  ] }); }
347
398
  }
348
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutSidenavComponent, decorators: [{
399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutSidenavComponent, decorators: [{
349
400
  type: Component,
350
401
  args: [{ selector: 'onemrva-layout-sidenav', animations: [
351
402
  trigger('slideInOut', [
@@ -364,22 +415,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
364
415
  ], standalone: true, imports: [
365
416
  MatIconButton,
366
417
  MatIcon,
367
- MatTabGroup,
368
- MatTab,
369
- MatDivider,
370
- RouterLink,
371
- RouterLinkActive,
372
- NgTemplateOutlet,
373
418
  TranslatePipe,
374
- AsyncPipe,
375
- MatTabLabel,
376
- ], template: "@if (\n isSmall && (routes?.toArray()?.length || (languages && languages.length > 1))\n) {\n <ng-container>\n <button\n type=\"button\"\n mat-icon-button\n class=\"float-right\"\n (click)=\"close()\"\n data-cy=\"smallDeviceMenu\"\n attr.aria-label=\"{{ 'layout.menu' | translate }}\"\n >\n <mat-icon>close</mat-icon>\n </button>\n @if (isSmall && languages && languages.length > 1) {\n <ng-container>\n <mat-tab-group\n class=\"language-tabs\"\n [selectedIndex]=\"selectedLanguageIndex$ | async\"\n (selectedIndexChange)=\"changeLanguage($event)\"\n >\n @for (lang of languages; track lang.code) {\n <mat-tab>\n <div *matTabLabel [attr.data-cy]=\"'language_' + lang.code\">\n {{ lang.label }}\n </div>\n </mat-tab>\n }\n </mat-tab-group>\n </ng-container>\n }\n @if (isSmall && routes?.toArray()?.length) {\n <ng-container>\n @if (languages && languages.length > 1) {\n <mat-divider\n style=\"align-self: stretch; margin-bottom: 10px\"\n ></mat-divider>\n }\n <div>\n @for (\n e of routes?.toArray();\n track e.routerLink;\n let rtidx = $index\n ) {\n @if (!e.hasSubroutes()) {\n <ng-container>\n <button\n [routerLink]=\"e.routerLink\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n routerLinkActive=\"active\"\n class=\"mobile-menu-item\"\n >\n @if (e.mobileTemplate; as routeTemplate) {\n <ng-container\n *ngTemplateOutlet=\"routeTemplate\"\n ></ng-container>\n }\n </button>\n </ng-container>\n }\n @if (e.hasSubroutes()) {\n <ng-container>\n <button\n [routerLink]=\"e.routerLink\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n routerLinkActive=\"active\"\n class=\"mobile-menu-item\"\n (click)=\"openSubmenu(rtidx)\"\n [attr.data-cy]=\"e.dataCy\"\n >\n {{ e.label }}\n <mat-icon>expand_more</mat-icon>\n </button>\n <div [@slideInOut]=\"helpMenuOpen[rtidx][0]\">\n @for (\n es of e.subroutes?.toArray();\n track es.dataCy;\n let j = $index\n ) {\n <button\n [routerLink]=\"es.routerLink\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n routerLinkActive=\"active\"\n class=\"mobile-menu-item\"\n (click)=\"openSubmenu(rtidx, j + 1)\"\n [attr.data-cy]=\"es.dataCy\"\n >\n @if (es.template; as routeTemplate) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"routeTemplate\"\n ></ng-container>\n </ng-container>\n }\n @if (es.hasSubroutes()) {\n <mat-icon>expand_more</mat-icon>\n }\n </button>\n <div [@slideInOut]=\"helpMenuOpen[rtidx][j + 1]\">\n @for (ess of es.subroutes?.toArray(); track ess.dataCy) {\n <button\n [routerLink]=\"ess.routerLink\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n routerLinkActive=\"active\"\n class=\"mobile-menu-item\"\n [attr.data-cy]=\"ess.dataCy\"\n >\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n @if (ess.template; as routeTemplate) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"routeTemplate\"\n ></ng-container>\n </ng-container>\n }\n </button>\n }\n </div>\n }\n </div>\n </ng-container>\n }\n }\n </div>\n </ng-container>\n }\n </ng-container>\n}\n", styles: [":host{min-width:250px}:host .mobile-menu-item{display:flex;width:100%;background:var(--mat-sys-background);padding:var(--spacer);border:none;box-shadow:none;font-size:1.2rem;align-items:center;text-align:left}:host .mobile-menu-item:active,:host .mobile-menu-item.active{border-right:4px solid var(--mat-sys-secondary);font-weight:700!important}:host .mobile-menu-item mat-icon{margin-left:4px}\n"] }]
377
- }], ctorParameters: () => [], propDecorators: { isSmall: [{
378
- type: Input
379
- }], languages: [{
419
+ OnemrvaMatNavigationComponent,
420
+ MatFormFieldModule,
421
+ MatSelectModule,
422
+ FormsModule,
423
+ ], template: "@if (\n isSmall && (routes?.toArray()?.length || (languages && languages.length > 1))\n) {\n <div class=\"sidebar\">\n @if (isSmall && routes?.toArray()?.length) {\n <div class=\"navigation\">\n <div class=\"close-button\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"close()\"\n data-cy=\"smallDeviceMenu\"\n attr.aria-label=\"{{ 'layout.menu' | translate }}\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <onemrva-mat-navigation [items]=\"items\"></onemrva-mat-navigation>\n </div>\n @if (languages && languages.length > 1) {\n <div class=\"language-selector\">\n <mat-form-field>\n <mat-select\n [ngModel]=\"currentLanguage\"\n (selectionChange)=\"changeLanguage($event)\"\n >\n @for (lang of languages; track lang.code) {\n <mat-option\n [value]=\"lang\"\n [attr.data-cy]=\"'language_' + lang.code\"\n >\n {{ lang.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n }\n </div>\n}\n", styles: [":host{min-width:250px}:host .close-button{display:flex;justify-content:flex-end;padding:var(--spacer)}:host .mobile-menu-item{display:flex;width:100%;background:var(--mat-sys-background);padding:var(--spacer);border:none;box-shadow:none;font-size:1.2rem;align-items:center;text-align:left}:host .mobile-menu-item:active,:host .mobile-menu-item.active{border-right:4px solid var(--mat-sys-secondary);font-weight:700!important}:host .mobile-menu-item mat-icon{margin-left:4px}:host .sidebar{overflow:scroll;display:flex;flex-direction:column;justify-content:space-between;height:100vh}:host .sidebar .language-selector{margin:var(--double-spacer);bottom:0}:host .sidebar .language-selector mat-form-field{width:100%}\n"] }]
424
+ }], propDecorators: { isSmall: [{
380
425
  type: Input
381
426
  }], routes: [{
382
427
  type: Input
428
+ }], languages: [{
429
+ type: Input
383
430
  }] } });
384
431
 
385
432
  class LayoutAfterNavComponent {
@@ -389,10 +436,10 @@ class LayoutAfterNavComponent {
389
436
  ngAfterViewInit() {
390
437
  this.cd.detectChanges();
391
438
  }
392
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutAfterNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
393
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutAfterNavComponent, isStandalone: true, selector: "onemrva-layout-after-nav", inputs: { customNgClass: "customNgClass" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
439
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutAfterNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
440
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutAfterNavComponent, isStandalone: true, selector: "onemrva-layout-after-nav", inputs: { customNgClass: "customNgClass" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true }); }
394
441
  }
395
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutAfterNavComponent, decorators: [{
442
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutAfterNavComponent, decorators: [{
396
443
  type: Component,
397
444
  args: [{
398
445
  selector: 'onemrva-layout-after-nav',
@@ -434,10 +481,8 @@ class LayoutComponent {
434
481
  this.isSmall = true;
435
482
  this.id = 'main';
436
483
  this.role = 'main';
437
- this.drawerClass = '';
438
484
  this.showThemeSwitcher = true;
439
485
  this.activeTheme = signal('system', ...(ngDevMode ? [{ debugName: "activeTheme" }] : []));
440
- this.effectiveDrawerClass = this.drawerClass;
441
486
  this.translateService = inject(TranslateService);
442
487
  this.cdn = inject(OnemRvaCDNService);
443
488
  this.cd = inject(ChangeDetectorRef);
@@ -455,7 +500,6 @@ class LayoutComponent {
455
500
  }
456
501
  ngOnInit() {
457
502
  this.selectedIndex = this.languages.findIndex(l => l.code === this.translateService.currentLang);
458
- this.effectiveDrawerClass = this.drawerClass;
459
503
  this.document.documentElement.lang = this.translateService.currentLang;
460
504
  this.breakpointObserver
461
505
  .observe([Breakpoints.XSmall, Breakpoints.Small])
@@ -482,7 +526,7 @@ class LayoutComponent {
482
526
  this.selectedIndex = this.languages.findIndex(lang => lang.code === event.lang);
483
527
  });
484
528
  this.drawerService.host = this.drawerHost;
485
- this.drawerService.drawer = this.drawer;
529
+ this.drawerService.setDrawer(this.drawer);
486
530
  }
487
531
  get currentLanguage() {
488
532
  return this.translateService.currentLang || '';
@@ -491,11 +535,10 @@ class LayoutComponent {
491
535
  if (isDevMode()) {
492
536
  this.cd.detectChanges();
493
537
  }
494
- this.drawer.closedStart
495
- .pipe(takeUntil(this.destroyNotifier$))
496
- .subscribe(() => {
497
- this.effectiveDrawerClass = this.drawerClass;
498
- });
538
+ // this.drawer.closedStart
539
+ // .pipe(takeUntil(this.destroyNotifier$))
540
+ // .subscribe(() => {
541
+ // });
499
542
  }
500
543
  ngOnDestroy() {
501
544
  this.destroyNotifier$.next();
@@ -513,17 +556,16 @@ class LayoutComponent {
513
556
  }
514
557
  toggleSideNav() {
515
558
  const componentRef = this.drawerHost.createComponent(LayoutSidenavComponent);
559
+ this.drawerService.size.set('');
516
560
  componentRef.instance.isSmall = this.isSmall;
517
561
  componentRef.instance.languages = this.languages;
518
562
  componentRef.instance.routes = this.routes;
519
- this.drawerService.hasBackdrop = true;
520
- this.effectiveDrawerClass = 'side-menu';
521
- this.drawer.open();
563
+ this.drawerService.toggle(true);
522
564
  }
523
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
524
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: LayoutComponent, isStandalone: true, selector: "onemrva-layout", inputs: { logo: "logo", languages: "languages", environment: "environment", logoRedictionUrl: "logoRedictionUrl", profile: "profile", id: "id", role: "role", drawerClass: "drawerClass", showThemeSwitcher: "showThemeSwitcher" }, outputs: { login: "login", logout: "logout" }, queries: [{ propertyName: "title", first: true, predicate: LayoutTitleComponent, descendants: true }, { propertyName: "loginMenu", first: true, predicate: LayoutLoginMenuComponent, descendants: true }, { propertyName: "content", first: true, predicate: LayoutContentComponent, descendants: true }, { propertyName: "afterNav", first: true, predicate: LayoutAfterNavComponent, descendants: true }, { propertyName: "footer", first: true, predicate: LayoutFooterComponent, descendants: true }, { propertyName: "routes", predicate: LayoutRouteComponent }], viewQueries: [{ propertyName: "drawer", first: true, predicate: MatDrawer, descendants: true, static: true }, { propertyName: "drawerHost", first: true, predicate: DrawerHostDirective, descendants: true, static: true }], ngImport: i0, template: "<mat-drawer-container\n id=\"onemrva-drawer-container\"\n [hasBackdrop]=\"drawerService.hasBackdrop\"\n autosize\n>\n <div class=\"app-content\">\n <header>\n <mat-toolbar class=\"mat-elevation-z4\">\n <div class=\"environment\" [class]=\"environment\">\n {{ environment }}\n </div>\n <div class=\"nav-container onemrva-layout-container flex-center g-m\">\n {{ logoRedictionUrl }}\n <img\n class=\"logo align-center clickable\"\n [src]=\"logo\"\n [attr.data-cy]=\"\n 'onemrva_logo_' + currentLanguage.toLocaleLowerCase()\n \"\n alt=\"Logo ONEM/RVA\"\n [routerLink]=\"\n logoRedictionUrl !== null ? logoRedictionUrl : undefined\n \"\n [ngStyle]=\"{\n cursor: logoRedictionUrl !== null ? 'pointer' : 'default',\n }\"\n />\n <div\n class=\"application-title\"\n [ngClass]=\"{ 'small-screen': isSmall }\"\n >\n @if (title?.template; as titleTpl) {\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n }\n </div>\n\n <div style=\"flex: 1\"></div>\n\n @if (!isSmall) {\n <div\n class=\"flex-center topMenu\"\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\"\n >\n @for (e of routes?.toArray(); track e.label) {\n <a\n mat-tab-link\n [routerLink]=\"e.routerLink\"\n [attr.data-ci]=\"e.dataCy\"\n [attr.data-cy]=\"e.dataCy\"\n [routerLinkActiveOptions]=\"{\n fragment: 'exact',\n matrixParams: 'exact',\n paths: 'exact',\n queryParams: 'ignored',\n }\"\n #rla=\"routerLinkActive\"\n routerLinkActive=\"mdc-tab--active\"\n [active]=\"rla.isActive || e.isRouteActive()\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\">\n </ng-container>\n }\n </a>\n }\n </div>\n }\n <mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n\n @if (showThemeSwitcher) {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"themeSwitch\"\n [matTooltip]=\"'layout.mode.select' | translate\"\n >\n <mat-icon>{{\n activeTheme() === 'dark'\n ? 'dark_mode'\n : activeTheme() === 'light'\n ? 'light_mode'\n : 'brightness_auto'\n }}</mat-icon>\n </button>\n <mat-menu #themeSwitch>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.dark' | translate\"\n (click)=\"toggleTheme('dark')\"\n >\n <mat-icon>dark_mode</mat-icon>\n <span>{{ 'layout.mode.dark' | translate }}</span>\n </button>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.light' | translate\"\n (click)=\"toggleTheme('light')\"\n >\n <mat-icon>light_mode</mat-icon>\n <span>{{ 'layout.mode.light' | translate }}</span>\n </button>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.system' | translate\"\n (click)=\"toggleTheme('system')\"\n >\n <mat-icon>brightness_auto</mat-icon>\n <span>{{ 'layout.mode.system' | translate }}</span>\n </button>\n </mat-menu>\n }\n @if (afterNav?.template; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n }\n\n @if (profile !== null) {\n @if (!isSmall) {\n <mat-divider\n vertical\n style=\"height: 1em; align-self: center\"\n ></mat-divider>\n }\n @if (profile.isLoggedIn) {\n <onemrva-mat-avatar\n matRipple\n [matMenuTriggerFor]=\"menu\"\n initials=\"{{ profile.initials() }}\"\n color=\"accent\"\n size=\"xsmall\"\n class=\"clickable\"\n ></onemrva-mat-avatar>\n }\n @if (!profile.isLoggedIn) {\n <onemrva-mat-avatar\n matRipple\n [matMenuTriggerFor]=\"menu\"\n icon=\"account_circle\"\n color=\"\"\n size=\"xsmall\"\n class=\"clickable\"\n ></onemrva-mat-avatar>\n }\n <mat-menu #menu=\"matMenu\">\n @if (profile.isLoggedIn) {\n <div class=\"menu-header m mb-m\">\n {{ profile.firstName }} {{ profile.lastName }}\n </div>\n <mat-divider style=\"align-self: stretch\"></mat-divider>\n\n @if (loginMenu?.template; as menuLoginTpl) {\n <ng-container *ngTemplateOutlet=\"menuLoginTpl\"></ng-container>\n }\n\n <button\n type=\"button\"\n class=\"mat-mdc-menu-item\"\n mat-menu-item\n data-cy=\"logoutButton\"\n (click)=\"doLogout()\"\n [attr.aria-label]=\"'layout.logout' | translate\"\n >\n <mat-icon>logout</mat-icon>\n {{ 'layout.logout' | translate }}\n </button>\n } @else {\n <button\n type=\"button\"\n mat-menu-item\n data-cy=\"loginButton\"\n (click)=\"doLogin()\"\n [attr.aria-label]=\"'layout.login' | translate\"\n >\n <mat-icon>login</mat-icon>\n {{ 'layout.login' | translate }}\n </button>\n }\n </mat-menu>\n }\n\n @if (\n isSmall &&\n (routes?.toArray()?.length || (languages && languages.length > 1))\n ) {\n <button\n type=\"button\"\n mat-icon-button\n class=\"menu-button\"\n data-cy=\"smallDeviceMenu\"\n (click)=\"toggleSideNav()\"\n [attr.aria-label]=\"'layout.menu' | translate\"\n >\n <mat-icon>menu</mat-icon>\n </button>\n }\n @if (!isSmall) {\n <div class=\"flex-center\" mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a\n [matMenuTriggerFor]=\"languageMenu\"\n data-cy=\"languageMenu\"\n [attr.aria-label]=\"'language.selection' | translate\"\n mat-tab-link\n >\n {{ currentLanguage }}\n <mat-icon style=\"width: 16px\">expand_more</mat-icon>\n </a>\n </div>\n }\n <mat-menu #languageMenu>\n @for (lang of languages; track lang.code) {\n <button\n type=\"button\"\n class=\"mat-mdc-menu-item\"\n mat-menu-item\n [attr.data-cy]=\"'language_' + lang.code\"\n (click)=\"changeLanguage(lang.code)\"\n [attr.aria-label]=\"lang.label\"\n >\n {{ lang.label }}\n </button>\n }\n </mat-menu>\n </div>\n </mat-toolbar>\n </header>\n <ng-container>\n @if (content?.template; as tpl) {\n <div\n [id]=\"id\"\n [attr.role]=\"role\"\n class=\"onemrva-layout-content onemrva-layout-container\"\n >\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n @if (\n environment &&\n (environment === env.LOCAL || environment === env.TEST)\n ) {\n <button\n id=\"accessibility_fab\"\n mat-fab\n color=\"accent\"\n aria-label=\"Accessibility check\"\n matTooltip=\"Accessibility check\"\n onclick=\"(function() {var _p='//openfed.github.io/AccessibilityCheck/build/';var _i=function(s,cb) {var sc=document.createElement('script');sc.onload = function() {sc.onload = null;sc.onreadystatechange = null;cb.call(this);};sc.onreadystatechange = function(){if(/^(complete|loaded)$/.test(this.readyState) === true){sc.onreadystatechange = null;sc.onload();}};sc.src=s;if (document.head) {document.head.appendChild(sc);} else {document.getElementsByTagName('head')[0].appendChild(sc);}}; var options={path:_p};_i(_p+'HTMLCS.js',function(){HTMLCSAuditor.run('WCAG2AA',null,options);});})();\"\n >\n <mat-icon>accessibility</mat-icon>\n </button>\n }\n </div>\n }\n\n <footer class=\"onemrva-footer p mb text-center\">\n @if (footer?.template; as footerTpl) {\n <div class=\"onemrva-layout-container\">\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\n </div>\n }\n </footer>\n </ng-container>\n </div>\n\n <mat-drawer [class]=\"effectiveDrawerClass\" mode=\"over\" position=\"end\">\n <ng-template drawerhost></ng-template>\n </mat-drawer>\n</mat-drawer-container>\n", styles: [":host{position:relative}:host a:active{outline:none}:host router-outlet{display:block;margin-bottom:90px}:host header mat-toolbar{position:fixed;height:var(--layout-header-height);z-index:400;--mat-tab-divider-color: transparent}:host header mat-toolbar .topMenu .mat-mdc-tab-header-pagination-before,:host header mat-toolbar .topMenu .mat-mdc-tab-header-pagination-after{display:none!important}:host header mat-toolbar .logo{height:42px}:host header mat-toolbar .application-title{font-size:1.3rem;font-weight:700;height:42px;line-height:42px;color:var(--mat-sys-tertiary)}:host .onemrva-layout-content{padding-top:var(--layout-content-padding-top);min-height:calc(100vh - 48px)}:host .mat-drawer-content{min-height:100vh}:host #accessibility_fab{position:fixed;bottom:16px;left:16px}:host .environment{position:fixed;top:0;left:0;z-index:24000;width:60px;height:50px;padding:15px 20px;font-weight:700;font-size:16px;border-radius:0 0 100%;color:#fff;display:none}:host .environment.LOCAL{background:transparent linear-gradient(90deg,#de2174,#eb142a) 0 0 no-repeat padding-box;display:block}:host .environment.TEST{background-color:#36c;display:block}:host .environment.VAL{background-color:#093;display:block}:host mat-drawer{padding:var(--double-spacer);background:var(--mat-sys-surface-container-high)}:host mat-drawer.xsmall{width:20%}:host mat-drawer.small{width:30%}:host mat-drawer.medium{width:50%}:host mat-drawer.large{width:60%}:host mat-drawer.xlarge{width:70%}:host mat-drawer.xxlarge{width:90%}@media screen and (max-width: 640px){:host mat-drawer{width:99%!important}}.mat-mdc-menu-content button.active>*{font-weight:700!important}.mat-mdc-menu-content button mat-icon{font-size:1.125rem!important;height:1.125rem;width:1.125rem}.mat-mdc-menu-content button span{font-size:14px!important}nav a.disabled{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: OnemrvaMatAvatarModule }, { kind: "component", type: i1.OnemrvaMatAvatarComponent, selector: "onemrva-mat-avatar", inputs: ["id", "roundShape", "initials", "icon", "src"] }, { kind: "directive", type: 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: 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: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "directive", type: DrawerHostDirective, selector: "[drawerhost]" }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: OnemRvaSizeDirective, selector: "mat-icon[size], onemrva-mat-skeleton[size], onemrva-mat-avatar[size], button[size]", inputs: ["size"] }, { kind: "directive", type: OnemRvaColorDirective, selector: "onemrva-mat-selectable-box[color],div[color],onemrva-mat-avatar[color],mat-card[color],mat-toolbar[color],onemrva-mat-spinner[color],onemrva-mat-notification[color],onemrva-mat-sticker[color],onemrva-mat-panel[color],onemrva-mat-task[color],onemrva-mat-choice-chip[color],button[color],mat-icon[color],mat-chip[color],mat-chip-option[color]", inputs: ["color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
566
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: LayoutComponent, isStandalone: true, selector: "onemrva-layout", inputs: { logo: "logo", languages: "languages", environment: "environment", logoRedictionUrl: "logoRedictionUrl", profile: "profile", id: "id", role: "role", showThemeSwitcher: "showThemeSwitcher" }, outputs: { login: "login", logout: "logout" }, queries: [{ propertyName: "title", first: true, predicate: LayoutTitleComponent, descendants: true }, { propertyName: "loginMenu", first: true, predicate: LayoutLoginMenuComponent, descendants: true }, { propertyName: "content", first: true, predicate: LayoutContentComponent, descendants: true }, { propertyName: "afterNav", first: true, predicate: LayoutAfterNavComponent, descendants: true }, { propertyName: "footer", first: true, predicate: LayoutFooterComponent, descendants: true }, { propertyName: "routes", predicate: LayoutRouteComponent }], viewQueries: [{ propertyName: "drawer", first: true, predicate: MatDrawer, descendants: true, static: true }, { propertyName: "drawerHost", first: true, predicate: DrawerHostDirective, descendants: true, static: true }], ngImport: i0, template: "<mat-drawer-container\n id=\"onemrva-drawer-container\"\n [hasBackdrop]=\"drawerService.hasBackdrop()\"\n autosize\n>\n <mat-drawer\n #mainDrawer\n [class]=\"drawerService.classes()\"\n mode=\"over\"\n position=\"end\"\n >\n <ng-template drawerhost></ng-template>\n </mat-drawer>\n <mat-drawer-content>\n <div class=\"app-content\">\n <header>\n <mat-toolbar class=\"mat-elevation-z4\">\n <div class=\"environment\" [class]=\"environment\">\n {{ environment }}\n </div>\n <div class=\"nav-container onemrva-layout-container flex-center g-m\">\n {{ logoRedictionUrl }}\n <img\n class=\"logo align-center clickable\"\n [src]=\"logo\"\n [attr.data-cy]=\"\n 'onemrva_logo_' + currentLanguage.toLocaleLowerCase()\n \"\n alt=\"Logo ONEM/RVA\"\n [routerLink]=\"\n logoRedictionUrl !== null ? logoRedictionUrl : undefined\n \"\n [ngStyle]=\"{\n cursor: logoRedictionUrl !== null ? 'pointer' : 'default',\n }\"\n />\n <div\n class=\"application-title\"\n [ngClass]=\"{ 'small-screen': isSmall }\"\n >\n @if (title?.template; as titleTpl) {\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n }\n </div>\n\n <div style=\"flex: 1\"></div>\n\n @if (!isSmall) {\n <div\n class=\"flex-center topMenu\"\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\"\n >\n @for (e of routes?.toArray(); track $index) {\n <a\n mat-tab-link\n [routerLink]=\"e.routerLink\"\n [attr.data-ci]=\"e.dataCy\"\n [attr.data-cy]=\"e.dataCy\"\n [routerLinkActiveOptions]=\"{\n fragment: 'exact',\n matrixParams: 'exact',\n paths: 'exact',\n queryParams: 'ignored',\n }\"\n #rla=\"routerLinkActive\"\n routerLinkActive=\"mdc-tab--active\"\n [active]=\"rla.isActive || e.isRouteActive()\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container\n *ngTemplateOutlet=\"routeTemplate\"\n ></ng-container>\n }\n </a>\n }\n </div>\n }\n <mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n\n @if (showThemeSwitcher) {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"themeSwitch\"\n [matTooltip]=\"'layout.mode.select' | translate\"\n >\n <mat-icon>{{\n activeTheme() === 'dark'\n ? 'dark_mode'\n : activeTheme() === 'light'\n ? 'light_mode'\n : 'brightness_auto'\n }}</mat-icon>\n </button>\n <mat-menu #themeSwitch>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.dark' | translate\"\n (click)=\"toggleTheme('dark')\"\n >\n <mat-icon>dark_mode</mat-icon>\n <span>{{ 'layout.mode.dark' | translate }}</span>\n </button>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.light' | translate\"\n (click)=\"toggleTheme('light')\"\n >\n <mat-icon>light_mode</mat-icon>\n <span>{{ 'layout.mode.light' | translate }}</span>\n </button>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.system' | translate\"\n (click)=\"toggleTheme('system')\"\n >\n <mat-icon>brightness_auto</mat-icon>\n <span>{{ 'layout.mode.system' | translate }}</span>\n </button>\n </mat-menu>\n }\n @if (afterNav?.template; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n }\n\n @if (profile !== null) {\n @if (!isSmall) {\n <mat-divider\n vertical\n style=\"height: 1em; align-self: center\"\n ></mat-divider>\n }\n @if (profile.isLoggedIn) {\n <onemrva-mat-avatar\n matRipple\n [matMenuTriggerFor]=\"menu\"\n initials=\"{{ profile.initials() }}\"\n color=\"accent\"\n size=\"xsmall\"\n class=\"clickable\"\n ></onemrva-mat-avatar>\n }\n @if (!profile.isLoggedIn) {\n <onemrva-mat-avatar\n matRipple\n [matMenuTriggerFor]=\"menu\"\n icon=\"account_circle\"\n color=\"\"\n size=\"xsmall\"\n class=\"clickable\"\n ></onemrva-mat-avatar>\n }\n <mat-menu #menu=\"matMenu\">\n @if (profile.isLoggedIn) {\n <div class=\"menu-header m mb-m\">\n {{ profile.firstName }} {{ profile.lastName }}\n </div>\n <mat-divider style=\"align-self: stretch\"></mat-divider>\n\n @if (loginMenu?.template; as menuLoginTpl) {\n <ng-container\n *ngTemplateOutlet=\"menuLoginTpl\"\n ></ng-container>\n }\n\n <button\n type=\"button\"\n class=\"mat-mdc-menu-item\"\n mat-menu-item\n data-cy=\"logoutButton\"\n (click)=\"doLogout()\"\n [attr.aria-label]=\"'layout.logout' | translate\"\n >\n <mat-icon>logout</mat-icon>\n {{ 'layout.logout' | translate }}\n </button>\n } @else {\n <button\n type=\"button\"\n mat-menu-item\n data-cy=\"loginButton\"\n (click)=\"doLogin()\"\n [attr.aria-label]=\"'layout.login' | translate\"\n >\n <mat-icon>login</mat-icon>\n {{ 'layout.login' | translate }}\n </button>\n }\n </mat-menu>\n }\n\n @if (\n isSmall &&\n (routes?.toArray()?.length || (languages && languages.length > 1))\n ) {\n <button\n type=\"button\"\n mat-icon-button\n class=\"menu-button\"\n data-cy=\"smallDeviceMenu\"\n (click)=\"this.toggleSideNav()\"\n [attr.aria-label]=\"'layout.menu' | translate\"\n >\n <mat-icon>menu</mat-icon>\n </button>\n }\n @if (!isSmall) {\n <div class=\"flex-center\" mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a\n [matMenuTriggerFor]=\"languageMenu\"\n data-cy=\"languageMenu\"\n [attr.aria-label]=\"'language.selection' | translate\"\n mat-tab-link\n >\n {{ currentLanguage }}\n <mat-icon style=\"width: 16px\">expand_more</mat-icon>\n </a>\n </div>\n }\n <mat-menu #languageMenu>\n @for (lang of languages; track lang.code) {\n <button\n type=\"button\"\n class=\"mat-mdc-menu-item\"\n mat-menu-item\n [attr.data-cy]=\"'language_' + lang.code\"\n (click)=\"changeLanguage(lang.code)\"\n [attr.aria-label]=\"lang.label\"\n >\n {{ lang.label }}\n </button>\n }\n </mat-menu>\n </div>\n </mat-toolbar>\n </header>\n <ng-container>\n @if (content?.template; as tpl) {\n <div\n [id]=\"id\"\n [attr.role]=\"role\"\n class=\"onemrva-layout-content onemrva-layout-container\"\n >\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n @if (\n environment &&\n (environment === env.LOCAL || environment === env.TEST)\n ) {\n <button\n id=\"accessibility_fab\"\n mat-fab\n color=\"accent\"\n aria-label=\"Accessibility check\"\n matTooltip=\"Accessibility check\"\n onclick=\"(function() {var _p='//openfed.github.io/AccessibilityCheck/build/';var _i=function(s,cb) {var sc=document.createElement('script');sc.onload = function() {sc.onload = null;sc.onreadystatechange = null;cb.call(this);};sc.onreadystatechange = function(){if(/^(complete|loaded)$/.test(this.readyState) === true){sc.onreadystatechange = null;sc.onload();}};sc.src=s;if (document.head) {document.head.appendChild(sc);} else {document.getElementsByTagName('head')[0].appendChild(sc);}}; var options={path:_p};_i(_p+'HTMLCS.js',function(){HTMLCSAuditor.run('WCAG2AA',null,options);});})();\"\n >\n <mat-icon>accessibility</mat-icon>\n </button>\n }\n </div>\n }\n\n <footer class=\"onemrva-footer p mb text-center\">\n @if (footer?.template; as footerTpl) {\n <div class=\"onemrva-layout-container\">\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\n </div>\n }\n </footer>\n </ng-container>\n </div>\n </mat-drawer-content>\n</mat-drawer-container>\n", styles: [":host{position:relative}:host a:active{outline:none}:host router-outlet{display:block;margin-bottom:90px}:host header mat-toolbar{position:fixed;height:var(--layout-header-height);z-index:400;--mat-tab-divider-color: transparent}:host header mat-toolbar .topMenu .mat-mdc-tab-header-pagination-before,:host header mat-toolbar .topMenu .mat-mdc-tab-header-pagination-after{display:none!important}:host header mat-toolbar .logo{height:42px}:host header mat-toolbar .application-title{font-size:1.3rem;font-weight:700;height:42px;line-height:42px;color:var(--mat-sys-tertiary)}:host .onemrva-layout-content{padding-top:var(--layout-content-padding-top);min-height:calc(100vh - 48px)}:host .mat-drawer-content{min-height:100vh}:host #accessibility_fab{position:fixed;bottom:16px;left:16px}:host .environment{position:fixed;top:0;left:0;z-index:24000;width:60px;height:50px;padding:15px 20px;font-weight:700;font-size:16px;border-radius:0 0 100%;color:#fff;display:none}:host .environment.LOCAL{background:transparent linear-gradient(90deg,#de2174,#eb142a) 0 0 no-repeat padding-box;display:block}:host .environment.TEST{background-color:#36c;display:block}:host .environment.VAL{background-color:#093;display:block}:host mat-drawer:not(.side-menu){padding:var(--double-spacer);background:var(--mat-sys-surface-container-high)}:host mat-drawer.xsmall{width:20%}:host mat-drawer.small{width:30%}:host mat-drawer.medium{width:50%}:host mat-drawer.large{width:60%}:host mat-drawer.xlarge{width:70%}:host mat-drawer.xxlarge{width:90%}@media screen and (max-width: 640px){:host mat-drawer{width:99%!important}}.mat-mdc-menu-content button.active>*{font-weight:700!important}.mat-mdc-menu-content button mat-icon{font-size:1.125rem!important;height:1.125rem;width:1.125rem}.mat-mdc-menu-content button span{font-size:14px!important}nav a.disabled{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: OnemrvaMatAvatarModule }, { kind: "component", type: i1$1.OnemrvaMatAvatarComponent, selector: "onemrva-mat-avatar", inputs: ["id", "roundShape", "initials", "icon", "src"] }, { kind: "directive", type: 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: 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: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "directive", type: DrawerHostDirective, selector: "[drawerhost]" }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: OnemRvaSizeDirective, selector: "mat-icon[size], onemrva-mat-skeleton[size], onemrva-mat-avatar[size], button[size]", inputs: ["size"] }, { kind: "directive", type: OnemRvaColorDirective, selector: "onemrva-mat-selectable-box[color],div[color],onemrva-mat-avatar[color],mat-card[color],mat-toolbar[color],onemrva-mat-spinner[color],onemrva-mat-notification[color],onemrva-mat-sticker[color],onemrva-mat-panel[color],onemrva-mat-task[color],onemrva-mat-choice-chip[color],mat-form-field[color],button[color],mat-icon[color],mat-chip[color],mat-chip-option[color]", inputs: ["color"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i2$1.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
525
567
  }
526
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutComponent, decorators: [{
568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutComponent, decorators: [{
527
569
  type: Component,
528
570
  args: [{ selector: 'onemrva-layout', standalone: true, imports: [
529
571
  RouterLink,
@@ -551,7 +593,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
551
593
  MatRipple,
552
594
  OnemRvaSizeDirective,
553
595
  OnemRvaColorDirective,
554
- ], template: "<mat-drawer-container\n id=\"onemrva-drawer-container\"\n [hasBackdrop]=\"drawerService.hasBackdrop\"\n autosize\n>\n <div class=\"app-content\">\n <header>\n <mat-toolbar class=\"mat-elevation-z4\">\n <div class=\"environment\" [class]=\"environment\">\n {{ environment }}\n </div>\n <div class=\"nav-container onemrva-layout-container flex-center g-m\">\n {{ logoRedictionUrl }}\n <img\n class=\"logo align-center clickable\"\n [src]=\"logo\"\n [attr.data-cy]=\"\n 'onemrva_logo_' + currentLanguage.toLocaleLowerCase()\n \"\n alt=\"Logo ONEM/RVA\"\n [routerLink]=\"\n logoRedictionUrl !== null ? logoRedictionUrl : undefined\n \"\n [ngStyle]=\"{\n cursor: logoRedictionUrl !== null ? 'pointer' : 'default',\n }\"\n />\n <div\n class=\"application-title\"\n [ngClass]=\"{ 'small-screen': isSmall }\"\n >\n @if (title?.template; as titleTpl) {\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n }\n </div>\n\n <div style=\"flex: 1\"></div>\n\n @if (!isSmall) {\n <div\n class=\"flex-center topMenu\"\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\"\n >\n @for (e of routes?.toArray(); track e.label) {\n <a\n mat-tab-link\n [routerLink]=\"e.routerLink\"\n [attr.data-ci]=\"e.dataCy\"\n [attr.data-cy]=\"e.dataCy\"\n [routerLinkActiveOptions]=\"{\n fragment: 'exact',\n matrixParams: 'exact',\n paths: 'exact',\n queryParams: 'ignored',\n }\"\n #rla=\"routerLinkActive\"\n routerLinkActive=\"mdc-tab--active\"\n [active]=\"rla.isActive || e.isRouteActive()\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container *ngTemplateOutlet=\"routeTemplate\">\n </ng-container>\n }\n </a>\n }\n </div>\n }\n <mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n\n @if (showThemeSwitcher) {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"themeSwitch\"\n [matTooltip]=\"'layout.mode.select' | translate\"\n >\n <mat-icon>{{\n activeTheme() === 'dark'\n ? 'dark_mode'\n : activeTheme() === 'light'\n ? 'light_mode'\n : 'brightness_auto'\n }}</mat-icon>\n </button>\n <mat-menu #themeSwitch>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.dark' | translate\"\n (click)=\"toggleTheme('dark')\"\n >\n <mat-icon>dark_mode</mat-icon>\n <span>{{ 'layout.mode.dark' | translate }}</span>\n </button>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.light' | translate\"\n (click)=\"toggleTheme('light')\"\n >\n <mat-icon>light_mode</mat-icon>\n <span>{{ 'layout.mode.light' | translate }}</span>\n </button>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.system' | translate\"\n (click)=\"toggleTheme('system')\"\n >\n <mat-icon>brightness_auto</mat-icon>\n <span>{{ 'layout.mode.system' | translate }}</span>\n </button>\n </mat-menu>\n }\n @if (afterNav?.template; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n }\n\n @if (profile !== null) {\n @if (!isSmall) {\n <mat-divider\n vertical\n style=\"height: 1em; align-self: center\"\n ></mat-divider>\n }\n @if (profile.isLoggedIn) {\n <onemrva-mat-avatar\n matRipple\n [matMenuTriggerFor]=\"menu\"\n initials=\"{{ profile.initials() }}\"\n color=\"accent\"\n size=\"xsmall\"\n class=\"clickable\"\n ></onemrva-mat-avatar>\n }\n @if (!profile.isLoggedIn) {\n <onemrva-mat-avatar\n matRipple\n [matMenuTriggerFor]=\"menu\"\n icon=\"account_circle\"\n color=\"\"\n size=\"xsmall\"\n class=\"clickable\"\n ></onemrva-mat-avatar>\n }\n <mat-menu #menu=\"matMenu\">\n @if (profile.isLoggedIn) {\n <div class=\"menu-header m mb-m\">\n {{ profile.firstName }} {{ profile.lastName }}\n </div>\n <mat-divider style=\"align-self: stretch\"></mat-divider>\n\n @if (loginMenu?.template; as menuLoginTpl) {\n <ng-container *ngTemplateOutlet=\"menuLoginTpl\"></ng-container>\n }\n\n <button\n type=\"button\"\n class=\"mat-mdc-menu-item\"\n mat-menu-item\n data-cy=\"logoutButton\"\n (click)=\"doLogout()\"\n [attr.aria-label]=\"'layout.logout' | translate\"\n >\n <mat-icon>logout</mat-icon>\n {{ 'layout.logout' | translate }}\n </button>\n } @else {\n <button\n type=\"button\"\n mat-menu-item\n data-cy=\"loginButton\"\n (click)=\"doLogin()\"\n [attr.aria-label]=\"'layout.login' | translate\"\n >\n <mat-icon>login</mat-icon>\n {{ 'layout.login' | translate }}\n </button>\n }\n </mat-menu>\n }\n\n @if (\n isSmall &&\n (routes?.toArray()?.length || (languages && languages.length > 1))\n ) {\n <button\n type=\"button\"\n mat-icon-button\n class=\"menu-button\"\n data-cy=\"smallDeviceMenu\"\n (click)=\"toggleSideNav()\"\n [attr.aria-label]=\"'layout.menu' | translate\"\n >\n <mat-icon>menu</mat-icon>\n </button>\n }\n @if (!isSmall) {\n <div class=\"flex-center\" mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a\n [matMenuTriggerFor]=\"languageMenu\"\n data-cy=\"languageMenu\"\n [attr.aria-label]=\"'language.selection' | translate\"\n mat-tab-link\n >\n {{ currentLanguage }}\n <mat-icon style=\"width: 16px\">expand_more</mat-icon>\n </a>\n </div>\n }\n <mat-menu #languageMenu>\n @for (lang of languages; track lang.code) {\n <button\n type=\"button\"\n class=\"mat-mdc-menu-item\"\n mat-menu-item\n [attr.data-cy]=\"'language_' + lang.code\"\n (click)=\"changeLanguage(lang.code)\"\n [attr.aria-label]=\"lang.label\"\n >\n {{ lang.label }}\n </button>\n }\n </mat-menu>\n </div>\n </mat-toolbar>\n </header>\n <ng-container>\n @if (content?.template; as tpl) {\n <div\n [id]=\"id\"\n [attr.role]=\"role\"\n class=\"onemrva-layout-content onemrva-layout-container\"\n >\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n @if (\n environment &&\n (environment === env.LOCAL || environment === env.TEST)\n ) {\n <button\n id=\"accessibility_fab\"\n mat-fab\n color=\"accent\"\n aria-label=\"Accessibility check\"\n matTooltip=\"Accessibility check\"\n onclick=\"(function() {var _p='//openfed.github.io/AccessibilityCheck/build/';var _i=function(s,cb) {var sc=document.createElement('script');sc.onload = function() {sc.onload = null;sc.onreadystatechange = null;cb.call(this);};sc.onreadystatechange = function(){if(/^(complete|loaded)$/.test(this.readyState) === true){sc.onreadystatechange = null;sc.onload();}};sc.src=s;if (document.head) {document.head.appendChild(sc);} else {document.getElementsByTagName('head')[0].appendChild(sc);}}; var options={path:_p};_i(_p+'HTMLCS.js',function(){HTMLCSAuditor.run('WCAG2AA',null,options);});})();\"\n >\n <mat-icon>accessibility</mat-icon>\n </button>\n }\n </div>\n }\n\n <footer class=\"onemrva-footer p mb text-center\">\n @if (footer?.template; as footerTpl) {\n <div class=\"onemrva-layout-container\">\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\n </div>\n }\n </footer>\n </ng-container>\n </div>\n\n <mat-drawer [class]=\"effectiveDrawerClass\" mode=\"over\" position=\"end\">\n <ng-template drawerhost></ng-template>\n </mat-drawer>\n</mat-drawer-container>\n", styles: [":host{position:relative}:host a:active{outline:none}:host router-outlet{display:block;margin-bottom:90px}:host header mat-toolbar{position:fixed;height:var(--layout-header-height);z-index:400;--mat-tab-divider-color: transparent}:host header mat-toolbar .topMenu .mat-mdc-tab-header-pagination-before,:host header mat-toolbar .topMenu .mat-mdc-tab-header-pagination-after{display:none!important}:host header mat-toolbar .logo{height:42px}:host header mat-toolbar .application-title{font-size:1.3rem;font-weight:700;height:42px;line-height:42px;color:var(--mat-sys-tertiary)}:host .onemrva-layout-content{padding-top:var(--layout-content-padding-top);min-height:calc(100vh - 48px)}:host .mat-drawer-content{min-height:100vh}:host #accessibility_fab{position:fixed;bottom:16px;left:16px}:host .environment{position:fixed;top:0;left:0;z-index:24000;width:60px;height:50px;padding:15px 20px;font-weight:700;font-size:16px;border-radius:0 0 100%;color:#fff;display:none}:host .environment.LOCAL{background:transparent linear-gradient(90deg,#de2174,#eb142a) 0 0 no-repeat padding-box;display:block}:host .environment.TEST{background-color:#36c;display:block}:host .environment.VAL{background-color:#093;display:block}:host mat-drawer{padding:var(--double-spacer);background:var(--mat-sys-surface-container-high)}:host mat-drawer.xsmall{width:20%}:host mat-drawer.small{width:30%}:host mat-drawer.medium{width:50%}:host mat-drawer.large{width:60%}:host mat-drawer.xlarge{width:70%}:host mat-drawer.xxlarge{width:90%}@media screen and (max-width: 640px){:host mat-drawer{width:99%!important}}.mat-mdc-menu-content button.active>*{font-weight:700!important}.mat-mdc-menu-content button mat-icon{font-size:1.125rem!important;height:1.125rem;width:1.125rem}.mat-mdc-menu-content button span{font-size:14px!important}nav a.disabled{pointer-events:none}\n"] }]
596
+ MatSidenavModule,
597
+ ], template: "<mat-drawer-container\n id=\"onemrva-drawer-container\"\n [hasBackdrop]=\"drawerService.hasBackdrop()\"\n autosize\n>\n <mat-drawer\n #mainDrawer\n [class]=\"drawerService.classes()\"\n mode=\"over\"\n position=\"end\"\n >\n <ng-template drawerhost></ng-template>\n </mat-drawer>\n <mat-drawer-content>\n <div class=\"app-content\">\n <header>\n <mat-toolbar class=\"mat-elevation-z4\">\n <div class=\"environment\" [class]=\"environment\">\n {{ environment }}\n </div>\n <div class=\"nav-container onemrva-layout-container flex-center g-m\">\n {{ logoRedictionUrl }}\n <img\n class=\"logo align-center clickable\"\n [src]=\"logo\"\n [attr.data-cy]=\"\n 'onemrva_logo_' + currentLanguage.toLocaleLowerCase()\n \"\n alt=\"Logo ONEM/RVA\"\n [routerLink]=\"\n logoRedictionUrl !== null ? logoRedictionUrl : undefined\n \"\n [ngStyle]=\"{\n cursor: logoRedictionUrl !== null ? 'pointer' : 'default',\n }\"\n />\n <div\n class=\"application-title\"\n [ngClass]=\"{ 'small-screen': isSmall }\"\n >\n @if (title?.template; as titleTpl) {\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n }\n </div>\n\n <div style=\"flex: 1\"></div>\n\n @if (!isSmall) {\n <div\n class=\"flex-center topMenu\"\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\"\n >\n @for (e of routes?.toArray(); track $index) {\n <a\n mat-tab-link\n [routerLink]=\"e.routerLink\"\n [attr.data-ci]=\"e.dataCy\"\n [attr.data-cy]=\"e.dataCy\"\n [routerLinkActiveOptions]=\"{\n fragment: 'exact',\n matrixParams: 'exact',\n paths: 'exact',\n queryParams: 'ignored',\n }\"\n #rla=\"routerLinkActive\"\n routerLinkActive=\"mdc-tab--active\"\n [active]=\"rla.isActive || e.isRouteActive()\"\n >\n @if (e.template; as routeTemplate) {\n <ng-container\n *ngTemplateOutlet=\"routeTemplate\"\n ></ng-container>\n }\n </a>\n }\n </div>\n }\n <mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n\n @if (showThemeSwitcher) {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"themeSwitch\"\n [matTooltip]=\"'layout.mode.select' | translate\"\n >\n <mat-icon>{{\n activeTheme() === 'dark'\n ? 'dark_mode'\n : activeTheme() === 'light'\n ? 'light_mode'\n : 'brightness_auto'\n }}</mat-icon>\n </button>\n <mat-menu #themeSwitch>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.dark' | translate\"\n (click)=\"toggleTheme('dark')\"\n >\n <mat-icon>dark_mode</mat-icon>\n <span>{{ 'layout.mode.dark' | translate }}</span>\n </button>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.light' | translate\"\n (click)=\"toggleTheme('light')\"\n >\n <mat-icon>light_mode</mat-icon>\n <span>{{ 'layout.mode.light' | translate }}</span>\n </button>\n <button\n mat-menu-item\n [attr.aria-label]=\"'layout.mode.system' | translate\"\n (click)=\"toggleTheme('system')\"\n >\n <mat-icon>brightness_auto</mat-icon>\n <span>{{ 'layout.mode.system' | translate }}</span>\n </button>\n </mat-menu>\n }\n @if (afterNav?.template; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n }\n\n @if (profile !== null) {\n @if (!isSmall) {\n <mat-divider\n vertical\n style=\"height: 1em; align-self: center\"\n ></mat-divider>\n }\n @if (profile.isLoggedIn) {\n <onemrva-mat-avatar\n matRipple\n [matMenuTriggerFor]=\"menu\"\n initials=\"{{ profile.initials() }}\"\n color=\"accent\"\n size=\"xsmall\"\n class=\"clickable\"\n ></onemrva-mat-avatar>\n }\n @if (!profile.isLoggedIn) {\n <onemrva-mat-avatar\n matRipple\n [matMenuTriggerFor]=\"menu\"\n icon=\"account_circle\"\n color=\"\"\n size=\"xsmall\"\n class=\"clickable\"\n ></onemrva-mat-avatar>\n }\n <mat-menu #menu=\"matMenu\">\n @if (profile.isLoggedIn) {\n <div class=\"menu-header m mb-m\">\n {{ profile.firstName }} {{ profile.lastName }}\n </div>\n <mat-divider style=\"align-self: stretch\"></mat-divider>\n\n @if (loginMenu?.template; as menuLoginTpl) {\n <ng-container\n *ngTemplateOutlet=\"menuLoginTpl\"\n ></ng-container>\n }\n\n <button\n type=\"button\"\n class=\"mat-mdc-menu-item\"\n mat-menu-item\n data-cy=\"logoutButton\"\n (click)=\"doLogout()\"\n [attr.aria-label]=\"'layout.logout' | translate\"\n >\n <mat-icon>logout</mat-icon>\n {{ 'layout.logout' | translate }}\n </button>\n } @else {\n <button\n type=\"button\"\n mat-menu-item\n data-cy=\"loginButton\"\n (click)=\"doLogin()\"\n [attr.aria-label]=\"'layout.login' | translate\"\n >\n <mat-icon>login</mat-icon>\n {{ 'layout.login' | translate }}\n </button>\n }\n </mat-menu>\n }\n\n @if (\n isSmall &&\n (routes?.toArray()?.length || (languages && languages.length > 1))\n ) {\n <button\n type=\"button\"\n mat-icon-button\n class=\"menu-button\"\n data-cy=\"smallDeviceMenu\"\n (click)=\"this.toggleSideNav()\"\n [attr.aria-label]=\"'layout.menu' | translate\"\n >\n <mat-icon>menu</mat-icon>\n </button>\n }\n @if (!isSmall) {\n <div class=\"flex-center\" mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a\n [matMenuTriggerFor]=\"languageMenu\"\n data-cy=\"languageMenu\"\n [attr.aria-label]=\"'language.selection' | translate\"\n mat-tab-link\n >\n {{ currentLanguage }}\n <mat-icon style=\"width: 16px\">expand_more</mat-icon>\n </a>\n </div>\n }\n <mat-menu #languageMenu>\n @for (lang of languages; track lang.code) {\n <button\n type=\"button\"\n class=\"mat-mdc-menu-item\"\n mat-menu-item\n [attr.data-cy]=\"'language_' + lang.code\"\n (click)=\"changeLanguage(lang.code)\"\n [attr.aria-label]=\"lang.label\"\n >\n {{ lang.label }}\n </button>\n }\n </mat-menu>\n </div>\n </mat-toolbar>\n </header>\n <ng-container>\n @if (content?.template; as tpl) {\n <div\n [id]=\"id\"\n [attr.role]=\"role\"\n class=\"onemrva-layout-content onemrva-layout-container\"\n >\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n @if (\n environment &&\n (environment === env.LOCAL || environment === env.TEST)\n ) {\n <button\n id=\"accessibility_fab\"\n mat-fab\n color=\"accent\"\n aria-label=\"Accessibility check\"\n matTooltip=\"Accessibility check\"\n onclick=\"(function() {var _p='//openfed.github.io/AccessibilityCheck/build/';var _i=function(s,cb) {var sc=document.createElement('script');sc.onload = function() {sc.onload = null;sc.onreadystatechange = null;cb.call(this);};sc.onreadystatechange = function(){if(/^(complete|loaded)$/.test(this.readyState) === true){sc.onreadystatechange = null;sc.onload();}};sc.src=s;if (document.head) {document.head.appendChild(sc);} else {document.getElementsByTagName('head')[0].appendChild(sc);}}; var options={path:_p};_i(_p+'HTMLCS.js',function(){HTMLCSAuditor.run('WCAG2AA',null,options);});})();\"\n >\n <mat-icon>accessibility</mat-icon>\n </button>\n }\n </div>\n }\n\n <footer class=\"onemrva-footer p mb text-center\">\n @if (footer?.template; as footerTpl) {\n <div class=\"onemrva-layout-container\">\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\n </div>\n }\n </footer>\n </ng-container>\n </div>\n </mat-drawer-content>\n</mat-drawer-container>\n", styles: [":host{position:relative}:host a:active{outline:none}:host router-outlet{display:block;margin-bottom:90px}:host header mat-toolbar{position:fixed;height:var(--layout-header-height);z-index:400;--mat-tab-divider-color: transparent}:host header mat-toolbar .topMenu .mat-mdc-tab-header-pagination-before,:host header mat-toolbar .topMenu .mat-mdc-tab-header-pagination-after{display:none!important}:host header mat-toolbar .logo{height:42px}:host header mat-toolbar .application-title{font-size:1.3rem;font-weight:700;height:42px;line-height:42px;color:var(--mat-sys-tertiary)}:host .onemrva-layout-content{padding-top:var(--layout-content-padding-top);min-height:calc(100vh - 48px)}:host .mat-drawer-content{min-height:100vh}:host #accessibility_fab{position:fixed;bottom:16px;left:16px}:host .environment{position:fixed;top:0;left:0;z-index:24000;width:60px;height:50px;padding:15px 20px;font-weight:700;font-size:16px;border-radius:0 0 100%;color:#fff;display:none}:host .environment.LOCAL{background:transparent linear-gradient(90deg,#de2174,#eb142a) 0 0 no-repeat padding-box;display:block}:host .environment.TEST{background-color:#36c;display:block}:host .environment.VAL{background-color:#093;display:block}:host mat-drawer:not(.side-menu){padding:var(--double-spacer);background:var(--mat-sys-surface-container-high)}:host mat-drawer.xsmall{width:20%}:host mat-drawer.small{width:30%}:host mat-drawer.medium{width:50%}:host mat-drawer.large{width:60%}:host mat-drawer.xlarge{width:70%}:host mat-drawer.xxlarge{width:90%}@media screen and (max-width: 640px){:host mat-drawer{width:99%!important}}.mat-mdc-menu-content button.active>*{font-weight:700!important}.mat-mdc-menu-content button mat-icon{font-size:1.125rem!important;height:1.125rem;width:1.125rem}.mat-mdc-menu-content button span{font-size:14px!important}nav a.disabled{pointer-events:none}\n"] }]
555
598
  }], ctorParameters: () => [], propDecorators: { routes: [{
556
599
  type: ContentChildren,
557
600
  args: [LayoutRouteComponent]
@@ -594,21 +637,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
594
637
  type: Input
595
638
  }], role: [{
596
639
  type: Input
597
- }], drawerClass: [{
598
- type: Input
599
640
  }], showThemeSwitcher: [{
600
641
  type: Input
601
642
  }] } });
602
643
 
603
644
  class LayoutSidenavTitleComponent {
604
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutSidenavTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
605
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutSidenavTitleComponent, isStandalone: true, selector: "onemrva-layout-sidenav-title", viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: `
645
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutSidenavTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
646
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutSidenavTitleComponent, isStandalone: true, selector: "onemrva-layout-sidenav-title", viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: `
606
647
  <ng-template>
607
648
  <ng-content></ng-content>
608
649
  </ng-template>
609
650
  `, isInline: true }); }
610
651
  }
611
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutSidenavTitleComponent, decorators: [{
652
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutSidenavTitleComponent, decorators: [{
612
653
  type: Component,
613
654
  args: [{
614
655
  selector: 'onemrva-layout-sidenav-title',
@@ -624,14 +665,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
624
665
  args: [TemplateRef]
625
666
  }] } });
626
667
 
668
+ class LayoutLeftSidenavComponent {
669
+ constructor() {
670
+ this.items = [];
671
+ }
672
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutLeftSidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
673
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: LayoutLeftSidenavComponent, isStandalone: true, selector: "onemrva-layout-left-sidenav", inputs: { items: "items" }, ngImport: i0, template: "@if (items.length > 0) {\n <onemrva-mat-navigation [items]=\"items\"></onemrva-mat-navigation>\n} @else {\n <ng-content></ng-content>\n}\n", styles: [":host{width:240px;margin-right:40px}\n"], dependencies: [{ kind: "component", type: OnemrvaMatNavigationComponent, selector: "onemrva-mat-navigation", inputs: ["items", "level", "translate"] }] }); }
674
+ }
675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutLeftSidenavComponent, decorators: [{
676
+ type: Component,
677
+ args: [{ selector: 'onemrva-layout-left-sidenav', imports: [OnemrvaMatNavigationComponent], template: "@if (items.length > 0) {\n <onemrva-mat-navigation [items]=\"items\"></onemrva-mat-navigation>\n} @else {\n <ng-content></ng-content>\n}\n", styles: [":host{width:240px;margin-right:40px}\n"] }]
678
+ }], propDecorators: { items: [{
679
+ type: Input
680
+ }] } });
681
+
627
682
  class LayoutDrawerActionsComponent {
628
683
  constructor() {
629
684
  this.drawerService = inject(OnemrvaDrawerService);
630
685
  }
631
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutDrawerActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
632
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutDrawerActionsComponent, isStandalone: true, selector: "onemrva-drawer-actions", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{width:calc(100% - var(--double-spacer));display:block;padding:var(--spacer);text-align:right}\n"] }); }
686
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutDrawerActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
687
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutDrawerActionsComponent, isStandalone: true, selector: "onemrva-drawer-actions", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{width:calc(100% - var(--double-spacer));display:block;padding:var(--spacer);text-align:right}\n"] }); }
633
688
  }
634
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutDrawerActionsComponent, decorators: [{
689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutDrawerActionsComponent, decorators: [{
635
690
  type: Component,
636
691
  args: [{ selector: 'onemrva-drawer-actions', standalone: true, template: "<ng-content></ng-content>\n", styles: [":host{width:calc(100% - var(--double-spacer));display:block;padding:var(--spacer);text-align:right}\n"] }]
637
692
  }] });
@@ -640,10 +695,10 @@ class LayoutDrawerContentComponent {
640
695
  constructor() {
641
696
  this.drawerService = inject(OnemrvaDrawerService);
642
697
  }
643
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutDrawerContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
644
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: LayoutDrawerContentComponent, isStandalone: true, selector: "onemrva-drawer-content", ngImport: i0, template: "<span><ng-content></ng-content></span>\n", styles: [":host{background-color:var(--mat-sys-surface);padding:23px 32px;margin:0 var(--spacer);border-radius:var(--border-radius);display:block;height:calc(100vh - 180px);overflow:auto}\n"] }); }
698
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutDrawerContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
699
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LayoutDrawerContentComponent, isStandalone: true, selector: "onemrva-drawer-content", ngImport: i0, template: "<span><ng-content></ng-content></span>\n", styles: [":host{background-color:var(--mat-sys-surface);padding:23px 32px;margin:0 var(--spacer);border-radius:var(--border-radius);display:block;height:calc(100vh - 180px);overflow:auto}\n"] }); }
645
700
  }
646
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutDrawerContentComponent, decorators: [{
701
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutDrawerContentComponent, decorators: [{
647
702
  type: Component,
648
703
  args: [{ selector: 'onemrva-drawer-content', standalone: true, template: "<span><ng-content></ng-content></span>\n", styles: [":host{background-color:var(--mat-sys-surface);padding:23px 32px;margin:0 var(--spacer);border-radius:var(--border-radius);display:block;height:calc(100vh - 180px);overflow:auto}\n"] }]
649
704
  }] });
@@ -653,12 +708,12 @@ class LayoutDrawerTitleComponent {
653
708
  this.showClose = true;
654
709
  this.drawerService = inject(OnemrvaDrawerService);
655
710
  }
656
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutDrawerTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
657
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: LayoutDrawerTitleComponent, isStandalone: true, selector: "onemrva-drawer-title", inputs: { showClose: "showClose" }, ngImport: i0, template: "<span><ng-content></ng-content></span>\n@if (showClose) {\n <mat-icon\n class=\"close-drawer clickable large float-right\"\n (click)=\"drawerService.close()\"\n >close</mat-icon\n >\n}\n", styles: [":host{width:calc(100% - var(--double-spacer));display:block;padding:var(--spacer)}:host span:first-child{font:var(--mat-sys-title-large);color:var(--mat-sys-error)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
711
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutDrawerTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
712
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: LayoutDrawerTitleComponent, isStandalone: true, selector: "onemrva-drawer-title", inputs: { showClose: "showClose" }, ngImport: i0, template: "<span><ng-content></ng-content></span>\n@if (showClose) {\n <mat-icon\n class=\"close-drawer clickable large float-right\"\n (click)=\"drawerService.close()\"\n >close</mat-icon\n >\n}\n", styles: [":host{width:calc(100% - var(--double-spacer));display:block;padding:var(--spacer);margin:var(--spacer)}:host span:first-child{font:var(--mat-sys-title-large);color:var(--mat-sys-error)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
658
713
  }
659
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: LayoutDrawerTitleComponent, decorators: [{
714
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LayoutDrawerTitleComponent, decorators: [{
660
715
  type: Component,
661
- args: [{ selector: 'onemrva-drawer-title', standalone: true, imports: [MatIcon], template: "<span><ng-content></ng-content></span>\n@if (showClose) {\n <mat-icon\n class=\"close-drawer clickable large float-right\"\n (click)=\"drawerService.close()\"\n >close</mat-icon\n >\n}\n", styles: [":host{width:calc(100% - var(--double-spacer));display:block;padding:var(--spacer)}:host span:first-child{font:var(--mat-sys-title-large);color:var(--mat-sys-error)}\n"] }]
716
+ args: [{ selector: 'onemrva-drawer-title', standalone: true, imports: [MatIcon], template: "<span><ng-content></ng-content></span>\n@if (showClose) {\n <mat-icon\n class=\"close-drawer clickable large float-right\"\n (click)=\"drawerService.close()\"\n >close</mat-icon\n >\n}\n", styles: [":host{width:calc(100% - var(--double-spacer));display:block;padding:var(--spacer);margin:var(--spacer)}:host span:first-child{font:var(--mat-sys-title-large);color:var(--mat-sys-error)}\n"] }]
662
717
  }], propDecorators: { showClose: [{
663
718
  type: Input
664
719
  }] } });
@@ -674,16 +729,17 @@ const layoutComponents = [
674
729
  LayoutSidenavComponent,
675
730
  LayoutLoginMenuComponent,
676
731
  LayoutAfterNavComponent,
732
+ LayoutLeftSidenavComponent,
677
733
  ];
678
734
 
679
735
  class StripHtmlPipe {
680
736
  transform(value) {
681
737
  return value.replace(/<.*?>/g, ''); // replace tags
682
738
  }
683
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: StripHtmlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
684
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.2", ngImport: i0, type: StripHtmlPipe, isStandalone: true, name: "striphtml" }); }
739
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: StripHtmlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
740
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: StripHtmlPipe, isStandalone: true, name: "striphtml" }); }
685
741
  }
686
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: StripHtmlPipe, decorators: [{
742
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: StripHtmlPipe, decorators: [{
687
743
  type: Pipe,
688
744
  args: [{
689
745
  name: 'striphtml',
@@ -766,8 +822,8 @@ class OnemRvaProfile {
766
822
  }
767
823
 
768
824
  class OnemrvaLayoutModule {
769
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: OnemrvaLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
770
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.2", ngImport: i0, type: OnemrvaLayoutModule, imports: [LayoutComponent, LayoutContentComponent, LayoutFooterComponent, LayoutRouteComponent, LayoutSubrouteComponent, LayoutTitleComponent, LayoutSidenavTitleComponent, LayoutSidenavComponent, LayoutLoginMenuComponent, LayoutAfterNavComponent, StripHtmlPipe,
825
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: OnemrvaLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
826
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: OnemrvaLayoutModule, imports: [LayoutComponent, LayoutContentComponent, LayoutFooterComponent, LayoutRouteComponent, LayoutSubrouteComponent, LayoutTitleComponent, LayoutSidenavTitleComponent, LayoutSidenavComponent, LayoutLoginMenuComponent, LayoutAfterNavComponent, LayoutLeftSidenavComponent, StripHtmlPipe,
771
827
  DrawerHostDirective,
772
828
  CommonModule,
773
829
  RouterModule,
@@ -782,13 +838,13 @@ class OnemrvaLayoutModule {
782
838
  OnemrvaMatAvatarModule,
783
839
  MatTooltipModule,
784
840
  TranslateModule,
785
- MatRipple], exports: [LayoutComponent, LayoutContentComponent, LayoutFooterComponent, LayoutRouteComponent, LayoutSubrouteComponent, LayoutTitleComponent, LayoutSidenavTitleComponent, LayoutSidenavComponent, LayoutLoginMenuComponent, LayoutAfterNavComponent, LayoutModule] }); }
786
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: OnemrvaLayoutModule, providers: [
841
+ MatRipple], exports: [LayoutComponent, LayoutContentComponent, LayoutFooterComponent, LayoutRouteComponent, LayoutSubrouteComponent, LayoutTitleComponent, LayoutSidenavTitleComponent, LayoutSidenavComponent, LayoutLoginMenuComponent, LayoutAfterNavComponent, LayoutLeftSidenavComponent, LayoutModule] }); }
842
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: OnemrvaLayoutModule, providers: [
787
843
  {
788
844
  provide: MAT_SNACK_BAR_DEFAULT_OPTIONS,
789
845
  useValue: { horizontalPosition: 'right' },
790
846
  },
791
- ], imports: [LayoutComponent, LayoutRouteComponent, LayoutSidenavComponent, CommonModule,
847
+ ], imports: [LayoutComponent, LayoutRouteComponent, LayoutSidenavComponent, LayoutLeftSidenavComponent, CommonModule,
792
848
  RouterModule,
793
849
  LayoutModule,
794
850
  MatToolbarModule,
@@ -802,7 +858,7 @@ class OnemrvaLayoutModule {
802
858
  MatTooltipModule,
803
859
  TranslateModule, LayoutModule] }); }
804
860
  }
805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: OnemrvaLayoutModule, decorators: [{
861
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: OnemrvaLayoutModule, decorators: [{
806
862
  type: NgModule,
807
863
  args: [{
808
864
  declarations: [],
@@ -839,5 +895,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
839
895
  * Generated bundle index. Do not edit.
840
896
  */
841
897
 
842
- export { CoerceBooleanInput, DrawerHostDirective, Environment, LayoutAfterNavComponent, LayoutComponent, LayoutContentComponent, LayoutDrawerActionsComponent, LayoutDrawerContentComponent, LayoutDrawerTitleComponent, LayoutFooterComponent, LayoutLoginMenuComponent, LayoutRouteComponent, LayoutSidenavComponent, LayoutSidenavTitleComponent, LayoutSubrouteComponent, LayoutTitleComponent, ObservableContent, OnemRvaProfile, OnemrvaDrawerService, OnemrvaLayoutModule, StripHtmlPipe, layoutComponents };
898
+ export { CoerceBooleanInput, DrawerHostDirective, Environment, LayoutAfterNavComponent, LayoutComponent, LayoutContentComponent, LayoutDrawerActionsComponent, LayoutDrawerContentComponent, LayoutDrawerTitleComponent, LayoutFooterComponent, LayoutLeftSidenavComponent, LayoutLoginMenuComponent, LayoutRouteComponent, LayoutSidenavComponent, LayoutSidenavTitleComponent, LayoutSubrouteComponent, LayoutTitleComponent, ObservableContent, OnemRvaProfile, OnemrvaDrawerService, OnemrvaLayoutModule, StripHtmlPipe, layoutComponents };
843
899
  //# sourceMappingURL=onemrvapublic-design-system-layout.mjs.map