@rxap/layout 16.0.0-dev.16 → 16.0.0-dev.17

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.
@@ -22,7 +22,7 @@ import * as i6 from '@angular/material/menu';
22
22
  import { MatMenuModule } from '@angular/material/menu';
23
23
  import * as i3$1 from '@angular/material/select';
24
24
  import { MatSelectModule } from '@angular/material/select';
25
- import * as i2$4 from '@angular/material/sidenav';
25
+ import * as i3$4 from '@angular/material/sidenav';
26
26
  import { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';
27
27
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
28
28
  import { DataSourceCollectionDirective } from '@rxap/data-source/directive';
@@ -32,17 +32,18 @@ import { switchMap, filter as filter$1, Subscription, BehaviorSubject, debounceT
32
32
  import { filter, tap, map, switchMap as switchMap$1, startWith, catchError } from 'rxjs/operators';
33
33
  import * as i1$5 from '@angular/flex-layout/flex';
34
34
  import { FlexModule } from '@angular/flex-layout/flex';
35
+ import * as i1$2 from '@rxap/authentication';
36
+ import { ClickOnLink } from '@rxap/browser-utilities';
35
37
  import * as i1$1 from '@rxap/config';
36
38
  import { ConfigService } from '@rxap/config';
37
39
  import { JoinPath, coerceBoolean } from '@rxap/utilities';
38
- import { ClickOnLink } from '@rxap/browser-utilities';
39
- import * as i1$2 from '@rxap/authentication';
40
40
  import * as i2$3 from '@angular/router';
41
41
  import { NavigationStart, NavigationEnd, NavigationCancel, Router, RouterLinkActive, RouterLink, RouterOutlet } from '@angular/router';
42
42
  import * as i1$4 from '@angular/material/progress-bar';
43
43
  import { MatProgressBarModule } from '@angular/material/progress-bar';
44
- import { DetermineReleaseName, RXAP_ENVIRONMENT } from '@rxap/environment';
45
44
  import { FlexLayoutModule } from '@angular/flex-layout';
45
+ import { DetermineReleaseName, RXAP_ENVIRONMENT } from '@rxap/environment';
46
+ import * as i2$4 from '@rxap/icon';
46
47
  import * as i3$3 from '@angular/material/divider';
47
48
  import { MatDividerModule } from '@angular/material/divider';
48
49
  import { trigger, transition, style, animate } from '@angular/animations';
@@ -76,7 +77,7 @@ class AppUrlService {
76
77
  this.config = config;
77
78
  this.localeId = localeId;
78
79
  this.userProfileService = userProfileService;
79
- this._apps = this.config.get('navigation.apps') ?? [];
80
+ this._apps = this.config.get('navigation.apps', []);
80
81
  }
81
82
  getApp(appId) {
82
83
  return this._apps.find(app => app.id === appId) ?? null;
@@ -141,7 +142,7 @@ class AppsButtonComponent {
141
142
  this._subscription?.unsubscribe();
142
143
  }
143
144
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppsButtonComponent, deps: [{ token: RXAP_LAYOUT_APPS_GRID, optional: true }, { token: AppUrlService }, { token: i1$2.RxapAuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
144
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: AppsButtonComponent, isStandalone: true, selector: "rxap-apps-button", ngImport: i0, template: "<div *ngIf=\"appList()?.length\" class=\"flex flex-row items-center gap-8\">\n\n <div *ngIf=\"isOpen\" class=\"flex flex-row items-center gap-6\">\n\n <div *ngFor=\"let app of appList()\" class=\"h-10\">\n <a [href]=\"app.href\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <img *ngIf=\"app.image\" [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n <span class=\"label grow-0\">{{app.label}}</span>\n </span>\n </a>\n </div>\n\n </div>\n\n <button (click)=\"isOpen = !isOpen\" mat-icon-button>\n <mat-icon>apps</mat-icon>\n </button>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
145
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: AppsButtonComponent, isStandalone: true, selector: "rxap-apps-button", ngImport: i0, template: "<div *ngIf=\"appList()?.length\" class=\"flex flex-row items-center gap-8\">\n\n <div *ngIf=\"isOpen\" class=\"flex flex-row items-center gap-6\">\n\n <div *ngFor=\"let app of appList()\" class=\"h-10\">\n <a [href]=\"app.href\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <img *ngIf=\"app.image\" [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n <span class=\"label grow-0\">{{app.label}}</span>\n </span>\n </a>\n </div>\n\n </div>\n\n <button (click)=\"isOpen = !isOpen\" mat-icon-button>\n <mat-icon svgIcon=\"apps\"></mat-icon>\n </button>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
145
146
  }
146
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppsButtonComponent, decorators: [{
147
148
  type: Component,
@@ -152,7 +153,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
152
153
  MatButtonModule,
153
154
  MatIconModule,
154
155
  NgOptimizedImage,
155
- ], template: "<div *ngIf=\"appList()?.length\" class=\"flex flex-row items-center gap-8\">\n\n <div *ngIf=\"isOpen\" class=\"flex flex-row items-center gap-6\">\n\n <div *ngFor=\"let app of appList()\" class=\"h-10\">\n <a [href]=\"app.href\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <img *ngIf=\"app.image\" [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n <span class=\"label grow-0\">{{app.label}}</span>\n </span>\n </a>\n </div>\n\n </div>\n\n <button (click)=\"isOpen = !isOpen\" mat-icon-button>\n <mat-icon>apps</mat-icon>\n </button>\n\n</div>\n" }]
156
+ ], template: "<div *ngIf=\"appList()?.length\" class=\"flex flex-row items-center gap-8\">\n\n <div *ngIf=\"isOpen\" class=\"flex flex-row items-center gap-6\">\n\n <div *ngFor=\"let app of appList()\" class=\"h-10\">\n <a [href]=\"app.href\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <img *ngIf=\"app.image\" [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n <span class=\"label grow-0\">{{app.label}}</span>\n </span>\n </a>\n </div>\n\n </div>\n\n <button (click)=\"isOpen = !isOpen\" mat-icon-button>\n <mat-icon svgIcon=\"apps\"></mat-icon>\n </button>\n\n</div>\n" }]
156
157
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
157
158
  type: Optional
158
159
  }, {
@@ -275,7 +276,7 @@ class SettingsButtonComponent {
275
276
  this._subscription?.unsubscribe();
276
277
  }
277
278
  ngOnInit() {
278
- this._subscription = this.route.data.pipe(tap(data => console.log('data', data)), map(data => this.getCustomMenuItems(data)), map(items => items.map(item => new ComponentPortal(item, undefined, this.injector))), tap(items => console.log('items', items)), tap(items => this.items.set(items))).subscribe();
279
+ this._subscription = this.route.data.pipe(map(data => this.getCustomMenuItems(data)), map(items => items.map(item => new ComponentPortal(item, undefined, this.injector))), tap(items => this.items.set(items))).subscribe();
279
280
  }
280
281
  getCustomMenuItems(data) {
281
282
  if (data?.layout?.header?.menu?.items?.length) {
@@ -284,11 +285,11 @@ class SettingsButtonComponent {
284
285
  return [];
285
286
  }
286
287
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SettingsButtonComponent, deps: [{ token: i1.ThemeService }, { token: i2$3.ActivatedRoute }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
287
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SettingsButtonComponent, isStandalone: true, selector: "rxap-settings-button", ngImport: i0, template: "<button [matMenuTriggerFor]=\"menu\" mat-icon-button>\n <mat-icon>settings</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\">\n <button (click)=\"theme.toggleDarkTheme()\" mat-menu-item>\n <mat-icon *ngIf=\"theme.darkMode\">brightness_2</mat-icon>\n <mat-icon *ngIf=\"!theme.darkMode\">brightness_5</mat-icon>\n <span i18n>Mode</span>\n </button>\n <rxap-language-selector *ngIf=\"!isDevMode\"></rxap-language-selector>\n <ng-container *ngFor=\"let item of items()\">\n <ng-template [cdkPortalOutlet]=\"item\"></ng-template>\n </ng-container>\n</mat-menu>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LanguageSelectorComponent, selector: "rxap-language-selector" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
288
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SettingsButtonComponent, isStandalone: true, selector: "rxap-settings-button", ngImport: i0, template: "<button [matMenuTriggerFor]=\"menu\" mat-icon-button>\n <mat-icon svgIcon=\"cog\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\">\n <button (click)=\"theme.toggleDarkTheme()\" mat-menu-item>\n <mat-icon *ngIf=\"theme.darkMode\" svgIcon=\"brightness-2\"></mat-icon>\n <mat-icon *ngIf=\"!theme.darkMode\" svgIcon=\"brightness-5\"></mat-icon>\n <span i18n>Mode</span>\n </button>\n <rxap-language-selector *ngIf=\"!isDevMode\"></rxap-language-selector>\n <ng-container *ngFor=\"let item of items()\">\n <ng-template [cdkPortalOutlet]=\"item\"></ng-template>\n </ng-container>\n</mat-menu>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LanguageSelectorComponent, selector: "rxap-language-selector" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
288
289
  }
289
290
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SettingsButtonComponent, decorators: [{
290
291
  type: Component,
291
- args: [{ selector: 'rxap-settings-button', standalone: true, imports: [CommonModule, MatButtonModule, MatIconModule, LanguageSelectorComponent, MatMenuModule, PortalModule], template: "<button [matMenuTriggerFor]=\"menu\" mat-icon-button>\n <mat-icon>settings</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\">\n <button (click)=\"theme.toggleDarkTheme()\" mat-menu-item>\n <mat-icon *ngIf=\"theme.darkMode\">brightness_2</mat-icon>\n <mat-icon *ngIf=\"!theme.darkMode\">brightness_5</mat-icon>\n <span i18n>Mode</span>\n </button>\n <rxap-language-selector *ngIf=\"!isDevMode\"></rxap-language-selector>\n <ng-container *ngFor=\"let item of items()\">\n <ng-template [cdkPortalOutlet]=\"item\"></ng-template>\n </ng-container>\n</mat-menu>\n" }]
292
+ args: [{ selector: 'rxap-settings-button', standalone: true, imports: [CommonModule, MatButtonModule, MatIconModule, LanguageSelectorComponent, MatMenuModule, PortalModule], template: "<button [matMenuTriggerFor]=\"menu\" mat-icon-button>\n <mat-icon svgIcon=\"cog\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\">\n <button (click)=\"theme.toggleDarkTheme()\" mat-menu-item>\n <mat-icon *ngIf=\"theme.darkMode\" svgIcon=\"brightness-2\"></mat-icon>\n <mat-icon *ngIf=\"!theme.darkMode\" svgIcon=\"brightness-5\"></mat-icon>\n <span i18n>Mode</span>\n </button>\n <rxap-language-selector *ngIf=\"!isDevMode\"></rxap-language-selector>\n <ng-container *ngFor=\"let item of items()\">\n <ng-template [cdkPortalOutlet]=\"item\"></ng-template>\n </ng-container>\n</mat-menu>\n" }]
292
293
  }], ctorParameters: function () { return [{ type: i1.ThemeService }, { type: i2$3.ActivatedRoute }, { type: i0.Injector }]; } });
293
294
 
294
295
  class UserProfileIconComponent {
@@ -307,7 +308,7 @@ class UserProfileIconComponent {
307
308
  await this.authenticationService.signOut();
308
309
  }
309
310
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: UserProfileIconComponent, deps: [{ token: i1$2.RxapUserProfileService }, { token: i1$2.RxapAuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
310
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: UserProfileIconComponent, isStandalone: true, selector: "rxap-user-profile-icon", ngImport: i0, template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon flex flex-row justify-center items-center\">\n <mat-icon class=\"avatar-icon\">account_circle</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\">\n <button mat-menu-item>\n <mat-icon>account_circle</mat-icon>\n <span>{{username()}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon>login</mat-icon>\n <span i18n>Logout</span>\n </button>\n</mat-menu>\n", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
311
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: UserProfileIconComponent, isStandalone: true, selector: "rxap-user-profile-icon", ngImport: i0, template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon flex flex-row justify-center items-center\">\n <mat-icon class=\"avatar-icon\" svgIcon=\"account-circle\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\">\n <button mat-menu-item>\n <mat-icon svgIcon=\"account\"></mat-icon>\n <span>{{username()}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon svgIcon=\"logout\"></mat-icon>\n <span i18n>Logout</span>\n </button>\n</mat-menu>\n", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
311
312
  }
312
313
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: UserProfileIconComponent, decorators: [{
313
314
  type: Component,
@@ -316,7 +317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
316
317
  MatIconModule,
317
318
  NgIf,
318
319
  AsyncPipe,
319
- ], template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon flex flex-row justify-center items-center\">\n <mat-icon class=\"avatar-icon\">account_circle</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\">\n <button mat-menu-item>\n <mat-icon>account_circle</mat-icon>\n <span>{{username()}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon>login</mat-icon>\n <span i18n>Logout</span>\n </button>\n</mat-menu>\n", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"] }]
320
+ ], template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon flex flex-row justify-center items-center\">\n <mat-icon class=\"avatar-icon\" svgIcon=\"account-circle\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\">\n <button mat-menu-item>\n <mat-icon svgIcon=\"account\"></mat-icon>\n <span>{{username()}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon svgIcon=\"logout\"></mat-icon>\n <span i18n>Logout</span>\n </button>\n</mat-menu>\n", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"] }]
320
321
  }], ctorParameters: function () { return [{ type: i1$2.RxapUserProfileService }, { type: i1$2.RxapAuthenticationService }]; } });
321
322
 
322
323
  class HeaderComponent {
@@ -388,11 +389,11 @@ class SignOutComponent {
388
389
  await this.authenticationService.signOut();
389
390
  }
390
391
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SignOutComponent, deps: [{ token: i1$2.RxapAuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
391
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SignOutComponent, isStandalone: true, selector: "rxap-sign-out", ngImport: i0, template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon>login</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
392
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SignOutComponent, isStandalone: true, selector: "rxap-sign-out", ngImport: i0, template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon svgIcon=\"logout\"></mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
392
393
  }
393
394
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SignOutComponent, decorators: [{
394
395
  type: Component,
395
- args: [{ selector: 'rxap-sign-out', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon>login</mat-icon>\n</button>\n" }]
396
+ args: [{ selector: 'rxap-sign-out', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon svgIcon=\"logout\"></mat-icon>\n</button>\n" }]
396
397
  }], ctorParameters: function () { return [{ type: i1$2.RxapAuthenticationService }]; } });
397
398
 
398
399
  class ResetButtonComponent {
@@ -400,11 +401,11 @@ class ResetButtonComponent {
400
401
  this.resetService = resetService;
401
402
  }
402
403
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResetButtonComponent, deps: [{ token: ResetService }], target: i0.ɵɵFactoryTarget.Component }); }
403
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ResetButtonComponent, isStandalone: true, selector: "rxap-reset-button", ngImport: i0, template: "<button (click)=\"resetService.resetAll()\" mat-icon-button>\n <mat-icon>refresh</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
404
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ResetButtonComponent, isStandalone: true, selector: "rxap-reset-button", ngImport: i0, template: "<button (click)=\"resetService.resetAll()\" mat-icon-button>\n <mat-icon svgIcon=\"refresh\"></mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
404
405
  }
405
406
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResetButtonComponent, decorators: [{
406
407
  type: Component,
407
- args: [{ selector: 'rxap-reset-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button (click)=\"resetService.resetAll()\" mat-icon-button>\n <mat-icon>refresh</mat-icon>\n</button>\n" }]
408
+ args: [{ selector: 'rxap-reset-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button (click)=\"resetService.resetAll()\" mat-icon-button>\n <mat-icon svgIcon=\"refresh\"></mat-icon>\n</button>\n" }]
408
409
  }], ctorParameters: function () { return [{ type: i1.ResetService, decorators: [{
409
410
  type: Inject,
410
411
  args: [ResetService]
@@ -426,40 +427,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
426
427
  args: [{ required: true }]
427
428
  }] } });
428
429
 
429
- class LayoutComponentService {
430
- constructor(footerComponentService, headerComponentService, logoConfig = null, config) {
431
- this.footerComponentService = footerComponentService;
432
- this.headerComponentService = headerComponentService;
433
- this.config = config;
434
- this.opened$ = new BehaviorSubject(true);
435
- this.mode$ = new BehaviorSubject('side');
436
- this.fixedTopGap$ = new BehaviorSubject(64);
437
- this.mode$.next(this.config.get('navigation.mode', this.mode$.value));
438
- this.opened$.next(this.config.get('navigation.open', this.opened$.value));
439
- this.fixedBottomGap$ = this.footerComponentService.portalCount$.pipe(map(count => count * 64));
440
- this.fixedTopGap$.next(this.headerComponentService.countComponent * 64);
441
- this.headerComponentService.update$.pipe(tap(() => this.fixedTopGap$.next(this.headerComponentService.countComponent * 64))).subscribe();
442
- this.logo = logoConfig ?? {
443
- src: '/assets/logo.png',
444
- width: 192,
445
- };
446
- }
447
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, deps: [{ token: i1.FooterService }, { token: i1.HeaderService }, { token: RXAP_LOGO_CONFIG, optional: true }, { token: ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
448
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, providedIn: 'root' }); }
449
- }
450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, decorators: [{
451
- type: Injectable,
452
- args: [{ providedIn: 'root' }]
453
- }], ctorParameters: function () { return [{ type: i1.FooterService }, { type: i1.HeaderService }, { type: undefined, decorators: [{
454
- type: Optional
455
- }, {
456
- type: Inject,
457
- args: [RXAP_LOGO_CONFIG]
458
- }] }, { type: i1$1.ConfigService, decorators: [{
459
- type: Inject,
460
- args: [ConfigService]
461
- }] }]; } });
462
-
463
430
  class SidenavComponentService {
464
431
  constructor(config) {
465
432
  this.config = config;
@@ -845,11 +812,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
845
812
  type: Input
846
813
  }] } });
847
814
 
815
+ class LayoutComponentService {
816
+ constructor(footerComponentService, headerComponentService, logoConfig = null, config) {
817
+ this.footerComponentService = footerComponentService;
818
+ this.headerComponentService = headerComponentService;
819
+ this.config = config;
820
+ this.opened$ = new BehaviorSubject(true);
821
+ this.mode$ = new BehaviorSubject('side');
822
+ this.fixedTopGap$ = new BehaviorSubject(64);
823
+ this.mode$.next(this.config.get('navigation.mode', this.mode$.value));
824
+ this.opened$.next(this.config.get('navigation.open', this.opened$.value));
825
+ this.fixedBottomGap$ = this.footerComponentService.portalCount$.pipe(map(count => count * 64));
826
+ this.fixedTopGap$.next(this.headerComponentService.countComponent * 64);
827
+ this.headerComponentService.update$.pipe(tap(() => this.fixedTopGap$.next(this.headerComponentService.countComponent * 64))).subscribe();
828
+ this.logo = logoConfig ?? {
829
+ src: '/assets/logo.png',
830
+ width: 192,
831
+ };
832
+ }
833
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, deps: [{ token: i1.FooterService }, { token: i1.HeaderService }, { token: RXAP_LOGO_CONFIG, optional: true }, { token: ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
834
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, providedIn: 'root' }); }
835
+ }
836
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, decorators: [{
837
+ type: Injectable,
838
+ args: [{ providedIn: 'root' }]
839
+ }], ctorParameters: function () { return [{ type: i1.FooterService }, { type: i1.HeaderService }, { type: undefined, decorators: [{
840
+ type: Optional
841
+ }, {
842
+ type: Inject,
843
+ args: [RXAP_LOGO_CONFIG]
844
+ }] }, { type: i1$1.ConfigService, decorators: [{
845
+ type: Inject,
846
+ args: [ConfigService]
847
+ }] }]; } });
848
+
848
849
  class LayoutComponent {
849
- constructor(layoutComponentService, environment) {
850
+ constructor(layoutComponentService, environment, iconLoaderService) {
850
851
  this.layoutComponentService = layoutComponentService;
851
852
  this.environment = environment;
852
853
  this.sidenavMode = 'over';
854
+ iconLoaderService.load();
853
855
  }
854
856
  get release() {
855
857
  return DetermineReleaseName(this.environment);
@@ -863,8 +865,8 @@ class LayoutComponent {
863
865
  this.sidenavMode = 'over';
864
866
  }
865
867
  }
866
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, deps: [{ token: LayoutComponentService }, { token: RXAP_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component }); }
867
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: LayoutComponent, isStandalone: true, selector: "rxap-layout", viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }], ngImport: i0, template: "<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header [sidenav]=\"sidenav\" class=\"z-10 w-full fixed top-0\"></rxap-header>\n <mat-sidenav-container [ngClass]=\"{\n 'mb-16': (layoutComponentService.fixedBottomGap$ | async) === 64,\n 'mb-32': (layoutComponentService.fixedBottomGap$ | async) === 128,\n }\" class=\"grow mt-16\">\n <mat-sidenav\n #matSidenav=\"matSidenav\"\n (mouseenter)=\"sidenavMode === 'over' && matSidenav.open()\"\n (mouseleave)=\"sidenavMode === 'over' && matSidenav.close()\"\n [fixedBottomGap]=\"layoutComponentService.fixedBottomGap$ | async\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"layoutComponentService.fixedTopGap$ | async\"\n [mode]=\"sidenavMode\"\n [opened]=\"false\"\n class=\"sidenav\"\n >\n <div class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"toggleSidenavMode()\"\n class=\"pl-2 pr-2 self-stretch grow-0 flex flex-row justify-between items-center\">\n <span class=\"text-lg\" i18n>Navigation</span>\n <button mat-icon-button>\n <mat-icon *ngIf=\"sidenavMode === 'over'\">radio_button_unchecked</mat-icon>\n <mat-icon *ngIf=\"sidenavMode === 'side'\">radio_button_checked</mat-icon>\n </button>\n </div>\n\n <ul class=\"grow self-stretch\" root rxap-navigation></ul>\n\n <img\n [src]=\"layoutComponentService.logo.src ?? 'https://via.placeholder.com/256x128px'\"\n [routerLink]=\"['/']\"\n [width]=\"layoutComponentService.logo.width ?? 256\"\n alt=\"logo\"\n class=\"grow-0 mx-16\"\n />\n <div class=\"grow-0 px-16\">\n <span>{{release}}</span>\n </div>\n </div>\n </mat-sidenav>\n <mat-sidenav-content\n [ngClass]=\"{ opened: matSidenav.opened, side: sidenavMode === 'side' }\"\n class=\"ml-16 p-4\"\n >\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n <rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n</div>\n<!--<rxap-window-task-bar-container></rxap-window-task-bar-container>-->\n", styles: [":host .sidenav:not(.mat-drawer-opened){transform:translate(calc(-100% + 64px))!important;visibility:visible!important;box-shadow:inherit!important;transition-property:transform;transition-delay:.25s;display:flex;border-right:solid 1px rgba(0,0,0,.12)}:host .sidenav ::ng-deep .mat-drawer-inner-container::-webkit-scrollbar{display:none}.footer{position:fixed;bottom:0;left:0;right:0;z-index:100}.header{position:fixed;top:0;left:0;right:0;z-index:100}.task-bar{position:fixed;bottom:0;right:0;left:0;z-index:100}\n"], dependencies: [{ kind: "component", type: HeaderComponent, selector: "rxap-header", inputs: ["sidenav", "color"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i2$4.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i2$4.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i2$4.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i2$5.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FooterComponent, selector: "rxap-footer" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: NavigationComponent, selector: "ul[rxap-navigation]", inputs: ["items", "level", "root"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
868
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, deps: [{ token: LayoutComponentService }, { token: RXAP_ENVIRONMENT }, { token: i2$4.IconLoaderService }], target: i0.ɵɵFactoryTarget.Component }); }
869
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: LayoutComponent, isStandalone: true, selector: "rxap-layout", viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }], ngImport: i0, template: "<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header [sidenav]=\"sidenav\" class=\"z-10 w-full fixed top-0\"></rxap-header>\n <mat-sidenav-container [ngClass]=\"{\n 'mb-16': (layoutComponentService.fixedBottomGap$ | async) === 64,\n 'mb-32': (layoutComponentService.fixedBottomGap$ | async) === 128,\n }\" class=\"grow mt-16\">\n <mat-sidenav\n #matSidenav=\"matSidenav\"\n (mouseenter)=\"sidenavMode === 'over' && matSidenav.open()\"\n (mouseleave)=\"sidenavMode === 'over' && matSidenav.close()\"\n [fixedBottomGap]=\"layoutComponentService.fixedBottomGap$ | async\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"layoutComponentService.fixedTopGap$ | async\"\n [mode]=\"sidenavMode\"\n [opened]=\"false\"\n class=\"sidenav\"\n >\n <div class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"toggleSidenavMode()\"\n class=\"pl-2 pr-2 self-stretch grow-0 flex flex-row justify-between items-center\">\n <span class=\"text-lg\" i18n>Navigation</span>\n <button mat-icon-button>\n <mat-icon *ngIf=\"sidenavMode === 'over'\">radio_button_unchecked</mat-icon>\n <mat-icon *ngIf=\"sidenavMode === 'side'\">radio_button_checked</mat-icon>\n </button>\n </div>\n\n <ul class=\"grow self-stretch\" root rxap-navigation></ul>\n\n <img\n [src]=\"layoutComponentService.logo.src ?? 'https://via.placeholder.com/256x128px'\"\n [routerLink]=\"['/']\"\n [width]=\"layoutComponentService.logo.width ?? 256\"\n alt=\"logo\"\n class=\"grow-0 mx-16\"\n />\n <div class=\"grow-0 px-16\">\n <span>{{release}}</span>\n </div>\n </div>\n </mat-sidenav>\n <mat-sidenav-content class=\"ml-16 p-4\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n <rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n</div>\n<!--<rxap-window-task-bar-container></rxap-window-task-bar-container>-->\n", styles: [":host .sidenav:not(.mat-drawer-opened){transform:translate(calc(-100% + 64px))!important;visibility:visible!important;box-shadow:inherit!important;transition-property:transform;transition-delay:.25s;display:flex;border-right:solid 1px rgba(0,0,0,.12)}:host .sidenav ::ng-deep .mat-drawer-inner-container::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "component", type: HeaderComponent, selector: "rxap-header", inputs: ["sidenav", "color"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$4.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$4.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i3$4.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i2$5.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FooterComponent, selector: "rxap-footer" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: NavigationComponent, selector: "ul[rxap-navigation]", inputs: ["items", "level", "root"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
868
870
  }
869
871
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, decorators: [{
870
872
  type: Component,
@@ -882,11 +884,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
882
884
  NgOptimizedImage,
883
885
  NavigationComponent,
884
886
  RouterOutlet,
885
- ], template: "<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header [sidenav]=\"sidenav\" class=\"z-10 w-full fixed top-0\"></rxap-header>\n <mat-sidenav-container [ngClass]=\"{\n 'mb-16': (layoutComponentService.fixedBottomGap$ | async) === 64,\n 'mb-32': (layoutComponentService.fixedBottomGap$ | async) === 128,\n }\" class=\"grow mt-16\">\n <mat-sidenav\n #matSidenav=\"matSidenav\"\n (mouseenter)=\"sidenavMode === 'over' && matSidenav.open()\"\n (mouseleave)=\"sidenavMode === 'over' && matSidenav.close()\"\n [fixedBottomGap]=\"layoutComponentService.fixedBottomGap$ | async\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"layoutComponentService.fixedTopGap$ | async\"\n [mode]=\"sidenavMode\"\n [opened]=\"false\"\n class=\"sidenav\"\n >\n <div class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"toggleSidenavMode()\"\n class=\"pl-2 pr-2 self-stretch grow-0 flex flex-row justify-between items-center\">\n <span class=\"text-lg\" i18n>Navigation</span>\n <button mat-icon-button>\n <mat-icon *ngIf=\"sidenavMode === 'over'\">radio_button_unchecked</mat-icon>\n <mat-icon *ngIf=\"sidenavMode === 'side'\">radio_button_checked</mat-icon>\n </button>\n </div>\n\n <ul class=\"grow self-stretch\" root rxap-navigation></ul>\n\n <img\n [src]=\"layoutComponentService.logo.src ?? 'https://via.placeholder.com/256x128px'\"\n [routerLink]=\"['/']\"\n [width]=\"layoutComponentService.logo.width ?? 256\"\n alt=\"logo\"\n class=\"grow-0 mx-16\"\n />\n <div class=\"grow-0 px-16\">\n <span>{{release}}</span>\n </div>\n </div>\n </mat-sidenav>\n <mat-sidenav-content\n [ngClass]=\"{ opened: matSidenav.opened, side: sidenavMode === 'side' }\"\n class=\"ml-16 p-4\"\n >\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n <rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n</div>\n<!--<rxap-window-task-bar-container></rxap-window-task-bar-container>-->\n", styles: [":host .sidenav:not(.mat-drawer-opened){transform:translate(calc(-100% + 64px))!important;visibility:visible!important;box-shadow:inherit!important;transition-property:transform;transition-delay:.25s;display:flex;border-right:solid 1px rgba(0,0,0,.12)}:host .sidenav ::ng-deep .mat-drawer-inner-container::-webkit-scrollbar{display:none}.footer{position:fixed;bottom:0;left:0;right:0;z-index:100}.header{position:fixed;top:0;left:0;right:0;z-index:100}.task-bar{position:fixed;bottom:0;right:0;left:0;z-index:100}\n"] }]
887
+ ], template: "<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header [sidenav]=\"sidenav\" class=\"z-10 w-full fixed top-0\"></rxap-header>\n <mat-sidenav-container [ngClass]=\"{\n 'mb-16': (layoutComponentService.fixedBottomGap$ | async) === 64,\n 'mb-32': (layoutComponentService.fixedBottomGap$ | async) === 128,\n }\" class=\"grow mt-16\">\n <mat-sidenav\n #matSidenav=\"matSidenav\"\n (mouseenter)=\"sidenavMode === 'over' && matSidenav.open()\"\n (mouseleave)=\"sidenavMode === 'over' && matSidenav.close()\"\n [fixedBottomGap]=\"layoutComponentService.fixedBottomGap$ | async\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"layoutComponentService.fixedTopGap$ | async\"\n [mode]=\"sidenavMode\"\n [opened]=\"false\"\n class=\"sidenav\"\n >\n <div class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"toggleSidenavMode()\"\n class=\"pl-2 pr-2 self-stretch grow-0 flex flex-row justify-between items-center\">\n <span class=\"text-lg\" i18n>Navigation</span>\n <button mat-icon-button>\n <mat-icon *ngIf=\"sidenavMode === 'over'\">radio_button_unchecked</mat-icon>\n <mat-icon *ngIf=\"sidenavMode === 'side'\">radio_button_checked</mat-icon>\n </button>\n </div>\n\n <ul class=\"grow self-stretch\" root rxap-navigation></ul>\n\n <img\n [src]=\"layoutComponentService.logo.src ?? 'https://via.placeholder.com/256x128px'\"\n [routerLink]=\"['/']\"\n [width]=\"layoutComponentService.logo.width ?? 256\"\n alt=\"logo\"\n class=\"grow-0 mx-16\"\n />\n <div class=\"grow-0 px-16\">\n <span>{{release}}</span>\n </div>\n </div>\n </mat-sidenav>\n <mat-sidenav-content class=\"ml-16 p-4\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n <rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n</div>\n<!--<rxap-window-task-bar-container></rxap-window-task-bar-container>-->\n", styles: [":host .sidenav:not(.mat-drawer-opened){transform:translate(calc(-100% + 64px))!important;visibility:visible!important;box-shadow:inherit!important;transition-property:transform;transition-delay:.25s;display:flex;border-right:solid 1px rgba(0,0,0,.12)}:host .sidenav ::ng-deep .mat-drawer-inner-container::-webkit-scrollbar{display:none}\n"] }]
886
888
  }], ctorParameters: function () { return [{ type: LayoutComponentService }, { type: undefined, decorators: [{
887
889
  type: Inject,
888
890
  args: [RXAP_ENVIRONMENT]
889
- }] }]; }, propDecorators: { sidenav: [{
891
+ }] }, { type: i2$4.IconLoaderService }]; }, propDecorators: { sidenav: [{
890
892
  type: ViewChild,
891
893
  args: [MatSidenav, { static: true }]
892
894
  }] } });
@@ -1002,13 +1004,13 @@ class ToggleWindowSidenavButtonComponent {
1002
1004
  this.openWindowSidenavChange.emit(this.openWindowSidenav);
1003
1005
  }
1004
1006
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ToggleWindowSidenavButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1005
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ToggleWindowSidenavButtonComponent, isStandalone: true, selector: "rxap-toggle-window-sidenav-button", inputs: { openWindowSidenav: "openWindowSidenav" }, outputs: { openWindowSidenavChange: "openWindowSidenavChange" }, host: { classAttribute: "rxap-toggle-window-sidenav-button" }, ngImport: i0, template: "<div class=\"toggle-button\">\n <button (click)=\"toggle()\" mat-icon-button>\n <ng-template [ngIfElse]=\"hide\" [ngIf]=\"!openWindowSidenav\">\n <mat-icon>keyboard_arrow_left</mat-icon>\n </ng-template>\n <ng-template #hide>\n <mat-icon>keyboard_arrow_right</mat-icon>\n </ng-template>\n </button>\n</div>\n", styles: [".toggle-button{position:absolute;top:70px;right:0;z-index:10000;border-radius:15px 0 0 15px;border:1px solid black;background:black}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1007
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ToggleWindowSidenavButtonComponent, isStandalone: true, selector: "rxap-toggle-window-sidenav-button", inputs: { openWindowSidenav: "openWindowSidenav" }, outputs: { openWindowSidenavChange: "openWindowSidenavChange" }, host: { classAttribute: "rxap-toggle-window-sidenav-button" }, ngImport: i0, template: "<div class=\"toggle-button\">\n <button (click)=\"toggle()\" mat-icon-button>\n <ng-template [ngIfElse]=\"hide\" [ngIf]=\"!openWindowSidenav\">\n <mat-icon svgIcon=\"arrow-left-bold\"></mat-icon>\n </ng-template>\n <ng-template #hide>\n <mat-icon svgIcon=\"arrow-right-bold\"></mat-icon>\n </ng-template>\n </button>\n</div>\n", styles: [".toggle-button{position:absolute;top:70px;right:0;z-index:10000;border-radius:15px 0 0 15px;border:1px solid black;background:black}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1006
1008
  }
1007
1009
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ToggleWindowSidenavButtonComponent, decorators: [{
1008
1010
  type: Component,
1009
1011
  args: [{ selector: 'rxap-toggle-window-sidenav-button', changeDetection: ChangeDetectionStrategy.OnPush, host: {
1010
1012
  class: 'rxap-toggle-window-sidenav-button',
1011
- }, standalone: true, imports: [MatButtonModule, NgIf, MatIconModule], template: "<div class=\"toggle-button\">\n <button (click)=\"toggle()\" mat-icon-button>\n <ng-template [ngIfElse]=\"hide\" [ngIf]=\"!openWindowSidenav\">\n <mat-icon>keyboard_arrow_left</mat-icon>\n </ng-template>\n <ng-template #hide>\n <mat-icon>keyboard_arrow_right</mat-icon>\n </ng-template>\n </button>\n</div>\n", styles: [".toggle-button{position:absolute;top:70px;right:0;z-index:10000;border-radius:15px 0 0 15px;border:1px solid black;background:black}\n"] }]
1013
+ }, standalone: true, imports: [MatButtonModule, NgIf, MatIconModule], template: "<div class=\"toggle-button\">\n <button (click)=\"toggle()\" mat-icon-button>\n <ng-template [ngIfElse]=\"hide\" [ngIf]=\"!openWindowSidenav\">\n <mat-icon svgIcon=\"arrow-left-bold\"></mat-icon>\n </ng-template>\n <ng-template #hide>\n <mat-icon svgIcon=\"arrow-right-bold\"></mat-icon>\n </ng-template>\n </button>\n</div>\n", styles: [".toggle-button{position:absolute;top:70px;right:0;z-index:10000;border-radius:15px 0 0 15px;border:1px solid black;background:black}\n"] }]
1012
1014
  }], propDecorators: { openWindowSidenav: [{
1013
1015
  type: Input
1014
1016
  }], openWindowSidenavChange: [{