@rxap/layout 18.2.1-dev.2 → 18.3.0-dev.1

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [18.3.0-dev.1](https://gitlab.com/rxap/packages/compare/@rxap/layout@18.3.0-dev.0...@rxap/layout@18.3.0-dev.1) (2024-08-15)
7
+
8
+ **Note:** Version bump only for package @rxap/layout
9
+
10
+ # [18.3.0-dev.0](https://gitlab.com/rxap/packages/compare/@rxap/layout@18.2.1-dev.2...@rxap/layout@18.3.0-dev.0) (2024-08-15)
11
+
12
+ ### Features
13
+
14
+ - support custom header items ([d25a430](https://gitlab.com/rxap/packages/commit/d25a43064ddde547c95183dab50f28c52a70a35a))
15
+
6
16
  ## [18.2.1-dev.2](https://gitlab.com/rxap/packages/compare/@rxap/layout@18.2.1-dev.1...@rxap/layout@18.2.1-dev.2) (2024-08-12)
7
17
 
8
18
  **Note:** Version bump only for package @rxap/layout
@@ -1,8 +1,11 @@
1
+ import { CdkPortalOutlet } from '@angular/cdk/portal';
1
2
  import { ChangeDetectionStrategy, Component, computed, inject, } from '@angular/core';
2
3
  import { toSignal } from '@angular/core/rxjs-interop';
4
+ import { MatToolbarRow } from '@angular/material/toolbar';
3
5
  import { LayoutService } from '../layout.service';
4
6
  import { RXAP_USER_PROFILE_DATA_SOURCE } from '../tokens';
5
7
  import { AppsButtonComponent } from './apps-button/apps-button.component';
8
+ import { DefaultHeaderService } from './default-header.service';
6
9
  import { SettingsButtonComponent } from './settings-button/settings-button.component';
7
10
  import { SidenavToggleButtonComponent } from './sidenav-toggle-button/sidenav-toggle-button.component';
8
11
  import { UserProfileIconComponent } from './user-profile-icon/user-profile-icon.component';
@@ -13,9 +16,12 @@ export class DefaultHeaderComponent {
13
16
  this.collapsable = computed(() => this.layoutComponentService.collapsable());
14
17
  this.opened = computed(() => this.layoutComponentService.opened());
15
18
  this.profile = toSignal(inject(RXAP_USER_PROFILE_DATA_SOURCE).connect('user-profile'), { initialValue: null });
19
+ this.defaultHeaderService = inject(DefaultHeaderService);
20
+ this.portals = computed(() => this.defaultHeaderService.portals());
21
+ this.hasPortals = computed(() => this.portals().length > 0);
16
22
  }
17
23
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DefaultHeaderComponent, isStandalone: true, selector: "rxap-default-header", host: { classAttribute: "grow" }, ngImport: i0, template: "<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow\">\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AppsButtonComponent, selector: "rxap-apps-button" }, { kind: "component", type: SettingsButtonComponent, selector: "rxap-settings-button" }, { kind: "component", type: SidenavToggleButtonComponent, selector: "rxap-sidenav-toggle-button" }, { kind: "component", type: UserProfileIconComponent, selector: "rxap-user-profile-icon", inputs: ["profile"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DefaultHeaderComponent, isStandalone: true, selector: "rxap-default-header", host: { classAttribute: "grow" }, ngImport: i0, template: "<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow flex flex-row gap-x-4 items-center\">\n @for (portal of portals(); track portal) {\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n }\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AppsButtonComponent, selector: "rxap-apps-button" }, { kind: "component", type: SettingsButtonComponent, selector: "rxap-settings-button" }, { kind: "component", type: SidenavToggleButtonComponent, selector: "rxap-sidenav-toggle-button" }, { kind: "component", type: UserProfileIconComponent, selector: "rxap-user-profile-icon", inputs: ["profile"] }, { kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19
25
  }
20
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderComponent, decorators: [{
21
27
  type: Component,
@@ -24,8 +30,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
24
30
  SettingsButtonComponent,
25
31
  SidenavToggleButtonComponent,
26
32
  UserProfileIconComponent,
33
+ MatToolbarRow,
34
+ CdkPortalOutlet,
27
35
  ], host: {
28
36
  'class': 'grow',
29
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow\">\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n" }]
37
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow flex flex-row gap-x-4 items-center\">\n @for (portal of portals(); track portal) {\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n }\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n" }]
30
38
  }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9kZWZhdWx0LWhlYWRlci9kZWZhdWx0LWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2xheW91dC9zcmMvbGliL2RlZmF1bHQtaGVhZGVyL2RlZmF1bHQtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBa0IzRixNQUFNLE9BQU8sc0JBQXNCO0lBaEJuQztRQWtCbUIsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhELGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDOUQsWUFBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUUzSDs4R0FSWSxzQkFBc0I7a0dBQXRCLHNCQUFzQixpSEM5Qm5DLHlmQWFBLDBEREtJLG1CQUFtQiw2REFDbkIsdUJBQXVCLGlFQUN2Qiw0QkFBNEIsdUVBQzVCLHdCQUF3Qjs7MkZBU2Ysc0JBQXNCO2tCQWhCbEMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQO3dCQUNQLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2Qiw0QkFBNEI7d0JBQzVCLHdCQUF3QjtxQkFDekIsUUFDSzt3QkFDSixPQUFPLEVBQUUsTUFBTTtxQkFDaEIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uL2xheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJYQVBfVVNFUl9QUk9GSUxFX0RBVEFfU09VUkNFIH0gZnJvbSAnLi4vdG9rZW5zJztcbmltcG9ydCB7IEFwcHNCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2FwcHMtYnV0dG9uL2FwcHMtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZXR0aW5nc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZ3MtYnV0dG9uL3NldHRpbmdzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2lkZW5hdlRvZ2dsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vc2lkZW5hdi10b2dnbGUtYnV0dG9uL3NpZGVuYXYtdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlclByb2ZpbGVJY29uQ29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXByb2ZpbGUtaWNvbi91c2VyLXByb2ZpbGUtaWNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyeGFwLWRlZmF1bHQtaGVhZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFwcHNCdXR0b25Db21wb25lbnQsXG4gICAgU2V0dGluZ3NCdXR0b25Db21wb25lbnQsXG4gICAgU2lkZW5hdlRvZ2dsZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBVc2VyUHJvZmlsZUljb25Db21wb25lbnQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnZ3JvdycsXG4gIH0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWZhdWx0LWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kZWZhdWx0LWhlYWRlci5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0SGVhZGVyQ29tcG9uZW50IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxheW91dENvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGF5b3V0U2VydmljZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbGxhcHNhYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sYXlvdXRDb21wb25lbnRTZXJ2aWNlLmNvbGxhcHNhYmxlKCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlbmVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sYXlvdXRDb21wb25lbnRTZXJ2aWNlLm9wZW5lZCgpKTtcbiAgcHVibGljIHJlYWRvbmx5IHByb2ZpbGUgPSB0b1NpZ25hbChpbmplY3QoUlhBUF9VU0VSX1BST0ZJTEVfREFUQV9TT1VSQ0UpLmNvbm5lY3QoJ3VzZXItcHJvZmlsZScpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcblxufVxuIiwiPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtcm93IGdhcC14LTQganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICBAaWYgKCFjb2xsYXBzYWJsZSgpKSB7XG4gICAgPHJ4YXAtc2lkZW5hdi10b2dnbGUtYnV0dG9uPjwvcnhhcC1zaWRlbmF2LXRvZ2dsZS1idXR0b24+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImdyb3dcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8cnhhcC1hcHBzLWJ1dHRvbiBjbGFzcz1cImdyb3ctMFwiPjwvcnhhcC1hcHBzLWJ1dHRvbj5cbiAgPHJ4YXAtc2V0dGluZ3MtYnV0dG9uIGNsYXNzPVwiZ3Jvdy0wXCI+PC9yeGFwLXNldHRpbmdzLWJ1dHRvbj5cbiAgQGlmICh0aGlzLnByb2ZpbGUoKTsgYXMgcHJvZmlsZSkge1xuICAgIDxyeGFwLXVzZXItcHJvZmlsZS1pY29uIFtwcm9maWxlXT1cInByb2ZpbGVcIiBjbGFzcz1cImdyb3ctMFwiPjwvcnhhcC11c2VyLXByb2ZpbGUtaWNvbj5cbiAgfVxuPC9kaXY+XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9kZWZhdWx0LWhlYWRlci9kZWZhdWx0LWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2xheW91dC9zcmMvbGliL2RlZmF1bHQtaGVhZGVyL2RlZmF1bHQtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7QUFvQjNGLE1BQU0sT0FBTyxzQkFBc0I7SUFsQm5DO1FBb0JtQiwyQkFBc0IsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDeEUsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM5RCxZQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXpHLHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXJELFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDOUQsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBRXhFOzhHQWJZLHNCQUFzQjtrR0FBdEIsc0JBQXNCLGlIQ3BDbkMsbXBCQWdCQSwwRERNSSxtQkFBbUIsNkRBQ25CLHVCQUF1QixpRUFDdkIsNEJBQTRCLHVFQUM1Qix3QkFBd0Isd0ZBRXhCLGVBQWU7OzJGQVNOLHNCQUFzQjtrQkFsQmxDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsNEJBQTRCO3dCQUM1Qix3QkFBd0I7d0JBQ3hCLGFBQWE7d0JBQ2IsZUFBZTtxQkFDaEIsUUFDSzt3QkFDSixPQUFPLEVBQUUsTUFBTTtxQkFDaEIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtQb3J0YWxPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBNYXRUb29sYmFyUm93IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbGJhcic7XG5pbXBvcnQgeyBIZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaGVhZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uL2xheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJYQVBfVVNFUl9QUk9GSUxFX0RBVEFfU09VUkNFIH0gZnJvbSAnLi4vdG9rZW5zJztcbmltcG9ydCB7IEFwcHNCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2FwcHMtYnV0dG9uL2FwcHMtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWZhdWx0SGVhZGVyU2VydmljZSB9IGZyb20gJy4vZGVmYXVsdC1oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTZXR0aW5nc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZ3MtYnV0dG9uL3NldHRpbmdzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2lkZW5hdlRvZ2dsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vc2lkZW5hdi10b2dnbGUtYnV0dG9uL3NpZGVuYXYtdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlclByb2ZpbGVJY29uQ29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXByb2ZpbGUtaWNvbi91c2VyLXByb2ZpbGUtaWNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyeGFwLWRlZmF1bHQtaGVhZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFwcHNCdXR0b25Db21wb25lbnQsXG4gICAgU2V0dGluZ3NCdXR0b25Db21wb25lbnQsXG4gICAgU2lkZW5hdlRvZ2dsZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBVc2VyUHJvZmlsZUljb25Db21wb25lbnQsXG4gICAgTWF0VG9vbGJhclJvdyxcbiAgICBDZGtQb3J0YWxPdXRsZXQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnZ3JvdycsXG4gIH0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWZhdWx0LWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kZWZhdWx0LWhlYWRlci5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0SGVhZGVyQ29tcG9uZW50IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxheW91dENvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGF5b3V0U2VydmljZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbGxhcHNhYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sYXlvdXRDb21wb25lbnRTZXJ2aWNlLmNvbGxhcHNhYmxlKCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlbmVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sYXlvdXRDb21wb25lbnRTZXJ2aWNlLm9wZW5lZCgpKTtcbiAgcHVibGljIHJlYWRvbmx5IHByb2ZpbGUgPSB0b1NpZ25hbChpbmplY3QoUlhBUF9VU0VSX1BST0ZJTEVfREFUQV9TT1VSQ0UpLmNvbm5lY3QoJ3VzZXItcHJvZmlsZScpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRIZWFkZXJTZXJ2aWNlID0gaW5qZWN0KERlZmF1bHRIZWFkZXJTZXJ2aWNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcG9ydGFscyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGVmYXVsdEhlYWRlclNlcnZpY2UucG9ydGFscygpKTtcbiAgcHVibGljIHJlYWRvbmx5IGhhc1BvcnRhbHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBvcnRhbHMoKS5sZW5ndGggPiAwKTtcblxufVxuIiwiPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtcm93IGdhcC14LTQganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICBAaWYgKCFjb2xsYXBzYWJsZSgpKSB7XG4gICAgPHJ4YXAtc2lkZW5hdi10b2dnbGUtYnV0dG9uPjwvcnhhcC1zaWRlbmF2LXRvZ2dsZS1idXR0b24+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImdyb3cgZmxleCBmbGV4LXJvdyBnYXAteC00IGl0ZW1zLWNlbnRlclwiPlxuICAgIEBmb3IgKHBvcnRhbCBvZiBwb3J0YWxzKCk7IHRyYWNrIHBvcnRhbCkge1xuICAgICAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPVwicG9ydGFsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbiAgPHJ4YXAtYXBwcy1idXR0b24gY2xhc3M9XCJncm93LTBcIj48L3J4YXAtYXBwcy1idXR0b24+XG4gIDxyeGFwLXNldHRpbmdzLWJ1dHRvbiBjbGFzcz1cImdyb3ctMFwiPjwvcnhhcC1zZXR0aW5ncy1idXR0b24+XG4gIEBpZiAodGhpcy5wcm9maWxlKCk7IGFzIHByb2ZpbGUpIHtcbiAgICA8cnhhcC11c2VyLXByb2ZpbGUtaWNvbiBbcHJvZmlsZV09XCJwcm9maWxlXCIgY2xhc3M9XCJncm93LTBcIj48L3J4YXAtdXNlci1wcm9maWxlLWljb24+XG4gIH1cbjwvZGl2PlxuIl19
@@ -0,0 +1,60 @@
1
+ import { ComponentPortal, } from '@angular/cdk/portal';
2
+ import { computed, inject, Injectable, isDevMode, signal, } from '@angular/core';
3
+ import { RXAP_DEFAULT_HEADER_ITEM_COMPONENT } from '../tokens';
4
+ import { coerceArray } from '@rxap/utilities';
5
+ import * as i0 from "@angular/core";
6
+ export class DefaultHeaderService {
7
+ constructor() {
8
+ this.components = coerceArray(inject(RXAP_DEFAULT_HEADER_ITEM_COMPONENT, { optional: true }));
9
+ /**
10
+ * Represents an array of `Portal` objects with unknown type.
11
+ *
12
+ * @typedef {Array<Portal<unknown>>} SignalPortals
13
+ */
14
+ this.portals = signal(this.components.map(component => new ComponentPortal(component)));
15
+ /**
16
+ * Computes the count of portals.
17
+ *
18
+ * @returns {number} The count of portals.
19
+ */
20
+ this.portalCount = computed(() => this.portals().length);
21
+ }
22
+ /**
23
+ * Adds a portal to the list of portals.
24
+ *
25
+ * @param {Portal<unknown>} portal - The portal to be added.
26
+ *
27
+ * @return {void}
28
+ */
29
+ pushPortal(portal) {
30
+ if (!this.portals().includes(portal)) {
31
+ this.portals.update(portals => [...portals, portal]);
32
+ }
33
+ else {
34
+ if (isDevMode()) {
35
+ console.warn('Can not add the same portal multiple times');
36
+ }
37
+ }
38
+ }
39
+ /**
40
+ * Removes a portal from the list of portals.
41
+ *
42
+ * @param {Portal<unknown>} portal - The portal to be removed.
43
+ * @return {void}
44
+ */
45
+ removePortal(portal) {
46
+ const index = this.portals().indexOf(portal);
47
+ if (index !== -1) {
48
+ this.portals.update(portals => {
49
+ portals.splice(index, 1);
50
+ return portals.slice();
51
+ });
52
+ }
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
55
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderService }); }
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderService, decorators: [{
58
+ type: Injectable
59
+ }] });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1oZWFkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvZGVmYXVsdC1oZWFkZXIvZGVmYXVsdC1oZWFkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxHQUVoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRzlDLE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFHbUIsZUFBVSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsa0NBQWtDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTFHOzs7O1dBSUc7UUFDYSxZQUFPLEdBQUcsTUFBTSxDQUF5QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUczSDs7OztXQUlHO1FBQ2EsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBb0NyRTtJQWpDQzs7Ozs7O09BTUc7SUFDSSxVQUFVLENBQUMsTUFBdUI7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUUsR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksWUFBWSxDQUFDLE1BQXVCO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBbkRVLG9CQUFvQjtrSEFBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50UG9ydGFsLFxuICBQb3J0YWwsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgaXNEZXZNb2RlLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUlhBUF9ERUZBVUxUX0hFQURFUl9JVEVNX0NPTVBPTkVOVCB9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBjb2VyY2VBcnJheSB9IGZyb20gJ0ByeGFwL3V0aWxpdGllcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZWZhdWx0SGVhZGVyU2VydmljZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRzID0gY29lcmNlQXJyYXkoaW5qZWN0KFJYQVBfREVGQVVMVF9IRUFERVJfSVRFTV9DT01QT05FTlQsIHsgb3B0aW9uYWw6IHRydWUgfSkpO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGFuIGFycmF5IG9mIGBQb3J0YWxgIG9iamVjdHMgd2l0aCB1bmtub3duIHR5cGUuXG4gICAqXG4gICAqIEB0eXBlZGVmIHtBcnJheTxQb3J0YWw8dW5rbm93bj4+fSBTaWduYWxQb3J0YWxzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9ydGFscyA9IHNpZ25hbDxBcnJheTxQb3J0YWw8dW5rbm93bj4+Pih0aGlzLmNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCkpKTtcblxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgY291bnQgb2YgcG9ydGFscy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGNvdW50IG9mIHBvcnRhbHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9ydGFsQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBvcnRhbHMoKS5sZW5ndGgpO1xuXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBwb3J0YWwgdG8gdGhlIGxpc3Qgb2YgcG9ydGFscy5cbiAgICpcbiAgICogQHBhcmFtIHtQb3J0YWw8dW5rbm93bj59IHBvcnRhbCAtIFRoZSBwb3J0YWwgdG8gYmUgYWRkZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBwdWJsaWMgcHVzaFBvcnRhbChwb3J0YWw6IFBvcnRhbDx1bmtub3duPikge1xuICAgIGlmICghdGhpcy5wb3J0YWxzKCkuaW5jbHVkZXMocG9ydGFsKSkge1xuICAgICAgdGhpcy5wb3J0YWxzLnVwZGF0ZShwb3J0YWxzID0+IFsgLi4ucG9ydGFscywgcG9ydGFsIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDYW4gbm90IGFkZCB0aGUgc2FtZSBwb3J0YWwgbXVsdGlwbGUgdGltZXMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHBvcnRhbCBmcm9tIHRoZSBsaXN0IG9mIHBvcnRhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7UG9ydGFsPHVua25vd24+fSBwb3J0YWwgLSBUaGUgcG9ydGFsIHRvIGJlIHJlbW92ZWQuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUG9ydGFsKHBvcnRhbDogUG9ydGFsPHVua25vd24+KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnBvcnRhbHMoKS5pbmRleE9mKHBvcnRhbCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5wb3J0YWxzLnVwZGF0ZShwb3J0YWxzID0+IHtcbiAgICAgICAgcG9ydGFscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gcG9ydGFscy5zbGljZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
@@ -1,17 +1,19 @@
1
1
  import { DefaultHeaderComponent } from './default-header/default-header.component';
2
+ import { DefaultHeaderService } from './default-header/default-header.service';
2
3
  import { ExternalAppsService } from './external-apps.service';
3
4
  import { FooterService } from './footer.service';
4
5
  import { HeaderService } from './header.service';
5
6
  import { LayoutService } from './layout.service';
6
7
  import { LogoService } from './logo.service';
7
8
  import { NavigationService } from './navigation.service';
8
- import { RXAP_EXTERNAL_APP, RXAP_FOOTER_COMPONENT, RXAP_HEADER_COMPONENT, RXAP_NAVIGATION_CONFIG, RXAP_NAVIGATION_CONFIG_INSERTS, RXAP_RELEASE_INFO_MODULE, RXAP_SETTINGS_MENU_ITEM, RXAP_SETTINGS_MENU_ITEM_COMPONENT, RXAP_USER_PROFILE_DATA_SOURCE, } from './tokens';
9
+ import { RXAP_DEFAULT_HEADER_ITEM_COMPONENT, RXAP_EXTERNAL_APP, RXAP_FOOTER_COMPONENT, RXAP_HEADER_COMPONENT, RXAP_NAVIGATION_CONFIG, RXAP_NAVIGATION_CONFIG_INSERTS, RXAP_RELEASE_INFO_MODULE, RXAP_SETTINGS_MENU_ITEM, RXAP_SETTINGS_MENU_ITEM_COMPONENT, RXAP_USER_PROFILE_DATA_SOURCE, } from './tokens';
9
10
  export function provideLayout(...additionalProviders) {
10
11
  return [
11
12
  LayoutService,
12
13
  LogoService,
13
14
  HeaderService,
14
15
  FooterService,
16
+ DefaultHeaderService,
15
17
  ...additionalProviders,
16
18
  ];
17
19
  }
@@ -54,6 +56,13 @@ export function withSettingsMenuItems(...items) {
54
56
  })),
55
57
  ];
56
58
  }
59
+ export function withDefaultHeaderItems(...items) {
60
+ return items.map(component => ({
61
+ provide: RXAP_DEFAULT_HEADER_ITEM_COMPONENT,
62
+ useValue: component,
63
+ multi: true,
64
+ }));
65
+ }
57
66
  export function withReleaseInfoModules(...module) {
58
67
  return module.map(item => ({
59
68
  provide: RXAP_RELEASE_INFO_MODULE,
@@ -93,4 +102,4 @@ export function withUserProfileDataSource(dataSource, useClass = false) {
93
102
  };
94
103
  }
95
104
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvcHJvdmlkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qiw4QkFBOEIsRUFDOUIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixpQ0FBaUMsRUFDakMsNkJBQTZCLEdBQzlCLE1BQU0sVUFBVSxDQUFDO0FBUWxCLE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBRyxtQkFBK0I7SUFDOUQsT0FBTztRQUNMLGFBQWE7UUFDYixXQUFXO1FBQ1gsYUFBYTtRQUNiLGFBQWE7UUFDYixHQUFHLG1CQUFtQjtLQUN2QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUFHLElBQW1CO0lBQ3hELE9BQU87UUFDTCxtQkFBbUI7UUFDbkIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDakI7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFFBQVEsRUFBRSxHQUFHO1lBQ2IsS0FBSyxFQUFFLElBQUk7U0FDWixDQUNGLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsTUFBNkQ7SUFFN0QsT0FBTztRQUNMLGlCQUFpQjtRQUNqQjtZQUNFLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsUUFBUSxFQUFFLE1BQU07U0FDakI7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUE4QztJQUNsRixPQUFPLENBQUM7WUFDTixPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLFFBQVEsRUFBRSxPQUFPO1NBQ2xCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsR0FBRyxLQUEwRDtJQUNqRyxPQUFPO1FBQ0wsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFxQyxFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FDeEc7WUFDRSxPQUFPLEVBQUUsaUNBQWlDO1lBQzFDLFFBQVEsRUFBRSxTQUFTO1lBQ25CLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FDRixDQUFDO1FBQ0YsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUE0QixFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDMUY7WUFDRSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLElBQUk7U0FDWixDQUNGLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxHQUFHLE1BQTJCO0lBQ25FLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ3hCO1FBQ0UsT0FBTyxFQUFFLHdCQUF3QjtRQUNqQyxRQUFRLEVBQUUsSUFBSTtRQUNkLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQXlDO0lBQzVFLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQ2pDO1FBQ0UsT0FBTyxFQUFFLHFCQUFxQjtRQUM5QixRQUFRLEVBQUUsU0FBUztLQUNwQixDQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsVUFBeUM7SUFDNUUsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FDakM7UUFDRSxPQUFPLEVBQUUscUJBQXFCO1FBQzlCLFFBQVEsRUFBRSxTQUFTO0tBQ3BCLENBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsT0FBTztRQUNMLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsUUFBUSxFQUFFLHNCQUFzQjtLQUNqQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxVQUFtQyxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQzdGLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPO1lBQ0wsT0FBTyxFQUFFLDZCQUE2QjtZQUN0QyxRQUFRLEVBQUUsVUFBVTtTQUNyQixDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPO1lBQ0wsT0FBTyxFQUFFLDZCQUE2QjtZQUN0QyxXQUFXLEVBQUUsVUFBVTtTQUN4QixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0ByeGFwL3BhdHRlcm4nO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tICdAcnhhcC91dGlsaXRpZXMnO1xuaW1wb3J0IHsgRGVmYXVsdEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZGVmYXVsdC1oZWFkZXIvZGVmYXVsdC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEV4dGVybmFsQXBwc1NlcnZpY2UgfSBmcm9tICcuL2V4dGVybmFsLWFwcHMuc2VydmljZSc7XG5pbXBvcnQgeyBGb290ZXJTZXJ2aWNlIH0gZnJvbSAnLi9mb290ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBIZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi9oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi9sYXlvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dvU2VydmljZSB9IGZyb20gJy4vbG9nby5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbldpdGhJbnNlcnRzIH0gZnJvbSAnLi9uYXZpZ2F0aW9uL25hdmlnYXRpb24taXRlbSc7XG5pbXBvcnQge1xuICBSWEFQX0VYVEVSTkFMX0FQUCxcbiAgUlhBUF9GT09URVJfQ09NUE9ORU5ULFxuICBSWEFQX0hFQURFUl9DT01QT05FTlQsXG4gIFJYQVBfTkFWSUdBVElPTl9DT05GSUcsXG4gIFJYQVBfTkFWSUdBVElPTl9DT05GSUdfSU5TRVJUUyxcbiAgUlhBUF9SRUxFQVNFX0lORk9fTU9EVUxFLFxuICBSWEFQX1NFVFRJTkdTX01FTlVfSVRFTSxcbiAgUlhBUF9TRVRUSU5HU19NRU5VX0lURU1fQ09NUE9ORU5ULFxuICBSWEFQX1VTRVJfUFJPRklMRV9EQVRBX1NPVVJDRSxcbn0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHtcbiAgRXh0ZXJuYWxBcHAsXG4gIFJlbGVhc2VJbmZvTW9kdWxlLFxuICBTZXR0aW5nc01lbnVJdGVtLFxuICBTZXR0aW5nc01lbnVJdGVtQ29tcG9uZW50LFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVMYXlvdXQoLi4uYWRkaXRpb25hbFByb3ZpZGVyczogUHJvdmlkZXJbXSk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIExheW91dFNlcnZpY2UsXG4gICAgTG9nb1NlcnZpY2UsXG4gICAgSGVhZGVyU2VydmljZSxcbiAgICBGb290ZXJTZXJ2aWNlLFxuICAgIC4uLmFkZGl0aW9uYWxQcm92aWRlcnMsXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRXh0ZXJuYWxBcHBzKC4uLmFwcHM6IEV4dGVybmFsQXBwW10pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICBFeHRlcm5hbEFwcHNTZXJ2aWNlLFxuICAgIC4uLmFwcHMubWFwKGFwcCA9PiAoXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJYQVBfRVhURVJOQUxfQVBQLFxuICAgICAgICB1c2VWYWx1ZTogYXBwLFxuICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIH1cbiAgICApKVxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE5hdmlnYXRpb25Db25maWcoXG4gIGNvbmZpZzogTmF2aWdhdGlvbldpdGhJbnNlcnRzIHwgKCgpID0+IE5hdmlnYXRpb25XaXRoSW5zZXJ0cyksXG4pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBSWEFQX05BVklHQVRJT05fQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE5hdmlnYXRpb25JbnNlcnRzKGluc2VydHM6IFJlY29yZDxzdHJpbmcsIE5hdmlnYXRpb25XaXRoSW5zZXJ0cz4pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFt7XG4gICAgcHJvdmlkZTogUlhBUF9OQVZJR0FUSU9OX0NPTkZJR19JTlNFUlRTLFxuICAgIHVzZVZhbHVlOiBpbnNlcnRzLFxuICB9XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTZXR0aW5nc01lbnVJdGVtcyguLi5pdGVtczogQXJyYXk8U2V0dGluZ3NNZW51SXRlbUNvbXBvbmVudCB8IFNldHRpbmdzTWVudUl0ZW0+KTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAgLi4uaXRlbXMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBTZXR0aW5nc01lbnVJdGVtQ29tcG9uZW50ID0+IHR5cGVvZiBpdGVtID09PSAnZnVuY3Rpb24nKS5tYXAoY29tcG9uZW50ID0+IChcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUlhBUF9TRVRUSU5HU19NRU5VX0lURU1fQ09NUE9ORU5ULFxuICAgICAgICB1c2VWYWx1ZTogY29tcG9uZW50LFxuICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIH1cbiAgICApKSxcbiAgICAuLi5pdGVtcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIFNldHRpbmdzTWVudUl0ZW0gPT4gdHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpLm1hcChpdGVtID0+IChcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUlhBUF9TRVRUSU5HU19NRU5VX0lURU0sXG4gICAgICAgIHVzZVZhbHVlOiBpdGVtLFxuICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIH1cbiAgICApKSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWxlYXNlSW5mb01vZHVsZXMoLi4ubW9kdWxlOiBSZWxlYXNlSW5mb01vZHVsZVtdKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBtb2R1bGUubWFwKGl0ZW0gPT4gKFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJYQVBfUkVMRUFTRV9JTkZPX01PRFVMRSxcbiAgICAgIHVzZVZhbHVlOiBpdGVtLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfVxuICApKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIZWFkZXJDb21wb25lbnRzKGNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudFR5cGU8dW5rbm93bj4+KTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBjb21wb25lbnRzLm1hcChjb21wb25lbnQgPT4gKFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJYQVBfSEVBREVSX0NPTVBPTkVOVCxcbiAgICAgIHVzZVZhbHVlOiBjb21wb25lbnQsXG4gICAgfVxuICApKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhGb290ZXJDb21wb25lbnRzKGNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudFR5cGU8dW5rbm93bj4+KTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBjb21wb25lbnRzLm1hcChjb21wb25lbnQgPT4gKFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJYQVBfRk9PVEVSX0NPTVBPTkVOVCxcbiAgICAgIHVzZVZhbHVlOiBjb21wb25lbnQsXG4gICAgfVxuICApKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEZWZhdWx0SGVhZGVyQ29tcG9uZW50KCk6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBSWEFQX0hFQURFUl9DT01QT05FTlQsXG4gICAgdXNlVmFsdWU6IERlZmF1bHRIZWFkZXJDb21wb25lbnQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVXNlclByb2ZpbGVEYXRhU291cmNlKGRhdGFTb3VyY2U6IENvbnN0cnVjdG9yPERhdGFTb3VyY2U+LCB1c2VDbGFzcyA9IGZhbHNlKTogUHJvdmlkZXIge1xuICBpZiAodXNlQ2xhc3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdmlkZTogUlhBUF9VU0VSX1BST0ZJTEVfREFUQV9TT1VSQ0UsXG4gICAgICB1c2VDbGFzczogZGF0YVNvdXJjZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGU6IFJYQVBfVVNFUl9QUk9GSUxFX0RBVEFfU09VUkNFLFxuICAgICAgdXNlRXhpc3Rpbmc6IGRhdGFTb3VyY2VcbiAgICB9O1xuICB9XG59XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvcHJvdmlkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsOEJBQThCLEVBQzlCLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsaUNBQWlDLEVBQ2pDLDZCQUE2QixHQUM5QixNQUFNLFVBQVUsQ0FBQztBQVNsQixNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQUcsbUJBQStCO0lBQzlELE9BQU87UUFDTCxhQUFhO1FBQ2IsV0FBVztRQUNYLGFBQWE7UUFDYixhQUFhO1FBQ2Isb0JBQW9CO1FBQ3BCLEdBQUcsbUJBQW1CO0tBQ3ZCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQUcsSUFBbUI7SUFDeEQsT0FBTztRQUNMLG1CQUFtQjtRQUNuQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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QztRQUNOLE9BQU87WUFDTCxPQUFPLEVBQUUsNkJBQTZCO1lBQ3RDLFdBQVcsRUFBRSxVQUFVO1NBQ3hCLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnQHJ4YXAvcGF0dGVybic7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gJ0ByeGFwL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBEZWZhdWx0SGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9kZWZhdWx0LWhlYWRlci9kZWZhdWx0LWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmYXVsdEhlYWRlclNlcnZpY2UgfSBmcm9tICcuL2RlZmF1bHQtaGVhZGVyL2RlZmF1bHQtaGVhZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXh0ZXJuYWxBcHBzU2VydmljZSB9IGZyb20gJy4vZXh0ZXJuYWwtYXBwcy5zZXJ2aWNlJztcbmltcG9ydCB7IEZvb3RlclNlcnZpY2UgfSBmcm9tICcuL2Zvb3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IEhlYWRlclNlcnZpY2UgfSBmcm9tICcuL2hlYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuL2xheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ29TZXJ2aWNlIH0gZnJvbSAnLi9sb2dvLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uV2l0aEluc2VydHMgfSBmcm9tICcuL25hdmlnYXRpb24vbmF2aWdhdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIFJYQVBfREVGQVVMVF9IRUFERVJfSVRFTV9DT01QT05FTlQsXG4gIFJYQVBfRVhURVJOQUxfQVBQLFxuICBSWEFQX0ZPT1RFUl9DT01QT05FTlQsXG4gIFJYQVBfSEVBREVSX0NPTVBPTkVOVCxcbiAgUlhBUF9OQVZJR0FUSU9OX0NPTkZJRyxcbiAgUlhBUF9OQVZJR0FUSU9OX0NPTkZJR19JTlNFUlRTLFxuICBSWEFQX1JFTEVBU0VfSU5GT19NT0RVTEUsXG4gIFJYQVBfU0VUVElOR1NfTUVOVV9JVEVNLFxuICBSWEFQX1NFVFRJTkdTX01FTlVfSVRFTV9DT01QT05FTlQsXG4gIFJYQVBfVVNFUl9QUk9GSUxFX0RBVEFfU09VUkNFLFxufSBmcm9tICcuL3Rva2Vucyc7XG5pbXBvcnQge1xuICBEZWZhdWx0SGVhZGVySXRlbUNvbXBvbmVudCxcbiAgRXh0ZXJuYWxBcHAsXG4gIFJlbGVhc2VJbmZvTW9kdWxlLFxuICBTZXR0aW5nc01lbnVJdGVtLFxuICBTZXR0aW5nc01lbnVJdGVtQ29tcG9uZW50LFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVMYXlvdXQoLi4uYWRkaXRpb25hbFByb3ZpZGVyczogUHJvdmlkZXJbXSk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIExheW91dFNlcnZpY2UsXG4gICAgTG9nb1NlcnZpY2UsXG4gICAgSGVhZGVyU2VydmljZSxcbiAgICBGb290ZXJTZXJ2aWNlLFxuICAgIERlZmF1bHRIZWFkZXJTZXJ2aWNlLFxuICAgIC4uLmFkZGl0aW9uYWxQcm92aWRlcnMsXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRXh0ZXJuYWxBcHBzKC4uLmFwcHM6IEV4dGVybmFsQXBwW10pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICBFeHRlcm5hbEFwcHNTZXJ2aWNlLFxuICAgIC4uLmFwcHMubWFwKGFwcCA9PiAoXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJYQVBfRVhURVJOQUxfQVBQLFxuICAgICAgICB1c2VWYWx1ZTogYXBwLFxuICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIH1cbiAgICApKVxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE5hdmlnYXRpb25Db25maWcoXG4gIGNvbmZpZzogTmF2aWdhdGlvbldpdGhJbnNlcnRzIHwgKCgpID0+IE5hdmlnYXRpb25XaXRoSW5zZXJ0cyksXG4pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBSWEFQX05BVklHQVRJT05fQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE5hdmlnYXRpb25JbnNlcnRzKGluc2VydHM6IFJlY29yZDxzdHJpbmcsIE5hdmlnYXRpb25XaXRoSW5zZXJ0cz4pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFt7XG4gICAgcHJvdmlkZTogUlhBUF9OQVZJR0FUSU9OX0NPTkZJR19JTlNFUlRTLFxuICAgIHVzZVZhbHVlOiBpbnNlcnRzLFxuICB9XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTZXR0aW5nc01lbnVJdGVtcyguLi5pdGVtczogQXJyYXk8U2V0dGluZ3NNZW51SXRlbUNvbXBvbmVudCB8IFNldHRpbmdzTWVudUl0ZW0+KTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAgLi4uaXRlbXMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBTZXR0aW5nc01lbnVJdGVtQ29tcG9uZW50ID0+IHR5cGVvZiBpdGVtID09PSAnZnVuY3Rpb24nKS5tYXAoY29tcG9uZW50ID0+IChcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUlhBUF9TRVRUSU5HU19NRU5VX0lURU1fQ09NUE9ORU5ULFxuICAgICAgICB1c2VWYWx1ZTogY29tcG9uZW50LFxuICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIH1cbiAgICApKSxcbiAgICAuLi5pdGVtcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIFNldHRpbmdzTWVudUl0ZW0gPT4gdHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpLm1hcChpdGVtID0+IChcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUlhBUF9TRVRUSU5HU19NRU5VX0lURU0sXG4gICAgICAgIHVzZVZhbHVlOiBpdGVtLFxuICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIH1cbiAgICApKSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEZWZhdWx0SGVhZGVySXRlbXMoLi4uaXRlbXM6IEFycmF5PERlZmF1bHRIZWFkZXJJdGVtQ29tcG9uZW50Pik6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gaXRlbXMubWFwKGNvbXBvbmVudCA9PiAoe1xuICAgIHByb3ZpZGU6IFJYQVBfREVGQVVMVF9IRUFERVJfSVRFTV9DT01QT05FTlQsXG4gICAgdXNlVmFsdWU6IGNvbXBvbmVudCxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJlbGVhc2VJbmZvTW9kdWxlcyguLi5tb2R1bGU6IFJlbGVhc2VJbmZvTW9kdWxlW10pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIG1vZHVsZS5tYXAoaXRlbSA9PiAoXG4gICAge1xuICAgICAgcHJvdmlkZTogUlhBUF9SRUxFQVNFX0lORk9fTU9EVUxFLFxuICAgICAgdXNlVmFsdWU6IGl0ZW0sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9XG4gICkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEhlYWRlckNvbXBvbmVudHMoY29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50VHlwZTx1bmtub3duPj4pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIGNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiAoXG4gICAge1xuICAgICAgcHJvdmlkZTogUlhBUF9IRUFERVJfQ09NUE9ORU5ULFxuICAgICAgdXNlVmFsdWU6IGNvbXBvbmVudCxcbiAgICB9XG4gICkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEZvb3RlckNvbXBvbmVudHMoY29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50VHlwZTx1bmtub3duPj4pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIGNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiAoXG4gICAge1xuICAgICAgcHJvdmlkZTogUlhBUF9GT09URVJfQ09NUE9ORU5ULFxuICAgICAgdXNlVmFsdWU6IGNvbXBvbmVudCxcbiAgICB9XG4gICkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERlZmF1bHRIZWFkZXJDb21wb25lbnQoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFJYQVBfSEVBREVSX0NPTVBPTkVOVCxcbiAgICB1c2VWYWx1ZTogRGVmYXVsdEhlYWRlckNvbXBvbmVudCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVc2VyUHJvZmlsZURhdGFTb3VyY2UoZGF0YVNvdXJjZTogQ29uc3RydWN0b3I8RGF0YVNvdXJjZT4sIHVzZUNsYXNzID0gZmFsc2UpOiBQcm92aWRlciB7XG4gIGlmICh1c2VDbGFzcykge1xuICAgIHJldHVybiB7XG4gICAgICBwcm92aWRlOiBSWEFQX1VTRVJfUFJPRklMRV9EQVRBX1NPVVJDRSxcbiAgICAgIHVzZUNsYXNzOiBkYXRhU291cmNlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdmlkZTogUlhBUF9VU0VSX1BST0ZJTEVfREFUQV9TT1VSQ0UsXG4gICAgICB1c2VFeGlzdGluZzogZGF0YVNvdXJjZVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -18,5 +18,6 @@ export const RXAP_USER_PROFILE_DATA_SOURCE = new InjectionToken('rxap/layout/use
18
18
  export const RXAP_EXTERNAL_APP = new InjectionToken('rxap/layout/external-app');
19
19
  export const RXAP_RELEASE_INFO_MODULE = new InjectionToken('rxap/layout/release-info-module');
20
20
  export const RXAP_SETTINGS_MENU_ITEM_COMPONENT = new InjectionToken('rxap/layout/settings-menu-item-component');
21
+ export const RXAP_DEFAULT_HEADER_ITEM_COMPONENT = new InjectionToken('rxap/layout/default-header-item-component');
21
22
  export const RXAP_SETTINGS_MENU_ITEM = new InjectionToken('rxap/layout/settings-menu-item');
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWNyRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDdEQsK0JBQStCLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLGNBQWMsQ0FDOUQsdUNBQXVDLENBQUMsQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIsOEJBQThCLENBQUMsQ0FBQztBQUNoSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIsOEJBQThCLENBQUMsQ0FBQztBQUNoSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBYSx5QkFBeUIsQ0FBQyxDQUFDO0FBQzFGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFakYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQXFELCtCQUErQixDQUFDLENBQUM7QUFDaEosTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQzdELCtCQUErQixFQUMvQjtJQUNFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsQ0FDRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ25FLElBQUksSUFBSTtDQUMzQyxDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLGNBQWMsQ0FBYSxzQ0FBc0MsRUFBRTtJQUNsSCxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0NBQ3RDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFjLDBCQUEwQixDQUFDLENBQUM7QUFFN0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQW9CLGlDQUFpQyxDQUFDLENBQUM7QUFFakgsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxjQUFjLENBQTRCLDBDQUEwQyxDQUFDLENBQUM7QUFFM0ksTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQW1CLGdDQUFnQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9nb0NvbmZpZyB9IGZyb20gJ0ByeGFwL2NvbmZpZyc7XG5pbXBvcnQgeyBzdGF0aWNEYXRhU291cmNlIH0gZnJvbSAnQHJ4YXAvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgRGF0YVNvdXJjZSxcbiAgTWV0aG9kV2l0aFBhcmFtZXRlcnMsXG59IGZyb20gJ0ByeGFwL3BhdHRlcm4nO1xuaW1wb3J0IHsgTmF2aWdhdGlvbldpdGhJbnNlcnRzIH0gZnJvbSAnLi9uYXZpZ2F0aW9uL25hdmlnYXRpb24taXRlbSc7XG5pbXBvcnQge1xuICBFeHRlcm5hbEFwcCxcbiAgRXh0cmFjdFVzZXJuYW1lRnJvbVByb2ZpbGVGbixcbiAgUmVsZWFzZUluZm9Nb2R1bGUsXG4gIFNldHRpbmdzTWVudUl0ZW0sXG4gIFNldHRpbmdzTWVudUl0ZW1Db21wb25lbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgUlhBUF9OQVZJR0FUSU9OX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOYXZpZ2F0aW9uV2l0aEluc2VydHMgfCAoKCkgPT4gTmF2aWdhdGlvbldpdGhJbnNlcnRzKT4oXG4gICdyeGFwL2xheW91dC9uYXZpZ2F0aW9uLWNvbmZpZycpO1xuZXhwb3J0IGNvbnN0IFJYQVBfTkFWSUdBVElPTl9DT05GSUdfSU5TRVJUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWNvcmQ8c3RyaW5nLCBOYXZpZ2F0aW9uV2l0aEluc2VydHM+PihcbiAgJ3J4YXAvbGF5b3V0L25hdmlnYXRpb24tY29uZmlnLWluc2VydHMnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfRk9PVEVSX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPHVua25vd24+PigncnhhcC9sYXlvdXQvZm9vdGVyLWNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IFJYQVBfSEVBREVSX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPHVua25vd24+PigncnhhcC9sYXlvdXQvaGVhZGVyLWNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IFJYQVBfTE9HT19DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TG9nb0NvbmZpZz4oJ3J4YXAvbGF5b3V0L2xvZ28tY29uZmlnJyk7XG5leHBvcnQgY29uc3QgUlhBUF9MQVlPVVRfQVBQU19HUklEID0gbmV3IEluamVjdGlvblRva2VuKCdyeGFwL2xheW91dC9hcHBzLWdyaWQnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfRVhURVJOQUxfQVBQX0ZJTFRFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNZXRob2RXaXRoUGFyYW1ldGVyczxFeHRlcm5hbEFwcFtdLCBFeHRlcm5hbEFwcFtdPj4oJ3J4YXAvbGF5b3V0L2FwcC1jb25maWctZmlsdGVyJyk7XG5leHBvcnQgY29uc3QgRVhUUkFDVF9VU0VSTkFNRV9GUk9NX1BST0ZJTEUgPSBuZXcgSW5qZWN0aW9uVG9rZW48RXh0cmFjdFVzZXJuYW1lRnJvbVByb2ZpbGVGbj4oXG4gICdleHRyYWN0LXVzZXJuYW1lLWZyb20tcHJvZmlsZScsXG4gIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeTogKCkgPT4gKHByb2ZpbGU6IGFueSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSA/IHByb2ZpbGUudXNlcm5hbWUgPz8gcHJvZmlsZS5lbWFpbCA/PyBwcm9maWxlLm5hbWUgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA/PyBudWxsLFxuICB9LFxuKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfVVNFUl9QUk9GSUxFX0RBVEFfU09VUkNFID0gbmV3IEluamVjdGlvblRva2VuPERhdGFTb3VyY2U+KCdyeGFwL2xheW91dC91c2VyLXByb2ZpbGUtZGF0YS1zb3VyY2UnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gc3RhdGljRGF0YVNvdXJjZShudWxsKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgUlhBUF9FWFRFUk5BTF9BUFAgPSBuZXcgSW5qZWN0aW9uVG9rZW48RXh0ZXJuYWxBcHA+KCdyeGFwL2xheW91dC9leHRlcm5hbC1hcHAnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfUkVMRUFTRV9JTkZPX01PRFVMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWxlYXNlSW5mb01vZHVsZT4oJ3J4YXAvbGF5b3V0L3JlbGVhc2UtaW5mby1tb2R1bGUnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfU0VUVElOR1NfTUVOVV9JVEVNX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTZXR0aW5nc01lbnVJdGVtQ29tcG9uZW50PigncnhhcC9sYXlvdXQvc2V0dGluZ3MtbWVudS1pdGVtLWNvbXBvbmVudCcpO1xuXG5leHBvcnQgY29uc3QgUlhBUF9TRVRUSU5HU19NRU5VX0lURU0gPSBuZXcgSW5qZWN0aW9uVG9rZW48U2V0dGluZ3NNZW51SXRlbT4oJ3J4YXAvbGF5b3V0L3NldHRpbmdzLW1lbnUtaXRlbScpO1xuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWNyRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDdEQsK0JBQStCLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLGNBQWMsQ0FDOUQsdUNBQXVDLENBQUMsQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIsOEJBQThCLENBQUMsQ0FBQztBQUNoSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIsOEJBQThCLENBQUMsQ0FBQztBQUNoSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBYSx5QkFBeUIsQ0FBQyxDQUFDO0FBQzFGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFakYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQXFELCtCQUErQixDQUFDLENBQUM7QUFDaEosTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQzdELCtCQUErQixFQUMvQjtJQUNFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsQ0FDRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ25FLElBQUksSUFBSTtDQUMzQyxDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLGNBQWMsQ0FBYSxzQ0FBc0MsRUFBRTtJQUNsSCxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0NBQ3RDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFjLDBCQUEwQixDQUFDLENBQUM7QUFFN0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQW9CLGlDQUFpQyxDQUFDLENBQUM7QUFFakgsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxjQUFjLENBQTRCLDBDQUEwQyxDQUFDLENBQUM7QUFFM0ksTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxjQUFjLENBQXlCLDJDQUEyQyxDQUFDLENBQUM7QUFFMUksTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQW1CLGdDQUFnQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9nb0NvbmZpZyB9IGZyb20gJ0ByeGFwL2NvbmZpZyc7XG5pbXBvcnQgeyBzdGF0aWNEYXRhU291cmNlIH0gZnJvbSAnQHJ4YXAvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgRGF0YVNvdXJjZSxcbiAgTWV0aG9kV2l0aFBhcmFtZXRlcnMsXG59IGZyb20gJ0ByeGFwL3BhdHRlcm4nO1xuaW1wb3J0IHsgTmF2aWdhdGlvbldpdGhJbnNlcnRzIH0gZnJvbSAnLi9uYXZpZ2F0aW9uL25hdmlnYXRpb24taXRlbSc7XG5pbXBvcnQge1xuICBFeHRlcm5hbEFwcCxcbiAgRXh0cmFjdFVzZXJuYW1lRnJvbVByb2ZpbGVGbixcbiAgUmVsZWFzZUluZm9Nb2R1bGUsXG4gIFNldHRpbmdzTWVudUl0ZW0sXG4gIFNldHRpbmdzTWVudUl0ZW1Db21wb25lbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgUlhBUF9OQVZJR0FUSU9OX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOYXZpZ2F0aW9uV2l0aEluc2VydHMgfCAoKCkgPT4gTmF2aWdhdGlvbldpdGhJbnNlcnRzKT4oXG4gICdyeGFwL2xheW91dC9uYXZpZ2F0aW9uLWNvbmZpZycpO1xuZXhwb3J0IGNvbnN0IFJYQVBfTkFWSUdBVElPTl9DT05GSUdfSU5TRVJUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWNvcmQ8c3RyaW5nLCBOYXZpZ2F0aW9uV2l0aEluc2VydHM+PihcbiAgJ3J4YXAvbGF5b3V0L25hdmlnYXRpb24tY29uZmlnLWluc2VydHMnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfRk9PVEVSX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPHVua25vd24+PigncnhhcC9sYXlvdXQvZm9vdGVyLWNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IFJYQVBfSEVBREVSX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPHVua25vd24+PigncnhhcC9sYXlvdXQvaGVhZGVyLWNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IFJYQVBfTE9HT19DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TG9nb0NvbmZpZz4oJ3J4YXAvbGF5b3V0L2xvZ28tY29uZmlnJyk7XG5leHBvcnQgY29uc3QgUlhBUF9MQVlPVVRfQVBQU19HUklEID0gbmV3IEluamVjdGlvblRva2VuKCdyeGFwL2xheW91dC9hcHBzLWdyaWQnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfRVhURVJOQUxfQVBQX0ZJTFRFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNZXRob2RXaXRoUGFyYW1ldGVyczxFeHRlcm5hbEFwcFtdLCBFeHRlcm5hbEFwcFtdPj4oJ3J4YXAvbGF5b3V0L2FwcC1jb25maWctZmlsdGVyJyk7XG5leHBvcnQgY29uc3QgRVhUUkFDVF9VU0VSTkFNRV9GUk9NX1BST0ZJTEUgPSBuZXcgSW5qZWN0aW9uVG9rZW48RXh0cmFjdFVzZXJuYW1lRnJvbVByb2ZpbGVGbj4oXG4gICdleHRyYWN0LXVzZXJuYW1lLWZyb20tcHJvZmlsZScsXG4gIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeTogKCkgPT4gKHByb2ZpbGU6IGFueSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSA/IHByb2ZpbGUudXNlcm5hbWUgPz8gcHJvZmlsZS5lbWFpbCA/PyBwcm9maWxlLm5hbWUgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA/PyBudWxsLFxuICB9LFxuKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfVVNFUl9QUk9GSUxFX0RBVEFfU09VUkNFID0gbmV3IEluamVjdGlvblRva2VuPERhdGFTb3VyY2U+KCdyeGFwL2xheW91dC91c2VyLXByb2ZpbGUtZGF0YS1zb3VyY2UnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gc3RhdGljRGF0YVNvdXJjZShudWxsKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgUlhBUF9FWFRFUk5BTF9BUFAgPSBuZXcgSW5qZWN0aW9uVG9rZW48RXh0ZXJuYWxBcHA+KCdyeGFwL2xheW91dC9leHRlcm5hbC1hcHAnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfUkVMRUFTRV9JTkZPX01PRFVMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWxlYXNlSW5mb01vZHVsZT4oJ3J4YXAvbGF5b3V0L3JlbGVhc2UtaW5mby1tb2R1bGUnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfU0VUVElOR1NfTUVOVV9JVEVNX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTZXR0aW5nc01lbnVJdGVtQ29tcG9uZW50PigncnhhcC9sYXlvdXQvc2V0dGluZ3MtbWVudS1pdGVtLWNvbXBvbmVudCcpO1xuXG5leHBvcnQgY29uc3QgUlhBUF9ERUZBVUxUX0hFQURFUl9JVEVNX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPHVua25vd24+PigncnhhcC9sYXlvdXQvZGVmYXVsdC1oZWFkZXItaXRlbS1jb21wb25lbnQnKTtcblxuZXhwb3J0IGNvbnN0IFJYQVBfU0VUVElOR1NfTUVOVV9JVEVNID0gbmV3IEluamVjdGlvblRva2VuPFNldHRpbmdzTWVudUl0ZW0+KCdyeGFwL2xheW91dC9zZXR0aW5ncy1tZW51LWl0ZW0nKTtcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2xheW91dC9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBBcHBzTmF2aWdhdGlvbkNvbmZpZyB9IGZyb20gJ0ByeGFwL2NvbmZpZyc7XG5pbXBvcnQgeyBJY29uQ29uZmlnIH0gZnJvbSAnQHJ4YXAvdXRpbGl0aWVzJztcblxuXG5cbmV4cG9ydCB0eXBlIEV4dGVybmFsQXBwID0gQXBwc05hdmlnYXRpb25Db25maWc7XG5leHBvcnQgdHlwZSBFeHRyYWN0VXNlcm5hbWVGcm9tUHJvZmlsZUZuPFQgPSB1bmtub3duPiA9IChwcm9maWxlOiBUKSA9PiBzdHJpbmcgfCBudWxsO1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlSW5mb01vZHVsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBoYXNoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTZXR0aW5nc01lbnVJdGVtQ29tcG9uZW50ID0gQ29tcG9uZW50VHlwZTx1bmtub3duPjtcblxuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc01lbnVJdGVtIHtcbiAgaWNvbj86IEljb25Db25maWc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGFjdGlvbjogKCkgPT4gYW55O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2xheW91dC9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBBcHBzTmF2aWdhdGlvbkNvbmZpZyB9IGZyb20gJ0ByeGFwL2NvbmZpZyc7XG5pbXBvcnQgeyBJY29uQ29uZmlnIH0gZnJvbSAnQHJ4YXAvdXRpbGl0aWVzJztcblxuXG5cbmV4cG9ydCB0eXBlIEV4dGVybmFsQXBwID0gQXBwc05hdmlnYXRpb25Db25maWc7XG5leHBvcnQgdHlwZSBFeHRyYWN0VXNlcm5hbWVGcm9tUHJvZmlsZUZuPFQgPSB1bmtub3duPiA9IChwcm9maWxlOiBUKSA9PiBzdHJpbmcgfCBudWxsO1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlSW5mb01vZHVsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBoYXNoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTZXR0aW5nc01lbnVJdGVtQ29tcG9uZW50ID0gQ29tcG9uZW50VHlwZTx1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdEhlYWRlckl0ZW1Db21wb25lbnQgPSBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzTWVudUl0ZW0ge1xuICBpY29uPzogSWNvbkNvbmZpZztcbiAgbGFiZWw6IHN0cmluZztcbiAgYWN0aW9uOiAoKSA9PiBhbnk7XG59XG4iXX0=
@@ -86,6 +86,7 @@ const RXAP_USER_PROFILE_DATA_SOURCE = new InjectionToken('rxap/layout/user-profi
86
86
  const RXAP_EXTERNAL_APP = new InjectionToken('rxap/layout/external-app');
87
87
  const RXAP_RELEASE_INFO_MODULE = new InjectionToken('rxap/layout/release-info-module');
88
88
  const RXAP_SETTINGS_MENU_ITEM_COMPONENT = new InjectionToken('rxap/layout/settings-menu-item-component');
89
+ const RXAP_DEFAULT_HEADER_ITEM_COMPONENT = new InjectionToken('rxap/layout/default-header-item-component');
89
90
  const RXAP_SETTINGS_MENU_ITEM = new InjectionToken('rxap/layout/settings-menu-item');
90
91
 
91
92
  class FooterService {
@@ -1073,15 +1074,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
1073
1074
  ], template: "@if (hasApps()) {\n <div class=\"flex flex-row items-center gap-8\">\n\n @if (isOpen()) {\n <div class=\"flex flex-row items-center gap-6 h-10\">\n\n @for (app of appList(); track app.label) {\n @if (app.href) {\n <a [href]=\"app.href\" [target]=\"app.target ?? '_self'\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </a>\n } @else if (app.routerLink) {\n <a mat-stroked-button [routerLink]=\"app.routerLink\">\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </a>\n } @else {\n <button mat-stroked-button [disabled]=\"true\">\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </button>\n }\n }\n\n </div>\n }\n\n <button (click)=\"toggle()\" mat-icon-button>\n <mat-icon svgIcon=\"apps\"></mat-icon>\n </button>\n\n </div>\n}\n" }]
1074
1075
  }] });
1075
1076
 
1077
+ class DefaultHeaderService {
1078
+ constructor() {
1079
+ this.components = coerceArray(inject(RXAP_DEFAULT_HEADER_ITEM_COMPONENT, { optional: true }));
1080
+ /**
1081
+ * Represents an array of `Portal` objects with unknown type.
1082
+ *
1083
+ * @typedef {Array<Portal<unknown>>} SignalPortals
1084
+ */
1085
+ this.portals = signal(this.components.map(component => new ComponentPortal(component)));
1086
+ /**
1087
+ * Computes the count of portals.
1088
+ *
1089
+ * @returns {number} The count of portals.
1090
+ */
1091
+ this.portalCount = computed(() => this.portals().length);
1092
+ }
1093
+ /**
1094
+ * Adds a portal to the list of portals.
1095
+ *
1096
+ * @param {Portal<unknown>} portal - The portal to be added.
1097
+ *
1098
+ * @return {void}
1099
+ */
1100
+ pushPortal(portal) {
1101
+ if (!this.portals().includes(portal)) {
1102
+ this.portals.update(portals => [...portals, portal]);
1103
+ }
1104
+ else {
1105
+ if (isDevMode()) {
1106
+ console.warn('Can not add the same portal multiple times');
1107
+ }
1108
+ }
1109
+ }
1110
+ /**
1111
+ * Removes a portal from the list of portals.
1112
+ *
1113
+ * @param {Portal<unknown>} portal - The portal to be removed.
1114
+ * @return {void}
1115
+ */
1116
+ removePortal(portal) {
1117
+ const index = this.portals().indexOf(portal);
1118
+ if (index !== -1) {
1119
+ this.portals.update(portals => {
1120
+ portals.splice(index, 1);
1121
+ return portals.slice();
1122
+ });
1123
+ }
1124
+ }
1125
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1126
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderService }); }
1127
+ }
1128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderService, decorators: [{
1129
+ type: Injectable
1130
+ }] });
1131
+
1076
1132
  class DefaultHeaderComponent {
1077
1133
  constructor() {
1078
1134
  this.layoutComponentService = inject(LayoutService);
1079
1135
  this.collapsable = computed(() => this.layoutComponentService.collapsable());
1080
1136
  this.opened = computed(() => this.layoutComponentService.opened());
1081
1137
  this.profile = toSignal(inject(RXAP_USER_PROFILE_DATA_SOURCE).connect('user-profile'), { initialValue: null });
1138
+ this.defaultHeaderService = inject(DefaultHeaderService);
1139
+ this.portals = computed(() => this.defaultHeaderService.portals());
1140
+ this.hasPortals = computed(() => this.portals().length > 0);
1082
1141
  }
1083
1142
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1084
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DefaultHeaderComponent, isStandalone: true, selector: "rxap-default-header", host: { classAttribute: "grow" }, ngImport: i0, template: "<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow\">\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AppsButtonComponent, selector: "rxap-apps-button" }, { kind: "component", type: SettingsButtonComponent, selector: "rxap-settings-button" }, { kind: "component", type: SidenavToggleButtonComponent, selector: "rxap-sidenav-toggle-button" }, { kind: "component", type: UserProfileIconComponent, selector: "rxap-user-profile-icon", inputs: ["profile"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1143
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DefaultHeaderComponent, isStandalone: true, selector: "rxap-default-header", host: { classAttribute: "grow" }, ngImport: i0, template: "<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow flex flex-row gap-x-4 items-center\">\n @for (portal of portals(); track portal) {\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n }\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AppsButtonComponent, selector: "rxap-apps-button" }, { kind: "component", type: SettingsButtonComponent, selector: "rxap-settings-button" }, { kind: "component", type: SidenavToggleButtonComponent, selector: "rxap-sidenav-toggle-button" }, { kind: "component", type: UserProfileIconComponent, selector: "rxap-user-profile-icon", inputs: ["profile"] }, { kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1085
1144
  }
1086
1145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultHeaderComponent, decorators: [{
1087
1146
  type: Component,
@@ -1090,9 +1149,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
1090
1149
  SettingsButtonComponent,
1091
1150
  SidenavToggleButtonComponent,
1092
1151
  UserProfileIconComponent,
1152
+ MatToolbarRow,
1153
+ CdkPortalOutlet,
1093
1154
  ], host: {
1094
1155
  'class': 'grow',
1095
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow\">\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n" }]
1156
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow flex flex-row gap-x-4 items-center\">\n @for (portal of portals(); track portal) {\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n }\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n" }]
1096
1157
  }] });
1097
1158
 
1098
1159
  function provideLayout(...additionalProviders) {
@@ -1101,6 +1162,7 @@ function provideLayout(...additionalProviders) {
1101
1162
  LogoService,
1102
1163
  HeaderService,
1103
1164
  FooterService,
1165
+ DefaultHeaderService,
1104
1166
  ...additionalProviders,
1105
1167
  ];
1106
1168
  }
@@ -1143,6 +1205,13 @@ function withSettingsMenuItems(...items) {
1143
1205
  })),
1144
1206
  ];
1145
1207
  }
1208
+ function withDefaultHeaderItems(...items) {
1209
+ return items.map(component => ({
1210
+ provide: RXAP_DEFAULT_HEADER_ITEM_COMPONENT,
1211
+ useValue: component,
1212
+ multi: true,
1213
+ }));
1214
+ }
1146
1215
  function withReleaseInfoModules(...module) {
1147
1216
  return module.map(item => ({
1148
1217
  provide: RXAP_RELEASE_INFO_MODULE,
@@ -1190,5 +1259,5 @@ function withUserProfileDataSource(dataSource, useClass = false) {
1190
1259
  * Generated bundle index. Do not edit.
1191
1260
  */
1192
1261
 
1193
- export { AppsButtonComponent, BaseLayoutComponent, DefaultHeaderComponent, EXTRACT_USERNAME_FROM_PROFILE, ExternalAppsService, FooterComponent, FooterDirective, FooterService, HeaderComponent, HeaderDirective, HeaderService, IsNavigationDividerItem, IsNavigationInsertItem, IsNavigationItem, LayoutComponent, LayoutService, LogoService, MinimalLayoutComponent, NavigationComponent, NavigationItemComponent, NavigationProgressBarComponent, NavigationService, RXAP_EXTERNAL_APP, RXAP_EXTERNAL_APP_FILTER, RXAP_FOOTER_COMPONENT, RXAP_HEADER_COMPONENT, RXAP_LAYOUT_APPS_GRID, RXAP_LOGO_CONFIG, RXAP_NAVIGATION_CONFIG, RXAP_NAVIGATION_CONFIG_INSERTS, RXAP_RELEASE_INFO_MODULE, RXAP_SETTINGS_MENU_ITEM, RXAP_SETTINGS_MENU_ITEM_COMPONENT, RXAP_USER_PROFILE_DATA_SOURCE, ReleaseInfoComponent, SettingsButtonComponent, SidenavComponent, SidenavFooterDirective, SidenavHeaderDirective, SidenavToggleButtonComponent, UserProfileIconComponent, provideExternalApps, provideLayout, withDefaultHeaderComponent, withFooterComponents, withHeaderComponents, withNavigationConfig, withNavigationInserts, withReleaseInfoModules, withSettingsMenuItems, withUserProfileDataSource };
1262
+ export { AppsButtonComponent, BaseLayoutComponent, DefaultHeaderComponent, EXTRACT_USERNAME_FROM_PROFILE, ExternalAppsService, FooterComponent, FooterDirective, FooterService, HeaderComponent, HeaderDirective, HeaderService, IsNavigationDividerItem, IsNavigationInsertItem, IsNavigationItem, LayoutComponent, LayoutService, LogoService, MinimalLayoutComponent, NavigationComponent, NavigationItemComponent, NavigationProgressBarComponent, NavigationService, RXAP_DEFAULT_HEADER_ITEM_COMPONENT, RXAP_EXTERNAL_APP, RXAP_EXTERNAL_APP_FILTER, RXAP_FOOTER_COMPONENT, RXAP_HEADER_COMPONENT, RXAP_LAYOUT_APPS_GRID, RXAP_LOGO_CONFIG, RXAP_NAVIGATION_CONFIG, RXAP_NAVIGATION_CONFIG_INSERTS, RXAP_RELEASE_INFO_MODULE, RXAP_SETTINGS_MENU_ITEM, RXAP_SETTINGS_MENU_ITEM_COMPONENT, RXAP_USER_PROFILE_DATA_SOURCE, ReleaseInfoComponent, SettingsButtonComponent, SidenavComponent, SidenavFooterDirective, SidenavHeaderDirective, SidenavToggleButtonComponent, UserProfileIconComponent, provideExternalApps, provideLayout, withDefaultHeaderComponent, withDefaultHeaderItems, withFooterComponents, withHeaderComponents, withNavigationConfig, withNavigationInserts, withReleaseInfoModules, withSettingsMenuItems, withUserProfileDataSource };
1194
1263
  //# sourceMappingURL=rxap-layout.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rxap-layout.mjs","sources":["../../../../../packages/angular/layout/src/lib/sidenav/sidenav-footer.directive.ts","../../../../../packages/angular/layout/src/lib/sidenav/sidenav-header.directive.ts","../../../../../packages/angular/layout/src/lib/tokens.ts","../../../../../packages/angular/layout/src/lib/footer.service.ts","../../../../../packages/angular/layout/src/lib/header.service.ts","../../../../../packages/angular/layout/src/lib/layout.service.ts","../../../../../packages/angular/layout/src/lib/navigation/navigation-item.ts","../../../../../packages/angular/layout/src/lib/navigation.service.ts","../../../../../packages/angular/layout/src/lib/navigation/navigation-item/navigation-item.component.ts","../../../../../packages/angular/layout/src/lib/navigation/navigation-item/navigation-item.component.html","../../../../../packages/angular/layout/src/lib/navigation/navigation.component.ts","../../../../../packages/angular/layout/src/lib/navigation/navigation.component.html","../../../../../packages/angular/layout/src/lib/sidenav/sidenav.component.ts","../../../../../packages/angular/layout/src/lib/sidenav/sidenav.component.html","../../../../../packages/angular/layout/src/lib/release-info/release-info.component.ts","../../../../../packages/angular/layout/src/lib/release-info/release-info.component.html","../../../../../packages/angular/layout/src/lib/navigation-progress-bar/navigation-progress-bar.component.ts","../../../../../packages/angular/layout/src/lib/navigation-progress-bar/navigation-progress-bar.component.html","../../../../../packages/angular/layout/src/lib/footer/footer.component.ts","../../../../../packages/angular/layout/src/lib/footer/footer.component.html","../../../../../packages/angular/layout/src/lib/header/header.component.ts","../../../../../packages/angular/layout/src/lib/header/header.component.html","../../../../../packages/angular/layout/src/lib/base-layout/base-layout.component.ts","../../../../../packages/angular/layout/src/lib/base-layout/base-layout.component.html","../../../../../packages/angular/layout/src/lib/minimal-layout/minimal-layout.component.ts","../../../../../packages/angular/layout/src/lib/minimal-layout/minimal-layout.component.html","../../../../../packages/angular/layout/src/lib/logo.service.ts","../../../../../packages/angular/layout/src/lib/layout/layout.component.ts","../../../../../packages/angular/layout/src/lib/layout/layout.component.html","../../../../../packages/angular/layout/src/lib/header/header.directive.ts","../../../../../packages/angular/layout/src/lib/footer/footer.directive.ts","../../../../../packages/angular/layout/src/lib/default-header/user-profile-icon/user-profile-icon.component.ts","../../../../../packages/angular/layout/src/lib/default-header/user-profile-icon/user-profile-icon.component.html","../../../../../packages/angular/layout/src/lib/default-header/sidenav-toggle-button/sidenav-toggle-button.component.ts","../../../../../packages/angular/layout/src/lib/default-header/sidenav-toggle-button/sidenav-toggle-button.component.html","../../../../../packages/angular/layout/src/lib/default-header/settings-button/settings-button.component.ts","../../../../../packages/angular/layout/src/lib/default-header/settings-button/settings-button.component.html","../../../../../packages/angular/layout/src/lib/external-apps.service.ts","../../../../../packages/angular/layout/src/lib/default-header/apps-button/apps-button.component.ts","../../../../../packages/angular/layout/src/lib/default-header/apps-button/apps-button.component.html","../../../../../packages/angular/layout/src/lib/default-header/default-header.component.ts","../../../../../packages/angular/layout/src/lib/default-header/default-header.component.html","../../../../../packages/angular/layout/src/lib/provide.ts","../../../../../packages/angular/layout/src/index.ts","../../../../../packages/angular/layout/src/rxap-layout.ts"],"sourcesContent":["import {\n Directive,\n Inject,\n TemplateRef,\n} from '@angular/core';\n\n@Directive({\n selector: '[rxapSidenavFooter]',\n standalone: true,\n})\nexport class SidenavFooterDirective {\n constructor(\n @Inject(TemplateRef)\n public readonly template: TemplateRef<void>,\n ) {\n }\n}\n","import {\n Directive,\n Inject,\n TemplateRef,\n} from '@angular/core';\n\n@Directive({\n selector: '[rxapSidenavHeader]',\n standalone: true,\n})\nexport class SidenavHeaderDirective {\n constructor(\n @Inject(TemplateRef)\n public readonly template: TemplateRef<void>,\n ) {\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { InjectionToken } from '@angular/core';\nimport { LogoConfig } from '@rxap/config';\nimport { staticDataSource } from '@rxap/data-source';\nimport {\n DataSource,\n MethodWithParameters,\n} from '@rxap/pattern';\nimport { NavigationWithInserts } from './navigation/navigation-item';\nimport {\n ExternalApp,\n ExtractUsernameFromProfileFn,\n ReleaseInfoModule,\n SettingsMenuItem,\n SettingsMenuItemComponent,\n} from './types';\n\nexport const RXAP_NAVIGATION_CONFIG = new InjectionToken<NavigationWithInserts | (() => NavigationWithInserts)>(\n 'rxap/layout/navigation-config');\nexport const RXAP_NAVIGATION_CONFIG_INSERTS = new InjectionToken<Record<string, NavigationWithInserts>>(\n 'rxap/layout/navigation-config-inserts');\n\nexport const RXAP_FOOTER_COMPONENT = new InjectionToken<ComponentType<unknown>>('rxap/layout/footer-component');\nexport const RXAP_HEADER_COMPONENT = new InjectionToken<ComponentType<unknown>>('rxap/layout/header-component');\nexport const RXAP_LOGO_CONFIG = new InjectionToken<LogoConfig>('rxap/layout/logo-config');\nexport const RXAP_LAYOUT_APPS_GRID = new InjectionToken('rxap/layout/apps-grid');\n\nexport const RXAP_EXTERNAL_APP_FILTER = new InjectionToken<MethodWithParameters<ExternalApp[], ExternalApp[]>>('rxap/layout/app-config-filter');\nexport const EXTRACT_USERNAME_FROM_PROFILE = new InjectionToken<ExtractUsernameFromProfileFn>(\n 'extract-username-from-profile',\n {\n providedIn: 'root',\n factory: () => (profile: any) => (\n profile ? profile.username ?? profile.email ?? profile.name : null\n ) ?? null,\n },\n);\n\nexport const RXAP_USER_PROFILE_DATA_SOURCE = new InjectionToken<DataSource>('rxap/layout/user-profile-data-source', {\n providedIn: 'root',\n factory: () => staticDataSource(null),\n});\n\nexport const RXAP_EXTERNAL_APP = new InjectionToken<ExternalApp>('rxap/layout/external-app');\n\nexport const RXAP_RELEASE_INFO_MODULE = new InjectionToken<ReleaseInfoModule>('rxap/layout/release-info-module');\n\nexport const RXAP_SETTINGS_MENU_ITEM_COMPONENT = new InjectionToken<SettingsMenuItemComponent>('rxap/layout/settings-menu-item-component');\n\nexport const RXAP_SETTINGS_MENU_ITEM = new InjectionToken<SettingsMenuItem>('rxap/layout/settings-menu-item');\n","import {\n ComponentPortal,\n Portal,\n} from '@angular/cdk/portal';\nimport {\n computed,\n inject,\n Injectable,\n isDevMode,\n signal,\n} from '@angular/core';\nimport { RXAP_FOOTER_COMPONENT } from './tokens';\nimport { coerceArray } from '@rxap/utilities';\n\n@Injectable()\nexport class FooterService {\n\n private readonly components = coerceArray(inject(RXAP_FOOTER_COMPONENT, { optional: true }));\n\n /**\n * Represents an array of `Portal` objects with unknown type.\n */\n public readonly portals = signal<Array<Portal<unknown>>>(this.components.map(component => new ComponentPortal(component)));\n\n\n /**\n * Computes the count of portals.\n *\n * @returns {number} The count of portals.\n */\n public readonly portalCount = computed(() => this.portals().length);\n\n /**\n * Adds a portal to the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be added.\n *\n * @return {void}\n */\n public pushPortal(portal: Portal<unknown>) {\n if (!this.portals().includes(portal)) {\n this.portals.update(portals => [ ...portals, portal ]);\n } else {\n if (isDevMode()) {\n console.warn('Can not add the same portal multiple times');\n }\n }\n }\n\n /**\n * Removes a portal from the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be removed.\n * @return {void}\n */\n public removePortal(portal: Portal<unknown>) {\n const index = this.portals().indexOf(portal);\n if (index !== -1) {\n this.portals.update(portals => {\n portals.splice(index, 1);\n return portals.slice();\n });\n }\n }\n\n}\n","import {\n ComponentPortal,\n Portal,\n} from '@angular/cdk/portal';\nimport {\n computed,\n inject,\n Injectable,\n isDevMode,\n signal,\n} from '@angular/core';\nimport { RXAP_HEADER_COMPONENT } from './tokens';\nimport { coerceArray } from '@rxap/utilities';\n\n@Injectable()\nexport class HeaderService {\n\n private readonly components = coerceArray(inject(RXAP_HEADER_COMPONENT, { optional: true }));\n\n /**\n * Represents an array of `Portal` objects with unknown type.\n *\n * @typedef {Array<Portal<unknown>>} SignalPortals\n */\n public readonly portals = signal<Array<Portal<unknown>>>(this.components.map(component => new ComponentPortal(component)));\n\n\n /**\n * Computes the count of portals.\n *\n * @returns {number} The count of portals.\n */\n public readonly portalCount = computed(() => this.portals().length);\n\n\n /**\n * Adds a portal to the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be added.\n *\n * @return {void}\n */\n public pushPortal(portal: Portal<unknown>) {\n if (!this.portals().includes(portal)) {\n this.portals.update(portals => [ ...portals, portal ]);\n } else {\n if (isDevMode()) {\n console.warn('Can not add the same portal multiple times');\n }\n }\n }\n\n /**\n * Removes a portal from the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be removed.\n * @return {void}\n */\n public removePortal(portal: Portal<unknown>) {\n const index = this.portals().indexOf(portal);\n if (index !== -1) {\n this.portals.update(portals => {\n portals.splice(index, 1);\n return portals.slice();\n });\n }\n }\n\n}\n","import { MediaMatcher } from '@angular/cdk/layout';\nimport {\n computed,\n effect,\n inject,\n Injectable,\n isDevMode,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatDrawerMode } from '@angular/material/sidenav';\nimport { ConfigService } from '@rxap/config';\nimport { ObserveCurrentThemeDensity } from '@rxap/ngx-theme';\nimport { Observable } from 'rxjs';\nimport { FooterService } from './footer.service';\nimport { HeaderService } from './header.service';\n\n@Injectable()\nexport class LayoutService {\n\n public readonly opened: WritableSignal<boolean>;\n public readonly mode: WritableSignal<MatDrawerMode>;\n public readonly pinned: WritableSignal<boolean>;\n public readonly collapsable: WritableSignal<boolean>;\n public readonly fixedBottomGap: Signal<number>;\n public readonly fixedTopGap: Signal<number>;\n public readonly currentThemeDensity = toSignal(ObserveCurrentThemeDensity());\n public readonly isMobile: Signal<boolean>;\n public readonly fixedInViewport: WritableSignal<boolean>;\n public readonly collapsed: Signal<boolean>;\n\n private readonly footerService = inject(FooterService);\n private readonly headerService = inject(HeaderService);\n private readonly config = inject(ConfigService);\n private readonly mediaMatcher = inject(MediaMatcher);\n\n constructor() {\n const mobileQuery = this.mediaMatcher.matchMedia('(max-width: 959px)');\n this.isMobile = toSignal(new Observable<boolean>(subscriber => {\n mobileQuery.addEventListener('change', (event) => {\n subscriber.next(event.matches);\n });\n }), { initialValue: mobileQuery.matches });\n\n const initialCollapsable = this.config.get('navigation.collapsable', true);\n const collapsable = initialCollapsable && !this.isMobile();\n const pinned = this.config.get('navigation.pinned', false);\n const mode = this.config.get('navigation.mode', pinned || !collapsable ? 'side' : 'over');\n const opened = this.config.get('navigation.opened', (!collapsable || pinned) && !this.isMobile());\n const fixedInViewport = this.config.get('navigation.fixedInViewport', true);\n\n if (isDevMode()) {\n console.log({\n initialCollapsable,\n collapsable,\n pinned,\n mode,\n opened,\n fixedInViewport,\n });\n }\n\n this.opened = signal(opened);\n this.mode = signal(mode);\n this.pinned = signal(pinned);\n this.collapsable = signal(collapsable);\n this.fixedInViewport = signal(fixedInViewport);\n this.collapsed = computed(() => this.collapsable() && !this.opened() && !this.pinned());\n\n this.fixedBottomGap = computed(() => {\n const footerPortalCount = this.footerService.portalCount();\n const currentThemeDensity = this.currentThemeDensity() ?? 0;\n return footerPortalCount * (currentThemeDensity * 4 + 64);\n });\n\n this.fixedTopGap = computed(() => {\n const headerPortalCount = this.headerService.portalCount();\n const currentThemeDensity = this.currentThemeDensity() ?? 0;\n return headerPortalCount * (currentThemeDensity * 4 + 64);\n });\n\n if (initialCollapsable) {\n effect(() => {\n const isMobile = this.isMobile();\n this.collapsable.set(!isMobile);\n if (!isMobile && !this.pinned()) {\n this.opened.set(false);\n }\n }, { allowSignalWrites: true });\n }\n effect(() => {\n if (this.pinned()) {\n this.mode.set('side');\n this.opened.set(true);\n } else {\n this.mode.set('over');\n this.opened.set(false);\n }\n }, { allowSignalWrites: true });\n }\n\n public toggleOpened() {\n this.opened.update(opened => !opened);\n }\n\n public togglePinned() {\n this.pinned.update(pinned => !pinned);\n }\n\n openSidenav() {\n this.opened.set(true);\n }\n\n closeSidenav() {\n this.opened.set(false);\n }\n}\n","import { IconConfig } from '@rxap/utilities';\nimport {\n AbstractType,\n InjectionToken,\n Type,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport type Navigation = Array<NavigationItem | NavigationDividerItem>;\n\nexport type NavigationWithInserts = Array<\n | NavigationItem<NavigationWithInserts>\n | NavigationDividerItem\n | NavigationInsertItem\n>;\n\nexport interface NavigationDividerItem {\n divider: boolean;\n title?: string;\n}\n\nexport function IsNavigationDividerItem(\n item: any,\n): item is NavigationDividerItem {\n return !!item && !!item['divider'];\n}\n\nexport interface NavigationInsertItem {\n insert: string;\n}\n\nexport function IsNavigationInsertItem(\n item: any,\n): item is NavigationInsertItem {\n return !!item && !!item['insert'];\n}\n\nexport interface NavigationStatus {\n isVisible(\n navigationItem: NavigationItem,\n ): Observable<boolean> | Promise<boolean> | boolean;\n}\n\nexport interface NavigationItem<Children = Navigation> extends Record<string, unknown> {\n routerLink: string[] | string;\n label: string;\n children?: Children;\n icon?: IconConfig;\n status?: Array<\n | Type<NavigationStatus>\n | InjectionToken<NavigationStatus>\n | AbstractType<NavigationStatus>\n >;\n}\n\nexport function IsNavigationItem(item: any): item is NavigationItem {\n return (\n !!item && !!item['routerLink'] && !!item['label']\n );\n}\n","import {\n inject,\n Inject,\n Injectable,\n Injector,\n INJECTOR,\n Optional,\n} from '@angular/core';\nimport {\n combineLatest,\n from,\n Observable,\n of,\n ReplaySubject,\n} from 'rxjs';\nimport {\n catchError,\n map,\n switchMap,\n} from 'rxjs/operators';\nimport {\n IsNavigationDividerItem,\n IsNavigationInsertItem,\n IsNavigationItem,\n Navigation,\n NavigationDividerItem,\n NavigationItem,\n NavigationWithInserts,\n} from './navigation/navigation-item';\nimport {\n RXAP_NAVIGATION_CONFIG,\n RXAP_NAVIGATION_CONFIG_INSERTS,\n} from './tokens';\n\n@Injectable()\nexport class NavigationService {\n public readonly config$: Observable<Navigation>;\n\n private inserts = new Map<string, NavigationWithInserts>();\n\n private readonly navigation: NavigationWithInserts;\n\n private readonly navigation$ = new ReplaySubject<Navigation>(1);\n\n private readonly injector: Injector = inject(INJECTOR);\n\n constructor(\n @Inject(RXAP_NAVIGATION_CONFIG)\n navigation: any,\n @Optional()\n @Inject(RXAP_NAVIGATION_CONFIG_INSERTS)\n inserts: any | null = null,\n ) {\n if (typeof navigation === 'function') {\n this.navigation = navigation();\n } else {\n this.navigation = navigation;\n }\n if (inserts) {\n Object.entries(inserts).forEach(([ id, insert ]: [ string, any ]) =>\n this.insert(id, insert, false),\n );\n }\n this.updateNavigation();\n this.config$ = this.navigation$.pipe(\n switchMap((navigationWithoutStatusCheck) =>\n this.checkNavigationStatusProviders(navigationWithoutStatusCheck),\n ),\n );\n }\n\n /**\n * @deprecated use add instead\n * @param id\n * @param value\n * @param update\n */\n public insert(\n id: string,\n value: NavigationWithInserts,\n update = true,\n ): void {\n this.add(id, value, update);\n }\n\n public add(\n id: string,\n value: NavigationWithInserts,\n update = true,\n ): void {\n this.inserts.set(id, value);\n if (update) {\n this.updateNavigation();\n }\n }\n\n public has(id: string): boolean {\n return this.inserts.has(id);\n }\n\n public get(id: string): NavigationWithInserts | undefined {\n return this.inserts.get(id);\n }\n\n public remove(id: string, update = true): void {\n this.inserts.delete(id);\n if (update) {\n this.updateNavigation();\n }\n }\n\n public updateNavigation(): void {\n this.navigation$.next(this.replaceInserts(this.navigation));\n }\n\n /**\n * @internal\n * @param navigationItem\n */\n public checkNavigationItemStatusProviders(\n navigationItem: NavigationItem | NavigationDividerItem,\n ): Observable<NavigationItem | NavigationDividerItem | null> {\n if (IsNavigationDividerItem(navigationItem) || !navigationItem.status) {\n return of(navigationItem);\n }\n const isVisibleArray$: Array<Observable<boolean>> = navigationItem\n .status\n .map((statusToken) => this.injector.get(\n statusToken))\n .map((status) => {\n const isVisible = status.isVisible(\n navigationItem);\n if (typeof isVisible === 'boolean') {\n return of(isVisible);\n } else {\n return from(isVisible);\n }\n })\n .map(isVisible$ => isVisible$.pipe(catchError(e => {\n console.error(`isVisible method failed: ${ e.message }`);\n return of(false);\n })));\n // TODO : dont wait for all status services to complete, but cancel waiting if one returns false\n return combineLatest(isVisibleArray$).pipe(\n map((isVisibleArray) =>\n isVisibleArray.reduce((acc, isVisible) => acc && isVisible, true),\n ),\n map((isVisible) => (isVisible ? navigationItem : null)),\n switchMap((navigationItemOrNull) => {\n if (navigationItemOrNull) {\n if (navigationItemOrNull.children?.length) {\n return this.checkNavigationStatusProviders(\n navigationItemOrNull.children,\n ).pipe(\n map((children) => ({\n ...navigationItemOrNull,\n children,\n })),\n );\n }\n return of(navigationItemOrNull);\n }\n return of(null);\n }),\n );\n }\n\n /**\n * @internal\n * @param navigationItem\n */\n public checkNavigationStatusProviders(\n navigation: Navigation,\n ): Observable<Navigation> {\n return combineLatest(\n navigation.map((navigationItem) =>\n this.checkNavigationItemStatusProviders(navigationItem),\n ),\n ).pipe(\n map((navigationWithNullItems) => {\n const cleanNavigation: Navigation = [];\n\n for (const navigationItem of navigationWithNullItems) {\n if (navigationItem !== null) {\n cleanNavigation.push(navigationItem);\n }\n }\n\n return cleanNavigation;\n }),\n );\n }\n\n private replaceInserts(\n navigationWithInserts: NavigationWithInserts,\n ): Navigation {\n const navigation: Navigation = [];\n\n for (const navigationItem of navigationWithInserts) {\n if (IsNavigationInsertItem(navigationItem)) {\n if (this.inserts.has(navigationItem.insert)) {\n navigation.push(\n ...this.replaceInserts(this.inserts.get(navigationItem.insert)!),\n );\n }\n } else if (IsNavigationItem(navigationItem)) {\n navigation.push({\n ...navigationItem,\n children: this.replaceInserts(navigationItem.children ?? []),\n });\n } else if (IsNavigationDividerItem(navigationItem)) {\n navigation.push(navigationItem);\n }\n }\n\n return navigation;\n }\n}\n","import {\n animate,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport {\n NgClass,\n NgIf,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnChanges,\n OnDestroy,\n Renderer2,\n signal,\n SimpleChanges,\n viewChild,\n ViewEncapsulation, AfterViewInit,\n} from '@angular/core';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n NavigationEnd,\n Router,\n RouterLink,\n RouterLinkActive,\n} from '@angular/router';\nimport { IconDirective } from '@rxap/material-directives/icon';\nimport { coerceArray } from '@rxap/utilities';\nimport {\n debounceTime,\n Subscription,\n} from 'rxjs';\nimport {\n filter,\n startWith,\n tap,\n} from 'rxjs/operators';\nimport { LayoutService } from '../../layout.service';\nimport {\n Navigation,\n NavigationDividerItem,\n NavigationItem,\n} from '../navigation-item';\nimport { NavigationComponent } from '../navigation.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'li[rxap-navigation-item]',\n templateUrl: './navigation-item.component.html',\n styleUrls: [ './navigation-item.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('sub-nav', [\n transition(':enter', [\n style({\n display: 'block',\n height: '0',\n overflow: 'hidden',\n }),\n animate(150, style({ height: '*' })),\n ]),\n transition(':leave', [\n style({ overflow: 'hidden' }),\n animate(300, style({ height: '0' })),\n style({ display: 'none' }),\n ]),\n ]),\n ],\n standalone: true,\n imports: [\n RouterLinkActive,\n RouterLink,\n NgIf,\n MatRippleModule,\n MatIconModule,\n IconDirective,\n MatDividerModule,\n forwardRef(() => NavigationComponent),\n NgClass,\n ]\n})\nexport class NavigationItemComponent\n implements OnChanges, OnDestroy, AfterViewInit {\n\n public readonly level = input(0);\n\n public children: Navigation | null = null;\n\n public readonly item = input.required<NavigationItem>();\n public readonly active = signal(false);\n\n public readonly itemClasses = computed(() => {\n let classes = `level-${ this.level() * 4 }`;\n if (this.collapsed()) {\n classes += ' invisible';\n }\n return classes;\n });\n\n private readonly layoutService = inject(LayoutService);\n\n public readonly collapsed = computed(() => this.layoutService.collapsed());\n\n private readonly _subscription = new Subscription();\n\n private readonly router = inject(Router);\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes['item']) {\n const item: NavigationItem = changes['item'].currentValue;\n this.children =\n item.children && item.children.length ? item.children : null;\n }\n }\n\n public ngAfterViewInit() {\n this._subscription.add(\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n debounceTime(100),\n startWith(true),\n tap(() => {\n let isActive = true;\n const urlParts = this.router.url.split('/');\n if (urlParts[0] === '') {\n urlParts[0] = '/';\n }\n const routerLink = coerceArray(this.item().routerLink).map(fragment => fragment.split('/')).flat();\n if (routerLink[0] === '') {\n routerLink[0] = '/';\n }\n for (let i = 0; i < routerLink.length; i++) {\n if (urlParts[i] !== routerLink[i]) {\n isActive = false;\n break;\n }\n }\n this.active.set(isActive);\n if (isActive) {\n this.renderer.addClass(this.elementRef.nativeElement, 'active');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'active');\n }\n }),\n )\n .subscribe(),\n );\n }\n\n public ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n // region type save item property\n\n // required to check the type of the item property in the ngFor loop\n\n public isNavigationDividerItem(\n item: NavigationItem | NavigationDividerItem,\n ): item is NavigationDividerItem {\n return (item as any)['divider'];\n }\n\n public isNavigationItem(\n item: NavigationItem | NavigationDividerItem,\n ): item is NavigationItem {\n return !this.isNavigationDividerItem(item);\n }\n\n public asNavigationItem(\n item: NavigationItem | NavigationDividerItem,\n ): NavigationItem {\n if (!this.isNavigationItem(item)) {\n throw new Error('The item is not a NavigationItem');\n }\n return item;\n }\n\n // endregion\n}\n","<div [ngClass]=\"{\n 'border-l-4 text-accent-400 border-accent-600': active(),\n }\">\n <a [routerLink]=\"item().routerLink\"\n class=\"h-12 pl-4 pr-5 flex flex-row justify-between items-center gap-x-4\"\n matRipple\n routerLinkActive\n\n >\n <span\n [ngClass]=\"itemClasses()\"\n class=\"grow whitespace-nowrap\"\n >\n {{ item().label }}\n </span>\n <mat-icon *ngIf=\"item().icon as icon\" [rxapIcon]=\"icon\"></mat-icon>\n </a>\n\n <ng-container *ngIf=\"item().children?.length && active()\">\n\n <mat-divider></mat-divider>\n\n <ul [@sub-nav]\n [items]=\"children ?? []\"\n [level]=\"level() + 1\"\n rxap-navigation\n >\n </ul>\n\n <mat-divider></mat-divider>\n\n </ng-container>\n</div>\n","import {\n AsyncPipe,\n NgFor,\n NgIf,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n INJECTOR,\n input,\n OnInit,\n runInInjectionContext,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { LayoutService } from '../layout.service';\nimport { NavigationService } from '../navigation.service';\nimport {\n Navigation,\n NavigationDividerItem,\n NavigationItem,\n} from './navigation-item';\nimport { NavigationItemComponent } from './navigation-item/navigation-item.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'ul[rxap-navigation]',\n templateUrl: './navigation.component.html',\n styleUrls: [ './navigation.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n class: 'list-none dark:text-neutral-400 text-neutral-700',\n },\n imports: [\n NgFor,\n NgIf,\n MatDividerModule,\n forwardRef(() => NavigationItemComponent),\n AsyncPipe,\n ],\n})\nexport class NavigationComponent implements OnInit {\n\n public items = input<Navigation>();\n\n public level = input(0);\n\n private readonly navigationService = inject(NavigationService);\n\n private readonly layoutService = inject(LayoutService);\n\n public readonly collapsed = computed(() => this.layoutService.collapsed());\n\n public navigationItems = computed(() => this.items() ?? []);\n\n public readonly root = input(false);\n\n private readonly injector = inject(INJECTOR);\n\n public ngOnInit(): void {\n if (this.root()) {\n runInInjectionContext(this.injector, () => {\n this.navigationItems = toSignal(this.navigationService.config$, { initialValue: [] });\n });\n }\n }\n // region type save item property\n\n // required to check the type of the item property in the ngFor loop\n\n public isNavigationDividerItem(\n item: NavigationItem | NavigationDividerItem,\n ): item is NavigationDividerItem {\n return (item as any)['divider'];\n }\n\n public isNavigationItem(\n item: NavigationItem | NavigationDividerItem,\n ): item is NavigationItem {\n return !this.isNavigationDividerItem(item);\n }\n\n public asNavigationItem(\n item: NavigationItem | NavigationDividerItem,\n ): NavigationItem {\n if (!this.isNavigationItem(item)) {\n throw new Error('The item is not a NavigationItem');\n }\n return item;\n }\n\n // endregion\n}\n","<ng-template [ngForOf]=\"navigationItems()\" let-item ngFor>\n <ng-template [ngIf]=\"isNavigationDividerItem(item)\">\n <mat-divider></mat-divider>\n <div *ngIf=\"!collapsed() && item.title\" class=\"pl-5 h-6\">\n {{item.title}}\n </div>\n </ng-template>\n <ng-template [ngIf]=\"isNavigationItem(item)\">\n <li [item]=\"asNavigationItem(item)\"\n [level]=\"level()\"\n class=\"dark:hover:text-white hover:text-black\"\n rxap-navigation-item>\n </li>\n </ng-template>\n</ng-template>\n","import {\n NgClass,\n NgIf,\n NgStyle,\n NgTemplateOutlet,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n Signal,\n viewChild,\n} from '@angular/core';\nimport {\n MatButton,\n MatIconButton,\n} from '@angular/material/button';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n MatDrawerMode,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n} from '@angular/material/sidenav';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '../layout.service';\nimport { NavigationComponent } from '../navigation/navigation.component';\nimport { SidenavFooterDirective } from './sidenav-footer.directive';\nimport { SidenavHeaderDirective } from './sidenav-header.directive';\n\n@Component({\n selector: 'rxap-sidenav',\n templateUrl: './sidenav.component.html',\n styleUrls: [ './sidenav.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatIcon,\n MatIconButton,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n NavigationComponent,\n NgIf,\n RouterOutlet,\n NgClass,\n NgStyle,\n MatDivider,\n NgTemplateOutlet,\n MatButton,\n ],\n})\nexport class SidenavComponent {\n\n private readonly layoutService = inject(LayoutService);\n\n\n private readonly sidenav = viewChild(MatSidenav);\n\n public readonly sidenavMode: Signal<MatDrawerMode> = computed(() => this.layoutService.mode());\n public readonly fixedBottomGap: Signal<number> = computed(() => this.layoutService.fixedBottomGap());\n public readonly fixedTopGap: Signal<number> = computed(() => this.layoutService.fixedTopGap());\n public readonly fixedInViewport: Signal<boolean> = computed(() => this.layoutService.fixedInViewport());\n public readonly pinned: Signal<boolean> = computed(() => this.layoutService.pinned());\n public readonly collapsed: Signal<boolean> = computed(() => this.layoutService.collapsed());\n public readonly collapsable: Signal<boolean> = computed(() => this.layoutService.collapsable());\n public readonly opened: Signal<boolean> = computed(() => this.layoutService.opened());\n public readonly sidenavFooterDirective = contentChild(SidenavFooterDirective);\n public readonly sidenavHeaderDirective = contentChild(SidenavHeaderDirective);\n\n togglePinned() {\n this.layoutService.togglePinned();\n }\n\n async openSidenav() {\n await this.sidenav()?.open();\n this.layoutService.openSidenav();\n }\n\n async closeSidenav() {\n await this.sidenav()?.close();\n this.layoutService.closeSidenav();\n }\n\n}\n","<mat-sidenav-container [ngStyle]=\"{\n 'padding-top.px': fixedTopGap(),\n 'padding-bottom.px': fixedBottomGap(),\n }\" class=\"h-full\">\n <mat-sidenav\n [fixedBottomGap]=\"fixedBottomGap()\"\n [fixedInViewport]=\"fixedInViewport()\"\n [fixedTopGap]=\"fixedTopGap()\"\n [mode]=\"sidenavMode()\"\n [ngClass]=\"{ collapsable: collapsable() }\"\n [opened]=\"opened()\"\n >\n <div (mouseleave)=\"collapsable() && !pinned() && closeSidenav()\"\n class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"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 @if (sidenavHeaderDirective()?.template; as template) {\n <div [ngClass]=\"{ hidden: collapsed() }\" class=\"header grow-0\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n <mat-divider [ngClass]=\"{ hidden: collapsed() }\" class=\"grow-0\"></mat-divider>\n }\n\n <ul\n (mouseenter)=\"collapsable() && !pinned() && openSidenav()\"\n class=\"grow self-stretch\"\n [root]=\"true\"\n rxap-navigation\n >\n </ul>\n\n @if (sidenavFooterDirective()?.template; as template) {\n <mat-divider [ngClass]=\"{ hidden: collapsed() }\" class=\"grow-0\"></mat-divider>\n <div [ngClass]=\"{ hidden: collapsed() }\" class=\"footer grow-0\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n }\n </div>\n </mat-sidenav>\n <mat-sidenav-content [ngClass]=\"{ 'ml-16': collapsable() }\" class=\"p-4\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n DetermineReleaseName,\n EnvironmentComponent,\n RXAP_ENVIRONMENT,\n} from '@rxap/environment';\nimport { RXAP_RELEASE_INFO_MODULE } from '../tokens';\nimport { coerceArray } from '@rxap/utilities';\n\n@Component({\n selector: 'rxap-release-info',\n standalone: true,\n imports: [\n MatButton,\n ],\n templateUrl: './release-info.component.html',\n styleUrl: './release-info.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ReleaseInfoComponent {\n\n public readonly modules = coerceArray(inject(RXAP_RELEASE_INFO_MODULE, { optional: true }));\n public readonly release = DetermineReleaseName(inject(RXAP_ENVIRONMENT));\n\n private readonly dialog = inject(MatDialog);\n\n openEnvironmentInfo() {\n this.dialog.open(EnvironmentComponent, {\n closeOnNavigation: true,\n });\n }\n\n}\n","<div class=\"flex flex-col gap-2 w-full justify-center\">\n <button (click)=\"openEnvironmentInfo()\" mat-button>{{ release }}</button>\n @if (modules.length) {\n <table class=\"table-auto border-separate border-spacing-2 bg-white dark:bg-slate-800 text-sm shadow-sm\">\n <thead class=\"bg-slate-50 dark:bg-slate-700\">\n <th class=\"text-sm border-slate-300 dark:border-slate-600 text-slate-900 dark:text-slate-200 border p-2\">Module</th>\n <th class=\"text-sm border-slate-300 dark:border-slate-600 text-slate-900 dark:text-slate-200 border p-2\">Version</th>\n <th class=\"text-sm border-slate-300 dark:border-slate-600 text-slate-900 dark:text-slate-200 border p-2\">Hash</th>\n </thead>\n <tbody>\n @for (module of modules; track module.name) {\n <tr>\n <th class=\"text-sm border border-slate-300 dark:border-slate-700 text-slate-500 dark:text-slate-400 py-2 px-4\">{{ module.name }}</th>\n <td class=\"text-sm border border-slate-300 dark:border-slate-700 text-slate-500 dark:text-slate-400 p-2\">{{ module.version }}</td>\n <td class=\"text-sm border border-slate-300 dark:border-slate-700 text-slate-500 dark:text-slate-400 p-2\">{{ module.hash }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport {\n NavigationCancel,\n NavigationEnd,\n NavigationStart,\n Router,\n} from '@angular/router';\nimport {\n filter,\n map,\n} from 'rxjs/operators';\n\n@Component({\n selector: 'rxap-navigation-progress-bar',\n templateUrl: './navigation-progress-bar.component.html',\n styleUrls: [ './navigation-progress-bar.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatProgressBar,\n ],\n})\nexport class NavigationProgressBarComponent {\n\n public readonly router = inject(Router);\n\n public readonly navigating = toSignal(this.router.events.pipe(\n filter(\n event =>\n event instanceof NavigationStart ||\n event instanceof NavigationEnd ||\n event instanceof NavigationCancel,\n ),\n map(event => event instanceof NavigationStart),\n ), { initialValue: true });\n\n}\n","@if (navigating()) {\n<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar>\n}\n","import { PortalModule } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { FooterService } from '../footer.service';\n\n@Component({\n selector: 'rxap-footer',\n templateUrl: './footer.component.html',\n styleUrls: [ './footer.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [ MatToolbarModule, PortalModule ],\n})\nexport class FooterComponent {\n\n private readonly footerService = inject(FooterService);\n\n public readonly portals = computed(() => this.footerService.portals());\n public readonly hasPortals = computed(() => this.portals().length > 0);\n\n}\n","@if (hasPortals()) {\n <mat-toolbar class=\"mat-elevation-z1\">\n @for (portal of portals(); track portal) {\n <mat-toolbar-row>\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n </mat-toolbar-row>\n }\n </mat-toolbar>\n}\n","import { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport {\n MatToolbar,\n MatToolbarRow,\n} from '@angular/material/toolbar';\nimport { HeaderService } from '../header.service';\n\n@Component({\n selector: 'rxap-header',\n templateUrl: './header.component.html',\n styleUrls: [ './header.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatToolbar,\n MatToolbarRow,\n CdkPortalOutlet,\n ],\n})\nexport class HeaderComponent {\n\n public readonly color = input<ThemePalette>();\n\n private readonly headerService = inject(HeaderService);\n\n public readonly portals = computed(() => this.headerService.portals());\n public readonly hasPortals = computed(() => this.portals().length > 0);\n\n}\n","@if (hasPortals()) {\n <mat-toolbar [color]=\"color()\" class=\"mat-elevation-z1\">\n @for (portal of portals(); track portal) {\n <mat-toolbar-row>\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n </mat-toolbar-row>\n }\n </mat-toolbar>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n} from '@angular/core';\nimport { FooterComponent } from '../footer/footer.component';\nimport { HeaderComponent } from '../header/header.component';\n\n@Component({\n selector: 'rxap-base-layout',\n standalone: true,\n imports: [\n HeaderComponent,\n FooterComponent,\n ],\n templateUrl: './base-layout.component.html',\n styleUrl: './base-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BaseLayoutComponent {}\n","<rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n<ng-content></ng-content>\n<rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n","import {\n ChangeDetectionStrategy,\n Component,\n} from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { BaseLayoutComponent } from '../base-layout/base-layout.component';\nimport { FooterComponent } from '../footer/footer.component';\nimport { HeaderComponent } from '../header/header.component';\nimport { NavigationProgressBarComponent } from '../navigation-progress-bar/navigation-progress-bar.component';\n\n@Component({\n selector: 'rxap-minimal-layout',\n standalone: true,\n imports: [ RouterOutlet, BaseLayoutComponent, NavigationProgressBarComponent, HeaderComponent, FooterComponent ],\n templateUrl: './minimal-layout.component.html',\n styleUrl: './minimal-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MinimalLayoutComponent {}\n","<rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n<rxap-navigation-progress-bar></rxap-navigation-progress-bar>\n<router-outlet></router-outlet>\n<rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n","import {\n computed,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport { ConfigService } from '@rxap/config';\nimport { RXAP_LOGO_CONFIG } from './tokens';\n\n@Injectable()\nexport class LogoService {\n\n private readonly config = inject(ConfigService);\n public readonly logo = signal(\n inject(RXAP_LOGO_CONFIG, { optional: true }) ??\n this.config.get('logo', {\n src: 'logo.png',\n width: 192,\n }),\n );\n\n public readonly src = computed(() => this.logo().src);\n public readonly width = computed(() => this.logo().width);\n public readonly height = computed(() => this.logo().height);\n\n}\n","import {\n AsyncPipe,\n NgClass,\n NgIf,\n NgOptimizedImage,\n NgStyle,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n Signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport {\n RouterLink,\n RouterOutlet,\n} from '@angular/router';\nimport { FooterComponent } from '../footer/footer.component';\nimport { HeaderComponent } from '../header/header.component';\nimport { LogoService } from '../logo.service';\nimport { NavigationProgressBarComponent } from '../navigation-progress-bar/navigation-progress-bar.component';\nimport { NavigationComponent } from '../navigation/navigation.component';\nimport { ReleaseInfoComponent } from '../release-info/release-info.component';\nimport { SidenavFooterDirective } from '../sidenav/sidenav-footer.directive';\nimport { SidenavComponent } from '../sidenav/sidenav.component';\n\n\n@Component({\n selector: 'rxap-layout',\n templateUrl: './layout.component.html',\n styleUrls: [ './layout.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n HeaderComponent,\n MatSidenavModule,\n AsyncPipe,\n MatIconModule,\n MatButtonModule,\n RouterLink,\n NgIf,\n FooterComponent,\n MatMenuModule,\n NgOptimizedImage,\n NavigationComponent,\n RouterOutlet,\n NgStyle,\n NgClass,\n SidenavComponent,\n ReleaseInfoComponent,\n SidenavFooterDirective,\n NavigationProgressBarComponent,\n ],\n})\nexport class LayoutComponent {\n\n private readonly logoService = inject(LogoService);\n public readonly logoSrc: Signal<string> = computed(() => this.logoService.src());\n public readonly logoWidth: Signal<number> = computed(() => this.logoService.width());\n public readonly logoHeight: Signal<number> = computed(() => this.logoService.height());\n\n}\n","<rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n<rxap-navigation-progress-bar></rxap-navigation-progress-bar>\n<rxap-sidenav>\n <router-outlet></router-outlet>\n <ng-template rxapSidenavFooter>\n <img\n [src]=\"logoSrc()\"\n [routerLink]=\"['/']\"\n [width]=\"logoWidth()\"\n [height]=\"logoHeight()\"\n alt=\"logo\"\n class=\"grow-0 mx-16 cursor-pointer\"\n />\n <div class=\"grow-0 px-16 mt-4\">\n <rxap-release-info></rxap-release-info>\n </div>\n </ng-template>\n</rxap-sidenav>\n<rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport {\n Directive,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { HeaderService } from '../header.service';\n\n@Directive({\n selector: '[rxapHeader]',\n standalone: true,\n})\nexport class HeaderDirective implements OnInit, OnDestroy {\n private _portal?: TemplatePortal<void>;\n\n private readonly headerService = inject(HeaderService);\n private readonly template: TemplateRef<void> = inject(TemplateRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n public ngOnInit() {\n this._portal = new TemplatePortal<void>(\n this.template,\n this.viewContainerRef,\n );\n this.headerService.pushPortal(this._portal);\n }\n\n public ngOnDestroy() {\n if (this._portal) {\n this.headerService.removePortal(this._portal);\n }\n }\n}\n\n\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport {\n Directive,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { FooterService } from '../footer.service';\n\n@Directive({\n selector: '[rxapFooter]',\n standalone: true,\n})\nexport class FooterDirective implements OnInit, OnDestroy {\n private _portal?: TemplatePortal<void>;\n\n private readonly footerService = inject(FooterService);\n private readonly template: TemplateRef<void> = inject(TemplateRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n public ngOnInit() {\n this._portal = new TemplatePortal<void>(\n this.template,\n this.viewContainerRef,\n );\n this.footerService.pushPortal(this._portal);\n }\n\n public ngOnDestroy() {\n if (this._portal) {\n this.footerService.removePortal(this._portal);\n }\n }\n}\n\n\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport {\n PubSubService,\n RXAP_TOPICS,\n} from '@rxap/ngx-pub-sub';\nimport { EXTRACT_USERNAME_FROM_PROFILE } from '../../tokens';\nimport { ExtractUsernameFromProfileFn } from '../../types';\n\n@Component({\n selector: 'rxap-user-profile-icon',\n templateUrl: './user-profile-icon.component.html',\n styleUrls: [ './user-profile-icon.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatMenuModule,\n MatIconModule,\n ],\n})\nexport class UserProfileIconComponent {\n\n private readonly extractUsernameFromProfile: ExtractUsernameFromProfileFn = inject(EXTRACT_USERNAME_FROM_PROFILE);\n private readonly pubSubService = inject(PubSubService);\n\n public readonly profile = input.required();\n\n public readonly username = computed(() => {\n const profile = this.profile();\n if (profile) {\n return this.extractUsernameFromProfile(profile);\n }\n return null;\n });\n\n public logout() {\n this.pubSubService.publish(RXAP_TOPICS.authentication.logout);\n }\n\n\n}\n","<button [matMenuTriggerFor]=\"menu\"\n class=\"rounded-full cursor-pointer outline-none overflow-hidden h-8 w-8 bg-center bg-no-repeat bg-cover flex flex-row justify-center items-center\">\n <mat-icon class=\"h-8 w-8 text-[32px]\" svgIcon=\"account-circle\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\" class=\"!max-w-none\">\n @if (this.username(); as username) {\n <button mat-menu-item>\n <span class=\"flex flex-row gap-2\">\n <mat-icon svgIcon=\"account\"></mat-icon>\n <span>{{username}}</span>\n </span>\n </button>\n }\n <button (click)=\"logout()\" mat-menu-item>\n <span class=\"flex flex-row gap-2\">\n <mat-icon svgIcon=\"logout\"></mat-icon>\n <span i18n>Logout</span>\n </span>\n </button>\n</mat-menu>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { LayoutService } from '../../layout.service';\n\n@Component({\n selector: 'rxap-sidenav-toggle-button',\n templateUrl: './sidenav-toggle-button.component.html',\n styleUrls: [ './sidenav-toggle-button.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatIcon,\n MatIconButton,\n ],\n})\nexport class SidenavToggleButtonComponent {\n\n private readonly layoutComponentService = inject(LayoutService);\n\n public readonly opened = computed(() => this.layoutComponentService.opened());\n\n public toggle() {\n this.layoutComponentService.toggleOpened();\n }\n\n}\n","<button (click)=\"toggle()\" mat-icon-button>\n @if (opened()) {\n <mat-icon>menu_open</mat-icon>\n } @else {\n <mat-icon>menu</mat-icon>\n }\n</button>\n","import {\n CdkPortalOutlet,\n ComponentPortal,\n} from '@angular/cdk/portal';\nimport { NgIf } from '@angular/common';\nimport {\n Component,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext,\n signal,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n} from '@angular/material/menu';\nimport { IconDirective } from '@rxap/material-directives/icon';\nimport {\n ThemeService,\n} from '@rxap/ngx-theme';\nimport {\n coerceArray,\n ThemeDensity,\n} from '@rxap/utilities';\nimport {\n RXAP_SETTINGS_MENU_ITEM,\n RXAP_SETTINGS_MENU_ITEM_COMPONENT,\n} from '../../tokens';\nimport { SettingsMenuItem } from '../../types';\n\n@Component({\n selector: 'rxap-settings-button',\n standalone: true,\n templateUrl: './settings-button.component.html',\n styleUrls: [ './settings-button.component.scss' ],\n imports: [\n MatIconButton,\n MatIcon,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n CdkPortalOutlet,\n IconDirective,\n NgIf,\n ],\n})\nexport class SettingsButtonComponent {\n\n public isDevMode = isDevMode();\n\n public readonly theme = inject(ThemeService);\n private readonly injector = inject(Injector);\n\n customItemComponents = signal(\n coerceArray(inject(RXAP_SETTINGS_MENU_ITEM_COMPONENT, { optional: true }))\n .map(item => new ComponentPortal(item, null, this.injector)),\n );\n\n customItems = signal(coerceArray(inject(RXAP_SETTINGS_MENU_ITEM, { optional: true })));\n\n private savePreviewDensityValue = false;\n private currentDensityValue: ThemeDensity | null = null;\n\n private savePreviewTypographyValue = false;\n private currentTypographyValue: string | null = null;\n\n public readonly availableTypographies = this.theme.getAvailableTypographies();\n private savePreviewThemeValue = false;\n\n public readonly availableThemes = this.theme.getAvailableThemes();\n private currentThemeValue: string | null = null;\n\n previewDensity(density: ThemeDensity) {\n this.theme.applyDensity(density);\n }\n\n restoreDensity() {\n this.theme.applyDensity(this.theme.density());\n }\n\n setDensity(density: ThemeDensity) {\n this.theme.setDensity(density);\n }\n\n previewTypography(typography: string) {\n this.theme.applyTypography(typography);\n }\n\n restoreTypography() {\n this.theme.applyTypography(this.theme.typography());\n }\n\n setTypography(typography: string) {\n this.theme.setTypography(typography);\n }\n\n previewTheme(theme: string) {\n this.theme.applyTheme(theme);\n }\n\n restoreTheme() {\n this.theme.applyTheme(this.theme.themeName());\n }\n\n setTheme(theme: string) {\n this.theme.setTheme(theme);\n }\n\n clickItem(item: SettingsMenuItem) {\n runInInjectionContext(this.injector, () => item.action());\n }\n}\n","<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 @if (theme.darkMode()) {\n <mat-icon svgIcon=\"brightness-2\"></mat-icon>\n } @else {\n <mat-icon svgIcon=\"brightness-5\"></mat-icon>\n }\n <span i18n>Mode</span>\n </button>\n <button [matMenuTriggerFor]=\"themeMenu\" mat-menu-item>\n <mat-icon svgIcon=\"compare\"></mat-icon>\n <span i18n>Theme</span>\n </button>\n @for (item of customItems(); track item.label) {\n <button (click)=\"clickItem(item)\" mat-menu-item>\n <mat-icon *ngIf=\"item.icon as icon\" [rxapIcon]=\"icon\"></mat-icon>\n <span>{{ item.label }}</span>\n </button>\n }\n @for (item of customItemComponents(); track item) {\n <ng-template [cdkPortalOutlet]=\"item\"></ng-template>\n }\n</mat-menu>\n\n<mat-menu #themeMenu=\"matMenu\" xPosition=\"before\">\n <button [matMenuTriggerFor]=\"themeDensityMenu\" mat-menu-item>\n <mat-icon svgIcon=\"move-resize\"></mat-icon>\n <span i18n>Density</span>\n </button>\n @if (availableTypographies?.length) {\n <button [matMenuTriggerFor]=\"themeFontMenu\" mat-menu-item>\n <mat-icon svgIcon=\"format-font\"></mat-icon>\n <span i18n>Font</span>\n </button>\n }\n @if (availableThemes?.length) {\n <button [matMenuTriggerFor]=\"themePresetMenu\" mat-menu-item>\n <mat-icon svgIcon=\"shape-outline\"></mat-icon>\n <span i18n>Preset</span>\n </button>\n }\n</mat-menu>\n\n<mat-menu #themeDensityMenu=\"matMenu\" xPosition=\"before\">\n <button (click)=\"setDensity(0)\" (mouseenter)=\"previewDensity(0)\" (mouseleave)=\"restoreDensity()\" mat-menu-item>\n <mat-icon svgIcon=\"size-l\"></mat-icon>\n <span i18n>Normal</span>\n </button>\n <button (click)=\"setDensity(-1)\" (mouseenter)=\"previewDensity(-1)\" (mouseleave)=\"restoreDensity()\" mat-menu-item>\n <mat-icon svgIcon=\"size-m\"></mat-icon>\n <span i18n>Dense</span>\n </button>\n <button (click)=\"setDensity(-2)\" (mouseenter)=\"previewDensity(-2)\" (mouseleave)=\"restoreDensity()\" mat-menu-item>\n <mat-icon svgIcon=\"size-s\"></mat-icon>\n <span i18n>Very Dense</span>\n </button>\n <button (click)=\"setDensity(-3)\" (mouseenter)=\"previewDensity(-3)\" (mouseleave)=\"restoreDensity()\" mat-menu-item>\n <mat-icon svgIcon=\"size-xs\"></mat-icon>\n <span i18n>Extreme Dense</span>\n </button>\n</mat-menu>\n<mat-menu #themeFontMenu=\"matMenu\" xPosition=\"before\">\n @for (typographyName of availableTypographies ?? []; track typographyName) {\n <button (click)=\"setTypography(typographyName)\"\n (mouseenter)=\"previewTypography(typographyName)\"\n (mouseleave)=\"restoreTypography()\"\n mat-menu-item>\n {{ typographyName }}\n </button>\n }\n</mat-menu>\n\n<mat-menu #themePresetMenu=\"matMenu\" xPosition=\"before\">\n @for (themeName of availableThemes ?? []; track themeName) {\n <button (click)=\"setTheme(themeName)\"\n (mouseenter)=\"previewTheme(themeName)\"\n (mouseleave)=\"restoreTheme()\"\n mat-menu-item>\n {{ themeName }}\n </button>\n }\n</mat-menu>\n","import {\n inject,\n Injectable,\n LOCALE_ID,\n signal,\n} from '@angular/core';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { ClickOnLink } from '@rxap/browser-utilities';\nimport { ConfigService } from '@rxap/config';\nimport { RXAP_ENVIRONMENT } from '@rxap/environment';\nimport {\n coerceArray,\n JoinPath,\n} from '@rxap/utilities';\nimport {\n RXAP_EXTERNAL_APP,\n RXAP_EXTERNAL_APP_FILTER,\n} from './tokens';\nimport { ExternalApp } from './types';\n\n@Injectable()\nexport class ExternalAppsService {\n\n protected readonly appFilterList = coerceArray(inject(RXAP_EXTERNAL_APP_FILTER, { optional: true }));\n protected readonly config = inject(ConfigService);\n protected readonly localeId = inject(LOCALE_ID);\n protected readonly environment = inject(RXAP_ENVIRONMENT);\n protected readonly apps: Array<ExternalApp> = this.config.get('navigation.apps', []);\n protected readonly externalApps = coerceArray(inject(RXAP_EXTERNAL_APP, { optional: true }));\n\n /**\n * The list of active apps that is processed by the getAppList method\n */\n public readonly activeAppList = signal<Array<ExternalApp>>([]);\n\n public hasApp(appId: string): boolean {\n return this.apps.some(app => app.id === appId);\n }\n\n public getApp(appId: string): ExternalApp | null {\n if (!this.hasApp(appId)) {\n return null;\n }\n const app = this.apps.find(app => app.id === appId);\n if (!app) {\n throw new Error(`FATAL: App with id \"${ appId }\" not found!`);\n }\n return structuredClone(app);\n }\n\n public getAppUrl(appId: string, path: string, infix: string | null = this.getPathPrefix()): string | null {\n\n const app = this.getApp(appId);\n\n if (!app || !app.href) {\n return null;\n }\n\n return JoinPath(app.href, infix, path);\n\n }\n\n public getAppRouterLink(appId: string, path: string): string[] | null {\n\n const app = this.getApp(appId);\n\n if (!app || !app.routerLink) {\n return null;\n }\n\n return [ ...app.routerLink, path ];\n }\n\n public getAppUrlOrThrow(appId: string, path: string): string {\n const url = this.getAppUrl(appId, path);\n if (url) {\n return url;\n }\n throw new Error(`Could not find url for app with id \"${ appId }\"`);\n }\n\n public getAppRouterLinkOrThrow(appId: string, path: string): string[] {\n const routerLink = this.getAppRouterLink(appId, path);\n if (routerLink) {\n return routerLink;\n }\n throw new Error(`Could not find router link for app with id \"${ appId }\"`);\n }\n\n public navigate(appId: string, path: string): void {\n\n const url = this.getAppUrl(appId, path);\n\n if (url) {\n ClickOnLink(url);\n }\n\n }\n\n public async getAppList(): Promise<Array<ExternalApp>> {\n let appList: ExternalApp[] = [\n ...this.externalApps,\n ...this.apps,\n ].filter(app => !app.hidden)\n .map(app => structuredClone(app));\n\n appList.forEach(app => {\n if (app.href) {\n app.href = JoinPath(app.href, this.getPathPrefix());\n }\n });\n\n for (const appFilter of this.appFilterList) {\n appList = await appFilter.call(structuredClone(appList));\n }\n\n appList = structuredClone(appList);\n this.activeAppList.set(appList);\n return appList;\n }\n\n protected getPathPrefix(): string {\n if (this.environment.production && this.localeId) {\n return this.localeId.replace(/-.+$/, '');\n }\n return '';\n }\n\n}\n","import { NgOptimizedImage } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n signal,\n} from '@angular/core';\nimport {\n MatAnchor,\n MatButton,\n MatIconButton,\n} from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { IconDirective } from '@rxap/material-directives/icon';\nimport { ExternalAppsService } from '../../external-apps.service';\n\n@Component({\n selector: 'rxap-apps-button',\n templateUrl: './apps-button.component.html',\n styleUrls: [ './apps-button.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgOptimizedImage,\n MatButton,\n RouterLink,\n MatAnchor,\n MatIconButton,\n MatIcon,\n IconDirective,\n ],\n})\nexport class AppsButtonComponent implements OnInit {\n /**\n * The signal that indicates if the app list is open\n */\n public readonly isOpen = signal(false);\n\n private readonly externalAppsService = inject(ExternalAppsService);\n public readonly appList = computed(() => this.externalAppsService.activeAppList());\n public readonly hasApps = computed(() => this.appList().length > 0);\n\n public toggle(): void {\n this.isOpen.update(isOpen => !isOpen);\n }\n\n public ngOnInit(): void {\n this.externalAppsService.getAppList();\n }\n\n}\n","@if (hasApps()) {\n <div class=\"flex flex-row items-center gap-8\">\n\n @if (isOpen()) {\n <div class=\"flex flex-row items-center gap-6 h-10\">\n\n @for (app of appList(); track app.label) {\n @if (app.href) {\n <a [href]=\"app.href\" [target]=\"app.target ?? '_self'\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </a>\n } @else if (app.routerLink) {\n <a mat-stroked-button [routerLink]=\"app.routerLink\">\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </a>\n } @else {\n <button mat-stroked-button [disabled]=\"true\">\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </button>\n }\n }\n\n </div>\n }\n\n <button (click)=\"toggle()\" mat-icon-button>\n <mat-icon svgIcon=\"apps\"></mat-icon>\n </button>\n\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { LayoutService } from '../layout.service';\nimport { RXAP_USER_PROFILE_DATA_SOURCE } from '../tokens';\nimport { AppsButtonComponent } from './apps-button/apps-button.component';\nimport { SettingsButtonComponent } from './settings-button/settings-button.component';\nimport { SidenavToggleButtonComponent } from './sidenav-toggle-button/sidenav-toggle-button.component';\nimport { UserProfileIconComponent } from './user-profile-icon/user-profile-icon.component';\n\n@Component({\n selector: 'rxap-default-header',\n standalone: true,\n imports: [\n AppsButtonComponent,\n SettingsButtonComponent,\n SidenavToggleButtonComponent,\n UserProfileIconComponent,\n ],\n host: {\n 'class': 'grow',\n },\n templateUrl: './default-header.component.html',\n styleUrl: './default-header.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultHeaderComponent {\n\n private readonly layoutComponentService = inject(LayoutService);\n\n public readonly collapsable = computed(() => this.layoutComponentService.collapsable());\n public readonly opened = computed(() => this.layoutComponentService.opened());\n public readonly profile = toSignal(inject(RXAP_USER_PROFILE_DATA_SOURCE).connect('user-profile'), { initialValue: null });\n\n}\n","<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow\">\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Provider } from '@angular/core';\nimport { DataSource } from '@rxap/pattern';\nimport { Constructor } from '@rxap/utilities';\nimport { DefaultHeaderComponent } from './default-header/default-header.component';\nimport { ExternalAppsService } from './external-apps.service';\nimport { FooterService } from './footer.service';\nimport { HeaderService } from './header.service';\nimport { LayoutService } from './layout.service';\nimport { LogoService } from './logo.service';\nimport { NavigationService } from './navigation.service';\nimport { NavigationWithInserts } from './navigation/navigation-item';\nimport {\n RXAP_EXTERNAL_APP,\n RXAP_FOOTER_COMPONENT,\n RXAP_HEADER_COMPONENT,\n RXAP_NAVIGATION_CONFIG,\n RXAP_NAVIGATION_CONFIG_INSERTS,\n RXAP_RELEASE_INFO_MODULE,\n RXAP_SETTINGS_MENU_ITEM,\n RXAP_SETTINGS_MENU_ITEM_COMPONENT,\n RXAP_USER_PROFILE_DATA_SOURCE,\n} from './tokens';\nimport {\n ExternalApp,\n ReleaseInfoModule,\n SettingsMenuItem,\n SettingsMenuItemComponent,\n} from './types';\n\nexport function provideLayout(...additionalProviders: Provider[]): Provider[] {\n return [\n LayoutService,\n LogoService,\n HeaderService,\n FooterService,\n ...additionalProviders,\n ];\n}\n\nexport function provideExternalApps(...apps: ExternalApp[]): Provider[] {\n return [\n ExternalAppsService,\n ...apps.map(app => (\n {\n provide: RXAP_EXTERNAL_APP,\n useValue: app,\n multi: true,\n }\n ))\n ];\n}\n\nexport function withNavigationConfig(\n config: NavigationWithInserts | (() => NavigationWithInserts),\n): Provider[] {\n return [\n NavigationService,\n {\n provide: RXAP_NAVIGATION_CONFIG,\n useValue: config,\n },\n ];\n}\n\nexport function withNavigationInserts(inserts: Record<string, NavigationWithInserts>): Provider[] {\n return [{\n provide: RXAP_NAVIGATION_CONFIG_INSERTS,\n useValue: inserts,\n }];\n}\n\nexport function withSettingsMenuItems(...items: Array<SettingsMenuItemComponent | SettingsMenuItem>): Provider[] {\n return [\n ...items.filter((item): item is SettingsMenuItemComponent => typeof item === 'function').map(component => (\n {\n provide: RXAP_SETTINGS_MENU_ITEM_COMPONENT,\n useValue: component,\n multi: true,\n }\n )),\n ...items.filter((item): item is SettingsMenuItem => typeof item !== 'function').map(item => (\n {\n provide: RXAP_SETTINGS_MENU_ITEM,\n useValue: item,\n multi: true,\n }\n )),\n ];\n}\n\nexport function withReleaseInfoModules(...module: ReleaseInfoModule[]): Provider[] {\n return module.map(item => (\n {\n provide: RXAP_RELEASE_INFO_MODULE,\n useValue: item,\n multi: true,\n }\n ));\n}\n\nexport function withHeaderComponents(components: Array<ComponentType<unknown>>): Provider[] {\n return components.map(component => (\n {\n provide: RXAP_HEADER_COMPONENT,\n useValue: component,\n }\n ));\n}\n\nexport function withFooterComponents(components: Array<ComponentType<unknown>>): Provider[] {\n return components.map(component => (\n {\n provide: RXAP_FOOTER_COMPONENT,\n useValue: component,\n }\n ));\n}\n\nexport function withDefaultHeaderComponent(): Provider {\n return {\n provide: RXAP_HEADER_COMPONENT,\n useValue: DefaultHeaderComponent,\n };\n}\n\nexport function withUserProfileDataSource(dataSource: Constructor<DataSource>, useClass = false): Provider {\n if (useClass) {\n return {\n provide: RXAP_USER_PROFILE_DATA_SOURCE,\n useClass: dataSource\n };\n } else {\n return {\n provide: RXAP_USER_PROFILE_DATA_SOURCE,\n useExisting: dataSource\n };\n }\n}\n","// region sidenav\nexport * from './lib/sidenav/sidenav-footer.directive';\nexport * from './lib/sidenav/sidenav-header.directive';\nexport * from './lib/sidenav/sidenav.component';\n// endregion\n\n// region release-info\nexport * from './lib/release-info/release-info.component';\n// endregion\n\n// region navigation navigation-item\nexport * from './lib/navigation/navigation-item/navigation-item.component';\n// endregion\n\n// region navigation-progress-bar\nexport * from './lib/navigation-progress-bar/navigation-progress-bar.component';\n// endregion\n\n// region navigation\nexport * from './lib/navigation/navigation-item';\nexport * from './lib/navigation/navigation.component';\n// endregion\n\n// region minimal-layout\nexport * from './lib/minimal-layout/minimal-layout.component';\n// endregion\n\n// region layout\nexport * from './lib/layout/layout.component';\n// endregion\n\n// region header\nexport * from './lib/header/header.component';\nexport * from './lib/header/header.directive';\n// endregion\n\n// region footer\nexport * from './lib/footer/footer.component';\nexport * from './lib/footer/footer.directive';\n// endregion\n\n// region default-header user-profile-icon\nexport * from './lib/default-header/user-profile-icon/user-profile-icon.component';\n// endregion\n\n// region default-header sidenav-toggle-button\nexport * from './lib/default-header/sidenav-toggle-button/sidenav-toggle-button.component';\n// endregion\n\n// region default-header settings-button\nexport * from './lib/default-header/settings-button/settings-button.component';\n// endregion\n\n// region default-header apps-button\nexport * from './lib/default-header/apps-button/apps-button.component';\n// endregion\n\n// region default-header\nexport * from './lib/default-header/default-header.component';\n// endregion\n\n// region base-layout\nexport * from './lib/base-layout/base-layout.component';\n// endregion\n\n// region \nexport * from './lib/external-apps.service';\nexport * from './lib/footer.service';\nexport * from './lib/header.service';\nexport * from './lib/layout.service';\nexport * from './lib/logo.service';\nexport * from './lib/navigation.service';\nexport * from './lib/provide';\nexport * from './lib/tokens';\nexport * from './lib/types';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"rxap-layout.mjs","sources":["../../../../../packages/angular/layout/src/lib/sidenav/sidenav-footer.directive.ts","../../../../../packages/angular/layout/src/lib/sidenav/sidenav-header.directive.ts","../../../../../packages/angular/layout/src/lib/tokens.ts","../../../../../packages/angular/layout/src/lib/footer.service.ts","../../../../../packages/angular/layout/src/lib/header.service.ts","../../../../../packages/angular/layout/src/lib/layout.service.ts","../../../../../packages/angular/layout/src/lib/navigation/navigation-item.ts","../../../../../packages/angular/layout/src/lib/navigation.service.ts","../../../../../packages/angular/layout/src/lib/navigation/navigation-item/navigation-item.component.ts","../../../../../packages/angular/layout/src/lib/navigation/navigation-item/navigation-item.component.html","../../../../../packages/angular/layout/src/lib/navigation/navigation.component.ts","../../../../../packages/angular/layout/src/lib/navigation/navigation.component.html","../../../../../packages/angular/layout/src/lib/sidenav/sidenav.component.ts","../../../../../packages/angular/layout/src/lib/sidenav/sidenav.component.html","../../../../../packages/angular/layout/src/lib/release-info/release-info.component.ts","../../../../../packages/angular/layout/src/lib/release-info/release-info.component.html","../../../../../packages/angular/layout/src/lib/navigation-progress-bar/navigation-progress-bar.component.ts","../../../../../packages/angular/layout/src/lib/navigation-progress-bar/navigation-progress-bar.component.html","../../../../../packages/angular/layout/src/lib/footer/footer.component.ts","../../../../../packages/angular/layout/src/lib/footer/footer.component.html","../../../../../packages/angular/layout/src/lib/header/header.component.ts","../../../../../packages/angular/layout/src/lib/header/header.component.html","../../../../../packages/angular/layout/src/lib/base-layout/base-layout.component.ts","../../../../../packages/angular/layout/src/lib/base-layout/base-layout.component.html","../../../../../packages/angular/layout/src/lib/minimal-layout/minimal-layout.component.ts","../../../../../packages/angular/layout/src/lib/minimal-layout/minimal-layout.component.html","../../../../../packages/angular/layout/src/lib/logo.service.ts","../../../../../packages/angular/layout/src/lib/layout/layout.component.ts","../../../../../packages/angular/layout/src/lib/layout/layout.component.html","../../../../../packages/angular/layout/src/lib/header/header.directive.ts","../../../../../packages/angular/layout/src/lib/footer/footer.directive.ts","../../../../../packages/angular/layout/src/lib/default-header/user-profile-icon/user-profile-icon.component.ts","../../../../../packages/angular/layout/src/lib/default-header/user-profile-icon/user-profile-icon.component.html","../../../../../packages/angular/layout/src/lib/default-header/sidenav-toggle-button/sidenav-toggle-button.component.ts","../../../../../packages/angular/layout/src/lib/default-header/sidenav-toggle-button/sidenav-toggle-button.component.html","../../../../../packages/angular/layout/src/lib/default-header/settings-button/settings-button.component.ts","../../../../../packages/angular/layout/src/lib/default-header/settings-button/settings-button.component.html","../../../../../packages/angular/layout/src/lib/external-apps.service.ts","../../../../../packages/angular/layout/src/lib/default-header/apps-button/apps-button.component.ts","../../../../../packages/angular/layout/src/lib/default-header/apps-button/apps-button.component.html","../../../../../packages/angular/layout/src/lib/default-header/default-header.service.ts","../../../../../packages/angular/layout/src/lib/default-header/default-header.component.ts","../../../../../packages/angular/layout/src/lib/default-header/default-header.component.html","../../../../../packages/angular/layout/src/lib/provide.ts","../../../../../packages/angular/layout/src/index.ts","../../../../../packages/angular/layout/src/rxap-layout.ts"],"sourcesContent":["import {\n Directive,\n Inject,\n TemplateRef,\n} from '@angular/core';\n\n@Directive({\n selector: '[rxapSidenavFooter]',\n standalone: true,\n})\nexport class SidenavFooterDirective {\n constructor(\n @Inject(TemplateRef)\n public readonly template: TemplateRef<void>,\n ) {\n }\n}\n","import {\n Directive,\n Inject,\n TemplateRef,\n} from '@angular/core';\n\n@Directive({\n selector: '[rxapSidenavHeader]',\n standalone: true,\n})\nexport class SidenavHeaderDirective {\n constructor(\n @Inject(TemplateRef)\n public readonly template: TemplateRef<void>,\n ) {\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { InjectionToken } from '@angular/core';\nimport { LogoConfig } from '@rxap/config';\nimport { staticDataSource } from '@rxap/data-source';\nimport {\n DataSource,\n MethodWithParameters,\n} from '@rxap/pattern';\nimport { NavigationWithInserts } from './navigation/navigation-item';\nimport {\n ExternalApp,\n ExtractUsernameFromProfileFn,\n ReleaseInfoModule,\n SettingsMenuItem,\n SettingsMenuItemComponent,\n} from './types';\n\nexport const RXAP_NAVIGATION_CONFIG = new InjectionToken<NavigationWithInserts | (() => NavigationWithInserts)>(\n 'rxap/layout/navigation-config');\nexport const RXAP_NAVIGATION_CONFIG_INSERTS = new InjectionToken<Record<string, NavigationWithInserts>>(\n 'rxap/layout/navigation-config-inserts');\n\nexport const RXAP_FOOTER_COMPONENT = new InjectionToken<ComponentType<unknown>>('rxap/layout/footer-component');\nexport const RXAP_HEADER_COMPONENT = new InjectionToken<ComponentType<unknown>>('rxap/layout/header-component');\nexport const RXAP_LOGO_CONFIG = new InjectionToken<LogoConfig>('rxap/layout/logo-config');\nexport const RXAP_LAYOUT_APPS_GRID = new InjectionToken('rxap/layout/apps-grid');\n\nexport const RXAP_EXTERNAL_APP_FILTER = new InjectionToken<MethodWithParameters<ExternalApp[], ExternalApp[]>>('rxap/layout/app-config-filter');\nexport const EXTRACT_USERNAME_FROM_PROFILE = new InjectionToken<ExtractUsernameFromProfileFn>(\n 'extract-username-from-profile',\n {\n providedIn: 'root',\n factory: () => (profile: any) => (\n profile ? profile.username ?? profile.email ?? profile.name : null\n ) ?? null,\n },\n);\n\nexport const RXAP_USER_PROFILE_DATA_SOURCE = new InjectionToken<DataSource>('rxap/layout/user-profile-data-source', {\n providedIn: 'root',\n factory: () => staticDataSource(null),\n});\n\nexport const RXAP_EXTERNAL_APP = new InjectionToken<ExternalApp>('rxap/layout/external-app');\n\nexport const RXAP_RELEASE_INFO_MODULE = new InjectionToken<ReleaseInfoModule>('rxap/layout/release-info-module');\n\nexport const RXAP_SETTINGS_MENU_ITEM_COMPONENT = new InjectionToken<SettingsMenuItemComponent>('rxap/layout/settings-menu-item-component');\n\nexport const RXAP_DEFAULT_HEADER_ITEM_COMPONENT = new InjectionToken<ComponentType<unknown>>('rxap/layout/default-header-item-component');\n\nexport const RXAP_SETTINGS_MENU_ITEM = new InjectionToken<SettingsMenuItem>('rxap/layout/settings-menu-item');\n","import {\n ComponentPortal,\n Portal,\n} from '@angular/cdk/portal';\nimport {\n computed,\n inject,\n Injectable,\n isDevMode,\n signal,\n} from '@angular/core';\nimport { RXAP_FOOTER_COMPONENT } from './tokens';\nimport { coerceArray } from '@rxap/utilities';\n\n@Injectable()\nexport class FooterService {\n\n private readonly components = coerceArray(inject(RXAP_FOOTER_COMPONENT, { optional: true }));\n\n /**\n * Represents an array of `Portal` objects with unknown type.\n */\n public readonly portals = signal<Array<Portal<unknown>>>(this.components.map(component => new ComponentPortal(component)));\n\n\n /**\n * Computes the count of portals.\n *\n * @returns {number} The count of portals.\n */\n public readonly portalCount = computed(() => this.portals().length);\n\n /**\n * Adds a portal to the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be added.\n *\n * @return {void}\n */\n public pushPortal(portal: Portal<unknown>) {\n if (!this.portals().includes(portal)) {\n this.portals.update(portals => [ ...portals, portal ]);\n } else {\n if (isDevMode()) {\n console.warn('Can not add the same portal multiple times');\n }\n }\n }\n\n /**\n * Removes a portal from the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be removed.\n * @return {void}\n */\n public removePortal(portal: Portal<unknown>) {\n const index = this.portals().indexOf(portal);\n if (index !== -1) {\n this.portals.update(portals => {\n portals.splice(index, 1);\n return portals.slice();\n });\n }\n }\n\n}\n","import {\n ComponentPortal,\n Portal,\n} from '@angular/cdk/portal';\nimport {\n computed,\n inject,\n Injectable,\n isDevMode,\n signal,\n} from '@angular/core';\nimport { RXAP_HEADER_COMPONENT } from './tokens';\nimport { coerceArray } from '@rxap/utilities';\n\n@Injectable()\nexport class HeaderService {\n\n private readonly components = coerceArray(inject(RXAP_HEADER_COMPONENT, { optional: true }));\n\n /**\n * Represents an array of `Portal` objects with unknown type.\n *\n * @typedef {Array<Portal<unknown>>} SignalPortals\n */\n public readonly portals = signal<Array<Portal<unknown>>>(this.components.map(component => new ComponentPortal(component)));\n\n\n /**\n * Computes the count of portals.\n *\n * @returns {number} The count of portals.\n */\n public readonly portalCount = computed(() => this.portals().length);\n\n\n /**\n * Adds a portal to the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be added.\n *\n * @return {void}\n */\n public pushPortal(portal: Portal<unknown>) {\n if (!this.portals().includes(portal)) {\n this.portals.update(portals => [ ...portals, portal ]);\n } else {\n if (isDevMode()) {\n console.warn('Can not add the same portal multiple times');\n }\n }\n }\n\n /**\n * Removes a portal from the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be removed.\n * @return {void}\n */\n public removePortal(portal: Portal<unknown>) {\n const index = this.portals().indexOf(portal);\n if (index !== -1) {\n this.portals.update(portals => {\n portals.splice(index, 1);\n return portals.slice();\n });\n }\n }\n\n}\n","import { MediaMatcher } from '@angular/cdk/layout';\nimport {\n computed,\n effect,\n inject,\n Injectable,\n isDevMode,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatDrawerMode } from '@angular/material/sidenav';\nimport { ConfigService } from '@rxap/config';\nimport { ObserveCurrentThemeDensity } from '@rxap/ngx-theme';\nimport { Observable } from 'rxjs';\nimport { FooterService } from './footer.service';\nimport { HeaderService } from './header.service';\n\n@Injectable()\nexport class LayoutService {\n\n public readonly opened: WritableSignal<boolean>;\n public readonly mode: WritableSignal<MatDrawerMode>;\n public readonly pinned: WritableSignal<boolean>;\n public readonly collapsable: WritableSignal<boolean>;\n public readonly fixedBottomGap: Signal<number>;\n public readonly fixedTopGap: Signal<number>;\n public readonly currentThemeDensity = toSignal(ObserveCurrentThemeDensity());\n public readonly isMobile: Signal<boolean>;\n public readonly fixedInViewport: WritableSignal<boolean>;\n public readonly collapsed: Signal<boolean>;\n\n private readonly footerService = inject(FooterService);\n private readonly headerService = inject(HeaderService);\n private readonly config = inject(ConfigService);\n private readonly mediaMatcher = inject(MediaMatcher);\n\n constructor() {\n const mobileQuery = this.mediaMatcher.matchMedia('(max-width: 959px)');\n this.isMobile = toSignal(new Observable<boolean>(subscriber => {\n mobileQuery.addEventListener('change', (event) => {\n subscriber.next(event.matches);\n });\n }), { initialValue: mobileQuery.matches });\n\n const initialCollapsable = this.config.get('navigation.collapsable', true);\n const collapsable = initialCollapsable && !this.isMobile();\n const pinned = this.config.get('navigation.pinned', false);\n const mode = this.config.get('navigation.mode', pinned || !collapsable ? 'side' : 'over');\n const opened = this.config.get('navigation.opened', (!collapsable || pinned) && !this.isMobile());\n const fixedInViewport = this.config.get('navigation.fixedInViewport', true);\n\n if (isDevMode()) {\n console.log({\n initialCollapsable,\n collapsable,\n pinned,\n mode,\n opened,\n fixedInViewport,\n });\n }\n\n this.opened = signal(opened);\n this.mode = signal(mode);\n this.pinned = signal(pinned);\n this.collapsable = signal(collapsable);\n this.fixedInViewport = signal(fixedInViewport);\n this.collapsed = computed(() => this.collapsable() && !this.opened() && !this.pinned());\n\n this.fixedBottomGap = computed(() => {\n const footerPortalCount = this.footerService.portalCount();\n const currentThemeDensity = this.currentThemeDensity() ?? 0;\n return footerPortalCount * (currentThemeDensity * 4 + 64);\n });\n\n this.fixedTopGap = computed(() => {\n const headerPortalCount = this.headerService.portalCount();\n const currentThemeDensity = this.currentThemeDensity() ?? 0;\n return headerPortalCount * (currentThemeDensity * 4 + 64);\n });\n\n if (initialCollapsable) {\n effect(() => {\n const isMobile = this.isMobile();\n this.collapsable.set(!isMobile);\n if (!isMobile && !this.pinned()) {\n this.opened.set(false);\n }\n }, { allowSignalWrites: true });\n }\n effect(() => {\n if (this.pinned()) {\n this.mode.set('side');\n this.opened.set(true);\n } else {\n this.mode.set('over');\n this.opened.set(false);\n }\n }, { allowSignalWrites: true });\n }\n\n public toggleOpened() {\n this.opened.update(opened => !opened);\n }\n\n public togglePinned() {\n this.pinned.update(pinned => !pinned);\n }\n\n openSidenav() {\n this.opened.set(true);\n }\n\n closeSidenav() {\n this.opened.set(false);\n }\n}\n","import { IconConfig } from '@rxap/utilities';\nimport {\n AbstractType,\n InjectionToken,\n Type,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport type Navigation = Array<NavigationItem | NavigationDividerItem>;\n\nexport type NavigationWithInserts = Array<\n | NavigationItem<NavigationWithInserts>\n | NavigationDividerItem\n | NavigationInsertItem\n>;\n\nexport interface NavigationDividerItem {\n divider: boolean;\n title?: string;\n}\n\nexport function IsNavigationDividerItem(\n item: any,\n): item is NavigationDividerItem {\n return !!item && !!item['divider'];\n}\n\nexport interface NavigationInsertItem {\n insert: string;\n}\n\nexport function IsNavigationInsertItem(\n item: any,\n): item is NavigationInsertItem {\n return !!item && !!item['insert'];\n}\n\nexport interface NavigationStatus {\n isVisible(\n navigationItem: NavigationItem,\n ): Observable<boolean> | Promise<boolean> | boolean;\n}\n\nexport interface NavigationItem<Children = Navigation> extends Record<string, unknown> {\n routerLink: string[] | string;\n label: string;\n children?: Children;\n icon?: IconConfig;\n status?: Array<\n | Type<NavigationStatus>\n | InjectionToken<NavigationStatus>\n | AbstractType<NavigationStatus>\n >;\n}\n\nexport function IsNavigationItem(item: any): item is NavigationItem {\n return (\n !!item && !!item['routerLink'] && !!item['label']\n );\n}\n","import {\n inject,\n Inject,\n Injectable,\n Injector,\n INJECTOR,\n Optional,\n} from '@angular/core';\nimport {\n combineLatest,\n from,\n Observable,\n of,\n ReplaySubject,\n} from 'rxjs';\nimport {\n catchError,\n map,\n switchMap,\n} from 'rxjs/operators';\nimport {\n IsNavigationDividerItem,\n IsNavigationInsertItem,\n IsNavigationItem,\n Navigation,\n NavigationDividerItem,\n NavigationItem,\n NavigationWithInserts,\n} from './navigation/navigation-item';\nimport {\n RXAP_NAVIGATION_CONFIG,\n RXAP_NAVIGATION_CONFIG_INSERTS,\n} from './tokens';\n\n@Injectable()\nexport class NavigationService {\n public readonly config$: Observable<Navigation>;\n\n private inserts = new Map<string, NavigationWithInserts>();\n\n private readonly navigation: NavigationWithInserts;\n\n private readonly navigation$ = new ReplaySubject<Navigation>(1);\n\n private readonly injector: Injector = inject(INJECTOR);\n\n constructor(\n @Inject(RXAP_NAVIGATION_CONFIG)\n navigation: any,\n @Optional()\n @Inject(RXAP_NAVIGATION_CONFIG_INSERTS)\n inserts: any | null = null,\n ) {\n if (typeof navigation === 'function') {\n this.navigation = navigation();\n } else {\n this.navigation = navigation;\n }\n if (inserts) {\n Object.entries(inserts).forEach(([ id, insert ]: [ string, any ]) =>\n this.insert(id, insert, false),\n );\n }\n this.updateNavigation();\n this.config$ = this.navigation$.pipe(\n switchMap((navigationWithoutStatusCheck) =>\n this.checkNavigationStatusProviders(navigationWithoutStatusCheck),\n ),\n );\n }\n\n /**\n * @deprecated use add instead\n * @param id\n * @param value\n * @param update\n */\n public insert(\n id: string,\n value: NavigationWithInserts,\n update = true,\n ): void {\n this.add(id, value, update);\n }\n\n public add(\n id: string,\n value: NavigationWithInserts,\n update = true,\n ): void {\n this.inserts.set(id, value);\n if (update) {\n this.updateNavigation();\n }\n }\n\n public has(id: string): boolean {\n return this.inserts.has(id);\n }\n\n public get(id: string): NavigationWithInserts | undefined {\n return this.inserts.get(id);\n }\n\n public remove(id: string, update = true): void {\n this.inserts.delete(id);\n if (update) {\n this.updateNavigation();\n }\n }\n\n public updateNavigation(): void {\n this.navigation$.next(this.replaceInserts(this.navigation));\n }\n\n /**\n * @internal\n * @param navigationItem\n */\n public checkNavigationItemStatusProviders(\n navigationItem: NavigationItem | NavigationDividerItem,\n ): Observable<NavigationItem | NavigationDividerItem | null> {\n if (IsNavigationDividerItem(navigationItem) || !navigationItem.status) {\n return of(navigationItem);\n }\n const isVisibleArray$: Array<Observable<boolean>> = navigationItem\n .status\n .map((statusToken) => this.injector.get(\n statusToken))\n .map((status) => {\n const isVisible = status.isVisible(\n navigationItem);\n if (typeof isVisible === 'boolean') {\n return of(isVisible);\n } else {\n return from(isVisible);\n }\n })\n .map(isVisible$ => isVisible$.pipe(catchError(e => {\n console.error(`isVisible method failed: ${ e.message }`);\n return of(false);\n })));\n // TODO : dont wait for all status services to complete, but cancel waiting if one returns false\n return combineLatest(isVisibleArray$).pipe(\n map((isVisibleArray) =>\n isVisibleArray.reduce((acc, isVisible) => acc && isVisible, true),\n ),\n map((isVisible) => (isVisible ? navigationItem : null)),\n switchMap((navigationItemOrNull) => {\n if (navigationItemOrNull) {\n if (navigationItemOrNull.children?.length) {\n return this.checkNavigationStatusProviders(\n navigationItemOrNull.children,\n ).pipe(\n map((children) => ({\n ...navigationItemOrNull,\n children,\n })),\n );\n }\n return of(navigationItemOrNull);\n }\n return of(null);\n }),\n );\n }\n\n /**\n * @internal\n * @param navigationItem\n */\n public checkNavigationStatusProviders(\n navigation: Navigation,\n ): Observable<Navigation> {\n return combineLatest(\n navigation.map((navigationItem) =>\n this.checkNavigationItemStatusProviders(navigationItem),\n ),\n ).pipe(\n map((navigationWithNullItems) => {\n const cleanNavigation: Navigation = [];\n\n for (const navigationItem of navigationWithNullItems) {\n if (navigationItem !== null) {\n cleanNavigation.push(navigationItem);\n }\n }\n\n return cleanNavigation;\n }),\n );\n }\n\n private replaceInserts(\n navigationWithInserts: NavigationWithInserts,\n ): Navigation {\n const navigation: Navigation = [];\n\n for (const navigationItem of navigationWithInserts) {\n if (IsNavigationInsertItem(navigationItem)) {\n if (this.inserts.has(navigationItem.insert)) {\n navigation.push(\n ...this.replaceInserts(this.inserts.get(navigationItem.insert)!),\n );\n }\n } else if (IsNavigationItem(navigationItem)) {\n navigation.push({\n ...navigationItem,\n children: this.replaceInserts(navigationItem.children ?? []),\n });\n } else if (IsNavigationDividerItem(navigationItem)) {\n navigation.push(navigationItem);\n }\n }\n\n return navigation;\n }\n}\n","import {\n animate,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport {\n NgClass,\n NgIf,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnChanges,\n OnDestroy,\n Renderer2,\n signal,\n SimpleChanges,\n viewChild,\n ViewEncapsulation, AfterViewInit,\n} from '@angular/core';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n NavigationEnd,\n Router,\n RouterLink,\n RouterLinkActive,\n} from '@angular/router';\nimport { IconDirective } from '@rxap/material-directives/icon';\nimport { coerceArray } from '@rxap/utilities';\nimport {\n debounceTime,\n Subscription,\n} from 'rxjs';\nimport {\n filter,\n startWith,\n tap,\n} from 'rxjs/operators';\nimport { LayoutService } from '../../layout.service';\nimport {\n Navigation,\n NavigationDividerItem,\n NavigationItem,\n} from '../navigation-item';\nimport { NavigationComponent } from '../navigation.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'li[rxap-navigation-item]',\n templateUrl: './navigation-item.component.html',\n styleUrls: [ './navigation-item.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('sub-nav', [\n transition(':enter', [\n style({\n display: 'block',\n height: '0',\n overflow: 'hidden',\n }),\n animate(150, style({ height: '*' })),\n ]),\n transition(':leave', [\n style({ overflow: 'hidden' }),\n animate(300, style({ height: '0' })),\n style({ display: 'none' }),\n ]),\n ]),\n ],\n standalone: true,\n imports: [\n RouterLinkActive,\n RouterLink,\n NgIf,\n MatRippleModule,\n MatIconModule,\n IconDirective,\n MatDividerModule,\n forwardRef(() => NavigationComponent),\n NgClass,\n ]\n})\nexport class NavigationItemComponent\n implements OnChanges, OnDestroy, AfterViewInit {\n\n public readonly level = input(0);\n\n public children: Navigation | null = null;\n\n public readonly item = input.required<NavigationItem>();\n public readonly active = signal(false);\n\n public readonly itemClasses = computed(() => {\n let classes = `level-${ this.level() * 4 }`;\n if (this.collapsed()) {\n classes += ' invisible';\n }\n return classes;\n });\n\n private readonly layoutService = inject(LayoutService);\n\n public readonly collapsed = computed(() => this.layoutService.collapsed());\n\n private readonly _subscription = new Subscription();\n\n private readonly router = inject(Router);\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes['item']) {\n const item: NavigationItem = changes['item'].currentValue;\n this.children =\n item.children && item.children.length ? item.children : null;\n }\n }\n\n public ngAfterViewInit() {\n this._subscription.add(\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n debounceTime(100),\n startWith(true),\n tap(() => {\n let isActive = true;\n const urlParts = this.router.url.split('/');\n if (urlParts[0] === '') {\n urlParts[0] = '/';\n }\n const routerLink = coerceArray(this.item().routerLink).map(fragment => fragment.split('/')).flat();\n if (routerLink[0] === '') {\n routerLink[0] = '/';\n }\n for (let i = 0; i < routerLink.length; i++) {\n if (urlParts[i] !== routerLink[i]) {\n isActive = false;\n break;\n }\n }\n this.active.set(isActive);\n if (isActive) {\n this.renderer.addClass(this.elementRef.nativeElement, 'active');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'active');\n }\n }),\n )\n .subscribe(),\n );\n }\n\n public ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n // region type save item property\n\n // required to check the type of the item property in the ngFor loop\n\n public isNavigationDividerItem(\n item: NavigationItem | NavigationDividerItem,\n ): item is NavigationDividerItem {\n return (item as any)['divider'];\n }\n\n public isNavigationItem(\n item: NavigationItem | NavigationDividerItem,\n ): item is NavigationItem {\n return !this.isNavigationDividerItem(item);\n }\n\n public asNavigationItem(\n item: NavigationItem | NavigationDividerItem,\n ): NavigationItem {\n if (!this.isNavigationItem(item)) {\n throw new Error('The item is not a NavigationItem');\n }\n return item;\n }\n\n // endregion\n}\n","<div [ngClass]=\"{\n 'border-l-4 text-accent-400 border-accent-600': active(),\n }\">\n <a [routerLink]=\"item().routerLink\"\n class=\"h-12 pl-4 pr-5 flex flex-row justify-between items-center gap-x-4\"\n matRipple\n routerLinkActive\n\n >\n <span\n [ngClass]=\"itemClasses()\"\n class=\"grow whitespace-nowrap\"\n >\n {{ item().label }}\n </span>\n <mat-icon *ngIf=\"item().icon as icon\" [rxapIcon]=\"icon\"></mat-icon>\n </a>\n\n <ng-container *ngIf=\"item().children?.length && active()\">\n\n <mat-divider></mat-divider>\n\n <ul [@sub-nav]\n [items]=\"children ?? []\"\n [level]=\"level() + 1\"\n rxap-navigation\n >\n </ul>\n\n <mat-divider></mat-divider>\n\n </ng-container>\n</div>\n","import {\n AsyncPipe,\n NgFor,\n NgIf,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n INJECTOR,\n input,\n OnInit,\n runInInjectionContext,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { LayoutService } from '../layout.service';\nimport { NavigationService } from '../navigation.service';\nimport {\n Navigation,\n NavigationDividerItem,\n NavigationItem,\n} from './navigation-item';\nimport { NavigationItemComponent } from './navigation-item/navigation-item.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'ul[rxap-navigation]',\n templateUrl: './navigation.component.html',\n styleUrls: [ './navigation.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n class: 'list-none dark:text-neutral-400 text-neutral-700',\n },\n imports: [\n NgFor,\n NgIf,\n MatDividerModule,\n forwardRef(() => NavigationItemComponent),\n AsyncPipe,\n ],\n})\nexport class NavigationComponent implements OnInit {\n\n public items = input<Navigation>();\n\n public level = input(0);\n\n private readonly navigationService = inject(NavigationService);\n\n private readonly layoutService = inject(LayoutService);\n\n public readonly collapsed = computed(() => this.layoutService.collapsed());\n\n public navigationItems = computed(() => this.items() ?? []);\n\n public readonly root = input(false);\n\n private readonly injector = inject(INJECTOR);\n\n public ngOnInit(): void {\n if (this.root()) {\n runInInjectionContext(this.injector, () => {\n this.navigationItems = toSignal(this.navigationService.config$, { initialValue: [] });\n });\n }\n }\n // region type save item property\n\n // required to check the type of the item property in the ngFor loop\n\n public isNavigationDividerItem(\n item: NavigationItem | NavigationDividerItem,\n ): item is NavigationDividerItem {\n return (item as any)['divider'];\n }\n\n public isNavigationItem(\n item: NavigationItem | NavigationDividerItem,\n ): item is NavigationItem {\n return !this.isNavigationDividerItem(item);\n }\n\n public asNavigationItem(\n item: NavigationItem | NavigationDividerItem,\n ): NavigationItem {\n if (!this.isNavigationItem(item)) {\n throw new Error('The item is not a NavigationItem');\n }\n return item;\n }\n\n // endregion\n}\n","<ng-template [ngForOf]=\"navigationItems()\" let-item ngFor>\n <ng-template [ngIf]=\"isNavigationDividerItem(item)\">\n <mat-divider></mat-divider>\n <div *ngIf=\"!collapsed() && item.title\" class=\"pl-5 h-6\">\n {{item.title}}\n </div>\n </ng-template>\n <ng-template [ngIf]=\"isNavigationItem(item)\">\n <li [item]=\"asNavigationItem(item)\"\n [level]=\"level()\"\n class=\"dark:hover:text-white hover:text-black\"\n rxap-navigation-item>\n </li>\n </ng-template>\n</ng-template>\n","import {\n NgClass,\n NgIf,\n NgStyle,\n NgTemplateOutlet,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n Signal,\n viewChild,\n} from '@angular/core';\nimport {\n MatButton,\n MatIconButton,\n} from '@angular/material/button';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n MatDrawerMode,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n} from '@angular/material/sidenav';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '../layout.service';\nimport { NavigationComponent } from '../navigation/navigation.component';\nimport { SidenavFooterDirective } from './sidenav-footer.directive';\nimport { SidenavHeaderDirective } from './sidenav-header.directive';\n\n@Component({\n selector: 'rxap-sidenav',\n templateUrl: './sidenav.component.html',\n styleUrls: [ './sidenav.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatIcon,\n MatIconButton,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n NavigationComponent,\n NgIf,\n RouterOutlet,\n NgClass,\n NgStyle,\n MatDivider,\n NgTemplateOutlet,\n MatButton,\n ],\n})\nexport class SidenavComponent {\n\n private readonly layoutService = inject(LayoutService);\n\n\n private readonly sidenav = viewChild(MatSidenav);\n\n public readonly sidenavMode: Signal<MatDrawerMode> = computed(() => this.layoutService.mode());\n public readonly fixedBottomGap: Signal<number> = computed(() => this.layoutService.fixedBottomGap());\n public readonly fixedTopGap: Signal<number> = computed(() => this.layoutService.fixedTopGap());\n public readonly fixedInViewport: Signal<boolean> = computed(() => this.layoutService.fixedInViewport());\n public readonly pinned: Signal<boolean> = computed(() => this.layoutService.pinned());\n public readonly collapsed: Signal<boolean> = computed(() => this.layoutService.collapsed());\n public readonly collapsable: Signal<boolean> = computed(() => this.layoutService.collapsable());\n public readonly opened: Signal<boolean> = computed(() => this.layoutService.opened());\n public readonly sidenavFooterDirective = contentChild(SidenavFooterDirective);\n public readonly sidenavHeaderDirective = contentChild(SidenavHeaderDirective);\n\n togglePinned() {\n this.layoutService.togglePinned();\n }\n\n async openSidenav() {\n await this.sidenav()?.open();\n this.layoutService.openSidenav();\n }\n\n async closeSidenav() {\n await this.sidenav()?.close();\n this.layoutService.closeSidenav();\n }\n\n}\n","<mat-sidenav-container [ngStyle]=\"{\n 'padding-top.px': fixedTopGap(),\n 'padding-bottom.px': fixedBottomGap(),\n }\" class=\"h-full\">\n <mat-sidenav\n [fixedBottomGap]=\"fixedBottomGap()\"\n [fixedInViewport]=\"fixedInViewport()\"\n [fixedTopGap]=\"fixedTopGap()\"\n [mode]=\"sidenavMode()\"\n [ngClass]=\"{ collapsable: collapsable() }\"\n [opened]=\"opened()\"\n >\n <div (mouseleave)=\"collapsable() && !pinned() && closeSidenav()\"\n class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"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 @if (sidenavHeaderDirective()?.template; as template) {\n <div [ngClass]=\"{ hidden: collapsed() }\" class=\"header grow-0\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n <mat-divider [ngClass]=\"{ hidden: collapsed() }\" class=\"grow-0\"></mat-divider>\n }\n\n <ul\n (mouseenter)=\"collapsable() && !pinned() && openSidenav()\"\n class=\"grow self-stretch\"\n [root]=\"true\"\n rxap-navigation\n >\n </ul>\n\n @if (sidenavFooterDirective()?.template; as template) {\n <mat-divider [ngClass]=\"{ hidden: collapsed() }\" class=\"grow-0\"></mat-divider>\n <div [ngClass]=\"{ hidden: collapsed() }\" class=\"footer grow-0\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n }\n </div>\n </mat-sidenav>\n <mat-sidenav-content [ngClass]=\"{ 'ml-16': collapsable() }\" class=\"p-4\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n DetermineReleaseName,\n EnvironmentComponent,\n RXAP_ENVIRONMENT,\n} from '@rxap/environment';\nimport { RXAP_RELEASE_INFO_MODULE } from '../tokens';\nimport { coerceArray } from '@rxap/utilities';\n\n@Component({\n selector: 'rxap-release-info',\n standalone: true,\n imports: [\n MatButton,\n ],\n templateUrl: './release-info.component.html',\n styleUrl: './release-info.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ReleaseInfoComponent {\n\n public readonly modules = coerceArray(inject(RXAP_RELEASE_INFO_MODULE, { optional: true }));\n public readonly release = DetermineReleaseName(inject(RXAP_ENVIRONMENT));\n\n private readonly dialog = inject(MatDialog);\n\n openEnvironmentInfo() {\n this.dialog.open(EnvironmentComponent, {\n closeOnNavigation: true,\n });\n }\n\n}\n","<div class=\"flex flex-col gap-2 w-full justify-center\">\n <button (click)=\"openEnvironmentInfo()\" mat-button>{{ release }}</button>\n @if (modules.length) {\n <table class=\"table-auto border-separate border-spacing-2 bg-white dark:bg-slate-800 text-sm shadow-sm\">\n <thead class=\"bg-slate-50 dark:bg-slate-700\">\n <th class=\"text-sm border-slate-300 dark:border-slate-600 text-slate-900 dark:text-slate-200 border p-2\">Module</th>\n <th class=\"text-sm border-slate-300 dark:border-slate-600 text-slate-900 dark:text-slate-200 border p-2\">Version</th>\n <th class=\"text-sm border-slate-300 dark:border-slate-600 text-slate-900 dark:text-slate-200 border p-2\">Hash</th>\n </thead>\n <tbody>\n @for (module of modules; track module.name) {\n <tr>\n <th class=\"text-sm border border-slate-300 dark:border-slate-700 text-slate-500 dark:text-slate-400 py-2 px-4\">{{ module.name }}</th>\n <td class=\"text-sm border border-slate-300 dark:border-slate-700 text-slate-500 dark:text-slate-400 p-2\">{{ module.version }}</td>\n <td class=\"text-sm border border-slate-300 dark:border-slate-700 text-slate-500 dark:text-slate-400 p-2\">{{ module.hash }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport {\n NavigationCancel,\n NavigationEnd,\n NavigationStart,\n Router,\n} from '@angular/router';\nimport {\n filter,\n map,\n} from 'rxjs/operators';\n\n@Component({\n selector: 'rxap-navigation-progress-bar',\n templateUrl: './navigation-progress-bar.component.html',\n styleUrls: [ './navigation-progress-bar.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatProgressBar,\n ],\n})\nexport class NavigationProgressBarComponent {\n\n public readonly router = inject(Router);\n\n public readonly navigating = toSignal(this.router.events.pipe(\n filter(\n event =>\n event instanceof NavigationStart ||\n event instanceof NavigationEnd ||\n event instanceof NavigationCancel,\n ),\n map(event => event instanceof NavigationStart),\n ), { initialValue: true });\n\n}\n","@if (navigating()) {\n<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar>\n}\n","import { PortalModule } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { FooterService } from '../footer.service';\n\n@Component({\n selector: 'rxap-footer',\n templateUrl: './footer.component.html',\n styleUrls: [ './footer.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [ MatToolbarModule, PortalModule ],\n})\nexport class FooterComponent {\n\n private readonly footerService = inject(FooterService);\n\n public readonly portals = computed(() => this.footerService.portals());\n public readonly hasPortals = computed(() => this.portals().length > 0);\n\n}\n","@if (hasPortals()) {\n <mat-toolbar class=\"mat-elevation-z1\">\n @for (portal of portals(); track portal) {\n <mat-toolbar-row>\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n </mat-toolbar-row>\n }\n </mat-toolbar>\n}\n","import { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport {\n MatToolbar,\n MatToolbarRow,\n} from '@angular/material/toolbar';\nimport { HeaderService } from '../header.service';\n\n@Component({\n selector: 'rxap-header',\n templateUrl: './header.component.html',\n styleUrls: [ './header.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatToolbar,\n MatToolbarRow,\n CdkPortalOutlet,\n ],\n})\nexport class HeaderComponent {\n\n public readonly color = input<ThemePalette>();\n\n private readonly headerService = inject(HeaderService);\n\n public readonly portals = computed(() => this.headerService.portals());\n public readonly hasPortals = computed(() => this.portals().length > 0);\n\n}\n","@if (hasPortals()) {\n <mat-toolbar [color]=\"color()\" class=\"mat-elevation-z1\">\n @for (portal of portals(); track portal) {\n <mat-toolbar-row>\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n </mat-toolbar-row>\n }\n </mat-toolbar>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n} from '@angular/core';\nimport { FooterComponent } from '../footer/footer.component';\nimport { HeaderComponent } from '../header/header.component';\n\n@Component({\n selector: 'rxap-base-layout',\n standalone: true,\n imports: [\n HeaderComponent,\n FooterComponent,\n ],\n templateUrl: './base-layout.component.html',\n styleUrl: './base-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BaseLayoutComponent {}\n","<rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n<ng-content></ng-content>\n<rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n","import {\n ChangeDetectionStrategy,\n Component,\n} from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { BaseLayoutComponent } from '../base-layout/base-layout.component';\nimport { FooterComponent } from '../footer/footer.component';\nimport { HeaderComponent } from '../header/header.component';\nimport { NavigationProgressBarComponent } from '../navigation-progress-bar/navigation-progress-bar.component';\n\n@Component({\n selector: 'rxap-minimal-layout',\n standalone: true,\n imports: [ RouterOutlet, BaseLayoutComponent, NavigationProgressBarComponent, HeaderComponent, FooterComponent ],\n templateUrl: './minimal-layout.component.html',\n styleUrl: './minimal-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MinimalLayoutComponent {}\n","<rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n<rxap-navigation-progress-bar></rxap-navigation-progress-bar>\n<router-outlet></router-outlet>\n<rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n","import {\n computed,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport { ConfigService } from '@rxap/config';\nimport { RXAP_LOGO_CONFIG } from './tokens';\n\n@Injectable()\nexport class LogoService {\n\n private readonly config = inject(ConfigService);\n public readonly logo = signal(\n inject(RXAP_LOGO_CONFIG, { optional: true }) ??\n this.config.get('logo', {\n src: 'logo.png',\n width: 192,\n }),\n );\n\n public readonly src = computed(() => this.logo().src);\n public readonly width = computed(() => this.logo().width);\n public readonly height = computed(() => this.logo().height);\n\n}\n","import {\n AsyncPipe,\n NgClass,\n NgIf,\n NgOptimizedImage,\n NgStyle,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n Signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport {\n RouterLink,\n RouterOutlet,\n} from '@angular/router';\nimport { FooterComponent } from '../footer/footer.component';\nimport { HeaderComponent } from '../header/header.component';\nimport { LogoService } from '../logo.service';\nimport { NavigationProgressBarComponent } from '../navigation-progress-bar/navigation-progress-bar.component';\nimport { NavigationComponent } from '../navigation/navigation.component';\nimport { ReleaseInfoComponent } from '../release-info/release-info.component';\nimport { SidenavFooterDirective } from '../sidenav/sidenav-footer.directive';\nimport { SidenavComponent } from '../sidenav/sidenav.component';\n\n\n@Component({\n selector: 'rxap-layout',\n templateUrl: './layout.component.html',\n styleUrls: [ './layout.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n HeaderComponent,\n MatSidenavModule,\n AsyncPipe,\n MatIconModule,\n MatButtonModule,\n RouterLink,\n NgIf,\n FooterComponent,\n MatMenuModule,\n NgOptimizedImage,\n NavigationComponent,\n RouterOutlet,\n NgStyle,\n NgClass,\n SidenavComponent,\n ReleaseInfoComponent,\n SidenavFooterDirective,\n NavigationProgressBarComponent,\n ],\n})\nexport class LayoutComponent {\n\n private readonly logoService = inject(LogoService);\n public readonly logoSrc: Signal<string> = computed(() => this.logoService.src());\n public readonly logoWidth: Signal<number> = computed(() => this.logoService.width());\n public readonly logoHeight: Signal<number> = computed(() => this.logoService.height());\n\n}\n","<rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n<rxap-navigation-progress-bar></rxap-navigation-progress-bar>\n<rxap-sidenav>\n <router-outlet></router-outlet>\n <ng-template rxapSidenavFooter>\n <img\n [src]=\"logoSrc()\"\n [routerLink]=\"['/']\"\n [width]=\"logoWidth()\"\n [height]=\"logoHeight()\"\n alt=\"logo\"\n class=\"grow-0 mx-16 cursor-pointer\"\n />\n <div class=\"grow-0 px-16 mt-4\">\n <rxap-release-info></rxap-release-info>\n </div>\n </ng-template>\n</rxap-sidenav>\n<rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport {\n Directive,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { HeaderService } from '../header.service';\n\n@Directive({\n selector: '[rxapHeader]',\n standalone: true,\n})\nexport class HeaderDirective implements OnInit, OnDestroy {\n private _portal?: TemplatePortal<void>;\n\n private readonly headerService = inject(HeaderService);\n private readonly template: TemplateRef<void> = inject(TemplateRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n public ngOnInit() {\n this._portal = new TemplatePortal<void>(\n this.template,\n this.viewContainerRef,\n );\n this.headerService.pushPortal(this._portal);\n }\n\n public ngOnDestroy() {\n if (this._portal) {\n this.headerService.removePortal(this._portal);\n }\n }\n}\n\n\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport {\n Directive,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { FooterService } from '../footer.service';\n\n@Directive({\n selector: '[rxapFooter]',\n standalone: true,\n})\nexport class FooterDirective implements OnInit, OnDestroy {\n private _portal?: TemplatePortal<void>;\n\n private readonly footerService = inject(FooterService);\n private readonly template: TemplateRef<void> = inject(TemplateRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n public ngOnInit() {\n this._portal = new TemplatePortal<void>(\n this.template,\n this.viewContainerRef,\n );\n this.footerService.pushPortal(this._portal);\n }\n\n public ngOnDestroy() {\n if (this._portal) {\n this.footerService.removePortal(this._portal);\n }\n }\n}\n\n\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport {\n PubSubService,\n RXAP_TOPICS,\n} from '@rxap/ngx-pub-sub';\nimport { EXTRACT_USERNAME_FROM_PROFILE } from '../../tokens';\nimport { ExtractUsernameFromProfileFn } from '../../types';\n\n@Component({\n selector: 'rxap-user-profile-icon',\n templateUrl: './user-profile-icon.component.html',\n styleUrls: [ './user-profile-icon.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatMenuModule,\n MatIconModule,\n ],\n})\nexport class UserProfileIconComponent {\n\n private readonly extractUsernameFromProfile: ExtractUsernameFromProfileFn = inject(EXTRACT_USERNAME_FROM_PROFILE);\n private readonly pubSubService = inject(PubSubService);\n\n public readonly profile = input.required();\n\n public readonly username = computed(() => {\n const profile = this.profile();\n if (profile) {\n return this.extractUsernameFromProfile(profile);\n }\n return null;\n });\n\n public logout() {\n this.pubSubService.publish(RXAP_TOPICS.authentication.logout);\n }\n\n\n}\n","<button [matMenuTriggerFor]=\"menu\"\n class=\"rounded-full cursor-pointer outline-none overflow-hidden h-8 w-8 bg-center bg-no-repeat bg-cover flex flex-row justify-center items-center\">\n <mat-icon class=\"h-8 w-8 text-[32px]\" svgIcon=\"account-circle\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\" class=\"!max-w-none\">\n @if (this.username(); as username) {\n <button mat-menu-item>\n <span class=\"flex flex-row gap-2\">\n <mat-icon svgIcon=\"account\"></mat-icon>\n <span>{{username}}</span>\n </span>\n </button>\n }\n <button (click)=\"logout()\" mat-menu-item>\n <span class=\"flex flex-row gap-2\">\n <mat-icon svgIcon=\"logout\"></mat-icon>\n <span i18n>Logout</span>\n </span>\n </button>\n</mat-menu>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { LayoutService } from '../../layout.service';\n\n@Component({\n selector: 'rxap-sidenav-toggle-button',\n templateUrl: './sidenav-toggle-button.component.html',\n styleUrls: [ './sidenav-toggle-button.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatIcon,\n MatIconButton,\n ],\n})\nexport class SidenavToggleButtonComponent {\n\n private readonly layoutComponentService = inject(LayoutService);\n\n public readonly opened = computed(() => this.layoutComponentService.opened());\n\n public toggle() {\n this.layoutComponentService.toggleOpened();\n }\n\n}\n","<button (click)=\"toggle()\" mat-icon-button>\n @if (opened()) {\n <mat-icon>menu_open</mat-icon>\n } @else {\n <mat-icon>menu</mat-icon>\n }\n</button>\n","import {\n CdkPortalOutlet,\n ComponentPortal,\n} from '@angular/cdk/portal';\nimport { NgIf } from '@angular/common';\nimport {\n Component,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext,\n signal,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n} from '@angular/material/menu';\nimport { IconDirective } from '@rxap/material-directives/icon';\nimport {\n ThemeService,\n} from '@rxap/ngx-theme';\nimport {\n coerceArray,\n ThemeDensity,\n} from '@rxap/utilities';\nimport {\n RXAP_SETTINGS_MENU_ITEM,\n RXAP_SETTINGS_MENU_ITEM_COMPONENT,\n} from '../../tokens';\nimport { SettingsMenuItem } from '../../types';\n\n@Component({\n selector: 'rxap-settings-button',\n standalone: true,\n templateUrl: './settings-button.component.html',\n styleUrls: [ './settings-button.component.scss' ],\n imports: [\n MatIconButton,\n MatIcon,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n CdkPortalOutlet,\n IconDirective,\n NgIf,\n ],\n})\nexport class SettingsButtonComponent {\n\n public isDevMode = isDevMode();\n\n public readonly theme = inject(ThemeService);\n private readonly injector = inject(Injector);\n\n customItemComponents = signal(\n coerceArray(inject(RXAP_SETTINGS_MENU_ITEM_COMPONENT, { optional: true }))\n .map(item => new ComponentPortal(item, null, this.injector)),\n );\n\n customItems = signal(coerceArray(inject(RXAP_SETTINGS_MENU_ITEM, { optional: true })));\n\n private savePreviewDensityValue = false;\n private currentDensityValue: ThemeDensity | null = null;\n\n private savePreviewTypographyValue = false;\n private currentTypographyValue: string | null = null;\n\n public readonly availableTypographies = this.theme.getAvailableTypographies();\n private savePreviewThemeValue = false;\n\n public readonly availableThemes = this.theme.getAvailableThemes();\n private currentThemeValue: string | null = null;\n\n previewDensity(density: ThemeDensity) {\n this.theme.applyDensity(density);\n }\n\n restoreDensity() {\n this.theme.applyDensity(this.theme.density());\n }\n\n setDensity(density: ThemeDensity) {\n this.theme.setDensity(density);\n }\n\n previewTypography(typography: string) {\n this.theme.applyTypography(typography);\n }\n\n restoreTypography() {\n this.theme.applyTypography(this.theme.typography());\n }\n\n setTypography(typography: string) {\n this.theme.setTypography(typography);\n }\n\n previewTheme(theme: string) {\n this.theme.applyTheme(theme);\n }\n\n restoreTheme() {\n this.theme.applyTheme(this.theme.themeName());\n }\n\n setTheme(theme: string) {\n this.theme.setTheme(theme);\n }\n\n clickItem(item: SettingsMenuItem) {\n runInInjectionContext(this.injector, () => item.action());\n }\n}\n","<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 @if (theme.darkMode()) {\n <mat-icon svgIcon=\"brightness-2\"></mat-icon>\n } @else {\n <mat-icon svgIcon=\"brightness-5\"></mat-icon>\n }\n <span i18n>Mode</span>\n </button>\n <button [matMenuTriggerFor]=\"themeMenu\" mat-menu-item>\n <mat-icon svgIcon=\"compare\"></mat-icon>\n <span i18n>Theme</span>\n </button>\n @for (item of customItems(); track item.label) {\n <button (click)=\"clickItem(item)\" mat-menu-item>\n <mat-icon *ngIf=\"item.icon as icon\" [rxapIcon]=\"icon\"></mat-icon>\n <span>{{ item.label }}</span>\n </button>\n }\n @for (item of customItemComponents(); track item) {\n <ng-template [cdkPortalOutlet]=\"item\"></ng-template>\n }\n</mat-menu>\n\n<mat-menu #themeMenu=\"matMenu\" xPosition=\"before\">\n <button [matMenuTriggerFor]=\"themeDensityMenu\" mat-menu-item>\n <mat-icon svgIcon=\"move-resize\"></mat-icon>\n <span i18n>Density</span>\n </button>\n @if (availableTypographies?.length) {\n <button [matMenuTriggerFor]=\"themeFontMenu\" mat-menu-item>\n <mat-icon svgIcon=\"format-font\"></mat-icon>\n <span i18n>Font</span>\n </button>\n }\n @if (availableThemes?.length) {\n <button [matMenuTriggerFor]=\"themePresetMenu\" mat-menu-item>\n <mat-icon svgIcon=\"shape-outline\"></mat-icon>\n <span i18n>Preset</span>\n </button>\n }\n</mat-menu>\n\n<mat-menu #themeDensityMenu=\"matMenu\" xPosition=\"before\">\n <button (click)=\"setDensity(0)\" (mouseenter)=\"previewDensity(0)\" (mouseleave)=\"restoreDensity()\" mat-menu-item>\n <mat-icon svgIcon=\"size-l\"></mat-icon>\n <span i18n>Normal</span>\n </button>\n <button (click)=\"setDensity(-1)\" (mouseenter)=\"previewDensity(-1)\" (mouseleave)=\"restoreDensity()\" mat-menu-item>\n <mat-icon svgIcon=\"size-m\"></mat-icon>\n <span i18n>Dense</span>\n </button>\n <button (click)=\"setDensity(-2)\" (mouseenter)=\"previewDensity(-2)\" (mouseleave)=\"restoreDensity()\" mat-menu-item>\n <mat-icon svgIcon=\"size-s\"></mat-icon>\n <span i18n>Very Dense</span>\n </button>\n <button (click)=\"setDensity(-3)\" (mouseenter)=\"previewDensity(-3)\" (mouseleave)=\"restoreDensity()\" mat-menu-item>\n <mat-icon svgIcon=\"size-xs\"></mat-icon>\n <span i18n>Extreme Dense</span>\n </button>\n</mat-menu>\n<mat-menu #themeFontMenu=\"matMenu\" xPosition=\"before\">\n @for (typographyName of availableTypographies ?? []; track typographyName) {\n <button (click)=\"setTypography(typographyName)\"\n (mouseenter)=\"previewTypography(typographyName)\"\n (mouseleave)=\"restoreTypography()\"\n mat-menu-item>\n {{ typographyName }}\n </button>\n }\n</mat-menu>\n\n<mat-menu #themePresetMenu=\"matMenu\" xPosition=\"before\">\n @for (themeName of availableThemes ?? []; track themeName) {\n <button (click)=\"setTheme(themeName)\"\n (mouseenter)=\"previewTheme(themeName)\"\n (mouseleave)=\"restoreTheme()\"\n mat-menu-item>\n {{ themeName }}\n </button>\n }\n</mat-menu>\n","import {\n inject,\n Injectable,\n LOCALE_ID,\n signal,\n} from '@angular/core';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { ClickOnLink } from '@rxap/browser-utilities';\nimport { ConfigService } from '@rxap/config';\nimport { RXAP_ENVIRONMENT } from '@rxap/environment';\nimport {\n coerceArray,\n JoinPath,\n} from '@rxap/utilities';\nimport {\n RXAP_EXTERNAL_APP,\n RXAP_EXTERNAL_APP_FILTER,\n} from './tokens';\nimport { ExternalApp } from './types';\n\n@Injectable()\nexport class ExternalAppsService {\n\n protected readonly appFilterList = coerceArray(inject(RXAP_EXTERNAL_APP_FILTER, { optional: true }));\n protected readonly config = inject(ConfigService);\n protected readonly localeId = inject(LOCALE_ID);\n protected readonly environment = inject(RXAP_ENVIRONMENT);\n protected readonly apps: Array<ExternalApp> = this.config.get('navigation.apps', []);\n protected readonly externalApps = coerceArray(inject(RXAP_EXTERNAL_APP, { optional: true }));\n\n /**\n * The list of active apps that is processed by the getAppList method\n */\n public readonly activeAppList = signal<Array<ExternalApp>>([]);\n\n public hasApp(appId: string): boolean {\n return this.apps.some(app => app.id === appId);\n }\n\n public getApp(appId: string): ExternalApp | null {\n if (!this.hasApp(appId)) {\n return null;\n }\n const app = this.apps.find(app => app.id === appId);\n if (!app) {\n throw new Error(`FATAL: App with id \"${ appId }\" not found!`);\n }\n return structuredClone(app);\n }\n\n public getAppUrl(appId: string, path: string, infix: string | null = this.getPathPrefix()): string | null {\n\n const app = this.getApp(appId);\n\n if (!app || !app.href) {\n return null;\n }\n\n return JoinPath(app.href, infix, path);\n\n }\n\n public getAppRouterLink(appId: string, path: string): string[] | null {\n\n const app = this.getApp(appId);\n\n if (!app || !app.routerLink) {\n return null;\n }\n\n return [ ...app.routerLink, path ];\n }\n\n public getAppUrlOrThrow(appId: string, path: string): string {\n const url = this.getAppUrl(appId, path);\n if (url) {\n return url;\n }\n throw new Error(`Could not find url for app with id \"${ appId }\"`);\n }\n\n public getAppRouterLinkOrThrow(appId: string, path: string): string[] {\n const routerLink = this.getAppRouterLink(appId, path);\n if (routerLink) {\n return routerLink;\n }\n throw new Error(`Could not find router link for app with id \"${ appId }\"`);\n }\n\n public navigate(appId: string, path: string): void {\n\n const url = this.getAppUrl(appId, path);\n\n if (url) {\n ClickOnLink(url);\n }\n\n }\n\n public async getAppList(): Promise<Array<ExternalApp>> {\n let appList: ExternalApp[] = [\n ...this.externalApps,\n ...this.apps,\n ].filter(app => !app.hidden)\n .map(app => structuredClone(app));\n\n appList.forEach(app => {\n if (app.href) {\n app.href = JoinPath(app.href, this.getPathPrefix());\n }\n });\n\n for (const appFilter of this.appFilterList) {\n appList = await appFilter.call(structuredClone(appList));\n }\n\n appList = structuredClone(appList);\n this.activeAppList.set(appList);\n return appList;\n }\n\n protected getPathPrefix(): string {\n if (this.environment.production && this.localeId) {\n return this.localeId.replace(/-.+$/, '');\n }\n return '';\n }\n\n}\n","import { NgOptimizedImage } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n signal,\n} from '@angular/core';\nimport {\n MatAnchor,\n MatButton,\n MatIconButton,\n} from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { IconDirective } from '@rxap/material-directives/icon';\nimport { ExternalAppsService } from '../../external-apps.service';\n\n@Component({\n selector: 'rxap-apps-button',\n templateUrl: './apps-button.component.html',\n styleUrls: [ './apps-button.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgOptimizedImage,\n MatButton,\n RouterLink,\n MatAnchor,\n MatIconButton,\n MatIcon,\n IconDirective,\n ],\n})\nexport class AppsButtonComponent implements OnInit {\n /**\n * The signal that indicates if the app list is open\n */\n public readonly isOpen = signal(false);\n\n private readonly externalAppsService = inject(ExternalAppsService);\n public readonly appList = computed(() => this.externalAppsService.activeAppList());\n public readonly hasApps = computed(() => this.appList().length > 0);\n\n public toggle(): void {\n this.isOpen.update(isOpen => !isOpen);\n }\n\n public ngOnInit(): void {\n this.externalAppsService.getAppList();\n }\n\n}\n","@if (hasApps()) {\n <div class=\"flex flex-row items-center gap-8\">\n\n @if (isOpen()) {\n <div class=\"flex flex-row items-center gap-6 h-10\">\n\n @for (app of appList(); track app.label) {\n @if (app.href) {\n <a [href]=\"app.href\" [target]=\"app.target ?? '_self'\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </a>\n } @else if (app.routerLink) {\n <a mat-stroked-button [routerLink]=\"app.routerLink\">\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </a>\n } @else {\n <button mat-stroked-button [disabled]=\"true\">\n <span class=\"flex flex-row items-center gap-4\">\n @if (app.icon) {\n <mat-icon [rxapIcon]=\"app.icon\"></mat-icon>\n }\n @if (app.image) {\n <img [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n }\n <span class=\"label grow-0\">{{ app.label }}</span>\n </span>\n </button>\n }\n }\n\n </div>\n }\n\n <button (click)=\"toggle()\" mat-icon-button>\n <mat-icon svgIcon=\"apps\"></mat-icon>\n </button>\n\n </div>\n}\n","import {\n ComponentPortal,\n Portal,\n} from '@angular/cdk/portal';\nimport {\n computed,\n inject,\n Injectable,\n isDevMode,\n signal,\n} from '@angular/core';\nimport { RXAP_DEFAULT_HEADER_ITEM_COMPONENT } from '../tokens';\nimport { coerceArray } from '@rxap/utilities';\n\n@Injectable()\nexport class DefaultHeaderService {\n\n private readonly components = coerceArray(inject(RXAP_DEFAULT_HEADER_ITEM_COMPONENT, { optional: true }));\n\n /**\n * Represents an array of `Portal` objects with unknown type.\n *\n * @typedef {Array<Portal<unknown>>} SignalPortals\n */\n public readonly portals = signal<Array<Portal<unknown>>>(this.components.map(component => new ComponentPortal(component)));\n\n\n /**\n * Computes the count of portals.\n *\n * @returns {number} The count of portals.\n */\n public readonly portalCount = computed(() => this.portals().length);\n\n\n /**\n * Adds a portal to the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be added.\n *\n * @return {void}\n */\n public pushPortal(portal: Portal<unknown>) {\n if (!this.portals().includes(portal)) {\n this.portals.update(portals => [ ...portals, portal ]);\n } else {\n if (isDevMode()) {\n console.warn('Can not add the same portal multiple times');\n }\n }\n }\n\n /**\n * Removes a portal from the list of portals.\n *\n * @param {Portal<unknown>} portal - The portal to be removed.\n * @return {void}\n */\n public removePortal(portal: Portal<unknown>) {\n const index = this.portals().indexOf(portal);\n if (index !== -1) {\n this.portals.update(portals => {\n portals.splice(index, 1);\n return portals.slice();\n });\n }\n }\n\n}\n","import { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatToolbarRow } from '@angular/material/toolbar';\nimport { HeaderService } from '../header.service';\nimport { LayoutService } from '../layout.service';\nimport { RXAP_USER_PROFILE_DATA_SOURCE } from '../tokens';\nimport { AppsButtonComponent } from './apps-button/apps-button.component';\nimport { DefaultHeaderService } from './default-header.service';\nimport { SettingsButtonComponent } from './settings-button/settings-button.component';\nimport { SidenavToggleButtonComponent } from './sidenav-toggle-button/sidenav-toggle-button.component';\nimport { UserProfileIconComponent } from './user-profile-icon/user-profile-icon.component';\n\n@Component({\n selector: 'rxap-default-header',\n standalone: true,\n imports: [\n AppsButtonComponent,\n SettingsButtonComponent,\n SidenavToggleButtonComponent,\n UserProfileIconComponent,\n MatToolbarRow,\n CdkPortalOutlet,\n ],\n host: {\n 'class': 'grow',\n },\n templateUrl: './default-header.component.html',\n styleUrl: './default-header.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultHeaderComponent {\n\n private readonly layoutComponentService = inject(LayoutService);\n\n public readonly collapsable = computed(() => this.layoutComponentService.collapsable());\n public readonly opened = computed(() => this.layoutComponentService.opened());\n public readonly profile = toSignal(inject(RXAP_USER_PROFILE_DATA_SOURCE).connect('user-profile'), { initialValue: null });\n\n private readonly defaultHeaderService = inject(DefaultHeaderService);\n\n public readonly portals = computed(() => this.defaultHeaderService.portals());\n public readonly hasPortals = computed(() => this.portals().length > 0);\n\n}\n","<div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n @if (!collapsable()) {\n <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>\n }\n <div class=\"grow flex flex-row gap-x-4 items-center\">\n @for (portal of portals(); track portal) {\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n }\n <ng-content></ng-content>\n </div>\n <rxap-apps-button class=\"grow-0\"></rxap-apps-button>\n <rxap-settings-button class=\"grow-0\"></rxap-settings-button>\n @if (this.profile(); as profile) {\n <rxap-user-profile-icon [profile]=\"profile\" class=\"grow-0\"></rxap-user-profile-icon>\n }\n</div>\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Provider } from '@angular/core';\nimport { DataSource } from '@rxap/pattern';\nimport { Constructor } from '@rxap/utilities';\nimport { DefaultHeaderComponent } from './default-header/default-header.component';\nimport { DefaultHeaderService } from './default-header/default-header.service';\nimport { ExternalAppsService } from './external-apps.service';\nimport { FooterService } from './footer.service';\nimport { HeaderService } from './header.service';\nimport { LayoutService } from './layout.service';\nimport { LogoService } from './logo.service';\nimport { NavigationService } from './navigation.service';\nimport { NavigationWithInserts } from './navigation/navigation-item';\nimport {\n RXAP_DEFAULT_HEADER_ITEM_COMPONENT,\n RXAP_EXTERNAL_APP,\n RXAP_FOOTER_COMPONENT,\n RXAP_HEADER_COMPONENT,\n RXAP_NAVIGATION_CONFIG,\n RXAP_NAVIGATION_CONFIG_INSERTS,\n RXAP_RELEASE_INFO_MODULE,\n RXAP_SETTINGS_MENU_ITEM,\n RXAP_SETTINGS_MENU_ITEM_COMPONENT,\n RXAP_USER_PROFILE_DATA_SOURCE,\n} from './tokens';\nimport {\n DefaultHeaderItemComponent,\n ExternalApp,\n ReleaseInfoModule,\n SettingsMenuItem,\n SettingsMenuItemComponent,\n} from './types';\n\nexport function provideLayout(...additionalProviders: Provider[]): Provider[] {\n return [\n LayoutService,\n LogoService,\n HeaderService,\n FooterService,\n DefaultHeaderService,\n ...additionalProviders,\n ];\n}\n\nexport function provideExternalApps(...apps: ExternalApp[]): Provider[] {\n return [\n ExternalAppsService,\n ...apps.map(app => (\n {\n provide: RXAP_EXTERNAL_APP,\n useValue: app,\n multi: true,\n }\n ))\n ];\n}\n\nexport function withNavigationConfig(\n config: NavigationWithInserts | (() => NavigationWithInserts),\n): Provider[] {\n return [\n NavigationService,\n {\n provide: RXAP_NAVIGATION_CONFIG,\n useValue: config,\n },\n ];\n}\n\nexport function withNavigationInserts(inserts: Record<string, NavigationWithInserts>): Provider[] {\n return [{\n provide: RXAP_NAVIGATION_CONFIG_INSERTS,\n useValue: inserts,\n }];\n}\n\nexport function withSettingsMenuItems(...items: Array<SettingsMenuItemComponent | SettingsMenuItem>): Provider[] {\n return [\n ...items.filter((item): item is SettingsMenuItemComponent => typeof item === 'function').map(component => (\n {\n provide: RXAP_SETTINGS_MENU_ITEM_COMPONENT,\n useValue: component,\n multi: true,\n }\n )),\n ...items.filter((item): item is SettingsMenuItem => typeof item !== 'function').map(item => (\n {\n provide: RXAP_SETTINGS_MENU_ITEM,\n useValue: item,\n multi: true,\n }\n )),\n ];\n}\n\nexport function withDefaultHeaderItems(...items: Array<DefaultHeaderItemComponent>): Provider[] {\n return items.map(component => ({\n provide: RXAP_DEFAULT_HEADER_ITEM_COMPONENT,\n useValue: component,\n multi: true,\n }));\n}\n\nexport function withReleaseInfoModules(...module: ReleaseInfoModule[]): Provider[] {\n return module.map(item => (\n {\n provide: RXAP_RELEASE_INFO_MODULE,\n useValue: item,\n multi: true,\n }\n ));\n}\n\nexport function withHeaderComponents(components: Array<ComponentType<unknown>>): Provider[] {\n return components.map(component => (\n {\n provide: RXAP_HEADER_COMPONENT,\n useValue: component,\n }\n ));\n}\n\nexport function withFooterComponents(components: Array<ComponentType<unknown>>): Provider[] {\n return components.map(component => (\n {\n provide: RXAP_FOOTER_COMPONENT,\n useValue: component,\n }\n ));\n}\n\nexport function withDefaultHeaderComponent(): Provider {\n return {\n provide: RXAP_HEADER_COMPONENT,\n useValue: DefaultHeaderComponent,\n };\n}\n\nexport function withUserProfileDataSource(dataSource: Constructor<DataSource>, useClass = false): Provider {\n if (useClass) {\n return {\n provide: RXAP_USER_PROFILE_DATA_SOURCE,\n useClass: dataSource\n };\n } else {\n return {\n provide: RXAP_USER_PROFILE_DATA_SOURCE,\n useExisting: dataSource\n };\n }\n}\n","// region sidenav\nexport * from './lib/sidenav/sidenav-footer.directive';\nexport * from './lib/sidenav/sidenav-header.directive';\nexport * from './lib/sidenav/sidenav.component';\n// endregion\n\n// region release-info\nexport * from './lib/release-info/release-info.component';\n// endregion\n\n// region navigation navigation-item\nexport * from './lib/navigation/navigation-item/navigation-item.component';\n// endregion\n\n// region navigation-progress-bar\nexport * from './lib/navigation-progress-bar/navigation-progress-bar.component';\n// endregion\n\n// region navigation\nexport * from './lib/navigation/navigation-item';\nexport * from './lib/navigation/navigation.component';\n// endregion\n\n// region minimal-layout\nexport * from './lib/minimal-layout/minimal-layout.component';\n// endregion\n\n// region layout\nexport * from './lib/layout/layout.component';\n// endregion\n\n// region header\nexport * from './lib/header/header.component';\nexport * from './lib/header/header.directive';\n// endregion\n\n// region footer\nexport * from './lib/footer/footer.component';\nexport * from './lib/footer/footer.directive';\n// endregion\n\n// region default-header user-profile-icon\nexport * from './lib/default-header/user-profile-icon/user-profile-icon.component';\n// endregion\n\n// region default-header sidenav-toggle-button\nexport * from './lib/default-header/sidenav-toggle-button/sidenav-toggle-button.component';\n// endregion\n\n// region default-header settings-button\nexport * from './lib/default-header/settings-button/settings-button.component';\n// endregion\n\n// region default-header apps-button\nexport * from './lib/default-header/apps-button/apps-button.component';\n// endregion\n\n// region default-header\nexport * from './lib/default-header/default-header.component';\n// endregion\n\n// region base-layout\nexport * from './lib/base-layout/base-layout.component';\n// endregion\n\n// region \nexport * from './lib/external-apps.service';\nexport * from './lib/footer.service';\nexport * from './lib/header.service';\nexport * from './lib/layout.service';\nexport * from './lib/logo.service';\nexport * from './lib/navigation.service';\nexport * from './lib/provide';\nexport * from './lib/tokens';\nexport * from './lib/types';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
@@ -4,6 +4,9 @@ export declare class DefaultHeaderComponent {
4
4
  readonly collapsable: import("@angular/core").Signal<boolean>;
5
5
  readonly opened: import("@angular/core").Signal<boolean>;
6
6
  readonly profile: import("@angular/core").Signal<unknown>;
7
+ private readonly defaultHeaderService;
8
+ readonly portals: import("@angular/core").Signal<import("@angular/cdk/portal").Portal<unknown>[]>;
9
+ readonly hasPortals: import("@angular/core").Signal<boolean>;
7
10
  static ɵfac: i0.ɵɵFactoryDeclaration<DefaultHeaderComponent, never>;
8
11
  static ɵcmp: i0.ɵɵComponentDeclaration<DefaultHeaderComponent, "rxap-default-header", never, {}, {}, never, ["*"], true, never>;
9
12
  }
@@ -0,0 +1,34 @@
1
+ import { Portal } from '@angular/cdk/portal';
2
+ import * as i0 from "@angular/core";
3
+ export declare class DefaultHeaderService {
4
+ private readonly components;
5
+ /**
6
+ * Represents an array of `Portal` objects with unknown type.
7
+ *
8
+ * @typedef {Array<Portal<unknown>>} SignalPortals
9
+ */
10
+ readonly portals: import("@angular/core").WritableSignal<Portal<unknown>[]>;
11
+ /**
12
+ * Computes the count of portals.
13
+ *
14
+ * @returns {number} The count of portals.
15
+ */
16
+ readonly portalCount: import("@angular/core").Signal<number>;
17
+ /**
18
+ * Adds a portal to the list of portals.
19
+ *
20
+ * @param {Portal<unknown>} portal - The portal to be added.
21
+ *
22
+ * @return {void}
23
+ */
24
+ pushPortal(portal: Portal<unknown>): void;
25
+ /**
26
+ * Removes a portal from the list of portals.
27
+ *
28
+ * @param {Portal<unknown>} portal - The portal to be removed.
29
+ * @return {void}
30
+ */
31
+ removePortal(portal: Portal<unknown>): void;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<DefaultHeaderService, never>;
33
+ static ɵprov: i0.ɵɵInjectableDeclaration<DefaultHeaderService>;
34
+ }
package/lib/provide.d.ts CHANGED
@@ -3,12 +3,13 @@ import { Provider } from '@angular/core';
3
3
  import { DataSource } from '@rxap/pattern';
4
4
  import { Constructor } from '@rxap/utilities';
5
5
  import { NavigationWithInserts } from './navigation/navigation-item';
6
- import { ExternalApp, ReleaseInfoModule, SettingsMenuItem, SettingsMenuItemComponent } from './types';
6
+ import { DefaultHeaderItemComponent, ExternalApp, ReleaseInfoModule, SettingsMenuItem, SettingsMenuItemComponent } from './types';
7
7
  export declare function provideLayout(...additionalProviders: Provider[]): Provider[];
8
8
  export declare function provideExternalApps(...apps: ExternalApp[]): Provider[];
9
9
  export declare function withNavigationConfig(config: NavigationWithInserts | (() => NavigationWithInserts)): Provider[];
10
10
  export declare function withNavigationInserts(inserts: Record<string, NavigationWithInserts>): Provider[];
11
11
  export declare function withSettingsMenuItems(...items: Array<SettingsMenuItemComponent | SettingsMenuItem>): Provider[];
12
+ export declare function withDefaultHeaderItems(...items: Array<DefaultHeaderItemComponent>): Provider[];
12
13
  export declare function withReleaseInfoModules(...module: ReleaseInfoModule[]): Provider[];
13
14
  export declare function withHeaderComponents(components: Array<ComponentType<unknown>>): Provider[];
14
15
  export declare function withFooterComponents(components: Array<ComponentType<unknown>>): Provider[];
package/lib/tokens.d.ts CHANGED
@@ -16,4 +16,5 @@ export declare const RXAP_USER_PROFILE_DATA_SOURCE: InjectionToken<DataSource<un
16
16
  export declare const RXAP_EXTERNAL_APP: InjectionToken<import("@rxap/config").AppsNavigationConfig>;
17
17
  export declare const RXAP_RELEASE_INFO_MODULE: InjectionToken<ReleaseInfoModule>;
18
18
  export declare const RXAP_SETTINGS_MENU_ITEM_COMPONENT: InjectionToken<SettingsMenuItemComponent>;
19
+ export declare const RXAP_DEFAULT_HEADER_ITEM_COMPONENT: InjectionToken<ComponentType<unknown>>;
19
20
  export declare const RXAP_SETTINGS_MENU_ITEM: InjectionToken<SettingsMenuItem>;
package/lib/types.d.ts CHANGED
@@ -9,6 +9,7 @@ export interface ReleaseInfoModule {
9
9
  hash?: string;
10
10
  }
11
11
  export type SettingsMenuItemComponent = ComponentType<unknown>;
12
+ export type DefaultHeaderItemComponent = ComponentType<unknown>;
12
13
  export interface SettingsMenuItem {
13
14
  icon?: IconConfig;
14
15
  label: string;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
- "version": "18.2.1-dev.2",
2
+ "version": "18.3.0-dev.1",
3
3
  "name": "@rxap/layout",
4
4
  "license": "GPL-3.0-or-later",
5
5
  "dependencies": {
6
6
  "@nx/devkit": "19.4.2",
7
- "@rxap/ts-morph": "^1.4.4-dev.0",
8
- "@rxap/workspace-ts-morph": "^19.1.4-dev.1",
7
+ "@rxap/ts-morph": "^1.5.0-dev.0",
8
+ "@rxap/workspace-ts-morph": "^19.1.4-dev.2",
9
9
  "@rxap/workspace-utilities": "^19.4.0",
10
10
  "tslib": "2.6.2"
11
11
  },
@@ -151,7 +151,7 @@
151
151
  "directory": "packages/angular/layout"
152
152
  },
153
153
  "sideEffects": false,
154
- "gitHead": "4f4db300cfb5db8aaf0c9736227c9dfe09caecdc",
154
+ "gitHead": "6dffe27d523b5d32b75ed9931e95ad5c7310d74b",
155
155
  "module": "fesm2022/rxap-layout.mjs",
156
156
  "typings": "index.d.ts",
157
157
  "exports": {