@rxap/layout 16.0.0-dev.4 → 16.0.0-dev.41

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 (54) hide show
  1. package/CHANGELOG.md +267 -0
  2. package/LICENSE +621 -0
  3. package/LICENSE.md +621 -0
  4. package/README.md +1 -1
  5. package/esm2022/index.mjs +2 -6
  6. package/esm2022/lib/app-url.service.mjs +66 -0
  7. package/esm2022/lib/footer/footer.component.mjs +3 -3
  8. package/esm2022/lib/header/apps-button/apps-button.component.mjs +29 -46
  9. package/esm2022/lib/header/header.component.mjs +44 -66
  10. package/esm2022/lib/header/language-selector/language-selector.component.mjs +13 -72
  11. package/esm2022/lib/header/navigation-progress-bar/navigation-progress-bar.component.mjs +6 -2
  12. package/esm2022/lib/header/reset-button/reset-button.component.mjs +3 -3
  13. package/esm2022/lib/header/settings-button/settings-button.component.mjs +87 -0
  14. package/esm2022/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.mjs +19 -18
  15. package/esm2022/lib/header/sign-out/sign-out.component.mjs +14 -18
  16. package/esm2022/lib/header/user-profile-icon/user-profile-icon.component.mjs +31 -28
  17. package/esm2022/lib/layout/layout.component.mjs +68 -23
  18. package/esm2022/lib/layout/layout.component.service.mjs +54 -20
  19. package/esm2022/lib/navigation/navigation-item/navigation-item.component.mjs +50 -102
  20. package/esm2022/lib/navigation/navigation.component.mjs +26 -31
  21. package/esm2022/lib/sidenav/sidenav.component.mjs +3 -3
  22. package/esm2022/lib/sidenav/version/version.component.mjs +2 -8
  23. package/esm2022/lib/toggle-window-sidenav-button/toggle-window-sidenav-button.component.mjs +3 -3
  24. package/esm2022/lib/types.mjs +1 -1
  25. package/esm2022/lib/window-container-sidenav/window-container-sidenav.component.mjs +6 -7
  26. package/fesm2022/rxap-layout.mjs +710 -722
  27. package/fesm2022/rxap-layout.mjs.map +1 -1
  28. package/index.d.ts +1 -3
  29. package/lib/app-url.service.d.ts +26 -0
  30. package/lib/header/apps-button/apps-button.component.d.ts +12 -20
  31. package/lib/header/header.component.d.ts +9 -19
  32. package/lib/header/language-selector/language-selector.component.d.ts +1 -16
  33. package/lib/header/settings-button/settings-button.component.d.ts +39 -0
  34. package/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.d.ts +6 -3
  35. package/lib/header/sign-out/sign-out.component.d.ts +4 -4
  36. package/lib/header/user-profile-icon/user-profile-icon.component.d.ts +13 -9
  37. package/lib/layout/layout.component.d.ts +21 -5
  38. package/lib/layout/layout.component.service.d.ts +15 -9
  39. package/lib/navigation/navigation-item/navigation-item.component.d.ts +10 -17
  40. package/lib/navigation/navigation.component.d.ts +5 -5
  41. package/lib/types.d.ts +3 -2
  42. package/package.json +93 -41
  43. package/theme.css +1 -0
  44. package/esm2022/lib/layout/layout.component.module.mjs +0 -30
  45. package/esm2022/lib/sidenav-content/sidenav-content.component.mjs +0 -27
  46. package/esm2022/lib/sidenav-content/sidenav-content.component.service.mjs +0 -36
  47. package/lib/layout/layout.component.module.d.ts +0 -10
  48. package/lib/sidenav-content/sidenav-content.component.d.ts +0 -10
  49. package/lib/sidenav-content/sidenav-content.component.service.d.ts +0 -15
  50. package/src/lib/header/apps-button/_apps-button.component.theme.scss +0 -45
  51. package/src/lib/navigation/_navigation.component.theme.scss +0 -33
  52. package/src/lib/navigation/navigation-item/_navigation-item.component.theme.scss +0 -45
  53. package/src/lib/sidenav/_sidenav.component.theme.scss +0 -65
  54. package/src/lib/toggle-window-sidenav-button/_toggle-window-sidenav-button.component.theme.scss +0 -15
@@ -1,42 +1,87 @@
1
- import { ChangeDetectionStrategy, Component, ViewChild, } from '@angular/core';
2
- import { LayoutComponentService } from './layout.component.service';
1
+ import { AsyncPipe, NgIf, NgOptimizedImage, } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, inject, Inject, ViewChild, } from '@angular/core';
3
+ import { FlexLayoutModule } from '@angular/flex-layout';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { MatMenuModule } from '@angular/material/menu';
3
7
  import { MatSidenav, MatSidenavModule, } from '@angular/material/sidenav';
4
- import { AsyncPipe } from '@angular/common';
8
+ import { RouterLink, RouterOutlet, } from '@angular/router';
9
+ import { DetermineReleaseName, RXAP_ENVIRONMENT, } from '@rxap/environment';
10
+ import { IconLoaderService } from '@rxap/icon';
11
+ import { StatusIndicatorComponent } from '@rxap/ngx-status-check';
12
+ import { ThemeService } from '@rxap/ngx-theme';
13
+ import { IsThemeDensity, ThemeDensity, UserSettingsThemeService, } from '@rxap/ngx-user';
5
14
  import { FooterComponent } from '../footer/footer.component';
6
- import { WindowContainerSidenavComponent } from '../window-container-sidenav/window-container-sidenav.component';
7
- import { ToggleWindowSidenavButtonComponent } from '../toggle-window-sidenav-button/toggle-window-sidenav-button.component';
8
- import { SidenavContentComponent } from '../sidenav-content/sidenav-content.component';
9
- import { RouterLink } from '@angular/router';
10
- import { SidenavHeaderDirective } from '../sidenav/sidenav-header.directive';
11
- import { SidenavComponent } from '../sidenav/sidenav.component';
12
15
  import { HeaderComponent } from '../header/header.component';
16
+ import { NavigationComponent } from '../navigation/navigation.component';
17
+ import { LayoutComponentService } from './layout.component.service';
13
18
  import * as i0 from "@angular/core";
14
19
  import * as i1 from "./layout.component.service";
15
- import * as i2 from "@angular/material/sidenav";
20
+ import * as i2 from "@rxap/icon";
21
+ import * as i3 from "@angular/material/sidenav";
22
+ import * as i4 from "@angular/flex-layout/extended";
23
+ import * as i5 from "@angular/material/icon";
24
+ import * as i6 from "@angular/material/button";
16
25
  export class LayoutComponent {
17
- constructor(layoutComponentService) {
26
+ constructor(layoutComponentService, environment, iconLoaderService) {
18
27
  this.layoutComponentService = layoutComponentService;
19
- this.openWindowSidenav = false;
28
+ this.environment = environment;
29
+ this.userSettingsThemeService = inject(UserSettingsThemeService);
30
+ this.themeService = inject(ThemeService);
31
+ iconLoaderService.load();
32
+ this.fixedBottomGap = layoutComponentService.fixedBottomGap;
33
+ this.fixedTopGap = layoutComponentService.fixedTopGap;
34
+ this.pinned = layoutComponentService.pinned;
35
+ this.collapsable = layoutComponentService.collapsable;
36
+ this.opened = layoutComponentService.opened;
37
+ this.sidenavMode = layoutComponentService.mode;
38
+ this.logoSrc = this.layoutComponentService.logo.src ?? 'https://via.placeholder.com/256x128px';
39
+ this.logoWidth = this.layoutComponentService.logo.width ?? 256;
40
+ this.release = DetermineReleaseName(this.environment);
41
+ }
42
+ ngOnDestroy() {
43
+ this.userSettingsThemeService.stopSync();
20
44
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, deps: [{ token: i1.LayoutComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
22
- 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: "<rxap-header [sidenav]=\"sidenav\" class=\"header\"></rxap-header>\n<mat-sidenav-container autosize class=\"container\">\n <mat-sidenav\n [fixedBottomGap]=\"layoutComponentService.fixedBottomGap$ | async\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"layoutComponentService.fixedTopGap$ | async\"\n [mode]=\"(layoutComponentService.mode$ | async) ?? 'side'\"\n [opened]=\"(layoutComponentService.opened$ | async) ?? true\"\n class=\"sidenav\"\n >\n <rxap-sidenav>\n <ng-template rxapSidenavHeader>\n <img\n [routerLink]=\"['/']\"\n [src]=\"layoutComponentService.logo.src\"\n [width]=\"layoutComponentService.logo.width\"\n alt=\"logo\"\n class=\"logo\"\n />\n </ng-template>\n </rxap-sidenav>\n </mat-sidenav>\n <mat-sidenav-content class=\"content\">\n <rxap-sidenav-content [sidenav]=\"sidenav\">\n <ng-content></ng-content>\n <rxap-toggle-window-sidenav-button\n [(openWindowSidenav)]=\"openWindowSidenav\"></rxap-toggle-window-sidenav-button>\n </rxap-sidenav-content>\n </mat-sidenav-content>\n <mat-sidenav\n [fixedBottomGap]=\"layoutComponentService.fixedBottomGap$ | async\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"layoutComponentService.fixedTopGap$ | async\"\n [opened]=\"openWindowSidenav\"\n class=\"window-container-sidenav\"\n mode=\"side\"\n position=\"end\"\n >\n <rxap-window-container-sidenav></rxap-window-container-sidenav>\n </mat-sidenav>\n</mat-sidenav-container>\n<rxap-footer class=\"footer\"></rxap-footer>\n", styles: [".container,.content{height:100%}.sidenav{display:flex;align-items:center;justify-content:center;width:auto}.sidenav .logo{padding:16px}.footer{position:fixed;bottom:0;left:0;right:0;z-index:100}.header{position:fixed;top:0;left:0;right:0;z-index:100}\n"], dependencies: [{ kind: "component", type: HeaderComponent, selector: "rxap-header", inputs: ["sidenav", "color", "settingsMenuPanel"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i2.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i2.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i2.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: SidenavComponent, selector: "rxap-sidenav" }, { kind: "directive", type: SidenavHeaderDirective, selector: "[rxapSidenavHeader]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: SidenavContentComponent, selector: "rxap-sidenav-content", inputs: ["sidenav"] }, { kind: "component", type: ToggleWindowSidenavButtonComponent, selector: "rxap-toggle-window-sidenav-button", inputs: ["openWindowSidenav"], outputs: ["openWindowSidenavChange"] }, { kind: "component", type: WindowContainerSidenavComponent, selector: "rxap-window-container-sidenav" }, { kind: "component", type: FooterComponent, selector: "rxap-footer" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
45
+ ngOnInit() {
46
+ this.userSettingsThemeService.startSync();
47
+ this.userSettingsThemeService.get().then(theme => {
48
+ if (theme.preset && theme.preset !== 'default') {
49
+ this.themeService.setTheme(theme.preset, true);
50
+ }
51
+ if (theme.density && IsThemeDensity(theme.density) && theme.density !== ThemeDensity.Normal) {
52
+ this.themeService.setDensity(theme.density, true);
53
+ }
54
+ if (theme.typography && theme.typography !== 'default') {
55
+ this.themeService.setTypography(theme.typography, true);
56
+ }
57
+ });
58
+ }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, deps: [{ token: i1.LayoutComponentService }, { token: RXAP_ENVIRONMENT }, { token: i2.IconLoaderService }], target: i0.ɵɵFactoryTarget.Component }); }
60
+ 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: "<rxap-status-indicator class=\"fixed bottom-0 right-0 z-10\"></rxap-status-indicator>\n<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n <mat-sidenav-container [ngStyle]=\"{\n 'margin-top.px': fixedTopGap(),\n 'margin-bottom.px': fixedBottomGap(),\n }\" class=\"grow\">\n <mat-sidenav\n #matSidenav=\"matSidenav\"\n [fixedBottomGap]=\"fixedBottomGap()\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"fixedTopGap()\"\n [mode]=\"sidenavMode()\"\n [ngClass]=\"{ collapsable: collapsable() }\"\n class=\"sidenav\"\n [opened]=\"opened()\"\n >\n <div (mouseleave)=\"collapsable() && !pinned() && matSidenav.close()\"\n class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"layoutComponentService.togglePinned()\" *ngIf=\"collapsable()\"\n class=\"pl-2 self-stretch grow-0 flex flex-row justify-between items-center\">\n <span class=\"text-lg\" i18n>Navigation</span>\n <div class=\"flex flex-row items-center justify-center\" style=\"width: 64px\">\n <button mat-icon-button>\n <mat-icon *ngIf=\"!pinned()\">radio_button_unchecked</mat-icon>\n <mat-icon *ngIf=\"pinned()\">radio_button_checked</mat-icon>\n </button>\n </div>\n </div>\n\n <ul\n (mouseenter)=\"collapsable() && !pinned() && matSidenav.open()\"\n class=\"grow self-stretch\"\n root\n rxap-navigation\n >\n </ul>\n\n <img\n [src]=\"logoSrc\"\n [routerLink]=\"['/']\"\n [width]=\"logoWidth\"\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 [ngClass]=\"{ 'ml-16': collapsable() }\" class=\"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.collapsable: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.collapsable ::ng-deep .mat-drawer-inner-container::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "component", type: HeaderComponent, selector: "rxap-header", inputs: ["color"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i3.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i4.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: "directive", type: i4.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.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"] }, { kind: "component", type: StatusIndicatorComponent, selector: "rxap-status-indicator" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
61
  }
24
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, decorators: [{
25
63
  type: Component,
26
64
  args: [{ selector: 'rxap-layout', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
27
65
  HeaderComponent,
28
66
  MatSidenavModule,
29
- SidenavComponent,
30
- SidenavHeaderDirective,
67
+ AsyncPipe,
68
+ FlexLayoutModule,
69
+ MatIconModule,
70
+ MatButtonModule,
31
71
  RouterLink,
32
- SidenavContentComponent,
33
- ToggleWindowSidenavButtonComponent,
34
- WindowContainerSidenavComponent,
72
+ NgIf,
35
73
  FooterComponent,
36
- AsyncPipe,
37
- ], template: "<rxap-header [sidenav]=\"sidenav\" class=\"header\"></rxap-header>\n<mat-sidenav-container autosize class=\"container\">\n <mat-sidenav\n [fixedBottomGap]=\"layoutComponentService.fixedBottomGap$ | async\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"layoutComponentService.fixedTopGap$ | async\"\n [mode]=\"(layoutComponentService.mode$ | async) ?? 'side'\"\n [opened]=\"(layoutComponentService.opened$ | async) ?? true\"\n class=\"sidenav\"\n >\n <rxap-sidenav>\n <ng-template rxapSidenavHeader>\n <img\n [routerLink]=\"['/']\"\n [src]=\"layoutComponentService.logo.src\"\n [width]=\"layoutComponentService.logo.width\"\n alt=\"logo\"\n class=\"logo\"\n />\n </ng-template>\n </rxap-sidenav>\n </mat-sidenav>\n <mat-sidenav-content class=\"content\">\n <rxap-sidenav-content [sidenav]=\"sidenav\">\n <ng-content></ng-content>\n <rxap-toggle-window-sidenav-button\n [(openWindowSidenav)]=\"openWindowSidenav\"></rxap-toggle-window-sidenav-button>\n </rxap-sidenav-content>\n </mat-sidenav-content>\n <mat-sidenav\n [fixedBottomGap]=\"layoutComponentService.fixedBottomGap$ | async\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"layoutComponentService.fixedTopGap$ | async\"\n [opened]=\"openWindowSidenav\"\n class=\"window-container-sidenav\"\n mode=\"side\"\n position=\"end\"\n >\n <rxap-window-container-sidenav></rxap-window-container-sidenav>\n </mat-sidenav>\n</mat-sidenav-container>\n<rxap-footer class=\"footer\"></rxap-footer>\n", styles: [".container,.content{height:100%}.sidenav{display:flex;align-items:center;justify-content:center;width:auto}.sidenav .logo{padding:16px}.footer{position:fixed;bottom:0;left:0;right:0;z-index:100}.header{position:fixed;top:0;left:0;right:0;z-index:100}\n"] }]
38
- }], ctorParameters: function () { return [{ type: i1.LayoutComponentService }]; }, propDecorators: { sidenav: [{
74
+ MatMenuModule,
75
+ NgOptimizedImage,
76
+ NavigationComponent,
77
+ RouterOutlet,
78
+ StatusIndicatorComponent,
79
+ ], template: "<rxap-status-indicator class=\"fixed bottom-0 right-0 z-10\"></rxap-status-indicator>\n<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n <mat-sidenav-container [ngStyle]=\"{\n 'margin-top.px': fixedTopGap(),\n 'margin-bottom.px': fixedBottomGap(),\n }\" class=\"grow\">\n <mat-sidenav\n #matSidenav=\"matSidenav\"\n [fixedBottomGap]=\"fixedBottomGap()\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"fixedTopGap()\"\n [mode]=\"sidenavMode()\"\n [ngClass]=\"{ collapsable: collapsable() }\"\n class=\"sidenav\"\n [opened]=\"opened()\"\n >\n <div (mouseleave)=\"collapsable() && !pinned() && matSidenav.close()\"\n class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"layoutComponentService.togglePinned()\" *ngIf=\"collapsable()\"\n class=\"pl-2 self-stretch grow-0 flex flex-row justify-between items-center\">\n <span class=\"text-lg\" i18n>Navigation</span>\n <div class=\"flex flex-row items-center justify-center\" style=\"width: 64px\">\n <button mat-icon-button>\n <mat-icon *ngIf=\"!pinned()\">radio_button_unchecked</mat-icon>\n <mat-icon *ngIf=\"pinned()\">radio_button_checked</mat-icon>\n </button>\n </div>\n </div>\n\n <ul\n (mouseenter)=\"collapsable() && !pinned() && matSidenav.open()\"\n class=\"grow self-stretch\"\n root\n rxap-navigation\n >\n </ul>\n\n <img\n [src]=\"logoSrc\"\n [routerLink]=\"['/']\"\n [width]=\"logoWidth\"\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 [ngClass]=\"{ 'ml-16': collapsable() }\" class=\"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.collapsable: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.collapsable ::ng-deep .mat-drawer-inner-container::-webkit-scrollbar{display:none}\n"] }]
80
+ }], ctorParameters: function () { return [{ type: i1.LayoutComponentService }, { type: undefined, decorators: [{
81
+ type: Inject,
82
+ args: [RXAP_ENVIRONMENT]
83
+ }] }, { type: i2.IconLoaderService }]; }, propDecorators: { sidenav: [{
39
84
  type: ViewChild,
40
85
  args: [MatSidenav, { static: true }]
41
86
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvbGF5b3V0L2xheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2xheW91dC9zcmMvbGliL2xheW91dC9sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUM1SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBcUI3RCxNQUFNLE9BQU8sZUFBZTtJQU0xQixZQUNrQixzQkFBOEM7UUFBOUMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUx6RCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFPakMsQ0FBQzs4R0FUVSxlQUFlO2tHQUFmLGVBQWUsZ0hBSWYsVUFBVSw4REMzQ3ZCLDBqREEwQ0Esc1REZkksZUFBZSwwR0FDZixnQkFBZ0IsMllBQ2hCLGdCQUFnQix5REFDaEIsc0JBQXNCLGdFQUN0QixVQUFVLDROQUNWLHVCQUF1QixzRkFDdkIsa0NBQWtDLG1KQUNsQywrQkFBK0IsMEVBQy9CLGVBQWUsbURBQ2YsU0FBUzs7MkZBR0EsZUFBZTtrQkFuQjNCLFNBQVM7K0JBQ0UsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLFVBQVU7d0JBQ1YsdUJBQXVCO3dCQUN2QixrQ0FBa0M7d0JBQ2xDLCtCQUErQjt3QkFDL0IsZUFBZTt3QkFDZixTQUFTO3FCQUNWOzZHQU0rQyxPQUFPO3NCQUF0RCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF5b3V0Q29tcG9uZW50U2VydmljZSB9IGZyb20gJy4vbGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE1hdFNpZGVuYXYsXG4gIE1hdFNpZGVuYXZNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFdpbmRvd0NvbnRhaW5lclNpZGVuYXZDb21wb25lbnQgfSBmcm9tICcuLi93aW5kb3ctY29udGFpbmVyLXNpZGVuYXYvd2luZG93LWNvbnRhaW5lci1zaWRlbmF2LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVXaW5kb3dTaWRlbmF2QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9nZ2xlLXdpbmRvdy1zaWRlbmF2LWJ1dHRvbi90b2dnbGUtd2luZG93LXNpZGVuYXYtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaWRlbmF2Q29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL3NpZGVuYXYtY29udGVudC9zaWRlbmF2LWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2lkZW5hdkhlYWRlckRpcmVjdGl2ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi1oZWFkZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNpZGVuYXZDb21wb25lbnQgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuY29tcG9uZW50JztcbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnhhcC1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL2xheW91dC5jb21wb25lbnQuc2NzcycgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBIZWFkZXJDb21wb25lbnQsXG4gICAgTWF0U2lkZW5hdk1vZHVsZSxcbiAgICBTaWRlbmF2Q29tcG9uZW50LFxuICAgIFNpZGVuYXZIZWFkZXJEaXJlY3RpdmUsXG4gICAgUm91dGVyTGluayxcbiAgICBTaWRlbmF2Q29udGVudENvbXBvbmVudCxcbiAgICBUb2dnbGVXaW5kb3dTaWRlbmF2QnV0dG9uQ29tcG9uZW50LFxuICAgIFdpbmRvd0NvbnRhaW5lclNpZGVuYXZDb21wb25lbnQsXG4gICAgRm9vdGVyQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGF5b3V0Q29tcG9uZW50IHtcblxuICBwdWJsaWMgb3BlbldpbmRvd1NpZGVuYXYgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKE1hdFNpZGVuYXYsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzaWRlbmF2ITogTWF0U2lkZW5hdjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbGF5b3V0Q29tcG9uZW50U2VydmljZTogTGF5b3V0Q29tcG9uZW50U2VydmljZSxcbiAgKSB7XG4gIH1cblxufVxuIiwiPHJ4YXAtaGVhZGVyIFtzaWRlbmF2XT1cInNpZGVuYXZcIiBjbGFzcz1cImhlYWRlclwiPjwvcnhhcC1oZWFkZXI+XG48bWF0LXNpZGVuYXYtY29udGFpbmVyIGF1dG9zaXplIGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxtYXQtc2lkZW5hdlxuICAgIFtmaXhlZEJvdHRvbUdhcF09XCJsYXlvdXRDb21wb25lbnRTZXJ2aWNlLmZpeGVkQm90dG9tR2FwJCB8IGFzeW5jXCJcbiAgICBbZml4ZWRJblZpZXdwb3J0XT1cInRydWVcIlxuICAgIFtmaXhlZFRvcEdhcF09XCJsYXlvdXRDb21wb25lbnRTZXJ2aWNlLmZpeGVkVG9wR2FwJCB8IGFzeW5jXCJcbiAgICBbbW9kZV09XCIobGF5b3V0Q29tcG9uZW50U2VydmljZS5tb2RlJCB8IGFzeW5jKSA/PyAnc2lkZSdcIlxuICAgIFtvcGVuZWRdPVwiKGxheW91dENvbXBvbmVudFNlcnZpY2Uub3BlbmVkJCB8IGFzeW5jKSA/PyB0cnVlXCJcbiAgICBjbGFzcz1cInNpZGVuYXZcIlxuICA+XG4gICAgPHJ4YXAtc2lkZW5hdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSByeGFwU2lkZW5hdkhlYWRlcj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLyddXCJcbiAgICAgICAgICBbc3JjXT1cImxheW91dENvbXBvbmVudFNlcnZpY2UubG9nby5zcmNcIlxuICAgICAgICAgIFt3aWR0aF09XCJsYXlvdXRDb21wb25lbnRTZXJ2aWNlLmxvZ28ud2lkdGhcIlxuICAgICAgICAgIGFsdD1cImxvZ29cIlxuICAgICAgICAgIGNsYXNzPVwibG9nb1wiXG4gICAgICAgIC8+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcnhhcC1zaWRlbmF2PlxuICA8L21hdC1zaWRlbmF2PlxuICA8bWF0LXNpZGVuYXYtY29udGVudCBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICA8cnhhcC1zaWRlbmF2LWNvbnRlbnQgW3NpZGVuYXZdPVwic2lkZW5hdlwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPHJ4YXAtdG9nZ2xlLXdpbmRvdy1zaWRlbmF2LWJ1dHRvblxuICAgICAgICBbKG9wZW5XaW5kb3dTaWRlbmF2KV09XCJvcGVuV2luZG93U2lkZW5hdlwiPjwvcnhhcC10b2dnbGUtd2luZG93LXNpZGVuYXYtYnV0dG9uPlxuICAgIDwvcnhhcC1zaWRlbmF2LWNvbnRlbnQ+XG4gIDwvbWF0LXNpZGVuYXYtY29udGVudD5cbiAgPG1hdC1zaWRlbmF2XG4gICAgW2ZpeGVkQm90dG9tR2FwXT1cImxheW91dENvbXBvbmVudFNlcnZpY2UuZml4ZWRCb3R0b21HYXAkIHwgYXN5bmNcIlxuICAgIFtmaXhlZEluVmlld3BvcnRdPVwidHJ1ZVwiXG4gICAgW2ZpeGVkVG9wR2FwXT1cImxheW91dENvbXBvbmVudFNlcnZpY2UuZml4ZWRUb3BHYXAkIHwgYXN5bmNcIlxuICAgIFtvcGVuZWRdPVwib3BlbldpbmRvd1NpZGVuYXZcIlxuICAgIGNsYXNzPVwid2luZG93LWNvbnRhaW5lci1zaWRlbmF2XCJcbiAgICBtb2RlPVwic2lkZVwiXG4gICAgcG9zaXRpb249XCJlbmRcIlxuICA+XG4gICAgPHJ4YXAtd2luZG93LWNvbnRhaW5lci1zaWRlbmF2PjwvcnhhcC13aW5kb3ctY29udGFpbmVyLXNpZGVuYXY+XG4gIDwvbWF0LXNpZGVuYXY+XG48L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cbjxyeGFwLWZvb3RlciBjbGFzcz1cImZvb3RlclwiPjwvcnhhcC1mb290ZXI+XG4iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvbGF5b3V0L2xheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2xheW91dC9zcmMvbGliL2xheW91dC9sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxJQUFJLEVBQ0osZ0JBQWdCLEdBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFJTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUVMLFVBQVUsRUFDVixnQkFBZ0IsR0FDakIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsVUFBVSxFQUNWLFlBQVksR0FDYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxvQkFBb0IsRUFFcEIsZ0JBQWdCLEdBQ2pCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsY0FB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Q2YsVUFBVSw0TkFDVixJQUFJLDZGQUNKLGVBQWUsdURBQ2YsYUFBYSwrQkFFYixtQkFBbUIsb0dBQ25CLFlBQVksMkpBQ1osd0JBQXdCOzsyRkFHZixlQUFlO2tCQXZCM0IsU0FBUzsrQkFDRSxhQUFhLG1CQUdOLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixlQUFlO3dCQUNmLFVBQVU7d0JBQ1YsSUFBSTt3QkFDSixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osd0JBQXdCO3FCQUN6Qjs7MEJBcUJFLE1BQU07MkJBQUMsZ0JBQWdCOzRFQVBzQixPQUFPO3NCQUF0RCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBc3luY1BpcGUsXG4gIE5nSWYsXG4gIE5nT3B0aW1pemVkSW1hZ2UsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBpbmplY3QsXG4gIEluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpZ25hbCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHtcbiAgTWF0RHJhd2VyTW9kZSxcbiAgTWF0U2lkZW5hdixcbiAgTWF0U2lkZW5hdk1vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQge1xuICBSb3V0ZXJMaW5rLFxuICBSb3V0ZXJPdXRsZXQsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBEZXRlcm1pbmVSZWxlYXNlTmFtZSxcbiAgRW52aXJvbm1lbnQsXG4gIFJYQVBfRU5WSVJPTk1FTlQsXG59IGZyb20gJ0ByeGFwL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEljb25Mb2FkZXJTZXJ2aWNlIH0gZnJvbSAnQHJ4YXAvaWNvbic7XG5pbXBvcnQgeyBTdGF0dXNJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICdAcnhhcC9uZ3gtc3RhdHVzLWNoZWNrJztcbmltcG9ydCB7IFRoZW1lU2VydmljZSB9IGZyb20gJ0ByeGFwL25neC10aGVtZSc7XG5pbXBvcnQge1xuICBJc1RoZW1lRGVuc2l0eSxcbiAgVGhlbWVEZW5zaXR5LFxuICBVc2VyU2V0dGluZ3NUaGVtZVNlcnZpY2UsXG59IGZyb20gJ0ByeGFwL25neC11c2VyJztcbmltcG9ydCB7IEZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE5hdmlnYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uL25hdmlnYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IExheW91dENvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuL2xheW91dC5jb21wb25lbnQuc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnhhcC1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL2xheW91dC5jb21wb25lbnQuc2NzcycgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBIZWFkZXJDb21wb25lbnQsXG4gICAgTWF0U2lkZW5hdk1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgRmxleExheW91dE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBSb3V0ZXJMaW5rLFxuICAgIE5nSWYsXG4gICAgRm9vdGVyQ29tcG9uZW50LFxuICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgTmdPcHRpbWl6ZWRJbWFnZSxcbiAgICBOYXZpZ2F0aW9uQ29tcG9uZW50LFxuICAgIFJvdXRlck91dGxldCxcbiAgICBTdGF0dXNJbmRpY2F0b3JDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIExheW91dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2lkZW5hdk1vZGU6IFNpZ25hbDxNYXREcmF3ZXJNb2RlPjtcbiAgcHVibGljIHJlYWRvbmx5IGZpeGVkQm90dG9tR2FwOiBTaWduYWw8bnVtYmVyPjtcbiAgcHVibGljIHJlYWRvbmx5IGZpeGVkVG9wR2FwOiBTaWduYWw8bnVtYmVyPjtcbiAgcHVibGljIHJlYWRvbmx5IHBpbm5lZDogU2lnbmFsPGJvb2xlYW4+O1xuICBwdWJsaWMgcmVhZG9ubHkgY29sbGFwc2FibGU6IFNpZ25hbDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IGxvZ29TcmM6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGxvZ29XaWR0aDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVsZWFzZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlbmVkOiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgQFZpZXdDaGlsZChNYXRTaWRlbmF2LCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc2lkZW5hdiE6IE1hdFNpZGVuYXY7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1c2VyU2V0dGluZ3NUaGVtZVNlcnZpY2UgPSBpbmplY3QoVXNlclNldHRpbmdzVGhlbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aGVtZVNlcnZpY2UgPSBpbmplY3QoVGhlbWVTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbGF5b3V0Q29tcG9uZW50U2VydmljZTogTGF5b3V0Q29tcG9uZW50U2VydmljZSxcbiAgICBASW5qZWN0KFJYQVBfRU5WSVJPTk1FTlQpXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgaWNvbkxvYWRlclNlcnZpY2U6IEljb25Mb2FkZXJTZXJ2aWNlLFxuICApIHtcbiAgICBpY29uTG9hZGVyU2VydmljZS5sb2FkKCk7XG4gICAgdGhpcy5maXhlZEJvdHRvbUdhcCA9IGxheW91dENvbXBvbmVudFNlcnZpY2UuZml4ZWRCb3R0b21HYXA7XG4gICAgdGhpcy5maXhlZFRvcEdhcCA9IGxheW91dENvbXBvbmVudFNlcnZpY2UuZml4ZWRUb3BHYXA7XG4gICAgdGhpcy5waW5uZWQgPSBsYXlvdXRDb21wb25lbnRTZXJ2aWNlLnBpbm5lZDtcbiAgICB0aGlzLmNvbGxhcHNhYmxlID0gbGF5b3V0Q29tcG9uZW50U2VydmljZS5jb2xsYXBzYWJsZTtcbiAgICB0aGlzLm9wZW5lZCA9IGxheW91dENvbXBvbmVudFNlcnZpY2Uub3BlbmVkO1xuICAgIHRoaXMuc2lkZW5hdk1vZGUgPSBsYXlvdXRDb21wb25lbnRTZXJ2aWNlLm1vZGU7XG4gICAgdGhpcy5sb2dvU3JjID0gdGhpcy5sYXlvdXRDb21wb25lbnRTZXJ2aWNlLmxvZ28uc3JjID8/ICdodHRwczovL3ZpYS5wbGFjZWhvbGRlci5jb20vMjU2eDEyOHB4JztcbiAgICB0aGlzLmxvZ29XaWR0aCA9IHRoaXMubGF5b3V0Q29tcG9uZW50U2VydmljZS5sb2dvLndpZHRoID8/IDI1NjtcbiAgICB0aGlzLnJlbGVhc2UgPSBEZXRlcm1pbmVSZWxlYXNlTmFtZSh0aGlzLmVudmlyb25tZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudXNlclNldHRpbmdzVGhlbWVTZXJ2aWNlLnN0b3BTeW5jKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVzZXJTZXR0aW5nc1RoZW1lU2VydmljZS5zdGFydFN5bmMoKTtcbiAgICB0aGlzLnVzZXJTZXR0aW5nc1RoZW1lU2VydmljZS5nZXQoKS50aGVuKHRoZW1lID0+IHtcbiAgICAgIGlmICh0aGVtZS5wcmVzZXQgJiYgdGhlbWUucHJlc2V0ICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgdGhpcy50aGVtZVNlcnZpY2Uuc2V0VGhlbWUodGhlbWUucHJlc2V0LCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGVtZS5kZW5zaXR5ICYmIElzVGhlbWVEZW5zaXR5KHRoZW1lLmRlbnNpdHkpICYmIHRoZW1lLmRlbnNpdHkgIT09IFRoZW1lRGVuc2l0eS5Ob3JtYWwpIHtcbiAgICAgICAgdGhpcy50aGVtZVNlcnZpY2Uuc2V0RGVuc2l0eSh0aGVtZS5kZW5zaXR5LCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGVtZS50eXBvZ3JhcGh5ICYmIHRoZW1lLnR5cG9ncmFwaHkgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICB0aGlzLnRoZW1lU2VydmljZS5zZXRUeXBvZ3JhcGh5KHRoZW1lLnR5cG9ncmFwaHksIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cbiIsIjxyeGFwLXN0YXR1cy1pbmRpY2F0b3IgY2xhc3M9XCJmaXhlZCBib3R0b20tMCByaWdodC0wIHotMTBcIj48L3J4YXAtc3RhdHVzLWluZGljYXRvcj5cbjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGgtc2NyZWVuIGp1c3RpZnktYmV0d2VlblwiPlxuICA8cnhhcC1oZWFkZXIgY2xhc3M9XCJ6LTEwIHctZnVsbCBmaXhlZCB0b3AtMFwiPjwvcnhhcC1oZWFkZXI+XG4gIDxtYXQtc2lkZW5hdi1jb250YWluZXIgW25nU3R5bGVdPVwie1xuICAgICdtYXJnaW4tdG9wLnB4JzogZml4ZWRUb3BHYXAoKSxcbiAgICAnbWFyZ2luLWJvdHRvbS5weCc6IGZpeGVkQm90dG9tR2FwKCksXG4gIH1cIiBjbGFzcz1cImdyb3dcIj5cbiAgICA8bWF0LXNpZGVuYXZcbiAgICAgICNtYXRTaWRlbmF2PVwibWF0U2lkZW5hdlwiXG4gICAgICBbZml4ZWRCb3R0b21HYXBdPVwiZml4ZWRCb3R0b21HYXAoKVwiXG4gICAgICBbZml4ZWRJblZpZXdwb3J0XT1cInRydWVcIlxuICAgICAgW2ZpeGVkVG9wR2FwXT1cImZpeGVkVG9wR2FwKClcIlxuICAgICAgW21vZGVdPVwic2lkZW5hdk1vZGUoKVwiXG4gICAgICBbbmdDbGFzc109XCJ7IGNvbGxhcHNhYmxlOiBjb2xsYXBzYWJsZSgpIH1cIlxuICAgICAgY2xhc3M9XCJzaWRlbmF2XCJcbiAgICAgIFtvcGVuZWRdPVwib3BlbmVkKClcIlxuICAgID5cbiAgICAgIDxkaXYgKG1vdXNlbGVhdmUpPVwiY29sbGFwc2FibGUoKSAmJiAhcGlubmVkKCkgJiYgbWF0U2lkZW5hdi5jbG9zZSgpXCJcbiAgICAgICAgICAgY2xhc3M9XCJoLWZ1bGwgcHktMiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAteS01IGp1c3RpZnktaXRlbXMtc3RyZXRjaFwiPlxuXG4gICAgICAgIDxkaXYgKGNsaWNrKT1cImxheW91dENvbXBvbmVudFNlcnZpY2UudG9nZ2xlUGlubmVkKClcIiAqbmdJZj1cImNvbGxhcHNhYmxlKClcIlxuICAgICAgICAgICAgIGNsYXNzPVwicGwtMiBzZWxmLXN0cmV0Y2ggZ3Jvdy0wIGZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sZ1wiIGkxOG4+TmF2aWdhdGlvbjwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiA2NHB4XCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIXBpbm5lZCgpXCI+cmFkaW9fYnV0dG9uX3VuY2hlY2tlZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInBpbm5lZCgpXCI+cmFkaW9fYnV0dG9uX2NoZWNrZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDx1bFxuICAgICAgICAgIChtb3VzZWVudGVyKT1cImNvbGxhcHNhYmxlKCkgJiYgIXBpbm5lZCgpICYmIG1hdFNpZGVuYXYub3BlbigpXCJcbiAgICAgICAgICBjbGFzcz1cImdyb3cgc2VsZi1zdHJldGNoXCJcbiAgICAgICAgICByb290XG4gICAgICAgICAgcnhhcC1uYXZpZ2F0aW9uXG4gICAgICAgID5cbiAgICAgICAgPC91bD5cblxuICAgICAgICA8aW1nXG4gICAgICAgICAgW3NyY109XCJsb2dvU3JjXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJbJy8nXVwiXG4gICAgICAgICAgW3dpZHRoXT1cImxvZ29XaWR0aFwiXG4gICAgICAgICAgYWx0PVwibG9nb1wiXG4gICAgICAgICAgY2xhc3M9XCJncm93LTAgbXgtMTZcIlxuICAgICAgICAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3Jvdy0wIHB4LTE2XCI+XG4gICAgICAgICAgPHNwYW4+e3tyZWxlYXNlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtc2lkZW5hdj5cbiAgICA8bWF0LXNpZGVuYXYtY29udGVudCBbbmdDbGFzc109XCJ7ICdtbC0xNic6IGNvbGxhcHNhYmxlKCkgfVwiIGNsYXNzPVwicC00XCI+XG4gICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgPC9tYXQtc2lkZW5hdi1jb250ZW50PlxuICA8L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cbiAgPHJ4YXAtZm9vdGVyIGNsYXNzPVwiei0xMCB3LWZ1bGwgZml4ZWQgYm90dG9tLTBcIj48L3J4YXAtZm9vdGVyPlxuPC9kaXY+XG48IS0tPHJ4YXAtd2luZG93LXRhc2stYmFyLWNvbnRhaW5lcj48L3J4YXAtd2luZG93LXRhc2stYmFyLWNvbnRhaW5lcj4tLT5cbiJdfQ==
@@ -1,31 +1,65 @@
1
- import { Inject, Injectable, Optional, } from '@angular/core';
2
- import { BehaviorSubject, } from 'rxjs';
3
- import { map, tap, } from 'rxjs/operators';
1
+ import { MediaMatcher } from '@angular/cdk/layout';
2
+ import { computed, effect, Inject, Injectable, Optional, signal, } from '@angular/core';
3
+ import { toSignal } from '@angular/core/rxjs-interop';
4
+ import { ConfigService } from '@rxap/config';
5
+ import { ObserveCurrentThemeDensity } from '@rxap/ngx-theme';
4
6
  import { FooterService, HeaderService, } from '@rxap/services';
5
7
  import { RXAP_LOGO_CONFIG } from '../tokens';
6
- import { ConfigService } from '@rxap/config';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@rxap/services";
9
- import * as i2 from "@rxap/config";
10
+ import * as i2 from "@angular/cdk/layout";
11
+ import * as i3 from "@rxap/config";
10
12
  export class LayoutComponentService {
11
- constructor(footerComponentService, headerComponentService, logoConfig = null, config) {
13
+ constructor(footerComponentService, headerComponentService, logoConfig = null, config, mediaMatcher) {
12
14
  this.footerComponentService = footerComponentService;
13
15
  this.headerComponentService = headerComponentService;
14
16
  this.config = config;
15
- this.opened$ = new BehaviorSubject(true);
16
- this.mode$ = new BehaviorSubject('side');
17
- this.fixedTopGap$ = new BehaviorSubject(64);
18
- this.mode$.next(this.config.get('navigation.mode', this.mode$.value));
19
- this.opened$.next(this.config.get('navigation.open', this.opened$.value));
20
- this.fixedBottomGap$ = this.footerComponentService.portalCount$.pipe(map(count => count * 64));
21
- this.fixedTopGap$.next(this.headerComponentService.countComponent * 64);
22
- this.headerComponentService.update$.pipe(tap(() => this.fixedTopGap$.next(this.headerComponentService.countComponent * 64))).subscribe();
17
+ this.currentThemeDensity = toSignal(ObserveCurrentThemeDensity());
18
+ const mobileQuery = mediaMatcher.matchMedia('(max-width: 959px)');
19
+ const mobile = mobileQuery.matches;
20
+ const initialCollapsable = this.config.get('navigation.collapsable', true);
21
+ const collapsable = initialCollapsable && !mobile;
22
+ const pinned = this.config.get('navigation.pinned', false);
23
+ const mode = this.config.get('navigation.mode', pinned || !collapsable ? 'side' : 'over');
24
+ const opened = this.config.get('navigation.opened', (!collapsable || pinned) && !mobile);
25
+ this.opened = signal(opened);
26
+ this.mode = signal(mode);
27
+ this.pinned = signal(pinned);
28
+ this.collapsable = signal(collapsable);
29
+ this.fixedBottomGap = computed(() => this.footerComponentService.portalCount() * (64 + (this.currentThemeDensity() ?? 0) * 4));
30
+ this.fixedTopGap = computed(() => this.headerComponentService.componentCount() * (64 + (this.currentThemeDensity() ?? 0) * 4));
23
31
  this.logo = logoConfig ?? {
24
- src: '/assets/logo.png',
25
- width: '192',
32
+ src: 'assets/logo.png',
33
+ width: 192,
26
34
  };
35
+ mobileQuery.addEventListener('change', (event) => {
36
+ if (initialCollapsable) {
37
+ this.collapsable.set(!event.matches);
38
+ if (this.collapsable()) {
39
+ if (!this.pinned()) {
40
+ this.opened.set(false);
41
+ }
42
+ }
43
+ }
44
+ });
45
+ effect(() => {
46
+ if (this.pinned()) {
47
+ this.mode.set('side');
48
+ this.opened.set(true);
49
+ }
50
+ else {
51
+ this.mode.set('over');
52
+ this.opened.set(false);
53
+ }
54
+ }, { allowSignalWrites: true });
55
+ }
56
+ toggleOpened() {
57
+ this.opened.set(!this.opened());
58
+ }
59
+ togglePinned() {
60
+ this.pinned.set(!this.pinned());
27
61
  }
28
- 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 }); }
62
+ 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 }, { token: i2.MediaMatcher }], target: i0.ɵɵFactoryTarget.Injectable }); }
29
63
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, providedIn: 'root' }); }
30
64
  }
31
65
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, decorators: [{
@@ -36,8 +70,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
36
70
  }, {
37
71
  type: Inject,
38
72
  args: [RXAP_LOGO_CONFIG]
39
- }] }, { type: i2.ConfigService, decorators: [{
73
+ }] }, { type: i3.ConfigService, decorators: [{
40
74
  type: Inject,
41
75
  args: [ConfigService]
42
- }] }]; } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxHQUVoQixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxHQUFHLEVBQ0gsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7OztBQUk3QyxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQ2tCLHNCQUFxQyxFQUNyQyxzQkFBcUMsRUFDZixhQUFnQyxJQUFJLEVBRXpELE1BQXFCO1FBSnRCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBZTtRQUNyQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQWU7UUFHcEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVhqQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDN0MsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFnQixNQUFNLENBQUMsQ0FBQztRQUVuRCxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBVXBELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUNuRixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLElBQUk7WUFDeEIsR0FBRyxFQUFFLGtCQUFrQjtZQUN2QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7SUFDSixDQUFDOzhHQTFCVSxzQkFBc0IsNEVBV1gsZ0JBQWdCLDZCQUM1QixhQUFhO2tIQVpaLHNCQUFzQixjQURULE1BQU07OzJGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFZN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUNuQyxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBtYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRm9vdGVyU2VydmljZSxcbiAgSGVhZGVyU2VydmljZSxcbn0gZnJvbSAnQHJ4YXAvc2VydmljZXMnO1xuaW1wb3J0IHsgUlhBUF9MT0dPX0NPTkZJRyB9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBMb2dvQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0ByeGFwL2NvbmZpZyc7XG5pbXBvcnQgeyBNYXREcmF3ZXJNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTGF5b3V0Q29tcG9uZW50U2VydmljZSB7XG5cbiAgcHVibGljIG9wZW5lZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgbW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hdERyYXdlck1vZGU+KCdzaWRlJyk7XG4gIHB1YmxpYyBmaXhlZEJvdHRvbUdhcCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgcHVibGljIGZpeGVkVG9wR2FwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPig2NCk7XG4gIHB1YmxpYyBsb2dvOiBMb2dvQ29uZmlnO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9vdGVyQ29tcG9uZW50U2VydmljZTogRm9vdGVyU2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVyQ29tcG9uZW50U2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJYQVBfTE9HT19DT05GSUcpIGxvZ29Db25maWc6IExvZ29Db25maWcgfCBudWxsID0gbnVsbCxcbiAgICBASW5qZWN0KENvbmZpZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICkge1xuICAgIHRoaXMubW9kZSQubmV4dCh0aGlzLmNvbmZpZy5nZXQoJ25hdmlnYXRpb24ubW9kZScsIHRoaXMubW9kZSQudmFsdWUpKTtcbiAgICB0aGlzLm9wZW5lZCQubmV4dCh0aGlzLmNvbmZpZy5nZXQoJ25hdmlnYXRpb24ub3BlbicsIHRoaXMub3BlbmVkJC52YWx1ZSkpO1xuICAgIHRoaXMuZml4ZWRCb3R0b21HYXAkID0gdGhpcy5mb290ZXJDb21wb25lbnRTZXJ2aWNlLnBvcnRhbENvdW50JC5waXBlKG1hcChjb3VudCA9PiBjb3VudCAqIDY0KSk7XG4gICAgdGhpcy5maXhlZFRvcEdhcCQubmV4dCh0aGlzLmhlYWRlckNvbXBvbmVudFNlcnZpY2UuY291bnRDb21wb25lbnQgKiA2NCk7XG4gICAgdGhpcy5oZWFkZXJDb21wb25lbnRTZXJ2aWNlLnVwZGF0ZSQucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmZpeGVkVG9wR2FwJC5uZXh0KHRoaXMuaGVhZGVyQ29tcG9uZW50U2VydmljZS5jb3VudENvbXBvbmVudCAqIDY0KSksXG4gICAgKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvZ28gPSBsb2dvQ29uZmlnID8/IHtcbiAgICAgIHNyYzogJy9hc3NldHMvbG9nby5wbmcnLFxuICAgICAgd2lkdGg6ICcxOTInLFxuICAgIH07XG4gIH1cblxufVxuIl19
76
+ }] }, { type: i2.MediaMatcher }]; } });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBSTdDLE1BQU0sT0FBTyxzQkFBc0I7SUFjakMsWUFDa0Isc0JBQXFDLEVBQ3JDLHNCQUFxQyxFQUNmLGFBQWdDLElBQUksRUFFekQsTUFBcUIsRUFDdEMsWUFBMEI7UUFMViwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQWU7UUFDckMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFlO1FBR3BDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFSdkIsd0JBQW1CLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQztRQVc1RSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxNQUFNLGtCQUFr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QyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs4R0E3RVUsc0JBQXNCLDRFQWlCWCxnQkFBZ0IsNkJBQzVCLGFBQWE7a0hBbEJaLHNCQUFzQixjQURULE1BQU07OzJGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFrQjdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDbkMsTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVkaWFNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge1xuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIE9wdGlvbmFsLFxuICBzaWduYWwsXG4gIFNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBNYXREcmF3ZXJNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHJ4YXAvY29uZmlnJztcbmltcG9ydCB7IE9ic2VydmVDdXJyZW50VGhlbWVEZW5zaXR5IH0gZnJvbSAnQHJ4YXAvbmd4LXRoZW1lJztcbmltcG9ydCB7XG4gIEZvb3RlclNlcnZpY2UsXG4gIEhlYWRlclNlcnZpY2UsXG59IGZyb20gJ0ByeGFwL3NlcnZpY2VzJztcbmltcG9ydCB7IFJYQVBfTE9HT19DT05GSUcgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgTG9nb0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMYXlvdXRDb21wb25lbnRTZXJ2aWNlIHtcblxuICBwdWJsaWMgbG9nbzogTG9nb0NvbmZpZztcblxuICBwdWJsaWMgcmVhZG9ubHkgb3BlbmVkOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IG1vZGU6IFdyaXRhYmxlU2lnbmFsPE1hdERyYXdlck1vZGU+O1xuICBwdWJsaWMgcmVhZG9ubHkgcGlubmVkOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IGNvbGxhcHNhYmxlOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IGZpeGVkQm90dG9tR2FwOiBTaWduYWw8bnVtYmVyPjtcbiAgcHVibGljIHJlYWRvbmx5IGZpeGVkVG9wR2FwOiBTaWduYWw8bnVtYmVyPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRUaGVtZURlbnNpdHkgPSB0b1NpZ25hbChPYnNlcnZlQ3VycmVudFRoZW1lRGVuc2l0eSgpKTtcblxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9vdGVyQ29tcG9uZW50U2VydmljZTogRm9vdGVyU2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVyQ29tcG9uZW50U2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJYQVBfTE9HT19DT05GSUcpIGxvZ29Db25maWc6IExvZ29Db25maWcgfCBudWxsID0gbnVsbCxcbiAgICBASW5qZWN0KENvbmZpZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgbWVkaWFNYXRjaGVyOiBNZWRpYU1hdGNoZXIsXG4gICkge1xuICAgIGNvbnN0IG1vYmlsZVF1ZXJ5ID0gbWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDk1OXB4KScpO1xuICAgIGNvbnN0IG1vYmlsZSA9IG1vYmlsZVF1ZXJ5Lm1hdGNoZXM7XG4gICAgY29uc3QgaW5pdGlhbENvbGxhcHNhYmxlID0gdGhpcy5jb25maWcuZ2V0KCduYXZpZ2F0aW9uLmNvbGxhcHNhYmxlJywgdHJ1ZSk7XG4gICAgY29uc3QgY29sbGFwc2FibGUgPSBpbml0aWFsQ29sbGFwc2FibGUgJiYgIW1vYmlsZTtcbiAgICBjb25zdCBwaW5uZWQgPSB0aGlzLmNvbmZpZy5nZXQoJ25hdmlnYXRpb24ucGlubmVkJywgZmFsc2UpO1xuICAgIGNvbnN0IG1vZGUgPSB0aGlzLmNvbmZpZy5nZXQoJ25hdmlnYXRpb24ubW9kZScsIHBpbm5lZCB8fCAhY29sbGFwc2FibGUgPyAnc2lkZScgOiAnb3ZlcicpO1xuICAgIGNvbnN0IG9wZW5lZCA9IHRoaXMuY29uZmlnLmdldCgnbmF2aWdhdGlvbi5vcGVuZWQnLCAoIWNvbGxhcHNhYmxlIHx8IHBpbm5lZCkgJiYgIW1vYmlsZSk7XG5cbiAgICB0aGlzLm9wZW5lZCA9IHNpZ25hbChvcGVuZWQpO1xuICAgIHRoaXMubW9kZSA9IHNpZ25hbChtb2RlKTtcbiAgICB0aGlzLnBpbm5lZCA9IHNpZ25hbChwaW5uZWQpO1xuICAgIHRoaXMuY29sbGFwc2FibGUgPSBzaWduYWwoY29sbGFwc2FibGUpO1xuXG4gICAgdGhpcy5maXhlZEJvdHRvbUdhcCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZm9vdGVyQ29tcG9uZW50U2VydmljZS5wb3J0YWxDb3VudCgpICogKFxuICAgICAgNjQgKyAoXG4gICAgICAgICAgIHRoaXMuY3VycmVudFRoZW1lRGVuc2l0eSgpID8/IDBcbiAgICAgICAgICkgKiA0XG4gICAgKSk7XG4gICAgdGhpcy5maXhlZFRvcEdhcCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaGVhZGVyQ29tcG9uZW50U2VydmljZS5jb21wb25lbnRDb3VudCgpICogKFxuICAgICAgNjQgKyAoXG4gICAgICAgICAgIHRoaXMuY3VycmVudFRoZW1lRGVuc2l0eSgpID8/IDBcbiAgICAgICAgICkgKiA0XG4gICAgKSk7XG5cbiAgICB0aGlzLmxvZ28gPSBsb2dvQ29uZmlnID8/IHtcbiAgICAgIHNyYzogJ2Fzc2V0cy9sb2dvLnBuZycsXG4gICAgICB3aWR0aDogMTkyLFxuICAgIH07XG4gICAgbW9iaWxlUXVlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoaW5pdGlhbENvbGxhcHNhYmxlKSB7XG4gICAgICAgIHRoaXMuY29sbGFwc2FibGUuc2V0KCFldmVudC5tYXRjaGVzKTtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2FibGUoKSkge1xuICAgICAgICAgIGlmICghdGhpcy5waW5uZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucGlubmVkKCkpIHtcbiAgICAgICAgdGhpcy5tb2RlLnNldCgnc2lkZScpO1xuICAgICAgICB0aGlzLm9wZW5lZC5zZXQodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGUuc2V0KCdvdmVyJyk7XG4gICAgICAgIHRoaXMub3BlbmVkLnNldChmYWxzZSk7XG4gICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVPcGVuZWQoKSB7XG4gICAgdGhpcy5vcGVuZWQuc2V0KCF0aGlzLm9wZW5lZCgpKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQaW5uZWQoKSB7XG4gICAgdGhpcy5waW5uZWQuc2V0KCF0aGlzLnBpbm5lZCgpKTtcbiAgfVxuXG59XG4iXX0=